From 560904fdf0f5870f0ffa8b4c9ea661feca9e3198 Mon Sep 17 00:00:00 2001 From: Flex Software Development Robot Date: Tue, 6 Oct 2020 01:01:37 +0000 Subject: [PATCH] Release v2.0.0 --- README.md | 18 +- ra/board/ra6m4_ek/board.h | 62 + .../ra6m4_ek/board_ethernet_phy.h} | 64 +- ra/board/ra6m4_ek/board_init.c | 62 + .../ra6m4_ek/board_init.h} | 62 +- ra/board/ra6m4_ek/board_leds.c | 71 + ra/board/ra6m4_ek/board_leds.h | 75 + ra/fsp/inc/api/bsp_api.h | 2 +- ra/fsp/inc/api/r_adc_api.h | 14 + ra/fsp/inc/api/r_ble_api.h | 114 +- ra/fsp/inc/api/r_cac_api.h | 13 + ra/fsp/inc/api/r_can_api.h | 13 + ra/fsp/inc/api/r_cgc_api.h | 21 +- ra/fsp/inc/api/r_ctsu_api.h | 13 + ra/fsp/inc/api/r_doc_api.h | 14 + ra/fsp/inc/api/r_external_irq_api.h | 16 + ra/fsp/inc/api/r_flash_api.h | 13 + ra/fsp/inc/api/r_i2c_master_api.h | 18 +- ra/fsp/inc/api/r_i2c_slave_api.h | 20 +- ra/fsp/inc/api/r_i2s_api.h | 14 + ra/fsp/inc/api/r_ioport_api.h | 4 + ra/fsp/inc/api/r_lpm_api.h | 142 +- ra/fsp/inc/api/r_lvd_api.h | 14 + ra/fsp/inc/api/r_poeg_api.h | 13 + ra/fsp/inc/api/r_rtc_api.h | 13 + ra/fsp/inc/api/r_sdmmc_api.h | 13 + ra/fsp/inc/api/r_spi_api.h | 23 + ra/fsp/inc/api/r_spi_flash_api.h | 44 +- ra/fsp/inc/api/r_three_phase_api.h | 14 + ra/fsp/inc/api/r_timer_api.h | 14 + ra/fsp/inc/api/r_uart_api.h | 14 + ra/fsp/inc/api/r_usb_hhid_api.h | 9 + ra/fsp/inc/api/r_wdt_api.h | 13 + ra/fsp/inc/api/rm_block_media_api.h | 16 + ra/fsp/inc/api/rm_touch_api.h | 41 +- ra/fsp/inc/api/rm_vee_api.h | 13 + ra/fsp/inc/fsp_common_api.h | 11 +- ra/fsp/inc/fsp_features.h | 1 + ra/fsp/inc/fsp_version.h | 10 +- ra/fsp/inc/instances/r_adc.h | 19 +- ra/fsp/inc/instances/r_agt.h | 19 +- ra/fsp/inc/instances/r_cac.h | 15 + ra/fsp/inc/instances/r_can.h | 31 +- ra/fsp/inc/instances/r_cgc.h | 15 +- ra/fsp/inc/instances/r_ctsu.h | 74 +- ra/fsp/inc/instances/r_doc.h | 13 + ra/fsp/inc/instances/r_ether.h | 2 - ra/fsp/inc/instances/r_flash_hp.h | 22 +- ra/fsp/inc/instances/r_flash_lp.h | 4 + ra/fsp/inc/instances/r_gpt.h | 30 +- ra/fsp/inc/instances/r_gpt_three_phase.h | 4 + ra/fsp/inc/instances/r_icu.h | 18 +- ra/fsp/inc/instances/r_iic_master.h | 15 + ra/fsp/inc/instances/r_iic_slave.h | 15 + ra/fsp/inc/instances/r_iwdt.h | 10 + ra/fsp/inc/instances/r_lvd.h | 13 + ra/fsp/inc/instances/r_ospi.h | 179 + ra/fsp/inc/instances/r_poeg.h | 17 +- ra/fsp/inc/instances/r_rtc.h | 18 +- ra/fsp/inc/instances/r_sci_i2c.h | 15 + ra/fsp/inc/instances/r_sci_spi.h | 15 + ra/fsp/inc/instances/r_sci_uart.h | 13 + ra/fsp/inc/instances/r_sdhi.h | 8 + ra/fsp/inc/instances/r_spi.h | 15 + ra/fsp/inc/instances/r_ssi.h | 16 +- ra/fsp/inc/instances/r_usb_hhid.h | 1 + ra/fsp/inc/instances/r_wdt.h | 9 + ra/fsp/inc/instances/rm_block_media_sdmmc.h | 11 +- ra/fsp/inc/instances/rm_block_media_usb.h | 5 + ra/fsp/inc/instances/rm_touch.h | 76 +- ra/fsp/inc/instances/rm_vee_flash.h | 11 + ra/fsp/lib/r_ble/cm4_ac6/all/libr_ble.a | Bin 1479368 -> 1480626 bytes .../lib/r_ble/cm4_ac6/all_freertos/libr_ble.a | Bin 1480768 -> 1481650 bytes ra/fsp/lib/r_ble/cm4_gcc/all/libr_ble.a | Bin 1128076 -> 1128594 bytes .../lib/r_ble/cm4_gcc/all_freertos/libr_ble.a | Bin 1129188 -> 1129426 bytes ra/fsp/lib/r_ble/cm4_iar/all/libr_ble.a | Bin 2515634 -> 2518234 bytes .../lib/r_ble/cm4_iar/all_freertos/libr_ble.a | Bin 2534070 -> 2536488 bytes .../Device/RENESAS/Include/base_addresses.h | 521 + .../cmsis/Device/RENESAS/Include/renesas.h | 23061 +-- .../src/bsp/cmsis/Device/RENESAS/SVD/RA.svd | 121089 ++++++++------- .../bsp/cmsis/Device/RENESAS/Source/startup.c | 4 +- .../bsp/cmsis/Device/RENESAS/Source/system.c | 186 +- ra/fsp/src/bsp/mcu/all/bsp_clocks.c | 422 +- ra/fsp/src/bsp/mcu/all/bsp_clocks.h | 54 +- ra/fsp/src/bsp/mcu/all/bsp_common.h | 32 +- ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h | 35 +- ra/fsp/src/bsp/mcu/all/bsp_group_irq.c | 4 +- ra/fsp/src/bsp/mcu/all/bsp_group_irq.h | 2 + .../mcu/all/bsp_guard.c} | 52 +- .../mcu/all/bsp_guard.h} | 44 +- ra/fsp/src/bsp/mcu/all/bsp_io.h | 18 +- ra/fsp/src/bsp/mcu/all/bsp_irq.c | 42 +- ra/fsp/src/bsp/mcu/all/bsp_irq.h | 2 + ra/fsp/src/bsp/mcu/all/bsp_module_stop.h | 110 +- .../src/bsp/mcu/all/bsp_register_protection.c | 3 +- .../src/bsp/mcu/all/bsp_register_protection.h | 3 + ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c | 79 +- ra/fsp/src/bsp/mcu/all/bsp_security.c | 336 + .../mcu/all/bsp_security.h} | 53 +- ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h | 418 +- ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h | 4 +- ra/fsp/src/bsp/mcu/ra4m1/bsp_feature.h | 418 +- ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h | 4 +- ra/fsp/src/bsp/mcu/ra4w1/bsp_feature.h | 418 +- ra/fsp/src/bsp/mcu/ra4w1/bsp_mcu_info.h | 4 +- ra/fsp/src/bsp/mcu/ra6m1/bsp_feature.h | 411 +- ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h | 4 +- ra/fsp/src/bsp/mcu/ra6m2/bsp_feature.h | 413 +- ra/fsp/src/bsp/mcu/ra6m2/bsp_mcu_info.h | 4 +- ra/fsp/src/bsp/mcu/ra6m3/bsp_feature.h | 413 +- ra/fsp/src/bsp/mcu/ra6m3/bsp_mcu_info.h | 4 +- ra/fsp/src/bsp/mcu/ra6m4/bsp_elc.h | 310 + ra/fsp/src/bsp/mcu/ra6m4/bsp_feature.h | 269 + ra/fsp/src/bsp/mcu/ra6m4/bsp_mcu_info.h | 40 + ra/fsp/src/r_adc/r_adc.c | 115 +- ra/fsp/src/r_agt/r_agt.c | 128 +- ra/fsp/src/r_cac/r_cac.c | 121 +- ra/fsp/src/r_can/r_can.c | 129 +- ra/fsp/src/r_cgc/r_cgc.c | 349 +- ra/fsp/src/r_ctsu/r_ctsu.c | 607 +- ra/fsp/src/r_dmac/r_dmac.c | 4 +- ra/fsp/src/r_doc/r_doc.c | 112 +- ra/fsp/src/r_dtc/r_dtc.c | 22 +- ra/fsp/src/r_ether/r_ether.c | 7 +- .../r_ether_phy_target_ksz8091rnb.c | 18 +- ra/fsp/src/r_flash_hp/r_flash_hp.c | 260 +- ra/fsp/src/r_flash_lp/r_flash_lp.c | 30 +- ra/fsp/src/r_gpt/r_gpt.c | 188 +- .../src/r_gpt_three_phase/r_gpt_three_phase.c | 35 + ra/fsp/src/r_icu/r_icu.c | 105 +- ra/fsp/src/r_iic_master/r_iic_master.c | 133 +- ra/fsp/src/r_iic_slave/r_iic_slave.c | 173 +- ra/fsp/src/r_iwdt/r_iwdt.c | 100 +- ra/fsp/src/r_lpm/r_lpm.c | 60 +- ra/fsp/src/r_lvd/r_lvd.c | 159 +- ra/fsp/src/r_ospi/r_ospi.c | 800 + ra/fsp/src/r_poeg/r_poeg.c | 110 +- ra/fsp/src/r_qspi/r_qspi.c | 4 +- ra/fsp/src/r_rtc/r_rtc.c | 119 +- ra/fsp/src/r_sce/SCE_ProcCommon.h | 5133 +- ra/fsp/src/r_sce/common/hw_sce_common.h | 13 +- .../sce9/plainkey/adaptors/r_sce_AES_adapt.c | 204 + .../sce9/plainkey/adaptors/r_sce_ECC_adapt.c | 305 + .../sce9/plainkey/adaptors/r_sce_HASH_adapt.c | 31 + .../sce9/plainkey/adaptors/r_sce_RSA_adapt.c | 213 + .../src/sce9/plainkey/adaptors/r_sce_adapt.c | 184 + .../plainkey/primitive/hw_sce_p_func000.c | 102 + .../plainkey/primitive/hw_sce_p_func001.c | 136 + .../plainkey/primitive/hw_sce_p_func002.c | 118 + .../plainkey/primitive/hw_sce_p_func027.c | 328 + .../plainkey/primitive/hw_sce_p_func028.c | 185 + .../plainkey/primitive/hw_sce_p_func043.c | 178 + .../plainkey/primitive/hw_sce_p_func044.c | 128 + .../plainkey/primitive/hw_sce_p_func048.c | 78 + .../plainkey/primitive/hw_sce_p_func049.c | 78 + .../plainkey/primitive/hw_sce_p_func050.c | 74 + .../plainkey/primitive/hw_sce_p_func051.c | 73 + .../plainkey/primitive/hw_sce_p_func052.c | 82 + .../plainkey/primitive/hw_sce_p_func053.c | 82 + .../plainkey/primitive/hw_sce_p_func054.c | 74 + .../plainkey/primitive/hw_sce_p_func057.c | 522 + .../plainkey/primitive/hw_sce_p_func058.c | 159 + .../plainkey/primitive/hw_sce_p_func059.c | 108 + .../plainkey/primitive/hw_sce_p_func060.c | 84 + .../plainkey/primitive/hw_sce_p_func061.c | 91 + .../plainkey/primitive/hw_sce_p_func062.c | 91 + .../plainkey/primitive/hw_sce_p_func063.c | 91 + .../plainkey/primitive/hw_sce_p_func064.c | 91 + .../plainkey/primitive/hw_sce_p_func065.c | 484 + .../plainkey/primitive/hw_sce_p_func066.c | 91 + .../plainkey/primitive/hw_sce_p_func067.c | 91 + .../plainkey/primitive/hw_sce_p_func068.c | 108 + .../plainkey/primitive/hw_sce_p_func070.c | 284 + .../plainkey/primitive/hw_sce_p_func071.c | 336 + .../plainkey/primitive/hw_sce_p_func074.c | 90 + .../plainkey/primitive/hw_sce_p_func075.c | 90 + .../plainkey/primitive/hw_sce_p_func076.c | 78 + .../plainkey/primitive/hw_sce_p_func077.c | 78 + .../plainkey/primitive/hw_sce_p_func080.c | 86 + .../plainkey/primitive/hw_sce_p_func081.c | 152 + .../plainkey/primitive/hw_sce_p_func100.c | 85 + .../plainkey/primitive/hw_sce_p_func101.c | 85 + .../plainkey/primitive/hw_sce_p_func102.c | 80 + .../plainkey/primitive/hw_sce_p_func103.c | 116 + .../plainkey/primitive/hw_sce_p_func200.c | 87 + .../plainkey/primitive/hw_sce_p_func202.c | 77 + .../plainkey/primitive/hw_sce_p_func206.c | 76 + .../plainkey/primitive/hw_sce_p_func300.c | 1180 + .../plainkey/primitive/hw_sce_p_func301.c | 264 + .../plainkey/primitive/hw_sce_p_func302.c | 1172 + .../plainkey/primitive/hw_sce_p_func304.c | 2173 + .../plainkey/primitive/hw_sce_p_func307.c | 521 + .../plainkey/primitive/hw_sce_p_func308.c | 427 + .../plainkey/primitive/hw_sce_p_func309.c | 3066 + .../plainkey/primitive/hw_sce_p_func310.c | 197 + .../plainkey/primitive/hw_sce_p_func311.c | 660 + .../plainkey/primitive/hw_sce_p_func312.c | 109 + .../plainkey/primitive/hw_sce_p_func313.c | 91 + .../plainkey/primitive/hw_sce_p_func314.c | 96 + .../plainkey/primitive/hw_sce_p_func315.c | 96 + .../plainkey/primitive/hw_sce_p_func316.c | 703 + .../plainkey/primitive/hw_sce_p_func317.c | 251 + .../plainkey/primitive/hw_sce_p_func318.c | 3214 + .../plainkey/primitive/hw_sce_p_func319.c | 91 + .../plainkey/primitive/hw_sce_p_func320.c | 109 + .../plainkey/primitive/hw_sce_p_func321.c | 91 + .../plainkey/primitive/hw_sce_p_func322.c | 109 + .../plainkey/primitive/hw_sce_p_func323.c | 184 + .../plainkey/primitive/hw_sce_p_func324.c | 944 + .../plainkey/primitive/hw_sce_p_func325.c | 710 + .../sce9/plainkey/primitive/hw_sce_p_p00.c | 74 + .../sce9/plainkey/primitive/hw_sce_p_p01.c | 128 + .../sce9/plainkey/primitive/hw_sce_p_p02.c | 383 + .../sce9/plainkey/primitive/hw_sce_p_p07.c | 201 + .../sce9/plainkey/primitive/hw_sce_p_p08.c | 227 + .../sce9/plainkey/primitive/hw_sce_p_p20.c | 105 + .../sce9/plainkey/primitive/hw_sce_p_p21.c | 140 + .../sce9/plainkey/primitive/hw_sce_p_p26.c | 85 + .../sce9/plainkey/primitive/hw_sce_p_p29a.c | 85 + .../sce9/plainkey/primitive/hw_sce_p_p29f.c | 232 + .../sce9/plainkey/primitive/hw_sce_p_p29i.c | 401 + .../sce9/plainkey/primitive/hw_sce_p_p29t.c | 88 + .../sce9/plainkey/primitive/hw_sce_p_p29u.c | 123 + .../sce9/plainkey/primitive/hw_sce_p_p2b.c | 2301 + .../sce9/plainkey/primitive/hw_sce_p_p32a.c | 85 + .../sce9/plainkey/primitive/hw_sce_p_p32f.c | 301 + .../sce9/plainkey/primitive/hw_sce_p_p32i.c | 516 + .../sce9/plainkey/primitive/hw_sce_p_p32t.c | 88 + .../sce9/plainkey/primitive/hw_sce_p_p32u.c | 123 + .../sce9/plainkey/primitive/hw_sce_p_p34a.c | 85 + .../sce9/plainkey/primitive/hw_sce_p_p34f.c | 232 + .../sce9/plainkey/primitive/hw_sce_p_p34i.c | 240 + .../sce9/plainkey/primitive/hw_sce_p_p34t.c | 88 + .../sce9/plainkey/primitive/hw_sce_p_p34u.c | 123 + .../sce9/plainkey/primitive/hw_sce_p_p36a.c | 85 + .../sce9/plainkey/primitive/hw_sce_p_p36f.c | 301 + .../sce9/plainkey/primitive/hw_sce_p_p36i.c | 249 + .../sce9/plainkey/primitive/hw_sce_p_p36t.c | 88 + .../sce9/plainkey/primitive/hw_sce_p_p36u.c | 123 + .../sce9/plainkey/primitive/hw_sce_p_p40.c | 356 + .../sce9/plainkey/primitive/hw_sce_p_p47f.c | 115 + .../sce9/plainkey/primitive/hw_sce_p_p47i.c | 371 + .../sce9/plainkey/primitive/hw_sce_p_p47u.c | 175 + .../sce9/plainkey/primitive/hw_sce_p_p50f.c | 115 + .../sce9/plainkey/primitive/hw_sce_p_p50i.c | 407 + .../sce9/plainkey/primitive/hw_sce_p_p50u.c | 180 + .../sce9/plainkey/primitive/hw_sce_p_p56.c | 392 + .../sce9/plainkey/primitive/hw_sce_p_p57.c | 387 + .../sce9/plainkey/primitive/hw_sce_p_p6e.c | 246 + .../sce9/plainkey/primitive/hw_sce_p_p72.c | 150 + .../sce9/plainkey/primitive/hw_sce_p_p76f.c | 313 + .../sce9/plainkey/primitive/hw_sce_p_p76i.c | 339 + .../sce9/plainkey/primitive/hw_sce_p_p76u.c | 72 + .../sce9/plainkey/primitive/hw_sce_p_p79.c | 831 + .../sce9/plainkey/primitive/hw_sce_p_p7b.c | 787 + .../sce9/plainkey/primitive/hw_sce_p_p9a.c | 682 + .../sce9/plainkey/primitive/hw_sce_p_p9b.c | 614 + .../sce9/plainkey/primitive/hw_sce_p_pe2.c | 639 + .../sce9/plainkey/primitive/hw_sce_p_pf0.c | 1598 + .../sce9/plainkey/primitive/hw_sce_p_pf1.c | 2605 + .../sce9/plainkey/primitive/hw_sce_p_pf4.c | 850 + .../sce9/plainkey/primitive/hw_sce_p_pf5.c | 1543 + .../sce9/plainkey/primitive/hw_sce_p_pf6.c | 2581 + .../sce9/plainkey/primitive/hw_sce_p_pf9.c | 806 + .../plainkey/primitive/hw_sce_p_subprc01.c | 213 + .../src/sce9/plainkey/primitive/s_flash2.c | 761 + .../sce9/plainkey/private/inc/SCE_module.h | 30 + .../plainkey/private/inc/hw_sce_ra_private.h | 589 + .../src/sce9/plainkey/public/inc/r_sce_if.h | 1123 + ra/fsp/src/r_sce/hw_sce_aes_private.h | 20 + ra/fsp/src/r_sce/hw_sce_ecc_private.h | 18 + ra/fsp/src/r_sce/hw_sce_hash_private.h | 6 +- ra/fsp/src/r_sce/hw_sce_private.h | 72 +- ra/fsp/src/r_sce/hw_sce_rsa_private.h | 13 + ra/fsp/src/r_sce/ra2/SC324_private.h | 7 +- ra/fsp/src/r_sce/ra2/SC324_utils.c | 51 + ra/fsp/src/r_sce/ra2/SCE_module.h | 30 + .../src/r_sce/ra4_sce5/SC327_SoftReset.prc.c | 2 +- ra/fsp/src/r_sce/ra4_sce5/SC327_p01.prc.c | 4 +- ra/fsp/src/r_sce/ra4_sce5/SC327_utils.c | 65 + ra/fsp/src/r_sce/ra4_sce5/SCE_module.h | 29 + ra/fsp/src/r_sce/ra6_sce7/SC32_utils.c | 50 + ra/fsp/src/r_sce/ra6_sce7/SCE_module.h | 30 + ra/fsp/src/r_sci_i2c/r_sci_i2c.c | 115 +- ra/fsp/src/r_sci_spi/r_sci_spi.c | 136 +- ra/fsp/src/r_sci_uart/r_sci_uart.c | 170 +- ra/fsp/src/r_sdhi/r_sdhi.c | 193 +- ra/fsp/src/r_spi/r_spi.c | 144 +- ra/fsp/src/r_ssi/r_ssi.c | 164 +- .../src/driver/inc/r_usb_basic_define.h | 8 +- ra/fsp/src/r_usb_pmsc/src/inc/r_usb_patapi.h | 2 +- .../r_usb_pmsc/src/inc/r_usb_pmsc_driver.h | 11 +- .../src/r_usb_pmsc/src/r_media_driver_api.c | 9 + .../src/r_usb_pmsc/src/r_usb_atapi_driver.c | 73 +- ra/fsp/src/r_wdt/r_wdt.c | 113 +- .../rm_aws_pkcs11_pal/inc/rm_aws_pkcs11_pal.h | 7 +- .../src/rm_aws_pkcs11_pal/rm_aws_pkcs11_pal.c | 34 +- .../rm_aws_pkcs11_pal_littlefs.c | 42 +- ra/fsp/src/rm_bl2_port/tfm_common_config.h | 26 + .../rm_block_media_sdmmc.c | 152 +- .../rm_block_media_usb/rm_block_media_usb.c | 42 +- .../rm_freertos_plus_tcp/NetworkInterface.c | 13 +- .../src/rm_littlefs_flash/rm_littlefs_flash.c | 4 +- ra/fsp/src/rm_psa_crypto/aes_alt_process.c | 52 +- ra/fsp/src/rm_psa_crypto/ctr_drbg_alt.c | 1591 + ra/fsp/src/rm_psa_crypto/ecdsa_alt.c | 175 +- ra/fsp/src/rm_psa_crypto/ecp_alt_process.c | 202 +- ra/fsp/src/rm_psa_crypto/inc/aes_alt.h | 5 +- .../src/rm_psa_crypto/inc/asymmetric_vendor.h | 42 +- ra/fsp/src/rm_psa_crypto/inc/ctr_drbg_alt.h | 575 + ra/fsp/src/rm_psa_crypto/inc/ecp_alt.h | 1 - ra/fsp/src/rm_psa_crypto/inc/rsa_alt.h | 62 +- ra/fsp/src/rm_psa_crypto/platform_alt.c | 32 +- ra/fsp/src/rm_psa_crypto/rsa_alt_process.c | 108 +- .../ra/CMSIS_Driver/Driver_Flash.c | 609 + .../ra/CMSIS_Driver/Driver_QSPI_Flash.c | 176 + .../ra/CMSIS_Driver/Driver_USART.c | 279 + .../rm_tfm_port/ra/Device/Config/device_cfg.h | 33 + .../src/rm_tfm_port/ra/Device/Include/cmsis.h | 71 + .../ra/Device/Include/platform_base_address.h | 34 + .../ra/Device/Include/platform_description.h | 25 + .../ra/Device/Include/platform_irq.h | 39 + .../ra/Device/Include/platform_pins.h | 27 + .../ra/Device/Include/platform_regs.h | 23 + .../ra/Device/Include/system_core_init.h | 39 + .../ra/Device/Source/system_core_init.c | 89 + .../ra/Native_Driver/mpu_armv8m_drv.c | 152 + .../ra/Native_Driver/mpu_armv8m_drv.h | 143 + ra/fsp/src/rm_tfm_port/ra/attest_hal.c | 134 + ra/fsp/src/rm_tfm_port/ra/boot_hal.c | 180 + ra/fsp/src/rm_tfm_port/ra/crypto_keys.c | 118 + ra/fsp/src/rm_tfm_port/ra/inc/rm_tfm_port.h | 33 + ra/fsp/src/rm_tfm_port/ra/nv_counters.c | 197 + .../rm_tfm_port/ra/partition/flash_layout.h | 200 + .../rm_tfm_port/ra/partition/region_defs.h | 137 + .../ra/services/include/tfm_ioctl_api.h | 310 + .../ra/services/src/tfm_ioctl_s_api.c | 308 + .../ra/services/src/tfm_platform_system.c | 142 + ra/fsp/src/rm_tfm_port/ra/spm_hal.c | 297 + ra/fsp/src/rm_tfm_port/ra/target_cfg.c | 140 + ra/fsp/src/rm_tfm_port/ra/target_cfg.h | 98 + .../ra/tfm_initial_attestation_key_material.c | 83 + .../src/rm_tfm_port/ra/tfm_peripherals_def.h | 39 + ra/fsp/src/rm_tfm_port/tfm_common_config.h | 26 + ra/fsp/src/rm_touch/rm_touch.c | 880 +- ra/fsp/src/rm_tz_context/tz_context.c | 224 + ra/fsp/src/rm_vee_flash/rm_vee_flash.c | 122 +- .../rm_wifi_onchip_silex/aws_secure_sockets.c | 203 +- 348 files changed, 153447 insertions(+), 67124 deletions(-) create mode 100644 ra/board/ra6m4_ek/board.h rename ra/{fsp/src/r_sce/ra2/SC324_p02.prc.c => board/ra6m4_ek/board_ethernet_phy.h} (56%) create mode 100644 ra/board/ra6m4_ek/board_init.c rename ra/{fsp/src/r_sce/ra4_sce5/SC327_p99.prc.c => board/ra6m4_ek/board_init.h} (58%) create mode 100644 ra/board/ra6m4_ek/board_leds.c create mode 100644 ra/board/ra6m4_ek/board_leds.h create mode 100644 ra/fsp/inc/instances/r_ospi.h create mode 100644 ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/base_addresses.h rename ra/fsp/src/{r_sce/ra2/SC324_p99.prc.c => bsp/mcu/all/bsp_guard.c} (64%) rename ra/fsp/src/{r_sce/ra2/SC324_SoftReset.prc.c => bsp/mcu/all/bsp_guard.h} (68%) create mode 100644 ra/fsp/src/bsp/mcu/all/bsp_security.c rename ra/fsp/src/{r_sce/ra2/SC324_p01.prc.c => bsp/mcu/all/bsp_security.h} (59%) create mode 100644 ra/fsp/src/bsp/mcu/ra6m4/bsp_elc.h create mode 100644 ra/fsp/src/bsp/mcu/ra6m4/bsp_feature.h create mode 100644 ra/fsp/src/bsp/mcu/ra6m4/bsp_mcu_info.h create mode 100644 ra/fsp/src/r_ospi/r_ospi.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_AES_adapt.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_ECC_adapt.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_HASH_adapt.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_RSA_adapt.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_adapt.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func000.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func001.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func002.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func027.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func028.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func043.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func044.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func048.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func049.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func050.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func051.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func052.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func053.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func054.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func057.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func058.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func059.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func060.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func061.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func062.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func063.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func064.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func065.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func066.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func067.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func068.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func070.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func071.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func074.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func075.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func076.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func077.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func080.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func081.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func100.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func101.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func102.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func103.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func200.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func202.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func206.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func300.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func301.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func302.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func304.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func307.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func308.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func309.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func310.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func311.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func312.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func313.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func314.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func315.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func316.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func317.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func318.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func319.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func320.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func321.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func322.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func323.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func324.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func325.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p00.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p01.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p02.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p07.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p08.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p20.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p21.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p26.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29a.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29t.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p2b.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32a.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32t.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34a.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34t.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36a.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36t.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p40.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p56.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p57.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p6e.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p72.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76f.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76i.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76u.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p79.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p7b.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9a.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9b.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pe2.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf0.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf1.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf4.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf5.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf6.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf9.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_subprc01.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/s_flash2.c create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/SCE_module.h create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/hw_sce_ra_private.h create mode 100644 ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/public/inc/r_sce_if.h create mode 100644 ra/fsp/src/r_sce/ra2/SC324_utils.c create mode 100644 ra/fsp/src/r_sce/ra2/SCE_module.h create mode 100644 ra/fsp/src/r_sce/ra4_sce5/SC327_utils.c create mode 100644 ra/fsp/src/r_sce/ra4_sce5/SCE_module.h create mode 100644 ra/fsp/src/r_sce/ra6_sce7/SC32_utils.c create mode 100644 ra/fsp/src/r_sce/ra6_sce7/SCE_module.h create mode 100644 ra/fsp/src/rm_bl2_port/tfm_common_config.h create mode 100644 ra/fsp/src/rm_psa_crypto/ctr_drbg_alt.c create mode 100644 ra/fsp/src/rm_psa_crypto/inc/ctr_drbg_alt.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_Flash.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_QSPI_Flash.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_USART.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Config/device_cfg.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/cmsis.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_base_address.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_description.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_irq.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_pins.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_regs.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Include/system_core_init.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/Device/Source/system_core_init.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/attest_hal.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/boot_hal.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/crypto_keys.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/inc/rm_tfm_port.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/nv_counters.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/partition/flash_layout.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/partition/region_defs.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/services/include/tfm_ioctl_api.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/services/src/tfm_ioctl_s_api.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/services/src/tfm_platform_system.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/spm_hal.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/target_cfg.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/target_cfg.h create mode 100644 ra/fsp/src/rm_tfm_port/ra/tfm_initial_attestation_key_material.c create mode 100644 ra/fsp/src/rm_tfm_port/ra/tfm_peripherals_def.h create mode 100644 ra/fsp/src/rm_tfm_port/tfm_common_config.h create mode 100644 ra/fsp/src/rm_tz_context/tz_context.c diff --git a/README.md b/README.md index cece93d4d..01a4f8bd5 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ - ## Overview + Flexible Software Package (FSP) for Renesas RA MCU Family FSP is the next generation Arm® MCU software package from Renesas, that enables secure devices and IoT connectivity through production ready peripheral drivers, FreeRTOS, and portable middleware stacks. FSP includes best-in-class HAL drivers with high performance and low memory footprint. Middleware stacks with FreeRTOS integration are included to ease implementation of complex modules like communication and security. -The e² studio ISDE provides support with intuitive configurators and intelligent code generation to make programming and debugging easier and faster. +The e² studio ISDE provides support with intuitive configurators and intelligent code generation to make programming and debugging easier and faster. -FSP uses an open software ecosystem and provides flexibility in using your preferred RTOS, legacy code, and third-party ecosystem solutions. +FSP uses an open software ecosystem and provides flexibility in using your preferred RTOS, legacy code, and third-party ecosystem solutions. Download the latest FSP version from the [Releases page](https://github.com/renesas/fsp/releases). ### Supported RA MCU Kits + - EK-RA2A1 - EK-RA4M1 - EK-RA4W1 @@ -18,14 +19,18 @@ Download the latest FSP version from the [Releases page](https://github.com/rene - EK-RA6M2 - EK-RA6M3 - EK-RA6M3G +- EK-RA6M4 ### Setup Instructions #### For existing users that are using FSP with e² studio +FSP versions of 2.0.0 and later require a minimum e² studio version of 2020-10. + If you have already installed a previous FSP release that included e² studio then you can download the packs separately. These are available for download under the Assets section for each release. There is a zipped version, FSP_Packs_\.zip, and an installer version, FSP_Packs_\.exe. #### For new users that are using FSP with e² studio + 1. Download the FSP with e² studio Installer from the Assets section of the [latest release](https://github.com/renesas/fsp/releases). 2. Run the installer. This will install the e² studio tool, FSP packs, GCC toolchain and other tools required to use this software. No additional installations are required. @@ -34,9 +39,12 @@ If you have already installed a previous FSP release that included e² studio th 1. See [RA SC User Guide for MDK and IAR](https://renesas.github.io/fsp/_s_t_a_r_t__d_e_v.html#RASC-MDK-IAR-user-guide). ### Starting Development -1. Open e² studio and click File > New > RA C/C++ Project. + +1. Open e² studio and click File > New > C/C++ Project. +2. In the window that pops up, choose Renesas RA in the left pane. ### Related Links + FSP Releases : https://github.com/renesas/fsp/releases FSP Documentation : https://renesas.github.io/fsp @@ -53,4 +61,4 @@ Example Projects : www.renesas.com/ra/example-projects Knowledge Base: https://en-support.renesas.com/knowledgeBase/category/31087 -Support: www.renesas.com/support +Support: www.renesas.com/support diff --git a/ra/board/ra6m4_ek/board.h b/ra/board/ra6m4_ek/board.h new file mode 100644 index 000000000..3135cd3b1 --- /dev/null +++ b/ra/board/ra6m4_ek/board.h @@ -0,0 +1,62 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARDS + * @defgroup BOARD_RA6M4_EK BSP for the RA6M4-EK board + * @brief BSP for the RA6M4-EK Board + * + * The RA6M4_EK is a development kit for the Renesas R7FA6M4AF3CFB microcontroller in a LQFP144 package. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_H +#define BOARD_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP Board Specific Includes. */ +#include "board_init.h" +#include "board_leds.h" +#include "board_ethernet_phy.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BOARD_RA6M4_EK + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end defgroup BOARD_RA6M4_EK) */ + +#endif diff --git a/ra/fsp/src/r_sce/ra2/SC324_p02.prc.c b/ra/board/ra6m4_ek/board_ethernet_phy.h similarity index 56% rename from ra/fsp/src/r_sce/ra2/SC324_p02.prc.c rename to ra/board/ra6m4_ek/board_ethernet_phy.h index acd27b043..a9d666b73 100644 --- a/ra/fsp/src/r_sce/ra2/SC324_p02.prc.c +++ b/ra/board/ra6m4_ek/board_ethernet_phy.h @@ -18,31 +18,43 @@ * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. **********************************************************************************************************************/ -///////////////////////////////////////////////////////////////////////////////////////// -// // -// Procedure number: 02 // -// File name : SC324_p02.prc // -// State Diagram : main(FSM1) // -// Start State : main01 // -// End State : Pass :main03, Retry :main01 // -// Input Data : void // -// Output Data : void // -// Return value : Pass, Retry, Resource_Conflict // -// -------------------------------------------------------------------------------------// -// total cycle : polling + write access + read access // -// polling : cycle // -// polling access : times // -// write access : times // -// read access : times // -///////////////////////////////////////////////////////////////////////////////////////// - -#include "hw_sce_private.h" -#include "fsp_common_api.h" - /*******************************************************************************************************************//** - * TSIP Initialization2 - * @retval FSP_SUCCESS The operation completed successfully. + * @ingroup BOARD_RA6M4_EK + * @defgroup BOARD_RA6M4_EK_ETHERNET_PHY Board Ethernet Phy + * @brief Ethernet Phy information for this board. + * + * This is code specific to the RA6M4_EK board. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_ETHERNET_PHY_H +#define BSP_ETHERNET_PHY_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 BOARD_PHY_TYPE (1) +#define BOARD_PHY_REF_CLK (1) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Public Functions **********************************************************************************************************************/ -fsp_err_t HW_SCE_Initialization2 () { - return FSP_SUCCESS; -} + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RA6M4_EK_ETHERNET_PHY) */ diff --git a/ra/board/ra6m4_ek/board_init.c b/ra/board/ra6m4_ek/board_init.c new file mode 100644 index 000000000..188fd9a5b --- /dev/null +++ b/ra/board/ra6m4_ek/board_init.c @@ -0,0 +1,62 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA6M4_EK + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if defined(BOARD_RA6M4_EK) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Performs any initialization specific to this BSP. + * + * @param[in] p_args Pointer to arguments of the user's choice. + **********************************************************************************************************************/ +void bsp_init (void * p_args) +{ + FSP_PARAMETER_NOT_USED(p_args); +} + +#endif + +/** @} (end addtogroup BOARD_RA6M4_EK) */ diff --git a/ra/fsp/src/r_sce/ra4_sce5/SC327_p99.prc.c b/ra/board/ra6m4_ek/board_init.h similarity index 58% rename from ra/fsp/src/r_sce/ra4_sce5/SC327_p99.prc.c rename to ra/board/ra6m4_ek/board_init.h index c2dfd11c0..20a6ac4b3 100644 --- a/ra/fsp/src/r_sce/ra4_sce5/SC327_p99.prc.c +++ b/ra/board/ra6m4_ek/board_init.h @@ -18,31 +18,41 @@ * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. **********************************************************************************************************************/ -////////////////////////////////////////////////////////////////////////// -// // -// Procedure number: 99 // -// File name : SC327_p99.prc // -// State Diagram : main(FSM1) // -// Start State : main02 // -// End State : main03 // -// Input Data : void // -// Output Data : void // -// Return value : Pass, Resource_Conflict // -// ----------------------------------------------------------------------// -// total cycle : polling + write access + read access // -// polling : TBD // -// polling access : TBD // -// write access : TBD // -// read access : TBD // -////////////////////////////////////////////////////////////////////////// - -#include "SCE_ProcCommon.h" -#include "hw_sce_private.h" - /*******************************************************************************************************************//** - * Secure Boot procedure - * @retval FSP_SUCCESS The operation completed successfully. + * @addtogroup BOARD_RA6M4_EK + * @brief Board specific code for the RA6M4-EK Board + * + * This include file is specific to the RA6M4-EK board. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_INIT_H +#define BOARD_INIT_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) **********************************************************************************************************************/ -fsp_err_t HW_SCE_secureBoot (void) { - return FSP_SUCCESS; -} +void bsp_init(void * p_args); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end addtogroup BOARD_RA6M4_EK) */ diff --git a/ra/board/ra6m4_ek/board_leds.c b/ra/board/ra6m4_ek/board_leds.c new file mode 100644 index 000000000..a1b3b0bc5 --- /dev/null +++ b/ra/board/ra6m4_ek/board_leds.c @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA6M4_EK_LEDS + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#if defined(BOARD_RA6M4_EK) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** Array of LED IOPORT pins. */ +static const uint16_t g_bsp_prv_leds[] = +{ + (uint16_t) BSP_IO_PORT_04_PIN_15, ///< LED1 + (uint16_t) BSP_IO_PORT_04_PIN_04, ///< LED2 + (uint16_t) BSP_IO_PORT_04_PIN_00, ///< LED3 +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/** Structure with LED information for this board. */ + +const bsp_leds_t g_bsp_leds = +{ + .led_count = (uint16_t) ((sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds[0]))), + .p_leds = &g_bsp_prv_leds[0] +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +#endif + +/** @} (end addtogroup BOARD_RA6M4_EK_LEDS) */ diff --git a/ra/board/ra6m4_ek/board_leds.h b/ra/board/ra6m4_ek/board_leds.h new file mode 100644 index 000000000..dd536e87a --- /dev/null +++ b/ra/board/ra6m4_ek/board_leds.h @@ -0,0 +1,75 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RA6M4_EK + * @defgroup BOARD_RA6M4_EK_LEDS Board LEDs + * @brief LED information for this board. + * + * This is code specific to the EK board. It includes info on the number of LEDs and which pins are they + * are on. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_LEDS_H +#define BOARD_LEDS_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Information on how many LEDs and what pins they are on. */ +typedef struct st_bsp_leds +{ + uint16_t led_count; ///< The number of LEDs on this board + uint16_t const * p_leds; ///< Pointer to an array of IOPORT pins for controlling LEDs +} bsp_leds_t; + +/** Available user-controllable LEDs on this board. These enums can be can be used to index into the array of LED pins + * found in the bsp_leds_t structure. */ +typedef enum e_bsp_led +{ + BSP_LED_LED1, ///< LED1 + BSP_LED_LED2, ///< LED2 + BSP_LED_LED3, ///< 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 this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RA6M4_EK_LEDS) */ diff --git a/ra/fsp/inc/api/bsp_api.h b/ra/fsp/inc/api/bsp_api.h index 54e0465e8..50a91d586 100644 --- a/ra/fsp/inc/api/bsp_api.h +++ b/ra/fsp/inc/api/bsp_api.h @@ -62,13 +62,13 @@ #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" /** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ diff --git a/ra/fsp/inc/api/r_adc_api.h b/ra/fsp/inc/api/r_adc_api.h index 843026d10..795c90dc4 100644 --- a/ra/fsp/inc/api/r_adc_api.h +++ b/ra/fsp/inc/api/r_adc_api.h @@ -295,6 +295,20 @@ typedef struct st_adc_api */ fsp_err_t (* offsetSet)(adc_ctrl_t * const p_ctrl, adc_channel_t const reg_id, int32_t const offset); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_ADC_CallbackSet() + * + * @param[in] p_ctrl Pointer to the ADC 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)(adc_ctrl_t * const p_api_ctrl, void (* p_callback)(adc_callback_args_t *), + void const * const p_context, adc_callback_args_t * const p_callback_memory); + /** Close the specified ADC unit by ending any scan in progress, disabling interrupts, and removing power to the * specified A/D unit. * @par Implemented as diff --git a/ra/fsp/inc/api/r_ble_api.h b/ra/fsp/inc/api/r_ble_api.h index 61cbae149..77163ddef 100644 --- a/ra/fsp/inc/api/r_ble_api.h +++ b/ra/fsp/inc/api/r_ble_api.h @@ -50,7 +50,7 @@ FSP_HEADER /********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ -#define BLE_API_VERSION_MAJOR (1U) +#define BLE_API_VERSION_MAJOR (2U) #define BLE_API_VERSION_MINOR (0U) /* =================================================== Main Macro =================================================== */ @@ -59,13 +59,13 @@ FSP_HEADER * @def BLE_VERSION_MAJOR * BLE Module Major Version. */ -#define BLE_VERSION_MAJOR (0x0000) +#define BLE_VERSION_MAJOR (0x0002) /** * @def BLE_VERSION_MINOR * BLE Module Minor Version. */ -#define BLE_VERSION_MINOR (0x0009) +#define BLE_VERSION_MINOR (0x0000) /** * @def BLE_LIB_ALL_FEATS @@ -550,37 +550,37 @@ enum RBLE_STATUS_enum * @def BLE_GAP_LIST_ADD_DEV * @brief Add the device to the list. */ -#define BLE_GAP_LIST_ADD_DEV (0x01) +#define BLE_GAP_LIST_ADD_DEV (0x01) /** * @def BLE_GAP_LIST_REM_DEV * @brief Delete the device from the list. */ -#define BLE_GAP_LIST_REM_DEV (0x02) +#define BLE_GAP_LIST_REM_DEV (0x02) /** * @def BLE_GAP_LIST_CLR * @brief Clear the list. */ -#define BLE_GAP_LIST_CLR (0x03) +#define BLE_GAP_LIST_CLR (0x03) /** * @def BLE_GAP_WHITE_LIST_MAX_ENTRY * @brief The maximum entry number of White List. */ -#define BLE_GAP_WHITE_LIST_MAX_ENTRY (0x04) +#define BLE_GAP_WHITE_LIST_MAX_ENTRY (0x04) /** * @def BLE_GAP_RSLV_LIST_MAX_ENTRY * @brief The maximum entry number of Resolving List. */ -#define BLE_GAP_RSLV_LIST_MAX_ENTRY (0x08) +#define BLE_GAP_RSLV_LIST_MAX_ENTRY (0x08) /** * @def BLE_GAP_PERD_LIST_MAX_ENTRY * @brief The maximum entry number of Periodic Advertiser List. */ -#define BLE_GAP_PERD_LIST_MAX_ENTRY (0x04) +#define BLE_GAP_PERD_LIST_MAX_ENTRY (0x04) /* Set Address Resolution */ @@ -588,13 +588,13 @@ enum RBLE_STATUS_enum * @def BLE_GAP_RPA_DISABLED * @brief Disable RPA generation/resolution. */ -#define BLE_GAP_RPA_DISABLED (0x00) +#define BLE_GAP_RPA_DISABLED (0x00) /** * @def BLE_GAP_RPA_ENABLED * @brief Enable RPA generation/resolution. */ -#define BLE_GAP_RPA_ENABLED (0x01) +#define BLE_GAP_RPA_ENABLED (0x01) /* Set Local IRK type */ @@ -602,13 +602,13 @@ enum RBLE_STATUS_enum * @def BLE_GAP_RL_LOC_KEY_ALL_ZERO * @brief All-zero IRK. */ -#define BLE_GAP_RL_LOC_KEY_ALL_ZERO (0x00) +#define BLE_GAP_RL_LOC_KEY_ALL_ZERO (0x00) /** * @def BLE_GAP_RL_LOC_KEY_REGISTERED * @brief The IRK registered by R_BLE_GAP_SetLocIdInfo(). */ -#define BLE_GAP_RL_LOC_KEY_REGISTERED (0x01) +#define BLE_GAP_RL_LOC_KEY_REGISTERED (0x01) /* Number of advertising set supported */ @@ -616,7 +616,11 @@ enum RBLE_STATUS_enum * @def BLE_MAX_NO_OF_ADV_SETS_SUPPORTED * @brief The maximum number of advertising set for the Abstraction API. */ -#define BLE_MAX_NO_OF_ADV_SETS_SUPPORTED (BLE_ABS_CFG_RF_ADVERTISING_SET_MAXIMUM) +#if (BLE_CFG_LIBRARY_TYPE == 0) + #define BLE_MAX_NO_OF_ADV_SETS_SUPPORTED (4) +#else /* (BLE_CFG_LIB_TYPE == 0) */ + #define BLE_MAX_NO_OF_ADV_SETS_SUPPORTED (1) +#endif /* (BLE_CFG_LIB_TYPE == 0) */ /* Advertising Properties */ /* Legacy Advertising PDU */ @@ -9660,6 +9664,18 @@ typedef struct void * p_param; } st_ble_vs_evt_data_t; +/******************************************************************************************************************//** + * @struct st_ble_vs_get_scan_ch_map_comp_evt_t + * @brief This structure notifies that current scan channel map. + **********************************************************************************************************************/ +typedef struct +{ + /** + * @brief The result of current scan channel map. + */ + uint8_t ch_map; +} st_ble_vs_get_scan_ch_map_comp_evt_t; + /******************************************************************************************************************//** * @typedef ble_vs_app_cb_t * @brief ble_vs_app_cb_t is the Vendor Specific Event callback function type. @@ -9993,6 +10009,50 @@ typedef enum */ BLE_VS_EVENT_FAIL_DETECT = 0x800D, + /** + * @brief This event notifies that scan channel map has been set by R_BLE_VS_SetScanChMap(). + * + * ## Event Code: 0x800E + * + * ## result: + *
+ * + * + * + * + * + * + * + * + * + *
BLE_SUCCESS(0x0000)Success
BLE_ERR_INVALID_ARG(0x0003)The ch_map parameter specified by R_BLE_VS_SetScanChMap() is out of range.
+ *
+ * + * ## Event Data: + * none + */ + BLE_VS_EVENT_SET_SCAN_CH_MAP = 0x800E, + + /** + * @brief This event notifies that scan channel map has been retrieved by R_BLE_VS_GetScanChMap(). + * + * ## Event Code: 0x800F + * + * ## result: + *
+ * + * + * + * + * + *
BLE_SUCCESS(0x0000)Success
+ *
+ * + * ## Event Data: + * st_ble_vs_get_scan_ch_map_comp_evt_t + */ + BLE_VS_EVENT_GET_SCAN_CH_MAP = 0x800F, + /** * @brief Invalid VS Event. * @@ -12564,6 +12624,32 @@ ble_status_t R_BLE_VS_GetTxBufferNum(uint32_t * p_buffer_num); **********************************************************************************************************************/ ble_status_t R_BLE_VS_SetTxLimit(uint32_t tx_queue_lwm, uint32_t tx_queue_hwm); +/******************************************************************************************************************//** + * @fn ble_status_t R_BLE_VS_SetScanChMap(uint16_t ch_map) + * @brief This function sets the scan channel map. + * @details Set specify the scan channel for use.\n + * At least one channel must be enabled. + * @note Calling this API while Scan is already running will not change the channel map. + * @param[in] ch_map Specify the channel map for use. + * | bit | description | + * |:-------------- |:-------------------------------------------------- | + * | bit0 | Enable channel 37 for use (0:disable, 1:enable) | + * | bit1 | Enable channel 38 for use (0:disable, 1:enable) | + * | bit2 | Enable channel 39 for use (0:disable, 1:enable) | + * | All other bits | Reserved for future use. | + * @retval BLE_SUCCESS(0x0000) Success + * @retval BLE_ERR_INVALID_ARG(0x0003) The ch_map parameter is out of range. + **********************************************************************************************************************/ +ble_status_t R_BLE_VS_SetScanChMap(uint16_t ch_map); + +/******************************************************************************************************************//** + * @fn ble_status_t R_BLE_VS_GetScanChMap(void) + * @brief This function gets currently scan channel map. + * @details The result of this API call is notified in BLE_VS_EVENT_GET_SCAN_CH_MAP event. + * @retval BLE_SUCCESS(0x0000) Success + **********************************************************************************************************************/ +ble_status_t R_BLE_VS_GetScanChMap(void); + /*@}*/ /*******************************************************************************************************************//** diff --git a/ra/fsp/inc/api/r_cac_api.h b/ra/fsp/inc/api/r_cac_api.h index ae0cc793e..c57952b62 100644 --- a/ra/fsp/inc/api/r_cac_api.h +++ b/ra/fsp/inc/api/r_cac_api.h @@ -195,6 +195,19 @@ typedef struct st_cac_api */ fsp_err_t (* read)(cac_ctrl_t * const p_ctrl, uint16_t * const p_counter); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_CAC_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref cac_api_t::open call + * @param[in] p_callback Callback function to register + * @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)(cac_ctrl_t * const p_api_ctrl, void (* p_callback)(cac_callback_args_t *), + void const * const p_context, cac_callback_args_t * const p_callback_memory); + /** Close function for CAC device. * @param[in] p_ctrl Pointer to CAC device control. */ diff --git a/ra/fsp/inc/api/r_can_api.h b/ra/fsp/inc/api/r_can_api.h index 34c96e0b7..6d1fb94db 100644 --- a/ra/fsp/inc/api/r_can_api.h +++ b/ra/fsp/inc/api/r_can_api.h @@ -319,6 +319,19 @@ typedef struct st_can_api */ fsp_err_t (* infoGet)(can_ctrl_t * const p_ctrl, can_info_t * const p_info); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_CAN_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref can_api_t::open call. + * @param[in] p_callback Callback function to register + * @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)(can_ctrl_t * const p_api_ctrl, void (* p_callback)(can_callback_args_t *), + void const * const p_context, can_callback_args_t * const p_callback_memory); + /** Version get function for CAN device * @par Implemented as * - R_CAN_VersionGet() diff --git a/ra/fsp/inc/api/r_cgc_api.h b/ra/fsp/inc/api/r_cgc_api.h index 6e86d0e2f..0e2933195 100644 --- a/ra/fsp/inc/api/r_cgc_api.h +++ b/ra/fsp/inc/api/r_cgc_api.h @@ -87,6 +87,7 @@ typedef enum e_cgc_clock CGC_CLOCK_MAIN_OSC = 3, ///< The main oscillator CGC_CLOCK_SUBCLOCK = 4, ///< The subclock oscillator CGC_CLOCK_PLL = 5, ///< The PLL oscillator + CGC_CLOCK_PLL2 = 6, ///< The PLL2 oscillator } cgc_clock_t; /** PLL divider values */ @@ -219,6 +220,7 @@ typedef void cgc_ctrl_t; typedef struct s_cgc_cfg { void (* p_callback)(cgc_callback_args_t * p_args); + void const * p_context; } cgc_cfg_t; /** Clock configuration */ @@ -226,12 +228,14 @@ typedef struct st_cgc_clocks_cfg { cgc_clock_t system_clock; ///< System clock source enumeration cgc_pll_cfg_t pll_cfg; ///< PLL configuration structure + cgc_pll_cfg_t pll2_cfg; ///< PLL2 configuration structure cgc_divider_cfg_t divider_cfg; ///< Clock dividers structure cgc_clock_change_t loco_state; ///< State of LOCO cgc_clock_change_t moco_state; ///< State of MOCO cgc_clock_change_t hoco_state; ///< State of HOCO cgc_clock_change_t mainosc_state; ///< State of Main oscillator cgc_clock_change_t pll_state; ///< State of PLL + cgc_clock_change_t pll2_state; ///< State of PLL2 } cgc_clocks_cfg_t; /** CGC functions implemented at the HAL layer follow this API. */ @@ -258,7 +262,8 @@ typedef struct * - @ref R_CGC_ClockStart() * @param[in] p_ctrl Pointer to instance control block * @param[in] clock_source Clock source to start - * @param[in] p_pll_cfg Pointer to PLL configuration, can be NULL if clock_source is not CGC_CLOCK_PLL + * @param[in] p_pll_cfg Pointer to PLL configuration, can be NULL if clock_source is not CGC_CLOCK_PLL or + * CGC_CLOCK_PLL2 */ fsp_err_t (* clockStart)(cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source, cgc_pll_cfg_t const * const p_pll_cfg); @@ -323,6 +328,20 @@ typedef struct */ fsp_err_t (* oscStopStatusClear)(cgc_ctrl_t * const p_ctrl); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - R_CGC_CallbackSet() + * + * @param[in] p_ctrl Pointer to the CGC 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)(cgc_ctrl_t * const p_api_ctrl, void (* p_callback)(cgc_callback_args_t *), + void const * const p_context, cgc_callback_args_t * const p_callback_memory); + /** Close the CGC driver. * @par Implemented as * - @ref R_CGC_Close() diff --git a/ra/fsp/inc/api/r_ctsu_api.h b/ra/fsp/inc/api/r_ctsu_api.h index 0da8035df..58f6132e7 100644 --- a/ra/fsp/inc/api/r_ctsu_api.h +++ b/ra/fsp/inc/api/r_ctsu_api.h @@ -231,6 +231,19 @@ typedef struct st_ctsu_api */ fsp_err_t (* dataGet)(ctsu_ctrl_t * const p_ctrl, uint16_t * p_data); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_CTSU_CallbackSet() + * + * @param[in] p_ctrl Pointer to the CTSU 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)(ctsu_ctrl_t * const p_api_ctrl, void (* p_callback)(ctsu_callback_args_t *), + void const * const p_context, ctsu_callback_args_t * const p_callback_memory); + /** Close driver. * @par Implemented as * - @ref R_CTSU_Close() diff --git a/ra/fsp/inc/api/r_doc_api.h b/ra/fsp/inc/api/r_doc_api.h index b155a6c17..8d814ab38 100644 --- a/ra/fsp/inc/api/r_doc_api.h +++ b/ra/fsp/inc/api/r_doc_api.h @@ -145,6 +145,20 @@ typedef struct st_doc_api * @param[out] p_version Code and API version used. */ fsp_err_t (* versionGet)(fsp_version_t * const p_version); + + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - R_DOC_CallbackSet() + * + * @param[in] p_ctrl Pointer to the DOC 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)(doc_ctrl_t * const p_api_ctrl, void (* p_callback)(doc_callback_args_t *), + void const * const p_context, doc_callback_args_t * const p_callback_memory); } doc_api_t; /** This structure encompasses everything that is needed to use an instance of this interface. */ diff --git a/ra/fsp/inc/api/r_external_irq_api.h b/ra/fsp/inc/api/r_external_irq_api.h index 604616768..ce6c17807 100644 --- a/ra/fsp/inc/api/r_external_irq_api.h +++ b/ra/fsp/inc/api/r_external_irq_api.h @@ -136,6 +136,22 @@ typedef struct st_external_irq_api */ fsp_err_t (* disable)(external_irq_ctrl_t * const p_ctrl); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - R_ICU_ExternalIrqCallbackSet() + * + * @param[in] p_ctrl Pointer to the Extneral 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_api_ctrl, + void ( * p_callback)(external_irq_callback_args_t *), + void const * const p_context, + external_irq_callback_args_t * const p_callback_memory); + /** Allow driver to be reconfigured. May reduce power consumption. * @par Implemented as * - @ref R_ICU_ExternalIrqClose() diff --git a/ra/fsp/inc/api/r_flash_api.h b/ra/fsp/inc/api/r_flash_api.h index 417985d95..07895dae2 100644 --- a/ra/fsp/inc/api/r_flash_api.h +++ b/ra/fsp/inc/api/r_flash_api.h @@ -330,6 +330,19 @@ typedef struct st_flash_api fsp_err_t (* startupAreaSelect)(flash_ctrl_t * const p_ctrl, flash_startup_area_swap_t swap_type, bool is_temporary); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_FLASH_HP_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref flash_api_t::open call for this timer. + * @param[in] p_callback Callback function to register + * @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)(flash_ctrl_t * const p_api_ctrl, void (* p_callback)(flash_callback_args_t *), + void const * const p_context, flash_callback_args_t * const p_callback_memory); + /** Get Flash driver version. * @par Implemented as * - @ref R_FLASH_LP_VersionGet() diff --git a/ra/fsp/inc/api/r_i2c_master_api.h b/ra/fsp/inc/api/r_i2c_master_api.h index 547bed12f..76eaae95e 100644 --- a/ra/fsp/inc/api/r_i2c_master_api.h +++ b/ra/fsp/inc/api/r_i2c_master_api.h @@ -84,8 +84,8 @@ typedef enum e_i2c_master_event /** I2C callback parameter definition */ typedef struct st_i2c_master_callback_args { - void const * const p_context; ///< Pointer to user-provided context - i2c_master_event_t const event; ///< Event code + void const * p_context; ///< Pointer to user-provided context + i2c_master_event_t event; ///< Event code } i2c_master_callback_args_t; /** I2C configuration block */ @@ -175,6 +175,20 @@ typedef struct st_i2c_master_api fsp_err_t (* slaveAddressSet)(i2c_master_ctrl_t * const p_ctrl, uint32_t const slave, i2c_master_addr_mode_t const addr_mode); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_IIC_MASTER_CallbackSet() + * + * @param[in] p_ctrl Pointer to the IIC Master 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)(i2c_master_ctrl_t * const p_api_ctrl, void (* p_callback)(i2c_master_callback_args_t *), + void const * const p_context, i2c_master_callback_args_t * const p_callback_memory); + /** Closes the driver and releases the I2C Master device. * @par Implemented as * - @ref R_IIC_MASTER_Close() diff --git a/ra/fsp/inc/api/r_i2c_slave_api.h b/ra/fsp/inc/api/r_i2c_slave_api.h index eee758e0f..8757a4c73 100644 --- a/ra/fsp/inc/api/r_i2c_slave_api.h +++ b/ra/fsp/inc/api/r_i2c_slave_api.h @@ -88,9 +88,9 @@ typedef enum e_i2c_slave_event /** I2C callback parameter definition */ typedef struct st_i2c_slave_callback_args { - void const * const p_context; ///< Pointer to user-provided context - uint32_t const bytes; ///< Number of received/transmitted bytes in buffer - i2c_slave_event_t const event; ///< Event code + void const * p_context; ///< Pointer to user-provided context + uint32_t bytes; ///< Number of received/transmitted bytes in buffer + i2c_slave_event_t event; ///< Event code } i2c_slave_callback_args_t; /** I2C configuration block */ @@ -155,6 +155,20 @@ typedef struct st_i2c_slave_api */ fsp_err_t (* write)(i2c_slave_ctrl_t * const p_ctrl, uint8_t * const p_src, uint32_t const bytes); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_IIC_SLAVE_CallbackSet() + * + * @param[in] p_ctrl Pointer to the IIC Slave 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)(i2c_slave_ctrl_t * const p_api_ctrl, void (* p_callback)(i2c_slave_callback_args_t *), + void const * const p_context, i2c_slave_callback_args_t * const p_callback_memory); + /** Closes the driver and releases the I2C Slave device. * @par Implemented as * - @ref R_IIC_SLAVE_Close() diff --git a/ra/fsp/inc/api/r_i2s_api.h b/ra/fsp/inc/api/r_i2s_api.h index 3c62708ed..4cbda86f7 100644 --- a/ra/fsp/inc/api/r_i2s_api.h +++ b/ra/fsp/inc/api/r_i2s_api.h @@ -261,6 +261,20 @@ typedef struct st_i2s_api * @param[out] p_version Code and API version used. */ fsp_err_t (* versionGet)(fsp_version_t * const p_version); + + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - R_SSI_CallbackSet() + * + * @param[in] p_ctrl Pointer to the I2S 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)(i2s_ctrl_t * const p_api_ctrl, void (* p_callback)(i2s_callback_args_t *), + void const * const p_context, i2s_callback_args_t * const p_callback_memory); } i2s_api_t; /** This structure encompasses everything that is needed to use an instance of this interface. */ diff --git a/ra/fsp/inc/api/r_ioport_api.h b/ra/fsp/inc/api/r_ioport_api.h index 245774889..472f959f6 100644 --- a/ra/fsp/inc/api/r_ioport_api.h +++ b/ra/fsp/inc/api/r_ioport_api.h @@ -145,6 +145,9 @@ typedef enum e_ioport_peripheral /** Pin will function as a debug trace peripheral pin */ IOPORT_PERIPHERAL_TRACE = (0x1AUL << IOPORT_PRV_PFS_PSEL_OFFSET), + /** Pin will function as a OSPI peripheral pin */ + IOPORT_PERIPHERAL_OSPI = (0x1CUL << IOPORT_PRV_PFS_PSEL_OFFSET), + /** Marks end of enum - used by parameter checking */ IOPORT_PERIPHERAL_END } ioport_peripheral_t; @@ -177,6 +180,7 @@ typedef enum e_ioport_cfg_options IOPORT_CFG_NMOS_ENABLE = 0x00000040, ///< Enables the pin's NMOS open-drain output IOPORT_CFG_PMOS_ENABLE = 0x00000080, ///< Enables the pin's PMOS open-drain ouput IOPORT_CFG_DRIVE_MID = 0x00000400, ///< Sets pin drive output to medium + IOPORT_CFG_DRIVE_HS_HIGH = 0x00000800, ///< Sets pin drive output to high along with supporting high speed IOPORT_CFG_DRIVE_MID_IIC = 0x00000C00, ///< Sets pin to drive output needed for IIC on a 20mA port IOPORT_CFG_DRIVE_HIGH = 0x00000C00, ///< Sets pin drive output to high IOPORT_CFG_EVENT_RISING_EDGE = 0x00001000, ///< Sets pin event trigger to rising edge diff --git a/ra/fsp/inc/api/r_lpm_api.h b/ra/fsp/inc/api/r_lpm_api.h index c22a7d934..8b48db6e7 100644 --- a/ra/fsp/inc/api/r_lpm_api.h +++ b/ra/fsp/inc/api/r_lpm_api.h @@ -69,47 +69,51 @@ typedef enum e_lpm_mode /** Snooze request sources */ typedef enum e_lpm_snooze_request { - LPM_SNOOZE_REQUEST_RXD0_FALLING = 0x00000000U, ///< Enable RXD0 falling edge snooze request - LPM_SNOOZE_REQUEST_IRQ0 = 0x00000001U, ///< Enable IRQ0 pin snooze request - LPM_SNOOZE_REQUEST_IRQ1 = 0x00000002U, ///< Enable IRQ1 pin snooze request - LPM_SNOOZE_REQUEST_IRQ2 = 0x00000004U, ///< Enable IRQ2 pin snooze request - LPM_SNOOZE_REQUEST_IRQ3 = 0x00000008U, ///< Enable IRQ3 pin snooze request - LPM_SNOOZE_REQUEST_IRQ4 = 0x00000010U, ///< Enable IRQ4 pin snooze request - LPM_SNOOZE_REQUEST_IRQ5 = 0x00000020U, ///< Enable IRQ5 pin snooze request - LPM_SNOOZE_REQUEST_IRQ6 = 0x00000040U, ///< Enable IRQ6 pin snooze request - LPM_SNOOZE_REQUEST_IRQ7 = 0x00000080U, ///< Enable IRQ7 pin snooze request - LPM_SNOOZE_REQUEST_IRQ8 = 0x00000100U, ///< Enable IRQ8 pin snooze request - LPM_SNOOZE_REQUEST_IRQ9 = 0x00000200U, ///< Enable IRQ9 pin snooze request - LPM_SNOOZE_REQUEST_IRQ10 = 0x00000400U, ///< Enable IRQ10 pin snooze request - LPM_SNOOZE_REQUEST_IRQ11 = 0x00000800U, ///< Enable IRQ11 pin snooze request - LPM_SNOOZE_REQUEST_IRQ12 = 0x00001000U, ///< Enable IRQ12 pin snooze request - LPM_SNOOZE_REQUEST_IRQ13 = 0x00002000U, ///< Enable IRQ13 pin snooze request - LPM_SNOOZE_REQUEST_IRQ14 = 0x00004000U, ///< Enable IRQ14 pin snooze request - LPM_SNOOZE_REQUEST_IRQ15 = 0x00008000U, ///< Enable IRQ15 pin snooze request - LPM_SNOOZE_REQUEST_KEY = 0x00020000U, ///< Enable KR snooze request - LPM_SNOOZE_REQUEST_ACMPHS0 = 0x00400000U, ///< Enable High-speed analog comparator 0 snooze request - LPM_SNOOZE_REQUEST_RTC_ALARM = 0x01000000U, ///< Enable RTC alarm snooze request - LPM_SNOOZE_REQUEST_RTC_PERIOD = 0x02000000U, ///< Enable RTC period snooze request - LPM_SNOOZE_REQUEST_AGT1_UNDERFLOW = 0x10000000U, ///< Enable AGT1 underflow snooze request - LPM_SNOOZE_REQUEST_AGT1_COMPARE_A = 0x20000000U, ///< Enable AGT1 compare match A snooze request - LPM_SNOOZE_REQUEST_AGT1_COMPARE_B = 0x40000000U, ///< Enable AGT1 compare match B snooze request + LPM_SNOOZE_REQUEST_RXD0_FALLING = 0x00000000ULL, ///< Enable RXD0 falling edge snooze request + LPM_SNOOZE_REQUEST_IRQ0 = 0x00000001ULL, ///< Enable IRQ0 pin snooze request + LPM_SNOOZE_REQUEST_IRQ1 = 0x00000002ULL, ///< Enable IRQ1 pin snooze request + LPM_SNOOZE_REQUEST_IRQ2 = 0x00000004ULL, ///< Enable IRQ2 pin snooze request + LPM_SNOOZE_REQUEST_IRQ3 = 0x00000008ULL, ///< Enable IRQ3 pin snooze request + LPM_SNOOZE_REQUEST_IRQ4 = 0x00000010ULL, ///< Enable IRQ4 pin snooze request + LPM_SNOOZE_REQUEST_IRQ5 = 0x00000020ULL, ///< Enable IRQ5 pin snooze request + LPM_SNOOZE_REQUEST_IRQ6 = 0x00000040ULL, ///< Enable IRQ6 pin snooze request + LPM_SNOOZE_REQUEST_IRQ7 = 0x00000080ULL, ///< Enable IRQ7 pin snooze request + LPM_SNOOZE_REQUEST_IRQ8 = 0x00000100ULL, ///< Enable IRQ8 pin snooze request + LPM_SNOOZE_REQUEST_IRQ9 = 0x00000200ULL, ///< Enable IRQ9 pin snooze request + LPM_SNOOZE_REQUEST_IRQ10 = 0x00000400ULL, ///< Enable IRQ10 pin snooze request + LPM_SNOOZE_REQUEST_IRQ11 = 0x00000800ULL, ///< Enable IRQ11 pin snooze request + LPM_SNOOZE_REQUEST_IRQ12 = 0x00001000ULL, ///< Enable IRQ12 pin snooze request + LPM_SNOOZE_REQUEST_IRQ13 = 0x00002000ULL, ///< Enable IRQ13 pin snooze request + LPM_SNOOZE_REQUEST_IRQ14 = 0x00004000ULL, ///< Enable IRQ14 pin snooze request + LPM_SNOOZE_REQUEST_IRQ15 = 0x00008000ULL, ///< Enable IRQ15 pin snooze request + LPM_SNOOZE_REQUEST_KEY = 0x00020000ULL, ///< Enable KR snooze request + LPM_SNOOZE_REQUEST_ACMPHS0 = 0x00400000ULL, ///< Enable High-speed analog comparator 0 snooze request + LPM_SNOOZE_REQUEST_RTC_ALARM = 0x01000000ULL, ///< Enable RTC alarm snooze request + LPM_SNOOZE_REQUEST_RTC_PERIOD = 0x02000000ULL, ///< Enable RTC period snooze request + LPM_SNOOZE_REQUEST_AGT1_UNDERFLOW = 0x10000000ULL, ///< Enable AGT1 underflow snooze request + LPM_SNOOZE_REQUEST_AGT1_COMPARE_A = 0x20000000ULL, ///< Enable AGT1 compare match A snooze request + LPM_SNOOZE_REQUEST_AGT1_COMPARE_B = 0x40000000ULL, ///< Enable AGT1 compare match B snooze request + LPM_SNOOZE_REQUEST_AGT3_UNDERFLOW = 0x100000000ULL, ///< Enable AGT3 underflow snooze request + LPM_SNOOZE_REQUEST_AGT3_COMPARE_A = 0x200000000ULL, ///< Enable AGT3 compare match A snooze request + LPM_SNOOZE_REQUEST_AGT3_COMPARE_B = 0x400000000ULL, ///< Enable AGT3 compare match B snooze request } lpm_snooze_request_t; /** Snooze end control */ typedef enum e_lpm_snooze_end { - LPM_SNOOZE_END_STANDBY_WAKE_SOURCES = 0x00U, ///< Transition from Snooze to Normal mode directly - LPM_SNOOZE_END_AGT1_UNDERFLOW = 0x01U, ///< AGT1 underflow - LPM_SNOOZE_END_DTC_TRANS_COMPLETE = 0x02U, ///< Last DTC transmission completion - LPM_SNOOZE_END_DTC_TRANS_COMPLETE_NEGATED = 0x04U, ///< Not Last DTC transmission completion - LPM_SNOOZE_END_ADC0_COMPARE_MATCH = 0x08U, ///< ADC Channel 0 compare match - LPM_SNOOZE_END_ADC0_COMPARE_MISMATCH = 0x10U, ///< ADC Channel 0 compare mismatch - LPM_SNOOZE_END_ADC1_COMPARE_MATCH = 0x20U, ///< ADC 1 compare match - LPM_SNOOZE_END_ADC1_COMPARE_MISMATCH = 0x40U, ///< ADC 1 compare mismatch - LPM_SNOOZE_END_SCI0_ADDRESS_MATCH = 0x80U, ///< SCI0 address mismatch + LPM_SNOOZE_END_STANDBY_WAKE_SOURCES = 0x00U, ///< Transition from Snooze to Normal mode directly + LPM_SNOOZE_END_AGT1_UNDERFLOW = 0x01U, ///< AGT1 underflow + LPM_SNOOZE_END_DTC_TRANS_COMPLETE = 0x02U, ///< Last DTC transmission completion + LPM_SNOOZE_END_DTC_TRANS_COMPLETE_NEGATED = 0x04U, ///< Not Last DTC transmission completion + LPM_SNOOZE_END_ADC0_COMPARE_MATCH = 0x08U, ///< ADC Channel 0 compare match + LPM_SNOOZE_END_ADC0_COMPARE_MISMATCH = 0x10U, ///< ADC Channel 0 compare mismatch + LPM_SNOOZE_END_ADC1_COMPARE_MATCH = 0x20U, ///< ADC 1 compare match + LPM_SNOOZE_END_ADC1_COMPARE_MISMATCH = 0x40U, ///< ADC 1 compare mismatch + LPM_SNOOZE_END_SCI0_ADDRESS_MATCH = 0x80U, ///< SCI0 address mismatch + LPM_SNOOZE_END_AGT3_UNDERFLOW = 0x100U, ///< AGT3 underflow } lpm_snooze_end_t; -typedef uint8_t lpm_snooze_end_bits_t; +typedef uint16_t lpm_snooze_end_bits_t; /** Snooze cancel control */ typedef enum e_lpm_snooze_cancel @@ -140,40 +144,43 @@ typedef enum e_lpm_snooze_dtc /** Wake from standby mode sources, does not apply to sleep or deep standby modes */ typedef enum e_lpm_standby_wake_source { - LPM_STANDBY_WAKE_SOURCE_IRQ0 = 0x00000001U, ///< IRQ0 - LPM_STANDBY_WAKE_SOURCE_IRQ1 = 0x00000002U, ///< IRQ1 - LPM_STANDBY_WAKE_SOURCE_IRQ2 = 0x00000004U, ///< IRQ2 - LPM_STANDBY_WAKE_SOURCE_IRQ3 = 0x00000008U, ///< IRQ3 - LPM_STANDBY_WAKE_SOURCE_IRQ4 = 0x00000010U, ///< IRQ4 - LPM_STANDBY_WAKE_SOURCE_IRQ5 = 0x00000020U, ///< IRQ5 - LPM_STANDBY_WAKE_SOURCE_IRQ6 = 0x00000040U, ///< IRQ6 - LPM_STANDBY_WAKE_SOURCE_IRQ7 = 0x00000080U, ///< IRQ7 - LPM_STANDBY_WAKE_SOURCE_IRQ8 = 0x00000100U, ///< IRQ8 - LPM_STANDBY_WAKE_SOURCE_IRQ9 = 0x00000200U, ///< IRQ9 - LPM_STANDBY_WAKE_SOURCE_IRQ10 = 0x00000400U, ///< IRQ10 - LPM_STANDBY_WAKE_SOURCE_IRQ11 = 0x00000800U, ///< IRQ11 - LPM_STANDBY_WAKE_SOURCE_IRQ12 = 0x00001000U, ///< IRQ12 - LPM_STANDBY_WAKE_SOURCE_IRQ13 = 0x00002000U, ///< IRQ13 - LPM_STANDBY_WAKE_SOURCE_IRQ14 = 0x00004000U, ///< IRQ14 - LPM_STANDBY_WAKE_SOURCE_IRQ15 = 0x00008000U, ///< IRQ15 - LPM_STANDBY_WAKE_SOURCE_IWDT = 0x00010000U, ///< Independent watchdog interrupt - LPM_STANDBY_WAKE_SOURCE_KEY = 0x00020000U, ///< Key interrupt - LPM_STANDBY_WAKE_SOURCE_LVD1 = 0x00040000U, ///< Low Voltage Detection 1 interrupt - LPM_STANDBY_WAKE_SOURCE_LVD2 = 0x00080000U, ///< Low Voltage Detection 2 interrupt - LPM_STANDBY_WAKE_SOURCE_VBATT = 0x00100000U, ///< VBATT Monitor interrupt - LPM_STANDBY_WAKE_SOURCE_ACMPHS0 = 0x00400000U, ///< Analog Comparator High-speed 0 interrupt - LPM_STANDBY_WAKE_SOURCE_ACMPLP0 = 0x00800000U, ///< Analog Comparator Low-speed 0 interrupt - LPM_STANDBY_WAKE_SOURCE_RTCALM = 0x01000000U, ///< RTC Alarm interrupt - LPM_STANDBY_WAKE_SOURCE_RTCPRD = 0x02000000U, ///< RTC Period interrupt - LPM_STANDBY_WAKE_SOURCE_USBHS = 0x04000000U, ///< USB High-speed interrupt - LPM_STANDBY_WAKE_SOURCE_USBFS = 0x08000000U, ///< USB Full-speed interrupt - LPM_STANDBY_WAKE_SOURCE_AGT1UD = 0x10000000U, ///< AGT1 underflow interrupt - LPM_STANDBY_WAKE_SOURCE_AGT1CA = 0x20000000U, ///< AGT1 compare match A interrupt - LPM_STANDBY_WAKE_SOURCE_AGT1CB = 0x40000000U, ///< AGT1 compare match B interrupt - LPM_STANDBY_WAKE_SOURCE_IIC0 = 0x80000000U, ///< I2C 0 interrupt + LPM_STANDBY_WAKE_SOURCE_IRQ0 = 0x00000001ULL, ///< IRQ0 + LPM_STANDBY_WAKE_SOURCE_IRQ1 = 0x00000002ULL, ///< IRQ1 + LPM_STANDBY_WAKE_SOURCE_IRQ2 = 0x00000004ULL, ///< IRQ2 + LPM_STANDBY_WAKE_SOURCE_IRQ3 = 0x00000008ULL, ///< IRQ3 + LPM_STANDBY_WAKE_SOURCE_IRQ4 = 0x00000010ULL, ///< IRQ4 + LPM_STANDBY_WAKE_SOURCE_IRQ5 = 0x00000020ULL, ///< IRQ5 + LPM_STANDBY_WAKE_SOURCE_IRQ6 = 0x00000040ULL, ///< IRQ6 + LPM_STANDBY_WAKE_SOURCE_IRQ7 = 0x00000080ULL, ///< IRQ7 + LPM_STANDBY_WAKE_SOURCE_IRQ8 = 0x00000100ULL, ///< IRQ8 + LPM_STANDBY_WAKE_SOURCE_IRQ9 = 0x00000200ULL, ///< IRQ9 + LPM_STANDBY_WAKE_SOURCE_IRQ10 = 0x00000400ULL, ///< IRQ10 + LPM_STANDBY_WAKE_SOURCE_IRQ11 = 0x00000800ULL, ///< IRQ11 + LPM_STANDBY_WAKE_SOURCE_IRQ12 = 0x00001000ULL, ///< IRQ12 + LPM_STANDBY_WAKE_SOURCE_IRQ13 = 0x00002000ULL, ///< IRQ13 + LPM_STANDBY_WAKE_SOURCE_IRQ14 = 0x00004000ULL, ///< IRQ14 + LPM_STANDBY_WAKE_SOURCE_IRQ15 = 0x00008000ULL, ///< IRQ15 + LPM_STANDBY_WAKE_SOURCE_IWDT = 0x00010000ULL, ///< Independent watchdog interrupt + LPM_STANDBY_WAKE_SOURCE_KEY = 0x00020000ULL, ///< Key interrupt + LPM_STANDBY_WAKE_SOURCE_LVD1 = 0x00040000ULL, ///< Low Voltage Detection 1 interrupt + LPM_STANDBY_WAKE_SOURCE_LVD2 = 0x00080000ULL, ///< Low Voltage Detection 2 interrupt + LPM_STANDBY_WAKE_SOURCE_VBATT = 0x00100000ULL, ///< VBATT Monitor interrupt + LPM_STANDBY_WAKE_SOURCE_ACMPHS0 = 0x00400000ULL, ///< Analog Comparator High-speed 0 interrupt + LPM_STANDBY_WAKE_SOURCE_ACMPLP0 = 0x00800000ULL, ///< Analog Comparator Low-speed 0 interrupt + LPM_STANDBY_WAKE_SOURCE_RTCALM = 0x01000000ULL, ///< RTC Alarm interrupt + LPM_STANDBY_WAKE_SOURCE_RTCPRD = 0x02000000ULL, ///< RTC Period interrupt + LPM_STANDBY_WAKE_SOURCE_USBHS = 0x04000000ULL, ///< USB High-speed interrupt + LPM_STANDBY_WAKE_SOURCE_USBFS = 0x08000000ULL, ///< USB Full-speed interrupt + LPM_STANDBY_WAKE_SOURCE_AGT1UD = 0x10000000ULL, ///< AGT1 underflow interrupt + LPM_STANDBY_WAKE_SOURCE_AGT1CA = 0x20000000ULL, ///< AGT1 compare match A interrupt + LPM_STANDBY_WAKE_SOURCE_AGT1CB = 0x40000000ULL, ///< AGT1 compare match B interrupt + LPM_STANDBY_WAKE_SOURCE_IIC0 = 0x80000000ULL, ///< I2C 0 interrupt + LPM_STANDBY_WAKE_SOURCE_AGT3UD = 0x100000000ULL, ///< AGT3 underflow interrupt + LPM_STANDBY_WAKE_SOURCE_AGT3CA = 0x200000000ULL, ///< AGT3 compare match A interrupt + LPM_STANDBY_WAKE_SOURCE_AGT3CB = 0x400000000ULL, ///< AGT3 compare match B interrupt } lpm_standby_wake_source_t; -typedef uint32_t lpm_standby_wake_source_bits_t; +typedef uint64_t lpm_standby_wake_source_bits_t; /** I/O port state after Deep Software Standby mode */ typedef enum e_lpm_io_port @@ -248,6 +255,8 @@ typedef enum e_lpm_deep_standby_cancel_edge LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ13_FALLING = 0U, ///< IRQ13-DS Pin Falling Edge LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ14_RISING = 0x00004000U, ///< IRQ14-DS Pin Rising Edge LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ14_FALLING = 0U, ///< IRQ14-DS Pin Falling Edge + LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ15_RISING = 0x00008000U, ///< IRQ14-DS Pin Rising Edge + LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ15_FALLING = 0U, ///< IRQ14-DS Pin Falling Edge LPM_DEEP_STANDBY_CANCEL_SOURCE_LVD1_RISING = 0x00010000U, ///< LVD1 Rising Slope LPM_DEEP_STANDBY_CANCEL_SOURCE_LVD1_FALLING = 0U, ///< LVD1 Falling Slope @@ -280,6 +289,7 @@ typedef enum e_lpm_deep_standby_cancel_source LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ12 = 0x00001000U, ///< IRQ12 LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ13 = 0x00002000U, ///< IRQ13 LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ14 = 0x00004000U, ///< IRQ14 + LPM_DEEP_STANDBY_CANCEL_SOURCE_IRQ15 = 0x00008000U, ///< IRQ15 LPM_DEEP_STANDBY_CANCEL_SOURCE_LVD1 = 0x00010000U, ///< LVD1 LPM_DEEP_STANDBY_CANCEL_SOURCE_LVD2 = 0x00020000U, ///< LVD2 diff --git a/ra/fsp/inc/api/r_lvd_api.h b/ra/fsp/inc/api/r_lvd_api.h index a2df03353..4ea830ed1 100644 --- a/ra/fsp/inc/api/r_lvd_api.h +++ b/ra/fsp/inc/api/r_lvd_api.h @@ -244,6 +244,20 @@ typedef struct st_lvd_api **/ fsp_err_t (* statusClear)(lvd_ctrl_t * const p_ctrl); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_LVD_CallbackSet() + * + * @param[in] p_ctrl Pointer to the LVD 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)(lvd_ctrl_t * const p_api_ctrl, void (* p_callback)(lvd_callback_args_t *), + void const * const p_context, lvd_callback_args_t * const p_callback_memory); + /** Disables the LVD peripheral. * Closes the driver instance. * @par Implemented as diff --git a/ra/fsp/inc/api/r_poeg_api.h b/ra/fsp/inc/api/r_poeg_api.h index a2ccad36c..6b7ba5cd8 100644 --- a/ra/fsp/inc/api/r_poeg_api.h +++ b/ra/fsp/inc/api/r_poeg_api.h @@ -163,6 +163,19 @@ typedef struct st_poeg_api */ fsp_err_t (* statusGet)(poeg_ctrl_t * const p_ctrl, poeg_status_t * p_status); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_POEG_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref poeg_api_t::open call for this timer. + * @param[in] p_callback Callback function to register + * @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)(poeg_ctrl_t * const p_api_ctrl, void (* p_callback)(poeg_callback_args_t *), + void const * const p_context, poeg_callback_args_t * const p_callback_memory); + /** Disables GPT output pins by software request. * @par Implemented as * - @ref R_POEG_OutputDisable() diff --git a/ra/fsp/inc/api/r_rtc_api.h b/ra/fsp/inc/api/r_rtc_api.h index 7feef6836..e4f9a1a57 100644 --- a/ra/fsp/inc/api/r_rtc_api.h +++ b/ra/fsp/inc/api/r_rtc_api.h @@ -258,6 +258,19 @@ typedef struct st_rtc_api */ fsp_err_t (* errorAdjustmentSet)(rtc_ctrl_t * const p_ctrl, rtc_error_adjustment_cfg_t const * const err_adj_cfg); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - R_RTC_CallbackSet() + * + * @param[in] p_ctrl Pointer to the RTC 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 + */ + fsp_err_t (* callbackSet)(rtc_ctrl_t * const p_ctrl, void (* p_callback)(rtc_callback_args_t *), + void const * const p_context, rtc_callback_args_t * const p_callback_memory); + /** Return the currently configure clock source for the RTC * * @par Implemented as diff --git a/ra/fsp/inc/api/r_sdmmc_api.h b/ra/fsp/inc/api/r_sdmmc_api.h index a5ad00996..c953f8f84 100644 --- a/ra/fsp/inc/api/r_sdmmc_api.h +++ b/ra/fsp/inc/api/r_sdmmc_api.h @@ -468,6 +468,19 @@ typedef struct st_sdmmc_api */ fsp_err_t (* erase)(sdmmc_ctrl_t * const p_ctrl, uint32_t const start_sector, uint32_t const sector_count); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_SDHI_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref sdmmc_api_t::open call. + * @param[in] p_callback Callback function to register + * @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)(sdmmc_ctrl_t * const p_api_ctrl, void (* p_callback)(sdmmc_callback_args_t *), + void const * const p_context, sdmmc_callback_args_t * const p_callback_memory); + /** Close open SD/MMC device. * * @par Implemented as diff --git a/ra/fsp/inc/api/r_spi_api.h b/ra/fsp/inc/api/r_spi_api.h index 6083eaa20..acca1d447 100644 --- a/ra/fsp/inc/api/r_spi_api.h +++ b/ra/fsp/inc/api/r_spi_api.h @@ -124,6 +124,15 @@ typedef struct st_spi_callback_args void const * p_context; ///< Context provided to user during callback } spi_callback_args_t; +/** Non-secure arguments for write-read guard function */ +typedef struct st_spi_write_read_guard_args +{ + void const * p_src; + void * p_dest; + uint32_t const length; + spi_bit_width_t const bit_width; +} spi_write_read_guard_args_t; + /** SPI interface configuration */ typedef struct st_spi_cfg { @@ -217,6 +226,20 @@ typedef struct st_spi_api fsp_err_t (* writeRead)(spi_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, uint32_t const length, spi_bit_width_t const bit_width); + /** + * Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - R_SCI_SPI_CallbackSet() + * + * @param[in] p_ctrl Pointer to the SPI 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)(spi_ctrl_t * const p_api_ctrl, void (* p_callback)(spi_callback_args_t *), + void const * const p_context, spi_callback_args_t * const p_callback_memory); + /** Remove power to the SPI channel designated by the handle and disable the associated interrupts. * @par Implemented as * - @ref R_SPI_Close() diff --git a/ra/fsp/inc/api/r_spi_flash_api.h b/ra/fsp/inc/api/r_spi_flash_api.h index 571f70975..931676d92 100644 --- a/ra/fsp/inc/api/r_spi_flash_api.h +++ b/ra/fsp/inc/api/r_spi_flash_api.h @@ -26,6 +26,9 @@ * @section SPI_FLASH_API_SUMMARY Summary * The SPI flash API provides an interface that configures, writes, and erases sectors in SPI flash devices. * + * Implemented by: + * - @ref OSPI + * - @ref QSPI * @{ **********************************************************************************************************************/ @@ -72,6 +75,12 @@ typedef enum e_spi_flash_protocol /** QPI mode (commands on 4 lines). Note that the application must ensure the device is in QPI mode. */ SPI_FLASH_PROTOCOL_QPI = 2, + + /** SOPI mode (command and data on 8 lines). Note that the application must ensure the device is in SOPI mode. */ + SPI_FLASH_PROTOCOL_SOPI = 3, + + /** DOPI mode (command and data on 8 lines, dual data rate). Note that the application must ensure the device is in DOPI mode. */ + SPI_FLASH_PROTOCOL_DOPI = 4, } spi_flash_protocol_t; /** Number of bytes in the address. */ @@ -118,13 +127,31 @@ typedef enum e_spi_flash_dummy_clocks SPI_FLASH_DUMMY_CLOCKS_17, ///< 17 dummy clocks } spi_flash_dummy_clocks_t; +/** Direct Read and Write direction */ +typedef enum e_spi_flash_direct_transfer_dir_option +{ + SPI_FLASH_DIRECT_TRANSFER_DIR_READ = 0x0, + SPI_FLASH_DIRECT_TRANSFER_DIR_WRITE = 0x1 +} spi_flash_direct_transfer_dir_t; + /** Structure to define an erase command and associated erase size. */ typedef struct st_spi_flash_erase_command { - uint8_t command; ///< Erase command + uint16_t command; ///< Erase command uint32_t size; ///< Size of erase for associated command, set to SPI_FLASH_ERASE_SIZE_CHIP_ERASE for chip erase } spi_flash_erase_command_t; +typedef struct st_spi_flash_direct_transfer +{ + uint32_t address; + uint32_t data; + uint16_t command; + uint8_t dummy_cycles; + uint8_t command_length; + uint8_t address_length; + uint8_t data_length; +} spi_flash_direct_transfer_t; + /** User configuration structure used by the open function */ typedef struct st_spi_flash_cfg { @@ -136,11 +163,13 @@ typedef struct st_spi_flash_cfg /** Number of lines used to send address for page program command. This should either be 1 or match the number of lines used in * the selected read mode. */ spi_flash_data_lines_t page_program_address_lines; + uint8_t write_status_bit; ///< Which bit determines write status + uint8_t write_enable_bit; ///< Which bit determines write status uint32_t page_size_bytes; ///< Page size in bytes (maximum number of bytes for page program) uint8_t page_program_command; ///< Page program command uint8_t write_enable_command; ///< Command to enable write or erase, typically 0x06 uint8_t status_command; ///< Command to read the write status - uint8_t write_status_bit; ///< Which bit determines write status + uint8_t read_command; ///< Read command - OSPI SPI mode only uint8_t xip_enter_command; ///< Command to enter XIP mode uint8_t xip_exit_command; ///< Command to exit XIP mode uint8_t erase_command_list_length; ///< Length of erase command list @@ -199,6 +228,17 @@ typedef struct st_spi_flash_api **/ fsp_err_t (* directRead)(spi_flash_ctrl_t * p_ctrl, uint8_t * const p_dest, uint32_t const bytes); + /** Direct Read/Write raw data to the SPI flash. + * @par Implemented as + * - @ref R_OSPI_DirectTransfer() + * + * @param[in] p_ctrl Pointer to a driver handle + * @param[in] p_data Pointer to command, address and data values and lengths + * @param[in] direction Direct Read/Write + **/ + fsp_err_t (* directTransfer)(spi_flash_ctrl_t * p_ctrl, spi_flash_direct_transfer_t * const p_transfer, + spi_flash_direct_transfer_dir_t direction); + /** Change the SPI protocol in the driver. The application must change the SPI protocol on the device. * @par Implemented as * - @ref R_QSPI_SpiProtocolSet() diff --git a/ra/fsp/inc/api/r_three_phase_api.h b/ra/fsp/inc/api/r_three_phase_api.h index 10a72d5a9..75ad003a4 100644 --- a/ra/fsp/inc/api/r_three_phase_api.h +++ b/ra/fsp/inc/api/r_three_phase_api.h @@ -94,6 +94,7 @@ typedef struct st_three_phase_cfg /* Pointers to GPT instance structs */ timer_instance_t const * p_timer_instance[3]; ///< Pointer to the timer instance structs + three_phase_channel_t callback_ch; ///< Channel to enable callback when using three_phase_api_t::callbackSet uint32_t channel_mask; ///< Bitmask of timer channels used by this module @@ -149,6 +150,19 @@ typedef struct st_three_phase_api */ fsp_err_t (* dutyCycleSet)(three_phase_ctrl_t * const p_ctrl, three_phase_duty_cycle_t * const p_duty_cycle); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_GPT_THREE_PHASE_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref three_phase_api_t::open call. + * @param[in] p_callback Callback function to register with GPT U-channel + * @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)(three_phase_ctrl_t * const p_api_ctrl, void (* p_callback)(timer_callback_args_t *), + void const * const p_context, timer_callback_args_t * const p_callback_memory); + /** Allows driver to be reconfigured and may reduce power consumption. * @par Implemented as * - @ref R_GPT_THREE_PHASE_Close() diff --git a/ra/fsp/inc/api/r_timer_api.h b/ra/fsp/inc/api/r_timer_api.h index 570336621..76ef0e2b9 100644 --- a/ra/fsp/inc/api/r_timer_api.h +++ b/ra/fsp/inc/api/r_timer_api.h @@ -284,6 +284,20 @@ typedef struct st_timer_api */ fsp_err_t (* statusGet)(timer_ctrl_t * const p_ctrl, timer_status_t * const p_status); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_GPT_CallbackSet() + * - @ref R_AGT_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref timer_api_t::open call for this timer. + * @param[in] p_callback Callback function to register + * @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)(timer_ctrl_t * const p_api_ctrl, void (* p_callback)(timer_callback_args_t *), + void const * const p_context, timer_callback_args_t * const p_callback_memory); + /** Allows driver to be reconfigured and may reduce power consumption. * @par Implemented as * - @ref R_GPT_Close() diff --git a/ra/fsp/inc/api/r_uart_api.h b/ra/fsp/inc/api/r_uart_api.h index 6d4e7e7bf..6fff23076 100644 --- a/ra/fsp/inc/api/r_uart_api.h +++ b/ra/fsp/inc/api/r_uart_api.h @@ -237,6 +237,20 @@ typedef struct st_uart_api */ 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. + * @par Implemented as + * - R_SCI_Uart_CallbackSet() + * + * @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_api_ctrl, void (* p_callback)(uart_callback_args_t *), + void const * const p_context, uart_callback_args_t * const p_callback_memory); + /** Close UART device. * @par Implemented as * - @ref R_SCI_UART_Close() diff --git a/ra/fsp/inc/api/r_usb_hhid_api.h b/ra/fsp/inc/api/r_usb_hhid_api.h index a2c407506..0ed4ed624 100644 --- a/ra/fsp/inc/api/r_usb_hhid_api.h +++ b/ra/fsp/inc/api/r_usb_hhid_api.h @@ -39,6 +39,7 @@ * Includes , "Project Includes" ******************************************************************************/ #include "r_usb_hhid_cfg.h" +#include "r_usb_basic_api.h" /****************************************************************************** * Macro definitions @@ -98,6 +99,14 @@ typedef struct st_usb_hhid_api fsp_err_t (* maxPacketSizeGet)(usb_ctrl_t * const p_api_ctrl, uint16_t * p_size, uint8_t direction, uint8_t device_address); } usb_hhid_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_usb_hhid_instance +{ + usb_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + usb_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + usb_hhid_api_t const * p_api; ///< Pointer to the API structure for this instance +} usb_hhid_instance_t; #endif /* USB_HHID_API_H */ /*******************************************************************************************************************//** diff --git a/ra/fsp/inc/api/r_wdt_api.h b/ra/fsp/inc/api/r_wdt_api.h index 1152d4f1c..cf698348d 100644 --- a/ra/fsp/inc/api/r_wdt_api.h +++ b/ra/fsp/inc/api/r_wdt_api.h @@ -223,6 +223,19 @@ typedef struct st_wdt_api */ fsp_err_t (* timeoutGet)(wdt_ctrl_t * const p_ctrl, wdt_timeout_values_t * const p_timeout); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref R_WDT_CallbackSet() + * + * @param[in] p_ctrl Pointer to the WDT 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)(wdt_ctrl_t * const p_api_ctrl, void (* p_callback)(wdt_callback_args_t *), + void const * const p_context, wdt_callback_args_t * const p_callback_memory); + /** Return the version of the driver. * @par Implemented as * - @ref R_WDT_VersionGet() diff --git a/ra/fsp/inc/api/rm_block_media_api.h b/ra/fsp/inc/api/rm_block_media_api.h index 3c3fa9600..70b334abb 100644 --- a/ra/fsp/inc/api/rm_block_media_api.h +++ b/ra/fsp/inc/api/rm_block_media_api.h @@ -75,6 +75,7 @@ typedef struct st_rm_block_media_info uint32_t sector_size_bytes; ///< Sector size in bytes uint32_t num_sectors; ///< Total number of sectors bool reentrant; ///< True if connected block media driver is reentrant + bool write_protected; ///< True if connected block media device is write protected } rm_block_media_info_t; /** Callback function parameter data */ @@ -170,6 +171,21 @@ typedef struct st_rm_block_media_api */ fsp_err_t (* erase)(rm_block_media_ctrl_t * const p_ctrl, uint32_t const block_address, uint32_t const num_blocks); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref RM_BLOCK_MEDIA_SDMMC_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref rm_block_media_api_t::open call. + * @param[in] p_callback Callback function to register + * @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)(rm_block_media_ctrl_t * const p_ctrl, + void ( * p_callback)(rm_block_media_callback_args_t *), + void const * const p_context, + rm_block_media_callback_args_t * const p_callback_memory); + /** Get status of connected device. * * @par Implemented as diff --git a/ra/fsp/inc/api/rm_touch_api.h b/ra/fsp/inc/api/rm_touch_api.h index a81f94c09..46fa554c6 100644 --- a/ra/fsp/inc/api/rm_touch_api.h +++ b/ra/fsp/inc/api/rm_touch_api.h @@ -87,6 +87,19 @@ typedef struct st_touch_wheel_cfg_t uint16_t threshold; ///< Position calculation start threshold value. } touch_wheel_cfg_t; +/** Configuration of each pads */ +typedef struct st_touch_pad_cfg_t +{ + uint8_t const * p_elem_index_rx; ///< RX of element number arrays used by this pad. + uint8_t const * p_elem_index_tx; ///< TX of element number arrays used by this pad. + uint8_t num_elements; ///< Number of elements used by this pad. + uint16_t threshold; ///< Coordinate calculation threshold value. + uint16_t rx_pixel; ///< rx coordinate resolution + uint16_t tx_pixel; ///< tx coordinate resolution + uint8_t max_touch; ///< Maximum number of touch judgments used by the pad. + uint8_t num_drift; ///< Number of pad drift. +} touch_pad_cfg_t; + /** Callback function parameter data */ typedef struct st_ctsu_callback_args touch_callback_args_t; @@ -96,6 +109,7 @@ typedef struct st_touch_cfg touch_button_cfg_t const * p_buttons; ///< Pointer to array of button configuration. touch_slider_cfg_t const * p_sliders; ///< Pointer to array of slider configuration. touch_wheel_cfg_t const * p_wheels; ///< Pointer to array of wheel configuration. + touch_pad_cfg_t const * p_pad; ///< Pointer of pad configuration. uint8_t num_buttons; ///< Number of buttons. uint8_t num_sliders; ///< Number of sliders. uint8_t num_wheels; ///< Number of wheels. @@ -135,13 +149,38 @@ typedef struct st_touch_api * - @ref RM_TOUCH_DataGet() * * @param[in] p_ctrl Pointer to control structure. - * @param[out] p_buton_status Pointer to get data bitmap. + * @param[out] p_button_status Pointer to get data bitmap. * @param[out] p_slider_position Pointer to get data array. * @param[out] p_wheel_position Pointer to get data array. */ fsp_err_t (* dataGet)(touch_ctrl_t * const p_ctrl, uint64_t * p_button_status, uint16_t * p_slider_position, uint16_t * p_wheel_position); + /** pad data get. + * @par Implemented as + * - @ref RM_TOUCH_PadDataGet() + * + * @param[in] p_ctrl Pointer to control structure. + * @param[out] p_pad_rx_coordinate Pointer to get coordinate of receiver side. + * @param[out] p_pad_tx_coordinate Pointer to get coordinate of transmitter side. + * @param[out] p_pad_num_touch Pointer to get touch count. + */ + fsp_err_t (* padDataGet)(touch_ctrl_t * const p_ctrl, uint16_t * p_pad_rx_coordinate, + uint16_t * p_pad_tx_coordinate, uint8_t * p_pad_num_touch); + + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref RM_TOUCH_CallbackSet() + * + * @param[in] p_ctrl Pointer to the CTSU 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)(touch_ctrl_t * const p_api_ctrl, void (* p_callback)(touch_callback_args_t *), + void const * const p_context, touch_callback_args_t * const p_callback_memory); + /** Close driver. * @par Implemented as * - @ref RM_TOUCH_Close() diff --git a/ra/fsp/inc/api/rm_vee_api.h b/ra/fsp/inc/api/rm_vee_api.h index 01613318d..46734320a 100644 --- a/ra/fsp/inc/api/rm_vee_api.h +++ b/ra/fsp/inc/api/rm_vee_api.h @@ -180,6 +180,19 @@ typedef struct st_rm_vee_api */ fsp_err_t (* format)(rm_vee_ctrl_t * const p_ctrl, uint8_t const * const p_ref_data); + /** Specify callback function and optional context pointer and working memory pointer. + * @par Implemented as + * - @ref RM_VEE_FLASH_CallbackSet() + * + * @param[in] p_ctrl Control block set in @ref rm_vee_api_t::open call. + * @param[in] p_callback Callback function to register + * @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)(rm_vee_ctrl_t * const p_api_ctrl, void (* p_callback)(rm_vee_callback_args_t *), + void const * const p_context, rm_vee_callback_args_t * const p_callback_memory); + /** Closes the module and lower level storage device. * @par Implemented as * - @ref RM_VEE_FLASH_Close diff --git a/ra/fsp/inc/fsp_common_api.h b/ra/fsp/inc/fsp_common_api.h index c4d566e82..52fd68ba7 100644 --- a/ra/fsp/inc/fsp_common_api.h +++ b/ra/fsp/inc/fsp_common_api.h @@ -58,8 +58,12 @@ #endif /** FSP Header and Footer definitions */ -#define FSP_HEADER FSP_CPP_HEADER -#define FSP_FOOTER FSP_CPP_FOOTER +#define FSP_HEADER FSP_CPP_HEADER +#define FSP_FOOTER FSP_CPP_FOOTER + +/** 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 @@ -103,6 +107,7 @@ typedef enum e_fsp_err 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 /* Start of RTOS only error codes */ FSP_ERR_INTERNAL = 100, ///< Internal error @@ -303,6 +308,8 @@ typedef enum e_fsp_err 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, /* Start of SF_CRYPTO specific */ FSP_ERR_CRYPTO_COMMON_NOT_OPENED = 0x20000, ///< Crypto Framework Common is not opened diff --git a/ra/fsp/inc/fsp_features.h b/ra/fsp/inc/fsp_features.h index c9a791823..9f6af3eef 100644 --- a/ra/fsp/inc/fsp_features.h +++ b/ra/fsp/inc/fsp_features.h @@ -113,6 +113,7 @@ typedef enum e_fsp_ip 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_t; /** Signals that can be mapped to an interrupt. */ diff --git a/ra/fsp/inc/fsp_version.h b/ra/fsp/inc/fsp_version.h index a75d71e49..1e1ea659e 100644 --- a/ra/fsp/inc/fsp_version.h +++ b/ra/fsp/inc/fsp_version.h @@ -38,22 +38,22 @@ **********************************************************************************************************************/ /** FSP pack major version. */ -#define FSP_VERSION_MAJOR (1U) +#define FSP_VERSION_MAJOR (2U) /** FSP pack minor version. */ -#define FSP_VERSION_MINOR (3U) +#define FSP_VERSION_MINOR (0U) /** FSP pack patch version. */ -#define FSP_VERSION_PATCH (1U) +#define FSP_VERSION_PATCH (0U) /** FSP pack version build number (currently unused). */ #define FSP_VERSION_BUILD (0U) /** Public FSP version name. */ -#define FSP_VERSION_STRING ("1.3.1") +#define FSP_VERSION_STRING ("2.0.0") /** Unique FSP version ID. */ -#define FSP_VERSION_BUILD_STRING ("Built with Renesas Advanced Flexible Software Package version 1.3.1") +#define FSP_VERSION_BUILD_STRING ("Built with Renesas Advanced Flexible Software Package version 2.0.0") /********************************************************************************************************************** * Typedef definitions diff --git a/ra/fsp/inc/instances/r_adc.h b/ra/fsp/inc/instances/r_adc.h index 192b330a7..63ee7619c 100644 --- a/ra/fsp/inc/instances/r_adc.h +++ b/ra/fsp/inc/instances/r_adc.h @@ -215,11 +215,20 @@ typedef struct st_adc_channel_cfg /** ADC instance control block. DO NOT INITIALIZE. Initialized in @ref adc_api_t::open(). */ typedef struct { - R_ADC0_Type * p_reg; // Base register for this unit + R_ADC0_Type * p_reg; // Base register for this unit adc_cfg_t const * p_cfg; - uint32_t opened; // Boolean to verify that the Unit has been initialized - uint32_t scan_mask; // Scan mask used for Normal scan. + uint32_t opened; // Boolean to verify that the Unit has been initialized + uint32_t scan_mask; // Scan mask used for Normal scan. uint16_t scan_start_adcsr; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(adc_callback_args_t *); // Pointer to callback that is called when an adc_event_t occurs. + adc_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + + /* Pointer to context to be passed into callback function */ + void const * p_context; } adc_instance_ctrl_t; /********************************************************************************************************************** @@ -248,6 +257,10 @@ fsp_err_t R_ADC_Close(adc_ctrl_t * p_ctrl); fsp_err_t R_ADC_OffsetSet(adc_ctrl_t * const p_ctrl, adc_channel_t const reg_id, int32_t offset); fsp_err_t R_ADC_Calibrate(adc_ctrl_t * const p_ctrl, void * const p_extend); fsp_err_t R_ADC_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_ADC_CallbackSet(adc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(adc_callback_args_t *), + void const * const p_context, + adc_callback_args_t * const p_callback_memory); /*******************************************************************************************************************//** * @} (end defgroup ADC) diff --git a/ra/fsp/inc/instances/r_agt.h b/ra/fsp/inc/instances/r_agt.h index a57bc248a..09afed5a2 100644 --- a/ra/fsp/inc/instances/r_agt.h +++ b/ra/fsp/inc/instances/r_agt.h @@ -119,10 +119,17 @@ typedef enum e_agt_pin_cfg /** Channel control block. DO NOT INITIALIZE. Initialization occurs when @ref timer_api_t::open is called. */ typedef struct st_agt_instance_ctrl { - uint32_t open; ///< Whether or not channel is open - const timer_cfg_t * p_cfg; ///< Pointer to initial configurations - R_AGT0_Type * p_reg; ///< Base register for this channel - uint32_t period; ///< Current timer period (counts) + uint32_t open; // Whether or not channel is open + const timer_cfg_t * p_cfg; // Pointer to initial configurations + R_AGT0_Type * p_reg; // Base register for this channel + uint32_t period; // Current timer period (counts) + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(timer_callback_args_t *); // Pointer to callback that is called when a timer_event_t occurs. + timer_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + void const * p_context; // Pointer to context to be passed into callback function } agt_instance_ctrl_t; /** Optional AGT extension data structure.*/ @@ -171,6 +178,10 @@ fsp_err_t R_AGT_InfoGet(timer_ctrl_t * const p_ctrl, timer_info_t * const p_info fsp_err_t R_AGT_StatusGet(timer_ctrl_t * const p_ctrl, timer_status_t * const p_status); fsp_err_t R_AGT_Stop(timer_ctrl_t * const p_ctrl); fsp_err_t R_AGT_Open(timer_ctrl_t * const p_ctrl, timer_cfg_t const * const p_cfg); +fsp_err_t R_AGT_CallbackSet(timer_ctrl_t * const p_api_ctrl, + void ( * p_callback)(timer_callback_args_t *), + void const * const p_context, + timer_callback_args_t * const p_callback_memory); fsp_err_t R_AGT_VersionGet(fsp_version_t * const p_version); /*******************************************************************************************************************//** diff --git a/ra/fsp/inc/instances/r_cac.h b/ra/fsp/inc/instances/r_cac.h index f4efcb272..591cd86fa 100644 --- a/ra/fsp/inc/instances/r_cac.h +++ b/ra/fsp/inc/instances/r_cac.h @@ -51,6 +51,17 @@ typedef struct st_cac_instance_ctrl { uint32_t open; // Set to "CAC" once API has been successfully opened. cac_cfg_t const * p_cfg; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(cac_callback_args_t *); + cac_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void const * p_context; } cac_instance_ctrl_t; /********************************************************************************************************************** @@ -73,6 +84,10 @@ fsp_err_t R_CAC_Read(cac_ctrl_t * const p_ctrl, uint16_t * const p_counter); fsp_err_t R_CAC_Reset(cac_ctrl_t * const p_ctrl); fsp_err_t R_CAC_Close(cac_ctrl_t * const p_ctrl); fsp_err_t R_CAC_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_CAC_CallbackSet(cac_ctrl_t * const p_ctrl, + void ( * p_callback)(cac_callback_args_t *), + void const * const p_context, + cac_callback_args_t * const p_callback_memory); /*******************************************************************************************************************//** * @} (end addtogroup CAC) diff --git a/ra/fsp/inc/instances/r_can.h b/ra/fsp/inc/instances/r_can.h index 5b9fe7b86..7b8fe8764 100644 --- a/ra/fsp/inc/instances/r_can.h +++ b/ra/fsp/inc/instances/r_can.h @@ -50,16 +50,23 @@ FSP_HEADER typedef struct st_can_instance_ctrl { /* Parameters to control CAN peripheral device */ - can_cfg_t const * p_cfg; // Pointer to the configuration structure - R_CAN0_Type * p_reg; // Pointer to register base address - uint32_t open; // Open status of channel. - can_operation_mode_t operation_mode; // Can operation mode. - can_test_mode_t test_mode; // Can operation mode. - can_id_mode_t id_mode; // Standard or Extended ID mode. - uint32_t mailbox_count; // Number of mailboxes. - can_mailbox_t * p_mailbox; // Pointer to mailboxes. - can_message_mode_t message_mode; // Overwrite message or overrun. - can_clock_source_t clock_source; // Clock source. CANMCLK or PCLKB. + can_cfg_t const * p_cfg; // Pointer to the configuration structure + R_CAN0_Type * p_reg; // Pointer to register base address + uint32_t open; // Open status of channel. + can_operation_mode_t operation_mode; // Can operation mode. + can_test_mode_t test_mode; // Can operation mode. + can_id_mode_t id_mode; // Standard or Extended ID mode. + uint32_t mailbox_count; // Number of mailboxes. + can_mailbox_t * p_mailbox; // Pointer to mailboxes. + can_message_mode_t message_mode; // Overwrite message or overrun. + can_clock_source_t clock_source; // Clock source. CANMCLK or PCLKB. + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(can_callback_args_t *); // Pointer to callback + can_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } can_instance_ctrl_t; /* CAN clock configuration and mailbox mask to be pointed to by p_extend. */ @@ -89,6 +96,10 @@ fsp_err_t R_CAN_ModeTransition(can_ctrl_t * const p_api_ctrl, can_operation_mode_t operation_mode, can_test_mode_t test_mode); fsp_err_t R_CAN_InfoGet(can_ctrl_t * const p_api_ctrl, can_info_t * const p_info); +fsp_err_t R_CAN_CallbackSet(can_ctrl_t * const p_api_ctrl, + void ( * p_callback)(can_callback_args_t *), + void const * const p_context, + can_callback_args_t * const p_callback_memory); fsp_err_t R_CAN_VersionGet(fsp_version_t * const version); /*******************************************************************************************************************//** diff --git a/ra/fsp/inc/instances/r_cgc.h b/ra/fsp/inc/instances/r_cgc.h index 79a99f356..8230d8915 100644 --- a/ra/fsp/inc/instances/r_cgc.h +++ b/ra/fsp/inc/instances/r_cgc.h @@ -49,9 +49,16 @@ FSP_HEADER /** CGC private control block. DO NOT MODIFY. Initialization occurs when R_CGC_Open() is called. */ typedef struct st_cgc_instance_ctrl { - uint32_t open; + uint32_t open; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + cgc_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + void (* p_callback)(cgc_callback_args_t * p_args); // Pointer to callback that is called when a cgc_event_t occurs. + + /** Placeholder for user data. Passed to the user callback in ::cgc_callback_args_t. */ void const * p_context; - void (* p_callback)(cgc_callback_args_t * p_args); } cgc_instance_ctrl_t; /********************************************************************************************************************** @@ -81,6 +88,10 @@ fsp_err_t R_CGC_SystemClockGet(cgc_ctrl_t * const p_ctrl, fsp_err_t R_CGC_OscStopDetectEnable(cgc_ctrl_t * const p_ctrl); fsp_err_t R_CGC_OscStopDetectDisable(cgc_ctrl_t * const p_ctrl); fsp_err_t R_CGC_OscStopStatusClear(cgc_ctrl_t * const p_ctrl); +fsp_err_t R_CGC_CallbackSet(cgc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(cgc_callback_args_t *), + void const * const p_context, + cgc_callback_args_t * const p_callback_memory); fsp_err_t R_CGC_Close(cgc_ctrl_t * const p_ctrl); fsp_err_t R_CGC_VersionGet(fsp_version_t * version); diff --git a/ra/fsp/inc/instances/r_ctsu.h b/ra/fsp/inc/instances/r_ctsu.h index 2ffeeb98a..ca14b391b 100644 --- a/ra/fsp/inc/instances/r_ctsu.h +++ b/ra/fsp/inc/instances/r_ctsu.h @@ -130,9 +130,13 @@ typedef struct st_ctsu_correction_info volatile ctsu_self_buf_t scanbuf; ///< Correction scan buffer #if (BSP_FEATURE_CTSU_VERSION == 2) #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) + #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) + uint16_t tscap_voltage; ///< TSCAP Voltage by ADC + #endif uint16_t scan_index; ///< Scan point index uint16_t update_counter; ///< Coefficient update counter uint16_t ex_base_value; ///< Value of external registance measurement + uint8_t suadj0; ///< Stored SUADJ0 value #endif uint16_t base_value[CTSU_RANGE_NUM]; ///< Value of internal registance measurement uint16_t error_rate[CTSU_RANGE_NUM]; ///< Error rate of base vs DAC @@ -171,39 +175,43 @@ typedef struct st_ctsu_corrcfc_info /** CTSU private control block. DO NOT MODIFY. Initialization occurs when R_CTSU_Open() is called. */ typedef struct st_ctsu_instance_ctrl { - uint32_t open; ///< Whether or not driver is open. - ctsu_state_t state; ///< CTSU run state. - ctsu_tuning_t tuning; ///< CTSU Initial offset tuning status. - uint16_t num_elements; ///< Number of elements to scan - uint16_t wr_index; ///< Word index into ctsuwr register array. - uint16_t rd_index; ///< Word index into scan data buffer. - uint8_t * p_tuning_complete; ///< Pointer to tuning completion flag of each element. g_ctsu_tuning_complete[] is set by Open API. - int32_t * p_tuning_diff; ///< Pointer to difference from base value of each element. g_ctsu_tuning_diff[] is set by Open API. - uint16_t average; ///< CTSU Moving average counter. - uint16_t num_moving_average; ///< Copy from config by Open API. - uint8_t ctsucr1; ///< Copy from (atune1 << 3, md << 6) by Open API. CLK, ATUNE0, CSW, and PON is set by HAL driver. - ctsu_ctsuwr_t * p_ctsuwr; ///< CTSUWR write register value. g_ctsu_ctsuwr[] is set by Open API. - ctsu_self_buf_t * p_self_raw; ///< Pointer to Self raw data. g_ctsu_self_raw[] is set by Open API. - uint16_t * p_self_work; ///< Pointer to Self work buffer. g_ctsu_self_work[] is set by Open API. - uint16_t * p_self_data; ///< Pointer to Self moving average data. g_ctsu_self_data[] is set by Open API. - ctsu_mutual_buf_t * p_mutual_raw; ///< Pointer to Mutual raw data. g_ctsu_mutual_raw[] is set by Open API. - uint16_t * p_mutual_pri_work; ///< Pointer to Mutual primary work buffer. g_ctsu_mutual_pri_work[] is set by Open API. - uint16_t * p_mutual_snd_work; ///< Pointer to Mutual secondary work buffer. g_ctsu_mutual_snd_work[] is set by Open API. - uint16_t * p_mutual_pri_data; ///< Pointer to Mutual primary moving average data. g_ctsu_mutual_pri_data[] is set by Open API. - uint16_t * p_mutual_snd_data; ///< Pointer to Mutual secondary moving average data. g_ctsu_mutual_snd_data[] is set by Open API. - ctsu_correction_info_t * p_correction_info; ///< Pointer to correction info + uint32_t open; ///< Whether or not driver is open. + ctsu_state_t state; ///< CTSU run state. + ctsu_tuning_t tuning; ///< CTSU Initial offset tuning status. + uint16_t num_elements; ///< Number of elements to scan + uint16_t wr_index; ///< Word index into ctsuwr register array. + uint16_t rd_index; ///< Word index into scan data buffer. + uint8_t * p_tuning_count; ///< Pointer to tuning count of each element. g_ctsu_tuning_count[] is set by Open API. + int32_t * p_tuning_diff; ///< Pointer to difference from base value of each element. g_ctsu_tuning_diff[] is set by Open API. + uint16_t average; ///< CTSU Moving average counter. + uint16_t num_moving_average; ///< Copy from config by Open API. + uint8_t ctsucr1; ///< Copy from (atune1 << 3, md << 6) by Open API. CLK, ATUNE0, CSW, and PON is set by HAL driver. + ctsu_ctsuwr_t * p_ctsuwr; ///< CTSUWR write register value. g_ctsu_ctsuwr[] is set by Open API. + ctsu_self_buf_t * p_self_raw; ///< Pointer to Self raw data. g_ctsu_self_raw[] is set by Open API. + uint16_t * p_self_work; ///< Pointer to Self work buffer. g_ctsu_self_work[] is set by Open API. + uint16_t * p_self_data; ///< Pointer to Self moving average data. g_ctsu_self_data[] is set by Open API. + ctsu_mutual_buf_t * p_mutual_raw; ///< Pointer to Mutual raw data. g_ctsu_mutual_raw[] is set by Open API. + uint16_t * p_mutual_pri_work; ///< Pointer to Mutual primary work buffer. g_ctsu_mutual_pri_work[] is set by Open API. + uint16_t * p_mutual_snd_work; ///< Pointer to Mutual secondary work buffer. g_ctsu_mutual_snd_work[] is set by Open API. + uint16_t * p_mutual_pri_data; ///< Pointer to Mutual primary moving average data. g_ctsu_mutual_pri_data[] is set by Open API. + uint16_t * p_mutual_snd_data; ///< Pointer to Mutual secondary moving average data. g_ctsu_mutual_snd_data[] is set by Open API. + ctsu_correction_info_t * p_correction_info; ///< Pointer to correction info #if (BSP_FEATURE_CTSU_VERSION == 2) - ctsu_range_t range; ///< According to atune12. (20uA : 0, 40uA : 1, 80uA : 2, 160uA : 3) - uint8_t ctsucr2; ///< Copy from (posel, atune1, md) by Open API. FCMODE and SDPSEL and LOAD is set by HAL driver. - uint64_t cfc_rx_bitmap; ///< Bitmap of CFC receive terminal. - ctsu_corrcfc_info_t * p_corrcfc_info; ///< pointer to CFC correction info + ctsu_range_t range; ///< According to atune12. (20uA : 0, 40uA : 1, 80uA : 2, 160uA : 3) + uint8_t ctsucr2; ///< Copy from (posel, atune1, md) by Open API. FCMODE and SDPSEL and LOAD is set by HAL driver. + uint64_t cfc_rx_bitmap; ///< Bitmap of CFC receive terminal. + ctsu_corrcfc_info_t * p_corrcfc_info; ///< pointer to CFC correction info #endif - ctsu_cfg_t const * p_ctsu_cfg; ///< Pointer to initial configurations. - IRQn_Type write_irq; ///< Copy from config by Open API. CTSU_CTSUWR interrupt vector - IRQn_Type read_irq; ///< Copy from config by Open API. CTSU_CTSURD interrupt vector - IRQn_Type end_irq; ///< Copy from config by Open API. CTSU_CTSUFN interrupt vector - void const * p_context; ///< Placeholder for user data. - void (* p_callback)(ctsu_callback_args_t * p_args); ///< Callback provided when a CTSUFN occurs. + ctsu_cfg_t const * p_ctsu_cfg; ///< Pointer to initial configurations. + IRQn_Type write_irq; ///< Copy from config by Open API. CTSU_CTSUWR interrupt vector + IRQn_Type read_irq; ///< Copy from config by Open API. CTSU_CTSURD interrupt vector + IRQn_Type end_irq; ///< Copy from config by Open API. CTSU_CTSUFN interrupt vector +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; ///< If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(ctsu_callback_args_t *); ///< Callback provided when a CTSUFN occurs. + ctsu_callback_args_t * p_callback_memory; ///< Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + void const * p_context; ///< Placeholder for user data. } ctsu_instance_ctrl_t; /********************************************************************************************************************** @@ -222,6 +230,10 @@ extern const ctsu_api_t g_ctsu_on_ctsu; fsp_err_t R_CTSU_Open(ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cfg); fsp_err_t R_CTSU_ScanStart(ctsu_ctrl_t * const p_ctrl); fsp_err_t R_CTSU_DataGet(ctsu_ctrl_t * const p_ctrl, uint16_t * p_data); +fsp_err_t R_CTSU_CallbackSet(ctsu_ctrl_t * const p_api_ctrl, + void ( * p_callback)(ctsu_callback_args_t *), + void const * const p_context, + ctsu_callback_args_t * const p_callback_memory); fsp_err_t R_CTSU_Close(ctsu_ctrl_t * const p_ctrl); fsp_err_t R_CTSU_VersionGet(fsp_version_t * const p_version); diff --git a/ra/fsp/inc/instances/r_doc.h b/ra/fsp/inc/instances/r_doc.h index 0e1f8745d..36569dd0b 100644 --- a/ra/fsp/inc/instances/r_doc.h +++ b/ra/fsp/inc/instances/r_doc.h @@ -46,6 +46,15 @@ typedef struct st_doc_instance_ctrl { doc_cfg_t const * p_cfg; // Pointer to the configuration structure uint32_t open; ///< Used by driver to check if the control structure is valid + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(doc_callback_args_t *); + doc_callback_args_t * p_callback_memory; + void const * p_context; ///< User defined context passed into callback function } doc_instance_ctrl_t; /********************************************************************************************************************** @@ -66,6 +75,10 @@ fsp_err_t R_DOC_Close(doc_ctrl_t * const p_api_ctrl); fsp_err_t R_DOC_StatusGet(doc_ctrl_t * const p_api_ctrl, doc_status_t * p_status); fsp_err_t R_DOC_Write(doc_ctrl_t * const p_api_ctrl, uint16_t data); fsp_err_t R_DOC_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_DOC_CallbackSet(doc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(doc_callback_args_t *), + void const * const p_context, + doc_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_ether.h b/ra/fsp/inc/instances/r_ether.h index 7c9a83657..7cd088858 100644 --- a/ra/fsp/inc/instances/r_ether.h +++ b/ra/fsp/inc/instances/r_ether.h @@ -174,8 +174,6 @@ fsp_err_t R_ETHER_BufferRelease(ether_ctrl_t * const p_ctrl); fsp_err_t R_ETHER_Write(ether_ctrl_t * const p_ctrl, void * const p_buffer, uint32_t const frame_length); -fsp_err_t R_ETHER_LinkStatusCheck(ether_ctrl_t * const p_ctrl); - fsp_err_t R_ETHER_LinkProcess(ether_ctrl_t * const p_ctrl); fsp_err_t R_ETHER_WakeOnLANEnable(ether_ctrl_t * const p_ctrl); diff --git a/ra/fsp/inc/instances/r_flash_hp.h b/ra/fsp/inc/instances/r_flash_hp.h index 9185804bf..607d7952c 100644 --- a/ra/fsp/inc/instances/r_flash_hp.h +++ b/ra/fsp/inc/instances/r_flash_hp.h @@ -44,13 +44,6 @@ FSP_HEADER #define FLASH_HP_CODE_VERSION_MAJOR (1U) #define FLASH_HP_CODE_VERSION_MINOR (1U) -/* RA6M3, RA6M2 and RA6M1 MCUs uses RV40F Phase 2 Flash technology. */ -/* This macro will eventually be migrated to bsp_feature.h. */ -#if defined(BSP_MCU_GROUP_RA6M3) || defined(BSP_MCU_GROUP_RA6M2) || defined(BSP_MCU_GROUP_RA6M1) || \ - defined(BSP_MCU_GROUP_RA6T1) - #define FLASH_HP_VERSION_PHASE_2 -#endif - /* If Code Flash programming is enabled, then all API functions must execute out of RAM. */ #if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) #if defined(__ICCARM__) @@ -81,8 +74,7 @@ typedef enum e_flash_bgo_operation /** Flash HP instance control block. DO NOT INITIALIZE. */ typedef struct st_flash_hp_instance_ctrl { - uint32_t opened; ///< To check whether api has been opened or not. - void (* p_callback)(flash_callback_args_t * p_args); /// User Callback function. + uint32_t opened; ///< To check whether api has been opened or not. flash_cfg_t const * p_cfg; uint32_t timeout_write_cf; uint32_t timeout_write_df; @@ -95,7 +87,13 @@ typedef struct st_flash_hp_instance_ctrl uint32_t source_start_address; uint32_t dest_end_address; uint32_t operations_remaining; - flash_bgo_operation_t current_operation; ///< Operation in progress, for example, FLASH_OPERATION_CF_ERASE + flash_bgo_operation_t current_operation; ///< Operation in progress, for example, FLASH_OPERATION_CF_ERASE +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(flash_callback_args_t *); // Pointer to callback + flash_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } flash_hp_instance_ctrl_t; /********************************************************************************************************************** @@ -142,6 +140,10 @@ fsp_err_t R_FLASH_HP_UpdateFlashClockFreq(flash_ctrl_t * const p_api_ctrl); fsp_err_t R_FLASH_HP_StartUpAreaSelect(flash_ctrl_t * const p_api_ctrl, flash_startup_area_swap_t swap_type, bool is_temporary); +fsp_err_t R_FLASH_HP_CallbackSet(flash_ctrl_t * const p_api_ctrl, + void ( * p_callback)(flash_callback_args_t *), + void const * const p_context, + flash_callback_args_t * const p_callback_memory); fsp_err_t R_FLASH_HP_VersionGet(fsp_version_t * const p_version); fsp_err_t R_FLASH_HP_InfoGet(flash_ctrl_t * const p_api_ctrl, flash_info_t * const p_info); diff --git a/ra/fsp/inc/instances/r_flash_lp.h b/ra/fsp/inc/instances/r_flash_lp.h index d66a22db7..8a3a7b8f6 100644 --- a/ra/fsp/inc/instances/r_flash_lp.h +++ b/ra/fsp/inc/instances/r_flash_lp.h @@ -122,6 +122,10 @@ fsp_err_t R_FLASH_LP_Reset(flash_ctrl_t * const p_api_ctrl); fsp_err_t R_FLASH_LP_StartUpAreaSelect(flash_ctrl_t * const p_api_ctrl, flash_startup_area_swap_t swap_type, bool is_temporary); +fsp_err_t R_FLASH_LP_CallbackSet(flash_ctrl_t * const p_api_ctrl, + void ( * p_callback)(flash_callback_args_t *), + void const * const p_context, + flash_callback_args_t * const p_callback_memory); fsp_err_t R_FLASH_LP_UpdateFlashClockFreq(flash_ctrl_t * const p_api_ctrl); fsp_err_t R_FLASH_LP_VersionGet(fsp_version_t * const p_version); fsp_err_t R_FLASH_LP_InfoGet(flash_ctrl_t * const p_api_ctrl, flash_info_t * const p_info); diff --git a/ra/fsp/inc/instances/r_gpt.h b/ra/fsp/inc/instances/r_gpt.h index 0348d328d..3dd3b5bd3 100644 --- a/ra/fsp/inc/instances/r_gpt.h +++ b/ra/fsp/inc/instances/r_gpt.h @@ -60,14 +60,11 @@ typedef enum e_gpt_pin_level GPT_PIN_LEVEL_HIGH = 1, ///< Pin level high } gpt_pin_level_t; -/** GPT PWM shortest pin level */ +/* DEPRECATED - Do not use. */ typedef enum e_gpt_shortest_level { - /** 1 extra PCLK in ON time. Minimum ON time will be limited to 2 PCLK raw counts. */ GPT_SHORTEST_LEVEL_OFF = 0, - - /** 1 extra PCLK in OFF time. Minimum ON time will be limited to 1 PCLK raw counts. */ - GPT_SHORTEST_LEVEL_ON = 1, + GPT_SHORTEST_LEVEL_ON = 1, } gpt_shortest_level_t; /** Sources can be used to start the timer, stop the timer, count up, or count down. These enumerations represent @@ -257,11 +254,18 @@ typedef enum e_gpt_interrupt_skip_adc /** Channel control block. DO NOT INITIALIZE. Initialization occurs when @ref timer_api_t::open is called. */ typedef struct st_gpt_instance_ctrl { - uint32_t open; // Whether or not channel is open - const timer_cfg_t * p_cfg; // Pointer to initial configurations - R_GPT0_Type * p_reg; // Base register for this channel - uint32_t channel_mask; // Channel bitmask - timer_variant_t variant; // Timer variant + uint32_t open; // Whether or not channel is open + const timer_cfg_t * p_cfg; // Pointer to initial configurations + R_GPT0_Type * p_reg; // Base register for this channel + uint32_t channel_mask; // Channel bitmask + timer_variant_t variant; // Timer variant + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(timer_callback_args_t *); // Pointer to callback + timer_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } gpt_instance_ctrl_t; /** GPT extension for advanced PWM features. */ @@ -288,7 +292,7 @@ typedef struct st_gpt_extended_cfg { gpt_output_pin_t gtioca; ///< Configuration for GPT I/O pin A gpt_output_pin_t gtiocb; ///< Configuration for GPT I/O pin B - gpt_shortest_level_t shortest_pwm_signal; ///< Shortest PWM signal level + gpt_shortest_level_t shortest_pwm_signal; // DEPRECATED - Do not use gpt_source_t start_source; ///< Event sources that trigger the timer to start gpt_source_t stop_source; ///< Event sources that trigger the timer to stop gpt_source_t clear_source; ///< Event sources that trigger the timer to clear @@ -345,6 +349,10 @@ fsp_err_t R_GPT_OutputDisable(timer_ctrl_t * const p_ctrl, gpt_io_pin_t pin); fsp_err_t R_GPT_AdcTriggerSet(timer_ctrl_t * const p_ctrl, gpt_adc_compare_match_t which_compare_match, uint32_t compare_match_value); +fsp_err_t R_GPT_CallbackSet(timer_ctrl_t * const p_api_ctrl, + void ( * p_callback)(timer_callback_args_t *), + void const * const p_context, + timer_callback_args_t * const p_callback_memory); fsp_err_t R_GPT_Close(timer_ctrl_t * const p_ctrl); fsp_err_t R_GPT_VersionGet(fsp_version_t * const p_version); diff --git a/ra/fsp/inc/instances/r_gpt_three_phase.h b/ra/fsp/inc/instances/r_gpt_three_phase.h index 416a1fa4a..119f8e51d 100644 --- a/ra/fsp/inc/instances/r_gpt_three_phase.h +++ b/ra/fsp/inc/instances/r_gpt_three_phase.h @@ -74,6 +74,10 @@ fsp_err_t R_GPT_THREE_PHASE_Start(three_phase_ctrl_t * const p_ctrl); fsp_err_t R_GPT_THREE_PHASE_Reset(three_phase_ctrl_t * const p_ctrl); fsp_err_t R_GPT_THREE_PHASE_DutyCycleSet(three_phase_ctrl_t * const p_ctrl, three_phase_duty_cycle_t * const p_duty_cycle); +fsp_err_t R_GPT_THREE_PHASE_CallbackSet(three_phase_ctrl_t * const p_ctrl, + void ( * p_callback)(timer_callback_args_t *), + void const * const p_context, + timer_callback_args_t * const p_callback_memory); fsp_err_t R_GPT_THREE_PHASE_Close(three_phase_ctrl_t * const p_ctrl); fsp_err_t R_GPT_THREE_PHASE_VersionGet(fsp_version_t * const p_version); diff --git a/ra/fsp/inc/instances/r_icu.h b/ra/fsp/inc/instances/r_icu.h index 0089ebb22..4d4c54740 100644 --- a/ra/fsp/inc/instances/r_icu.h +++ b/ra/fsp/inc/instances/r_icu.h @@ -48,12 +48,15 @@ FSP_HEADER /** ICU private control block. DO NOT MODIFY. Initialization occurs when R_ICU_ExternalIrqOpen is called. */ typedef struct st_icu_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 + uint32_t open; ///< Used to determine if channel control block is in use + IRQn_Type irq; ///< NVIC interrupt number + uint8_t channel; ///< Channel - /** Callback provided when a external IRQ ISR occurs. Set to NULL for no CPU interrupt. */ - void (* p_callback)(external_irq_callback_args_t * p_args); +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) + external_irq_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. +#endif + 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 const * p_context; @@ -80,6 +83,11 @@ fsp_err_t R_ICU_ExternalIrqDisable(external_irq_ctrl_t * const p_api_ctrl); fsp_err_t R_ICU_ExternalIrqVersionGet(fsp_version_t * const p_version); +fsp_err_t R_ICU_ExternalIrqCallbackSet(external_irq_ctrl_t * const p_api_ctrl, + void ( * p_callback)(external_irq_callback_args_t *), + void const * const p_context, + external_irq_callback_args_t * const p_callback_memory); + fsp_err_t R_ICU_ExternalIrqClose(external_irq_ctrl_t * const p_api_ctrl); /*******************************************************************************************************************//** diff --git a/ra/fsp/inc/instances/r_iic_master.h b/ra/fsp/inc/instances/r_iic_master.h index c4e80ddf3..20eca30a5 100644 --- a/ra/fsp/inc/instances/r_iic_master.h +++ b/ra/fsp/inc/instances/r_iic_master.h @@ -89,6 +89,17 @@ typedef struct st_iic_master_instance_ctrl volatile bool activation_on_txi; // Tracks whether the transfer is activated on TXI interrupt volatile bool address_restarted; // Tracks whether the restart condition is send on 10 bit read iic_master_timeout_mode_t timeout_mode; // Holds the timeout mode value. i.e short mode or long mode + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(i2c_master_callback_args_t *); + i2c_master_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void const * p_context; } iic_master_instance_ctrl_t; /** R_IIC extended configuration */ @@ -127,6 +138,10 @@ fsp_err_t R_IIC_MASTER_SlaveAddressSet(i2c_master_ctrl_t * const p_api_ctrl, i2c_master_addr_mode_t const addr_mode); fsp_err_t R_IIC_MASTER_Close(i2c_master_ctrl_t * const p_api_ctrl); fsp_err_t R_IIC_MASTER_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_IIC_MASTER_CallbackSet(i2c_master_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2c_master_callback_args_t *), + void const * const p_context, + i2c_master_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_iic_slave.h b/ra/fsp/inc/instances/r_iic_slave.h index c4f5b259b..264bfa9d5 100644 --- a/ra/fsp/inc/instances/r_iic_slave.h +++ b/ra/fsp/inc/instances/r_iic_slave.h @@ -75,6 +75,17 @@ typedef struct st_iic_slave_instance_ctrl volatile bool do_dummy_read; // Tracks whether a dummy read is issued on the first RX volatile bool start_interrupt_enabled; // Tracks whether the start interrupt is enabled volatile bool transaction_completed; // Tracks whether previous transaction restarted + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(i2c_slave_callback_args_t *); + i2c_slave_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void const * p_context; } iic_slave_instance_ctrl_t; /** R_IIC_SLAVE extended configuration */ @@ -102,6 +113,10 @@ fsp_err_t R_IIC_SLAVE_Read(i2c_slave_ctrl_t * const p_api_ctrl, uint8_t * const fsp_err_t R_IIC_SLAVE_Write(i2c_slave_ctrl_t * const p_api_ctrl, uint8_t * const p_src, uint32_t const bytes); fsp_err_t R_IIC_SLAVE_Close(i2c_slave_ctrl_t * const p_api_ctrl); fsp_err_t R_IIC_SLAVE_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_IIC_SLAVE_CallbackSet(i2c_slave_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2c_slave_callback_args_t *), + void const * const p_context, + i2c_slave_callback_args_t * const p_callback_memory); #endif // R_IIC_SLAVE_H diff --git a/ra/fsp/inc/instances/r_iwdt.h b/ra/fsp/inc/instances/r_iwdt.h index a89f84a99..173917557 100644 --- a/ra/fsp/inc/instances/r_iwdt.h +++ b/ra/fsp/inc/instances/r_iwdt.h @@ -50,7 +50,12 @@ typedef struct st_iwdt_instance_ctrl uint32_t wdt_open; ///< Indicates whether the open() API has been successfully called. void const * p_context; ///< Placeholder for user data. Passed to the user callback in wdt_callback_args_t. R_IWDT_Type * p_reg; ///< Pointer to register base address. + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS). +#endif void (* p_callback)(wdt_callback_args_t * p_args); ///< Callback provided when a WDT NMI ISR occurs. + wdt_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. } iwdt_instance_ctrl_t; /********************************************************************************************************************** @@ -74,6 +79,11 @@ fsp_err_t R_IWDT_CounterGet(wdt_ctrl_t * const p_api_ctrl, uint32_t * const p_co fsp_err_t R_IWDT_TimeoutGet(wdt_ctrl_t * const p_api_ctrl, wdt_timeout_values_t * const p_timeout); +fsp_err_t R_IWDT_CallbackSet(wdt_ctrl_t * const p_ctrl, + void ( * p_callback)(wdt_callback_args_t *), + void const * const p_context, + wdt_callback_args_t * const p_callback_memory); + fsp_err_t R_IWDT_VersionGet(fsp_version_t * const p_data); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ diff --git a/ra/fsp/inc/instances/r_lvd.h b/ra/fsp/inc/instances/r_lvd.h index 9f9ea676d..f94f9da91 100644 --- a/ra/fsp/inc/instances/r_lvd.h +++ b/ra/fsp/inc/instances/r_lvd.h @@ -51,6 +51,15 @@ typedef struct st_lvd_instance_ctrl { uint32_t open; lvd_cfg_t const * p_cfg; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(lvd_callback_args_t *); // Pointer to callback that is called when lvd_current_state_t changes. + lvd_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + + /* Pointer to context to be passed into callback function */ + void const * p_context; } lvd_instance_ctrl_t; /********************************************************************************************************************** @@ -71,6 +80,10 @@ fsp_err_t R_LVD_Close(lvd_ctrl_t * const p_api_ctrl); fsp_err_t R_LVD_StatusGet(lvd_ctrl_t * const p_api_ctrl, lvd_status_t * p_lvd_status); fsp_err_t R_LVD_StatusClear(lvd_ctrl_t * const p_api_ctrl); fsp_err_t R_LVD_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_LVD_CallbackSet(lvd_ctrl_t * const p_api_ctrl, + void ( * p_callback)(lvd_callback_args_t *), + void const * const p_context, + lvd_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_ospi.h b/ra/fsp/inc/instances/r_ospi.h new file mode 100644 index 000000000..1d0c731a3 --- /dev/null +++ b/ra/fsp/inc/instances/r_ospi.h @@ -0,0 +1,179 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup OSPI + * @{ + **********************************************************************************************************************/ + +#ifndef R_OSPI_H +#define R_OSPI_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "r_ospi_cfg.h" +#include "r_spi_flash_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 OSPI_CODE_VERSION_MAJOR (1U) +#define OSPI_CODE_VERSION_MINOR (0U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/* OSPI Flash device chip select */ +typedef enum e_ospi_device_number +{ + OSPI_DEVICE_NUMBER_0, ///< Device connected to Chip-Select 0 + OSPI_DEVICE_NUMBER_1, ///< Device connected to Chip-Select 1 +} ospi_device_number_t; + +/* OSPI command to command interval in single continuous read/write mode + * Unit: OCTACLK + */ +typedef enum e_ospi_command_interval_clocks +{ + OSPI_COMMAND_INTERVAL_CLOCKS_2, + OSPI_COMMAND_INTERVAL_CLOCKS_5, + OSPI_COMMAND_INTERVAL_CLOCKS_7, + OSPI_COMMAND_INTERVAL_CLOCKS_9, + OSPI_COMMAND_INTERVAL_CLOCKS_11, + OSPI_COMMAND_INTERVAL_CLOCKS_13, + OSPI_COMMAND_INTERVAL_CLOCKS_15, + OSPI_COMMAND_INTERVAL_CLOCKS_17 +} ospi_command_interval_clocks_t; + +/* OSPI chip select de-assertion duration after last command in single continuous read/write mode + * Unit: OCTACLK + */ +typedef enum e_ospi_cs_pullup_clocks +{ + OSPI_COMMAND_CS_PULLUP_CLOCKS_2, ///< 1.5 clocks DOPI mode; 2 Clocks all other modes; Unsupported for DOPI Read + OSPI_COMMAND_CS_PULLUP_CLOCKS_3, ///< 2.5 clocks DOPI mode; 3 Clocks all other modes; Unsupported for DOPI Read + OSPI_COMMAND_CS_PULLUP_CLOCKS_4, ///< 3.5 clocks DOPI mode; 4 Clocks all other modes; Unsupported for DOPI Read + OSPI_COMMAND_CS_PULLUP_CLOCKS_5, ///< 4.5 clocks DOPI mode; 5 Clocks all other modes; Unsupported for DOPI Read + OSPI_COMMAND_CS_PULLUP_CLOCKS_6, ///< 5.5 clocks DOPI mode; 6 Clocks all other modes; Unsupported for DOPI Read + OSPI_COMMAND_CS_PULLUP_CLOCKS_7, ///< 6.5 clocks DOPI mode; 7 Clocks all other modes + OSPI_COMMAND_CS_PULLUP_CLOCKS_8, ///< 7.5 clocks DOPI mode; 8 Clocks all other modes + OSPI_COMMAND_CS_PULLUP_CLOCKS_9 ///< 8.5 clocks DOPI mode; 9 Clocks all other modes +} ospi_command_cs_pullup_clocks_t; + +/* OSPI chip select assertion duration before first command in single continuous read/write mode + * Unit: OCTACLK + */ +typedef enum e_ospi_cs_pulldown_clocks +{ + OSPI_COMMAND_CS_PULLDOWN_CLOCKS_3 = 1, ///< 2.5 clocks DOPI mode; 3 Clocks all other modes + OSPI_COMMAND_CS_PULLDOWN_CLOCKS_4, ///< 3.5 clocks DOPI mode; 4 Clocks all other modes + OSPI_COMMAND_CS_PULLDOWN_CLOCKS_5 ///< 4.5 clocks DOPI mode; 5 Clocks all other modes +} ospi_command_cs_pulldown_clocks_t; + +/* Memory mapped timing */ +typedef struct st_ospi_timing_setting +{ + ospi_command_interval_clocks_t command_to_command_interval; ///< Interval between 2 consecutive commands + ospi_command_cs_pullup_clocks_t cs_pullup_lag; ///< Duration to de-assert CS line after the last command + ospi_command_cs_pulldown_clocks_t cs_pulldown_lead; ///< Duration to assert CS line before the first command +} ospi_timing_setting_t; + +/* This command set is used only with OPI mode set under ospi_extended_cfg_t. spi_flash_cfg_t holds commands for SPI mode. */ +typedef struct st_ospi_opi_command_set +{ + uint16_t dual_read_command; ///< Dual data Read command, valid only in DOPI mode + uint16_t page_program_command; ///< Page program command + uint16_t write_enable_command; ///< Command to enable write or erase, typically 0x06 + uint16_t status_command; ///< Command to read the write status + uint16_t read_command; ///< Read command + uint8_t command_bytes; ///< Command Bytes +} ospi_opi_command_set_t; + +/* Extended configuration. */ +typedef struct st_ospi_extended_cfg +{ + ospi_device_number_t channel; ///< Device number to be used for memory device + uint32_t memory_size; ///< Size of memory device + uint8_t data_latch_delay_clocks; ///< Specify delay between OM_DQS and OM_DQS Strobe. Set to 0 to auto-callibrate. Typical value is 0x80. + uint8_t single_continuous_mode_read_idle_time; ///< Mode idle time duration in PCLKA + uint8_t single_continuous_mode_write_idle_time; ///< Mode idle time duration in PCLKA + ospi_timing_setting_t const * p_mem_mapped_read_timing_settings; ///< Memory mapped read mode settings + ospi_timing_setting_t const * p_mem_mapped_write_timing_settings; ///< Memory mapped write mode settings + ospi_timing_setting_t const * p_timing_settings; ///< Memory mapped write mode settings + ospi_opi_command_set_t const * p_opi_commands; ///< If OPI commands are not used set this to NULL + uint8_t opi_mem_read_dummy_cycles; ///< Dummy cycles to be inserted for memory mapped reads + uint8_t * p_autocalibration_preamble_pattern_addr; ///< OctaFlash memory address holding the preamble pattern +} ospi_extended_cfg_t; + +/** Instance control block. DO NOT INITIALIZE. Initialization occurs when @ref spi_flash_api_t::open is called */ +typedef struct st_ospi_instance_ctrl +{ + spi_flash_cfg_t const * p_cfg; // Pointer to initial configuration + ospi_device_number_t channel; // Device number to be used for memory device + spi_flash_protocol_t spi_protocol; // Current SPI protocol selected + uint32_t open; // Whether or not driver is open +} ospi_instance_ctrl_t; + +/********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/** @cond INC_HEADER_DEFS_SEC */ +/** Filled in Interface API structure for this Instance. */ +extern const spi_flash_api_t g_ospi_on_spi_flash; + +/** @endcond */ + +fsp_err_t R_OSPI_Open(spi_flash_ctrl_t * p_ctrl, spi_flash_cfg_t const * const p_cfg); +fsp_err_t R_OSPI_Close(spi_flash_ctrl_t * p_ctrl); +fsp_err_t R_OSPI_DirectWrite(spi_flash_ctrl_t * p_ctrl, + uint8_t const * const p_src, + uint32_t const bytes, + bool const read_after_write); +fsp_err_t R_OSPI_DirectRead(spi_flash_ctrl_t * p_ctrl, uint8_t * const p_dest, uint32_t const bytes); +fsp_err_t R_OSPI_DirectTransfer(spi_flash_ctrl_t * p_ctrl, + spi_flash_direct_transfer_t * const p_transfer, + spi_flash_direct_transfer_dir_t direction); +fsp_err_t R_OSPI_SpiProtocolSet(spi_flash_ctrl_t * p_ctrl, spi_flash_protocol_t spi_protocol); +fsp_err_t R_OSPI_XipEnter(spi_flash_ctrl_t * p_ctrl); +fsp_err_t R_OSPI_XipExit(spi_flash_ctrl_t * p_ctrl); +fsp_err_t R_OSPI_Write(spi_flash_ctrl_t * p_ctrl, + uint8_t const * const p_src, + uint8_t * const p_dest, + uint32_t byte_count); +fsp_err_t R_OSPI_Erase(spi_flash_ctrl_t * p_ctrl, uint8_t * const p_device_address, uint32_t byte_count); +fsp_err_t R_OSPI_StatusGet(spi_flash_ctrl_t * p_ctrl, spi_flash_status_t * const p_status); +fsp_err_t R_OSPI_BankSet(spi_flash_ctrl_t * p_ctrl, uint32_t bank); +fsp_err_t R_OSPI_VersionGet(fsp_version_t * const p_version); + +/* 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 OSPI) + **********************************************************************************************************************/ diff --git a/ra/fsp/inc/instances/r_poeg.h b/ra/fsp/inc/instances/r_poeg.h index 2caeb3032..b93b27c04 100644 --- a/ra/fsp/inc/instances/r_poeg.h +++ b/ra/fsp/inc/instances/r_poeg.h @@ -48,9 +48,16 @@ FSP_HEADER /** Channel control block. DO NOT INITIALIZE. Initialization occurs when @ref poeg_api_t::open is called. */ typedef struct st_poeg_instance_ctrl { - uint32_t open; // Whether or not channel is open - const poeg_cfg_t * p_cfg; // Pointer to initial configurations - R_GPT_POEG0_Type * p_reg; // Base register for this channel + uint32_t open; // Whether or not channel is open + const poeg_cfg_t * p_cfg; // Pointer to initial configurations + R_GPT_POEG0_Type * p_reg; // Base register for this channel + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(poeg_callback_args_t *); // Pointer to callback + poeg_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } poeg_instance_ctrl_t; /********************************************************************************************************************** @@ -68,6 +75,10 @@ extern const poeg_api_t g_poeg_on_poeg; **********************************************************************************************************************/ fsp_err_t R_POEG_Open(poeg_ctrl_t * const p_ctrl, poeg_cfg_t const * const p_cfg); fsp_err_t R_POEG_StatusGet(poeg_ctrl_t * const p_ctrl, poeg_status_t * const p_status); +fsp_err_t R_POEG_CallbackSet(poeg_ctrl_t * const p_ctrl, + void ( * p_callback)(poeg_callback_args_t *), + void const * const p_context, + poeg_callback_args_t * const p_callback_memory); fsp_err_t R_POEG_OutputDisable(poeg_ctrl_t * const p_ctrl); fsp_err_t R_POEG_Reset(poeg_ctrl_t * const p_ctrl); fsp_err_t R_POEG_Close(poeg_ctrl_t * const p_ctrl); diff --git a/ra/fsp/inc/instances/r_rtc.h b/ra/fsp/inc/instances/r_rtc.h index a8cc8c753..836bd506b 100644 --- a/ra/fsp/inc/instances/r_rtc.h +++ b/ra/fsp/inc/instances/r_rtc.h @@ -52,9 +52,17 @@ FSP_HEADER /** Channel control block. DO NOT INITIALIZE. Initialization occurs when @ref rtc_api_t::open is called */ typedef struct st_rtc_ctrl { - uint32_t open; ///< Whether or not driver is open - const rtc_cfg_t * p_cfg; ///< Pointer to initial configurations - volatile bool carry_isr_triggered; ///< Was the carry isr triggered + uint32_t open; ///< Whether or not driver is open + const rtc_cfg_t * p_cfg; ///< Pointer to initial configurations + volatile bool carry_isr_triggered; ///< Was the carry isr triggered + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(rtc_callback_args_t *); // Pointer to callback that is called when a rtc_event_t occurs. + rtc_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + + void const * p_context; // Pointer to context to be passed into callback function } rtc_instance_ctrl_t; /********************************************************************************************************************** @@ -80,6 +88,10 @@ fsp_err_t R_RTC_PeriodicIrqRateSet(rtc_ctrl_t * const p_ctrl, rtc_periodic_irq_s fsp_err_t R_RTC_ErrorAdjustmentSet(rtc_ctrl_t * const p_ctrl, rtc_error_adjustment_cfg_t const * const err_adj_cfg); fsp_err_t R_RTC_InfoGet(rtc_ctrl_t * const p_ctrl, rtc_info_t * const p_rtc_info); fsp_err_t R_RTC_VersionGet(fsp_version_t * version); +fsp_err_t R_RTC_CallbackSet(rtc_ctrl_t * const p_ctrl, + void ( * p_callback)(rtc_callback_args_t *), + void const * const p_context, + rtc_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_sci_i2c.h b/ra/fsp/inc/instances/r_sci_i2c.h index 3e0aeacdd..cdd24232e 100644 --- a/ra/fsp/inc/instances/r_sci_i2c.h +++ b/ra/fsp/inc/instances/r_sci_i2c.h @@ -86,6 +86,17 @@ typedef struct st_sci_i2c_instance_ctrl volatile bool do_dummy_read; // Tracks whether a dummy read is issued on the first RX */ volatile bool activation_on_rxi; // Tracks whether the transfer is activated on RXI interrupt */ volatile bool activation_on_txi; // Tracks whether the transfer is activated on TXI interrupt */ + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(i2c_master_callback_args_t *); + i2c_master_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void const * p_context; } sci_i2c_instance_ctrl_t; /** SCI I2C extended configuration */ @@ -122,6 +133,10 @@ fsp_err_t R_SCI_I2C_Abort(i2c_master_ctrl_t * const p_api_ctrl); fsp_err_t R_SCI_I2C_SlaveAddressSet(i2c_master_ctrl_t * const p_api_ctrl, uint32_t const slave, i2c_master_addr_mode_t const addr_mode); +fsp_err_t R_SCI_I2C_CallbackSet(i2c_master_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2c_master_callback_args_t *), + void const * const p_context, + i2c_master_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_sci_spi.h b/ra/fsp/inc/instances/r_sci_spi.h index 7c3bfe8c2..42488999e 100644 --- a/ra/fsp/inc/instances/r_sci_spi.h +++ b/ra/fsp/inc/instances/r_sci_spi.h @@ -69,6 +69,17 @@ typedef struct st_sci_spi_instance_ctrl uint32_t tx_count; uint32_t rx_count; uint32_t count; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(spi_callback_args_t *); + spi_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void const * p_context; } sci_spi_instance_ctrl_t; /********************************************************************************************************************** @@ -101,6 +112,10 @@ fsp_err_t R_SCI_SPI_WriteRead(spi_ctrl_t * const p_api_ctrl, fsp_err_t R_SCI_SPI_Close(spi_ctrl_t * const p_api_ctrl); fsp_err_t R_SCI_SPI_VersionGet(fsp_version_t * p_version); fsp_err_t R_SCI_SPI_CalculateBitrate(uint32_t bitrate, sci_spi_div_setting_t * sclk_div, bool use_mddr); +fsp_err_t R_SCI_SPI_CallbackSet(spi_ctrl_t * const p_api_ctrl, + void ( * p_callback)(spi_callback_args_t *), + void const * const p_context, + spi_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_sci_uart.h b/ra/fsp/inc/instances/r_sci_uart.h index 4cc59a175..c307beaa7 100644 --- a/ra/fsp/inc/instances/r_sci_uart.h +++ b/ra/fsp/inc/instances/r_sci_uart.h @@ -92,6 +92,15 @@ typedef struct st_sci_uart_instance_ctrl /* Base register for this channel */ R_SCI0_Type * p_reg; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(uart_callback_args_t *); // Pointer to callback that is called when a uart_event_t occurs. + uart_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + + /* Pointer to context to be passed into callback function */ + void const * p_context; } sci_uart_instance_ctrl_t; /** Receive FIFO trigger configuration. */ @@ -183,6 +192,10 @@ fsp_err_t R_SCI_UART_BaudCalculate(uint32_t baudrate, bool bitrate_modulation, uint32_t baud_rate_error_x_1000, baud_setting_t * const p_baud_setting); +fsp_err_t R_SCI_UART_CallbackSet(uart_ctrl_t * const p_api_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void const * const p_context, + uart_callback_args_t * const p_callback_memory); /*******************************************************************************************************************//** * @} (end addtogroup SCI_UART) diff --git a/ra/fsp/inc/instances/r_sdhi.h b/ra/fsp/inc/instances/r_sdhi.h index d354dd862..59a65b55c 100644 --- a/ra/fsp/inc/instances/r_sdhi.h +++ b/ra/fsp/inc/instances/r_sdhi.h @@ -104,6 +104,10 @@ typedef struct st_sdmmc_instance_ctrl uint32_t transfer_block_current; uint32_t transfer_block_size; uint32_t aligned_buff[SDHI_MAX_BLOCK_SIZE / sizeof(uint32_t)]; + + void (* p_callback)(sdmmc_callback_args_t *); // Pointer to callback + sdmmc_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } sdhi_instance_ctrl_t; /********************************************************************************************************************** @@ -156,6 +160,10 @@ fsp_err_t R_SDHI_WriteIoExt(sdmmc_ctrl_t * const p_api_ctrl, fsp_err_t R_SDHI_IoIntEnable(sdmmc_ctrl_t * const p_api_ctrl, bool enable); fsp_err_t R_SDHI_StatusGet(sdmmc_ctrl_t * const p_api_ctrl, sdmmc_status_t * const p_status); fsp_err_t R_SDHI_Erase(sdmmc_ctrl_t * const p_api_ctrl, uint32_t const start_sector, uint32_t const sector_count); +fsp_err_t R_SDHI_CallbackSet(sdmmc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(sdmmc_callback_args_t *), + void const * const p_context, + sdmmc_callback_args_t * const p_callback_memory); fsp_err_t R_SDHI_Close(sdmmc_ctrl_t * const p_api_ctrl); fsp_err_t R_SDHI_VersionGet(fsp_version_t * const p_version); diff --git a/ra/fsp/inc/instances/r_spi.h b/ra/fsp/inc/instances/r_spi.h index 208989e23..0132d00e4 100644 --- a/ra/fsp/inc/instances/r_spi.h +++ b/ra/fsp/inc/instances/r_spi.h @@ -146,6 +146,17 @@ typedef struct st_spi_instance_ctrl uint32_t rx_count; ///< Number of Data Frames to transfer (8-bit, 16-bit, 32-bit) uint32_t count; ///< Number of Data Frames to transfer (8-bit, 16-bit, 32-bit) spi_bit_width_t bit_width; ///< Bits per Data frame (8-bit, 16-bit, 32-bit) + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(spi_callback_args_t *); + spi_callback_args_t * p_callback_memory; + + /* Pointer to context to be passed into callback function */ + void const * p_context; } spi_instance_ctrl_t; /********************************************************************************************************************** @@ -184,6 +195,10 @@ fsp_err_t R_SPI_Close(spi_ctrl_t * const p_api_ctrl); fsp_err_t R_SPI_VersionGet(fsp_version_t * p_version); fsp_err_t R_SPI_CalculateBitrate(uint32_t bitrate, rspck_div_setting_t * spck_div); +fsp_err_t R_SPI_CallbackSet(spi_ctrl_t * const p_api_ctrl, + void ( * p_callback)(spi_callback_args_t *), + void const * const p_context, + spi_callback_args_t * const p_callback_memory); /*******************************************************************************************************************//** * @} (end ingroup SPI) diff --git a/ra/fsp/inc/instances/r_ssi.h b/ra/fsp/inc/instances/r_ssi.h index 03b920031..3bfefc870 100644 --- a/ra/fsp/inc/instances/r_ssi.h +++ b/ra/fsp/inc/instances/r_ssi.h @@ -48,7 +48,8 @@ FSP_HEADER typedef enum e_ssi_audio_clock { SSI_AUDIO_CLOCK_EXTERNAL = 0, ///< Audio clock source is the AUDIO_CLK input pin - SSI_AUDIO_CLOCK_GTIOC1A = 1, ///< Audio clock source is internal connection to GPT channel 1 output + SSI_AUDIO_CLOCK_GTIOC1A = 1, // Audio clock source is internal connection to GPT channel 1 output (Deprecated) + SSI_AUDIO_CLOCK_INTERNAL = 1, ///< Audio clock source is internal connection to a MCU specific GPT channel output } ssi_audio_clock_t; /** Bit clock division ratio. Bit clock frequency = audio clock frequency / bit clock division ratio. */ @@ -88,6 +89,15 @@ typedef struct st_ssi_instance_ctrl /* Size of destination buffer used to fill from hardware FIFO in receive ISR. */ uint32_t rx_dest_samples; transfer_size_t fifo_access_size; // Access the FIFO as 1 byte, 2 bytes, or 4 bytes + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + + /* Pointer to callback and optional working memory */ + void (* p_callback)(i2s_callback_args_t *); + i2s_callback_args_t * p_callback_memory; + void const * p_context; // < User defined context passed into callback function } ssi_instance_ctrl_t; /** SSI configuration extension. This extension is optional. */ @@ -120,6 +130,10 @@ fsp_err_t R_SSI_WriteRead(i2s_ctrl_t * const p_ctrl, void const * const p_src, v fsp_err_t R_SSI_Mute(i2s_ctrl_t * const p_ctrl, i2s_mute_t const mute_enable); fsp_err_t R_SSI_Close(i2s_ctrl_t * const p_ctrl); fsp_err_t R_SSI_VersionGet(fsp_version_t * const p_version); +fsp_err_t R_SSI_CallbackSet(i2s_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2s_callback_args_t *), + void const * const p_context, + i2s_callback_args_t * const p_callback_memory); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/r_usb_hhid.h b/ra/fsp/inc/instances/r_usb_hhid.h index 8d27947f4..a4ad9441d 100644 --- a/ra/fsp/inc/instances/r_usb_hhid.h +++ b/ra/fsp/inc/instances/r_usb_hhid.h @@ -35,6 +35,7 @@ * Includes , "Project Includes" ******************************************************************************/ #include "r_usb_hhid_cfg.h" +#include "r_usb_basic_api.h" /****************************************************************************** * Exported global functions (to be accessed by other files) diff --git a/ra/fsp/inc/instances/r_wdt.h b/ra/fsp/inc/instances/r_wdt.h index 3d30438a6..ec6820c30 100644 --- a/ra/fsp/inc/instances/r_wdt.h +++ b/ra/fsp/inc/instances/r_wdt.h @@ -51,7 +51,11 @@ typedef struct st_wdt_instance_ctrl // called. void const * p_context; // Placeholder for user data. Passed to the user callback in // wdt_callback_args_t. +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS). +#endif void (* p_callback)(wdt_callback_args_t * p_args); // Callback provided when a WDT NMI ISR occurs. + wdt_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. } wdt_instance_ctrl_t; /********************************************************************************************************************** @@ -79,6 +83,11 @@ fsp_err_t R_WDT_CounterGet(wdt_ctrl_t * const p_ctrl, uint32_t * const p_count); fsp_err_t R_WDT_TimeoutGet(wdt_ctrl_t * const p_ctrl, wdt_timeout_values_t * const p_timeout); +fsp_err_t R_WDT_CallbackSet(wdt_ctrl_t * const p_ctrl, + void ( * p_callback)(wdt_callback_args_t *), + void const * const p_context, + wdt_callback_args_t * const p_callback_memory); + fsp_err_t R_WDT_VersionGet(fsp_version_t * const p_version); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ diff --git a/ra/fsp/inc/instances/rm_block_media_sdmmc.h b/ra/fsp/inc/instances/rm_block_media_sdmmc.h index 6de086d03..25afd0954 100644 --- a/ra/fsp/inc/instances/rm_block_media_sdmmc.h +++ b/ra/fsp/inc/instances/rm_block_media_sdmmc.h @@ -63,6 +63,11 @@ typedef struct st_rm_block_media_sdmmc_instance_ctrl uint32_t sector_count; uint32_t sector_size_bytes; bool initialized; + bool write_protected; + + void (* p_callback)(rm_block_media_callback_args_t *); // Pointer to callback + rm_block_media_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } rm_block_media_sdmmc_instance_ctrl_t; /********************************************************************************************************************** @@ -88,10 +93,14 @@ fsp_err_t RM_BLOCK_MEDIA_SDMMC_Write(rm_block_media_ctrl_t * const p_ctrl, uint8_t const * const p_src_address, uint32_t const block_address, uint32_t const num_blocks); -fsp_err_t RM_BLOCK_MEDIA_SDMMC_Flush(rm_block_media_ctrl_t * const p_ctrl); fsp_err_t RM_BLOCK_MEDIA_SDMMC_Erase(rm_block_media_ctrl_t * const p_ctrl, uint32_t const block_address, uint32_t const num_blocks); +fsp_err_t RM_BLOCK_MEDIA_SDMMC_CallbackSet(rm_block_media_ctrl_t * const p_ctrl, + void ( * p_callback)( + rm_block_media_callback_args_t *), + void const * const p_context, + rm_block_media_callback_args_t * const p_callback_memory); fsp_err_t RM_BLOCK_MEDIA_SDMMC_StatusGet(rm_block_media_ctrl_t * const p_api_ctrl, rm_block_media_status_t * const p_status); fsp_err_t RM_BLOCK_MEDIA_SDMMC_InfoGet(rm_block_media_ctrl_t * const p_ctrl, rm_block_media_info_t * const p_info); diff --git a/ra/fsp/inc/instances/rm_block_media_usb.h b/ra/fsp/inc/instances/rm_block_media_usb.h index feac1e073..6a81775b3 100644 --- a/ra/fsp/inc/instances/rm_block_media_usb.h +++ b/ra/fsp/inc/instances/rm_block_media_usb.h @@ -98,6 +98,11 @@ fsp_err_t RM_BLOCK_MEDIA_USB_Flush(rm_block_media_ctrl_t * const p_ctrl); fsp_err_t RM_BLOCK_MEDIA_USB_Erase(rm_block_media_ctrl_t * const p_ctrl, uint32_t const block_address, uint32_t const num_blocks); +fsp_err_t RM_BLOCK_MEDIA_USB_CallbackSet(rm_block_media_ctrl_t * const p_ctrl, + void ( * p_callback)( + rm_block_media_callback_args_t *), + void const * const p_context, + rm_block_media_callback_args_t * const p_callback_memory); fsp_err_t RM_BLOCK_MEDIA_USB_StatusGet(rm_block_media_ctrl_t * const p_api_ctrl, rm_block_media_status_t * const p_status); fsp_err_t RM_BLOCK_MEDIA_USB_InfoGet(rm_block_media_ctrl_t * const p_ctrl, rm_block_media_info_t * const p_info); diff --git a/ra/fsp/inc/instances/rm_touch.h b/ra/fsp/inc/instances/rm_touch.h index 136ba118c..a2b58aab7 100644 --- a/ra/fsp/inc/instances/rm_touch.h +++ b/ra/fsp/inc/instances/rm_touch.h @@ -48,43 +48,60 @@ FSP_HEADER /** Information of button */ typedef struct { - uint64_t status; ///< Touch result bitmap. - uint16_t *p_threshold; ///< Pointer to Threshold value array. g_touch_button_threshold[] is set by Open API. - uint16_t *p_hysteresis; ///< Pointer to Hysteresis value array. g_touch_button_hysteresis[] is set by Open API. - uint16_t *p_reference; ///< Pointer to Reference value array. g_touch_button_reference[] is set by Open API. - uint16_t *p_on_count; ///< Continuous touch counter. g_touch_button_on_count[] is set by Open API. - uint16_t *p_off_count; ///< Continuous non-touch counter. g_touch_button_off_count[] is set by Open API. - uint32_t *p_drift_buf; ///< Drift reference value. g_touch_button_drift_buf[] is set by Open API. - uint16_t *p_drift_count; ///< Drift counter. g_touch_button_drift_count[] is set by Open API. - uint8_t on_freq; ///< Copy from config by Open API. - uint8_t off_freq; ///< Copy from config by Open API. - uint16_t drift_freq; ///< Copy from config by Open API. - uint16_t cancel_freq; ///< Copy from config by Open API. + uint64_t status; ///< Touch result bitmap. + uint16_t * p_threshold; ///< Pointer to Threshold value array. g_touch_button_threshold[] is set by Open API. + uint16_t * p_hysteresis; ///< Pointer to Hysteresis value array. g_touch_button_hysteresis[] is set by Open API. + uint16_t * p_reference; ///< Pointer to Reference value array. g_touch_button_reference[] is set by Open API. + uint16_t * p_on_count; ///< Continuous touch counter. g_touch_button_on_count[] is set by Open API. + uint16_t * p_off_count; ///< Continuous non-touch counter. g_touch_button_off_count[] is set by Open API. + uint32_t * p_drift_buf; ///< Drift reference value. g_touch_button_drift_buf[] is set by Open API. + uint16_t * p_drift_count; ///< Drift counter. g_touch_button_drift_count[] is set by Open API. + uint8_t on_freq; ///< Copy from config by Open API. + uint8_t off_freq; ///< Copy from config by Open API. + uint16_t drift_freq; ///< Copy from config by Open API. + uint16_t cancel_freq; ///< Copy from config by Open API. } touch_button_info_t; /** Information of slider */ typedef struct { - uint16_t *p_position; ///< Calculated Position data. g_touch_slider_position[] is set by Open API. - uint16_t *p_threshold; ///< Copy from config by Open API. g_touch_slider_threshold[] is set by Open API. + uint16_t * p_position; ///< Calculated Position data. g_touch_slider_position[] is set by Open API. + uint16_t * p_threshold; ///< Copy from config by Open API. g_touch_slider_threshold[] is set by Open API. } touch_slider_info_t; /** Information of wheel */ typedef struct { - uint16_t *p_position; ///< Calculated Position data. g_touch_wheel_position[] is set by Open API. - uint16_t *p_threshold; ///< Copy from config by Open API. g_touch_wheel_threshold[] is set by Open API. + uint16_t * p_position; ///< Calculated Position data. g_touch_wheel_position[] is set by Open API. + uint16_t * p_threshold; ///< Copy from config by Open API. g_touch_wheel_threshold[] is set by Open API. } touch_wheel_info_t; +/** Information of pad */ +typedef struct +{ + uint16_t * p_rx_coordinate; ///< RX coordinate + uint16_t * p_tx_coordinate; ///< TX coordinate + uint16_t * p_num_touch; ///< number of touch + uint16_t * p_threshold; ///< Coordinate calculation threshold value. + uint16_t * p_base_buf; ///< ScanData Base Value Buffer. + uint16_t * p_rx_pixel; ///< X coordinate resolution + uint16_t * p_tx_pixel; ///< Y coordinate resolution + uint8_t * p_max_touch; ///< Maximum number of touch judgments used by the pad. + int32_t * p_drift_buf; ///< Drift reference value. g_touch_button_drift_buf[] is set by Open API. + uint16_t * p_drift_count; ///< Drift counter. g_touch_button_drift_count[] is set by Open API. + uint8_t num_drift; ///< Copy from config by Open API. +} touch_pad_info_t; + /** TOUCH private control block. DO NOT MODIFY. Initialization occurs when RM_TOUCH_Open() is called. */ typedef struct st_touch_instance_ctrl { - uint32_t open; ///< Whether or not driver is open. - touch_button_info_t binfo; ///< Information of button. - touch_slider_info_t sinfo; ///< Information of slider. - touch_wheel_info_t winfo; ///< Information of wheel. - touch_cfg_t const * p_touch_cfg; ///< Pointer to initial configurations. - ctsu_instance_t const * p_ctsu_instance; ///< Pointer to CTSU instance. + uint32_t open; ///< Whether or not driver is open. + touch_button_info_t binfo; ///< Information of button. + touch_slider_info_t sinfo; ///< Information of slider. + touch_wheel_info_t winfo; ///< Information of wheel. + touch_pad_info_t pinfo; ///< Information of pad. + touch_cfg_t const * p_touch_cfg; ///< Pointer to initial configurations. + ctsu_instance_t const * p_ctsu_instance; ///< Pointer to CTSU instance. } touch_instance_ctrl_t; /********************************************************************************************************************** @@ -102,9 +119,20 @@ extern const touch_api_t g_touch_on_ctsu; **********************************************************************************************************************/ fsp_err_t RM_TOUCH_Open(touch_ctrl_t * const p_ctrl, touch_cfg_t const * const p_cfg); fsp_err_t RM_TOUCH_ScanStart(touch_ctrl_t * const p_ctrl); -fsp_err_t RM_TOUCH_DataGet(touch_ctrl_t * const p_ctrl, uint64_t *p_button_status, uint16_t *p_slider_position, uint16_t *p_wheel_position); +fsp_err_t RM_TOUCH_DataGet(touch_ctrl_t * const p_ctrl, + uint64_t * p_button_status, + uint16_t * p_slider_position, + uint16_t * p_wheel_position); +fsp_err_t RM_TOUCH_PadDataGet(touch_ctrl_t * const p_ctrl, + uint16_t * p_pad_rx_coordinate, + uint16_t * p_pad_tx_coordinate, + uint8_t * p_pad_num_touch); +fsp_err_t RM_TOUCH_CallbackSet(touch_ctrl_t * const p_api_ctrl, + void ( * p_callback)(touch_callback_args_t *), + void const * const p_context, + touch_callback_args_t * const p_callback_memory); fsp_err_t RM_TOUCH_Close(touch_ctrl_t * const p_ctrl); -fsp_err_t RM_TOUCH_VersionGet (fsp_version_t * const p_version); +fsp_err_t RM_TOUCH_VersionGet(fsp_version_t * const p_version); /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ FSP_FOOTER diff --git a/ra/fsp/inc/instances/rm_vee_flash.h b/ra/fsp/inc/instances/rm_vee_flash.h index 5fe0fe9fc..14fb4c8ad 100644 --- a/ra/fsp/inc/instances/rm_vee_flash.h +++ b/ra/fsp/inc/instances/rm_vee_flash.h @@ -114,6 +114,13 @@ typedef struct st_rm_vee_flash_instance_ctrl uint32_t refresh_xfer_bytes_left; flash_instance_t const * p_flash; uint32_t segment_size; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure; // If the callback is in non-secure memory then a security state transistion is required to call p_callback (BLXNS) +#endif + void (* p_callback)(rm_vee_callback_args_t *); // Pointer to callback + rm_vee_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory + void const * p_context; // Pointer to context to be passed into callback function } rm_vee_flash_instance_ctrl_t; /********************************************************************************************************************** @@ -143,6 +150,10 @@ fsp_err_t RM_VEE_FLASH_RefDataPtrGet(rm_vee_ctrl_t * const p_api_ctrl, uint8_t * fsp_err_t RM_VEE_FLASH_StatusGet(rm_vee_ctrl_t * const p_api_ctrl, rm_vee_status_t * const p_status); fsp_err_t RM_VEE_FLASH_Refresh(rm_vee_ctrl_t * const p_api_ctrl); fsp_err_t RM_VEE_FLASH_Format(rm_vee_ctrl_t * const p_api_ctrl, uint8_t const * const p_ref_data); +fsp_err_t RM_VEE_FLASH_CallbackSet(rm_vee_ctrl_t * const p_api_ctrl, + void ( * p_callback)(rm_vee_callback_args_t *), + void const * const p_context, + rm_vee_callback_args_t * const p_callback_memory); fsp_err_t RM_VEE_FLASH_Close(rm_vee_ctrl_t * const p_api_ctrl); fsp_err_t RM_VEE_FLASH_VersionGet(fsp_version_t * const p_version); diff --git a/ra/fsp/lib/r_ble/cm4_ac6/all/libr_ble.a b/ra/fsp/lib/r_ble/cm4_ac6/all/libr_ble.a index 0d8562643e1880d239ec7e518a9be164f303e869..cdc61f8494abe69a51a1400a12b805ef93685190 100644 GIT binary patch delta 301167 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 z zY1VER!Rc1IOE0!&l5otwG1EHiVpw8@U3#fi;&NDK9dQv{VCA{=CDt+*;bqoiuJT^S zbP%rgZ>+GMbunCJ)pqG?tQ%Y*e#CmqMetFpj!S>sy4gkeDQmxrz%y3M>vjLev({V} z;~kdiGAJ-6xI+A*wb4cJ6^mcPU!7jJ#<&Q-Wxe1c__h@{MQgud9JI!}7{6z|>>}`? z)zGDXV%_c{{JFKxMIgaA<|2%5xOC}XT0Nq!jBl(5Tmau&Ke<|P%DT*@pS5gPi+;6! zb~WG+Ylut#%X-Sy0LvGx;mU~fed{8W;ETBQBwy4;Fy#BxMJUyGiA%5No9iOj$oGYd zP?M;yt1F|q&vp@N>HFCg;?}-9KmebTQ0Y?ReHX!YzBHHK!FPj;@Fl*tTm++Cea&4N zJ$*O3829n*cM-&wV!QOqd~;od2m8Ko5x(5_feZgK;}xA?)VR`T=^4h=zN=h}NBf?2 z0gUt2cIlIRJ3wfn6A)vPua1l06yMD*f;am1YXmX=XZUhmfJ2O@T!e1(opKSn!`H{9 zm-rrW*++fnT@l2WZMyXNzDKJGa{evy{q177)Hl+lFZb=x7~_jGe0RG5uP|&E;nluR zTm;wpKCX5Me^(h7$8<6OM;iCL9A0bu=yEv0_|w(GMB^Qo!|RQZOTWRGMuJOUZCvRh{IIdrMX=mRa_Jk4DK5gBj5j1<LzmvpynV9Pe#7WszULy) z(QNC|JDZDKA?dmp;IpPB@LOQ~H z!$n|}+0>8=foU)%+z4Mz4S+X z6a4DdfwA^qKZc6zf!Tpj)9Yv!OFm<&N59E_Vr5)odsTMea=YXme4D~wr$R;Mdb?@6 zP-A>~WsTlLU+`GG?9pHI=x=)Tw>|nn`_W$$ueGmf8wf?e^^|?@(NB4F{H2eUe8w*x z{dbT4r$;yWS=Ctbr5FKshLK>OZyRW5zxG?=GP|NnS}l8TyTJ0?(Vkl4Jo-eBKG|-t zuTJ9$K4ZG4pxC3&^ynoXz0{+ZdGrPNg@l@oqdsGqr(lIgU**x)c=Sg+`lBBGagY9# zu4m%H=ovi&`m-K=hdtqs#GcW&JlSu1^n)J#J&*pONB_j5f9}!0bnCs1Z`>Ki_a6O} zM?dS)f3+VypEx8r0UzzIPCg^aZrvf!4j=KXO)uZ?H=zZ+YZPFS)IM@oU{4=qceNA4VH2F49ojdFw@&Zkw7%5uv8FM`P ze2>1!qc8R7%RTx^kG|Ti*TvGM`NuGM%=hFJyH+26#?ab5t4ny3`B8nhe%7PEa;>}k z@pf*#yM1rRK)Yy<>W2<-LHdG658%rXoJ6<$ZXPF5FTiKLokabY6i1U6tj9g|-^XXd zorL;$Q1Cdo&RxN1;&E`V2k>4`{WTr}FM9NiNsfCG#75a@pxiq;B0t44t@9DRf??d| z3EYad?(&HqeUC@qH$dWZ$4{}28KKsi{grrq+~aVW$Klf+z%ickS)TGw+uBPz1u~)s zuhAUgWs$aNva9YPO+Xe0~kTv4+?}H^;O_|FQ}gr`W#<6z8{48ZlN#oogFFl zwL*W+e5H}p-xT`NX1;UUuAE{uv0lDdR+uj;d}h3C59*9b*T0j@&J@{STAiCqJt*|u z##Q(p5Bdcfc&;_epgW1}_^Pig?~m6hR&!rlr4JMOJx15dWO)yv?=rqs?T8b4V$|%7 z0MbD-k&$X%i>XF^y3l8t!9=OI7y3%`trk*`7y4zsKb0;Czhzaa2FUV<#jg;dsz@X} zdyuq;83;$)`Nm*u(BW8-5jNwxN`0!(m-|L1;Dt&A__3)h594(Teys6cr56f)h|x;v zdxd_jaeEeCs6_kU8cTaF87Wb#!06?1!0)ypp<1k9mH4tS*^fupefU%|=XE*w?JdM7?qpxiu>&qZq zWYh{vT_X1|PGUe2583e4%XnUmGdWJ{Sd*2#it;#XfC7-?BFh+yrHKHi1V9Jh9r;qn z_yl0QIT!GYa{jPqC8}-j!1op(2LAfh^mv=&3}M7?Z@I@G{t(`YSdq5 zj6g<;)z#O(pVW5?y`JxpT&ZJ1qP(5)qtfL}8fnx-gb3J0ln*nTDF@(z`kRc`E|uj{ z-(t*DGqElH>cQ?Fs1tqMdZ4?kvPPI(WsFlMlF}8%&x#V74#>g2L@dj6`LfXeuto-? z-caa=%+;RlV>CL!NsK`!TDldYtbn)hVKvtz%{}_7~#84E2wjTXUrT4Rmxu6JLQMARU~+C%a^YJB7h7 z<`OiG03|~I)BM@fqHPz+@={TLwQs!AuM_%cUw&)6P>CeB=R2BliP+*FXZNba3bQ$t zRHFWPOX*-WUZ+@>8ozY3$MnR0lA;`yiTrWCuv!F)gg(K1_!4Qy-@Ht*ezk^9LxD=f zy#kAhlZ4;qvVJE~|2<=@=FF?kFkbL%1kLm9jC@S>mR6JA61p6< zQ>^aRGiu;}F7#g3tz%_*me2=SKd6D-Lg=ln4^%k@F6{eS0R)$Q(naW3T0O@}U5?tJ z){Y5M7lR;bO|&j_lNlVHDOR!7c%sxh3VphjI$r8>OPOqat8~98pJqL&9LyK`OsoAQ zSwAfFGAntk)ZqsBrPkfbeiU?!vQ^dyW35&Ivc*fRH&wZGxWc+zwIEvnF0*F2 zruG7>VQmzs#D4jvh9n>fer66-qjovZbSYM6>xgIAHY=0{(&0h#$0Dh}2e1^&F!P2; z9kT)YIU}i$)aATdY?O7Dda;k?tEzs`g0nmCY$uz}kkB zYc<15eFYwa;;;iJ$NST2S4Jd3ppo$z2Zu^@IL$L}w`WTHFr1`VlYHk@eY>DfAS-$i z1E&(L$BmY?d*gMAHOO48&KT%0=&OB0l=nEHcQqQQ)1PG1(l?-kw1-pFA8i$&xlSVf zYwqyajS2$EDF@Z+%L*yhx8|hl>>dSJO77)2Rf%OcdGvkgOeeAYh(~XWMc7F!-&9kQ zy9TdQta|vF7pcp>{n+e`dBUy;i}IFHa}M@cX2@vF_w7eCoJ7F2U1a%0yiT#w&G(VX z`sqS{*SHGvi2Ch9A7CCp^qfTd)`MlaAFpvXFoV6MULf>ng4MEz%m|B&QRea@smm2- zs<|2SjSjlue<{{{^XmRkRHB17l!Fs^onqZ-j=xIQm)&>JYOflwT-d*8Jv3aFA7%Zh zW%=I3rcMW`qQY6Ld7jkg2>lyt`ADg!2nXBD30F&ft49_ImosL+ z@srY}gZHd$SITlu1pfFyM1_2m&{z5rE|=xSa)s*Yn~EKe47ZC4m-u$5kp3m~r_ImR zk}3PNv-y_-90;Qnd?{NeMc^h;|1IN7iCPiyrBuwg&TOVy zIA7?`SeK|4v=I6w#)mjckRW;j^-r0%y7Z1#|BGe$W>Nm3@n_@3`=^)8>R2{jc zeKVu03ops)BnNd=eEWQgm1ykCkPac>povk0&LROs68e3{H`m~WN_28sopGAsb&B<- zxklMb0tEBjkS`2)rV6%o14JZp6lI@&KYc34-d!xl$tiZ#IqHkSm@_0VS+{jh|Q zP`1!Vn5(c1JBdzbKxcU^{KGPCWLr+Dj8G>6sl@u_-B6$Lmwh_Nd{~`dQ;~;JYbIfT zC7{$p))xb%zDJaAFczypHdg36jq)tKP>BwP%e8#>VSRCCH+uQB|6-Sz91fk0vv8M$K*)8tBfcC{UmJ1xQU_0z-(r5>2JvSF)I&ydYoZFdB-F^tZX(Mif$y!Ey>Gx?SgJatvG&bn9Q3gY8q71$y95ZrcL>#(pjKqTDB-Y>U8GMsfS0G@hzrK!{M@yAx5Ex+pH3$cg%P^0f#Qg0z zEwM{r55pJCX-Y2=deqpcRzBH>_`5J1f1O187M_OvJKrglT~O!_MAUeVovji9ZuPWm zQ75NV0*p&`>#IGHTZS>=B;wuf(f9RtN{NRNJ+z*lfdhrd;ai#Z;30@q)Z@6F=cKeK z?8cel!QJI4|G`BBlYr}hN+f}aCl9gISp6P&~fQ#|^Av9CLc<(-P`j3N-9jkVuN z%zwtSa^C5Q;G9=%~>$4U~rr>9$gJnYu@<2l|*^z)!+jy&bIZ*Ht~x6Js&Gwa@{ zZ@)Y=kYNSd+n+;5D?E`t7;)T5f&&ZP`VLPyOCx{FIuS7~p_`nZ_^aAqO|fp~Kr%%v zQ=AssT`vs*mi(=n4=f`Om_hYs zWyGf(0+4-APY z2qIpBEo6?;x$H8ZDS~fC!XnBzN5w-r3%I;8@cER`2UC8b4ANwnf_M*;YZ04^!-{Bb z5$nyi#4pmY{5t9tmiz%;9C?aW{h6x%e3s9##BaM~j8pIGMe3R2(8xG*M6*Q<n7e z^%djyEO9&|F)mgl$`M34krMe+l@4J<8kpj?k8zKKjmWHI*#!*wQkBoS#r%yt z?z8Wbx)vpLrbzSZ1~Bx&kv?%`57zY=Jvje@_-h9-n66Wy&r}A; zPepl#lP^A3EF<7dY7`rh7P3!+jg);$uwj0dlC6|P>qv=_aK=J34;jI16+-kS2VchZ zig{}_pOMe$Ny9FX480(X*}~D!{NXB}(~Q$_4kf+tF>CC@MwWy6LB0=CV@-wE$WiVs1vTLh|f>1-+jZk*&s`CXNA}Yqj)v7!P zj~imTVPzXd;Hj!0*OUuWyd{4M52Kzb(q4tKgA5_JmRiW?4nPOo0h&>VyaqDZ#3vUd z5MM#Pjfy}!%Q#Ctiot_DzzCiJbIO*M!D|y%L@+Selw<5aDKtPIvxN*fmsoZMiE}=W zr4Gpyxmfizh{ZD>Qp|f0qdf_>g^UuYJu@JCLk7_|b0}*n#~r}}DRRj_2am|d6+H(d zBjGsWpk*W+M?6gh&zW+8yTXz`uLggYbN3$!U8+MXwnPB4x4L^DhHHOp)%2Ko8j>E*v7i=l?sDV^NXyr&FS@ znIicTC*!|L@1?r%dY@eThgn7!G5@=&O{JmQR8Sz6(gs+F02FMb)_%w*sVArvbEZ%H zIw9AO-OO)o8E;Z9!2(4&*=M{*+0$nnp`7M3j#75?8I_bxEF*fHFWM`Hy(PmK<34h9 zbBwSH*j1UVU!+bUqtxaF*$w%um#^xfZ;gyRpWGE+@-zfX`x=x7$6)?%;0tUf2Wik- zg}mUOgH0@*SdyEu9_lki`l`VP$71k7ihAe*L3E@g7N+0{)xdrdm&AnqrI`OTBy%w+ zAg4jkxKCB+FQ-|I*Z?&))It=jtAGcp+2i#6WfC`d)DnZ1^+pkQyuvM1V=X#Jt@U$N z!C+0OFib;uAkm62xvN#=>qj7Etd?IH02tu!Cuqkw$qd4t$Ut^;}oP zcF%m&8x9%eyd1*}$XS%Lv1U_(&`L(!84K;EW~>35JiWCj`^{0r~1Kr+7tB=aXS zANKqUHI^r$ZIlfutFUcDvOacT%zwP#svGO0Au0k3eDX*ZRYxZLftBdfyVdpyqGIzx zL>L)%AqOD`X)z;#2$U(gnG%r_n+{rDq4E!l{U0Znqs+j`<&-L@g%%P3$37!N{bg39 z2nteUsFIhf!E_GIWd0RuFd{5sFhYvK_@qznA@?Z4&`C51IZ(|1PCj{rLdHZCu&*XV zvafEZj?mvp9dZ$ML~JQ_$hD9eHzIsUkztZpMq8y{sm2z@2AAUC=W15qFA3X2XT+jC z@PZ*LWCes~4CPb!V^<|-QeJ0?=OP-+fzJBNRXGVTQky8Rwd8O5U=P_%{YMp<;nlOI z7V|-fet{PiYd8U~kr{#jbw+>=IUT7pMXpkEggT6ZXcy#@FzZt?VkE>AxmrDV!C@FW zkN0gUFIN$|2J=4-8FUncq@((*03b2g9H5cv`Cx@l9=DwZWRxN_T1iYL?tW}x1|=3M zfrAw09`9rE-t-c7C^S3+^$YK+f<9js!arIe!8j$VMNBM{D;H? zo{`aAwQ#&C*9{EveAMG0XBTIzlM#z%l&gvp(3xos6j@03ZgOLsy;@}-V8Hqd9pv2$L&S(B6{LL}t(|8CK z^Z!{(?t)t_@#9iK%-`*-(8?$G^YfP29fSDG*-GY5wT$m6<1FJ>%C9VWh6J!ULxMO? zWkv>wGexeKgOd&LLuZ5%AxSuz!VJ7%icFR*&wvA=Pf;rz90`4@+Fo%m5&8|PJ`N;8 zpQh$H#tI#9uyHnJJfK2;qv|>kh(|t%M8z6UCag#zVzA*j&J?-n9|p1d>@wCDgA~(C z)W7+ES^pwcf4Z~(gHbI4LNHJ403;g}4c4~AZ*Wt-fDFnvDG#c_^&p6VL-27N zn<2S5@qiIKNT9ro<&aBNy|qf;ObJKNQ6}RsN(rJzDEk2y=TBi6MC0fH2VkKWDv5nZ z=-^{SZdcES01!(o0hs@<|KY5N{hnQz@fWkSQ`(KHG8diR~9ei)c4X*@vKhI5bisBFiWdku8t}+73ye zz03#DVM>JXC?$xUrUbDn%K8@GD}uzdZASUCip;#~F6J~1MiIKp`N9d^e03l}sDj96 z$ha~xB4T}jWQyD)WyT*$$C;fjIPc>iIqz#x$8=4h4jG0F;;h-05`^<1qp@9Yp#oZ@ z@@eg%l9V`0Bso%tO70o9-tNs!@;8FQyY7T5n=L9NtMeM!kE052vhw9=pi2)dB`Qv2;Vq z^FIv7(hv@oQUY)zB>=WS5?~i~I6gp$iw361Dz({wNJHiWkkcyTK^2LIR6|fMR!o#< z>g9N@i*ir}SF088A-vB)-Fcw+w_=Q;9A-WSTegz@DGL>mHEO=29ti}mQ27s64`xP^ zgPHy~n8VaL|Aj*^%juZRgl3t@-8^|3k=bHysBl2V22T1gL0uifR#XXa;Z)`5dGqN?;Bq5++d+<~l)K zu|Dv0gA{r8pZ4{+|Nq|rW}%!53R46-P&_2-CqmMph!`A+h(R(%{`$(<8ZM_d0K6^C?BQDv7PXp6}BIY zcc^IuK!z}5iVFG8>cJ^m4g#X(kcF%_LB0K!Ew9-#;E*ZuJkTj$P>g{ThJ&Xgb;zlZK|I4vr~F;LfdG9Cb!^LdxB9J^Vbb|~wSBKD9>M6EZ?P@p~y~g@z@tdp< zd4%<6%g1#-|9?+?kxxFPHuD*OQOAu)Jo|ngR#c2XBe+9evjv~SbYnpg-fW`86^s}> zX}A@qJ{cDdloGE{cZ&Il>^VqAmZ4{4c_?KU zcHUc{&QvIwBsOiHlu6UAVhL9Wes&5kLk{_6};WYJ7mm%+;pyH z2ByPCN-(dWbh=<4ydy>4mXe|KLuX{-AsOlrC3L39epUZ~I*?$qx(WF_y4^|HU)6hu z^)UV;2dg&;(Z@LJWuu6rKL?VdpSvGN{|ZWs_Vtt){ZCU4P=N3LGa_jy*CW!K^|6u` zQm*hB!#V$W?LJY-X_RlN2Z-rDc`taqPYxz5xpc?~aFDX)V$ENLw_2d{?*v5T{_Qh9 zC(df0xH;tl^apiFF2RhPg~l^t(OP&Byi+Z~cgZ)4f@{=ZYmZURau5{L4NI{Ye2dWn z=3^}%Ly0|NG9}jdTPV@TVi00UFM-ZTmO?U;OIeO3el6uw*#B|<6!-Nwwuv?VIZCYY zShkJe^J*Ga$Oi_7u7EAssNOLFu~F19{iaf8t1}@k961e{KS$*+qr|24DoWgruYqj$ zE7sp~ydX2tmvhuD7?wt{ePXx!66G1Us6IX<`Coe8BcDhkVS1?81 zQ=1QnaFCLq$bVlQY@!QQ#lvc}Vw4JC=R)xVwE*>03(q-qr&Frl`M^5Ro4|ABbv&oD zSm8cZ=Z4?pyJ74Cu`oeyVtu@8#<3IS3l1JirpSkC6r*AgIwKQ?=|XygE+b^qC|u+zwuD2X3KbWxqVti;3Lss%zv~vjEZC^96;vN5Yw$c~b7`thx|{Q^fv1Lp~}6r>iv{%*7xB^I;?a=3>R#C68Vi z0Az}MqJXeBWI)g0^2q#8F>)!7swb#J@)n$bBPQ}cQ{|syJLmjo3)r&%@dWdQy3qjR zTC9%eqwfu6BIIs8gF#OTkb zAr2~{rLS4?h7<=40qh(!j>`};vVPRpPe9zHIB3I=89lN8Gey4s=h4d9&FZ6^2JIn( zSRuPnVufSKGkPlfZ~kd7x(arV!ybD5ZzaJ<^n`lxos!?H+pLdd%eYpvFS%AvrDHt( zGDUv)e>)WQPRc_paY&pv10fxpXyivzo`B%6oCVF)JjJyfQ{bfw8jL->|Bn|rGz2rTpg@Yg#fml-`COR9zKxZPDRM?R zMrg&XQ6c7n!)eGhKa0{?YR}4uT0hH2FY9l7-UH>-vpN6q0aJ0#X9h!LnX<*y3#ntT z9H9)@6_(EwqnG8S)cvMdAE+;*9+2-DQ7@;Ck-eP~`cBFkrm;uqdpZ8`aei?eW`!fv z6HKvhQ$ImHXo?32>Q&ThVpJm-)M08^I5KA{J&Q8Q6o0PF@=nw-r3zGef6CgXI5o38 zI)WJ?Jkh8MlPQz2X(*lhxP=F`GNmt|tb>**eFJ5xDGrqc;J4NRj*Rxo(4Y&FDVwbHRl8&)H9fzq*582A*X zu|(<1C>x^-lwMAmfzT@*tGHn`!8N|nvHu_7i!eg3DjcP3icl;40%bGIV@wDVtWVh- zM3tULnTfHY^dicO5K*P$xz(^*Afig2N!ijgR!~L(h~pc6Rmn6qs0w^Ew_0J)D19eo z1cOHDdnsF+#!;nLQf8aR1*LPzv)W*^QvyFs*%o6$>76LsA;OSRRv5;N9Q?q&s!&Xs zYZ?obzJ#(p2r7LOWd{&c`cBF`5K?+2<;5VRbRz)0BO*r$f9aH$;Nl~I`NxcGW^}@| zQxys+JLBC-5?-~^-e63VXVW2Ki0Ta`d-S>ScsH< zgmMfBDZPsFTFn2%1iS#F5an2ePU&IFap-fUccL5*f=VxSd%&QWsx#qpMe{FGBbOzEkVQ!$^Fo=JHFPDDyCpqz$zt@L4( zH)0kkeH!IWnAS>P0vWY##^6&Kn<=M*q0$df&HzEBpQF45Yj;gZ5aj3ntXr}9C_Rg^ z7!gx?C(7F}=#<`{@^&ocN}pbn^Z#F9q%xLJ&cvWo`Uc875JIJIr@Rvcm41NoE^IDJ zKTTPJ$l+u`g7K7hV-_f#-x6ZY!mgS>_Iss|qMVI+tn?DfIUua` zC6sfqge!dwWf`Wi(sxtN!>myH3Cj5(hR=722uAth9!v+7kxq#{HcRQ*lnc?vN-v;X zgg#dKFv`VPc$7YoatR14y@c{!EIdkIMY$BSM(NQld~qKZ8kJE&xeRN$(km(N$3mlY zK7rt?l#Ke62yr^)1K16fo=3R?gq2=E`5*`@eHi6R?1oa08Z-IA#{R7;ETdcnhDzT; z`4Hx{()UuXHjPT9AE*2`2rAvccL7*yK#URu!;}xB&z0VdaxMO9Ug+riv3&6eLZ&K| zP?n>QmA-^>9R{V+H&CueA1i$~<)et8(km!8U{EUkH05I$lp#nCO3ICxHI&@{v-sk1 z96nWre9BGOmX$t&@(CO$ls=jANgO_vUPk#82BFf|P;SQdtn{6f|3L(mzL)Z83`$6` z|DRySGgul`g(}J|Sa|UHPBKoV+zO&f&!*gld9C#Rl+PlhN*_zP9eu3ynUw#<8B*yB zD4)ZiOji5TS)(km!m10khXQNE59u?{367NXpP zgN@R2DBnPrDt!dyn;;NX8KsnO;Xt7DO_Y1#Q0Wzv``}RNRg`Zd0(iO<5un_Uu2On^ z$^#f=O3$Kv2h&pN1(XM|{}-u@VU+J;H&c2sWd#P6($`QP!ZBLuyC~no_Nw$Fl<#A& zQ2IH_!x-&#ArX;8$`3$D=~L5T8m%>Vi-Bc1XKtYk{hqpZZrrSxHx#}FZ<7gK(T z{a)!SD8ItOrSvV7$I*pKub})IE348gDWl)uK|^I+p!^nt2OpCr!&J%>SizK@N%NcDq}b0Pv}#nAE7*rl}zcU zDbIjdeMk_jPk9zU8`*S!N@KfZX&`yW)TMz1HSBwvC)Zm!wRVjik(GhX!5vxa0{`*Z zub!@v{Xlkhrya?U1>Owo==oG&f56_dB@ozg>(;;>uw>O0viQ7O+=V1vc0X9)Py9Dq!2s@YRIh@#>}( zcvb6UjpGVamD^az{g+MQR-pZs@bK;KM zE(HEe&yf&Ix}ffmU(6o|jjoIXcc^tXpDx9UZ%N45@= zslnhd9)tO`kA3;yffm-GKK88DacTClzXPGjJ01?%nlVm+G2`|l?YChZX*<&GED!au zix}jLGf%9(HS)oRaV;W$;W|<0R-nOSACFb98vfu^R6jS|UA++1ixfJ&Fe;45Ys2l& zlTyTFA$Aj3L(=Z9i$o zwXpo7?avF7)9e#wTqt7TYXtOG9MFvU4FC?UO^xkl7MigEpT^hgAJ*#gn+u%!w>P%e z27_t#0t-%V@faP|jQHt($LRG8`!zVRp3ks9|0FeSr4P3M#f6ye@VI6h)@(m)Vt4Vu z_COPR@F!N9J(I?Jo4AcnYR1hq<5f-UZ8Tom#Qp@b)gq7GInAzxX4l7V<&SG=cD9E? zL@ov&o$3Y6s+DFHe~rD~k68LWBgp@}A>Q0(hql)0AGzA@Q4_I@51>hhuXa00hY`mO zjoN5N59Qju190+SuDgDw=A@lg|HfQao$6X!TDGv)@DgR^JbE zlPb~hJ8Sg^*iCDo|9aX3AX;_x4AU~rinprHFpak#LUrq}CibjZwbJY(HPE6zJR@d_ zX4_M<{icVV5|5E~w1Jq-3ZCxDirB4NCiZeVsM29ks%>s45rz=Y9fRUJ?7ms2AD{(A#iVZH-lpP zewr^tw(h+E<|CB%t2FZo(mdupWFMpXwI1^|n)j=O)J0vuDc2g|Q#r7fCM4EWIX%EbuQGTsv{$toa z)e=9No0Wvg^0wZ=?q3`5Z7xEA4!N9gG_r|E%fjE9`lKs`4r9k zwmxnK+4feLr`#a3W2kxYcE%m4X`Qb}zRqfz20KlI-G~KIZy0{r6|l)`WOfX;z#du~ z;aY`k9kp0Py;(!`H+Q4*23IWy28wiu5{$!ak=^2Sc)Ql3+G(BZAzz2xuEE}}!FHG7j*b4qGF%;Gb`18Y zeGJ|@w?np$x=Ta7Lqol3u$%00J2x5TQ<1Hk?}7Prm~rL2OEd2!&12rT*t2Qg-D94& zt9oqTt(jkkr9ltXPWuqdyNpM+?!6n#osNoX=AET^%zJ#$o|T6gzTiHrBGWXVvo)js zvUg)~4B0bMK)JxvyTvdsg&A8sS2M5e8627Rt2D3aF+ZnypQo8;VdvIcoNXu9fq5pf z^%h@%xwB8)qnZC)Ak1SeF15$e{3m4V=9w>5$9th>UIU{-_rAd1N^>8wb@ObPhhWCG zFV@Tt^>%wNx6M?Tzk_Vuyqo6zUd?>qD7W`b_E4JlL$+>Spn1PfGp{erV{N}+uY-B_ zRFC;E&HMeD`4=AV{v^Y=MXsZtdLTw=5D#b&TRaSA+P&(c0h>MM6E*V(HS-P4-R&>6 z?}vHHYMC8t*QO-9N2kQJ?kkb6$7PxZyGnz-0f%$FQ+bJA%U<`hFEu1fV#vGg+%)hV zjcgsbSOfmI27K1TcdtDg=1os{`0|n-i>&c5{xSLO(Z8nDYg3}3u4OjvO02`=PN4$-y9-G2^$?v$>+L zJ*#bE+92jJIX;JYR`?~F&*xM<`kZ&UyV;d!_EG}wc;L8FATtf)sy7vpISal*?Orw(!vs^+u|fI<7!z456b&-%2+Zkmoqixn3ohFa~>;9k|>j(VcL!JYw| zE=N2OIso&@Fym}}T{C~$6LBNOetJrBy>1@!yjQ9x`x}~h`zzdi9-o45nwN9EEsFH` zb^}C~V(^v*VO(L4`3zTqlN;j};)2KTM9uF$&1j*=Z>hbtG4_Xf9-q@-p09lF*UYbx z=CN^>YMU7_AMP>Vta*P&Gk*s?rY|q)_E4BldR=D6P&?I;L3F-kL2?H=9Z)4C7#*dNd+ z9MJ_=CpCyU5+c^7 zQGg&c>o7U9W|jwU^X}>ppHlT`HyRf_7_!yt>qG#qm7K0dna*iDFmhnSZaS@D z4wFOaH`LSd&h4(I^sA~zyPgHI=VHgSbO4^R*ZpGFiFQSqj&T7Pt6;-0RcROr5+lYb z5u=OPti$AR3V85Vyjsoa4^@wL7Y*`+iSLl6*=LFpQ#+$br?f_cxS&D&T<8u{c76M% zTawed|Ac(qeuHNJmuCNMkqnD-c+CTY_r&1o@)e47h|PeQ4pT;jBaW?QE4E08SXAO0 z*t7cMsc5suKK-@oC|H{PGTDUKvL9+-7%k-ZUE*m)CLqFaNeX@qVuB|Mod7{s?RnJG*>2FhrD%BF+6uhbxX1xs zGyLq^SHGIc(M~ATK{jh3sTxR}1c{Lvrbw}lPRjD&ZP)P9G`#wqJ-sjrfbwatb1KSo zPP>2+f)kF6`WnU;o!o(1U>|FRJ@r#$>*fbE3Jo>$RbAY1S!U-(;_5|LAX_&-teK~4 z<`blOEF$O70L~TGVRE|ZS`Xe)4KG8(8zH+r80)7C_95~a=IQ3+uy=+{ShLUa44YAn zBp=q%`DA+VE@*t3X?Vje5gz-QAMpD<6YUwTvFA@yn3?vv)^SbR_+OVU*fAGrrX9Mu zBU=nJd4V5ohax??i5f&p4dOyqci*m1o>@n4O%>|tc&Qp*D-Ca!cf73uV6naKC10KB zou2WQ4vZ=|VY6Cm7?(-6R-ZWP12Em*I?i7w z`aa6^cBKPjnc~z=!&oCRVx02A(iiJ6Iirw&;-}+n);Q&Acy=2Pr*2{Xg~ryrTB#Fd zQOs2lN;u#AuI%~hV}s(p9&C>a5~IJ@cV@u|tOB<5*s7=QJFr;kkJ>&Uw_ zgkVX%qNQc;?L3Gw2o|Om>HxL6 zuV;pF{Uwi02T-PSIt+}Nz~}huu3@Z~7%@)arm_QAhsoiz)`M4wCvSEX@p@`_7Y+7s z$^xKY9Gjvj(kTtoAbM#Ke-9E6F-qA$pexp4awwfgJsoe9hSx{K>wB&2x!CD44}g2c zfuVOVl<61~fl&${Y*t?lqprk=ak>Bqa_Vc^1M9|Rv^lQ%zEratnk9WZM>u~o{8o!R zs|-Ss?)oGk@|EiW8bpSKh`BBS1YNTZlM{}H9=z-~t9$4&4R7RVPY;y=u(#bSyLReC zSrl`%SGgMGaWx3_bn1DUtHGM96%lvqD}c9z<1@7vN_2#7KnSBTjC+xWFhL^37>#N! z8&zc5{eDZyXfsOle7R;9065gxzBdteU1Z!%6zQ%f0>at*hG`J|kO|b7>vH9qb(oyE zSD>DbSE5lGuHog&rc}??O#sXmoFd&k;V9F>F+#(r6S3PaO->ucJe@;rkNpOX!!??H z(;n`y90diriAEZuNN>hwKsX1aQ5wX_?)E`YXu~|6!U^v>s!5Z=4ztm z>abjSVxwjn@cPS9Q{h=`4g(?wFr#gIAz&ny%p)`I1v? zWe)?ene4C&J>8rNHBPr^81JGU)EK7%#ff#898UW^c%w8<#Ts5}3r~j?0&tq-6hfIE zr-{G_!w2JZyN2-%OrXX%?NppthsojeCGvH=GL6$r4eu52ro0=5CnTpAJ-hM}V3flL zIo+vY+%GX=oHn5?9I&jz%u$cc5B98L{9c*Pp0QVnmle8#Belm)5{*-thPM&#TtThoR0zOs;^sZN9%Xv}uK))A6LFfaVca1xVw@Ia$vCl& z&gnJ}-l%=meYZfvdrod6)tr_AaF~7n@WfPp`MgePA|S%>!LD1RLClvBF-pf3CDvhb zx^9jKuS}z~M8gZAFK8ND3QhtrQFdJ-%5+XkG>oMh#y(G&suU;IVRAUV;R(|U4R4u- zcdz7B9VVj{pGNr1FkqpF(;5w9xrQ-FV#MMU4~TehVI3yF{b&2cdTlmn<|{OFerl36 z<3weQSeUn$lZ=1EpP;fSHfsp= zlsz>PWje+#4P&*2ktH!=Q5gXUa$+4Ohf}5pZ;ytzM#CH0z{6=Q0MiAhE`v~(AYsM- z4*!#0{?GT=7i%0gYxY~Oc5@g74u8oJ@*foG6iNWmAI)SupVlBsB}9zE zsMhw{YeAvJW4}kEutl?9GSW?9Vr%COt}Y8uq*FKm2&^1}!ZroT>VP2C+~=#G)`35S%Ei!{m(5c^yL-tf#pZ4?0H@jaKV7R% zbQj8WPT9aX4JRD0uW1-dBu0!=Wn0;N*3mgF@ZhB%s1DN}4e$F)JYhNkKy_UI24y;@ zOkg+z_)QICx5S8XN^B>6v5wAZmj^FTOwMrn1od>hQ5vTM8eV##hf{w5`o$2Rlp@Pwz6zDEgC1YCP*3+Y zQS*h51Pe|a@>d3guh?uF20VGt9C&glnyR5)grDeYoBrYjzY?C%QkFkhm% zdtWn)tLb((6K3b+zKz^AJo&iXKKE_w3{}p)5sc;Yk&T$iI1y(Z~E;K4eKN( zj8b67?He1`Y0@TJv%$x%WBm5w@`>)8W9~$lg>X>88w|1}#;#Za;xpMIIiuwT&-GQF z=IMmysh?*6mjF+0fCGAa25>h(6scf-uR)|sh!~}G+)gp*ti$BD?;Vj`ugwyT!AZ@$ zqP4rNnJ||#cG8=&D2AM`kWV?t(t+_B>gipvLUV=BipRp*BiZe$Kk(%9OSB7$bci(? z1U^n4gGiDPF-k>>66-KI@lWvJZP4)WvGf>TGda_$XX^+6-YI8ChG%wd28Of!|Ds`B z@XU_GiWBSTocR4ldK>p>oPN{r{%+uz9Y+C}CHLC%DAO?x03!rju4=z)7#~WESe*R$ zBQ6dK*3mh==fOLAuzJRx*YM`c^F(!=5&>8u<21)}hByukCr*EA7-KzWk_Czr>*$>L zHoM-&3mT`tHN3h5J#ktFKy`FWMwyP`f46$CHLdFY|89W5h{b8I;>0>Sr>{{@$IApB zo7T--phC66>FSoYIqlq z_HfDqpuAt{+gg^z+MlOx;?OSW;?zNHfGmG+QkBpiW4+POe6b_5eWTJ%^knS z+Zkx5Sdw1hOtv(#DXzhabg{v({>MDqK0>ohQ~)H{Ad5vD=i@~ z6JQ16bYeHSCa!jFDvX>S;TI7*f#F>u{)>^|GYxyBrG51^=#gyAS1ZlzYcvpMu^!n2 zvlepoIEEs<`FR>dYYk$Xgot@QsXVg|lhY+nd+@qxcx^PiX6*!}>Q(j}0MjI=43z1d z3N(y%8pc^XEb7rn#Ina|unv>M=@jbec!e5Xu7+3M+QTUofbwZ{(n?ttYkw!@tAoea za@5m(4byz(X})fhc(E?Y2c9~!P4KuHrCfFNxVqNkYLw>c63tbC+_Yn^CIWA{o!q!i zYSgn$PXt1J1da<(XAL34v+Y+YMy$i+1iGOIuS8?iRl{r0TaL#B=X7q^Ge+Z&(CQ*z z4_+DUi-1o)-8K8~d$~KlytC|h)?sq^e1m#A-eHXozG_|6Pfp7fLW5$6c0wB#%X|t(M4j! zIGt9UScl2s)N!nv(?pHaWg6a!YdxH*0N6uvT81(`PSZ3_|A(^gfs3ll`hV^)aEFmU z1EQiL4vL85KTuRuR8&MXQdBZ6R4{C*HN~RBGC^Yv%?!)!Sdn5`S(%|(sF~uf>sqgC zU~E}gi{+-3wOH0ty7l{>d!Lzk?$o}Y_jf<#ne&`;zUTY=z0bXKxpS?8@p}`)$0>cZ z*(dD7hnLgu0`RI7PSX{3SQ{k08Zxs*vou0F&H+L(+OaB*MhkU#_2iMc5;j{`;L87PA%|L@#0ST=iQA8 z-o&8+oLm4*#2+MMxr9lDNK_!^DG=RF2wyX$NlNUaQtA?bH$cH#px`a+X;AWi>yiP$ zSUk7uh$%KrzEt@#RZ&2yeE6x<)09*Tl~lWLGE;dM<^m&=@l4~(FsTq3fbb5IVg+J_ z3E`tuCMmIxTKn<@lP*oO}< zrKbb%suVo_Ap|d8m*Rjyauk5WY4qJf+Xg4$r{bk4lvXQv0|HM^ZUDNC z=d>#V&L$ZOr78vDa!dl?3hp zo+vk%5IzRmB?I>1!`o4_1MpTTlr|`Mx#l9_pFleSXg;)BkrS{mQ~|@g(C{xdcsWIz z7(Py?B`5Y#IYk8E)he7GQSchkqv$C=r&a*U>-&SSsXet_!Pul=tTr)xoX$y3?4xp8 z8GyG_!Fx=>yL({(r;7kAFelj^u&JE(0>h0YywGe`Fvgk~K2ABAW}mVTA9hoSQ2}@@ z3a2L&yqRVl{q2;O>0OYsa{}sL0uzs)+JIbH0rfwlCvEN5_3+3CEjK7t--WJj`BCW+#xe2z}Xyu2I-8B3O>TMx?Q!`*nhbNn! zQEG$LnS0&WI*TRZGqfLw1IrY|XO*zWvFahrH>b)FhU==Lpcv}91ovK6AkMqsKCi_6 z-i-65+b+{RPji|R>+!Yreq%@r76Vs@KdW$pm5l) z;0?gFt2$V6frsb%=+z>7R7En3Do8OvDv^NO;SB}ktC3bxtyv~1_Tj_ZHRs`{;+<1S zy{X_`?rY%r|77q2B`m|;nl_ZH@fQ*Aoj8Y;_(n6{*DtY?Og`+R@;MlQcU9qYM8TVP zgTco?RNMe8GpE#C*i=sT_xum#|5?EpWMcR@ZIYbWN9E)Rz)J%jk11~RzbJVBP72^u z3qU7n(J?W_rpcFThfMX?fK*?=Po6-!R+!-tpCO96Np3a3^D zZ$f$ir^NtFG}oN5u&JD~fZ<&SKUFZCCWenwjpW2WDyNVDynNt!*PL?-UXQ?b+6=(e z=HCHy4X9TEFm@mbx6|he#^*zgdiglTU1R2AAC=Rm@Kft(|G>}bf`XUSGoYOk0Vw;f z7i=m<7%<#O!koTTFushpaw?Xb*oO~q-+c~06>osT>7s)7_V55sivc**oOj1yQ!&zj z;axJnQ7|@|7`}GeCpoc?%ITp1yaI(&n}XMvAHb;*fcOJw{-f-Ju&JDifl-Jg+)m#r z7}X|*j}!mVF^?1W;ltZbRRMTM6;78GJQ@+e=?nmiO-_%(rgAy~j5)}`oPJO+_?ud6 zV0@f1rqz3S>a??@UEE>z$pxX=4-MRjW=z+TyZj2NI8RdVS{u7CG4a``sz ziNG`OqD}Y?CKbYd#=q=@DiF;kgpX2|q!b!NcV#)^2PPtpo0^-ggAz9zH_t44c7H8% zO_L9@KthHioDXk{=D<&-I6z4ip`=eGsk%HN}6o|1Vgpbk% zKyaZf+J8fGH zK98VWjX$Bp_gCU?G2?xFVy-uPf_+pzivsXk6g+-Ri+OX8-g~XVhZg)hJXDLL@%Q5n zM&-Z5T@_~#;BAn>O2D;dfR8|yB)~p=cpGF2{L~6vR0yOhcsE3w9TZ}Qi(KG+gZ1J3 z{UK2mvtd+0E(4?lj@(N_6_6wo#78OvTMe!q`|#l<)hht6;2-{RJWRnW#>o)l*xyT8 zw5kfdRETnwPch;PfzNzKDDg37ypK=2m4=hG`d3f`1dgO7jBJp;hwv}~9ohCYak zh^)v$U?zZ>$V4TuyBX+fnC&;13D}1ZFOe?rQyZqL)lX!Sg157yLBzMM*a^H|7|r?v z7|s0aeJaR$fOx0aWCf(u1o4q-lBC#&4=<_30eH2oeo|8uydy~lDVp989vXa_!Hku^ zsKG4vHID!U{J&W(0rtK(LB@U%atN?%?!vj7k(=Dqe`w> zO0L@{SgW26Jb4wn1SS>Y1R&hP9E#T|5MxaUAEk0hiGBF+R)16g-o;jb^{-d(cJ>LV zekA}a&ArhM*i=rJfq|vOm>zQ#j0zLO$4L~Jx!8vfFQ6_|MRuX{p5 zgB<|7*}Ul&5T1qbbing$ou`Bk4xm#i>97wUUON2)@Kz{v7ASaOCZ7MMUpWA)Xw|%+ z7_Pb6LREn9wos7*@sC8Km3=LARZ?OfmC{G>Q}IqHlx|Y+cA0p7O7?jeF6KR&7XvU_ zfZ^S;FH$fb2;h`B-|P+cQ90cofOk>h^g9J_cHq5-0RUWKj-;6Z_X;ipBN<7!>uymn zx&_>O*daNwkIJcY0AAdu{*m;11&@DxUc1ATNpA=;iex z-9uYszT2pIJ+3Em71*T;>^))Dd3*+8Q~3g=cSJryyn}LC5XHY3-fdX&0+ZdcfLde% zM(yqOO1eAfsfX}q3MmMkU|erg(?j6AN#T4aeGQk;GKqdCMQs4*g9^yq3g@yZR?aIB z7GkdOx0)v3=&X{6%LDk{3_q3cQ6<$qN~(VG)>P}Mc>~@Q-qS4hrKy!^Rs^K!4nH-` z2_?;aN}6A=IY;OE&Z66amqpFrMaS@um%`%9bU|jS2*`8^erl!`B~zu6>Ft0_ZNQU% zOnNK;;tU|%AjKnlwF2?S07~Zy%`w3~d|;p&$HoA>s|uwm1#bn09IEKwdtRiX8k|PU zQLa|W{+XZ88YTW3Gv3!kDMcn9_Tj_JXL0~uBJdorbN#9nyv~7q(n;G0KG6a30}$_B zjn*mg?_&W|yR2REVIMxceBOnhTE8sddHJkY@b-5PXdgk_z-P*9C|Bci5%1-*L5Z(2 z<9+ROe4&|#eGEQy+w`z5{fZIpO<$vgi_u1U-`H%T@sFT2u8y*1UyN|?Cg%|){Lk=H zTO;EpGY$I~*-ar12jHy$o|n!h1uqfTqrmfzmMl8UeB3BkTcZl`DZu95eN2fzhZ_MZ zpSqjOJnX}Vw|83Mr{eAX%+F`Dg15z#~Z zGY|Wye69(=y9_*U`_w9UUE_@U`L7K4ag=QH+|>y-mD5#VBqIs8(G~^cTz6|5t(TnG zN9EKCKNT4~%+hYg9bRuRWbS=JG?^n-Tn1&v z<569-=#B+9-B#4|rUj*o2Q3}!cBc+cNlhD)I&8==d`?LjV*ER_A?c4HQ}lS#GF-J7 zpN9`mbGt`Sb7D;YhJCdmkH&ZW4bO)8Z-m@w`%TN|Z-(p)O=J-N;Ui*6*YNsZLyDp$ z$Ox54gXhDL3tfk%qtJi&K+;uLKj$Gsho_}e^N$+-)M`}2lFK1$qAG^sV$6Hk#id_b zW4s#6AkkpaL&S#`JyGno=*gnmqW2dIEczfZ+@hyeh;U26FmX;H#B=Qpi#}Rxw&-KU zofdt(*kHj6HGb0FU!^SZlEq#zS**4cOcir2`n4j(qUQTfAn`=ZZ%x zdVyG~>J?&vSY!bV6DKYDLh-CcUnEvo^jpL%i@sQREc#NRS@he*X@x)qet28Fq7?AE za@Sk*72+0)UMVsxfRW<3MZaHcwdiZaT^4<(T|Do7X2*|Ytc`Le@Xn2 zMn2Ibj#(1ED~?$7Zeoi??;-AO=;PEMwkHh5qu5wsaVEzbnQRNiTX>d+bv_3~+in+q z=OHl^bX}xAI65=Rbiuj}m&u~tMUO@5@!Cdu zEmB{Q;FiF=jz`-Lh&yFsQ-4J4pWe z3c*p}@DlZbsA!khQ6^}R*e5x;jcB)!uM-r7hMp`kI+$qXhTcQ0klAtj1=+I1x6+RD z6ZG*S7_G?J-G-hhUPQC8ZnoasUZO_Q#VH;Esp30H*K`;r_R>G2^udD<$~K zcoAJ%+_5XAtk=S+u$%5sN|PzC3eT`+#s)baeg3X^id=^~@`l!QXE(n_rGM!Z((qAl zz0giI!-Klf!ykusqQ?GuNBS{Y@7~awtp7u!pIWpC8sW6}F%T$jbWj3iI_)MP6^;lB zqi;ew^(0qsJ@nDM`*ixnqj#qI{(5g}OVsU@k`WY6uKs$wRSj-{OCx{7do3*+q<6Ia zGlqVCCT5iOEgc!8_qAOJqn~4(ogW*lyQuBSa94wSu

bGU}J2_tkEt87yw5y&1?{>GQ=q~M_bcs!8scS04FdEMym2QEs{X2plN!636>h>rX9Z%I`wLNr} z4Lc%fWoS%iat{H*c1j(hZ`FoV^ALm%pdVQzQ^HV)Jv4>IE?Nd*yEBS@{xg1asD3EI zmeCP5{X$=`xPouzA>O2sEcR0oi#up7i(By8c|MaENPZJc}uG3j|d^ik~s68?MLNK8vJp-s#ktnuhBx+dm@d)8TrOHjhF_ zzvY1YDS@fq>EE4Di7Coq$#q0DVi=C8^4zYu#u((LeSbR#4v-pILKv4b(2jK@(IEJ7VJ`dDMIVj?qYE^zQ%o0%9R-%> zTn(O4dWenNIs-mWIBDAT_RdtAfw;#SR%Pg2G;JU~J_gBq(-9Uu>5DP?UmRYMgBQ#s=cs-VC@Tnnl zyj~cDx^K&Z%hU80i!F4C#Zu}z31ShAXHnE}%OsGZ0nMm#O*X3hB)yOg15q=Jujxk? zpHaeOh<`LpnXLB=(q_^vQ=#V2MiyDLpT&c8mc=Rxy$0ewN@dZF=CW|nDi&e%0*kZM z%;J6ek;S_W3Ax-Z18C&6PNh^nREKug=oP+kUB}A7<%pTfe_k z##t;1Y596gLw>$~K+`^_$k}?ohOq1Pr-Q>plKuMwr4tecEgMwW@OFV7qPa4^6`~RU zhovNB|MKsjf1##%`hRlz@W;mB@D?n|3H;gXR@uIHhTCxL-0ChzX$XQt*0h&tG3{Fa zkZxQ?3 zJx+d?8P|xj&^ush^#k(}2`f#s8TkG`8qR?Gfc&{zF$GZ!@oK|XUIe1A#cA<(=eL!$@!o7KS zQhllZqP=h71Lvu5nSO?<7wcIK8Mo`Twu(R0gN-qV?$53-S({y((DjNY>f3FVPqu4y zIoYm+E=ChKeka^dwg;uyYeZsR_Q-5}4Y`SHZqJV0?amIaN0UFCg8|KD7EMx-{39 z1U*rk5Dly&%X19!BJt((KyT#5@8N#gKz?McG1n+Z*7Ps-GW>w~^;))Onv+qcs01DAp$Bb&9&a&Q{( z?5QQ&eV^B!=aTB(_H0g$&lSHEod@5?YkNgq!JU%CtjatzEjwLzeo~tzf|8S(m+sz! zTGuAHu4uhxR6nwI-Gs1HX3ZxhPB@>FJ;SKuflKztun!_z_o46YO+k+{j!68#XGf)s z&an-wxLp2?z8StKXku_$BWS8W`E! zUS6_aB#PFn079c&GiB*-EXbH_2A)Dj~ zS=Xl76Pg(=swpsHRdwas>Iq4wyqJ>`m!B8zeHbg%hc$Oqo2EG?290k{ku}^AkF$g< z4s8wu3r<+Ih|}1c{3Jx;jPtmwxZ-}jELMDbJ|*jicV|@YIr8m7t?r7Zb#;rcHoC}B zrGMC2BVasir-J`9@OLW+?J&qza-ff782XMzofQT%oSVI#`Xm+$3!hTvMJdddGdUL zzwVId3ych-YtaDpZEvC?nGfpSQf}aObbylMbi2bP`b=-D4Hbtk>~UQQb!FZ2%YbB@ zd3@s&XDx%vKns^>FcAyh;P{v;p&cJ>Uy#ymqUPzE`rw^U^)-6uij-^{Psa!LV=P59dtpV=x5nz&zB?q_TlU3yKe|Z5 z2B=VT<8(J(GfoPqxPaY-juMsa`<8)&>w&U&&QCQKPM1-&TB8c6nybFOP*hLQPq|ZN zJtid`IIp?2*0pdyaLE>l0l(WwXM_YNG`82c_MR8Xdz$I#je27Dtr+O$mHEIg+Q!?n zL&~RL){GX*qq7_J5!om9)ER@eLn{wjG@XV$hP&JDW&qjx1)U0$TN9JhBn)VCSh_A( zmIpO^w?4FF1KKD$sr5XgXoEtV8EJQWfqQp*p=;xW38y9{ojT7QBNA4Xafc;ip?+o= ze{x?IGZjrP`LVuj6`ve}Fd58K!M+jGj9;liCt`(;3{I>Yl&_+10ykVH9^9e--P#O^a@bcoMgq zC_g5+BW=yLh10nnF`ekP<3W*BTB{$UkoUskDgP} za5)4p?QKf9Bd8wg?-|U+YMsgJnV8>5XmrNUe>Q4Yc7_%hUQ7 zRQHz-VL|wglm3+v(~sQG=yBSgXnbqO?v%Gp52KRJE*GUdgHM&u=m)i96y*x;Nd?={ z67~OahS5=Ole}=SuH3HgFg&$dy0p_4OZ&&zBXJMpY*KVj$|#F=Q*M{exGKFVG>pP_ zq7fUP)wfgIFo5LN>B&^~oW65#^H6;I!Z(?W;~A|lbbO5@kCWnM=o7rEh@k1u>*Fda zwLhZRe^hC?7QI?~CDm`m4P@9XstxYKY2_9sW3|B+eS-F$B~7-r$)ZoyW?J-VnoHHA#SHDFh1YfT%FEz2 zSDRzuF;9!M=tbJ?79Pb~KZ{TVr_#(FV%7_dYR@_^`W9%J8t2%LTl+|o>j0o z;M>w9?a7{|&iCYP;#1L3dcieKqXVZpxEc<2 zt#=vG{b}hw)asZhO)x>%8O6gj@4MyAB(IBYJxqJ1VUO3&$;L`D^r7NqbQRZvm&RyY zjkZ?as$XL0Uy5xwb+Y}0q0iO$7hHV)6KvJmV)+Gt+1gJFe!V$6R2l)#iN|Fv&1Rja z{inZa?**r5TQN=FulF2(Kn#=LSD=wmJXuV4n{M3m`OL#FZ=bu70+k`<@XF8BljLL9FpChGeBMxcgrD>Z|J+kD47&h z1gRpeQPwrj&`Y#?C24aAeJG}MHSy{UdxXZn-{w7B^zs3{L&XwY14rZAfR$0EtJzN- z#9VX;Q#pnIqixq|-7WS=A%7=HHfv82A8q>E4gcxlR9{nf8~Rl3Yl&ytr)m34y+Rx_ z9A;=^(6XFxs-b@(k|IqVJ53PiE&e^g)JqKg8nMfKrb7}~C!*v)dEKy26vdLj+lGEf z{Mg%!&qk7H+e*ApjP(ldmp*I6`~6G@nBee(=!Nqb6N)fe=qC{>?WfR}(Y8@qsR3X< z(h+SNt7V|o*}vWJKP9$%RJ=i2M>+EOHL%gPA=+rR-++MUjD)4yW|@$ObhNEZTP73U zZ0P0MIhpXN;h(KNEfba+_Ql#PId#kynn@2I)Vq#YZ8(n>FUetU&ZDz+#h)nhkUlu!5%DuH@t<56Dz&fVczMK# zeUcU&(t9TK($2~0jp2nxyhp^!DUxmIooOq(k;bnz_Z~dOFJN_JbaVJu(Z3Gqhqc=q zUOB9Pu2p<(el3{-84I7mm&`p*3S=5|=lz-yH@K^2EaoYYTq9?dCKj^%0WYgy`K%_^ zu)Kl?hNRrWa;;|krMB}%P3&a7P!orw{RCtM2Yf0EuChcx2-rF!G=cww6F;rhndMjw zn+eEF+)`tCpC*!70&o;d;7ovIqC5?lXg-$%>;^6e__O6iCeFdQM>DCZg)HGmw;`oHPqQN2sW z?=-=w<5$W&s08Qd9&tc&j~HVaJr~D1WD?sk#yzY<^4R8v=Q+U*e=DSOpeDe?NV`tT z%~EccvL3R6c^$N$Cn%-z~NMqUf z!Q8xXi@pbcmY=fxw-6Vl{*%-pgy#<+!ef@3-e@8@rnqlAqn!Jei7^2;OY}=3mqSlx z34J)EGfWfHSYE(ifU`svqXi*vmpX*-tTE>T<8j3pr{Y$2_z~|ilJbC*$02#yI04Cn zu7%4t$(DHlpIJu@nW*#OUr#E70M?>%wm+rektxV1P1H*LX_k*_^pC&l5f#;Pk^+wp z&sx|Z|2KSY03L%pr?>&RM|kW`NPxlp z|CIo>v;&xX&;iLk$g2dmcsJG|J&>H(APRY_F$ugif5?37lbLhZvvfmp4UMjc9Kbq& zm>2`{;o0!(uFXKXa}{n6vjqN3DZOL0hINe1I^JBd<6aqHbhTR(t|^~l&DeT!4Sr@FiTUtgz;aV_IUk-!1IExMX~zQ1#JL5zD|n0yg7huyf5bcHoG4%* zc5wEQ%YZl0V<_YDh4KvY1Fd-*mr!tD!o?a+wJdSY#xNF6oQOfqIM*XmIIqR2R@#mF z;9T9vI^r+L@^4w_z2!GPWdd;$s%?t1Pq?s}da49GphfN`t?$IUt~!Q#j@W_)8Afixx^{P^%ZgZ5{p+=M(f zy-mnK$y|@Zd8^C7wK`S5VN;$XWSk^%Veyd=j0TE@xcklZrt#|hbQ8l>|9lOUgq3%DGTyR3p8 z`J~E@^^mOZm3kAT)2W%;4>ajFtfNW4Wj_F*$N+MHi}OJ&j4V-@BIRn9@LvPTxa%M} z&tBFs>l*oDgQwpR8ys<#9}dZmqafKakIR>1N5~S(72myZW@Dvfi7SxDSl*52mRbG* zms2dU!X1QUf{l>Iu7k^;$Eiq4exa4~GT8Gu%d_+U*!M5{SHduE0TARBjfwK%+4XB2 zC(3{2_lg|-X*i{L=Rc2X21=3v9;rhJ5BCcW2D0@1Zj%s~Ga-(j4axg3K0FxeUIG!& z+0KKH{d-BhB25;g%K`}DdG*(Wibp#KCQH9Osq+HGz{OH8k$Sn*S4f>#ZywCsS$Y?; zy=Z@Qg|V<0(*&c}+qB*mF=~WCwU7fbm=?2~F6TM=nh(!wk}!yHjhPS=<-wTAvPiC^ z&2(OHhc2yAZ3LYA1>{qzSxTz~4xh9*q9L!Hb`p$+8 zzpgQl9bWr$SYq#byNs)5`5a~oOU%s|rTr-65O#cz3!cO^IwU9Nmf*w}xcnZhfLsHd zhTSaZ(a-PVf^*-m^QW-;Xv|)g$TyoM;Ei<*c?~|$4L(R$BjM{ZS*DbC;CZ)@!@$xE)PiHfX)>#$`AgR@;85d z_Vyrv^JVk8#UB>RfD<%-VB#^9wWXMIAV?^PV7QCOFlf9nKnq? zc7#Ckxy`#eRQ#{Y13J#Afp>ZMv)q#dI1WIZz!LmK;?WB9-czF`9Z`Q3jk9YK%)ijguFk_p8@vVR(v zhhWUGME_>81TlUI3C9<(#06L}OBc=AMd5s|>$j-t}=} zJSD@M|mZ`LlaMPIVQkf-nem1 z4{(9^it{bGj0`llLp*z9+5SEL!QpvZ%K!QGMMVTmOgtKriRVEwvH2`9giEAeCiRux z1=wJO8)rrnt(G@G(4$z?jh=-No)hw1iKcc!=O&MVa^7Q!#qxrwR|r(jFknC$5~}bt|GIBoC}*ObA(?0*Bq!j* zbL!Xr-m$=4#QrxxvcJ&<=!%uBKTIpn=z0Q*cS*B@X+Y<7-H9DU4$FD;+!?*+lz0F8 ziOgH=g%XCFl}B8;)T^Yvp5<(c_!xVy7CD|k&KOUSNz#23OPtnbvcv?qoh8mfPq4(< z>UEYlJDry0tt_#by(o3#Y=u)5Z;5#3@>z>#u2CD{@TRwdZzp2t84hct1LB3}@BXt0 z*NewXXGk6|-2L1OZq^}JKyq`fV~P4cBBenT<(Msd& ziU}eK!c3OX zjbUKywnO`$!VB@?B$$gdq$wVfw1b|Tk=q0TGn^yhIc4nEL|0W7G>euPiB$%%A%*bdz# z3m}9CBR!V&3-W{wVjk8(z-Vf;n94ZRasG z`7B~XH8WYFAdBU4^J@>*3s}F$Yzfx6iEa0qZ?0#(mUR@?vxL5v<$bvEBK4yzv0!3a z81^$Pk@T|EE86)(rFntD0I?u%TZOF&OXxg{ZL6^dlsaGF*zU(^Na`gltMJX4)Um_~ z+aEwo>UAvF2ysyAjVvD!#vT*+72+HhR5J_whlKn+v~4YjNIi}v20)tB(^=w+pDd~8 zuw0M31X3?%`4DbDO1+xp27Emt_3bPl#+Rjrj;1)yA8PO}XX((&5?^y%lzJOWbS!U1 znILaQZTOZVMe4jMwQa(-Uh4dUKO4S{D3m&HMs1Iw>!e=ElF)@LD*#x_A2y>8rNds9 zkAs-hPq2Ifgrwfa@=5HPrOpeW4Fe&JCGcDW9nv3w4Mq@K+3d30eg z`kx(gxL^lHyL2dI`2t40)K{>45l?YQeKSkkc-=1b9V~Z(kkp%4zAVH!sb65Z3oRyf z-V@ng!JrR8|1*JDF2Ed0VF^8rCGPHJNAvAd-49ODucUQeV&V4P5d`y`JSkjB2SL zXZa=uwbWZ#9>OehK%U1eV|f_;A14dkEE~}$QqN&|1cOBCb6EZfV?^p@EdPwhQKVkO z@+iiL)c3Lc3$8(>-oo-2p4O83RhEB6|Hp>n0~p1zJdP%pdKSyK(Bx7tVfi+uk<=?$ z;!0w@)N5FtK#NG7AEUJW4Fsg#!tx{rsnqe;h{E;``rqZm2M~y1*(8Kp>WM6|oz0PY zF3VFmdrN&WOKdFHOTC6=3w{Jb>N{CtL)Ikq7MAY`(I)lFEGw{&adp54CcqL4wOi_m zEU`aHmpZ@l!S*2tNj;Y(_9KN-FJ_4azEtXEEU~|+k@_Z<*gw=ueJ^B%?H`ynvY?4& zE56T^`bCy!F*w5@LD0qWQ*@Qo-7G&tmq|T~;-q8PoenSe?=0xF-B4Qn{Q^dLGzI0z##~^B)5|z^MQCG)pnpRBp=c2n&;?$_$ z<8#f_sGh+?Qbb}gy)iXvJf+1sTv{GYigV1u6QKMf0kjiE!F)@po{q#hdfT?!XiJo> zGhJoZdJ6C1;1>WK3BtRZb9B^ak0hYr`B=vJrL6fNI;kjCS=x&SEIRd^Xr+#;#|* z4zbA78?k%YxiW+zit%2GGpw{PqiMYnX-|Y_HJ0gI^M~sOCORU6c}tx_+c+{Gc3Vpb zZJCGHIIMu8rO?;CL3cX`ox0j8=%GZ!W#Mx$ zp9WmUyGv;?>xGEJuUd25Ciab^gb|24h|jitx6`0LV0w-n6S17GHrq8U33?*}OK4Re z1g1f^?Qqb_1z=hL1+O&tTOVYsV#j&}en~SbV`Av#Bvdiw4$NmtNJ3x>2iAsCd?5m_ zLZK6VFtp2)@K0i2#BRqD`np-mT-M7Gn@2}DwhTH(f%XD-CO+Ga-$4<5!S*N{ifPqk zy$fCBpe6+2X9)WuC?*+>Wlox3goGKaoW6s0aa1vs;1yUfON<};9@K6K+^_>b*9UJpxk6fn3hjb9>kVl&3uBQZbIxN z4`MeXHeJTfrXskY^FQtfYMVUB-lSxoL%Z1=Mt}1-`i7r|B}E3_Kw5uT^65Sg0@L~< z&~c}qb^*p8QU>CNG;a2H(WNQC*c4KB3!G!~si#8V4{lqevDbcsQ7!f{n& zf+P-rODSBECCEY=KL8**KLE&41}S5Y%?d~{ZG?xmiBjv)@kiNQr% ziWvxx9g0T@r4B^%)`g>a9ZBK!Fy+YXx6&#$?TDbUXR(y;<GAk1G;q3!JAQe1AwTYCU;8Y~83 zU|wc>tYR;tsKJ0}1%&wv+LSdIE^fHEC5yYL2rg7`57yUnh^I~Lk*R=`({2Wdi}bA` z=h!6&F0m5i9@0|K(phxhU>*`FFc&HaEAZYR(9DgbB`Ijf5}1z5$d!1B5Yp#9jZR2J z9JO$8%H95Es>CaWfQ>)C+lO9EOocgJF|WouhJbzCMTb(*1Z8Z`RP0r>5%%CF7q0Nl zjyTFLIdJhd!5X}V2oP;9nx6`Ym?5y2C=k_nB@rOn0U=K_#q3fF7w>RbN2}nXmD7Jx z(ExkdyiY+`Ps`5Qy3^*7I9p!)0WXOvxrlcLH^Rd^sW#vZN8nH&MO%h|L;g@8v?&NR zc;^u~@Qb)o%xY|Bmv#l>5xfEkO_}j~Oo*!UHWw8>)WH>=T<&kmP1uhBqzxcACG+Vk zD-9qiipyhoR}y$QqAC6Y2IcWo@Jv_ioALG}*j>>S(W7G*`ez!iNQ(Ul(uTpF98HHf zJ`L~13C~gNwKRk6DbciK7=}WgV%mbYFTs=>P4mA%XbXqVQS5bi9~12PNIe{(g)qg+ zQS>xk&ID5>vJT@xFdU)fO6Ydl2zzjKw66z`vP&ggG9|=wbQUh?nt8*~gE1puZd4F< z;8jjQaCOA@$7a)AZtfHn1`qEjdJ(U8Lh~QI4b5*yI5mE(xxz0f7(4OGCtx%JBj3cZ zrz1@pTw*1QU3d=^Sj5m%Bfuh`%?{jv@h%zlcrg^}85ctv($NGim`Y{j9=s(ArkqYR zHXTiHnL{g;(7kwR6p-_%`CvHC?;~NZh8bhpSd3oBE2I!!-HATo@J(#rtc35w>!iTF zrju_yJI5|{ipv4gMggL(6RjKxh_q3#?@;UqX$I`UI{@*vxjCp}mwLDqN*0G`8(gq| z>@f<}Z(*|w_nW-cZ=_3%u%a{X3bx^Q6e)2uTw>wkmI!~M@uNZFU}risibn$5(-nxL zv=R2;qkt$e``{?MWGWEH=qz0DqNjPIc_d`OT&N%%$4j$-kk$o{YMKbe>{0?3?`rTi zt%3^`jCNosz({-9qh0~Q`v~A++u4P_$v{W$gUQYVOuKn`Q8f-OO>p6R+l~1D6m5eG#U)@(%|bl2u!m!Xzad-bk^#~kUop|8W!P@@ z$;3o!Vqggv+#5autG(@}Owhl_VGe@JH;qP{z= z91Dn;@v!G95N9ZLJRtS~VyfAl#q2UiVetvAf{P7*EgnA(5PR8Pu0XWXGBlPgERHse zar6y?C0P!HPx0b1G(zo4-X5U-ba{*;iXFUz=^Qn4_PjXXWs!XX(Cgvi?TXJSVFJ*r z<7j>+vgfnCQGvKX%h+Cn>=V$7$6@l;{YyH+Ceed_=FrO=+Ny+Jq^OC=?&x9c>5Zj$ zB3v%OB}LZY8!Cc}Ex!kC84rj}Y>&OqUx7B-%@75E_{nU(bL`@VOQD4Lmb5HD%!#M5 z69AEx6<`{|E{f3&v3xF9gocJj<#O=cz_qCM-O{et`7GJz>WA zUisV_PoHqI7EX3tN!G3e#l=~ZT|lx3b2ukXLb4{r)yZT(DRE~oR*>J9tldp3Cn8xH zf@u3hM=TXDk8;^W0_~dQNb;1g^mG1Mfhp^1g=tBk_$5#P+nl z6fqS|P!ChOFb82b8b1}Ly~(sP2cczC5qd!hjl+BYU_Y2lyEwEBChzRTPLNGklPP`* zLSwE$sAHAC_3(=w*T8P?N7JrBs0*eXnY9<*5y+?cS-8YM3bwQt!2{_D%yU*f>js7{-5!tU0ao+i!q{MA8<9y@1nC4C87UqS#M#+_ocNC(97Xx-U z?QZE5L&3Rxod*|hH+v`{7k#vy{=*3Qx!k}C!T?$Zvu$U8+K|f)3{$48>L5D8rU3(J z%Qa}F%N*LKgr-o`wMd>eK!`t4>a~vE;q9=VmeE7-hD79Tr!l$6yXjgqRdFsR=s|o6 z<}bn4nM2|n^zhTG{rx(ev}p)jPakt&+BBG5_xt-Moo2vn+cb!lOatLqn09F9h!{oN z*iezdd4MigLUAK4582y?;>Ng{y_j7p;Zi9f zvhlh|RQ({$n~tjQWwTi0Po6`~jBqp!r)d+xJ_9ZexOhkQR7#iu66ezB=jkAk&vv&0 zkxR>9555QpJ88E@;ike2N2IMSjke^${{;IdEB@2z3-)h^|1oO5!5%|BW@3P)z{R_Y z&7hGp9o<74hnYlY(7c(Bp5dDnkXf`A9>K@qfxQWzQ4Y>To;n5OI{JV?YKNO3*U^6f zg5CJXGtdx6aSJqfJ4`3&QU<2Z*FA8<#q|K%jZ$awts30!be4`VL+5HVDBcmT)zE!2 zdHl>mY&mSWRmPbMSl^6T7d3Ni74*;@GIkz4HOtY{w&MYcpM}Chas+-8`(>n83yuqkF7Et!MR+C4#_u7s|p@pF+qZk%ubST+~v^>9g+ z{BiFAF1Gw}6fqYNN7;T_fmlOl8KM9Xoz3}NIXN2pM1=+JJ=_3@vT?MFA<}LFi#7!U zHy&UQUIB<06JqZT$kMJrtjD|sM9nywb^{>xg>}N{deGmDxb<)&AT}E;norwe=(-!R zB-D?iZ`gmujlgp${u}9W_TLBpeP+rN>=FwX?<)EzeF2xy(o8eUqZD3%*<3;o-H3k7 zD&QFjQ{$lri6KjZQ9BavM%Dc6?@i;Xvz2efxMCG}e(6?0`S+I0LR*s_Ei8fA5`OhCZXwnz4>}I#Gbz z*0J*)alr>+nQzu7cRrSzIGQ&fU;Y%*A0UDgC*n~z(|VMxCG>X`+pbQepXWQ0Z1w9Y zX#q0Zv+%PpH2!)l=ZhAg@Aj>yyHJjsW=}1Ed;5Ai#%|l;c8-dcxUfwqbVO=`Iu#;U zHH~4BNsCz2&_gV8=rtB;^f8M$6kG&48QJ*$&1}G|BCLlQ*>tEK@2^}8CAbVm^Y>0@ zlUJWZmu|v(7B4b>u*3}q?{Ah^ouB(lM^6|XeBRNqqxo|rR`aLNJ09xuo0ipob1c*- zwz*?iXZ`_@%{J7=cLa$?ZTL%vju|xJ9Y-|YiE-UK7|`gXcO2t18~x=S$Mon^7$SVI zh_c0sPBvQdFos@6lOt9eN!K+wdQN*$`mi4_G@N8GZpVc{ra*>4Iz!FVx%bBvJUs4j zupfV9KOTnhU2&@?vRlK6CdUem_CFudlUAH^^n5hGt|QI%bcmvzryT9LOL0Gv1Tla- zvYlI=!QQr@#McB=ooBbQ3Uao4f7&=zY;leWT-BJ7m+p5r3bu8P2{e&3Oa zx3WL|HvHL6Q%&~FSHoZBmn8BF5=Hfn3F(J}vy(%*HeK8k(L?kNzhuW-EmKOq z=q^hBXOC7hyWJjkd&v~zO__Q7wGjs=gj@;>`KH;{8srXc#q0XqqIFDmb-Tz5qUMqI zjtv(VgocG^x6_O}g1R)gZVrug;3XyfmV{1sX;T}PuM9ok6R)l>+7fy=Dnm2?Y>YTD0YGlg!0sH3?o-1GvAWcm?;!fJ6JDevjf9IOJ5 zKaGNnEhuQ?f@&K13<|DpLqW|mC^$|ZaKVY~C`j3kf_7TI9Z)Is7K?Q1`Yc2>-NK@V z_OsYWq0d1y(p(m&=>-<8^dpN4H061SHhLVwCI-@%&xcO4IR?_G9ih`eaP1CQQ|JR0 zIn?h3h&)=(Vh+8iP-<+Lr~|m&FbWt%sN~Ni97%3iq1EtCI#T%jhF_4W7XY#>N{(^Mm z!BGDFgCZ6=w3bCZ?PifjA3)HG#kiB_cr(rB6tpNrweNSJ}Ab8RS|1j zsdu59L)+M)9u7G)en-cS)cPiJ)zBprk8Q^#Qy$h}UXd5!e_mR7Ngh0O=n&sZf)BpM zBwbw?8fG5~y|3SIE=ixC4;`TCZ{7Ol1y?41sy98NOGC;RpS{{lTC zH9d{mYC83!J5!u1D<;p`UDF;?Y0ut=H@S9b;-09^sDhuj ztiD~;@hgq{`re!zTq4}l+ZKo7vD?GqO6a9q3fAf!oABxSglzp%xX_JvFIVo?FO3rk z*&&7&yT2Q?j}@7d@ap^FZF^Qv`jlUNpVYR8-*Vefmg=mw^Y?|d_*OsffEL!^9_}pU zl2xOe(?`a0ANQ6IEJNaEfT82^Qlvn~9!U)LnAdM9kV~LD6Y;25!;hn!-|1Q|eLcZ> zckp5-?;SS|i0nu!COXq?>z(w;fJj_HPjtp0l`*t0PjtG1H^DIzUnIjZE(<^5QCt@k zOO?y9dunmg%7F-3jN;%-jKfdNu(;8YcxVG*_>nRWI|w^QyYXaC&Wn*QTTBOvAB4c2 zF~Do<>9XU?3ghd%)^jng;J6Naal32~B5S`5!gDq!JK@=$6g)a}6sm1N2RdW~PeRrL z>a_cUVjX!lfHkl&f@ zj0`SAY$m=d=De`eiD^->bQGU#dppq29Ci^3rn>PwQOsmO95krTNI^&jbSyAOhTw^k zQo@d+WU@1i*5}}#9VwCc#P&jZYO=F$a0|k4W01qnpqMV+hi8gPhJt10R?TI**n!5T zBHe%-glwWQInKUx=C+tvT7d#exd-3MY|3%EgZa_c0hG#5R{Sl;8A+A*IPBD#<4nXE zn6|u!olo2p1i0@-amo~DBGt`CQ!g}|YcWi=m@ry7#hGNwwbR)5;eQZ?S_b`X3P|Q- zK^boPhD}9r7WJ6w>}y+Zr%%|mfXfQ#Hk1YPBdxLrcXDwty@_J1-U-V)^UpZ0=)k9!2dv&>)*)#mYzCigd6ev2_nT93&DHE6^p$>?6>Im zi@W_g@{0$=FnrTl81O*A@Z|;t`AfhRCz%hed=}H}Z==ixU>ce-&Yt1YJa`k1-Se zAMr1X{T=bLMSoZP-lD%R`dRdk#Cb`;%rE{S)_WN-zW7W`wdm)C!=isBj#&u*OT2Bd zcNhIFgufGCSP1-EJa6hUzqle6SsZ>5y)Al>cGi+W*Vb6{4qBE)kJM}yy`$D>A>2h< zYS_K`@%rgL7RKGR&nyIbYTGP&Z*74^$FGoC^#0mM76OB{N{c>J8_T*czZjuiwJ;p5 z9kA%*w1F0Y-lC_4@I>un3xUbnlNS9NZLUS1u62R#&o5?af43yKUc1Ml->9Wq^aa`v z7J@fvdoB9!w683BU(wY<`1jiT1J(RusrE+;!#lKD7X5B5%A((^y<;I%p_N(m`?Vn! z{Q<4bLg+zlSO0KhxXXVYZdiK3by%Zy%W&;?;N1>Q^kTo@%!Xd8qFq`;{H@MPTUrC3 z;(bSucq2gnllD5_Pm%{;1HIUlmfRW=-->%o-h+eh56~y{ z^jgjMa|u?xXMq1`t4<4UbFM17Inf#v%iDN)aMH&ENakBX#Qk1pNcJxZAoUB4U*ha( z8x&6qmpG@{UhPMFmN>@_iE;bmIP4G}9Pl2jZ^8!3d$4{-9Q9i29F(vI&o_7vF6S32 zdk@y%r)5i>J+;5n#-+{*+x}h@UFw{cFuae~$0Qk)Y}LP^Ri(}a6>lor9|rq>jJ*q7 z6xI6&d}ekRmYoHbi-O2yQ50Bj;N3JuL&Wl)8kQ-R7M3L{8kMz}T3~8g>Y-9YQ`0g- zQt_HtT54KQYF1vbtjt?rYFnAU-)H9RGPD2R`+48_eBjydc`oNU&$-R)%sl&1bE8;` z5F^gPSFGNH*Hgm*wXuS_VcZYAATQ?i+T^L^jE(QJlu$X zI>k1q*+D<&fAQ^1xu8-+GC;D^}9_%@&cf5%!Ydfc7m81yHzLD~}}!ror? z4aQr8K96915!8l)WEL0AE2i1nN|*S#X|{y$A~!6459`c$aZ47HQ+~?_!)W8Tdmjyo;U-8 z>F$=i&kS2zd0`7amFWG=`D#%7ifPRZTRZusR4zYbdwN(YhIWIspIJF#(SZMCtHmu0 zgaB>%gZ0E0_znCYSuX?s66>7GKYa#$y}~d=OwxH=s5R(4B)xBF<)hM9&DC zR=OhUxl8rqajA=#0|-6*dQy54!EUfW%_L2B@z)D&ZJV{gy3@dTS9(_r8f}p5l5*ns zH-)yI?V=5x{D#!pFjlxUO6cLr5*1eRcF)?<(~}KezbD-Y)K}(~o-^=2z>n4}e%975 ze2s1!r1hgu6948|TTdB3a2x)dt+{)PNHlp4JRGhm8jb%+qpqm}-xPS7z<&u`Ah3lR z4*lr@Q_2IvGX(xmqpoKJwrYGgC7GrpUJ(k<3VczcuIB`%+zB{b&kKBBqm&z(;v2tJ z@Lv%8Oo3k%_#T1X0^d=oo4JZa!QUEn%@SDcN>uogz%<2ixMmA%7kG}qW`XAld|9KE z*q4s@Up4A_Mei`YaTRL}Uv8Na?LJogc42Uy;F|<~Rp1-K;Cvx3&QDwm1plhwFZ8qb znz-+^4fZG+u0?(Vi-iG6RQS5Uw}rts1pY(dB?A8}@KS*<3A{|;TLN=@6Nr!T|Kg8| zT%{T#{vVCH-V`{1U!7@7a0d!MmW$%+LTrV=e+s-(;41>ZBk%=*%LM*K;8g<4!v1Q3 z>9!LN%H&ChJHB4~Kp8gai1%pJwN|6?zX`lf;8bDoJ#ih=Pr(9E(pD_(Or)^0qG`Q0+uxRBL7Be> zfMToE@Bx*u_-KJY7Z^AH>2Q5P|1p{3DYXI)%HKpse7eAgM96>FzA3lu5aov<134Sz z9mC=JQY9>YkHAL+78e_ogou`L%H884x?9M71<)6N@m)m0*8qew1g;jir@%D=_YwFT zfqU?UMHoumMDcM^e3!r{1g3}Nad=a<#3M6^ichM9#di?+dx3ii{DZ)~1^!Xs&H|s( zusi;4QE*zjyC2_O;4?y@qrhjio|9|w3Nu*p6fKbl;jVGM4$%TF z`x4B|7L=l!X0imh#qz{NzdwJj02 zlqiP2n(71&ZXvt@k8cS6exlgg=>2kPKrK;hZ61NulqcBPBF!2<8q`ghK9WR%n(Jf} zS|o5+q936}0%sG&o=3NesDd1#*z?8 zy>d~og(xs;qQc#~RJgR#);M(J{bTQ+P(b*eyn*BLdHrj)_`rTziBCdcO=8tMwgg^Y zVKeiDm9~J&K>TaO6Qix;eR)87R(|%eZG(iHvSGa%4^1&XO;_6u4}`YmJGa`V23#Y>y>W!rGqcyV(+=BKd6;lxKweEg@H^B3O=Xw0h% z@g~&7=8Oe_={@M4hSw;SdyPI5&%b&rprt%5p08XNp&3y(Eto+eDYWL+}*b1 zR6KQP7)PZ#@isc~ulR9@yAJz_m+8dY>BQGI<+l^V@sR5t469XsO6zq>={hC6R61i1 znmp4_zFa5YK_@@7DgT`02l~lx*U5L%$>+rK#-BibxL=5>bn;zv^6g^z8EYgSb^io| zrInx3L9Y^D`w0e1wGZ9^3_j_F7zKCpeK)11{8SJgH7P%Xm%nRu%wEWOVFNSOX63v0 z+MK}`bj;rTg&#tj@|iZ${2|m4ROe;#PF1v$cp+-(t8;v35)V-#Te`L-89SGuN4;aM zpH6-e-ZWIu&|6hDN9ue(C96)UzfK9O**=VjD!;fmbmI5v#FxkNo_`{N&GLO15%jBu zv`Tr8Xr0nP6na;$pg4ZlXsM;k5@(cm>f{IOmu=^A}cE+!g6t5DW@F}_| z%?lB{`}vjM5a?r{+EQY=>dHsxY)3`&#-CyIL_`~X$6GqI=G&-}!B`6P0UDx{e@G|qO6E_yXg%AHN?Q6U<>-_i)+t$%`N;jKMDml* z)ya?5$)9M+uO6qzn5dF(S{gme(g0=C@`dzl)#wB0 zx;cJIgEtKt{|o0r~xxlVqX zPX37|e9UKfOW@QOi1}lFO51fx({)PATJcSv;r-^<{hX@O$v>l$&u_(VQzbJGV&2os zqI%B`>Xe?l!=E5RsUtrLG*RmoYY$;FJJ-l4enBTb%OHLO;;wUk*6VcQvvuNo8uOk%H^R_7Y;(l# z@Kf^Wl;$#iMh=PLYYyYQfZk=*&S#Dv#yGV4V2dvS9X>dnV6+b&An5eLMn?csd~gE6 zG#}gw*rcl$Vn{F5xqXB;I*L{v^jmr|bmCkmUKYhezQ+Wdc@z_Hxt~(DSBbAZ3J>VX zIjwCs0Gs4^Av{>2Gx;wc@f8gfzZElAC;pC3ygHh%{2N1M_g5GyNBorXbV{pqN^2AN z)xSepx>orOt$dyQyE^%q3H;0fjQP=Dqmn{Dr9z$3TAk8vCtvn8X76^Vaex)+zS0`^jI>$?wz22ejfh zA)hMyt%G$s`OkFnCwbpv7~IG3wY7fP^ytJ7=)||V__AYgr@~L3;k4O%PWFXPex8f3 zeA+>8St0r_`zcwyO1#B!M9|@b(+NiV-~ob8A8d32@lEkU#1~&E_|CO*qxp;zaB#HW z#7oo3;|m6#eCKGssTEE=PMyHR(EFn!95G#WlE-zDAL7jEJ6PV}XE{SB|D8_0D4L(i z#i`;<sK@S7yRFvVy;Unl>wPJTiP|Kt_ya-+XT6UX@}6?&EU-0#uEA|E^s z7*p(pXyWfWligx?=O5rgrx>FPi*)jrbn^BX{xZp1{p3q^@>g{7%VYQnk}vg>FVo5Y zp_88y!@qh8YgCUP(Zr|xl-7Hd_=F$P#Bv|pN^rXm;(Z4!A3ivO;6Wc;OR(ApZxB4` zgMClqRI%0z5v@D?!*e*x-*{HWwbp5yGvtDfDM|eO+^`sa>#Q8jPvwR=V(N5Ux>xPJ zD0#dY&pKmk+2m2bD|3%mp3gl4N9bj9bz<}5fH77tgeAK5?zJ{Em3Kaiuon7_G>1-} zo+a?g4^8DSLq2t&pM11VK3FIJ6F+_y%hVaaG3L~X(@j6G`K>9uWv#7c{ANG-6rFsS zgr5Znjp1`@ahj9nW$>-FwtgX9y%07VN&M-)loIzG$P#2jAWVVLW?}MLK!9q3x9))q=ka`M42&@})ZYHoU(hqA5Rr-WKiZ;CF3Prjw%^ z-d?+bxFBkdC8EbKSYNZNgOQHHE6FGPf`*p+;8wsU+r1DrI_d13<&A#D0Qk|*y(*nJ z-DCAu`(X?I*smDf8~o%Cdgb}rUr~9r58fbn(g*wg23YHZO9@`^!Cwg0`Cz9DfF2*5 zOOW9!Au(?VT79s^?|=>;oK7&>2M-W*`e37rfGIvWfnb^sZUv0#>V;_i2wemQHs_5m zp+oyOHx7Udo%{oQ$8~&dQ*g-^%`acKIfAmiOuqIKsv6>hHvpUDcp<8JSXY&YkGPEM zmg{lGnsRmGV|C((`C5p(KKB#P(}|DMiLZ&{H!ou(m-)%(>*OER$rr@&tSeYr^8Mrs zb@CH*^1tz=SK!XiertOX#2uJ5^sVsYI`KU*{8yNF?eLRdq%%KJC!gMwcfJbwHhy34 zmFnc5)X4`n*e*7xl1M|d$IAYf8WG3rmN)vg@KQJYh zBpSP^+$+x~{DD5-?t@zaW2(FmmZs~hO?2_bb!gTEzjL~SkoSh|8J&Dj7k>=$P44oO zKk2p4*Vdu-S|7YY@PZHatp}|0!KDN}KKKhkdf8E%a-FULT77UXL5B|>Cm8L6E&c>_ z`rveeDL#0BV44p$x=vHh3(>yCx;BO<@fp`K@bNZ^&C|;@)-=GsONaUS8XhXiA`7)jS2Riwz zME)|#_wkcouao~!CqFEXpCI``eoIohPW~gEe9JiA@^4I*W`6S9z4Cm*-{_$#AKVJq z=AakC(pH_d`|({5Al)=p54x8bpuW559_;ruP_@oPrOrgEW+MM3VWJEsXl#%S9klJz z(ZbK(Nu51Qo?`L`OAFPItf2R@DE-iMFz`9l&D6XFh2DnnW$ht zU-gd-$yvvTIUcKn@jAqnHi=JlzKu%3U0~Iy_RoqXu@-AN**b?mY6Gp3?K=Ly`(a9ca#E+xPTk?l z4`4Lavzv0oEMEEdue|m$ zc@a^Q`XiJLC4sCH4|+_Q%yU*DyGmJiyve=(F~uQ|ka^Ebrg-@p(z7Jk;`xQglw7>5 z-v4nWL2~nnAnAuhMbr=YkqY)ZeGmur$61{tgg5gYk1M@+>3D}jO6Ea%%6ut=FUwQf z1%-;Adkf`XzGe#r7I^YQBqjtwuwr2Ic(Zf`C}(OJ+WYH z{v?4yV@S0Jkc)sWXDUj#iY~9=`_WZaw5fj&RNpIoMNlg9G3 zkhnhwiQ?r&M?L1Ux{9hxRf^@(t3g5aIe{d(!}DO#2G4^T^m**XgZZZFH$7vRhO+Zr z#}8-4c*cgZL@6b-W~pZw+GE{2*E5Va;mZBeB>ogv?m;!1xzesh(N?bu>^V6ldT-Gl zA5NT=Z*h`Q$piow3R@mJPmnC!aN2<;h`^bCqYbbCzckXuflwXPooi$MXB}BX24lmwn;JOlq=#mbWq0kofCuWrTd7gl8{TT83og%_?41#PXcE<$E$F@|nw( z-I9fOTcN~tEGuDkp^_yvsb<{7{)LAF&DB+w_+w#p4%W2VIguP2H_=*H6u|1P6=fHG z8j!hnbqSxhLg|BS5Jy)i9pY63EFdMS#`$7Zprs~vVn$(AprhuFGq^T)B9C9GJfX=* z0jWW1B_#ot;~Sp6@chL%GGA80*R51qHX55NwKZ2u>0efq_PKUau3i7^Y!7mTuT(lG zO_T~t0s^XG7uA=QjJ;SjB;lB}Y4BHU8Cj50Of^p4{T(I8-EU60C9B%wD04d(ctX|g zexjrboh}v2b%AVFA7n(47I;D&-M>d~*)cs#;M(n%W}6~BlO`|qNQbS5t;~FY{Wc| z?66-dvX)}l%)^6R}>kl{2l)6~k-K>$I`NKV7nYMt4 zYR5mb>ke1Uij~$=wJYF6N{Y2+1su1gm}^QsV;oY1%1X%^s(NNFr(7@mRGHGlT|^_u zKFhq1S^MAkB})dEjouK8Q5YT=HvdF^J8k~=nj zQ&9~X#Okd9skxKuEE1;4rSN1e3Lj0mr4Ewd`ap_=s=2}w$j(*d4G*lhGNk9~#+Xwk zcV>AjFW)++{G~#(i(R{b3^}t(q`FXc_JUm3t;cYa2`@!FT4QqAF;4lBRZ5dkF}Qjc z9>U;SRl={Y!s*9Ee%ERxE($Z^P+%t{)?xOJwLvLOsx2wWHIGc>Pp`&SI+3qjtu(`% zgZox1QI=iK#aKg5<73wAL+18rS}nCdUhzSn>nC?((T}Q@E)9}bdtPTD_4pCpib&Ti z&rX)K7jrv*6+Q*lO4o~~r0?pwE2);`_f^BYyWUlLv@a{EvPj37vn*e7n#;@gtSmhgQ5HJQ7MwNsq9c_h@2n39UEqnzPd}M9F`(Yce|8W`l)L@N`7ojT9(v|MoZILnrjg(FDpFpLr-KrmE~i&e;*iGgKVOReL#v_lZLe+ zyoNc~7d5VBSVK+BnhU#(zqD3Ka+jCvt0)QDFl7n_JRsoMX6iF6N)j~WT6{f-pE4#m#dS&#qIV-4ki@vO;b8vie3+%5>Te z@vy8qyQqV;*_6NarSbzM_N)VcX0$dHv&7H-EQ-Hs!EAB_9rso===qxg9ghb+C#9xW zn-ILf)WDhyb!^A(%_zi@nLoyt^htUyz$vAM{$63-YjFmq4pYbIU_SdjrA=Jd+DjEm zVqmLP`B7?dq^~K`rO)`$_msF$sdkRXQY$4UP7BM!wB>)jr(_0Cj3_kKRhf!fMbym3 zuCrbl-D+%_)GDA_O8c~88CG;mBAZkz*XP(M1J(W2OVrbg!PU-ZrIZ2u>-9?Ns4m~n z%KCLPOZL!t3o~CTVvDe^%c&tXi#)lG4Sj5&;~cN{4X9!Dk4PC})2rPqb@5cZ+~?<$ z$FMj`i-Im4V$RIoGv%4I&{unGjw(KI15R&;@d+Dnrk%s*Zcw^MT5E?qTUPK5RBCgF zlsI3KowWtLdV|smGv(F>rAr(IFKFD=6{Q38lCc_T=Y09wfwWUN?V~E+)vQjasx?`#}y7#Du72(XRiYAGa zVym&K(}NNiTKATC*09#KlG9b2z02FHi#fO{^9g2S61^Z#$lm|Ea2w} zeIrGzx=4y>&%&uiBKm%@REU$9XG#KO9#V}7iNQ;l2Cux{tPWnewCYcLvdnj2u_*aK z>6I#NPz|TtTkTXQ!kc)Fz|>VrDc!48SOUCEJ7xVqiD&~oJPhtU?tC_*&dHop2-B3e zqy*DBt|Pm!1c~16D~t}b91r5@8gWXL-7^H*ump%hL@f-B>sZi-Kl(?qc23v(*qdvx2oV z$Wo1(DCV=($;l|{MS;WjGCJMe+pz!r&oXRFs8g=G#$sgY(mp9H^S+rFe^@8sQz zmja}0F%ejRsU~kG|7MfYQJTjCKT?__)ncoUlrGZS{Lzn;)Yy3i)gB3pugzKRu{aOU zk_$h37GtR3z5<-iUY>|Ac0c<_X=I^!+l`<8Na@>Q!OXbLQu~+s{Pk^UZFR++6nnMg zEG|gPgAG<*d~lYt@TX_31dzJ+!=$>}cqVR76>w^M9oJ0P3xlWrN zRhzZJHF4q-CDy|Jg)|s@;Np!azBH(jo#xuS5^G9Fj0;*YoLQ}WgWKjC+nvISc3Z zJ+>)Lu!4=;rc6?D+P%~#8sgThd|q=QDAIwwqii$ApdDk-zT7jG*KfnRIF<)hD&0Z) zRw@bZ*)&LP5U}m^bS@9cGOP8>%95OE`F*Zss@EzkrLS)@u@tj58H56u6IucLD)wP) z2V9yZEym(4rKVvA*jKRtJ3w+)l*b;Ly9-x5JC=BCMdo_5f?WYwS;ziUQb$XEz@;KL z*8E&YabJ7Qx#zIjI~Vr}R9E{P?;uYZUma901(C|!K0lp24P&NSyK`i%x!xWaT(77O zN+}&{y3q-+6^(GNz-)(W)?!>zOQ~|5Q%bIpe5qnHo+}D$a@^d~S|1+BTDY5HA+zqa zA|GPcLR|jV1YNSQD32WbUcD7r($tuD+S&(0BJk?B&b))zKcZ^`ol&*qzZF{+tIr7- zML||CG|9O6__^nr#c7L4T2`VOPv%sYk=GRGKfW`$a=M~Mj!z|Z!q~B$Fz;$A=J!=M zPP?o2P768%{yI18T?`%8tnu9tbX zXNa}s+P9-HV$2qT0Pi)y^nVfPLP9uEglgPXU ztJ>zB_*wyrz%FHiG?G8LOG%6#>1XhSG1+8J#~xakX<5#vXj-c9ms)rywR5#OE8y8a*ZQc#qwwRGKh`v~{}$iZ1kAY> zr}1y@R=V|XbUd+m)Mm-)sI@0Gtz}6Y)l*yTi;W1JUS~PVJ=ttrk+X<7^Webxd~Hga zRab;VNlwhYuszB`I{)6IINil1Qc{)W`Z15%?V77ta|X{XKmB{i47hAvaN#xf#h-!w ztZm`Ewe`29p4CHGn=#dSS*+fUasSf4gD-~PYpu7LDQTzkx$S)-YwonORIiHlZUnhI zB0aJ_r?0hU7f!V-)y~4P|IDi|?h{bW+|Oit_e0*{+?aW` zmq<&7tW~|5mS;wIq#myonDU3j7kgGSyrqVXQ?7fBZ}~*2bH9f6Mn4{0pJJbXVKBSX zyn8;{9*7nPa?k3t&;Ja}{PfSjmaG+>HU=zXbtOf%4-)<q_U%KkF$(M z%=TT|>&>CIlbt;g_P{sC{`2Y$sZW#AA`dGMuI^IX*kiNbNl|LRjdi95e$%9sB#3*b zO-yxCZNQtweHzy^_9%7>K84{^kll<=_8Lp6b8}};sNDo)A$?ev`kbjwtwr;gQa@5s zX7>%Kj||xGEwwNPUm`MFL~Ri`E+csR6_^RfeQZ~k-U zP~NUKA`H2iVLRH9jWI;CTO23&tpD)Ct*=glN6QOLkv!uB+G8KrD3}MwDxv&HKV&4$ z|I62q8EDA*&z14Kx-*{ih+d1vEgEdH^INygP}>N(AzvtFp0X+sIZwY(&g1u^>yO%7 z@%$(8<$1<D2DR0&&XlC#|ej>FFK59UtfjO zv3CwA!F>N=oGFduVcVq`eCL+(rP9&8wYfJ4bf>2Nj)G@haN;VCVXP5ubw+z38^wC# zE|J5BbJ;M+HykDwWx#=KfC0B+VFujJ%}$_#hNA;}+km^UTm$aT=-z9?(aVsI3dv>I zW;obzWU-kBd@t)~!0tipl)<3FvJ4&$W7Xi}y%cc_V@nP4BiMrmJc`w#0^Exh$0+uJ zp~8pR3_W(UT(-(!0ADr2frgOhGK;~X@$9fcK99X-z?0Z;1I}lm20V@ZpmV^@kWq83 zu7I)US-t_gS$6}T%^outj9_;e9DIe{G4Nky`wjRtR?>h`KYN1>YA68aEXaW0X2%Q; zyu;ox;CI;*2K*kQTbT{V2Q1NGFN$^aIZXAlkJ#S^fsffI23*Nz8}KfcZNPh($$&p& zUl|#wj1zS_JRTb%=#Gc zZ|px|U#p*8Vh0Ts{=wcb;A?D*0pDb)2K*1JG~fi5VsQ9BcE#WTlPWYU>PLEsXAA;X zsfPjErN0anIHXSvI8s_*z|m5U0mn+s4cIBYq+)OVtT}6D@VL43o56u(X`=zRlBO7N zTS=eukFj*A-cVsDX}1A)lU^b0tDoI14KoPzmf{S!uQbqrlUc06;r`M&gF^$Qbp||C zdeVSLNN-xS6flO*l^n?{i_&rZqB~6LZ%#H8nAkrJ0G~|kKmNAM;^yD{X?OCw zTH&l<%o8>zfBK5U!5=(<9dTYO%c6*J(uRg@NZpZI@;2Y${&nj$p~#f}ow5lxv7bDt zB*_0UKL4bWCjW)scRZ;yPR1LU$Z7TwuBSEcDNk6qJc+HrPDp3_Z>f9-|M#TQBy$MQqn2HBVJ#nj@a8DKY=N~}Z zJyJD2RN9TV9f)~CWsZ=p1ZcRciu+3Iar>S4hgJMM+k)+xaC;TsEkRs8KEeMmd6a~k zH!6RNYCn+Ck13G+Zv2JIKeHFny}&8zHXklGm->sgnN@*5*q_?NChTPu@8wVaptLi6 zi=PWx@q?0(@Q?_T=AKnL1zThuN-+N=|M3SUH7ZR7t=PSw#B8Qw#+&}ABq(NyQukBw zI^Oq3rBm-qtSmt**rv)wO1%>`TmY$X*)AP+YM9y>F2_p03VF?CC*Sp>(xi)~Y+@y1 zSZW@1VL1lnPEsqOJV!N_&XrT>=rJltX8YhOxkejsxcmk0eo9H`eU^>E(@9kPv|9Wd z3&GSNT&Loutg(nn4;3e{d=XQv;jQ=wFq3$b4HeeWepr8)MGAabZRaSioK{j3@x3RQ zui`GRR>xf`{*es})3BY7IIXmcDpGX@v0buOtW_P&-#)E03B0W8^ya%@FnOH{IhAtAM(RQ7RY}pz&~k4%Y;2=#nGUCX%C0BLh@%yJN`eLKt*BsO5J6`M z`jVgvi4K(5>!4~yprrQ}l_L?^YQbM8VV@y^_l3YFVt7-TJ*GV_*ACvPT?DE|0wH(8 z7YhBopf>@Cy9@7AIbK!SMzoE@J|T*Tena#kV?UsNwSdN@Ekt7I z7G}G{SS}oir+1WaxE|LYB%=`0qDCPM2cH%8(D*O$4~HvHqck?m_()?z z)yoxnpzb6vC;}-Y07{2zB2%BDqtH8mi603{d?%=_3dvT8o}~*5(9cCqwl4s1xDXCI zsO=~+1rhD1IcEEsF`8rKczaMd?p6&^1wE+%6j5gsa@b&LpgTcrh#Nktqgov!x!M?^ zmYpOyP&!;sszj~8ijNc-I$V=9+Addn?2cxI8i_{{e>H@tm=4!dnt;utwcOTAQm=8S zA}9D%5siLo(MY1%qGAkrGhy^CRZLw)5umP$B`mtg=g?%xlDs=gQXTMCWXq7$X+{;c zBmue6&|DM{E+UGNxP<6<Uk1te_aIsGHeP-%L8sq`rCy1=LsDiO~+v4-iFe$eTit(lH`!uA0q_ zazG+Ts-rzX$RfppcI*x2_qu&34>O+sQ`VvjS4^ygWC2o z_7#<*Z@-~((4VOMH>?9PXe~lV6fH?1ifPxL==V4U1*Nev0F=fG9hBKs?GiW;4NQ)B zr=hzu6~L4Apk#0xQH16QQ8eqMplFQhXe}r?dV$LS!g@fCj>GeC4-xo9fnO4MoxmFf24Suj#I*8O z2&FzKrv}lWCOQn1x_TriMQ{w2yAi@7`T+Nr5Jlft6NMo}Po<9tI+Z94(O@D@wYzf_bj7v;OD9Fb6G1J;Qn zguUDJ%ZPsfD)ME`eMLLL@L{-X245d?by|A6q(qGRZ{Y+vj7_GqknaiVolUmxxGE+- zV zH}SH*A!_+Tia!owP$Ya6zor%&Dz*tZ@8~57O3+Nl|1rE+oU)-|s$EcrkZTM|^-zRt zZj5#sEYw0;D5xdF2}9r!!k~1xUjM%ay%8hBB-a&`W)B^%H&mi-KGcO2VQ&LM2n)Mz z*OLD`Pn{4T2U-fjOi&xr&XQxcE|T_xai0R zCVS)<*>gXE5AoiU!*{glL@QMW%58`64~MHvCCs%-n_k3EK@lxPY757Ui_{279kjM8 z?Tm`(e3C=?`$S={Tu>0^T8;Tn)4{hUze~kntPyl=Lm%5wPK*I4AjW87pnN=0?^3(r|IYtNQ9+ET07OkxZl-cL zXr*#ciU>IxO&D|lC@sa~LESbC78-Q6BVzl-AVDx1E*L%#6+=;t3@9D0jT$Dy-W81^ zLWZ-6!tM;B7+cSQl0z?ol0)059CA32<^MzV19M?WoAHrGEv;zrhei2E8l{Se?;8U& zl5n^-3tA!cJz9(Dii#YgE>$B0+L8w(VSX{^LU)6~Mzupfvbi z2DSB;wCRHos$J4Y%zNN1#6N?7I9vb}8LH3vheJjytv`b3DtqB)m%nJT+ zqPTL)6?nXxK45Oo5e3CWpBMSIVPHMsnIhjd@OHv4AW}lUn&^v21T64nqG*)E1Pb{` zqDAOdfjbhNg#}k&x0*NmB}^VsFp21F?8XAmBsvEX5_mb$xlBucjSAHC*BE){1^)t3 zoC9AM7>}GYN}+DX>{25{w1hFIhTU2k?0M)jA&^1zRZJFvhY+2QK_+l6(FKT@z{Nxt ziZs`7sFd()h@jxFC%Om`6nHz)#c*832-QLQ@H*4dTf@M4!fzm#vMPYVM|27L)&dH? zohZ)O)a=#39SJW(NCjWbUX3#}HG4Jq!>PO!eJ=RpiQ5~h`xi62Y|x9m1r4eiNGmDSHW>mHwkp5g4LKN zLSQt}cj1`8g+$jNk)E+4-(w~hXZK-!vT8r zSAHL!27&_HiDJ`C5x6zcjc`=p9z?O{wIB9HLll774tBDE7Rv zK$`!ka19ky;LJ)0Y$1w0>!83#h;G5y5cmR7toUXtDD?B%=b5?<~iEhVO z5IBb@miS4XL_t1LtnKp!UPKgY_ZES-6WxtvuFZ``EadJnD{Tcqx zF}zOO#byrSWij?xAH=(`D=b0$qZoT4&#;*-mEbm&_>Zyn$T#+E58+X<_IJidQeE8c&lDW)u*X!rL0-Kp;NnN#gPYltgF2$LNY%N!8FWsaL+YmS&Fs#gEk5xDU`VmN<~0X? z*ti)y*bP>is&krH1Nf>1U_~|u>#|R)O>;Om92330_FK&3iGAIt`2yHHb~0L4yei1S zw-7gJu-C(*q`U~q!!>1d64!k3)D8NkON(QA`SDA(&>_qxD8YyszKIdN(&Ki>k*-vZl7 z=J|hMSmgu_JA>MEeYzd_yP#U8t&1ngxB(T#|r4?YKzgMk6i;od&xKHy6Y0_en z#>0{^ghqptqAJ~;j2Le`Ps1S@!(on3WdRr#T3*EOm+w!8#ra_8t9qxw#t&)#mkbYY z`IOqEK#A6nb$nM;-X_T>xU$QTAIQ|v8+dZ1Vv+eb-(=6+*-t~M-^TT<HZSIdW|!hr!k)>B|vdO&lC7K}B-9uBtFu03G$TXo@9em)iLn(5OEc0q3m z^hD${U3UC}x|PT0;#tE<06}wnvU5pxH)KT&b`yKPua4tj%V|OUHf49Tw*qgAPqjrW z)PHPVXfz*9jNM?QsezkLj9c?Ut$fXocv^5HaWDJS4uES}k1>?qjz|gKB;lA9DlQ*GH#8b+nH+9Xv}RR7di~o6t!ci9H_dQnl6t zq*@)p+ZKl+?Id`?x4f!o-xGZ3mB^-+lM%R5;G4%GC&GYqh?qwRry(+lw@EfPmCr}= zl{Zm)Zn7C88+;5zG-_))YQG#woptUeUNyW7b$%*8%*xH}G15o-1lzQSV8=!nJ6dqY zwK_3oO;y-K3b9fA3@P05DFkzWZJ$zbixT8nP5BB*2i^)QXRj$E0mV|l%7JV#RDa*t~6BEkkT5kwVvDqw(Mxi&vb=VA*4{}p!KHq#W7-tSY$XJwoRs2Uv zYk1sU@avXWi4VLBer;?@Gknzz_;n%BfxgM{`n3XV=?LFLN|7kly8a3&(eKW7)|8UE zqcO2yYZ17+JG{mz+?ehZY@gNw6k8%=aY3ntAfpytl?A^_+p6gjW1zI z*)lN+4-7Jfk;p}L@0`1^QC?43Bk*CMr!yzGO`^KEw#aU zos6u}8Tpon-2)@F!pOJ0(>*YF$;dICk?-+#CX8f2;x5gTj+roW3L;Kn%j>kOB4ts#O#ae2SCC*y3X<5eW7dR5BG)caB%WPtv~a{-~{a# zxu$Sk;a1R`C9k>7ZF7F_R<$j7XL>*I-UeyE}P-+4(- zn8-|o&zgzdJt1O;h<9*b;@?9gXg);9=}Y{-p70}9XXFZ>g-R?-Afe?0<6BTqP^r-P zgCEU;Mv_jWj{i*>WsumZRol8Bs%;ICY~lGe-oGC_AKi@i>_a~kK>PxoiR=7L@Gavp z;!Ao>1xA}rajhk9dL8KWEi$fI; z_qT_JEQg3UzD(jVXH79O!;dUwBMabwvnB_h-_LHf&;XYCq5f#571vebRP$DUxU~fa zoFY&MaV92}rjPSd78v@*w_ih~;>BcAhwbv%~e)ewZJhJKRbx+hTCwc6BX!Igz6=>(?<`|JrZ%fX>~DNG?cdn=psZTHz*y5I7ve+}fFLY}_O^+x1b$N~D=v%ZC9 zmt^Shwr9GZz5TlS!*%xF!cqdr9~xj!4?Y5+Y#1RYBl(*H;C>|EGXV1;^5F*e8}p-g z1vItfw`>^9&1FYOEJVD+BwFHazX*x3ZG;T98o1{)b9|fDIx{gkFKFEW^zAZRp!bQo zz`3iy(sy)6n8<)A`53D+@e$on+j4WW|!OL|flKEnY1RWE8B=fCovrz(AvAR%A>5un1Xs?nDSYL9SYEaO1n<_# zx8pS=p9Fcl3^&ByJa|92LtvabCY>h^g?sBoed)aKP|WhkF%5&LgD%v=&?VGM_%=d4 z%AtnduM3Hcbs9S>78Xh&Lv?iG-w#9``Kg-GPW-=t)FxdWU3l0q_(&(5JbEqt1s_897aY9BYpXV;V{xeXQUrr3<=A4Nc5yHaWKDEnL>jzbw>L0a}cqu z5k~q;{0!!9@Nk`#`*`{YSlI}XVcHj-~sNFo2Cyqpua@%NjhVs56(WK=%{rmY8NFYPqf{{2Y zSp$x@cSrDjq?^%J(;dNoA>C6t-3NHsI4i!6fCOIV#6?u2vldO*q`Hgs5Ugx1+)Ey? zJ5tWw@|-6$=Ni+p5CZ=ddK$Z zojP>V*QS0}b2Fx=b?nrkGryW1p6sBzl=w}@j`Sb>{37o*-~OJ{oDxti<4;Pl@4e{s zIOW=_PF8!_$tdH-Uc}0|z<%3((V21c4(^T9yVO?oO?_vbBw3w_MO1Rx*(=e=lYP9a z&ICW6*~jxZ@A&boKAyLhG%BeaxX`}WmTJyo&fu)0bPsP)URI!*Uq)^dP?K?U;q;7~ z^Jiq-oHxZ@yTZeGyEpAkT1rkWwZI;a37@nyXnQ;sd``_Gx8?HuJ;-%C=}r4K*~XAi z#=<^Cq8{FCxxKV<_j3CMxw8Bn`zaGHa?BQfdVxK#ZEm1-uVc?;H3F0W9GjMLF*9ve z#bxK73yuseUfM_~+Da8vE_~PSG*!O8&i;}V(DYj=rAZA>TW^2A^3-~JrYS9dE8ZAR zweHPqnT{+-7S$(b(dJk!gGp{tdYtx&)g>TFQ2w6Eyp8tk1fE7OY@hni?BKaG@LgyA zQ{iU5XeD01&d4(d@&CTG-y^p-@l9Fyc5ePOys6!Kp4CxVaKxTw;^#Xo=*+o9n8^p%sD2eEv7~ExeXHg80Bj zc>B7?XOR*7>$d}g`Q=~>YI-~*2|o#gZ_e@yP;u-$T(mpr?d~HIUTvFGVvVhI9J8O7 zsHSj!`)j+6-X(8T+2(}(ahrQ&fwrDQjiY2Db?~MgTm+1 z*Ln}}Bz=1W{z_VEaPS-Hgu%fRQicKlAiZyJ@Qf7MfKfjl$-ii*Aep_c^N_J$r5gqZ zFG@KEd{x?I(65)`4fwh=%iyp_`qbwj)z5B8bfZpp$jcf$L@^%hFkq`Z&`?1u_M*XI zyL`^zphM0y;7IvBufAG8iIoyDU$TKyEMg91# z`dSy!iB7?_^5FOdftaH+h|P~mdf zV{ouce#C&^m5&%4eosCCenb6uz4~5*$M4G@8a&=4I}Er&o@Q`(n|#9H;0`&%fOpHY z3=UVxmj>zUXZz(529Ljx_ZmF@Qf_D9_hNS&9R5l!GdNfyn+*7v{FuSv@8m;6bnVAW zgmMRi$EW22gU7Y<8G{2q%h?9}t6X7l_;>k3gM;_5FAVsy>~b3l{*V_KJiaE^89crr z-*3Pkd7HuEe`Tiu-;u`|8elSgX>d5u;vT2~f<5s3hgM;l%i3Z%kG|k|^ee4~BgI!Fr0e3e|Fvz=m znGPB}yvNkafcu#i8XUaO^tHjk!KQ8oe81^kgM$y4f(`f~(+RzOHyg}eHF!AIbk*SD zqo$z-{J4qk%r_iQnxYJNvZgc>tMjIuoVUe zUuA&?{2Ci)u&=PWK8Mx${|38Y@Q}0n4ESxf$zb3e7G}WjvgZvBzsGhP9Q=T_G~kce zBCmtm`tvdS$FOizvi$~wp{&s7F$H}W`_bUwUe?oqKVz#54t~y_hP^^kRgcfvN5Ubk zes+j8F?e{C&GvezD%7wm1_zI`wgv|y*pmhazh_?=96HU?4fq^eqB$t)XTPw&3t~X*&)}g&N;2Re=@mmrgQbfG z2g4+KM5*CuBrP>m*hIQxa4=4qNZ40D5@mjC@VJFE)DY5CX^X+3Hd2%Ur%TTn9PA{W zHaOHx>Sw@rOT}=op?=m|x@PdOuQb|#`%9l292_X!1AfCg5XCYL4iA-VaInG`lA+R5 z1_wt-)kD1_lN*F&Z@z6mL3F$%Vw>Ms%i3R)NFhAUg_wEuJ*WAQJ>I0!^ zLhpKw5H+zDywwThl0l}KGG28qGKA;O4iE1=!B1+UAAZUYPw~SA{Iw@-ukrXl9BI;O zp4iS2$78n!_Hpm@ll#OEf9i)n_rr(%@K=8L8$W!)h?}t=j0NnBAO49y`)Xr~+eJUd zRX<$MUu|ni=If(+|>{F@WUB;Y=(hMzF>7|TnCf-5_*Gellmrs9uL=RLNSNm zmu5*w%=IfC?}zhvlS2`4kD74t(_oD}FYv>Ket4!IF7m^3{BSWJ8lX@`i~JZ%{BWrs zUhap>{P4Se_&xq=x@EAmgU7k;arc;5l^=hbaZ3lu4m55s zUvMOV=HUZ=QV;pzv3~ebKm52Ke$o$5_QTJc${JdcrG6W_kM6RF!vT7&w-;&OhA!@; zVd|nVxxlo^dj}Sne}6Mjb4`uQ;158Hb204X?Ln$25C!3pUbRN22B z=#zF3{_$R|392>)1l^$zfa$?=BCL(8eXG{&6IZsYPej*8S)EZ8m1ew;qngo zV3LNzRqT)_w$w1)$w9_2IR`iGXxE{8cj2;C{#n#FQ^m+TnhC#2K3O(L1zKR-Qj~}Q>VZPBTrX~*{Xdkw4SW^F)jz(wc@McSc_9f9!UZBES0D)l1WX`c zfPj%VQ$@CYP8r=gBBEh(4ry*n<`SE!Ji>IYW;b(J`#it@e#CRn%sJn4=FFMd+1bsmbnw?^jA~K5sK3lSUnKPL-6QH>knZ7*e4z%4I~K%%B{buq>@Sb zma+LV-Qk7S=kSapB9roAbJQfs%ZNmo{H|KA-y-ndG!`P1%t!LVKFMmeJj3h)=KpQY zEY$f!))!&*N31f$w$tDP=2Lwn&kOA&>uqy9Dm&{xG9OW01iw&!w|N9JoT!%`KS;?@ zp4`w3Yhu{w+GPzz1XxZ+c8B#qn&ig|oa>B(VJ&WkgJq|Fng9L>ltL zt#VB3%*$NaUccBphX(;V z4Q5zhLyq}uA)jJhioRoB&TrY)70O`*5_lIG2l8b7V7|yrvaT_2M|QEoGQsyY|Ap*e zUbgTVt3pL&xv0;wCaU>{&reBKfz=E_mKRB7J!%eB(}8U96XxArWWD6u%@0)4$Dj`Y z@JG5N)-y45TrktjX<=yJ8=KX1D$$=Z`>WY7UdV4UKN%&_W%zQ;I5i{&i~64C6Kd!} z494&m$;o=_BCVY=+;~xl5P064uHu^|c-&)B9V`KsSx>2Y-~w=fHC{O=C!hDtmN;oZ z_FuJi6rOg5v(!pdLuxQiWJy+kV~Loo&>1qGpBhmkqyqXK0v{WZ>Xa-aaEWnZw5*r> zmBvmbkA8;y=!nT`wj2qoN!Hwm6}_eWCQ*NNMES*%-y!&mBZjbpoD6S^f(s)G`$~Z= zg1;_e5JJH%SS$D&BZjIDT`lLGdACBBGZ@SNo(9}}^w zCkA6@L6-h-zn;^jObS^`F(=FIieht>+1wxX5AJk z`E0>YwF<{co}WZavKCoCs7YXfsK3|vpcmcK#giF&^b%d~w?>W{ni7YMX~+?_lPdH^ zn9J3CFGo_XH4i_yzF5?MW)AGF^Fz(tUXn+=;KvyJS*zq_E?;aJGwFf^PcQQk8kc|* z)Z$BJwS@oBC{gYe3iUr3Pmh)Lw+VirS*MzbV!-E{_XK49a=~{q�+RHfMrywaQ#+ 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 M{e)NNC@^N8?h9VD-%YA3@ysT{m-Ac>5lg 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 G?*9dY?}s4( delta 310593 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

>c&&&1DwT$0HnZy)pu_Z}2NU%`ba2?B`$463VMU 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

  • q};WMob1{9a`JG7zo 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ⅇ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ⅅ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 Nh-;?ctC*gV{|_+HGSC13 delta 303741 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

    pdgM7L=qD-t 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


    2>h&FQ-DD>?NzD^OJ+NPAcv6H| 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
    vGy{iRXWd2>5XLtEE)d-N@ZcnQedqNAEP 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 diff --git a/ra/fsp/lib/r_ble/cm4_gcc/all/libr_ble.a b/ra/fsp/lib/r_ble/cm4_gcc/all/libr_ble.a index 27769699b55e1d20487f31a28f1c1c31187ad845..fec4e7600a19a70a86adaa195dfadf1f161ab3a6 100644 GIT binary patch delta 187854 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 L%DFs1dD`~B$`KL! delta 186573 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ℑ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

    Zi&zYcg{WPh0>VrS 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

    6eFic#; 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 delta 185481 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�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

    =u7sF`2ocXYxQ?iny zyv3lrFQG6~DjY?0fn7{c*cZ$o9=Jk@TS*lAi84@XXezD$v{86lQa+>M1kVTF^{fmj zwosJS)DjvM)RKur7s=3~oEt)U5tYM%VxnjOHwZ`85f3|+L>FT|A^JR?LSBOpugsN)Zt-JvZlinz^_k%;oW<2!i9>11cB)bkioO!-B8{KJ!ZC?F4uiNZrC37EqS zeVtAG3ypI;b&dCJVVLM>$y2DwK^{r$b}6#1cSK|;x2W9vmWUitFJJ#R$+>v5Yyq-6 zmw-RW;f5)*fcP@I*har=7g>z#|C-7{Ya|VVlA%$=zb8k>7BNhzoFYIC%_m9?rSVV8 zWGtw6t6fYK+eK2jc3{^^^*il+!f@@fvu(tGD7Voc+4(E(T$Oe)igsfyK_9z5#+Hlv z8acz08xbM>)V18P59AJL55_+qub;{t&}VkG4}#>WhX4Q$APPVR(S41}vl;4svObOI z7mf8JiN`9*BZpOzuY%~(xm5nSUCa|(u>P;4f=}#x!XU%zz*C5*<=1loig-)D5>vAa zE#<=%3Lhi<`*KqW#cQR$GEgtNz+8^GLuk-_R1e$(oZ|eSN8o^*Dyy(3qY8A%R-&KS z_`7jk)pqf=KR6gK74V4st8sfyk@Dj8l{_LJiV27eO(c0ZLVfT0&Bk7n^e>`;uhBB< zvqP8=h{9kJ(LD&g31o34)r0>RQM4#1dA?Br&v(JlGlm@g1}&Bj=SznR zh{6Gy$Xws@6BX?L;US+;Hi{{i1bRZiyF(LGD7Gm!0^r{JBv5K8&3M#O$^kFxBZ+>Z zi57n+^_{SbmSb&s2KBTkl@Nu!kBOo@$j3icDLyq~xQvmC$eDKZGULDC2UB3q-0 z*2ua22QlSRglJ~-o|bz@I5L*x&dMnl4xJ$$^$nmDG3qLc*j1vyoB9Jy44ji|L9N*F zctI(|bUlwkPX>73!2mai7Sl|I>v&>(qeW|_+#8aX%le(5G$HYM<@M|50|9ZGT_=}Y zoN(~aVe#POwx2vDJ7yCz-E{gjG7MsM`-3Rvb|?CZlC3q-Uonb^?#D(&@_mV7lw}aD z#~Q+U{9Kgt0i3_nho9{18KP$}4}emLLdkOs!ziLyEO;ca;h^MmU6iXHl4%<8*wf7- zdR7cS+ORC=a&jVrz5(F9zsQr;Uo^2e1yG=7wUdC`Wgmh1i2q%j$5ZyE6W>R!iiprC z;wQ+p;}1J~miWtJ(IJE62vIt`4ULp?AV7v__z>lap^*123_MTe;CWvjlNXI(;0r2; zfkQ;$7)5{#m=jJkl|vsj%zLGAyKdT{NK!fE#rThv1u3AEtu&k{TUDNyqn<)Z_1RKB zSMoe(uvYM{!lK2K6%FvC-i1YuM0J;b5mg(%BMU%GdueUA&OprSoe$-e$TunM6w|l+@DJpx$rA-0f0$wmnQFFNRA+4kV%mh{BwJUP9cbaCMUl+U1@ z0=h^Rc+>}iBtS{y?W*%WHvyE*)FR@?fs!LMWxEgwp7q^zKBdwwI)chC%j^4CTPT+( zSDaLi;TuKts@#$V{v-O1R-=&;I8M@hqJPM1xBnKqV^^XsPOZ!h%5kwlAp>rb@2Lw% zlY~Pq3`;)cCd-Dx0ct2sXw;y9w}&n+tpGqt;yNN{HqhINzd;vUEc9V9@ld#eC={$C zx&arjh++cT0!ohX2tr>ecrWG=9-&ZO7`{;#xz(5J#rW@~3xyDPgA{es#V+?Ioo_~6 zxVD3YWv)CsJ4W;sx!uNfy>rALm%HCSI&NJA4;-E0xG=?r6UEtdPolU0kpjx+7ote| z0sQ)ZKb>#Aybz!)rliXt`kuT<^ejJ9;it{(sT^}XwUkb$cM?t2MUtJDJ0nB}0|IXe z*V$>J7^Z&^Mb}*=iX=}bhY-2p{Q6%Aej!61Vc79K9zw{obB8!9_72d+HXM%dnGAiL zONx*)V;M--7+Pqc-&Qc6j7D>;UonF?xqT%J;a7D&EO(%F(0Njgtb zN@m;R0r~9}fF-hGxuh#4T`Os+r0XQ5Tp+`g{Y1+orQ9HXo1_$S;wvTHBk4Y(0aWal z1yzzBl9ZB&fF~rak(9cI%FjtU8kCavs-%2;4;2%cD^nyhMKqJ-5mBOaayt?hsT>y~VnMxFy=Yw1FiIoZU%!4`k5ARZb$%s;hTl@EkC10lz-^WM z$3(&J10{#ha9sa`N4(`2hUKX6LP0bM!cc;w$wdFA^D`UQHzKr@&3t%`kVy&$+{h7E z4pvX1tFS{NigG@xV9-2sqU59;8pp>!TAED;vgI(r`u`d6SpUxv#mpBZiuK<~3bFq4 z>_V^CU)Kds~(yg)?kBkjVt@!Y3{Y9q{ds%O_?9Wkcji)BM!i`rtw{#dw zkLtG>`4e63IlFAsUD3w1qk8jJ|K*+vH>-HioNM53lHSOz+#m zIF*bWBqsc%_tcGR-|CJQ$~`DX_1Lhsyv7Jwhr1q{{i1v9kTJfSfakpoyrPG-pgUJA zw^0}ur$j`%`5hG2(%X*WxhQLY*6%b%{GvxxB>tjb3pHvk=pn{^m-UWD-ch}o5xx<= z4Zo~6Hv-=w5}CxdxD|I!kX*&4%eq@P?&}{O*Zjm$@x9s)=y2WG@k6r?wrplpowr3A z!+&tQ6E2|MhrXhEC#a4;8dk;lLlG|n!89vgb=|%u#N93&lW`OZ2}Hss=uM;7ZhJQm zC8rfTRx|4H&TP+5O8G=lZo~VPXMfeAtMQ9&bGM6wZqiA*n_G0>VsseVyqodIZo4}n z$s*IjB7O$=|qd$Rp#=@-N7?(QiTP)iHwB?Yv{m|kaVn?R3Q34>S~{^%G0xEqxG zY6WVx`D@L{oonyf@=rxg(0HZN-nM1Dt*J}85y-H$_1vZuC)teBr|pp*O!rM%kZUvC z_c0ma#kstj9X$2U=KZNh9z1UeYg-_knRGVDfL zrY$n{fFe2%qCRPge%)c3!fvpMsbah6TI_3^l$VI|7soiA^DHL|c?Dtl;uqlX9OH!(D^#82LrcuBpQn`E1CWF4J9qru-v{ zYvCb=Z#G(2rbjj0nA`~{2uehYq)g3osG%uQIJ;I9I21})Qq-{dr|zN2+brH5u%(^SV^ z)dx9h?{JI!SBkw0E+dzgtgA|Sy~}Xxm_Ala4s|EQL78d%Zx&_U(Bsg5y~nbf8RG!z z*cs(kXOe(7gO_7`R2bI5wxJoH5mJXKq8S!bw^>Y0RZLYj<1Crkv$2VsivT^7(q1vEKawDf1i z(|Hz8@3!DuBhuEO&X#yL%B?|NY{B1S!QZ6dOTu|Z25wOB%PshOE%*l%d}TOeHRO;y z%wc`MqHitqWkQDHkq2sy&}W3cX4kW%G{P81)7M-@!5JvXl?ujN6uco6T*vooVU%KJ zOMOkjr<`o;#R(St0R_LI1yA|ZFBNx@YssfR&w8bNY)i4Z{ALk`$~q`Bhstz|vO@}}0Lm~_Qmasof7hMa0(?L4 zlqHW?@P8`!OpoZK%L@Ji@Mb5?wBX}hO@o~6F)Bkt+ZxA5Hg6GVusHpw1(czH3Osm( zB{qKMVWxT-k$l3UWR0RE zrHxTqX^%`b6#OCJ%}6|H!S7MC?K5Zbn-Qkv1mNLz%dY)l}`op8e9%2O6q^tc;q z=8h8}&p@Sob{nH)gR5;zrMRe#*o7HNc?rsC&3RubUx}7t*OvM&%B|tP0QWNC7KMAB z#l6D{K08wEi>eiT%BjXkKV!jPQt(B%qo4e0gBj1-?BYnVCuoUst6v$=YxclGi{6_R zd}XA_<(m|Iwgtb)g3nX%dxT%9_bB+07W{J-{9FaUKayvVk$QJ?x9vzI@A%Z!in6g5 zWhEA6dlh93k#t&-`iTOc2)H@P&{ZdMNSF@>GAF<6wuXC+Gcxse1wY$@r>kEkJ`tzJ z*1i}SCHlA<%B_8|9C&jy(WMy^f4_n+juQK``xN{-i~W@re2IeJ7RAqBQx_}voxq#9 zu-by(so+mUi5xqjl%IiK8s$e6y?ZQrU$W@Err_(N#2Ji;q-ZRi^=HZ(bz27PL<+m=dkczb@ream!|Tf0ZEX>7(OiyJQ}_~q>x3mS7q*juG8QdC4k#b`ij)-1EA z_@|;`aR(!pM)a!+z5sYLl5{!P98tR!e0((TA;Z54+k?dbnZsa<1$0sY^^4~14jfgC zF1Hw^i`Ayle=GRPXxwH0Usmeh6@43^F9Dwp$bo6AG?x>asf-zC$=)>bn|I*aHyixz(K(&@2U1+(|4fk10kE0dI!>Lks>L z1z*{TCtK>93jTt{ex(I}Qo$eTWTc%7ZQEagU$wwLw!p)2HBkd^&gD@)eibV<6y?^K zg`aM8e~$&~3U8rx25TvKBB8je;#TKInE%A8-`3Z!P%fR!xJ}FV-k}78?tCh?+HMdo1{)7W`-h zUluDaIgV8DXDt5X8qD<>X_10&h!qR%0tMdyyxD0u4Y`iruHb{QVq>#a!C$r5$J%rq ze@4M4br$=&8U-KzL*t*&s6qK-$oHLTH4Yfe#TENbsm z@HL&`vJC?Apb4Fh+Z25%(02so)Xir>&53`u(APLopXp-c(nhIJQ4kI<(xifO76q>; z4z2IXuO1kyJK?%`HbBV|blw80RzT6+jC@?2P5nwSIveQM!QYHAF|m0&4M={ zduPt{t>eX+S)qbI1AM-;-(bPNso38a&-Vza^!Plh|092F92|dG@LwwUBk@M^Vn<|P zuYw;7e4(@-wBRo*_?_KxB2FD54_(qrioQe8SByG}=M_+rqrn>=$@{Z03#$@DhsL48 z+Muz>U2|AmwJ69F3a%%_g#;0hdlY;D@MMr2_{)NytKhFDh-*ksDfrnI`;>uZ1Kw5e z*@+^dH!Aq$7ChZdY~pJa{K`bJ#GX*_8-Onmlga@;77~$(^vea z{jPWlA=vBj8=WNL7mIRh{9D&H+7Gqhhb#EW67N^=aTdJGf}f<|3zNiv8n56}fH(V} z?s+o(pReH8CW+IRISM`-cymIDu;AZP@Mn_vHNaGQTBEi71s3~s4~A)fpMsC;Ax^{h zDEP&|C(HQLtraHz7X_cxlW*O+pI7iZfj9e~2Aqj+XWY@%(Ji$NVq$E3e`pNuhURWp#1}){jE>hLep)dXp3FzrE#E2lwZQwNIiCgZ zXxG%;0qDZ3;;c|Zl{Ml!p<=XD5o=M=OHt9Ux46ijsNh@w)R>@juZ?k77L= z)^kx#lPmqW-Sj;{(U*V23VidM+7-pt(5(f$pM)n_;CCqS0V!f9o1@?l0q>J|x)0Jc z{|^PfQsD8rKSn$6n_|hB23V&X~j|DzW z;!`YmPlu*`FtV>Pj;`xPpu9=YfHz~_*Mje-;G=J%%Zh;%1%3f=pETdk0>4{<7uClZr!Syk={AO{fqPK!i0p2I^85aC_1;77hae8^Lf*)zI@3-LREBGTf zi_@by3Vy7`KHckQ`v0zi4<8^lY#SB)Y>R#R$)1V-M#0AqFlz99N$S@Mejf1V_@bK} zO}xEh)A5mVi#Vshrr`Hm?9&~)Ccd|VA8?DfCPGiPwf5g3;LRB|*Mh%a!H>N~^#6Sd z{tWPD|J`oEzo_6#VSgCrmn8~b|GBaKbaSWa{}u(Gd#l*6lqvXZ;IYc_0Wr#g|3<-= z+$yd$eXZap0&ljTZYnkHUsdosZ#C-Ygh!?Z6?_5k=A=Hxf{*t$?Z2G^h5vCVx5j^i z#ebTBO#8zX{MCUX|NIJmkHvp_IF5;bP{Bu~8M*Y`*aQWC2zYaT9cRHWR`5sC#C7;$ z1s{jgPILUz9pa|_w-r1a#J~1=LxCp&Zl=#f3;d`8A3ccg7XybCe742>0~Y)>1)o0% z_oM%p%Lsoe`bI)up-iXA7JWTCDf3}?hFC8XP+{%Q{ZKGkDtO4EV6;$heLmclAx=O> zD)_ix8{;|Ef`3xM@5>PL+2aa633zinOtaw42QNF}8y#2SKix#}s)Ek|-t<4;g8xFX zzkGT-GguamEw_7 zeWg-9PO7JeS8H(J%(8-^{9BFGUr=uCr2&>^&IiDpHR58M;>#r7hjJ@E+k#(U!QZLi zFQ6H87s+i3eyjz*(1H&r_@qp_Z#MNw1wPdRUu1#*Q-K#{ikk^vRq(TcPeYh!6Zo73 zzfZwm%@o(f_bB+Cz$Z&Qz30;mU!8&%Dhkm{IdB z@Gg{Fqn~uKG0B%%@QDh(b(Yw3bW`vd7CgNL)UaTla#ky4(SZH!yuY}+5j*4|i))|e~stCrSmRp1i=r?F73;MW1~meG9O zfsk z{T2KPOZ(|%rzU=af}cG?oI&I%_%jwfy$sdFFH`WvBSbdQ!`!X@U$FR3??yH8pDFmt z5u*JcD|j6j&P!zc>D{R&{x=0*k|WLl=;82I`^$kh`=8#eYT`R|Z5scTIbt-nMY$Ef z7I?G&-?QKcEBI|W;*#S)1-}7!pY)$z(rVg&P{FfY;O%YuEAagm^Yji^6TV!5`*Otz zM2UhwVZqZoUQK+Zg0IRIx6$rY@E0t2JgDM2{=9-elPgy2vkLwy@aB$zUI}a3Z{DqG z_``1#8}KlcTf^V_5@X|J_&&1WZ&2|2Zxh|uOTiZaZ+72q3;sR@f8jQfzGD>pJmAgA z^b-qyp@NUQU8LW91-}7!GyOib;CCtbq}z?Mx%SAw2MT@*@aBe--bic4@4SLPb34{d z)SCy%(Q#JM7mn|d)}x%(R(fHrsjoR23AXWyM%+kT6Lv-h!cbxDkS$QKQYxS~*qRFZ z3kBC#$Juw{z8KV-hw0FbioWdM(LsGeeJC@LLpoPt9r}yoe_RlK#lzYV` z)YA$+`rnP0NKRSsEfYlilcAfAbN8-T)T}L)+C_tT>HYT^`6INh5i9S*JTrvx=T5$8 zGxC3QcW}H8_C}-3Ym0SGgpmY%sW{ltrB(6`H{IB~e_x-kfBzeN;{S^H498)IthuR4 zjeEG`r?&qUQ}sajbgkma366hh|FwSXB*(~*xZY6Lc=Ya@EX+4Ga%igK_lW;${=}1x zY)^7Za-#~L@4qWSd2({!zA031B*v%Zph!j?vlKR^C@hWTM zd8|D!n94RwUN~?wJ0p2vZ~$|J3A~WMg>{j~E z)*5f_cI?&G8Ph)ox54=6V{lt47JT9ev1vOiUij2;K+^(7-d;yH?R{ebkzb9?M3Rkf ziOevr5m{q&+XwQMkwe5`JWiyC@d}YgjlD!ZGkzt~V6^=lq?a*}$SC7MBD0Mbh`eD` z5UDm!5xHuFd;!wK=tX3-aTk%fMu5l$<4q#RjRPRvzeV_w0xS)GbnL-75^|6~Xv7a{ z&T;LHPG3SiGQ6qyev3Gzm?=KWm=1AmsbLT~XnaH@+^7X<8QQ$5jzdPL{f@TUFyp5E z5SnA;f!LmHZls-QmTG*w-w|)y(~Qq;juWu9+GzEaqw9a2L3|IIW#*H^%Vlg^(vc-GehSQ8WQaFicb?kh__f?LcH7(6J@U`Pky!fEYK}U~=!hQC# z!(tDJrjiSU>Ze?0G1cYRF@+iK_UD`r++N^i;P=Nk`y?`Rva zb>>}P--+4R=zp>XEkzr+r!J$V{m+mGPyVF!(d*{udfhyIT{%ma`Z(ABD!+Vsq;4q4R6CHCp1H>Op?i z+08Rr|9wS)4rjL4<}^$hFI1=fc6zY=PrR9anY%LuZ8Hy=ud`!W+8;}&r2Vn|q1$W2 z{ejwr#l^*9%p;rg-;XhtoOW~>*Roox57D&V6whni#_N-B$Y8KDrug&+Yl`prpq(#& zR|~~EdrWO@ykCo^wg>(lv4FunBm(|Y5Ip?^iLzlV#EC}wBW0+mL z7JR=`R;L`_h>pcRqxzg9rd?F#fN=vJp{B(6eX)_5^vM?+<8N))e{y7L;T2gwIW$Mx zo>?J<9gA6yoT{WO7WeXGTh01(-S0Cd{Nm^~u=QaCT6V}_r~Qx_92%5etIV`_)_r3C z9)TkZjq>Tvw#I>99K8ctjHo(o&N%3(;QPs0-eT7C&Z=HH+b6R)y>5?P#|XmsvAbjL zopr58yg#;z6w+LWu>Kz$`JaZ94vR7^{+FuluE|=;59RNrNBj31#;=YcVWvM{Rs8&` zQM-EnhxBKM`!l|{eJO*cw^ zccgUc?Pp6f{i(ds{r#Do4k<(4zd&9`8<&1}+~90}u_YVW)kyloaZ`ZLwmp8T&p8!b z{;I=|;OWPLp^WAbM_q=_>h`ct%SwV_MQll$-|PQ@we@SuNS7AR>em#pUb$6TXS-or zX6u<-mG;NJ@oC(q)^m=Z)z2$J$po5K!s-V$+i`JVi=2js#|`CPKRskf)mVSJZ4F!X zT+p4bzuhV$N;+;|jhW#spZ{w<%18TSxJuS@WHnq%)-Xdn9bA&uy?&sr_2Adajik$t zIBke=+hs?Gz#M;BEqT`^i}_jwwJ%w0_7&U3c~LDf*3XpNE^0Qdx^vRoM?({Ss}4=B zERT<`t5#hY7)Kf!&Awfw_1sk5yF4#h*UC54nysq54D;IV z2o`nvD%jF}_v8+ z*>+KDF`|k-XI0e|c1p}V^7leLk=4IkwD%H=wI{w9w3peJ+NyU1F0vL+RIzSj{LJXy zQOx8|`&s}yzJTK%G;Z5JIaSp7?&dW%^{sq}G@ zN!(mb4Rh9gra9{dIqh|yIUO+rJ3kW~>3#;2PHAmUy{B2gY{R+2F@Di97XMb21;`_^ zEI2Y*OT6jm)BgFjF4@}3OS_pC|6Vm2EUUU(&Q)6c+tuc0GVpM1GA2Zd;pE!>a;eIx z4{0{OmL*)QIvQy7kQ++#zaF%e_4be9LC&eQmzc`ztC#tQ)><6nE%NyqhJCPRtq_W{tax*DPF>-u%dR#C%}Gq|Lqk7)8QR2f#_q_*zZ2Bd2~y zGk2}g^FNL?fuXv8Zds_mh2I@h!o{?h9|~g&o&Ir12du>aI*<)99mD(VM^+<556!cIMU93csIV^XOu!#HyjilI-?c*7M6MGP$qX)5UbF zrcjGDoh8RohKJVevoD<-DkoLZ$7_$I$>q&}mb9wG;h}*hVyh9w)#-zenC&1pc2?cy z7yiOQME}Xn9kZYud#}*C^iVtSj@YMzclxH){#aOCJ50)kba?&yJFjqG~c+RQ1Jm!697+8j1gLyc`%hx6Ib<=|Wqf?oTUZ zM#TT$#qenEq3Cz@1g6f@9|(WkQZ%%jT>b8e*&4Ys;y(g)I$+l~T7P_;dZ= zM_*$U<&`@`zpUROdgZ_opptLS2)q{@<$fo+G1Y(Q-$E>CRgZW9L3d<9iJ* zI=oYc)_HDlTkjnO@7DGkPPw{tGG!~Ram#{>G33&YhIDxyP0Zzu2YYFo_eg5lQ{2=#+E zAE-4VE;$ap?{#{#K+2I*=d}6`t`2xJP)@@-z6WumccZGcE@^+Pd_;`KoIh%2*wPXP z`}|b4>s-GywCST3SsiBC62q#r#FkaIF159`_&=-c@y)7Om+x!ChSQE?Debj*5XThb zF?L-J*RCmMiC3y?&FzJ;S#!Rk4L5RZ&MsX>Rf+B2#17c}<E+H4lGa! zM-P{W_PAW#-&kdHcI%OxwdMB}fn)a$J^Jy*YxXteFP6t5G@*O|KAk?`>-dao{ff#X zYizw%eALDG+2(B9qSF!WmQU-3c#cGWTKBOd-e_rec1a8UeMMnW#>5Wm>O%GMS|Jd6 zGYKSSL}e6}pRBd}j@R0HIgXOO;L&THS(kTf>GN+#kH)UAeX&SyH?c?fQCp9&YF8F^ zMi^;&UAk_s+oP|;*-F1%x>8y?r{69*m!sXq7g_HGSy708L0QqPh5l_AMy&ow(Pvq# z>%m}X<&A#5=9_Z=kQ@C)^#_c1?atoqzAbtw*v$P>Fq|duG-UB<^`94=3hp%iv^(2{ z-7-g{$D2k+-Il04D&O(%aGw$3 zaC+@87ELmGIh>P{Z`$nfh47_#Sl02vVeOW&8Z)Y9n~ z;_OvpkHeV|xT}iEy)^a=zHPJ2wSvyjSWL+y{hq9PWNz?ocj1$){y&;V=WKdx)s6mk zwX>eGCG4pFxc1wh*zUzc1~zoxyt6K}SI+s+p3z@FGNk>{y+Kyvt)+%)^?zwCYnxw; z&_gb^)nfhPY-Vz8+sxj#@mP}S!Y5-hZuI|h_K_j|KI%Wth82_Asl|s?zZ7&Qe|hO+ zwldvb7492d8{!*POL1`|+N%f|n^AQZF-m5Mm#coMHHxaW*1dcD6dZhaR!PuVLftI7 z_vNBdIZpq#!O$Ak#a6Rt$Rz)xUpwkPwL36QB8>0d&NfDa)9KE6;P8&goimmNN4vG| zQ>t7sV$({e8dIyOro${P@!={_s>R=5MP(YM_R+pR#WRanr-xLP*X`?+bADgTdylV5 z-)Gzr;=D;4Y%Bs9-LWdXZofU8EY^LZonX(`3O$V$U#u1-R=Z2l?p^1CPp9+$J^cSw z>8~8?T~t~-gmXqjsB?6v4LeZV;HBlpv{2{7mK!L=%jTEuK$lNOmv1qC2z3q$;F&n} zA+EebGn@|`N_Mh~Yl@a5UsgG7hx<6##e+qcoZ*L;V0zK8RXbbs9O{lZ(=L8lB&MUt zdYfHa7Fty-C5{zs$BrxQw>?FX4Mmx0^{a~d>unFcr?ZQzc-XsEYuFmSQT30kjE15< zD<^Bl>tW6tx>OfY?^3@UK>`ZZ2WzKrq0y6Vd@`9~{0Y$xcX3Phs*&*IxO2!MkrqY% zK*LOV+UB=5?A6*BfAfni7&!r_m^ckFZf)iaZM{h1 z7hHF|d##aw8*Y25negZpaPB`RU^Bh*Du)W&o`QfJNE`k{Hy$D%HwzBG<@(#JRkmPf9x4QS6)0B8Yap@8Y&+j zdVWl|PgvK?f#v!QrGMHxe^ee@{>7zG*P77nL%Ie%$vNjUoIR^Zc}~N2smr`Fq^0a; zZ8Oi5>%B|=)OyF3htzBKy_eEL76w9hqyy|G@b}f0ODun^96yu^o|tpBU+v$&pO%@0W#N9Of0=(Wt}U>bUBT@9j=W*msP`=3SI(UNTZflp zSCw-W;LEQHw2^InL%Il z2kDsywUjgE*+XLdo?|Vp%)1);&ON~-T&gMz-K82^Ri-Qf=9 z5L@+jU5Kqb(nkhjCoR&)7HP!WK^M#YVVa23!m$mpAgU;`A@9eG4YZ zoGEE8$i@DOBN5IMTIZ~)QCZ7_8cp0alzpszMbRB2SeI{tp+&Zu229(x7~i^`ogB0^ zj5oBF&Q^I-4r_9nwoaQkIdhG#es8kYt8+%j>c$=ESe%-&7UQa)4&I%g##4}{*ZKt` zu20UPd~#mGcb|KY{Ax^T=}Zg>zDuwk#+sJSoBL_U{Zby zSEe(0l=owb7d@Kme;NBfk8^3jv20_oCvD`e;oIQ)QF9z??k;R!7_!8+l(q+7&Dl5n zR51R%HpR~6+Qn=Ak9C}0Z`W?Wvhd$8cl@G#=+bh3`=IuB)`Qh=Ey5*A_Ej*vjK$e& z-bxS0e&y{V^C}U;4*LG+HBY>kUR_>~s|qxuzgkp1pWPwfV)KtdCzSxySEViIb92QA*qQ z&KWp^v^^bM>eJEUSF5A_?af*A#f1^A0!wNG4SAc>ea(5IB34el&hKP(pRr4ft}E%w zTrp|fMtBS|$SFR*anYu|du7hW5NyDF{*d~R5Yc;S^_Pp>QXZ{%q)U~fSNkfu+O4l? zpRp9z8MN+MN0$cg1RZ+R(d*VgmDVfJ(0OwxhH!hImb$b&kP!Hz12%74Yqg%ItIbn* zE&fDxLoG(h5;COs3S0HSQK)t6YuaTj!G=sjqAVy9XCA^uE#6-3#FeUp<<4axX!`c5 zgyD(9JjG%EaIU$%{j&7(lVQGjwE#pJ}XA=etNY+@2&UZ_RPebhs-87xMRZ#ma@lw?KHXz@O|Q6edl$h^@%H@MVI zBA=ZVelIuANN6gMhgHRQ)hyPyH4?X%Q1?@fNk2z?h%dke@y7MvwyOC>A*aRbC4q*2 zY&PZhoyDcK#1+-evpN>HslR3qSyqC5QBu+9v*xrx*K)Ev$Lm%?w%0GeBRDbyHV-a6P)CC5-j4gvAwf14yQe*Is?AbXb}ha z9%iJ)!Krnckxw+98Kt23Ch$O<^B!YXrk=(dxy{&|DckEaUg-j)TQjP&0V?gr$B5zJny(0%q)gkqIiOHzT``Zu7pxhwDDRup!ylT z;z2TuJP>13yfZllU&+d&lDCt-`WHtf@1r6kCrdio&j@7c{f*4-&Pdw;%^24m1_t0g z?L?Ci9->nb8lw5k@Fl=-nvs(LKeyS8B4XDYn~7b|j2f`iNOvM=oMxnfYRs6P2>&XL zS3qp}no;vNJ%Km7(75(DJ+UiAKlggi{J=dPXW^+{*A3qYz5PJ?+<5%RUzI>SiEHe~ z#wuQRR^e-nVM)%Py62f=Jofnb4}#Ov1^hS zH;RmBt?0%OYX1ffn80pAfq9SvV@LpW9{xOR5}PUcBPjH+2iYP;{xw;@oXbyPA4uNE z<^RqONxqENKg{aE)5}2k?}$8XIt#~0BffwOJi@w4K8^D;89mmI>IMHO%a*)o(c|oX z$&cppPq6ut&*uD-Y`x@jIsXs#X*hrB05}}f;*(NfA3l5NMM=%6MjTX6&&V?m;?uyB zL;3jgusLju;*PW^6R;QC2XPOg~Da*4awstl#qXs zebIzB*m=pf=Jl&six$!v2svp!t4*Zlgf%P;0_1Te{ycbLTAl)UO5xv-@^M`LW%j93 z|C6k5%^Oh4S{ldg%{v8#z&M#H<;AbD2gwFXn*t z?6BlTVBcn!C7;XXH?VeC>&admraBMX6ktPSffxd1%zWS$-TvyqyFOMmso%nOOI|p< zm6;E?5*@XT(SxbTzyNM=JHw*O`E1VbWVw=`$N9jA>@itT%nK^nvL*^XW*a3hTCj(G zDS7%uuZMlg&Ve@%G?x7->(lVr!}hY6R>FY{p1Pm2A>hr!O_Rw()&lUe6#hkpFIV`z z3LgYd5ul&AdDxdMnsQDaKNN%<{%Tk`R|#Yfr4 z;LU>!o>ch%Ncm8j%suQli;WZp#VmG`{SCZ%kb;Q{|D=>JY zyP@K?K@c^j7P*@l2WB`Um+f3IwBqHV&i8Ca-d`=68Q!7J)<)3`CmyXn6jpv+c-ZKg z<&1Pbnh&*;j284c@3HYyADv`W4|BGy$jNec!+V*;J8SOL*f==v8l|yPNjFLQp``zk zl;#cFXpPkny<6jNkh0;&&9lIJ@6!11D@o5-@c%>KJ(_sw7wWmb01D2KA}G8-6pFB9 zb6^zFdo}Tn9Q=AYpZGjYypV02Cf@crUK1}`#jlIYsUCD2C^?4B5ZB|CG@dAaMx0C( zI6r8>g_oV&P6haV@EBP!kthsL1^r(YO=+s=|3yy%>4gKg5(Pe&mMPcYMd-;8874}h z^TNX<$lDucCTdwg`^#P|wr&`Kb#(Mjb`+k80wzg~*Y|h<`@3*o7aP77-6U&l4@y*m9!y zsrE`)UP=`D*ApF&*=q}ZSg7&0gOP!6h<{cSFKAn&@yFG<7Hi_wa;V4UROZ6ZLPIgx zkb!WbaHu^|)YA+~w4bEuM4^u!KjDJD+lfM-hy=Ex)W;M7-Y3tC(7P}nJS58(gW5`D z@+=W8qGX~LQP=QskKdWWSwOS+21a#3Q-iCK^Bpc?2L(i2_o*hp3r6 zprnv^8n;BVB{j!&DtIz5T9%vHKT(!HMbu0_$kA#~@)UspwUj5rOB(;7mg{B7BNAlL zmBqw(MF{=GzbYL-a^`}!z4rfKK8kR_Bl37J8WfO6UKp}e@Nzemh*ZVUQX^ay*HF8ztomWxaSWIvm&}3;reP zIVsqh456>0h$11<#M*x*KyNo9xFUy~bRnY}HgA{-kkpi@Mo>Wv!6pPGaqMyl$3Vpp?mamjF8I&AfN_3LO z-$EL2?bF1|GEtzTZ>b`UCcak

    XMFmB~1b)15T=kBcYPUgHkyk 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%0DcFE!qB%ZT4i1~@GIk4^H5uRpMkzr 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 diff --git a/ra/fsp/lib/r_ble/cm4_iar/all/libr_ble.a b/ra/fsp/lib/r_ble/cm4_iar/all/libr_ble.a index 1221830b8db201cfd620f038339733675858b3d1..4b151fb7d317149404168a1b619b031217abda39 100644 GIT binary patch delta 420661 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 KXIXP{%KrhM4Glj4 delta 414596 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

    G5z@Ez_d}*8_4rAlEmz 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 delta 417931 zcmeFacYIYv`aeGB+>)D{05^qnlAFR!fIt$uNJ%Im^lC$pgc3jzLQzqX8`M<g* zHb7Cq28tL|RIsv&2=-MJ)Kyt4ple0=z29ff&7E9bR{iMiAHVOsGI{3xJk#!+nK{qY zv;N=>#zU{&U@Si=*rDS|#eSMfuMpnu!Wekn|IOB(E{tDqgTKY|Z}Eepp)H${C)_8pYiou3_uAku1^o7T;rFLffZ6cz>M@HuiY&%fkC#wZZ>(f)VKjPw;DFQl1xowhjK-3H*ongMa!jJaGns ze{K=ScHJ#bXoDy6aNbf8`+v3Dwu{&k*x-qTKa(BXDPsQ*wn^bS5n+RhaoQx&WPW91 zyWw%s94fG29HN(h^8m7&HUZO@3Nz}i)O!M7akDJ z79I%lUt{~$Bcj>wu)fX};o(y2>$jW`{NQv+CkylE0q1QxA56E zZs1b!yKUWrB5udiztRRz>@nWaRQxX6{+Ni@ZRH*j|4TNgGapD4@&9ET{BI{1kzVk> z{)-!DAQ&$4gta5Z&+LmmMZ&+cKNg6D|6mh4Ju6OVga66HpDYiaFn51);z&Dq;^O(! zGZ6d_&*#t1!2f&x|H}&4d}DB^XueUiAI=xef2B=2=~?lc?eyLvNw+~A{I}irTq}Y} z`1fz^JJUtdudvB2s>ScL!CxP6WT{BL@RMJ*cT5$@zsm*@aR08~Wm6K1#sA5U94k_S z{CClWe{b&?E>iwP8~mdqPjx&lEZb(TNDbM_^&*w_%10X8P3wXpb<$ni(g$~2K4X|H=kr2m2q{*3wBB$56r zY(~-f;t#OFKO&O#MDY>~QH{FiL-=Ls!*U9^a_fA1zT z#nPYKq8yPq`koWp%g+{>|JDXiB>XSPg8w#W|AoYncJSX9&3`2W!4o{2pJyQJviHRw zYlDAugugMq;2-{rv-77 z$lg3p43X z!Ulil>G}yGFJzw+BJVfYmN^fI|7b^ECt8MWPzR0O>t=|Sx_zUsX!$E_z;RIgdOPB` zc>V>yrymgk+S*+qTYqlA$TR9M3L4iqy!TGM*QZ|w(+Jse@RB1{Ap4k zs_sCcPY!dv*Mb~@k&g?p(?#gbdb=wQ0>b~i^dh-(}-DqrHbn@#?`NBiaGvtna z&JW_pPn>z~xm7bJjjySiU3KpG>62&FuYJea%-B4n_h5J3hKfU^Vxfvdi!*KlU;5rMWAO$g;|il{=lT z&CAap5amJ{&7La{PYNW+1J5|)>gR9qMj4wAEO_4=XO&R(w7KJJX3m*2ZNl`)_3dh6 zo-}3jsWBOwXD+?VkmsD~`?l_^&!=o&wro*qUE%uqn;&0)$R*!@F}}~{jrV=$Y@$7+ zs=0D)jM04a-!@-qBu>Rco<4cJC7yH6w3_iX=ggI>U(0MRo9>TaP*=YtF@Da(sgoz2 zHyux^dgg4)XWg4yieo39H+%Nv8F;pM{F}en(%V(n^U-$ACQhGRH5<=%E<`99Ic!Qy z(&p)pc5W^oek1;*&0p?$H%7ia*0*5uh3_Q0oKsM_y$O5MES{l}x_rMEc- z*7qNgewMj8_s|2T>@_Q+ZT+Q}W*j$U-K>n{`h}Ng?2PeD9e-|B4IbsnO-5SX!LQ@C zY&9NdeADL0FIyVTWrx3ICfC3JZf0M1ea{awokp%zyrD`r8})V0TvmY4@3#v7^Cm`y ze7%X0QXk#a=;N+0cr`>cwcEB|$ezomTtRexUH)K7i&hu-p^;gG)9oiTFg6Inhv{B3`dT>Y;9i2dYC zQcw)5cRD?Fo7#DtsxrLgY$elL8h)AfwzG}Ax}|ZzoHBmZ$n>;2Ppgvp75T=gN%En> zyr%Wuo<_hev#&5x<+#2^e*Nmc#%4oa-q%Q%Bg>6rvbe92D2MkqUQV4bcl^vbR`Z@Y zqutCRe@W-!;tpLp6?c*)#}iVV9l8{ElyU2v`Nrw8WMKAD*?oJgU&gLTjSULn7VAaW zI7F1#7>2?jV#MPb7Le}%4m9wh#NXg9)G(Ih#Aprw9q!XL{2tsh6h``p@SpfUS1~Mn z82>NQ@DFg;YS>{2ak++Lffs4GIq*^qX98cV;e6ohEzI&YdOi4kY_z+m-IbU>(A{VdL@pCYwTBt>GGArpTvA z`NhEba64_h82A(o-vYc)!w&#orQw~xf6?$h3=KqEF!=kJz~}IA2HZ(DHXTBo2X`og z$-px;TnK!zhWh~1FoSUjH3ax(xI;gn8u+ikNXAM}6v>x{W~X`D7oA_yu0y+GxiH#0 zOm6CBy5-v=vzy6o$vMfgCOhQ@>2oEvuJ1WK`{@E>zI?AdD%W+AM~JUv+)ziZQ7Gd^ zr{o)pWZCIy$#Ty{4jj=E zn&lg3%WE!z|Ci;$C*l8nxr4GJvINMCX(Jb2Wd_im_Y$^gBli-XEN49hII@k*UJN)v zNoTi_vj{J>pmD7nk&2jZRp}*J!TzPEhS|Na3kk{Dy_9R1vdc9* z2<|5}JR0ujH9XEhzqMOqRKxwUhG)W^$+ln_x0nY!Si=i}&)4u`-~}441Ky+In}Bb! zn;;wQ?ZF7f-N0)!4-W#b)9^ZEM8}Uo{<z!e&HHT*h(cU+W6l6RkH%#>%}+ti=kMU%xLiZTty16RuDx20yu z=}*P_8hz!BTbpOeg1e)A##;H~`9_vZYunT(w|?XB#dUAU zExRoAuX0IS^yqsg<@uy@gVTrl9?HJ*&{<|yxw3)_!M+_u*B;V%Jd4|a-vH(tmv}eu zUSx>xBjWFXm%u&7#+m4IvmkG0<8t63z^!dO2ly3~)?gdo2;2sF?Wk~2JPAe+0Y=&$ zJ_8;P4;3~JL{0?xrjgJC<2=}QrZiD{#FAebp z-C`gZ*${?)(dEERfDwoFi|+-F*6RBlu!iGI1G20hPwl|(C`(&sTzI`m~XpK_%DEaY4OL!2+`b@x8gJH1IEdk zhY7$>0po{SC9oJcDBoL=njd}xmeqU9>c?GVd}3;2nkAPQ&l?S6n!3lQwUon?3}^j< zpt0mvjz8s?ez|jH#KUHMbiX^*Og2#Zl3d z)x#3K<(c;wy+)jkc8Xk!{-`9R`0071HA1u^9inO`)KJle_*@~1Ne2p1LK>@Df|xEu z7vcf((|e5kXy}*y2nWgZdyV|;bA%X0SYd0Xcv{qN#8g#_L_az4UZej>vxJyU_D~__ zkfP8ny%eg+g~VtR){6vc44;>nCPXc1x%_~^5!O;Ghbd)5qzQ2Y#Z!b>P1+ZoBx$-3 zYe}oosgd@npLm~9mfNDhEZbHlh zu10|{dzpjO`z>?0daq^TS6@MXKiRR~D2l_cmbB%mo%2RbLA{B%z0hq>ekWC z<;F*iIO9vX13bC?QNt;3yV6WtwaxGuXUe#3VEVQhPV+mbJiNr6V@#A);F)uJ$(LF{ z$+=9yx?Zw!MpBYI#9+56-sWC%c}i0#Fpq)vl;XY8OCBI^Ie8x_-dDY3aVmHR$aBcU zj~V$!g1moBAm7MUsDm`l1nMJKJdUKtluCaZ{O@@j{?E32m=~4G8uI*4fVWujZYY)8 z$*UpnF2#GKRQl4v+fLr|iuYEjtR&C39lTFe8b+DiL|!F%adOsnq}#e|RR&m_$m%9{ zkTtMO4hL`54zR{3*4brp4ZRH~?;^!pTqX~Zw}!kMCXah4|zAq_sHAQTh@^0e;T}JWXaQb=w}$IvGVz>rm?by+|QLycOU8V z!{>JLlH^|aG)wx(O7eWqfLA87p8;=7AGwLVO7hN@v&dW6XH_;>o5)(ByxrAD4hL`5 zvtT`QQsju!UAdTrDBFoTST3jSG+Mju z@%h?JSF)>pr%oNaD8=_F`OZ!#z6ZxN=^Ly?n^ndw9)aWa5X2kcNw~k!@bhqI;H9jL zTf7WMj)va?##)VS+~R$>Uf1v^zc!7x78sjJ=_h{IKE~3~O4$u_1vxbv_ zdurGZT&dw!z||UV4}6b?Po|FhfX3(x51(jw2ym$@oPkq;D>XbGc)f->#NMOfS-?MN z_#)ue?r?mUQOC`R3Nw}h7if581ilftP?N6%F4piyM5W_WWw3r5-vf6EYB3ZpD}%2Br=k)rwed0FHfUDg*|-qy zWc1&oCNp=bOT;A|AxNbo3M100PALPh!v@Me@qSNYy|j@+<< zJ)+1QB>jJflF{6mm@J1U29DPEf7y6>fcbTlye}>)$Ji%(W|;XQCy?NP&LKHO8Tz0ypg`eZimCHK->OSzy0 zyshjfx6f*BiHv%=o2=*hS@SNI?|uC=73woND>*9J;wP4CYE+)AO0oHa%EPLZd1kpR ziHZ-Hv&+M}lzAzbKcolDHRZCF3RW=`CUaA{EHm6HgD;lLJrvYZ@QxD5%CiD-c=t7^ zSf;nX%yuB|HvPjomU(i2D{h&R76mmSjcNi^Dsx)@aO_v~59?ayDowDte^}u%pXwhj zf;anzwJ!5uf4Qed6_%yv(JdBtE= zp7(<0fw_Rp#|B$Xw{|S*{9su_{%-O=AKdU@F&}$NYqZt)Ayx?(t>hPkC)seg?AZpe za!5G9d2$(9f3bbsB;O^xXNb)9pf?b*T_K=ngk1YwIyC9WV||!NUQlSZiBhU&2f5ts zO*6V$dZw8eknaYQf0X04uaL!}PdNz@;0$i1E&}a5gZ;oDH}Hm%j8ic8ZsuZg{JsnP`4|qZ&qdI>2HxNgj&{AoiAW zgv%W;w#l1MMeO_Jh%UK!i*V}vAM*24&DIUiad?N+RO2M+Tjwk=E|gWLnMY-Hv)shs z3n;X{R#`=fZJ<}7tj@CWtDqkPUvFbRqkCcZ*%;4WG{Z}8u#IzpX-HTtsGf7uFC^y# zAKrnMrF;bE#KXodIAt+VZ-POd?vET#aQBTz?>7z zwDBBZM#wUxd?7GXXTypEUM3$Oqcs$X1j_15&omPXja%fb7xHpl)YA5=xgD<@fz>Uu zx}}_T3>Cgw9=Z~J%dM^C4#GQR=_1t7B>CPBw`wFt8)-b8ZnuRiTdQUwMW-1fNoNo#I1=><^2w;wb6 zw`{k}Y}wEw%C-LNzH-x4hg3e99^`%WG0eF{GL)BWbr>`T-y!hf2>$LsK) zzm^??i4wY1j&IX4U0#wA)itPh7P}xH4XaF)VDDEQf(XZ6Z@Py65rNq|)@br0aL?87 z4{*=Zu!Ftde2uXKZXI(8@m5XF*WA+@&IIObRhcMj1@TY_BEwukYz-Tda|JQH;uwW_ zT>1UgW~RLALDLsEs==drmsZO-Y#s<+12%h<99Z@cw*zw$Jl@7!vugv(9)of&C~%P> zgt;j6He^Y*{2kzDG|bn_Vc>4I{2Sog;I`9?7Y3>qpJ>4L5G%)Q(YvIo&KaZXzu014 zpN}0c?2_d2$*F}hcaxcCKAk6LZNjVai;2yBuBY=bqLvH$N9D@IHgPHH1s)%erQgTe z6>(NT#_?6XSS~!8kZ*nzuAXW~HLR__mh zXI|FI>bA@`TB+rBbiBRVV#H{5T-VE2-ZvYj8ROEUunp*>_Qgv36YXVbe9n)-Dm)21 zCEFZ6egRw=uufRM)vo~cYj`Exg|K~LDd*#jg$?##mqv;Lumvq2fkdB4+UPN;nRSZYPb@3xrV0!U#DUI zz%Z8Q1@hwKRDp!@;1QR}y$70Q$+knXeR9jjWS{Z6^j4;2$+OyGr%+Tr){+akOuc6! zTtCz|_ZfeY*R0RUin||eF=VK3KQCwA(<1APpTJ&-WRF49U?1QC&4+j!EO9RIN@TH} zje7&bdqb111fBy1pCA2S4EzDy%VqI0Q=2Qfe@k+k`a>U^ZyELb{%JaL%)I;S{~6;r z%jt-j>X5^Ijtn`?=ctQAf8|DS))CCQV5UhniE|{UB1_bLxFX2jh$Dt%(oV8RoFl7M zYc;_}aVxUX!+~W@0b#nu8c-CI7R$fHIr7U2tkp-$??AEjvwTvc*nzWh-oPTdO;r{&6gJ?II@C(oXz&O zL;|G9+$2&o6;{yB_)XUmBLizl{X(SS!H@<>5uWOx7a8J|DgAMGhZjF~3@Q9olfvH& zQnZRYNby6rf#TLCA-=W+0X!iJhLR#6RbU3>+&}#-CeB7iZ24}Req+rMidWjF<<5}{t1*7G zdi4cu)w^dI@+Q=~XIVR0=C*ZS*}ZdOtUQ^j@bm4|E;1|F;da*EFw-bf@2TN4v*O_9 z1~D_cNEV+54b}2Eu*ljbW{xScR9!j$6j!Xgc(EC4ZOJmPEV5n_uD4NHw#&nP@ans< zL{^UTHkZRLam2aSmtb?ITstr-A+@MuXI(qf_GTFwDXC_0v8=7kYgJ#A=7=(a)%Z22 zo3=T8e16CYO6B)54YLtn1&oGc8zuLLpe@hS@HKFw)NP~uqnd_rXDhuUxZ+lhF=4IRm1N9Ct1~uF+_=v z@ISouDoT9Gg|+ZXT$D92eytY3Kx8j#*bD4MV^bzdBmnE<)(qf8P2LiCl7{&pbllFs z&!4J!V8Q5^1$Tue?}7*yX_)?XTnhPmO+Em4heNjgym^{2K;GHHF)Vu=SRsSXSj>;W z*U4qqxwC>>z@}sZEZ-h`04Bpd)W)9!^XJXBF*kAX`JHX!7Qo4{oo(C!?pI*D+IS$` zuOWPI8*^K%1Xeqhq6UguFu0skYJ1?m*E$Vvg`0-21&+8l<3hK`#%}>PM^Oy@h1Z=d zt#!NP{v3y|eqNTNrXBW1P{%btj*`Rvj?I$S1>~U%v$4v&E!HEK7PviTRK9#~St?e$ zA2mGki&Dk$2-Hq)c(nV*8?XI@; zE%c02F=^ir7W;cKEih4UPZbK((SLyT5xCCP4qJtB2h zHb!FhfHY26wn{4cP2dj6JIi*bIl^rQ8c>Jg0o{ zoo&1!voSerd>m$(-{z{l;8AJ@dHJZ!IC*G6a*W(H-;sfhGjT8YlUH#v_+lA%31VN8 zCu^T^sFyf4gI8VRXc+8aCv~!`YnPJF_AJ#pS@MtQm2&dE$%*poDVWW^A=&2-PY_{a zU?+K?wIfOv)jDG86M~NYS;qC+w9o>S=c87^m?!yF#j-l7<6V6o43yX0(=y)}DUE~K ziE`gPEfdU=0eOiHSw0~8ADP|82#+dCa^@K8!$ z^Cm+Mx+gPDE=kCVg^I5hANX)-`0DsretC9k`cOXqCiZiuh&Vd}^TiZ0ln;);d@GT) z$&j1Ix^u!MVy)!XT$tpmFM7cdooCEZ6@=5T_Q8Oma_^SZd~E-^_e(s-F*0s9W*N@P zQ+gG5zM1Fbsfm6r-x^Eh!UwR^?4X?Wyg%RkE>GTa$brE>rvJHgGhKdu$dQuLx#Pdl zzSJI};!Yh)tn!L$+0Xh_u8zVFM}g=sXB~EYEPu++OpN8+4~Il1+JRhldrrroHKefu zxGiO7z2)XVx1ch^p`9{r>rBe75QLn{%x(>T2=^x%{v7Uj7NKR_;$NVN8a_s4hr?!N z+#(9@@Vu2<_<$=kc`DokHJk(YNDXs-YO01i!rhJS+%j&_1NadQmvdFX)1aJSw*fpX z*YN4U*J`*5_&N=r4eVpbVkf}C?II0RlWC2SMo9h_;9E4jjJt@oY7FWdSGdCg)&PH} z;SIpoSz}%Laf=5c@K)gKHTe$Un>749@EQ$gzXHZOjj<1Sy@o%OflITqN|@Rph-g@O zXgK>vL;St%CT2Ty$}g^Sw`tCHRoGDAO4LW5d_IOM?|zizi@PyGwp}h89akiKew-BR zVl+82`Wr`9$*_hZS50}MhUx912)shJx;r{cez`ftm(3Ar$k6Zp2>dTuQIMAv*RtWM zsa$rKXJWs7a3a`O!QP6H-0ea4$;foAjW+?e!SkDIV{WL4Mhc5;{4H=C>^vK{fZs(Buwc3!sSGa+Az@Ek88y`bQRnmRC8P|N_wtt&MAJ}{?yL-JTW8@_;jw*M}` zRJlX)alkJ@#=#cjV`bw^Ql5=B0khpJ|JVVvAB+uPB-$Rls2m(*gd*$={3&DwwtNCG z#0`6zE(ab2e3mWe=AG5ZG{){$2DSo!k2G$w@lN0?foBs(BZu#R@vuw2`<){Y?t`sm z3!mxq)zA3e(an%&H4k)@Uv=~*%j6#&Bjri+q5oE%3UAJmz;MwT~%}DBn(vyk@PZ&qv5}2^`a~`tY%4kq$#cB^`qC7wHIlf(@0t4Kdy^?MMf! zP5D8N;5w2~g*iD=Xonn>@yN!>q|rijCq>4}NWE%M#-;uK#4&3BmOzG)rj>g(C}!N6 zifdv|#hs~k15lep)YcCgZ~Z3x%t|sws}UsBOMjs=IS4q5Y;;?!e%$lLId7H*8!*$q z#KsFqA-{|?LG7T!%!W1ZAWpImnBvD=O*z`mGEx*=9Vz^+BJE(G1VCZj1Q=v#tfl~^ zaVsf){q3av&?%Fa3vo9oO5q;T=4zRqPvQY$M7)I*5pN|$#E+69zQ;+sVC+rW)m~ph zMxP_@W*u0?%P>h;=XLo=cT7AYd87QpRv2S^79@g8Z4J-I## zDj6}J_(9TCVIAk??zu0Bs|2S!tlr=de!o?B{zXQm+7rkGeyQ?q7LoQs?I1117=pA9>NF`TEVT*NMRs?rkSU}HmrjawGWjxQLYAh8gsh33o|xh$ zzc(s1X$#B*lcF-WBQ3!nDI%b{!SI|CVMZ<0CR6p#V!S$5!ADs}IUXU8SFi>3Aw>xV zEnNp5tv793{5T5G60E%dc=n_1fTxi9QU6G*FwsZ~e`k@xAJr5lFo85%h>4_?wr+%Y z&mo5Y8Kiwt=}F7+@aNKjfL3<^C(T)_Uh-tgrX8GdviK!WGkHy)glM_?6_2O>c#$*L zkaNC?Nt0tsoF1$bPcCs5lZa`CO33IXZYHKMl-pmgEPa(miKq@<;z1KU^eu?51!;;Yy6&S zbOnW^r&te5RG(%&EKxmHO$Ak-uFl6)qqSa2e`s7+kfKd2CPiCVMv5nPEoqf%&DH4k zZXiaLyoD51?N(CMlwG84P{FAVS0i<+YJgf#yp4LYUbMzBkbBW>EG9*3=3Jr|Rf~FH z=NzKWRs@GQ0kyfFoD1gViNGs8Aks^TG2@3xsN&BGh28}_26Nu4jt(AmcIH+o4Yek_H zB}I(*csPLZJWq<&{xxXO+ZzwUg@^)30F)8=NYToz6$B($N{k4sl>|gkLyT5_sZCdr z!rvOum>hMAfRExqV4lVLg8V!o4w2^L5rFa$xv^*8ax`@-Mj|O%VIFBY1`4ET{q0E+ zU<@f*>vS8>wds7D-T=yk?yxacH-_74)5l2>|C6B1$S$ap7UOja%CVM0iU42OlrMTK zr=$oNOWGHmGbu8X2^v#?o`*Ca6Y%8sM?YxOuB3>!*2ar$$^nbn9s`pWbQGiLY|4R$ z*+UID%wn0<)#;Z9u8DKYw#~A)$X=f}Z6iP5m(xTZNi%ch>rwGOOm@bOjxI)iQA-52 z>jYCWT!`c=wT0T1-V9T^GP^@!o?2qDHc=16)4wN5ZKD1LcV1w3wCe}7jq^BePf$Ck zXLeERDAsoBU>9pUwOlg>8#KFE+o|23qOEjQr_s#Z?(`fmJ9M{>qnUkdJgR$mGqpL< zX3psz-brm>eGzv`^N^a^$M!p_NBESQInid$>7i|%zRYIU_0YCW-`1mHzp1&khqi5cXAe$i z1k8W-2ydDGzK7alo6 zscn_s+|x=+Zs_iem7lc0&*jNA^L-VwTvL!1XY|x|N;l~hPO_kvwo|&RCK%N#yjvPO zEaDREJ@E5;g*QxN?xul%doOLz^p;*~>+-H%+J@`0p+1+TO35@LU>ahaBxY z7R$Y#G;d{`R=>ZW(`m?_tKt)bPK2a2pl`1RWlSM_zr|N6nUK^2$7=Ey;SL$D=e-gF z7IkZf(b!a@BIMQMw8$NT0jRztw%J>ELqB+&2u25jT4Gi%3*`t8zJ`!6U7xW zoUCpfJ|<{wF%El(wZ^s~%->8ck>#z7$J#f7{-*&`8T5uAGTa`RYKAf%YnB9>L<8;% z`5hrB@QJt~V61Oocr2yv9u1F&e3OQ!0zar>DsL}q_#)sRG<+FwBCIkV!GmhWAsj@G zR|145KRx0WU?vg@a3|a~8r}rAr6^h+JmO*C^ELUCaL?253vln$@T+jYZezTWJc3)r z!e#6c9|8Lt${br?f%7!{9WeD6Wjt8I*QfbB!VBD6lPAEnyz~5=|4Zuf5!0ES=l;6QQbX*d?RK*L-| zEz~fN;uUK+AGo82i-Egp_$1)&u2A~O0QV}DY90mw_th{J+X@Yj10Jkl-Z3;>!#w*p zTEp{zL&kvxDAf_!zu&&}z?xd5Cw94uwE*$p-4KB{L|`5s44F7Mc17R=5%^nTjCm}> z06bh6GQ`;txFiA(jKJX*p=N0>l#gvs&x*T2^Tyxtpln{=A`90K{cF85YeZ5*5vfV1 z@H136{0I~t5#hf&0$(J{pN`MM(#vbTeObZhBBc8w@R0}{74F%sDX^pnOjSK(_**&y zUx3~Sl^6a!qQaK*C&vlAT`FzHI*So2&a?3v3ws47Sn>WEtHLLlz0%h zKT;!`2|f!)A7Ca({3$T6Yf%_)7X#YyU-6_dq_aGv0^bXFC;*QnWBh4v(esGzzs#=rFyAgW0&#*Q!wzseFkg8g`~dJ9z!+Cp z2|fqR4&86#w}Ed%?4bm{0KOA4c(ME+1?G9nki03>m<^B-2l)%q!T1{zXle&&3p@=N z#EPIC4!%P}5u64*0b_4B`{z5#J2!n2)}&E6W z*s`eg;#*)JF`03)x4V4}fQ#+!u^7Fb?viV-bLO}n#N*imgQQ)9ihEs*n_W!8oiD-j%18*yeJSzZEx@sk!+6I`spD@b0X zpan1Lu%e2?-EG#@BrP(*@6o{b$yR+aYD!DTsOema#)U=ZxxLl!?=cE4;RPQmTgG+r zy|GBVNfvUot~bwts!Tm6OU8je4t(rm2>bs+E+qe6@{ffRkQ;d8$6Xmn`zMMrc}0i) z%e&wL4qjj~#18?E12+gN`>65Y%@CM1efX^G)NAFAvyjT?6fD;TYh>Jb2zq2gut^te zmsJ#8O~D>bAa^F>jPbVdfmrztWb#lVHb|{Yj7n4wxLIE{Hf)=Nyk*Jvnn&5?(ov46 zM0}TkZ}#o0Wo@)vOF{Z7r_Y?E3vdB!gWz&qaGflxvO^f_c&~_EE|2z=*3~DB%6LH& zypNMSy#K@!9O11ab_h>D>rAbcc1pi+rp$tV*1=kptFF4FqMtfnYlS&omrU)a4%k|f zdHrziN)^6&Q$KaW_U^Tq^X+GCa8iY}v!6O;Yvt=r>yWt;;ASN2niMN4U%8esKaQ01 z5UnLCF6SW%JC*)8SKc5wO_$8T!E#DoxB=Srknlf`q}$WgQdX>0b~4<;zon~@EAY)-j>O(4kaCnPf|N( z-m5=poioOeAAgqZmv3!puI_QY-ik{7Rz9b(e;jg^e2KNc^EjxQVrU zB+QDoZb0Q52Zma1v~}fag@ySq+FCUptl_WVuF)`GS?e_H!29Mc4fE6#hXu++TR%w0 zT<7swa!bpOwl?mD_rgY7>pCe~1RND-XqfBjehoi^lyuDXo3L6RZ7th`cZWn<%Qeq4 zywdWc1-BH1$C1&Z8rZ{^q-CPTOyJ=f<|ulxh8F@~r(v!Vgp33F#7!Cw%}Tt049NL+ zI%89p*da}nJ$xV~if(S*@pONaBU&`^GWx05T-k+ZMdtQx;WM_#o1aKe zZ%*wurlD-8XF$i4Eq2AFTN^hP%YOY@WCcHr@ZoC6yb4hefrmuk*%5e61b!s~n~nAP zc+ssfL!2X@!MFf-Y&afFOI->N8nc@uuFD+CO#{84ph>RVYD&= zKNW%h8G-$5@3vw1;Su9w{Dc%n+YN;51bMtR$E~?+9ESfv=Y7#W-~QUIaUa z8mw&?O_vBfAp$Rtz+0uO9D}r2jwfuxXgWvWQzLLN0^b#ZpO3&tB5*qOT-zYM_M&@Z zhL{|IuaCel%9oyr%EFxt&-6$3H#G@Grt0(u5jcwj58LqP4UNE;Mc{iQ@EZ}>z#2!$ zAiki;Zp;v65x6=6FNwepN8o=%;3Vquw&4#L*a(lp_Nzt=Y*C27`y;TEvkSIigxwW%UZ*GcaD;4s1WsZEwxP2s0^b&apO3&sLMXI)dhHtHpqSQ}Ay!A=rz7yE z5jc*cDBCdYUJ-ao1YXhz6aA{So-@5m+6^Q!z5W*2$sR)lV4J7~}ACV}{rmf&USKQ&Jj7*e?Rl zh`@Cb_{l~X58;bO4D6G^MwXDVo@xZ17J;vg!1qVs*CO!uI;Q#%uvIB0$^leq# zFLy^}1#7VZCuA7!nh3lr0w0aQZLuLIWEj3O0{`0cTdQg}-sIkrDX(2z*ln-VuSnh``OWMT6n*?AjOy#aWFR;))2oDFXjJ0y}dW z;oyVj~7-lOyo85%`V>{B#61T7;0uu; z`wz;K3)GBuR~z>L<`!#Ym>o;Bm?v94shtWAA_C7M&G(ah3#bFKL0%pABn0f zZQG;n%Ry=K%d_0g>XsKa1?Um^fg*m)$s>>L^ZViadD-ic3N^|~{?@rP`R z>U+HITKYo0wI4}3@n*P2m0Y)+V;RdAaW``8Bpgx9)wUgHf7h6kPrU?yoO!{oT{mv8OiEpxtZuYx)b=Cm$Hr zI`OUg-ll82BPDy$hFSha!h3L5<)VVw9)H!MsWs8wX|rXf+g0j5{_U~j?H`ksZdX_H z*vIk~x9cG}{qvYSrCFlw5NtElS=r%pEJ|N4ciUC-)_#1hLgL3e}7=>DG`7 z8|5wS9sew)8e3B>?G3=vvam(fdM`skwqBo6hVV0dp?%#sb}z75pdF~4)i~4Cniy5Q zEh#`TDg1W;vA(LphRDl*Pa^%++UIHQrR_!hy|t0m+91%6_(#=Hd6UK<;-A#f1n#vR zL3|vGn51Z7r&+{MJE@VeGl`)VjU|mXxDOTm2^!ZVGLWMwq{!ykqzG^hDSqyBQlFu= zT7y5E7(agwDK<#XBSkzHlOmq^q-f2TkfMYxB}KfKk%E6YDZ*W4&9gwT*cL1yjWev< z;22;9G1P%;ZN4N$LN|~ip&Lo@cE5?#W2hN1@YfL|qwMCmU-u4Duc5YLLw+AIYnL?Y-Gi!%7{`160=tWW_)Jh)s z-jgO5cwNaj0Z?)yjv3zLbw$HHi|*jDtZ05@z(e27EB3SSlA{hTp5_jY7 z8R7Of_(W+X%C(0wl4Y-tJudhx>)^zFi6h+c4RK?W?m)+x!2@dj$b8t&H)t&L56a=A z`I%aeGWS`PPM9bwWJ8#5StTgUFV!2wd|RzknO|5XCd@Zg6EPoDZwzxYUS$loSG5fD zej!SMgXX>J;u`Z+)g;UZu)a@^AFEf9iHE|bVD3`yG7}GXEb)`jAxRIZnr}Xi@ewf| z?sQW8fEv=n>XeXq1e1ouU#XgHzAi*9n~wRKs>iCfPk~&3T{tKIC8Q@V&{*gX{ z%_*e!sG4fN0wtJuld7pEYRP)yzo|n4<}<27ntxaOhRn~^;Q;eFb-K@dL5S^aI_7>= z^UP1J(*VLmwZ)GWCaUco(s$G$0P_POP^!Xw&%Pk=BOwkDzc0i;NS{@k{mq?1d`A2R zHp7yloqSFDiQ3z59>gXT;(y{F_uiWyq7INE7PKB=Zbcm+-EQ?4!h8aCfOv=6yl>u( zIzap~>Hz6R)B#eomjY7cx{!1?>HsNH??}2$sWay3r~|}Zk$$P|;QlN!Do7`*ol)i} z)B)miQ3ps-5l*-1SkjTG1ElEkCXrUF9aLr))B)noY6q1$MD3h1JE9JdU#u=W01b*- zGCH9Skd8+kAnlDhKw5!1Kzb7D04XwfJ?T``0n(nR1Ef7r2Wh2^(Lc46bhqRr#&%zvzIzZe(?Kw9GpbikvKpn8@ zLDE^M1EjN22T1#(4v_Xo9Uwgob$~QDku?E--B1TePevUeJq2}u^i0$N(lby8NY6qY zARU7`K-x#BWs`oW1H>ax2S`g$2S_KN4vyR9RLlQXw0Q#bVolxT8cVA z+DmN~Gs{p1h>K7MNQa>gkhVuZKw6GEKss1$qBjSk4iKM%IzT!}SjLogM>o&z=s;tU zzA)kN!HapD-P6_CJstQN8`bVy4&rZZk^rJU10Zg2-lVVLGha`T1tAJ z-O(+xJG%4P(c$@!sc29?}s4i9ls8_;VWcPII zQOj-qe9|RWPbbX9c1O3;?&#oYDdG_3U3O0g#&yJ(*gf4GyQjO_?&%=MkF^p+8p8aG z-P2ue_jJqcp6(jEr-T1(^mhe&I?z>iM|Z2;(Orb{-$lX2c29@YUnRc5?&+?#d%BzL zp6;)9Plt#P(jVw&q)Y9d4)|;0wRTUp+V1JrfN6k#liktXXm@n;QU0+MEVO$%M36{) zsom4fwR^g&PzT6|JkO>DHZ8PiG3f@or(2+wfjY;lx)PJ9N;alB<`t0_-VOCMsfqsg zO*pFa)QM^exH{#9w(%BdOpirIfW=Ow>xG2XIRtf532?a*G}>v*P7djPG)re=BH^0UozKSc`Zl2`=8z zatFAe>b^twV$`KE>CvlyV*_FnA|agJE$K^i#2A;1K_*vLiaaZ9`^ZiT|dCN z8}}MQt1C@xfxRXZ)GnEsDfo2XE?Jx6$~SMAs8+U@!-H|Z+(TZIN%H#?SHNsBNoJ>l zUR^C$@cOC)^z(?UNrj*1tJT`R#d}L`C+`!T_k;AMf#;oK?aQ~qnk}cusx(B{X^Ogg z*$O;bZlcFYQ>-iBRU!*lrGvFX3v1jXhm*HW=e;4J%! zC0sa_SG5Gp?qKpN94p~d9R2i(7#AknZm#Sxesjsp@W) zCtA3CW`}8VZwn-nFhhP1ifL;JHiN5UTNm?l32 z%pK0k;Osx&UTm`=25Ph@KvM}}jCvb=42C^hF`I;C+#(IQqlR;Vd2w7w&YrEihC2b5 zYPhE{9=(pn=noGS8XgWjSi@%k57+Pn;E>_gh&dYO)`;`vn?usG%GGFpeX{XxqbWz~N1sZm~u7zzxyiO@0km zq{xl=u4sAN`h-eZGuAv=)-1^Fvg&0cy8f{|*L!)v@A_Z1sqcl$zjLmMnralLJYg1| zw-=K=wWZ~pe-Q;UUOir6EV`!ml$VbW^i7TWw7>B;G3=Y;v-^yx>pgDI@geKy?}$3% z)%6z-@8^7C+SG@8kJ>wRzER-bYvdT&!f(alpE}o@-Ku8BRjzg^d+s<~D$IgrFCQP^ z{`3md2x3m@)+5LIq|6fqnNL6%J^qKQ4x6ooQn;Jv4dO}qG=C!Lg1sLrt(|I+l`VVyg#fmOb;4gZa<;cZRq&7)|+rL&jss+M`WUoMtd# zp7b0^pCk`7@ww{Lhr31@!Jc^Fym+!Ns233q2Bi)#niR^!R8k-GIm(d$U#Yww@>yb3 ztAoU;SVtp9M!zOS#*f+ZShPm!78#^1Q1eKUVRjQ{0O!-$KbUycvR^RsRDZyCJ^KOP z>&WJBLfK%mH~p%)n|S38uP++u8em|bob~nIQ665>v$l0yo-C_xmhZY1X^!SgFW2~n z7pCE`@UwAFW0l&FWt|3GUMPpZh*=d2JW&|_(n@+;^`(_I@}1G>xnF6g&bu9Hr%nap zqHum+1D{HpH6=CQ>{g_{SbW8-bNkNro68t2FK^itpF^AItq-1!`p3RVnZw6xZC77Vo=p2I zsLOH_2k@#>`8LCW`Qu9(CFr##3MxVYpeQeb z{3Z=A2Yyw<*8_j1;kCe}u$IA*WN{b3x)1|+Gu#hom@@?1HT(?R;TNCRa)-}Xd963Y zU_K+uc&&+nQ#Jfggm21c1`|X(7u;}`W;2L?1TNGtCj`RBU%a9T@H$P-8#T9UI16~E zhB*-s-goDJ&;fOl&6I^a84OD*FSHv`|J;X8nLYj`8@ zTN>U9d_coHfR7Se=_3QrgW+Mjunf*o0{b+)518k_L-G%S^ECVgaQO3eUhysPU`@_8 zI!VL4B*~A?Sf!5)#Dmcrj8FpU!2FbN2 z{n$+8ktWNommz$oU9Up;?FgKuh5uelf=aJfwLΞ-m=N#wlcRrK`z^-Vp*WA%_eD zRz={N2z<4MseRvMeNQ|1bOig=2z(#{e;$FqkHC(GHcQPK%UTh*ZDSl10~<5Mga~{A z@Bl=lG;gnULp;Ax2i*z@ps$9!2Q2Fi@gBH&0E~}{_zA0U58{XiZN^NMG{*ui(A?STit_zn)?V+;U1&z9p_H0$#mA$fb?r{E`q2LYGC z|0LW0IN;5YLqE6D1}97=4uE$T7T$ecHD68>X zLpu2OMNdt=zw6ZEzDOFamrpv) zTHUwG3{#ud%~^${H^`^{>dGH*y}Fm0CDw~<#92y;sqKEG;FpskjsB#VYadJs{t!}( zv4)aL+2ICPeozWgNtk8bCuPkXR1^E{W&F#8m`QwxeKQ)K{&~ccRjuS2{>8*|)!j)H zT5mS|v|92n5#leT_=#7LE)oK(0oE>ur657E&|aQL#Me=Ph><62QviOdwc^2%0N3_! zA#G{jl!lS*I^uxZg(NUCzKa-TcsD6>v5B-mosr}ofQN`t4iA&!aXf;gDsOaojZ5V@ zH@dQd@bWxGt#Rs+^is7bz+|`ab#X)WDh=*f!%*H!O(N;No z+j#`^S7KDNZ%FTeItm(OKrXc~AuhF4k3%~quE3KcMZ%?^O!#!tIT*{3kA$ZZBm7)q zB)rJR9L+KOgErl6Q;yomKSElLdTf0U1dWvQzx?F`ZF;Ir=h<{VX!TjBW?%iF^Udg5jh_brt68L1RYRqdPn)4(cdRwB@|aD`pg448)MPCPqBG#EY08M2;Da zrbBuP+8ybDAbvR7o`g_*Kdq^kXN!a+1O^<UF^u+vxmpeKNDtVUgF0dk=1kN(4&u0PfrB@0ocJ2F8+S~6N5)JwNTWyUIHVku zk#aCb%0U>nilmUvkUQ#dkJ+B(xU}%ryIk?|@qeYe>mR<$m2SGr5r;TKesOBr6nNCn@ z_8B;We4r}J*JMN~iVUp>T>{o77jAZC;5cje^JIf@$Ty`aPVM82D?e#^VL#4i2F$DM zv%}WcX#R??A*O=4p`ZHhDNY9CBhdl#O&fpPkF%EnGs-@`%X{wCXQA^+Ij=MenAex%gnGbyw4A5e1Lg}_FdRw8 z_bDDpZ<--r%QEe6xqA5NXI#OqJ`=6Jq|>%P?=cIQJ#e9V!#7%o^yfup0drh`RTP^p zL8AS6ZarWw(mh_^pJ&$bwPl;R{j?N%#Mhn!=1$!sK1Y3kOniyjN`@bcg~#Gd@H`dP z&uCM@8_NRb$qJrT!L#TA6Q7&rXO~rOmsjwTvVgg!Ld)%@3f@o_Ft_W>JqSkT0iAiM zg13_eOff(U?i(O+@H}Apb!PDZ9y$-0r5aO?%R`xZvzum^l^WZu8NlP_0e*TqTybt3 zz?0?y^X>tv;_Mv2^W~@$1Ncc#^XLGcDi4^k1GSuF4CIOOfLW+ByAR}P@_;#5XO11n zgX95o`atW$d_546T%3!HtsJO*h3~F`JUSjQ9|6VZzf}?L9>`*2cu0ri^a7CNt*` zQs>48Kj7jwt%Dz;fm_kxGu8Wfpxg@b<{gu$H{Pyc>h#ZQ_+4Ob z>{7-pK7!+V4SxY_Pg3LUh`fA*|6AFITgGkOQ(TS?GlZ$5U#?;7Ocpn3m^%3)s0$(g zTn2wy!&JekR)pkS2LH&yOdlEO2}ZTsmIHH{o0o?wgJs?bJQcV`lg|R4tKo})=V|yd zU|v2Nif<`!Epdg#aa%XZ*;2gB)JK#yhBG zi|B6Rs(_%Ipx`J-{=cWXCsWMs`@aAFWb*X)sj9B(>bkqSYAhb>4LGNl>om(~49<`1 zydC@(#N0NW_km9%64vVcHkby~Ht2i`=T9O)=)LjlT?SXeK4k&Aeoy#CeU`)2qbCKu zGyO9x^wBNQ%m`_=EOyq*6g`4{d_%t|c5Xu70qmZw_SA;I|HafOKfZ6=3}$}c^a6X! z8d=^jHQFc%|Nr=YzjM;pV)^DykIKi3+W?9d3H$F$LUj0#32%q^7$HB z)UUM?_tO{BhrM3Juop{mus#Nq#Rpz^$K6JHl$CapPHhSXjhdtr!+i!xxQA183NS>G zO$rd&czg%}eRr-z*O@CRnNUM@G)bqH3MiCgh+&E6U0iq~F)obG93MTIM$&J(KIT=q*a`Xg&n?V z8X%jPb7xX7cH`ee;=7DO*f+m*>(6fXVNLbFOg3Rn_0@5a%sIrUvWI%$^N)>}Fomt; zdsUUg*xsqBsqAGs4`-(?nKV}@*RsN`(biQJhBeA2`L3u(j0lKgVuPys^kN^Mk2SN& zznDVV!{5T4l@{-Q{79~wLyC5!c^JLw;|!` zlE$~lqfwCL5sg=o!|A#?4M&j&i%6e@0FgwfD@Y$N~a#9&&iRKKm99LKXawFS8+sA(`DkoTe>sN*APs+{yi1(!>2iVz{p$ ziGcH2xX8BjMtQy+Z;?q4`}L4y|6K*G3A$50CIkn6CkwbUGd!ayJAFvPBbow44yO~t zAs_02yMV=$-aFjkMwg+~=;zS_C`XO^i% zrkUPDdizwE(X=a*?S8a(Dyw_Fhmk$APKl-oNOC0Gydycyl!TZmW`+O6ETA1j*a6Ic z<zI!svq{1jFuq}f+L<5g1}I#2~iF^S7K zoMrtMm#QQU53GHjJ)C#g_!Sln=j)#{TIgGTl-X1~krT*(?R+Yga(tvVdH5)n{x*Gq z3apOpo@t1R9kY1R`~~+8nzLY$)>{g6mH38lIU|P+)i?0FkBv5)pJLb`FN3|cQHhQ? zj6yANSfnPFZZQk9Gk4qUn0z%`?$L0>V!p>Ff2gI6qY+puk>=)TyVxmT+W5Ab!j_|o zoqc=?{ZMQfbd?|hG?os$P_V(NVhHTlEZVpp=+4(Hz*uh!Z!)(G4xB=eR%gPy{ zO$U=tvC?$&FYNuLa=r)ISwGCY0xk0+8d`tGdEnNx?dd)e%s<0970cS8ZBHlizhE#) zFs~2dbJRd65-j|rUy1~EX9B%P(pa>YFLa6n4F;)qms{Sj(DsetrkXj`9sYyt&j{js z`MVF@23c4O3)GCDb86W$@bx$!r}K;8a-37Fk@>sek8w_ID&lXz`0FzN32-xhs1CTf zf})+~75m*w?5xia7c`C6wg@XUem}?@+VIy5b7&gA@Z=lQUNW-9{lin`f3eM%qvBZ2 zzYSrg8&QhxVF&(g=%=)$Xd5kjn}YcZfwG5XUWqcYas?~e^Q{kWVjYLW(v;n)d@7~s zKq`h|*|cXv`eAvz&9nOSrX0lFzek0!okzmr<>Oq*H)ddMN8s>WTGx&Qvc$69#H2(% zv(oAalqLfmfuctl?ad z;)))<_`FBcQz&Sitnd$}s6JSmZ|MJ))`t!sIzn5T@1Jb&ETr}D+f6Ynw0r6(d}%-O zsfaia8i%|?2Z2LN>rQ^I@m>g#KLoEJBYtRGGydI=aQ_v~zZ3XdoLea=@Wag8J<$R7 z(1+sMhDf>vN;mNV3w)V;Y8+_?7EZuoqA#$T5QZ2(&P(C=Xwni(|KIthLQzWowNQ ziP+&*zOCW%UFLi_eA&uH_sm{CZ|MUI78NdMySvFfAAj$a*$qc$oAZ?awvt5mhQV{p zvmB^^_eWUznM~+OwrIQPe$IBkgKImneYGhYkvEhV95TKhqG{OfnLUhnA&)+|wnGc6 zc{16^K0WR)IIhsP)oIGC46WcOLUXE)wavsxWDK^3#$F_B*OS;G>SSLfUdb7>Z2|Ua zru{|cW2@*z*dn`~Urnbz+K|-5l*C4Gdcy*9aYP>T@8!YBK!VD5hj&qs;zczNA z#>g~zu+VD3&eMgOE-({&Dt46CbbQTTzDtXHFq6?ff?K{`ubXym zsUD14mFw_A10@i2EIub1eLO>?O*uMPXr(j{rU)SCfksL@cEl!KW>*^p?sIn}^8!|} zWd@ok3ijRQ)4eOu)<3G1d-+*xO0i8Z_x^weqL;T(*o@8QXmjR}5yLXkVxj@uA(=Tj zT0!Sy2R56p@Lh%PI)%ix1wUHVo;qff5a~zLvuhz${1)m=75rZOl6C$oBpn)C_>2qc z^dWHE{rM-3M8~1WqD}NBo7!RFb1D2p^RTb@0n&g03;HT4aHxFBL_wEAm3qN^mB0z$ zPX$f|>qRd7hX;e8_(HHiMchLCv_s`H(aQv;08kC@H>ar*2L-0K%h0Yu3`?;G@gKlB z-24{0gvzHtj1nAB)$SCSraa^eyc+C3Xhqixe&8~Mz4?9bzHDqN_Jv;6(9_1czu4Cr zNlgggHd-oDOn>S!L|`UP*lejhT*y zm=Ub~C4-q|Y%{O!xqNBiqGj&IOP9}H^5DD&=ShR+EL%3b;n+6wSvh3k!uiW*FI$cR zF6+;+_p;^;gG!FNv1jfvFX_V2hE!{8-voBN!Te2hv`bEpZ|YyH^fxp+iX&|Js;9J} z{xx%VBO9?fG=}XQov1dn9yTwKJw61Fx|38N(+~kwl{929l_dJRw~|DU{!Wre_cUxz zdKy}wZ)&QDv(b|$3HLj6b7~FJ$iQomWbbv7@aIj^!`_!9lTgo5voO?#AL5I5upz0x zN{NYHlv5f~Qna+A^h26qzrAVxnl-OUQQ515;^R%D@r1tP%|KH>*w=RdW<}F`WXSLG zSI?|^I=Ys7kD8Os*P%%_PSIXIqdY%qPBX1VAm?dCd;4^3WS)D>oQ9=AP#yHdExjt^DRj;#-o71+%#)PpQF?e(9h>aP_zNfQdI=e2md%Qf9 z+21m!DKiG}SIpSJX$j#fyo$#gX1R(TBiuiL_a3*sjf);(5pN@O5vWSsRFy=rsiZDt zg`}T-f7;>E zF5pKpqDf_e3##0Mzy&n(zy&mOx?}Co%&9r%X9@r>jJQHGkM2bH8_1jcYyxUfq(SqtH_*a9AED?`upUjgRx zaDgoXQ?VE5>xS_CA*h1Vju7cloPRIyI-K{{qL?bD5I+8Rr7OavESqOh~YDQV$H>df^(fk>b{|EpEHl^>Voz0IBsSSKy zU`jM1)7`WS=2Y?gEbtYuPhc8|71@NFbt2cGPftgP)Ex>JDfoeP;lS?-Yy*c`1Lo=A zQ36u{MWz8*r(jOog69iNHSIVsMz84z;nVW9b83KuN)DFvzIkxOY}oT3l!)DIbdo7< z9-VFoGI}s(A?#Jz%=x>hS#=Zk$4Bd8H6O zUqc(QpgdXY)0I55+;?3N=Yr26(wwkM>+H=2Q&B{XC}Ns=Hvl0%p)S4LXPBnkcB8iE$yCxEVujFQFu9UMUv_|OOdG>WD=`bDooo~`IU2fE zV^|C6oYBx#X}V{|Fnbkr)uelc?IwFCu+IkRT1odc>mXgve0Gd!B+l-AuNbbjA4$ulswkX3}|Sl-DbC~Bd$7Qq@8TL%n^$1gXePxZ84E% zdU-4wm~8j0*z=~O53Dz_%}^_YCu)~yCf#J#*2fYPlQnY0e{Ib$e774TXK$Mr*Png) zM+~bxdPmA|{?TrP8wr>azIJqUu4U^}yKCLB$NXAI8Z_N@4R@m{(ZXTj9Y88ww8O$@ z>!Y#S#joM4#*et(QJg<7@Vhuas40)Lmx$j7qw~Q>8;SqzpSY8Q!4tDkNb%95zDbr)mXL_)mu`E^T=wJq- zPr=HhbNZMYzDl%wEJqdHvtahpdH2j)uwvfa*|enU>}kwCKlQ-|Tau+N5nJ7~lAmUej78STX1TNaq$$JGwApri zChXEQZF(F5#-p%kfYwJ*{(*&eI!&pj9}$qFEaDcWpYoC;Fr^S%OzfVKfK>q;f$4P^ zEAJrPPlApO7!iquW-FC=40L7P)+ddj=Qik8L#ND0r?D(n zP>gw|=~QH<(x^0_ar;ubR$P8SQ}o_U*QV%2A}`faIna-t|1dd*O??FS@h%%Z(bBc7 z3}tg;*07QK5cOzwV4~#;d*_>w7+Gfb#akwNo}aSptv5 z`JDnEgF}(?y3DlfTr07VO-gsW__l_cKMMtW#2)rJvMXzE?P1OR5N7n6P>|1 zh0C9*F5`S3%+T22=6#UK4&Z!+&Kc~b$(C#1*iCG>Zi*!&NqN7h;ie^)BqR1SruQ(W z`_Xndsm%}1PiFQyB#3p%+j?V+u)QGBYFd|!kh0RTmVU}lDYT$ds`5(;JGvifh^OzQ zRP7}nPv7J4E;=er*_)~*?SrZGDwrqj3_Tmr3{-g(v;PijlhQC_91A^h-4eD0I&_xl zt&OJI!H$vY`G87!D@|(+TRX$16l4zR4pG1|99jqWMHP!SLR0XVqYOiy}maZ|z z!nKLLOvRDR2%IG7^1B1#vejJ zWszP4WOgaA-y+V33QT?TK>2QwD76RrWfrW11jPlx0X24u@U*pqZ+t8)@L-X?g#mSC z{N_L6Boe8?&y-!T0!$ZESuL^|92g|T7x|Q|0t$<*f6xqX1y%3gdq#mZ|V53M>u$&>04`b2Xhco@!S;YanrF7QU2=jps3{1eXo zNtil_zvI_SH>VCEZN#fJwk;C9XvQCpZMq&sLKc|(1NY~a7el#8zd#ZkQ}+M~ng@Wk zP^3c*s)tHLLPxQy-=%b8))I?_&9cXAVvCYZR#x?T&+g3mdW@ANJ}g@sA|ADTmWH&< z-)5dPv1u=+q$+!~EQA>qS!>Nvtl%Y6wE0{3c%43imB_0IV?Px7Z1?6qQEc&QLxfV1 zrcFEGnW#pnB(CU{L>SU@42#H1>L(}jQeGLF&ax_zSM#;Pds{k2PRlEmWMxS@pV3{F zPHpK_d532G`E<%Sn4qqg^?ysJCUmNNnq|%K*GPu`T73}JpW1k-N_Ky$4^px1UnvI5 zluQi)np;Pws*D~lO)FDTC9iqHCfM-zo zZ8qcuOMep|``^|S7Hi7R96k~=G5)2bM)WA9=PH?oN;U`wRx8fBE*g_DY7F(Bh0t(Q zNE!<(<5K%a`-oRw!=e0jK|p2ZOEgmo(GKj7iW6!HX@{A&gs9N<^D8*X_M?Qcur~m| z1r*X-I8W*dk(qz-d7Z$Yz&ud9n58elG>)zvW}bhG1*ZI4A~5COon5SN_evwQ+F|A| zR^JhLI}F|zI1J~M^!@hf&E5)usrsY2TYht@X547^_?fD|uC0VUh+?Y$jtUm2zN3W; z{SGG51q7zLbcMiof$3{Izy0~(HwC6V+b%H0&Ly4ELN`m4JZPB${{?6~n|jKAejI$a zz!ZJ-wVU7kSuhP#`}rksq`(be`pV63eiZE1n0g3iz8maT!2)x)?e1Qz%~VQeZ9x_&0&S19$H#WX#kfl9B}WfoBR#F)A{R z%FPnY=?1!(a%d>!PU?^G!z@LC#|cd9oW3q_3iy)1gTQZ7A5M2a0{pJPPVff;j|W#r zYqog~r74{+=?Y3NcYwS1)UOAg3!W}8eezH(@Cxv60@I962Q>uvVdh@}_ZN6G%m-<# zy6xD(Q z@=#=2P3k$p{3N(8=2{O#{u<^71@m*@*94~PbLRddifMtoB7NwX9>MS65`oPqQELRY zg7dpxX`n~}PZc;BJX7F7;QO@V0A8E-3Ps)k2iFPa+rUnNYrx9| zejdC+;DcbVz%+HLO5k@*c>a3@1%1x{y1-w8&HVy*NZ;QL7nqh?nkg_%8DA(cy)vs1 zxI6fYz%kT9T$LQ~fVLUMqrxEb!$q%z7zb7z_iZ5p45Q(Oz^C<08>MYdMDap zmOQi|!CpbJlpLf7EKnK{nI^N}DVVPX7YJMpo+~gtQjvGS{PlpjN7@U;y8(st68MC` zuYs=$d>qUt-|;Y-r4PWF{R0919DKLHt>B#ke-F0O2q!-f|35=f+@&x}SHTAbrWF+? zWcVFmDkONiz_hYLvB0U|RRYs8d2b3#3tqkJXR816q4?Ub08a+f>N47a8HV5lf#-lz z1zrf=E-*bZkypTcr(jNx#Lr0oW~l@gY=Z(GR)MDrOpWJR0zVBd6PT8Q_*&q4aKhlg z^$vrV3j7ZEQH`nmHA}Q+gjcZe1-MS&Z@?d91}^v`xLIHy*i54d{4h%jTJLiN4g+Uq z2h3@SuaY6ey!2L)cSFFOZb;-$VLs^wq5h{3L!lp-hYJf8 z0@HFG)dF7tzbG&*r5Jrs5gIxj- z0+$F(9*Ud;^9sS7JQSIBVSd#kSeOLGmjd4kPR@lZewd{KuuI_kz|{gT2k#L0QShR? zfO{`^xxib%o-YN(PAH1T1RT&EiToVQ7YgQdM|)gazd>$REIbs$fnrB=YAlZxzgGaP7VsbUj}Fo2Boec!?`W zi8dklOM$O~uL!J$p&Xb=cIiNy5L_Z~Jh)!qRB+BMnr*UAH^7A4k$#ZV z{y{u4h{p>|m%g8!o*$nWaU@9nJsb8SwxS-@-G6Ou*l|S=*9P%7LENp!weB;6_^u#+ z=30)Fj$f;guCR*;S7CnU1QH$AX0<)h9I69#Iu8VRS?&( zwMP>YbN?Qsz7)jKJ+F<6%pksrCBAP-j946`u3)pF#@1J^V|c1R1(`;64NGhHW)I@b zAign(7Y1>85bwU0S>L}}BBp(Rtx_^}4PEPj2;wn8d{+=Z$ewr^Ij1&A{dy3;AH-h< z@zo%XiwQ(HWro25Q(~QPEqkOn*D9p)Al@6qZw2wcg19q?d&LFe`WZbnekinWh#0@V9QkMqtwjizx;^rX!K8OunZw9m*?sYADq^xTd(%2xL8^mQn zygP^w2l3}Y?7N21N{H!uZNv-;;=CZfD~MMF@s=QdIfy?NnOZ4GuT%WscS$mJ_cHfIWz>3*zZPygZ0mfNB0eMtcGZ&P_pl zDu^!xaW~tw0Za^HXAu9Pi#=MDKiH+vcv}#^9>gC9@pnON)Z5z<4!XhQAimzu@Sj__ z)vwUGD2Pjg*c-$wi1!6?QxJcuGx^U0a1M&U*a9EV8_>e<1P|ioW+@T;D;PuQuy2+| zfWMl7-l5I~;M}Pg!qB+{%)o!wc{ljUY5q?*ht^*qIo}(|I#^ zi6Ic6m%;17!*%mdz^@?mZ|Zyz?Aav;9K@z#<{qAzKR~0wxrh$jG!M{i;5QIm#X1** zA2J5g#FOA90>24H_ZmUh+a1@w69?I7FPVn`Ja{mRF zf)7jyMDbSe3?vx8`BAVP?05eYcr0Rcf_}X)2cG{$T!7k(6vdei%!LFe>pTm*8n*p0 zQU+d$5URTQJ}}LKqB@1#e*k{S9>^8v!1LhVAA{lOSFZ<$>h^OyP&|bYed_lREThC2 zr}I+qgL#2xycJvu!?)ondDsXp#~l{v_P+(cjJxqO?WFh5e2kgs=1JgTHwD-;28xdB zv@bE}f^)z$YYFL!d$0=p5ZIp!wt#z}C5&rw^OwQ&FV!vd2cH`o$d)s}AA+e)q5!S}w+#yf_;K)Ch<|@JtONgw8dTNo zzYUJP5unG|IdBM~Lo>%HVORz>-GIWMXzbt!Fapgz%mdrOR-OL<{tGE9nlt z2mb+u!zP_gcwV&pkH6qZ1mA|NbWk_H0c`1qkwKmB0zZQU@v6@BMp4EC_nYqn&qG4J zl}4#30L@Um0Y!J+K?is?9Qf}bb}*t43^lj!1b+hih)K@#!JT0LBiIPu1^df&^H;zT zcL)~ij6wQgZG8wLt3401eb&Tsrqj40`x6n zbn_DMFUUn7>HG}16y`Ra-vK{?==BHq9C$sh=kbRyBpZneSF6(<3;=ILfRHSB04IZQ zL3H%O6)46Qfe*nvR5#xY9%v8Tzzg6tNOb-f`2^e#3CwNb!&A*WWV&&wtlI zygJksO|Xy#UaIroz{Bt>(mnhY=fA+WFLd)rJga{p1^Q!f47fZ5QlL>#$(1BT%-dfCnSEMY;nQI1$enVdjsh z7(5Mbk^}nDhgkI6e+GOP?Bk}n{bS&J?fx`_`u`IsB4Fqbz`wya!GZq{ z!tiioQHr?q3-kxyA0M#q1P^ltJiHA&8}`@g_LqZ~A;$cPdKcIO4kdG{|BpjK8})6{ z9ef3T1c@w9XCL_Y8G({30*woUCD0(r0dMXdh=IxA2XQxw?tUII?%2=NIEh7z>Lr-- z`hOP`PvC;%bO(pQ!}0@7tk1#6kSLey<{jX0WJ?s5JW6Q|*C_}v{N&shOvAx%>pT+t z2V6W^=i9(b;2&74{})10nV@|xL8-PBd>NJ!J7?Qk+e9FbiBMM4=m;3(nTfH-Zl#jraq2 z2poq*h_uXO;4^R=%>8$K1^lm!K+)UBiEJH@2?BTN4pO0LK~XwfXBYTeB%%bJi@k0tQ8}Lh&G!LJ~`B(Uj)0xah^kdb}+ETAsIO%%UYFE3lwQUxBK^mR9uEF)SWtePA zo;zqrc0r|zo`CH4=mdxezikHtGk~vZuq@87DcAaH)on?2O4QW{Tg9WP!-LWQq zOv9CnmM_d|(d-8b-Ln@gdZJEFYdCks@~wqE(`Jc(+&Z(@D_3VcWNNq}RNWC0wQ%8r zxeFHEJNur+ixx=>7tX$S-g34i4~vn09;NVlO>K$Ib>vL8lP;TeM7JZy*~XPz+d8Fk z&$`^oy*{V4q;jtb-u-x*rRJ&0mV8T`P3`yxo0g|eG@ZBX_2skOd1_zWR#ToDYdq-N zWMyCEsl}edO;dhOFUToLUujG?w`6+jE~YQ$y27jytik_S$swuZA2K%W>-gLtb$qEv z9iPe+F8N5#A*0LK@u_K_w}^+mX5Cq@gP*mo+gDjsNw)SPNM|b@`ngleIx_HVdoH>A z0ev%UDd2I-?p$}NTTLlmkLWPxH1do0QEXnhH?=JPEFR>Mq1G7t$gWQYU?jvJ1bi>oN9o^%T zj#m37Wf}*VTE;v^x|}YZGQiOC*2ZonB^#|s10_D6)jjrM#MxG#&nEYu*CN^Jx>AzK zRRN6_EcJlQVsBE1Oc>mvDP%`X%U0hcsc=Km2BSl1DSRyHF+;23FgCSq+_RB_YF>#Q z*E%+t-ucOC9l)dC%HxG}Z7chGS@lh7ugEhcU?dssCU8Y7d-W!D0#+oEUFvS!`ZF%I zU)&@quQHxW&Egq|; zk7<{+uo^plqJ<6cJd3=NBfe>?Z?d&CFRZ!3H(Anbkfx^c$eE!|{xp!pwL~sm<|6$EjT1UG4{%W z<&H`0sR?SFyoohTP@U?j*}rY-kkc2i&IxL==Tv9CJUFCmKW0$=9*R<4jJy+ z?i*q?w#(g3?Xtz#u9!{jN|>?TXf(AOO~-z6Mr>~Eejw9jX?+v>d&D%!Hl@Wb#WdMm zhrxYXMoLjF=~D0JuvSfLZt>fbTg-5mF3HUUToIPmkvO^DWoRX5Qu96R&_s14KAQda zL_AUFrPs2~EKe_~@a<;llhgrI6uV^G>l-8+JARe4oG(*U@WY4Lr4)^yTk(dwq|}iv zrFBKTd~wH;_WJ6)s1x3mlH*cKyH+mLPx*NVduoyz#|}?Y`@_f6lT@rMd$Vf2Dd&*M zr4>a+DYm(0rQ+yyGQ^SGyw&%xwYIpzw^NeSd!HPi*t0ogWK^@37GwuZC1Z=hVQmR% zRczVpj+@oQe%VJ#d^@eksZC`o`!q^+B6BPK59x1gN+M>vZdUJ2H_Fuqa=o`5FnIfw z=Xwjv%e~K(qlhjyRQ9XLtt_nInceob&&UQ&RtrO@Rn8o*TCM z_ORF~YCq2&NpXz7w~M4li`Pe@1dKXN8VuPYE4OAv9k z2<+lw&9C!qLIss`D9qK9r?}cY%Za(tz&?jA|J+eoZ@erUZLaJi?t|na(ra*`{ghmG z05o-Ho~8MvmC7Ka?PSOeO7lDQ&iD@EqXtb^1u@NCDFm+IJtX=acgzjRET#}q3>vGav`gKLPr`p` zY)lT1!|nV|DMZE{o3g5I|MkDzFAvq~=Y5#Whbv_k!?wqUf0?*wM?}8d;Z*8TWlZ+0 z|D)y$)Ou(1n!T7mrvBbG{&;5l*tVNgtLIF~S=4<;&OFSs3xe8$Dj7|iO@>(SQ{D+< z>d%$;uzo>)(*q9mR_BF$p(jszcI`*bD9)JttEc57Zas`!eUD1Ui|j$F=^UuP?p;O}&0w)9!TCHl^HPE51c~K9|*kWU``V zc10qC+PsM;&`e;T%ut_^uds(^s@M05Z4U2{l?AR)8`;?Pt8Cqrcm5P>o~gR;mXklL z-C>5Ev8S6kT;Aehh}>G1M%uW<%`ejH|72C$sO^|gzs9~4^vU1 z1w=`yZls2e?65Q|j*w;}qLFTBO|iKZHS5#2s4+QYYJ{l?rk3W=)~&u@r>bb0|0>;7 zY~*rHvDB)hI8e65ACg_BB(1(>%B?EC;%ZXtS5LF#TUGj?nr*mM?K5DfHLSICWke&D z=ayDA3DOplu9xf9tEUlVW2w?da%3&HswtiuTZ|XWRxGGGuttlqvsKy?(CDa^_NuhB zXK~#J(?(ufb&jj{4YaO|sjSy*%C56zqD$EkhJCf9t$CGlCEd1p<$x+m+Z54f%E%Y& zjOFZP&;CJ8QGAEkM}JV0JVvjSaVKreRe;~rI#hGhPLhLHeO|X@d(P+OPcp}x-=yvJ zm18k}mR(#_B=e;6n#Hg8b=i2$JdTn_XR+D**{%F3V;x&fV+r|e8``jPdZtThAv?0C zl|+uw^x1)x7DSrnNwG1%sg5`JeHO!KBVC%-XC|*}i>%!1xe4ZrJ61f`qHr%_8f7k> z*!|1rl#{0XEaf^c#81W5n>x@opsq6=R65kG3`M?@Z8b|ee_>ZR%(P>rAfhuE%-WwzwRw8{F8cK+RNJO5}_w?L9)-=eMhauyCL04mBl0ZSSF$xnAo~ zdyG4A1SOi6U4Ms~W$BuHT|Sd*r?ru;m$fb3e6!uF}WjFTMM&2VQh!!*5B&KS^=%8qE9=N5 zlN-;hEM8(lOJDZ>T9W6zuC&BkT&h)H5xl5ohwoJLF+8z<{iz~myi0vG0okNu4@%)Y zw}q;0soFQhb{yf69B2!sv(N8R2Y8leAu1_&TH?i7li~_#RBZ0CTYT#&SE4tg*vfqC z(Z`XYb&oZs8&6gHs_+Gq0kt~W3`OJeSgCvL&_hS-jIMB3r(MgPTYamMs?06A=hkCC zN!H9p)G%51xg$%#gc`xGEqY5vcvEjvBfePig@@6EjzyD2(r-3|)6H6-*bZ~xqL8e}_BpR4!s z?l?_l0KV5g)OmBd=V2+e^bLOrWo-4It%!HLqID0nTE*h;BD#*(chqYcL3W&`GE=gY zRJh-9qv#p$SRU%#nx|5Q@9vzKKPD#j$e9aHO646#>Mpt$H#JG^i3%lqkHpKp?XgQ74unE8C9+!z55qWpmjfTj+(}N_hYSp_Z-zIKf@lJ zqYez&Ema?o?9?lIVUC&}zT0YV>`YSZc}q&5YMZ0l`(n+Pq^g2Y_k@B8ZppW5aGqPM zi7M(o^{Fi79&`|}6`Wnoq(lG}dQ=4lYtjOjrZLuOy$NFn#{2EYj#Z}80`#{Ea^30f z1#Yr$<6|lkdL(#DWZ&n`I#T*TwXYe&8MkB}I2WdjYPuuA(C#sm%`1V%J+}0L@$see z%q=jtj*pkyJ$+>uAiql;Gi7g)Gu~TZY*CAy@lv}-Qr+zPd(>oGn%=oGb}W~rG-)%k zZLM6bHpyvQ;kM=hmN{3QB=2UA%vIxJOk^olu$1})EY&{1>gTH0dD_vLSyyMq@X2ba zr)%6Rj^d598+e+QHVyma&G1Bl2Xx0<(4S3{i%W`(9d5&QJoPHIShaB55SJmzun%#? z%UH8(7p~!OYu7+uxUL-oRKDDv@F~od?u8Fl&ByH?m-Cf?S5n&l?pbDEWuIIvZ64A$ z&n0*#aqmj}MOUWl>S=0SsJv3N>VpzBE1ik5Lpgagp+~dzNKK`jL?cBg11+fav>>3h z&}6c8w;5V@^Q_%*x&nPyN>EShC0+0n*4%CNWyok?p|Gy-WklFq#*1rFk7}b~R-WK- z_hTwuCX|WWyMo2@E_-0U+TD{XCmUKrQn3qps+6qdY00(*e!qlTXQ#P+QH-9d+UJM8 zArCgT)K*GK<9Yl`w%0o39(C@%dRg#9S6J2{EDo1R4+~0xGZ)5C=A$h@<-vxQeU;<% zD`eEU*ZQPt-DAg(Eg`nrC1lNw4nN(9>=@HhTP(F-MRCGf?^TC;URt6BFgSR%m4_Rp zq&__6C0iW|A9DXc2Z|ccva64cY?1vw_AK3vG0#lF2)O<+^* zMNj$VKu9dUu88u@udVzPA<5Ej@wNXmB!RL?*6RmEt^0ENBInw18$n2nAB z%@($+NbMJ^%Bnqvml@PYu{Cz}P}s>LH7lH}k`&t<>a?)l3)H@YdN$K7tBql{3rDEf zEG>T5B7YhIqHz`TNdx*nXpTD!%^?nR3oBZnPR1B|!vgiT#DHh=!2i-IVuSBfmjrpa z|339D?8wyZel-hX^!;jFkD#s;yBB7jcw`$IuTgP(13n3L#5Ws1i8|5^>H1-7)REmQ z$0y3^-A=xj(6`0h53PYrE&bOuh9D0`9Wf-C^~@Gw3vETaO&^%cY?PkVY=)r?@vszi zgtF%|EAL2@2Ph{`C8*7jt>m^d2T>A{1S>YR)hskORPKRfvmOb<&)-!Dm_oNt8lvZPkjEp3uY92m|)InaNb~c^qN*!nBQ_<`?V7B=SsqNec_mTfALsNRC zP9Gj#Q~V(`Ot<*UnIaeaexaI!c-_53OaNIAsP?qrYRB3y&t0xpJ(Lc1SIQ++0eK!! zM;a+Pu-6|@Q}L+U9#F^A(7Cm$xCQA$#_h{qvS9Gas62P%Meyns8mINLav?f@Pi0k} z1wDLvhA~aukbWr26#TRTup0`%$QCmqd8bXgSvSA+Zu|*ong||cN^1yz?veqH*}_Gt zH|fi&xb^b6TxE;3TjN|+ZM`G@&N0te?}&e*{^|NddGd*GtgP2!^-)9A`cD~KtWJyD zvGjxboq2{6TURO>m(ahkqHBt>a7vl07c;okjL0;9O;h43SS6*DL!awb`*_TC#kKomQ=ky$J|3@1^LH;3fJw=Bh`B(cpHy_VJD+D3J?Ga<71XoA7f9?GT+y)YYD=D5un&=wjU}@y?dklBDyJ zTX zgST_};B6}gZ=L$!ZEJm}2bXN4(Ob9mvfR-eb;vU6$&WYMoXs;1a*E)}7H7vxFGaT{W!j2TFSSS`ku=|-8Cg!Cvaao6JwoU+W!A2jT` znJ=WooMhT(>5A1z^tM9LX6SJHqh(yXQKcB|(Ynir;VQRmH}PBbn^Q!p?Uz-V?O&#b zB<%88rFFQh7LTz_ukjdsjmPF|OPT9IjAhJgIa66vwy(0S>`bMtd|zc@xudG4d_h%P z`I#zP#lEV-3Yb^GyuwjsTeG05aLt*jnl<~X+Sb7STG(F;`)gr;E$pwex!__QMXlK- z+oWp43tGz@uRS8O^bA(FVZYBIWnn0?ztx=qk%7W@gSl=oIYSkHuiHy!?&X@yEV0?r zxn=>2TcP%guu_M*wEMxFL*?ktVuYw+$_n)%883eR@{nrx479fOMT--y(k%vCv9Y6C zffbpqSX-63?rc?2)qB$B%kAx@^;&<62EUAsZY{P=g_~^Uh2=Gy+BVgcx0Tx-D}2mW z5r%hu-CAlkv~3_W+s49;WLC4WZKJKCu)?;!aDCE-nzFVsx=JCvDeU*3uL=wBE^O;j z3@Y7UMZs{Cv#Mfs1U&^yw-0{%)Q&JL*XCY4)wo~qEl9Mi-)?f44qP*MlD$vK6aDqmeJ8z~jW>bE6 zM~EcjrG&ICyd%`$C^kGF-qD?>8B@m>2l%7Ii;4@p<&H5fod3+vOG5PaU`Zo8 z`YdWlNNpG8?sPIEuBx)YL&e5mU!`i}rqR5VN4r#s z)q22xDe_1w-W=Ls1pja3IgW+_Tl>n@#tQ>`N>BV}_Ch8$o$)U4zThp9sxNnRj8CYl z-;u`#J*rx08^fr5zPAotlO)%KF=dwx_eAC29brEA`3g3{qvrQ+&&B&l zehZT0L2OP&w`asQGk@}^86Kb7A*+eMd4D;aH}jOE7-tuz{2a?4UCd?k&yM0f810|W zpZgQ=2Vu8O8ME%Pl6@j}dW3TB#L^U-bUE@N?W(gHDLuq<*YqC2`rA6~t-+0s;@45< z_TeVv|Jjw<{7K3&?EVrpE3`eA?v9Ey_F{=z5Vqr?A5PKeD;+GdRLuz4@lZQyI{wJU zma6&KGiSGO3RS!Ta@ioUHy-|nN;UW& zCbi;!cm5wQfOyqm!ayB!m#f3gyUU8at!3=Ra&@vr^WM#tl&ig2WQ974O|4Luvv(`h z3eO~4@rIEbjQy3C;>SkPq=^2;Cf~-!jkWNl79IC-)R8Qw?mU&xl1-@&cYW$JmMYvo zdIx_M^JpG5D}T(aswT%a8B4?Ov&0Sv>K`c(`#}j#(Ou~S`YgAfMRN5+27Wx ziLsj`N=r9+*LmM}nPAuphS4?8u0PFstW)EI&^t_asb%tfLH-u74tPs*4JBw5k1kvc}PHC}b(L^UD{W6fm6+9++O z@gN#K=*9a!!Q%)ts?<5o=)IH1$fwq#o~UTjGVR<1ydh@YDpk8Vq-84_?JToWjYn7T z=1TQ?h{{Uz?9Q{(nz*S-T?T5b!jvi>`@Kq?LY;?9{H$?a$rg&XqcdK)xMS(tLbIIS z$NUKcw^n*@o!L45zuT12fXBGXVF_c-N2!^)G!liY^{|?cacOet#Lt%OmF!XQWqiEh z;*Mn>)<0{_3qA4l%DTKuE$+kbku!F3y*e#q!|;(+3rdQsYT1Ylcx}I7SXNbGnY*fn zJ-b2e$3EDAe8H`hk`>cNb(#mQ7rg#=RHF4#iPlRcS}%D0|Aa47Dz$X`?92wVVm6=^ zvk|SBjcCPeL@Q=v+Zr;@CG#q@W~$JdS&!DtdbDQN+t%${U$~CUoe3t#9hgCeG4aXCD$fX5YRW}*3o0Ix@Y*CW8| z5#aTqxDxbU=qsVGguW8`%CrP+HGLI~SYCOlTr+F2Pfm(0^e) zAH$T9QIDa`d2Qo(?*Gv^?wq1EjTND3Z2n)H#wOl0*2RS{=}{JFf|2`1}oON`#!C1UsWzO+g=TWwp9gJr#%KUx#UbKUJ$E zx_zKT6-(#JrK7&XY}jVl`jFkRS+(~*?36O5H1F-OnhcKq-jAB%Qq_(y?A!VHX7z>9 z%~PGR;}a+oUTm@Pc^_!Kj4i%33;a@guE z>f)#mC5#LEK9r8u)B9Y>hI97&7Bx*i%u*i5G@%dK?8ns`O&^(z9f#R7kE;*Je`FC` z)t)d<+lpFcH(Rn*9WC!@czLV(zJZktjIywgPRE#8)poTz8#gE_%p!-$CRsADV<)@C zY%4aH!H~tfgOKZ&t8PHM5V;Mw?mGlj<}U z`?MOy_Lmw%So`kfaJ*f_4tvlf~Vh2XLr&$eg ztiWmrlZ)7rkK?1*pvYckc6^6ArEj&ONdM!nVbD|RC^-~+N$7v9^~dO*Y6!wfL1hQd zhxJxNY@(I<5z$kg%c^&y7HzGF2%&#wcHbXWuiS&#jmiDlAAfS)EpBbc>s z2wleNT0>(z59>?#;B_Of$X6+RDm_6sRZuGxOu5E^QGCofM@Qelr|x4HHf_hg9tJ*( zS~{tqw~Aw{!lz}^YT#+atup@@QTiGa@rXku{#}`Ly@A)!9&(UP2KZ`W2uWNhha~2+ zV$M0A*iZAmr4R$nGv}dllI&%W@BtM6Qo%*CRgo}79A6!2U)o7)6=@o=6`$sjT&GBX zAQ_>3;wvpvq`NS!oF;hlZ-Ati6zLwa;8yq-G13y2^&C3qZL;Jhbx%oJLK5L!K@!$h zl6*>$(3Zx>#!~ha@ia3`scHOEMN;c96u%^UsrnyBA3I!3qE*`y2S) zITXPMi4g$}BzG#(>m>1{cuNxQjuOMaW8^=@(Q#4?H%NaWi930hWIR5IB3Z0xd%N`2 zHXfl5T0bRyg0@YuG{C^W=%KAGzao9KBK?D8B0ioa`G_KYL(&F6Nv>9;?@1y(o#Sz8 zGDz*D*sbubQ>0A_-^`VE@cotaO|rIY^;@#kNsP~T6&dn`OhpQ&?#uimE9qadwwrah z!uK|$934UCHzAFaOhOtbIaiTlNPeV9aUME>!vvD&Whs$lKLnO!vVm`5Pbof?IL)AK z3JZM(aSGmJlbmRfvPq^QjguT`ka9>Ohm0h-P?2sR>5!xwNscmTdpj{j@{A=#mO+|8 z5&@xoConZinnZG>fqx!E7sQ}2KG{GbC;6npzdt4WcM$j2_ioBINQJ}*&|H#mcP~jK z;`>NODboEUkyRIxoTqrCC3Lb!mhj$>N9ltkGw>A_$pS@MO%ku`A0`=L;9qQ0OjHo# zPS%lx$5kZfDSU?sPJkg`GX>TMsg@tDkE91NT)~+!^(Ih zu~laq$v6YwV49-iH1QFcZkm5ZbC%@Yiu5C-ha7Z};ub}^KoX_lPb6~@bMUPeuWL~LqM#?9iqA5UkKsU(wvb{5b~h#Yg+hsn zd$@}vJVKnowk$nMa*HhOBMFc9lZ3|yNW$YoBpr&>ND?>jI>}q`nKw!JdX(fZigb+R ztth{dk9jWt3n_3x+OCk&^@k);UN)122YANZgU?BZE7IRcqTc*F$qNc479Q|clJKaF zDN=8eKO+A7(8)g( zsV~V416~F|B4qtYqO?dQi2$XOL`p+-$-gW`?FA2!mPx{+AtbL?q@g75;@OLPcpWir za5PD{zk%f4$c7}hA^!8}1jWx-lJIB(N#s5pU`S}i0Ca1D|O`5#Ea{w$J( zh$ND@k-JH5LTV>D2Tn*Lh0h~-4^BybfC8Q52#-Nps2e;$5*C+o1B0}TIsq_q_AytQiQUY zWS&9WNE`9z znZW5({eS%4JBw!?GiJt^v5lEw##pk(ITmYBq0w%NR}2yDpCDPC29Y) ziS{H*_0w)`QAwy&694z--205H|Gd)se81m&&pqedv)!{jWZGB6HlFjUcr8^cj5$pb zoHwK(Q@t(r^PG3Y>o~tb{LOPVi}W_OiX`1fBDwm1A}RBkNDlr|B!D|b{M#cgryC=7 zO>n*!X|8@0X?A{2Q28gs}TPHZ_;#G8G#37!OEk4AeH}M(QshOzqPZgXe#mlTE5^3;?#B^$KF_T;` zW>bTU`Q&=Bx#yIMH_(oYTRf+g$bDyu8J=^NNWZwP$gA!k5`oSl*L8`>aU-cCrX@J% ziPR?cC$(0%PCv=C=mSMc$q&UkTw>)aqxd?tzXIi`rKUHf|~dhiU%wAiymGS{u*Pp&gxY(O_g zJcDkG*p_aL*qcl)@+yrug^q<-HzDTSFUN1Lvr^>7RU)4b4~n07&ZFWo*Lhr|hI~Tg zwXG4UkDnHKr_YEpc$?w}bYsMsbYsK^=*Eb=^Nr%GuJeX?3m&~G2R~x;p19w0J`mrh z8zXYVc99!C5sC4q;xDfAh1in1Up&uaT@f5Wt`}!f_lu8E_lvXfT6~ncUz|f7CdR%a z*UND$i6E{d*Nb!Mwuq|elOUNZQKaIIh>z1v5or}OM0#)f0T(BaPP*9Fb8aQ5b2$D z7Ael%L;|8;P2{ig-6ww@6!kleN3fWN|6^PoxtuT|d~Okj{|8kYB_@ zo^z{6faZ$?@OF`aEEJbH&LXjPf^(O656=?kc+T=bzBjP14CGZ}L4xy0AU`V3_nb8` zIhNDninOKAi1(6<#ku5Skq5sd^1b`ANN++vF0YE}jllk<_%PMKNG5(i&~FkSp+Jb! zJpY&T9;F*8nWi_kLyn6)=W~%vq@Sp9JaVR(q&D#>m>BiK7dfirZbM znMgTrDIRhi{YH-SEPVxWljpP*xxSsq^&Lg7?;>)2SCOHFZX(zB4CG!SrK-R9JXM7l zqqq%~gOFV)@^z&j)scrIL_EAye1W=L!~^}tj;_C2`63?PE*@bZMx?b`BL0_>C_YbJF5*fd0`Unq=3FEPNpi9H9$kL%HP5+R|JpSi6>Hewu%%({S1=y+eQ5UEYN>0ZlxOuW6rytvr7tM zx>w{~ekbe-^jXgAw1P10#}IkBa#7m&mI+CVoWXiCm}Aa;2~< zqW2;y{|WqnKwyZ7ACrpWTMS2v44S5kyrL@NeUt+63;OZm{}}5L-}9V2kpR>dc@=fU z9Sls0WV-r++(6{|CJ~kYPif$!ARzkTB^AR~BE{uQk>Yo@h{x?kJnkTV!PlDTB{i$Ol+Uv{3GJ8=7^N162uq}NS5Pg*GUnx>DPsm(1juqx>zJaBT`iUiP5D} z9HNIK62eg;BSlw>1YnHFgU5-COY5hpoOk(H6%X@;E&fRlNBo$&Ui=?D9Fd645*Z)A zRm7k9VlBG$`oSiJWU&+kWQll$9*$Te!7<{mbooW{#{FW$1ZSnl5ZFT^4|+uW#B&}K zSJAH*8HjjFoas5wh>a4Q=fyV}k`c+|uf*hFY-YWfL9P}_y0^rd)a_zj&)Fn4@|+LF zQtEcGi|2eSb|+Vhe-aikpP41`7>5^%6Ztq5sYmvSJor2DC_}d2%keiQMI_0878wUP zB$5Yy6?p|m#ZRc)#m|{p5~+euieECb6om{rC5hFT1r~EXr=nP&s$6WrK&04;fk?3j z<-e*NBz-mUI3-8Cle%0abJi9Kd67t_t0$7_8j63oPGgbAs)_gyRk=8dOf3@AR$^yn zPsI}qfQgk8oO8s64B~Z=gLm0k(N3Cl-q*scl7Ktl!p>Y{Vs=a~~xCGk+=tF?>*D;PF2q zF<31!!1#p7z~Wj_!|fuORzJR_Igl4cGV9AC0e?+wLsc!F={awTy~xyJ0^N4;GBR~k z&)-6>mV%_(CLUnOMP!arKgOkL$4^C?*Utj|=OP~L4D`FiWY^g(?x6!C67c;Z0scX( zKsR0_g1-dzBT=5O3x1cPo9D3nj*bRHFk;lTKjx)(eo`_i;#Gue$>kysh=>eIRTS|@ zKklWIj5Ea|a=BQ{aJyKai6XHv-FC65=M==`IGbE9rm}BR9Kpb&$O9URc-&YdDVvCC zuG3U3ro$qZcuq^P5+AD~b^BQ&uc)nHn{gqai&Oks9hju{vL`A|9_6Yw-0d-tO677gGo1>A?P+NXk4f)}#X? zrY1PAh;%sCi&SVE#XBekBCX}SVvHL%$w5!&Ly?}#7BSCtwu%)KoKHkN`c$N+^o7Xv zUy5}YvJvT8?Gbs{t-9u z^_mKq{!I`Gd9sLy6~wxf0+9!%iBEe@hDct>68~g~My&5T*&@%WA#z=WPm~3Pc*4GsH7or;&Iy!|!4vhHS*qblb(o3{;9d;B1iyv=`r|10%je z2S#Mtx_he1|NHb{q}W6cM*M&tjJVl#28kb%>%}Gvzl$X4F!6pSnZyUlyMKaqP;&;^j;*Sj3h!tu7-dwm>YPpDv#5`oC{Bk4YxU=aB2g*$lUfEDzZ$&L`K4?Wz04T6Ac{4z6=h z%uR596+61lZ(s&5=*nwOvUf?>=X@nz!iq5QKc2H!98SMooZvb8#S!#q z#G!nAikG_1FXH)B<>L2LT>Za1}4P|SrH}*aOqZ=>s3VMj-ne(ik zQXocIASQl2oRLX69-wX)chI8|$5IN!U3{&IWX2I99gE9FIucik^czNrH!`&frH0|VSw>6St4%}BKVp=V%oNg}J%1Yg)3oA!V z&%g82&9=WYtC+@zQ&Y{>1JyIkhLiabQ|;c2bo1K08Y!mN?9_v&R$n(6;X3sa3vfUbH+xAGVe{uZ>l7ghk zI6>rXA}#y9V!GLUs9Kt7`e<6ZS$iOwZpM5>nvFWa>StY2P{0d_haWN^M-(Q{N}QcA zhe&u=nb$vxO_`4&uZaIzRqC{FrjzrmpZjL$dQ6#Ox zC0Wi}Z*S>jI`m7D1zt^YK3?5YN0bb>n5>{)MtjLJCjm(puM2c-HXEdf`9*Wd8 z=IN8fx6&Q8NSB|2fVxdhY<8vk>9xT;<@*lF_^KL=9 zS+*nM=f;e7_!D}@NHgxoXm!*3u+ptO?~ReD1WoKjcfc%JQ%KubF<=5PFvoJq9*^K#%_3nzU zeyzEtY4>}iT9xya;_vWk954QUdM@ppU*IRp*GCA;DX;#K*gmnKz|U1zB^Fdn<87Az ztu~onYPGZuS?79Nvu^Y~HR;DH=F~cuYr18{7P@4%3$yGJj`HUXG6m71DyB(FrIbr2 z+ThrA1m*U@cI9#TL)zl%oHdOSm*s5fD934`A98vI-@?@@qwx%Wxrs%Sa%`>P4mBNC zW#pURx@K|6_Pk2e7F%kkyKmXI;$CPDH_onZ8hsv#nytC%k&Iz{Yn2Cr7RHRLpIOtr z$c+A+BR?|cSBkh7n}yZ0Ynn%ARmw3rM|0EN(blVs;iqTMCdQp#sj54|WUeU4cQ3Vp zNW4sMr0;IB*qARk_Z& z;Z~LB&Sv}0NOfEPxL29XFC%reE+@iu-nFOS8=?EAn&8yEQ%qi${NUc}%&lKW>ezZA z@p?WY&4{0>=a>(^j6}77$ohAK+4*Ipq51h%QevXX{3^KI)ICQ2n>wE()|6x2NjAP2 zEVOA53VDv%@M+x|RYtO*Bc5>rZzr2YUwA&&&^1dx18}MU&9y7i%WvG|n%XV1YnZWA z`H2hoC^9R0C*``=hhEKMGyEg=dnB5jyHxwC!5e&nWSjCg^=i^?wqW#Gm67S*Z4S>$ z%}-=GM!p$-URI7-vx|7z6gPfezOrt1x_RnA^%R>h=2nUMD+)5%Cv^CsyeekxKNX|) zJ!G(A;{Vr0Y;?WwXLg*}x+S?DH!CcOkLZC*=4Nu(`|coN-ADbTTYW0&%(r_8sGeq$ z_Tp00NtE*T5~cDc*j-~5?}-$Z=b9%?K~^=twsF_`FXbt-y>WKc@+;O^vAp$QT|!;6 z`*6kFS{<{-cgvd6A#42DEW6~Yyux6qLY`UtLG3)Va&IJ3?$NX6>AjKqrq}nCA~6;l z$41I=EGrr&aC>pZY}m_E&nDc&lwv} zugxmi#y0Uyd^06Iva&07Iu$c>$r;%>=H|b1GyDqjZ9mVvV=n$SUT40$bV)RL{qLC> z&${*9_suVnN`6(7vFY?@jq+>G59s3rnKWbb>9JUPDm4;6vb-S;%}z18jc$kgtVbt*G{{I6EQ{lt`>%&%g4 z{hC_Y{h!(JeWaFFO4Ki+J>dW4}4ved&9Cd+mcK= zRhTYNDV@~U{@?3oaaurrG$X2bS&c$>bo^I|{^|7AVxVU>Mk{317@d&oW?k7OYjo$V z$*1{v(ERaZq(yna51AG}1-)?huqoY2U9YbQ_lTMCQ>2@1)!biCRb*^Y&iFO8zI)8n zI1p)B{yv%VDGo*RaWn3h+^qJ!{AhLlSBROGX%f2l0^B{qt?Mw`(Rp`E7qetht?HS~ z!h|cAIj%XocY5{m2%J#WmBmr_3E8&(YI*YX`is>gwxq{<^V4}~&t4Q`BQ;F{*WL&RL4k8Ym%^-!pc)iI@qX(()M%iwSL#q>4f4o7Nq zi2Kh-Zn%Tc*S>}+@y;fhzI)bG{(nK%RPH#{L8$MV4IT39mPflG9~(^*bIRp2cvU5d zIkq%sG;*E#rxM@kZ~NFqG<)8||LQ6=W{e?pGvP{H6;q@m$v&pIfO~@f=%M zzWq+Otef?1KZlQ&|M!v9ofw?VFHB^VGS_UaS~a&|!oO+&hAG4CD>+Bs3q8#Pzenno zXV5;T;n7IL!SRp|U}!TG(iOI-oz}A?vCxS=XGFEDRae3f-8jC|+X@7uLw- zE9Zlwd_A@=su6L|H~$=sG_{|J?ggghACXge@WSxR8y0>)7rADJ1_kVh%-%mD)ynhf zCI5P@!(EecIGV?&P2rz>3aG>DT}pLulwH!J|BRe!gD*3jgW_M1!O&Vbhb{Jd99NoM ze+E@{0%K-oPf~GJ^UBHmvBaK{co6EBRXbUylk24j`76D%0 zZ+^_1!r;EH8_V#fxX0hp7t3QFk^w(!V2;Fzj`JLkRbo-*J(v)5qD-i?7rAku$c>Cl zI#KRpvd4-3!=7T1>lTY#$1JuJJ;C&XxQp>mk$Do!vNudKG573qs$@<1s3TjJ={83k5`uZZ*of)vBww@@aJyDFj zo|RoP-0eAYp^|X9$b;5M{~1HkVikWEK=dQmsm!|RC{s*Ygn7&qX~noa z+%0)3D?ub5@E2-FnatM$Z22=9MvK@7&+0$PT0t7s+?mMzF|FVnX;`BsMdJj!LQ{qX z(l2A9lz5N7&@y^nf?ZIl>$L7sd0+?3%VJ5n6i? zX3Iu1w<=yko=e5f5Ot2o%F$f$HBtgryqZACKSx#A*HO5}kWv@aXa1b}2p z!9U0!O(p!Xim8c1!VmeBCM)zk)CI#*Y^cw7g0k%&K)X`sd8fF&aKf%+9#CFP|k^zKFn93OCUz?lK(2V5w! zlw_Gm0N02=QME!n=o`rd>_?G+9SroxBon|ydK?NsZcGktCyp*b0yn`yZ zGW>&gE8_8ZST>JUtCHVjk}l9M6nWrMQS}MbD_JdB^$Ewt zn0JzW>f&K$mSxw{lbv!LWKvDsN$Um`;s_lqv2wsXs0WsaOf|I)*juFK84Pv(<&r7q zlf~mq+KWpmwjxtjE5);TWpJdnp1v#v9)1<@P{89NG0UL`teCeIY2|u|Cz-A`Vc7%J*^((f<3)+%FZO*O4)h$k4t7Y z@R@*bR8{$BTJRkdWh+_cF0NwXpZFkaEp%Z4Yu?4$tZf&6r}?c0`!FvmZf4n{xRo|R zBy%+sd2ln42X_|PJKIBKuj~cla<(^AQ~SS?r65xL%9>RXk2&kqhV-t0t6?4iT?bWP zJQwgC*)v%KCqBb6WpO=?jQBFk8AK*tlj)DD=BymBzW5NCIVMLw9R@L-o!R0DLM%3? z`4oGy0!(C1d$5?z&JB^JBNvNI&|WHzV%}54pQ$h}gXTMs?}N%Ck4vVF_)Mgf#E#2B zyY1D0D_p0BNG@+Arc%d?7gF)SylLbG@ln?qEtEIVcA1eJd$}8 z>jG{TSF@7DXUy3hD2|A9O$(Sai?(GUhS-}cBvUi4hIz|a zBQNq!H%b30F_cW6_)#)EChlitc`e^wMT}wKr!Z_1wuka~nB)O;IK=m9Mg#qF$t~$# zi|4T|QT)Yq){FS_2F#;FlbVN2V^$5yzY@uPnZy@KfgU1T*ZRU(G>^H;mrNr&_=h;x^j<;zAr$jgN~| zB%8%URHfo}*Eu4x)3Z(y9?sw_jDQWHuJ0*w{Ya7PCx~2socna%&+_29SA*-eiEq$X z6suDH6YJu@qxvEqog;EVZ;{+P5bD9hBvZ9s9&oC-+;!%N+`m-3m-;}Ym-~!J#MX<8 zC>`PvKG~o?;f_d-;o&hkV2xtPheH#Q8#{_TpudQRqeVQJ0Oi3f$vp55u_F5)L;~`% zh<|Sc+!S!Xi2uh${7|xrj+{x4M=}rSA@YEWMIJC(;RkjC4b9$s0NTW<6Mz-l0%`2^{@sp9OU-lQjpun>H<8TDH4E% z0oRBGV7>S(pHR@DHQWMKj=z$g6xl0s{{b;dg(G4=0Y^UP(Y5#O^+f{SB!*+;Ep)G? zz=QU|1wBNPvcKq(=>q$hz&=$ZfO7*b775_$!2W8We<$EK;@>nzBAfV*h;PvUkDP&n z5Ox%K1p~zjR45`bxkgOk+bz&PD01C@MUr~6NWeb{ctj-N$&Da+poXYdE0PD=i{yc> zkUSQ1dgD-L7$yTAT`KCqB1t$2D(Pkg`a4A4=~|JLnGAKF*9OT%T+IN_DAA?Pe zk@2sZNJQ+fcah=^k;{JL{huiVnP-?tCb?AP9Z!HG@p!sqJXj#&!7`}KvjQrUtrd?_ zr;C3u9sm{NXcI_Eb`-h4rz>%}5^PvOhLj`Q1NWfl&y8aW%1bjb?=^dVs;Zr^cN?;E<1|rLb zFBiXOb$_70OJqo9xp*}L3W0uYpnopVzbY=F8HOYIXx$+h|GiQoR+%0UR6xo~RsI=` z>Wo4$8ZEMHWTGzULw8&JIcTVdIuaR{!B$7@}N<$B1tzN+N2c;*jm{cs(DKsL=sD% z&iZD_bl1J+ki1nxB!Fj%tc~p$3lsxILNrl4hj%HqPjE``z@bk!7g^2pGU@5ty)5G4 z4v_%w4fvx-fRBm5W?|N5aOAV@p!37NY{#l^o2lv zPb8oRL<0JoNI-|TguLTxV8!3q<0|=ShH^#fftBJ`DkyOaC&h>Z82@|OcQ|i|EFaz? zE+S^)3d(C4e3uRhEXyVL2Xe=N{Y9?7KxFUSaPcLoa*>po8gQ{liaZj?&xor?+V|x6 z9}gC5@$STr84nOifgeR;d{o4P#8wcGD?`5pc-u;6;pljD2mdPqPgoDYrS`X92$nc&LraKNlPi6godpNtp_j39E^`+xlV; zz7s@--G+%RNMe!uX9oH^0{zNB|4g8NBhYUP^q+~X=#ZRA`Hxm(w~iFKd>EVsiFuAl zV^jjmn$i`MOm3bel6$9%Td88jKd2F*u3Ia%Vrwa^=<+QnJ1Keq=5?k&5ZI$_eS7^F z4rK}rC~H)zz4#?;HLLCNjt zBL?ys$sK6_pOJ&yx*_0OP_JN{0LI8xrFx zBAGQ;B(t^PcqYX-&>so(C&V@}#%9jJ!7y1ADkjw=zeQ^(QXE^0l-G_h zuR0?lP^G26^u%-+966QFsbr>LCW%`Z4HIeqmx%;urAUCDfn}Z8J0m%UVSivqZpQ<< z@l`6G%PN1UPp<+PZOVvqYRjLHt$q2*A0d)c`GD;5v{nAel;wDctL0jL-yckmxjLnLz*z>&8y#Uhzv z+gjA16)fw=goNa4$y*}+OcDv;bdmcPbcp#LEJcw=E`3CX+i70KSNL)XZmZor`dN5^oCoJ$3Q2M(NotQ+R)0z!PB zcpHt9NLT8c!2YLXx==Mb!B458MY>k)Mege%-a%(mypt3V>B^0Q`i!3d^_3svnDnT zQALYikjG%&BV@|1$OLSz_yO(zeR90RI~U)k6%^ki#^Q&RQ*kq0ELe60W4n^yCo^_~ z%&8ZM#IP7D02c=wEj+36t=xd1IQX0fHxXl zSP!-Tl+WQkcsElRS`GLDEW4gpB2FL$;K+Gwx)ta1Dgyg=up%+?&hzcNk#&}HF0$?~ z5V?OSR9iAU;CPYDI_*5lzhb&j3Np=uB1yJJ+{!q=NPGW|NJnE!z^_C+*bjC8pOU#h zwI}5M9FhC;MDDK-)n>Gi%zf>l?&}+qf*UUvxp9ohjT1#~oGz#r$Ptn2iv+x<$alg(k?(|y#jofki>)dDBy(Zw2wJdp|rYT~l8 zxR!S+DwhYG3^i#rS29)ngW?WGTEz$Gp2IQ9EbmDHH$(eCs2CrYp4Kfo2-12LiA%^- zP?@l;xRl&1-c2SGNtts4`#`9?Fc#*K7g#U)^wDS)^T5SfQ8WGVq|Bs5&+`(^`lHdB zskl5u{g-H#T##S2Vq&5s`)7I=q?}_m9E~RVH@|i?TA_O)7X*LSaq54**1tWt#z!Dv zkGr@i(X2Zf&5lT^KjZ!pooM#YOU}A`YvnYPez~|6enA~C6mvk7;@&$<_?BUw1_Ogd*v(J~DF{sj@u59v(YdyqS%rA{Fg5;tckWiZjW3Am-d+PdR1?&xXMs(mGBT%&}py zXR=-|c`jRT#d$VNR0%dr_Dt0qrC(^nWREl@Oso~LVd5+Xd(ti2=WUqmiKK+do+T5(g%qY#bb&N=Y0z*@UG>dcF>QBr^7p#+BkL zHZlwt+Q@Japp6VC3EIdo(#fu9UANIjinEk#r0kJ~M9Q92NSy2mgv807I7pm0?7_y# z9vDcR{DT0Als(YzDRHxn6o)<7NU{ChMvCq4Hd2m`!6Q=k*gGO+kFO(A_Ov=8#kv6- zDMzQ#5hq8d&b=&tYU9L;DjO%eN0m6~aJZPWUXHJA3EuhQdDLCyjYDMwpiWOphi0|U+v5u?6uxG3MDb{7by;w}kF4lK-!j?VRgha6?n2;!>egfPqmmRIT%{WA1+%SUCl;oQUHFa^yRrOOJeScGu{(?N z#UAuG#q(GmF7~A7F7{#>wAhDF1F;`xt&0Qb9*RR);m!AtJ&b|Wv}Z8nix<#y7BA#5 z7;zYbA>u{sO%N~U(_g%VwdLY)K7PazEPNI(rNb*;#xE9#mov60Ucuop;+1^GiC3|o zpH!zU;-f{pnlqKeYxukqujK>+aSRjT;&q(EAÞ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

    =^&^!z*#d zFz0-fGTA8bf??OpsCFVi$cl1O1lNn~iODG}EYdN`Qbc(Ges}yOh($Ix|7?TSwmgL!;Dr)1N_OdekHI`bm6ogo`-1c()wccc9AU$9Kj1w2vt)4S!7Gl>C^2%f!u|Rz`0Bq&?|EGgd7c zXjv#18kudx34CqA>K0x@U=6YJsQi>djTR8pKBpjd-sDM_-=bQheNRC&n`uiA>mO4% z0rR`lG5fQzORmo>3M=qdN|E~dTKgiU!T(Sl=e2r5c(cF2^&s+nt@_HsUqzyRQ7e3Z z3|}g7xzIfJ7v^x}_)C_Cn=0h^^yseT-E6CWKZwp>#x51()}^J2UneA||4+-fy&H}# zOD+zW%hkJ-vyOA{1MXBkr*3M6!cw(D;UR5>!b56>!uJiyDW2leu3d_|b`y)Hn=M>j zN=mvaPtJj?mVE$w|e#BMt_B7__@^+!X*1COy9|6YxJ zr<_MlW&9oHAh$*tm)p7?PhhRSM&o_pj%>W8^T@72rN)OL->mV+;33TM(s{UV*tl9_ zKG38P2R-tRuL}v3z1{~k{tYLb*7z*gip4+DsWo3Q8nYwRUt?@aGX`kP4)~=G2l2$% z3})0g0&p2P{IO;aw@evZweU*t`7Fcs4RAx}r5XN{jF+ zPS~jN0q|apKa5~jgs*Dh{{`>Yn3+=N9}ynSnotcldkiM11QcSOA2>!vP|O5$rs7(w zh4Xx!sliXt!nt;|tvzEYjvMffdRIG<4Gj}ShuxqUsPe**lS#@~T^21B}u$M^+;3XNG!UaqkV zwc-Me*+X8XaT@qi>I>3g2^aWsjcM3pp2l1bX6;QA=RcMhgL<$BFl@oqWAx+c>2_+k z|AF8c8gsaMc*}4&-;d6t5q`B6&iA7;_c%>)!dVZpW}f2+z&znDji=*;%vMb=s56IX z16nxkh~#O!09>Romru2~8TkMggrHc9z#Gu{8H5kf!Z(7i(|8AXjm9s7%QBnZu+DEI zyj+DdAHuXe1U- zP#Fj($i-QYXw2VO=QapmrG@i`buLBt3tD(D@Ntd#lmA7Q*XK`wV&y%M91;GP#v^h5f?VhNxWG6FRzaYg$Cw8GATP`uGWX_(nKz{K z?FdiR!g)hFFGP5y7B0Y#+LIbmkhm0a`e3KxfVo z_@T%;=X02UZIOEakf{XMY7ss~gpC@14c@BpDe!iU&wzJn>~bL!YRolyuWHLo*X8fZO{Bs0HnDV^b=xaX<&PBHlm1YD#6v4Y9 z_=^ZWE1r5bI;&4R^`@ArOtx_^p^;3rhYeG z48yrt)~PX5D~sU45j;79?`+CrjHj9kj29v}ywq1c?$;6FXCpW#q;aeG7l}_`4mA7r z2=T)ayhZ#D^PkCIM~I`8xz1qwkRGm5?H9q}5A~|>>WJ{V2)-+VS48k;@GiXGHS)E) zg9Z(Kvh?w3IgWoA%$f2E6~Xu#Tm$ZJ^RM75pfsEZ<`UgF==sk;tzw=c^UJ}f5C=(0 z?hd{ITEgcx4+HPR`4y6(X4FFPEE>rLxCj$i1fGQ)u-QIg7dRGgPo02IiGjC)@3q6v zf(PM(0h?2y=V#&S3v8yv&w+(#=WMJE(umhz^QEJc)>CVE(}1KvQHQaHj!yAw|N%$9;nJ=Y3e8!7?Q0Bx~-{#Y;(ggY190`80i^X&6!A9En`2<}l`5IhJ! zky8&eM}D{n;m%Le75uLh{QiUO6NW1!`r8d6|-lUbHFThk+r`X}q$e@eyfa7h>0*@O7f%BX6hM-p_YBu`~ zTmznp{?2;)gxkQQz|Ipt4sM4V#IGQ4cqcd(nd};yKLFo=S6&gZ=?|m2J;cigk^`bH zJN;oX_>ES(U3oPfOG_H&4r_LPRKv^fB|qd6pC3rRV9SQ}r=t_DpLOln(KE(fH+AB* z)icEEW@hs(Z*IBUOs%cHwr0w>(K7h@$rI~F*G--w9y{W1E)tI=&sp5CEj9W2v9;rB zZkRHzX7u=J*U6ZRKiXCtKlX;}t{Zpl3@O<1X#Bjs;`gH2!z(F4jDYpq_Uo@_i0_Jy%dRYv@y()&#)b6{pN=uy9ehWvBF~=Qfz15QfrR{tGTbP- z^{}zLt~#f(qUFY_xmn|nn?=6Eya89`pvsuw@$I-TPvu{m+t~N@WybN%M$s>apZPj! zd0my26ZMd~a9yoyrmL~Ht2$$l|MccS@x;pd%}i#|CjR@RUnci|rdIzoZz8jJV^wrz zmmSk@D)nuOD99+I5`?%R5{nLs5y4trqiAUyUwzY4huC`C+#@dTVG2)+_r*8`S zUB@T+=VrdQS=|tBV$)xnv+dZ?55?ptx$_3q`yBZ-Z_iUXu(IdZqrdB4)qf9p^mp^B z``5rKHdZ6xA8ouHUxQ898%rux>Z&T&F6HXY1x(H}OUb$2n%->u$Tgt%!+E z$@eXi-?(y}+KyJ!tTzL-q9QtFU(i!Iukr!;^WBnnPrlX3U5R{jbHd>{dH3eW9UuI! z?R##k9R1h5KXI^OYhI&K)OgsPGtrh>ISHrSri$^20Ew{zerbe~Nvc zln%jLti~iOuCDIF4&VOW$6Xm;*=1hcL|0>yr$d~()1u1gPnqDk!0vB;pS!QMJ0~EY z&3!7~!k=k&ir-@tZpd;6o|(>glPW2Vku}A+)+_Pj{<%4rSv6$dX>9J0X>|DZbf4(T zdp3@nXapAG4U6kzQc`>TTpzd>*}!zQ@gJ_Py=dlJo~R>ly3>#Bb+!1QY9dos*JZ78 zw7#mg&&=!_FPPcVQ*r8uI2e;sYOWSmY)U!yX7`9q$ueuj$k>!(toK?Fo03y}3p1Fz zDCRKFo9B)`^6ac{W`EaOrh4yOQTPYZwV)-2C0A zSD9@qvn!R%xgBfI%F|Fu=2+Mn8MU#@fnM`Aa12VhUza)M51)XTM&KD$&Bt zxI2EdCn4MQX&bv#oc-F$R#j&lORcy!F2&nS{y6To=AH{`#Zz%9MZ?a1UBAu9zRlx0 zk||&EzBsedG-E2Q-Syj)WN#c-R9m~f+oCJ^V0Uc1ZQd*M)}6-g)RX(nn11U{TgC32 zeX|#yj`PmNzsrfsqtAP|yG2qA$00RaOdgaDz)D@Dal zkzz!|fQX@PC_)HDnjBt~sv;;NJs>S0DkvgRKoo)45Q!y`^2P@L`#y6v8Th{Ie_h{d z_|5&CGiT16Ic@55vxhCGR*tLCQGpYx?DeR}j<0X_C@C*7^zvyqJLoSqg?s8{W^DgY zZV)=1x|8)}y>a7w9%U`L=a!?hN92b%qC<{G7!|s~qu|Q&c1CDo?DH9W^SX(n;httF zv8r&-fBet7Q3lm%FQ^)&LHESAf{gO%T0zw)grg&rzl!ZTdnz{C3_aQQmvQaat>M{m z2jcS!V*ABW|GqU6`tkfM=vU&Ljej{?vA1ArAcedgH+vo|KWH<`X9NXR_P5R0{6wuO zu049gVdEB8jq>S@(PWeLRBUcD{@iVQ+ZH$%el44MC<@_` zNKahzysXLxr~W)%Pa9ggTvib7XHiujH;dSY?D|GKlF|wX7nIcxtsJC_Idwce#BY(F z$jth(b#uQE`>BG|tUYLU<3p)lL^xjbr>y7Ssk+5w(Ri{@@ma*NYr z9E&i-JcqbG`{I%-K~cernwG7`)WDYW-PRU4Q)DApUv5*wOr>}%%99XnFWpz=svbXz zFm(}Y+#avKQS5Yk68u>eOA8$7-fx1J=@X1JIWtMd%p^H5Gs&u$S-?IyJ4cJFVHf&eFH@;$PMD?WOp>5oc^_7OrzOo?4S+*HDb>#f9wUf%} z>zu@hN1{B5k1mpVTvnyKm!X^FYP01);L6xFs352PZgU`TqDU&XuHKzgrl-fA8ywG} zAQF?2B$Z%3CL_CYU6_n8rWy>y7`Nw+(B5)}VSm*D&+8YXJgp<2^@Uc(h1!;7#oHG6 zuRbRlM|*n19s7i6Pe+_%I8gam@Vu~LHW6FS40O}16Rtu(I%|9myKwbHoKMIG6ZSO^ zimJk_XpY1jb86$;ZT5Bc%@zAP$XQ2Z(o=bFE7cPhTQ4^|~bvP>$yq;Jadj9W3d#|S(o|&HE#S;`|Vx!kH zOdlnpW1t=v?P5IjQ5X*qkBf0I`uk_(bu;%~^JQ~z$XHzUxLe==e``ekd;eZIWj z6`Cvik1n#3xaG9gjs6WI@~qT}XLd7-VTF6Q{5Ij`D%S$2yx__Knw~$qtL;Em{>(d(7z-VRP`yIQrq*K zZcNP=SL%4u6Ylr*icsSkK(1 zxvu=^ijI-S2~H~TaubdUrXZais3W6`#ujB1+8Yi0YwDjvT}SN;a>V0xJ)Q=33F z#DoS6S6GX@9JWGG{a4YW|@u3s1}}<7DY$hXdR2?M@w^RgtBoj*gdGsCTLk z4L%rra&Bc$4U=;#?Bv1vp2SdP42BWk5c9MQ-Bsy`48xhjfNv&>3^ZvJaWLkIfg;8- zTYA&T{33f!iQRVUM&jV-97(&y@_5gEUVjq09v`MHgQ634IU&o>6?%flgEEOp@Fb^Z z7NPTsoa$UNntf)e!*Q~moHyAUI}cnOZJf|5g0!;HSZQ#Ar(TTATu7?pz^;j$w%zpk z#vo{6f+q&)y_w*N|G#IhzLTwFHRJxB;Hhh57Kz$EPXipDyL{+Xa>aC?CrLbP^WX!n zK2M*!b=iw)KKDLWfb2iAwT9z)7@WJqd@c8_*k*>C|Dsv-@g~|UtIxW`y@{SX#aWvt zsVTy67GkhLFvSC$OD(9%cN=L=j-dDo^`_BUQc<3(prC5C_#@GC)StIQPr)I{iOF%4 z2Ii^3rK|JwGA(6Yp5D|c&m1#y^7e7cZ_m+_H{_>I!t=@~4(*R=1s5*q6+z+8z51$V zPpyNw!h}+DI;N-Qmll*cQimy>x-E4I?mH%VQ=XplQE<@7+}v*YRk+%HN>4=2O2R64 zi2)68DPcjuvaVN4(ONl2%Es|X-k8_5EUI&OX=Z*{d6vGWYC%S3epXy&UddK(s&Q8H zW#&!F3vAPQAjsG5M6OxmPipxEAqI2h%P2JxTbK2|esherXlh*Nd|Q&)p=rww8b`yN zh>>t2745;}KZQHoWg)52C+z5^0?7uIu4jQDD?ZIA%~j_ZJj)5hFiLH{^?6r+;--%{ zjFVd8hP+>YVv?7UV&zY+)bLwU{JJ_t9_KH93Q7x+TkCn_X6kO5G$f}bAN|SPfVO*m zUT&_QABEoO&dbKw#mQ*uT`g+;k-%_cc2A|1{$J;i||Z!5E<7-c~z_~2^F^{uvMDFya#FmD@k z(>G|$>M@o3aL5K}n82^r(E&Zv(39?89i^8UiQkT8E@y`f9>aog2HS9W6USVdy}AI! zho#h_vI4pGtyM8GuUq7H^t8Q^Zo#su0raJjx;sa!m|d`wF`<}3uzo>tsL}q6&$rIW zU!HyCtU17BY)1t5!m0tCa6;E$OVxg#p6>eUgc#At(=>dqZADeQdkyM_W5W^gdLz$W z{;J+HHsADlR`4*S=IM$1sxmeFEztkc{#sGhN#i*ar`+UfL`# zs%%e{<{n>gdY3E!gKVA{0QFH3h<+9LO!%b##F z)hKOS=u3O=ixt@2so6Zw&eGaWD3nXt+HNeBVB(UcX{qrC_Eojlb{7_A7nimxjK&VE zI-w`~a(MNteuXU5i0xB$+)TCQ-26}7(w9-i_0-NM?AJC4Tbie}zE`wM^VHKT)oDgRD6us%v(t5|CyvMM|5rM z+30;0nQ=IDBPbdR_}O(WTFG`#{|1S^Q*B-mamEN0 z$I?AvdW@L5+}T(xSniAw^_t?@=B+E831ZJ&e3ETMQ%{aqTpAZ!{8>{^2VG<}^Ms4~ z%{?jNlOMeIe!L~&;J)MgTDWvCZ)f110&eW+bd`g9X37Cj96XUw z|Er$SdQUn0DKYPG@RLZ13_rydfFF9;M&u>)MkL>WYeMZ*kH4qr@^vpiJq5I40202F z+-BaC(hlL~1oivoO)0)B(uo?m%qD%hd{crS66;C*4eke#h{ro58t#}&>}`a(Jdw;@E{^- z)1^~BX5dw7B)E#i9jLWrYd8`ik)ib@4$<2rGR9jv%-9wZ>0(ndgFCSQ(kIeR5*yf~ z^j^}bYX?cU`PwmG68wnTW4=7a5B`5jjnq(x@@s%!kUy(eg}ic`GJ{{!j`dNv(osMe zc^x+}QM%GM;YIQf^<~Yj@Ek%7*CxM{ctROL^7Wo;WEWiaB2jXDbCOQeZjd^f0h{t) zqT?N&=KdJmr=mmw)h2Oqu?~stqE^U!qZY|`91_Wvx`t{gD>!N;Zr|$WXGU-j3|o-l zh$0J6I>~_@Ny~U`mAxHV*Yv{XXWh(F0XW*S#h}cjBZF=vQt3&e0Pi8=)MrKh2lpN- z-u+}pxc4Bj6}|^gZ(5I&C^Sq4qz9&fKNVh-HpCx z8+9{y@gP&-#lz19)ZzVPF>bb!C-L|Rc^a>>kZGFftUFP8#c7P!;%LXM{!$X1*5@RS zN52mcn+HEu4~_uU#X9Fw8hQ#A8AO^waX-0>#rnoUO_fcUU1NAuT!JQ z{v?y(rh~+u-6T=;h5@2A+sS>{C-N|QB=SRa5F}c86nPANHhBVlOKmQEj?yR5H0zV- z27KgM(X{2KDzZ`Qse@7J z$u8(yI&lGem_y>&^dM1my+{;UZxT(qABon?FBou-F{;V#d;roe(NcestF)*znqjc?c z5(Cs5q+2(g)$~!$YC?5wGwprRW0R;GJIQ{i$7Bm#+eOj`kwL>H_{sD>jN2GI` zE6N!SD#dXIV9+ZiOVJQWwD(gaM#j@*E#34*g9Oe~+jaTaI0xw;s1IUbCs87Ne4Hin zEBP(levl6-Uo_}uuNoX%u;>3{022I*L_+_PNC3}P$^@kE86?0Lu<2KbkD1exlJq_E z2x>VsIw&{!C<>26E2%{ygRvyiDhK?lSXOk$|t|VGh4mkkThHQiWSAI4VIpdS-bWn6J zi2;pI@@Rwb_z{Wlhsmv&mym<8lOzt^AQJJ1kcc;wd;+zeME}62d)O~LL!xqzB8T9q z5i%A1?^rGjMXe_>g7OJgW1SM=@V7}MPc2j#`o zXs%1hv3P8S#2~$#d>$T}$j0b@S91Xo*O24z$QgMRPw4 zXa(fI_@6`uNBb9+EXOrjU=%n&yWkz3P_ajbAB!?LIou=F~cDdkza*n&o`M|jH5$pn4ObL zF*_&!!Sin9GCUte{*B2wiS-wd|HZb*8(4)z`u`x4Uy7WGP`MgE0WKw?9CNo4o{iS!PUNaq6*8Ia#$+JTqG zKcN8`I7Y5U10Zp1KPQpkDH1E3A(7*=BsN?d2>e!yzCYko6&pPbKuJz6}Qh@h_X>PPA`MP&z1Jux5|hWhu{MR?PgC_PNH?&#?z-i?lNy2I7! zp-O$N7;S{r5q&y)oVr8Qy;`@8xb}QvZSh+-Plzapj;U=7*TjGy;csI>sN31jBPWD` zoXJP`vOVKxI9{~Rw9N`C#J9AwJ$c6Wo{?QWdE6DlAx}6p!z;FYhn;vS%M&A_nfpCi zo_ZmH&|2b`6}~vJZ(VJt=swF9DGpTDiE3EKeDW=@wOUy4Oqs9Wl5VV6l^m0-*A@46 z@+8*@q*qT)paUyvMWSqWR6~)u!W}7I>Wm#bmV)wmi1P7DR|s}|^a^(^;lGg(Qk^Ay z2`U@!0^i-waEe|rF_GfgY>!#edZIYd*Woiu{ij0Ywwb4n3c}Z-*VRrIg}=HY#j1(* zqHLHx$BKpaFpnrqkEx}nh`46n2GtvBB+@#2nq&L=Z?0N$1(Et2R;|fo)yiA)9Cx)& zq-fvQ;S}#)3$+K$(jO6{yCizV@Zg9@p?C4rjSUpR9dc$}T?8Y7M8=&lvEETZn{oN! zmLkO0eY<#CA`^YG5)$A!C&qbKww&izuZ-D|*2yzrhW$m`%%EBFAdeg9nb^rQ&KT;M zcuQhk#Pu$?bs#Hi_aI-SXx^3OJtfkq_Yj@Bsvy0mSU3?cSllC`K6AovKXCkI;VbxnVuUFi%m3zh1&bZFR!>IQby(?X{tBbUcIKDPGLGLTFGHkW0OQRoV zC6)xk@X7bqF-iIZVogpUOAm^IyOYeL%C8sv8(LeIh5oS2s_}>>I<~?KLPIuktdneG4O?l-YKzW^=uoD>RDZ7^e4qH-92|z=kY0# z(F2|j*hlDNM2i~y|RuI_neyc#KpN@UUW1VqhqR*z!Jw2V^l?KaGMbtgG8poah-_m-iR!oZiBHEPOE84`w)N*53L))(Y z9TJcK7*ShxO>PWmvDE=M2NYA&W9sYkmfm4Q1uKejx-l|kSR%9%k-a=|Q7?NY9{%9N zkB%JuSoYNh4&DW4t(f+Rc}taBjH?p(RCknDOzef*VikX2cbAF|(DM__wQPd?%)L%YLmChyLS9 zudXet#g;qWjYP%wsOn{ZIcxhPkY<~7c}Ycc{baU97v^m&$~G?GEL`9OLJkCbDhN89;g3I&(9MLnJ}hUG6JvPFv26s zzC>}m;vq#|L|{fvlGyOqWGh{MN}lWU8h{Je2L1xM0}h-Oxk@nPfZQ>jvbSlCDO558 zFrC3AUA#XGx6BMc_IXOplHsW{OJ*o}2qi!}5|}~#gZXr~>wU}(X}=REF0|uh;u~@s zzOh3h{R)Qj5MpBL!pt{}^rKv&vA}?yG$28q#n9Q{W7Nm-yg7+@W5{!OM;T;%o=h-d zo&}PCJV0!QRCSEMvX&Y*r8Del0fQo zJB~kdl*0gI;1R{)isMLRXbOppOaq5+!k&U{I$`ceJJ#DuBH5+ykl9R4m2E#8-sMX`VZNN7EY6T2Eo z*ycW*15*EiE2kvd*1hEaaGikRsEmV1R8~6bV4a!Ia8$}g%I;rF119_HN#yWjatF?k zNX%frCb0+SLFV`>^;KL)RGM$qxzNa~u;=uqoE2i$g`VK>&FDWsekr^^$hwoOm=7Xj ze(iM{u;&{|TwmEw^7@JyLHn8-S0{cUaT)YF?btJ)3;H5DDzb+zKbR4UJ>`coNPZxL zB{YqM-pF`JXS)hNNqrH=pD)011!pJ>$OvC}V+NX$*kBv7gRW(hmDm#%&iC9Ho(FRM z8OlDNtilFqM@CCj_(|GvQK5a9Y0n1R_%m^p0t>FwI9B9IoGy{Y7*au5+rd!8Tdl|s zXHb`b#x7hjAwR+)1KSM4xQ258BM8@bK*k#Yy1qiu)BYJM9l0CL8uT;b1V+Ff7m**L zl7MYSq5~mE;S7mHb9sy5pQF~3U*H-O*+ADWk{{y?i$n=VM1Y4;4-~s7_5|BJixMRB zu)`5-|Hp8wRKO%gJc}L;WX9$zy@cF{jF9Nb-Xc+%_?}vu(P)0uXvUWmuPXArGNeNwsrZoM6N)29 zWFU`3KQfL)x`lK`=E4xTj6~%)OyW?SBylKyAV0z2L83@+DB7a1=c7bHd0`giC?fnFap6UnkXJkO}D#&B^ z5A~<$c%ngGa3*o=`I?yv7oJCw*KlnBk)cAjh0oyT`BT<`wP;}Ks5B4l3iy-ZFs8KRL zY7}(}HTJj-HTsP##hze1`inl`aAbfVNnyMq#jT)gD@v#~jz5phaTs`PE;9ftTqS=; z<*Ngt*7hP%`Idp9qfv>#HgnKQXh+6>Q2c{LYq_Bq9Se=?!F55dmkx5hduhjd5BafR z{DRua2;2`e2xcfvlMpE=(8H6{_Em*NbND;6p}7i31?qV9|t5sC4iw^q4fC&>6=)JP|p z+=DKc+>2Q@$Q|KlQLrO^?Fj}T;uI1^SEM)}WKk`pMn`jmMBja$_BCie)L2ie4}OV3 zhr}^WCbuCDi45IOBHjQMzD(JVNa7OubuM7TM!ZP}$PGtOW5XFF66#L-YnX;pr1lY?kYC_W|WjeM0M;tRQpu^}zV#R*sIdm`} zH#mqIdo+p~3FTA&i&HS_*D)`kzJQF7Xl5J9qo}0hdGrU$UIMmx1N{LQUxHB+^oJtB zZy10L-2hvoGP-<-fIZ44v4_1tR+jrg9@|H#VJ{&6#33VbjF*sm(Y`@e&W+SKqdH7t zZh1y&SE8xwCbIowcAE(UGq6Mjd`P0mFDuR4;@m(OiGlDw^jy`*7vKgNrjA4fPVHh^MS|D{# z#o-_~uwLmhaQGH+V9u!Y$K*{M|I=K!h@LLhj2J;8XQ?C-Ob0{P zVK5@!K&7M|dp3yrP4tM=*uYBiFBCDzW6uxDFk}3X3^hL>!;<2MV|XY^%y3Z_UcZ*8 zNCZFD=!(BX-8@}(-dwKoZVn<|scaKbU)uyewAal2T!~m^MT`tNpKZ~t(!d!;yX3Iwo zaPtd&6?Ip2-KCr8x6wY(|A34kZ|HVr@Ix}DyswIwH~=_?ygv z%M^KwR4yWusA8C*kW+Erl$?gDPEMD1JmoE{TXIgLGBCM9`{AOpBmO6@l}~^dFuw*Mh}QikzAvm5PMAor-dbiyeTt_Rw(B8 zjU0|=CgX>A8rWCFpidV1N4Vn24{#cDnuvmtwcz-;Cp{3P*q8UjFll~VTe|$CK9*{_ z{2Tt9>GE&HbLch2)T|_rbc$=_G-eREPjE33Q>er&dm~e zKL@t z{I9%FWIT_p`GzD!!MkmZ@4w{P@`J_Z?sc7QaRB(hZ1aPxGA}R8ws--YHCy^*7puq0 z#A>_%Zk%n&)ZW<^FM!8pixYW)y)BzBueEi%c(oF-4}|!InjI0GMKA7on&F zZVR6*63^23LXl-dvx>w4x(ZC6-7reG2E17${`oUD#VA(By!#>B@YOxbgem`M4EDW97oKB1gG$1DVy`DJrNJv)r+=a~5_c@U}2 z5l_>0WRAH*Kh6<*sISezCwftLqUMTF2Xx|G%Q5dUS3FAN!*eY=_|#nSHjU%0#@Tbl z-!%T$YTPha+!GAr?zxs@cXqCLg~sx^mO~vjPn6RbH_vPbayNR+6L&dbe0ZMxa`vNz z@d=G>=UZalKVQ^y!8p_!bL@QaG>tPX#_%QcF^Z$>Fz`2A9DLVa&v@M$zTFazH-;E~ zScT{1CPalwTTqkZNoIJH1+rF#ce4ad5mO71B^C0VC8WSyY5D@W8|y3~)69^aYI6lo zU_UIuGtA)A*4$jQgwHg?uP>1M8M&|~pXecZC=(W%1(Y`x30s1T%;262Wyc&o*b+3? z3>v-AEP+A!x2`$g3|_dzHZ;3VNftcH$Cq zw=yk3o6Ml@OJsp9eYnmoD{hvda4eiy8$0Emc5AX*&2`rFE*=(54T7vePLH?KN0yiam zg(Yae8T8J};@NVzK$fYVw}h9N;lI6H<7+qEhlyIC6c3r<8B1%1h49BM;fH0o{TZ0x znHU{^_&Q7IhvwQlm)4Bg;b$%3N5sMXXvF19#b$U5UJBQ}j=Ke>t8VGj*S-StKjoW2 zy7i4)k1NDMW>v*$ zyfwk+6Qi0m47=?U@6tD3){7oz@t@N@eSCO@UwVe%G!yM()a!UB7H*v~-Hr58^BeD{ zEZ=xPWq#v51#gg>-*|7+R%E^5i8V4?iErPEPt_ZVh>++mB5!rjR`Fq2Y!~@_m)r}@ zA)j<}m;(Pg_&k?+J|k@o?R^kMr+yATT+D~ms`VFGIwAJ`5me9rEf!A(LXZ@$jad9I zIpmuH-&n$N8mg69v`xnaF^k4c7d{E7ehxkZTm9n~=5f8v@(UIl-tBaE)FhLf3mNo)Fgf67MM%>pka^^)1q+ zhn6m)uf;R5Xwu?7*0UmKd9I!azi zmM#_=8R01ww`KLEHwB|ce-@rVjuxhHW1ZH8G|+YNEiLXwxZh(s*YTBF zDpcOWuvnvQD=~Olom9NElog%yw|IPS18-X|$_fR5GIPk6TIyiAyVCnW{@AJ+{t-9` ze==OO8tUri?*eK5g868mc@8TL!FG#o^$F?iK+jf)_jm6&ocE>qLlI(>1D(0s`bet@n6{HNv|&{a343Ca(g2=_@ECu zNC{UN^6ay!k$HaUOs$#Nqlyf^fjDiYcbF7R)VDy|!_)9!sM!M8v%;6Be$&%fd8Wt^ zo70WjwpMLhnT{z8*Bv6`A;)#`;SV8RUhmd?_%l$CUI$T5@|%X#JFv`0v)ili&p-j4 zs`NQ9@T2RP9|8iT>zFGR%|7rtH0!bXbMQ${zdWJ=1D;X8#f2=+`Z}88jdJ2&~T<@d$PxptEqjTRN5u76tOWo$tlhpa=>3CJ!EbdeRtPuWVq8ssS%xG z_|nDs`|TWjvZN14x zd`p>2>H0@+C*Eo64Rmd4LfE!V>&!c)hs>z&&B=?smF7dmNJX#MqMf%j=V%Tw&EZH9 zeG=@w#P{vIJ^fE2LQSo%yg3;<@MCW_BOpLJ+QF%cLQc};&mkuUuUj;`-y0TJ{&o~qCbHiYif)<*x*SR zR$3yQgFa@_7oquNl=*XLzeAt5=ql(RELukw$p@wa@%gde0T#`EdZpCdJ~9vo!-Oyu zAG#s5FT6%KgKlrpcS7?yBlG8wZ$2KgXuj}h)qLUcge9D;n0=10~f$ONo< zF!Ur#I1{ky5eT2lnXvph*_K^W5NQ3!v$TuK&TJ(IZaMhv( z^mdMU^5>9V$1hs+287qD?id`}R%kwz6NtYDdSi58`^dmy7(TW{_!Rmdi)M*fwR~~W zQ~GjSjueZ;6l%LsCplg7-l8x9Iz!zp?1Yp=%uXn8)0zha$B38}!1^sI+5%>tNqjt>-d_S(FHu-GeWyS`9qe zhD-TOzy;Pd4Pw0Y^+Q^s^ZF8eO$_BD9J= z&|@s&k3f&J=%LX07R|@~Yn&N5w0vkj#S_@zH0b3P?Vk(7Ws8AtwI$W9Sz$GFJBxk` zI?JNBL-(}k{m>6tG^gz~&Wdmdq2H?s_se;>t6t3pFCs#UMOQ#Kv*^E|+gP*>L-Rux z9RZzZ(RHAgSu`K>UR|v*{^NOX?U!nULu&)g=Yz~2`gZ6V_el<|Cv*o(`2Em17CiuZ ztVQQSueIng(CY)5vqeb(<_@soI1o>cmPm8`6dWuCq1U`YN=!ePlpBDW6o6fPo37)1t$mGcCFnbO(#} zK{snqvwmafRu;_?wCYw&uR&n@$N-BF2K95u8F7D$?v51}Sad(=BNqJ_^a+a|4&6Vw zCcQl9`4&9^dSkNMf7XE+FzmEMm=FC}!qGaq=tj^FS#%5NM=bg-=s_0U)rsRj++ygB2qP`}Vd$|IJp_7!MLz>Q z#iCz;o@vojp^Gef4)lDBe%XoRzsO=(g$PS6dIR)wi{1vk(xUf4ueIoppx0S+DfC+w zeHMC?MgQoBVXMXPJM>PA{uBB=i>5=d{T3Y#eaNC~SD%*gbUhd^NCoN_87$8WFo3FG zu;x!jgbytVG=n~F(V5VfEIJ$dhDG;+uG=V(phLb<)6Sv?A^d)e9sxb5M&n}@Fifj4 zXj7mIExHhTvqdk0K4a0ZLjPdV>!5w9H5u9r{g_3+2R*!6`*Gp{!>DS5Lpu&V$)e9d zPqAp8`IcBTdp4`)D?xO1W&X^L&8qpTP^%^?nB%|f8UqGsUhdDdXxTGbvo1Wli`}=yZ$b4q5eTglEWb z+5ejvFbzz^p}mC&eeS49kO^4zc7)$=31^8|^?rnJwuEzit3HD8?F^UOS0x|~a+{bY zBSKQEnhbmcy}+WGpjBT)_!3JvGi23tyu7S+O?q6P+T1=e@E0PyYKg!EtlAceX4~$nvR_pSi+N_msoT<^s+XA?IQzxq3u;mge>UQ7Tpv2b&I|qI`E^rMh>?% zKc`%LP#Jg|hrfll>4Aam2O>OrTZC&K(+~*1X}?v|BOHH$@Q=c8)$geJL?HasZSha} zZ`;6y+ai2%TX^Mdx`{el4s0M%O}hiSxtb9L^j+%IE1>=3)wy55@bYcCt?$-7`dOWL z1mb^jTlmr2Hu&ysB`{re)oT5FwFhoBXb<0}pH*FHV1v_D9iSd&sRPl-=UDM{3ph)p zgR#Ib3Jdgb7Wh%`7Ox=M;4`u&CZ#ACOaFWjcD2*=*|1V7#S1%AwXD~o0(2j8aY{w?rh_{$c}_20B;hVQ#gpT1Q` zYroxU&~Av<8*K^xrV)Xyn1%D;ZJIAn27cVmoZIx;+w_jx^f$NZE4ON~@5A7z#KzTE zM9oa(+@^EIx_$8pV&DBuE#bYPSD}@Cqryi(KaLHs)8hsvK|cu{$iPd`rRY#*s_@OweSNs%B{k-5$6$CA zvr%^MOyE1{ztIH(QuBiG7U-TzCm?sTp|K4ao(cUu=3^t3eh~UWxdCIxaA;LVAI4FZ8?E-9Y-yp=TktKF%GOU{@I4gdq^&3Fzk7qd)=$ z&~p-S%}!-t74(-_PE~q0v>)LPrH?|tXwiHx^d`c1`G?!P0-c5ohjHwtK}T5~#Cdh# z7}tZYj|hPTQ>jth9QhbO8~Q@+o&P0f%=V zN+46|_R!C#p!@?XJO;xvNFZ>`$3cIEz#O&09Owkh&wNV10iB2ayN(7!{!fb<%x^&QB(&bQOoQQli|!9CEP5>THj7>c{gOrRgf6z|uc7x?^uN&e zArpYyp%@%qf25_IXTp#M9oXYXpc~;YP(m+Yna*i3OV3Y3Lrv z0Eb=HvCGgCEg1@p!|`v8*xglx1guQguK~?V=CR0eI~D!_^kl>jBsdN_96D8n^Uc}@ z2{n2RbO>5ih6>*Wy$AIGd5{_UDh|j0L39Q)m4TPUTO%~k%z{uF?_dMtRCq(^gV;cz zpXdtR02xM_GQnZc_do|SI1M@qe*ygpmP1hr*o=&S&<_KzskKsubI@-?XDR(B^knE} zN=G3x9iclYod&%PP3@%8ouJR*5TUD(8+Z!(VPpvZOFb3369ihO)P4a&R~*m*%CHBz z0ZJs0q3@vEA`=}{xD9*%0(77!YXrRq2?qLs_Rw>%4oY2aU;y+&48NI5kA}Vne=2>y z?5A6!JOVjdgTM!qYgYIO`lzoa{AXxBebx`nhL!3H^iP;n1dg#Cad$wsR2xi$j>2D{ z$XjE1Hcr7zjq$$|48e$vZOQ~6hHe4v!$!D)$jH^A_ZMd+`f1C_WQj>Sia?^NO0(22-EduVg~hhZ>Q0AvEourM1Mail&B zy~Uz`f&LMi32={NaC~3J9`f;M>L$?7;&?1mx+iof^iUOlH1vwr^7E4B_|M0Yzw+Uh zmWr?*dMfrJ&{rRW?ud<6sPNyQBQfRbqx4Pa=dpXsm9B+jSs!!6Y^7U6??ZePg3MrV z=wfI*MrayxVR#13C~ycSK+nN^AkeP)cJwxscN>+!ThJV010`@2dO9?s$PHYAUgM~# z#5bW=p@s*VaV*k)9=b8MFIQ*>!>2G{C#3ERU5e3dohrhS&;zkYSt@)s^vmv=L-r>0 zk61s@%szmA4SO?G#Xk=nj0_?lGX3k&Z+db3Cn-ZT%H}?79i=QI+yVV7da6Kzob9|} zuW1Fm#QqLC0W@_Pe>(Iz^czno&B?_l2uDMb;rpQN=$IBMeU6&tKSmj@!q67SF_2&a zD%g1BFi>Qzpr3-qPRj)Oet3Q8UP|+V@IV~Xhm?K+x*Lv1VEy^f&s+3H=+X61{;6t( z!!RVE1X?Lw3jJS{K;V#Ef*#zorV`zNo&|kf#jlNorebS>X24nfy&1*W6H=*A~jdZH;66kFf{T=jcIIe*b{2RKnuV(N` zOv6}%(KK*KGok(0kU*eP+y}#**yBJQ7zQnH%mO){0sS~O5Gc}Dq3^&ko)E|o^h-!A zkbzUse(b7Wg2Jc{}lKRZxSP=gHyr`%ZCjsJDTr(BnK}USgfe z^!@#v=(EA~aPg_(-e>Ga^3dW=BfW$4(4m9J4!%=^SMU~XiU(Z|ZfS_`CkMwB$LD!l zIu>`>(=2kx$YF!W3>-6TEc|#s_3S9o`^nH++eYqb6C-wi8Qr!xa;`T#$++>8Xtv4g zYe#>rRX#o4e!{??E!}zGH=j{<*{7BL;?txrS<|hq@3M`4`Lx8GE(K2b(sO4OkJ#k> zIoSL4qPRs{U5TczaOcVUoCPYpX){LgN0gl@o(OszfM*JE}a_(1D% zImowda@OU}ZhPmviAL&P@!1~l2aQUuWVO)JO0I7NQ=?#q7<8EgB6*{&!%|$nqv$vWqwB}VA{5A<}LE4&Xn@zJP(Pr14QVuDf z6ZWItmr>HiE01~y>-yJAKk;Vi>qVzeyy&oB{2L!IjP}6+Q(l%){`r`GD8}Abf1^L+ z1FoDc*9r!%FMi<@?_xtl9QStd!(UoTSWfMnO<8)eMgzz!m_&9 z3UUf&6~GtpR6P;ynkuGl)si|Ce|g+H%qZ?q>U9T&7wmXKZdG%XL>k3IPI@Qne!X&~ z@;TWlSFc=WF8k;-inS(V`+d1!R!Ct|A)e4KpB88 zg5zOy=s-25~op(UDrPA}ze z$lobb*ep}X9iJvs*crE3yz!;Cx4-x05U=gpL&M*x|NoMNHOWikH;lLH+zDwDtoqV~ z4Y%mriD?t7!y{0aE=}ApkvV3b{Aavx+(-XuyDOcMu1crt=GEUf?SoHs45)L?=F(YP z@2j)&SOwwXTpbTvA(nj3LQi2(`E*Z7c~(?Vd8Z&>m!NWd&b{1LPiy#!c=jvrF?gnI z|F!pSV8Ykli6(N32b@Jivl(eE&lRuz##^RG7){=}W}BRK{m6*jIaybV7o7J->o!|@ z<8O-BUGT=^TO?_X&lMl}*1H^QrFzd55C7iVUl$is5D zJ5p3kcZ7?ui4iW*^}Nd~I$rYH#pOwnuHyPXdixr7!)L(t@07LhQ`Pt$JD&ajPkgXw z`gLfu*!)FYh*cVdwE;1a%a-RyMj2;p1l zv=q9mLyiZlZ2ha zHSKLlB+!9`y(0;G7KyjCx{|Qxkg#_n@f36~688U)m?GXw;_a6ExP87&*q;XM$%7>3 zm=BRCfq^7e97MuCn8b>?Bv6ikGvbNd zKKH1A24r9=i3^+4NbC_>gtQluI1aN(?9qG@@n0fwTo#b64eezTCAy4+`<7S8frfma zfFHkILtV#^Z)a)G>)M;#zV-rqNs!3lJ0wbEGdWF{uVrd@)O{!Q3|-qzF2h&!$<_FZ zKKU9vsF29e2PB?sKSE+pKOx`J>6`&mH(mRTLTbOj<;{D#EL z>l``KphGdtUUj;Qkl`0eOn!eN5&jE_@Lx&TeS4h}7#iacj2~RnHk3k50gq+GAN@7p=kz<}Mg_D2cJCr0!z(b;Gcu5p}EQ$Da$vQYs zC9mr8+nYp1KLg!c@6FC0op zS1uShnM7a#xdOf>NW4xllSCz)O=5#ZWD?F>NgT=rB-UR{V*RBg*8eYw^|5KxeEXVEDbrb}`d(WK>`qshx|Z3}q-t%O8vFD7v|w~Is_*r)V< z67k+w`Y_)aWP3bHLnA!8PnMvWkl4@(G8HGnWCgxIM`Dk@B-8K+4>{N{y=lQ-MvbEV zmP9}M9XZI*ej?`?rZX*sms6wv{RQ<8XRL-+Nv7i?W+e9fe#-%jqpSVF=cOd{PdWe->O2=W<2zT?OEe(7$j8Cn_xh8w20ty#M1Z3}NOV&Ie| zfeI`$go-Xd^2K*cvyNDMv&l}l<3eKVFOhyUi$z>OWm`;k#seng2WTcF65{KU-0&(A39Tl( zpp}q^b!{DqcpFH>+ejkbJ0!;BO(fp+*+wGXP7?8oK|crUT{N^oGf@%tlNh`Ykl3Tc zBsTOBiG)5T5&sjiJKhl@QM*e?Bz%%wtef7sdSHO1Mx{He;z{pZI3yROo3EZ4JP{)T z%KJwWm5*<^XsCSUBueHt5-a>p-iww<;#=|8NbFG+i4Ffv&cyd^$=UEhNA|&A5dP+% zm5_+%Ap4?~1hM_2MntH9NEP5Fv4^#ly^gZSl1Rv>?1^MQbb4eX!}QLD4Wv?IdXq-B z#n?e&2bwE;28o*5+OGoIsDL|3)JW;B3oG2M>>WsyP*)Q69A)oDV#D_;dv9g$L*jL* z2b8_PvOh?UGUWH~nU0^Y-!P{GNHpdlBm#yi`!I3_1`lO_TG{#Gd{*(%%FYkyGo9zi zlV~N%K3>@;kP~shmA$~U`%U*<=p|;VfLUgM>AtJEVY=@^hUP2#OC)-ir7FHq_GKjc z_^E9n39oxtnir%I6;1cW<$b$TG_uOF|vH4?B|sIJoz$%eJxo4@9p^18RSF5-ao|2jeaqiGiUvi3EAehY37DB7y$o6Br1|Tr?|Xf1DhG zRz;$uhLAhZs+4^giTESr-ERauO~X*kq{+w8tjK%}KIAZzD*1>Z--P045+&>RSJNFD4+NPpQY5jxjj4enAcUX>t{&Xi}r;lU_{G z$PmN)K*AKX8tV0^r9W^1XNEtj2$xBmA(oSW!{I485!ac>gZQQ~ISGD$NlY03At&RL zB_uLv*g<3@h=iT5b}?Rvvb)GBIG-i`N6<`EK$JA#^o+!YYAbskWsfBhKVI1r$O29C zk-wppkUwDXA#tpmkT^7aHB6g|X(5T(NJ|nKyaV)W(=e-|A>Pp1s(^OnblmbIztH8o zV_cz=vS*Ws-;IR5yR!EnQ!yARdv9g$LndM{QuhAJ{vdsna31xT3V2)v@Z~ekK!+&% zP;v$u0-1(pqwG(UFQPt?31~Isc(fXFCRz=N4CRx^=y-A#jxOmz?YFc2BcOnWLX;BO z41*Dg+Rodwve}S0`JY2#Pxvw$*IP&yq1BLKa9B>hfb)NH4({HN7!6mFb5SozOaNae zafsgZa{&phC+DFBkss+A-+rTg3yIpim7I^OG9*fDmkQra;wr>@B!<@m_d#b`z(hUs(U61=!hR-qY@*uW3u z%V!j@2q<;+tA1;Jq@FB4W zJ;=2fe8_YRKFUrZ z(68;q;G+UYl5e6nCTkhm7!rH>yb2#DH4ZNsZD^B7tdB<+kYThUasyfsi4)41B-Wor zzJ&%xa!Nua zH(?)0%mp`+?;Q~JCtIz;@QhF$2s$ytW>Gr1ej z^OEo3%!mAsq5VOk(q1E1qt%ee(4XXcXfXQ2~za;O&nGlJ14M@aGCimm242jDie1npc%_igl z)MpY`J6f1_zt)lqB{BPA7J`MV&;>p^iw1f z97P_%oP-=>Xk*Fgy7mHz_4CP((ez1dcnXP(`pHi)Vv`w$_9E%W)vB3XIEKSSVuiU% z&m$3W5&0>4VG<`A%Sgm~g`AI8L1G8ikjTJV@;JH*@(x4#y<#|@>SFjt5*LEs0sTy1 zD-DRSjXZ&hO^z_MJtS7xtL*zo#6PU;A1M2Wp_c zjtlH~b5E{#o(4p?Kz@Of9r96J4HSNd!>fPf1x(TS<|G{x+nnGxn4^&w(Cw2r<%*QVrGN5kU5g>VMdwK36ssQj z9r`ZvIIbm=$Z!(*J+42IZbM5Yk>ND*2b^k<=W*h~Hz#>bJ%fB-*IJVoaqWTJgTaIR z3D=oO%`Ma)lBav`-@@G_V@`^5fmGOjy@1pYKL48PETzr7UDBGVb$MJuV z3sIPYk-y;FgT&RxCrCsbLjH<#6H+&{r^w$>J;;S|12(C!Qen%hP!U^D(V^e6RwJp*D&WGFX5^fc^yMPsTtZT z@_*2SYxE#V&Ucbu7Aea;l*XClUWC5JT>ad1QLg6GKoV|Ku$8W>EvW|$#%Gi z<>vxc{4a?;T2996+AAayUP~gu*T@81#Udvg+6GDVhDZSm5&+96`W&n~C9 z@Kl3HQFm)(l<5AaCsIr*w1tX2Hxt5b5$H}tr{C+;5hMO^dGtszJ31yM#3rA=&8Wt~KE)doCpN7Oaf;YzBT^je5fmv(;C#9|vvH!-85&kMJst%Y)MCS= zh;UI76BAk|u-i%U@d+F?^XCw2)`rB0?#|#yv2k2th;Y}63BlU)uZPysM+&_tqPE^p zl>FqxVg1!*IU;%^I=qfI_c2u*?4D51+t;HV{@^&aq#1$DrHK~Xb+34@X-tHf=ihOR zMSN{Y7KPqK97v0)Cwi^)q4ZY4ef-TCVNqhg7X^eO4);F%ey_;e?eW0JsxWG0h?+$14f z34{<7G29BsB`D$*5F;WWASxm{z@mbRf+D4?2OwUE2&@`(5rWsU=qj*^+y+!YKm=r2 zRD|DqRW*~E-tXuCpAX^nt9o^GbyaoUExH7Jg`)Ns+{kwqa+19rmcSmhNttzg645za=I@iY}-vdk?w05raeS`y01)} z_yIY+_v857{gr2$C#B*mkIwYzC9Kw1KGh{dr%!Zm=I6mL<4aHzGJFZ0L+RKDP2O-k zeCeX~t~ihQDocLQet$;jarG7MOkZiZBn&_*h{4e) z2?H{HiSjX7gT#O~zLN0$3>G_n%Tf!2>~+H1+@K>w_vStn z*n#di>w0l-`1%I1GJJirIAA&%DcW?&(fM|iI5j&l$GSy~$kx6H|M`Tb;)QIVFPuEL zhM&lb3kzdJ_G{iOqhjj!8ZvETJ$1)x-hw2QvGDI}ap1=$esO1xQP9VV89BaO@$qZk zPKMKj*G-@BHIM#`(%>F3HrLlhEMXNeRpj+bNed_5ee(XqyT4}z#Gtvz zi{Jc?S~=&%++=IIy7dRdz&u1n)*lZlqo8;;&(~S{7d?abKI!MUfQUaDmk>^pnOMUi zMjlJ|i_iDOdBVZXQXc$8EIpo{CUQ@B;;h+X&@1jVG4P4zanTRa)r4Iw{9;wUuhA90 zYmy&&hL4DDy;4%eJtfJ0YmUe(F!BsOne=K}ntU7JqeP9@kBNb&J#C{g)~lkFa>f7T z%6Vexr8#NhVu6vbo-n+4QdAV`IwBfFxrOSEXBGNV#Q>)20`XE|sP6vpJ0u2gOt9jIU3`u>EeLLog%8QjEWaC{_A$jlozj2 z(&+nNMfruC9P4?J{9S&O~W=!^BLO6>K;MqB}jX=39J=j>zpQ~_^5z1$%nX-hj8KYA>tm3U z=HqShzLCv8P|^6im|W`X5Ds9ySaLQ?6)yWjmzeQOYQSg>Z4gVlr?JH0<#~0%B)<(nWUq+|7J8BUj$!^=52i~!uRrx%HDfaYVK38U%_`q5;Yjt2O5*hIw%?* zjw!UhSKj=f;78^Dkb=Vsjx@RwYucd%p>-2y9TnY{dUM1n8nD@E9ajeBWiVg`YMoF9 zlR^e!LHKG-_-b4D>QwkDxmdYr`yI zU#5Z`XNhi5ctUN7cn9|wK3tcemqY79(goNj<-ytZL)O)-Cn72vjBo^u!u0>CO%h`( z&|YEQx0;9r;p?ViU4^fCIBs6V?PpK6l`QsG=xW4^af}=zmMnD1NE*m55))=EtEKo!iM*5iS8O#f_bO?ZUKF zJY(9n65Bf&!L=3_I{7+;)1sXv>VIgGE3U6XW0FnJXmpZu#CKog!9G^yOIDR^C-F*E zDDci=N0qNgR%hayD%@F0XXH{@yH$&d&NywK-q_voz=viPiId->OVRK<-WMA?``khF z583UjtduLYUA0$X01DiL=^H*;5A3@GYX_hUt~r{TQr{EE1Iw==4#c<-ARAr#SwIi^ zrE`dIKN{$Qd%TsUJIo47-K)SL9n@*|YLE{vR&PfN;G-94Y@`V}~Yh0r7RgEh( zuGP3s;|7hNXxyT4t41zrIfnxtR5sH&&<|*4iN)Yj}tM& z_7oBBcpx@)Tro#nMMP%if;MulTk~)wEf=hLZpPRjaT4|n5b>b7j?D9>B|BC`RuRNz z8VfbH*T`jBwC_tqKs+v*0gcjF3#{ylu`tcK$f+_|jahse+>K(WEx7iF4jVKcBErKn znm2QUqnKt9@5R_4ah6&^Q`rwQyX0`s1uw+D8hKbUd5uP{M+ws7DcaycB1*%f#EwWx zZN7+zfvY9J?7?bT20i*x+wZ11I9F5fMowy!>qUm3ti`|{=A}TUPP`8^tEYkYzT-Se6+*Z6@(&OOqebBJ`$sY2or zPOsLYKIGgV4Y=cpLN5_Kps`RRr{EaDDk5}UHSeqKM`%6)m^}=og&Zk5UnA$2JQ#20 zv=PmNTX0c%BPLL301x+Ti$lccvD{Mg^BUtYpiPIVL{zPuUGcnt@n<4akocmUC2@IB zpAR5MfHwg7C`XgS-BjWW7)j@31RZkHfesfD;gE9(bodUC4mk%u+W?yTmuW#T^chDSn zCcnNh9GQmp?;_LC{1Lp>hf5Fn7ROKw{8JY~6}ft3?6T|k_SwgvGn6kp;L%(@cq#+Y{!^iNu@ zLBIsKA5D%tHc{i8B$j^|ETaJ;vRdPMjq{LV2k(fV^{`jsQDMN^Ga3`rKzckt z<8+$CpNBQhC*nqyYrc|*O#K1zJfYHV$&=e+Sl%K=A|G6H#@i0B53o0AxfuBmp8_&vc)lGy{79qxq6$)i=iJf$kT#beQbEMd(i{=xK1D_-0L)&FM??xoGo53^sTcqlH971Se~J zP~$9M_Km1mfR#J32A1XwkmiW^>%iKZka>wnv2_|Z04sOn`ESJq9qgyY&3MZJG4SEK zK=YSS-qY0`8q|KMn z{2t`uRq_Hc)3})eB-NMXNRb`HA5h+j@W_*)FdN7KN;Q{XZo!>)(dNB14kg})X1CT& z1TsYylLz6!tJ;F+(9y%qrE`Xq-rM@L4>^jut$Bj`*UsSWbk)6&hCqYe%8x15)>e#vK~v7h7O|9Go6! zGzTJ2$S0{A$Mzw*%}uDnd@KFxRU1JA8Ec_ z<3WvQwS8Q+(xn3FK3iiM%@MJ&Hci1i|yf!s{~H830Q57PWGbmQ}Y2*;x_mB{{og*ND_agfGY zL^ym@^R-00MmKBRsqu)$^FXF#bUqLP1%T|F=4vd_Sf;T8m>s+t#f2Ae*qauM@O}pJ znT;ZcN7Kk#povDl0NXH#SkShbcn310HvdeUZ`bBWiEwWh0FiP{H2R4!F9gc>e^&^( zAD`cdu_vPfq2MoAo=JqmA;4_#8RWR5CxEr1QKyrm$1@+uef#^#F@klRh=`s9R^}ov z6e`|~h=8++@V9Lt%Rhvb+TsdrF$BmIxk;N(*5=bSe^~QHn#*s?3`64;oVk93w%@Gn zcWAy>^COy{C=99?{jLpMEfh~A!lP!IXKP-ld70*wns?Xy3eAUVK1TC7z}j1pmw-%> z7lDlE>p?A8uMKu+!3ml}@Vmz7B9$VEKsGY@Z5lRI0@^%VW1+?}ja@YMB*MS`Kt6&o zob*4Cmz(&l!t(!~)wB7(r$+fXHw z!@q28U#RTy^<@gipcH69S1stN1k#+}a<9?$qqY4QZBKI-A}~kWKd$ZPYkPjbgaN;! z&DUx3ozfiT{|7BNqAiXSFTrpd5qF$hqC6-h;*Ls)urDLRel)Q5b~N9CF5o>tj)=^l zeOHtYa)AZ#L?rnVA}Xp6fZ0L31UBP>9)CfEhg*q=@z+EI6xR~i0}Trxi(h|@H)woN z;}aTR)cBFc?HUhi^pq-pGJrvPSgH*!(b!kx2#sSkPSg0J##I_OX#7&+evKzIUeMU2 zl?u3;h?MBv3gw@7*cS#&fk8y1z&*rXXqr)o3TA`GFEyUj$g?MC@6}iaOhEDK3Z(nK zG=C7yd0_TZw1Bkzbedyn->lXw{|_MZ&;To4pC@9a>ndPnZ&WDcaQGfMJlqeYM@N7R z=p5~_YVraR{zSI{!k+*U{*(ggPg`<4>h|RDX9O@Cye3EkJnJz;2xrj(0X#~M6j`F} zmuveiKnApxh$K8ng#NhZXEdJI7-*|>t%=a}*Em6Akl&hNMKX&9NRmf^wOH-A5Lnp< zuUnd9dSfLK0j|@yod^$i60vIXkmhGJ#DM$VZ(`#3RlpcEtO?k{5hd zK+g>10pfG0`-uo(oW_O3$1&DRT!3ad5pTc!L`3Wa5d#+`WxyocRR*lQ0xvOg=!Ru8DVE7J zM?{yCBiFA4)?%&jY9Pmu*3%w&W()0+XO0lz{|O@U$a&2@70NuT0_C4~Ttow`6)puP zAd|EwBA^OlUsM!8S!{sJBQ-?ikqJb&pRSQ#{iL@^KM^8$BPN`wPBuM50_91i;vai=3RAEWUejnjx& z75yM_CTdUw$TOSffM+A3{4Np8Kfg!BOwI2QF|XnKL%hLU`Q0J*_m|LMJnoc;%oGiO z>^m*7E!}P|W~{*aH|siIj@WS46DwZ2DJ4O4xXxECHlFpwkb1<2XR(|NS23b#i$u5h zt@vntVo)Ldv^Z?M5c0kl2`BcGUSP^z zdV#DzK>C6G0MZY6whR1_N3*~Wc`yn5kf&h44;*eK{g8)T^e4Yo`XvvsfLHR6ih;xt z(o1>v#9;Cpq?c&oOE2Zo5kpb*&$aD=qGlVPFS@JpKX4 zcgQfXA4`UTC1WxS>`s(n$fdjE=BVamPbj}o7gVah$^ z2vhDEpGSONZnT$Mz@H?4QHCkEdLvA1G?QUsUxEx08zPYY3u*DP3{!5!MwoKzHNwQk z1sSH?S&cBUBU*-uy(2PAxicDJVvnc{Q*L-hm~w;jOT<+&Ou3O6Vag56%ZO`akl4wF zbXrb>cVw7y12V#t8;)Niu9IQP{lo}U?h{@?{JRWOZu?zH{-F$0Zr??ia=Y%^#CjQ~ z+?9(k-*$i$T-MNt%!r%th%1~ zm5hVjgSvryn~a0pD_T$fZy5)<74#$WZ)6;h{yXKCUu@Boaljr>83(!7^B)xMmvNC> zJO4@EAmb#ra(+&JP{v7a+58vz4>C@2XC~q#cVuoQ9+q*EJ21DC|0Lst^gk*iCAU-} zQZDYK+(GQWF8Hu>c9g%y9zv>eg&&W8-jgQ~a{H%<#+~|0K z{G3`-#Ep&L%kuxbjI`Xy_#*}9Wu$RoG179w;t`^4G178_BH}DJCLSZY(efq6=p!6s z(byo5!!BE5JSMJ)9*es<@rpz%h?r=(e#QOE{eg(I+!y#CVpB|;5WN<6XUgq;h_u|+ zhe%_N2d`A3565;9F=mK3%k6r95;M^gCT3yl7qPh|S4(kel!Z%fhQqzMc#dN*iWm8K z(-8|T-VAo2V=|Ihj01{@Ez$oYmSUSPu@y$Jh^;N&3{F(gXG*riW_WV66Ppk_U>h(I z%{bhP+`^Si?2JJT;w9E_b?9Ulv~X#FRtjzkuP!teh}|vT99~)I!xMX9H$Aa8`tn4y z^Ki3x+hHn>h;}1y*45V%Imxk?iD$2hDv8f+sZKGwLnOC~&x|Q4#SNBq6+Nulf?n6Sy9aJyHMmSh4olWh9?SM$=?bw>4MuYnoP93cH9cFiKG(5owx!; zQ;d8I%f62fi1OOsz9VMZF@8l(yd#!AV*3}R#72wifl-Ne-*?5xi*ULFPGd%(yqDyO zX#=D3?O8jdvqt4}J4E?h+b%c-x5K{`o5HqZAdT>OD&&uae4gX9efC>1GHm<0 zGu(~eiZx-|uf7!vtQaHQ6W@wcnMgO88W)_l&3B4!S=!cWBW@n!OKVKXt9Ob8Axry~ zogx|O-)K91r#KL{eSGJl+kJ-R2RlW1^H8W;b~^5M_f9c0YLSQ#GPT=mz{1u*d;cGZMVR!dACX5 zqyF?FKil}L6f*}#W!k^)64tcr#+y!x!+Rj4sZyH2Zm}uKcpOO_7Y=DIQJUVnMP7ua z#?W+8nu)t3(;?{*L(^4h#O}!ZO=wkD=+VG{<&FW}zex-W8!Z_f(pU zJq}H0L(^MnuH55DpPLNL6-qNL>AW~kDP*z0%}cN>~(l;)wmj`Uec z&L@^cefdxn+(Z4%9{z_IUdA3Lo-!rUii+DI_nJ0G^N?> z^yjdlnXWYd{qC9iB%_u~YiNw|gGy4|Aj;s zdBKp(R+6_G9Cx+Z&^)X(I~(xK&4=}yp_!vJ@z^mF5#`(ijkkrJb*$ja4miTzj-G{`{Xg?o$>kA z(Ck;5s3VT@UV<@;(7ofe#d1+~#PKe;+R&i>qUM$(j(ZOpnje(r$s>+?f634sQku7& znvI4Aab;Lv9dSI16Ncuf(p+%HCj(6whfHRvVL+zxwj!Xp}e`~Cr6ZP4b4fV zx#y?IH}`Xf2bqmJnKF`^W@t8+?Im$0LidZ;qjrLv)SWXPw$QLo0{x z8nyp$#^GB-i*Zc((+}eC@yPP;i^9-xC>=1yX=+n`j%-%@Dhw@#K}~JXpB?Ei)X-w6 z)YOjtIil|HJz_|UBBkQz$XeL9*3gzjYCrnfaclbxEkc|3 zwZ0RMTWeux+eT_TI<>tFZCRvt*a=5=m||$#M`~v~wJ#gmib(C>PDHj4d|w#a%1G_r z6Or|=@06jfiqu-aL=H{(d>FA0r5V-$m}%DH7e|_PG_)ANHnqKeaiqg&LyJLfQ#-}! z?`%VhfpAm1(5YQ+XfarBYTx-Kvb*nVFtj}*wI_dZq;LGm#&p17yXkK_UYBOC(^qC_ zF%WNRt4})oz0T0~jnv+L(viOR8QT7l+PO~cbB1<6r1lMGeCrMEph)djr@sw`c1Wc5 z#Z@n6-tMiNNtzXj{Gpp(2k1K-U_Wb`{0{lXh%nC z=bv^|>uU^cZKQS++Hw*3cc-Bp6RADoj6)P=8AJCrHd34Nt0Vsw7}{}>+77=up7B6K zJ0Vhg^RJP^@4g2N?Zim!JZBtUFtn2+wQo7K9~#;zk=lPbwfhY1J(1d?Jo!Wzj_TfnFX{Xl4jBzNz=0s|n{l}5G`G)qc4}uC+WC>%r<~elhW4pQ?OLbyBSX6|QoG%$J!ohbMQTqwwKitrL+Sf$ zq_){vXZjl2#gW?fPHlHX`+TH!h*LYt(7qU{o$S=kGPFw~wNE*<%M9(ZNbOpu_9H{P zJW{*esXb_DUyanBc4}>`a0sRE>yg@K|8=IXp!!k*E+Qy8QM=GwcDNAgNF9A zNbPB-*2apQQ2K6;)HeIgnZAa0OQg2_Z;l4R07Lslr1mDKcABC6GE)2KZ;r;!QbW5n zQoF{f-E3&LM{0Ne7CBe#J7H+Qj?`XorbCn88`Eq@q&EBa$bNJ;L%K6kI@lqdVn}yK zN@ruZ%$yAIy}BDHJ(jC^e07}DP(r9b}ZNZyzWjkk6_QtQ9q=!!rQeu@W z0$neTz11W~Jo&ePS8QGppC~3?S`ckziTJZoIV1apZ&QhHa`0&mEM`!eRfZ zgMTM7+aU0DXQRB`T10Dy07k4Q_&!8-gyb=<8^M=?chP)2cq?2_gjqA>s|Um#@B3QC zwQqM%dD{+c%fzX=z@>GE-}l{LfZM-ipRd>&ARgQ2>(nmJmB01kz^dLC|9j!0Rg$`G zXx_=SyskSp$7}W268jo3`s;ybFGi(T<68W(&zEK`7P0$%1?j`S$;y@P=HGnu(TP`l zV?EdJsMYGqm>%>xU);LimmG&iN^zVkZL65R-&caqguSxg*CNJx&XqrRt=PKX_qMgW zZpL@MnkZ{x-GPHXd|hG*?joUyS|0ByQ_I*r*>XX-%hN(GyLNdBAj0$aRLRxNE>9=9 zCRk#7nzxrrb)~L9ctTU`1EF~dwpI}HzAcueKT)@Aei>+%0#MT-;W{W8S zO)a)W67U?^9Pnhx57N6l%~Aaz$r%xOjAD`eD4NRyl*cFn%V-b8PAZAj#Ljr6zyv&7 zdFo*GAL6 z9kE^<`OMP>%e;xmB=YpawpevdUWy0;xigW~gk9lR^#KoQVLf1HsPb>8W3@ARrYi4t zK$UZDc^+CihyXzs#Z*H{+WHd1-+(QN2FV>*m(r;bPMM_yX%ov7oML zv3olrg9FCzuu{b8zgu3bAL`|%Y4TbOx~6Hgc=-`KbeAHL$URI9WA~s#)PDyW9(Y}+c_4R*_ z%D;VOWk*%{w`?uC-k<%4sBK!1D@K$hCE|IiS{pf5{-Rv5{K8-O7v)NDy%T1$?~{71x6d&c*H~F908E*tf>@aLE%HWGq+WqXdfJ1KAnYU&Z1FvU9{8sriX+ z){FOw2lCuG;?Rf~ulVhOY_Ii&XxFAij;z3gIP^xo8c@HXVvBX~_Gy{33h@qnva=salEu z#Rj+6zKNesi79fgMFr#%r+Of6Yg>t$qiC}YdI0yaN%YO~w~AFwtTHiwlI3?-b?RK6 zE6W+?&&q#@e@1MXY~_kUGw`BboaW7KO#GSgo#B*ZF$`-{q8{ayTmn!zIY>{HWkgM8}QJ4EuW6btm`>M(c zabQJui5Pjg|6<?@^*eQuIf93<<^s{+bUpOU((Fue-KD9i!6%eP{~ycmmWF>( zkS-51HVG5eeyy-soNUom8=Nh=DF*)x*Y6noOI*(g#|@v)+W~`6N0qJT{op(rSN-DT z=A#P+KM4!IBSQA*al1wsoR!CPgYyPWF1PAv*HNxuyxKCO4fqK(me0_SJy;072Y=@^e-YQ+a9yGKTi_SrUwh3rfX~F=2=VsBETc{s z+|Di+4W-#hb>1HSpK@b9JTk>~ajCd?i@!_f=-#eeSBq>km5O?In%eA~_4#c*t9r(q zvl7N=~bRdGpHVac!R5Q}zn_HA%!Gq)c#TIr${E?C=8ob^_ ztCRSOM%NP3M8jvvaUwUhd7S%RG-^rv*dJE66NDGW`@N`@nofY{sI{&}4M}VJR7*A&ifpS?Rd3Qwfp{A_ zyF;lcyBj{zOuUilPZXXz{aN<7QaSahyq_xu-U;b*rLz00%+`sQV8)yL2q8-!cZy#q zJ7UUW#pM%Wmexvk-j(ih@g&Twfg{790#TI}Wx~5Wy2So_l_<-I>M6=@@wmlhll`BmYO{W1VWRl8 zurSqHC8igq<%ma$3ccdZ!Zfe7Ost0iU@suJ49~Rjm%#6ohJUP}BJC69>o+8bawW+w zV=QkS2J%B7?THwOIM0v`2h-ZPHG3>Fe zke{Uu>)YbG8pT!plK6!;egiGctHB3_c`%9F`&==|-s+d+8UoIvw?ljtE=+zs?0F=2 z$bK~Ve1l`BziXkvS^qq1@E|zf9`aX+B$@+*B_RWFoV*eKMY)=|mWk1K``cMBi=%8= zU3e2Y_Vd(yulRal2D-nm=O>D))h+OmsEz0sKl&EFIW}C}^RYW8nT?y!k2UWr;+I4I z%pzWX?XWuG;8v7)tR^E{{Nc;@1~~%2DDg2iL;U!9K#zkPJS86kJ`mU4wSB0o%$hnG zZvZA%f7pdub+3W5<;Kwq`nM507JoA|--T=bSb-R_;_5yNV@0w=H1}A zhxS1TZic}hu3JwXo=?sc@#2pW;%Dn058KDd&(Y5@IKMK_yAQcP z0?r>J)G`_Ih(=nD(+2b~8+<5u$U!;yATg*Ut+=tBh8JSLx{3GsCs^XLVvMtlznI>n z?$>GlURGVd>HZswFkrCyg*czcncl=B_Lt-&iux-9h2rRyfh6&-T?vWe?X6i!BKu|k zC-F$A6olrwL>znBUrbs++F4{S_vct`#ia_aU+#a2ma@gvMMS;gznpX)we3W|SNu7o zi%Bo7yXzIa8-g9wJ=mA2p+;gNtcgrKVk!|`bY?djV+L8;JXd3(M&?)QnG=Z24Ma91 zh*cW9Xsia7(xN8~pyCs>(WmcEME`UU5zUUF#46GKb$_4h@WSqmr{ckVu#c9&cQZKx zts!qA&nS^&5Yx2oQD8O->|)wOzl7${zYeTL2VpgNTXFDpyo%Zi&l^Z3M6oUNUt7`s z4S&021jZV|gK>m&%6Re{{^I0IRXZV}2uDhwNJ6~=##UL~_BZ@jTUIaeR&s2CU7Mtu z49JJ_jYS>;0b&#Y<_)=*By(fE)>=(cY(YdiqA?#r8HW_ zh>^?DQuuIBp4X0TBPOlJ=HL+NHZ;xe>k2P%N3!(Oclx(nH81|mzzE@+;?#46X`)4D zq1XL3p3z^$r1JPQ5qu^Zd#TICQg^cqMQ#DXPHXY`Gtpjaqc}ATgB_p3Rnk{@Hk%Oy zqu*3`7e!~4plm;aOUoG%Q>l)n;eumls1Jp{Us{JF1P&(x$U%GX%Xt?qk06 zWrTvy=)H(g{*zybr0FQCgXsO>yURw$q~9S5#E0{^9<*fouKI){xtf{(REv_rK%s4~MKI#<(6cI7ez07@Xr63tb{% zeR_7XtRS>q6kcFU#T8LW&C$2{8w^_`r>kE)5A1MV!75Px;&}i^1pg;^f5Uzo_#lJt z0v~GdgW$srehmDE5Dy|IXJAkhG64S*e6+!1kQ`$S&asSf1`mKwG$INlJidTG1E&!m zChSFr_oACeytvB6l5sJfxNC&$F|#^g?)QIIgy+i-8m zwR`G|=9CQEBVPU1-?#k>=b|P?i-AX<2)uC4o){(Er*dOnIA=|?g*VszQrzX1D4u@v z?{j_|*sEgC`=_Ft7VZ}LJN*OO?!Ilzz@D$2ijM#K@N4pFPW)Ggt(OM&dVQm-IDWVN z(!O(vtNR?ai~AjoZ51tE+UakPzSZ`f{$Z_l#~+Q2-_WD?(fF7XBR@SCSd!VW?o>%r z_wKnzV`CqzJ~8smkRtYURtt0$Q#(bsxw!V5Ju#=Uta<0W z6Hz3JV@~DTuDrO`)>HO^*84=^9{*)%XEX-y*tv7hMDsum0t;_ldbCI#lAR^$ z(V?>+FBBUy3em6nEIC@-)ZkBar{axtgE-~I_j<|g)E466y}AEeO;fj7oVpr^Ua*?B z_qJ3gVz8dJ8(Ok*)AjPXmaI_~!PjT4_cK)$X3Z4WAMh6^EkMs+zB=)M6IAtlpj0la zRW)5~D|OI?thUfa3s-1j=k*zhV$WREwX))>R{b(oT<(P!&R!>yhhZx5F;r@H|JGv7 zA)in5EGSHN--K7%3}N++O%b~f`cvF;EJ=7XW7DH6JCt`)wbn4v>3jcw#gdVQJ<;ny z+~hCDwI0Z~iTcI3KEcISgMR@&oUa=Bi;-i&p#~`5a(iLEC0u4>cvg<92_BI8#mFAn z!v_Bkhcr(c1{a`Qg7#a;K`a6{IZt0%ZrJ<5UpF{Mcvc#`1bnr@ad3<49fMzjvk_hE z3HsA2491in*1i%PmgW9f!n}m8GIsm=*N10rWl{+ZYnPP=r6+; zNUyKM;cIQK%FDIB6En9JX8PDclJ9oyCK;G2MjmLI>EmVh@UviDg0suSG5C=DxM55m zR*HEWGnI?~>1~PizWhw_^@?~ezDzgi(t?y=F)E_Z@eq5$C8zkR!JFb4P1T$uWRHN4 z)0{(a7H(^^=Il^z17`(C_aB0PiX>a7IX?mQ7bFQXs5g z(St7H;$gor$H>OKSTZF#R$L#G6kqq(BmS`!){SaTXjnWBT9V`3R(0c?P|Wis@IRJ^ z-sD?-+2|^E4?ufsapR{^{}vJiL%&c7=MC8 znms-<;Klb)(UvN9|A}70d@*>qyTG1TrP_V<8!!#`3i=qU#isAkKt7P4*4TiW@s2ML zRZ-bl)kHsw%L~%ZixtyybDyctPQ4L%K>k=ZUI-D1v2qPU$cO{jk@j(}l_5(Y+e(r4 z@vgPctjTVUF7*2mx&+sz2;S7S)!?YMd9;|TFl?5<6U1B%2LB${PlU^Lf~@7(kx{<{ z7iu}z4WS|#gomu5F;T`=;kVi%Fqju_-Ajh#yUI;zsmqPY!z^59# z5`2c{EqF(l!yxqI$XaAdCAtR7rjYpQ-zi>EwyiK%bUoz9Xy?&1Z}Kj~DXW|#BIot| zoFLxQ;UB9U99$ayk@KxVm-+Z>h8Xbn5Ea)4nlt*S7o>)*qIuwJ;9!Nee*ql-!uIcz z;D>U}R#(vVISe>PL34U=02grv|4lof8AlOP7#evcww?zsp9l~S1B0-g$v zx=Gqk0Y89iRci$kT=QVyH3Tn%=Yp#MVqEWnvt1bSfJ06Eg#z58xzfkEPJk!EKBTvB zL2XE%4$c>g%fsy8=X;1!b z>#jn(?)%nhN%?N1CuXuXE@+-1nhs1`npdbtKk)1@fsfTSIF*f9qHfMriXF>oIq@(? zZysX`;x|&b!k`7rMBbpZc2;5C;6Z7(TIKL$1WXg)(^w!^O-v`pk^nw;51efw!nd8o zQgL`Nd@IF(6YkSfESe5UD~?A%Y-48^ipz(j^+|`Lp?KEW1*(kMT~yh!i|Sq)k``@Q z56BmV{Xx9Ab9qV;CgJ4D0XZM~8zwD>rWM%+F3>!LI3`WnAAmU;d01Y6&xdn9^dV6; zEUno7LblqqYB_E`E!_j3X?(N)JY5z1%qj+M)O-d(mbz~RW9}g z@xEi4qvff7O!K)RA~8mekcN!-E_^yffLzJ3%;2mCUIAx=O8u}}02e0bZ~+=T`WMUL zf}k7?R3@=FD^ ziP8?p#3NqG^;*M3aBgN!^7Q|Cu1_qC$r=19j2FQFZ2WOK#E;+);F@(Zxs5V^H?CQI zlD7o!jB6Bs$+-%OKBMxGe31BHmYH3;)p@Ffw@G?JUDv;)UD*QVNUob0hj)O^F2y2w z2omPh2n!Q;OBl--U!CjAh}2(Od>`FY3~XT$WmZ6-pCkV{z0em{f~XT&S9`GMrDm%27tu%XGnb@+?{YUU-Bwpj=IdzcE*#|CGv{tTQCT>WBW8+VAqxMJaZhIqo&nBAn)=1MunZ~4(?!DuT!+L3f$FE0A$2u4uWvAT zA6z$f1!Lv-xyd<>KE=@AjO(ce|Conhn+9WG`Me>RgzF^+=Ky@@$Ktp`)V`f|x%HSx zs7%ikyXR)6io=+e#XR4^~KyWvBmbM=a&NUh#J!c9yikRqFQnlvYw9aD5nzUcV`Y)4PiLbgA zG!gsPru|3kxxxG3)A#Lrye{G0v`ccu$Zyi#5T6|hBrp0jFHyAJk=9n+z9X$Zh>Dig z5EsfO5aU%#j`c0yZ)~SB3Y>F8Q%8ydMA$bcqBzN1568TH>R=@QLq#F=Ma1@MEiNr( zT@O845XhQfu#*lt5Mcqor7a&A9b7_8M0aWyeXEjMw&5g!sJe0knF)~Kk7AQzUm zUPTW3Aw+OKK-v!{;z?e|@F}>71_)HrTqGI@$V zN*r&ZspN2X9}!t@8WF8ZgeJ{r5Pet=BTaC757Ph+9wDNMIfsZjvw1|M-;+e-fTxJ4 z1fM42c`PI%nVuuUd@(UoAIJ^;5_06xr9?chWkgIzy+*|Ic^#3E5AY3QN7Y4em5Bb^ z;-*B45<6NXdZUrL7~nXY*+Z0FZI{@q zqr`ZtS-$%%craHS=p9?&u0%n5Nj2xN-o_s&Mhgpz7t_?5#&X02XUcI+<2PK%Q|#VV z!r@}M6j;8Q=jio@a!un3vGlWK-Dr=&B0{WbjPWCqxi$6(j0t=5NCl zmPI(^*ZUagWtt8ZHKe24s8{}yzvLu~J!M%5;_sY`n}1DHuRT}W$>zX|ZPdhC^$i(b zEV|jYPA}9H4IgACihfz{MA0-V#*5|AVJmxo8#T3dGc8US78ly6nYFiJVK-?jBWSm1 zt0vVh(y(J&qbbrC3Qo5TjE2pKwni`K?zTKKxX6B}t=u-KS~$;OSv3t`F%92st4;{M z+>N+=8t&V;(^1MAWaGvDtsNtx)^L`2QQ^LhoNMDx)^kAQ3)hs%BPZN7@y^LpZoaFQ z+i60psnu|JhYlT8^Tv8s{QGd)`QSu2K{nLCQx|0g0)|==<}q@e25LkZ4EeL#j=_?@ z1VjxOZvDs#0bKneTSIL9tO;2G(fSFx>J0-ne?A81eW+io>vLR$?vM8W2Cr6@_+Pcb zdm8+ETwh`EW4In-@LzE~G|cgp^z$IsgbiZl%ad&%^^28DyIImhoM)G_xIUxh^#=w|Faj0WOuw`~uO00`ZpF+Q8xVT+p%u35_ zfftI)*)yDHNNN9q*nBG{`o4nkm7sVV%hm&X6sWD`<7R6DpEr_C8&o!O#HTfQCN#)w zQr`z0Rk3{B95EUTel<8i+RwnnFoSbD)wSTCDElFSw~uzh;3l@k`h%;W!1Qv!z9I4B0ABi^0LGvFuMZlt~r}8tFVD$6U}Ze zRaMwMA~^sD56czW)*>;I>{Z3y6KlvmQ*4K@(!mZ%W}nqdyJN&QtmU@+Vks=`qE>R7 zq6%q;|q379YCFIM(-E-^R@_7cg(cbnXvV4S;AdnxQp&N7{7 z*#B>t4!I?&`fh=aJ3E#934=RJKAIMyzGZfjIDA#67hA>-G&Ic-?xLpHig#6>7c*(o zi_&tE)5594!h}L3Uc4$VCpf||X5DbR!6^$3t20_G0wt~hh8#_ z&|q-xO z>zfzIXdEhTA~sex$rWEN%u5n`r{_)(sRaRl-DL%Vhw^&F^iFi8ZbZv5cg$8URB-pc z`CPQCeCq0Rt{L5W#vjE_q6ETkkqDpTco3?Z@Qh1s{ZiE$(g3(CHKvrl-Ij#>K|k3kJU%V7$H;#$>By)tm4m7Jpo#B=q4c#$~NH&7f8V^pu`KL~%nKyf-Kx+-#P9z6@WWUvdd zg}A0)AcvmtP2|ee{j5Uqur|Jq#(5Y#Ahs0m!I*yEPMRVdK)`PYb5)zb0~`Y_TlrIf z*$8MluoB&!*)&JCf1HRm_d+7{tkC> zQO}8VPCE>sc^--{5$+e_<83ZaOH85D0QdCWyGNsf%Hc{F(BTI}IIO1t4mSho@F+PP zo+iTK?=(k%iP1{m3`l(jkotUb=vxz^ub?^feSr*TI1%C86r=zSYbk)kN6F#vDIy#$ zra2t02GZdMA{=sE2;F@_d$>DE4tJ;oq&pX033SI-g^f-YUlDc*^Mc;hp`q@*A%P~A zbw)O0>;-Y+yFa}};*t+DveZy4zbu=onlV3!kwft^Khs){z`FU}&|g(w@8po|Wb~@A zyr#&C7S=GRYTC*U9=dOXNvq1$+DO@!xm7Hs+1=%wd_ngB>n)4z*P+0cHtQdv+cluy zmdobHNwI*;)!t~JUzbgGtFj+ku-a%gB%HtIn)7r0kBDJNN&FUAbPf3 zK_r_$^My4cke=4DJlFVzx=x+M$WcWZc9m`oZ5Ll9r2jW>wkpE-pTAQV7pn{TKW8_V ziX(PXb1~4S=YaQvc^3Y-;-pH9zad~um6orKzgpzJf^}p!+!TnbOS&=ew|uL= zno#0I@K35?eWRLCdLOxbiZP*tsXR_7l^2Mb8$CYp_TQ~!yK8~k-6QuSU*9;fR3|n; z>;6Xprc}k?SFnc}Ct|*ru4bJsiU-@L7h6r$RMRbm=>3Uquf`YHFBgg#pGNt_#tn(d z?iDaE5!;4g^;+v$ft1i*9odd8FV|1b?p`8R?(qI0zB-bYnzV#zfS;#fF~OE_{6BRD{%}X%XLb* z6Vl_vB@YMwr8XWkc_i?B-G`3^a`UWAvHx|v`~AA%fU1(cNmsgP@qLaK zl9(aJt_bY3MyScI*H8uHb1nE<7}lbNC%f#1Lh;oey-nC^5Z}FtT4bS`?<~?2`)Jl)ul+)vi-$Z)V+g=Dx5DaR*#l5S#omgxSrhNPU7=LYCYti7rkCP zQO#N5A#Z#OJ+^alzRI#i(^ZYVvyl(yq`BL7sOqR!HVzhlSrs_{|9c$DUvTq{zZf-E ztPR+KlVikTo?v8D8pg_@9;B)M#mceYwjs*pC~t!_)^uv8{g_69+-cufv#Fi-Qw{sC zaJ}5%J8^B6jsxHw;OqgeFnD|L@aEkhl8D{FumL!`f!xv=@{rv?ZtV>5tHI4KEAy?%Ieo^?Pe^|& zcz1(y+^M(bXfwsS?uEf*LofsUOM}k^zhLmEz`0#36u@7>Z!-9D@FxuZ7WF7GA^m&c zQx!+}h`>e|d}IhVgP%3{Ht<4LI`S7Q_ezg8`1i2?(%^hNI}H9G@cjnA0G=!R%M2e8 zh{f~CR~=}{z2IF8o(|sC;A|E5Hh3%WD-2!%euKd;1Ftc7Z}3s%DyPS~@Ez>%kHdF= z2{T^ANp`vRAk@{r(!mQ1USs$td*@>O=gB!@)$92jC;o#+>U2HqPn64MJB1&uY7^Wf z{@j?EllNDLG279hAHDohOc;i@O{SRpW_*sgs>batza#w6l~0d5_;LrY6RT?6YVGbH z4y&f(!05spjIhl)ceB9z;2|*W89@P_ zXYjYcFGqm9RoZ_H-oxO#!Eb>+WPcL;#xO@!6$^5i;b8_jJO~BY7JQ^(-yPS@VTn$K z3~(6uo8YrGp9ualA|Fbj`@uWGeu}nV1il8>tiZ9QG1j#b2CsndrOrE84}LqYLowa~ z&LO$(+Wr_gE9j8@d2-wpGc?^N;Nn|@XMp<K2o!Af^-g#{wqbnSvDoNuRv){yskJ+? z&3|{-{rmesiG|_l^FIXISigzV9|M`e|@(buAkUP`&6yH8hS4Jj$Zit zKfD^VBji=hXXm2pE1O4nB~JesIEEvC_8$sdmYUcw!_~UXo1f57kHsdLWzGI@c}1JU z7+YH>t~eYhv|M#}91dJz#bQMUK5FZ&``}2RrDX-h4?hKpJ3pYuoG>_)iU-0;0W<(z zt{JLKaLyhLML8EQ8z~;Wj$o$fc{EUb9m+vDt&zLh6Q|2*aXHFUMV_RVb+A#?m3)By z7JHsK9tZ}fsR?mb-E8f+?nMF-QS{i_;gSW;kFz4`L&SY?KM7O+Dq^h~*y2-Q z>xZ!!PDHX@M}+wZt-D#9*J$&Rz#uD-T5WL~u><@d-ht|aSfQumkPLTeom^D}^SiZ9 zwh0j+s{`t%6H)if)cRS(j(8lzTlMT*B|1!80>$)vf)+?8j%qXJY({ag^J(qiS#8he z6zw_VPkXKuVlBH&+rOgiUnO?Jatb1Da3!${pC2b8Vrz+=@p*BMa%0->r9xk!Sao$q zQ}JMYY!mU}t7&oK=2U-EapOgA6P6xKxOI%`;CpN`@kKHe28UwOXJ)_oi*~O?vvGOl2MOeo? zDPnrhytwF+|23;y_iG@{vbxu8JrlS-${Hds=#1NexqTttz8MavvnD-<(_W2vm{_|3Rft)G~GDelTG*H751tBr*MpH|DYjrKR% zaQhUU(o_FY`R!8^fW_UQfn_441 z#x#7On>;DXo@W{^>!!|&S}WFUqL*A&*^T>`i|{Gq#!!ChrgkpN1s1<)4;pGA?%ue* z!p`n4Pr9-%1@cqNTv=iF>n_I%?Xf@_a#e*rt-Ct>WyuuW>H8n!PLFXZ1{YR{hL15W zx$t8vRZP6PDFcvumgVw_Z?!Xd=f8C~mRH30kSC|AG%4+&mRDTTL#`OVv4>h%F}{bf z+Twv8Tv)+X;gdeajSmV0lC2*6-g1%kj>w~t4CG%u)K`|jcpC?3?dxHr@#!Ao{BP++ z=!AFk#ilLdLX=0NIJVW3N6r>mSBc%EH)?vHD2)c4tLZCZ8tJ>5ZWCKb5A;+UBA1Ls z%JveO?(`x%tykkQU{+@_)(zd2rr90h1Df66ONA?hCk7*9uVG#~R^5d4l^6jd`#Zyx zZS@v!#vuC1n1BxHI*8w?>(RS0o$#^QzOgX7MVmDQai5E6@|Tbb;}_y6O8i9VYjY;V}te)G9u`NId^HcZGN;K0Qku=hZj3 zvZwcvqs-5U3=e#IMLCjB$$D3erP-%_byj+=eY}r6ON`qAV!B>|cZwe6 zUDQ`BJ%{OfdG6Ui#fXITRuO}PW#wh+bU|!v;IM8lylY*oZPoA8#o3`tAcu7yi{Ku$ zQZ8&3BexZms*M0I3{FnOTO>AO^A)Nbd3ILF3Hjj=0g^Wpug*qSY2||Sxa3l47USZ} zuNAJ##DQ~B#<5pi!(E3p-0$aG_sGFndqR|`cYBH~9DanQ{?;R+YdMnaKt6H}w$S~U zuNDz;5Y|4QuQGrfk;OWP&{BV#%!m|2@}5FIrHP}Wnxf=^mMyYAKY70E^7WrKO00dE+ToK2LFHLy?1m} zRUb8c@6F6)5&}#}AZ;d@B#=T)=wKlU5K(DCR7BJuiWJ3wiUE-c2pW(Q1UZ1HfT(~C z5Dh30u%e?bEUS)!i_Y$vkO;D!r z1Cz0py}Bi|Yp)NMQ=XW=Ty%Frrf_vlmq*82qS`nHfpK#?nMJV2FLyNPigsf4bkve> ziW#I$+e?1l7*5i;nQqj2&@R#w+<)^T}2EXGKPII@yY2H%dG|y5v%{jQn1OKf6pzmlsrU&SK z1UMbY^HVDT{S;2~{tBlDLlsW*VG4gO@cSMX4RiiAAOn9pNMP=iicEtdr#x2X=d5K8 z`3aD`HiSosXBJ1L$a5-U^u+{MG^-#!3>CFLOc8gC|6kdyS>?s?3598Tg;^h6XA`~L z=w@Ik(XWfnn4d1S5Qy3s=#e`sjxIos>MNqZz=4mHg$XYGT5;@DYOHAYadZrR-yS5TvWTw!!;)x z@Grr)D*QX}YK0#IKd5jv74-pbtxwntNabU$PpIn+nD&sGt^MXrz`0w)&$&L)PvKth zVuf>kf;%$(_PIVW)6f0u6Z8B6q(C27SgUZ3&^IcaM{-oo^@uHsIoBh$DxB*P+ZE2` zh+P&(t%-$J1kEoXFN1}>$_red@IU`+@_dD2&IU8Mnj`02w4EX5p9i`4C^oIR{)hPJ z4X9&$CL_)z-0w%ZM1N?q_uUZ)f?39=gm9`4XJf(w&go&MNvy)D;gyYx-<&&R*tqz4 zS{RCn!ux^K%rf_BJZa6x|H5=|9tWqRoGe`dz728la~`Z74^B^L{tb98cu$LSvfQq` z&mAz=Dx5oC4#7UB%9?TMY!C$4(Gl=~I{L;dybK)nc{)aVSONYb%p)zn4xDQ{eqIIs z1b9cwd_Oq5FMjjW;3NH1<9X+-z!XlXmXuY)&T}E^kGBa?qY+Z5dxE{{0*6=<}+qQe6KJWFL1ncPS-d z&^X2#zdqK@+%tpmYqU81PeN-;DO(RwvM4G(tUJQMi&3z5;f{a*zimqLRUk8)kGUzS zg5_I2=BA{j3jYl9?-c%32tNRRSTR2aepKP7!2J*VuK!@8OTxtjPxM8<6v)Q9nP`*S zI7RO+I*d<95f^TWi;_xz*iQH#T3aTr%z#pb17adhZuUGMV%iAhT0m9+o9vI}fYSr%qXOnsU;V0uvK+oLj}ZU_5AGI21uCIgz; z%ZEVkas@755F3Xi+eFJu=xE28D4i|2L#IW+0ydS-{Xey8>f$`#D4bF*u7N(v9s@8q zx_AS6E^Ore57R$%%Rf&{+zPqB52o-fL{gfZUIwY=2ZSF0( z=5oK1Yv7LcM8cCwqbRYZ-WKaJXv*brR}Rt`5(bvXT^ke8=*wXR)@N{+%A=T!d95_b z=}WQ}9KB}PsSy|dCSrkXz@m!Xx`2R}!<4 zZp22`iey`44e}H-@qG+rUkcF7Uq?iWUQa}z`x7xaA?FiP%_CS`&l^TLB7;>ExgvKv zG0|F^guT1SVef7tdP_17ca&>uvIBfCbU|zDjfv6Xn~Tvmi=&NQHeV!ClOG|{YbJIwQj0kt8L7jp z%e#S)0CN9(4zZ<-pT_sPlY3DZiFhxMh)=;p;KuwBM7VP&5ub*U;O|bi9W=8xM>`>atpD6l+#T)Gy3h z$MB$e0w&`tX?o+}_HUcbCZ^w%I7sZ8gC&ytZ)}BG)f?jP5$%0RPI1p%hui+BjXQRz zsRIM`)i)<{E)Lo?I0;Y(X77YJ_A?Ivlei$h;hzLo^P8Zj?vOg zBt@yb$OPxac=w1NDNncIo}pvA;W}pY;?W!HWwN2>;kLU>HpM*LHpe{Nw%k12w%)v% zPaxaI#}&?OI!EE`%mh19X4}Z>F!+SasmCt@f^d1ttt{Xn z+D2xmU~em29vzWO!1ASV?LFX@;0tmlPvzAx->R5@2fkh543Nr?fu9SQr<*$|A(Ib> z-3?<5jqhT28Fbo7y)`QrVK(SS5si))E`g$+ng;sOSZX!l%tTXF`e&HAEiH67y+(9- zIx$7O3+?tgZbg`kIc4|WXjk;;Ff$1JpH1N-qRD&d*pPN(bOfi=*gSj%E9}~}fHB)E z9{KnK9K};|7YfG?a8{`_=Pt1sihU{w1C{$oY0kUdz69qdAfGM9jZ9Rg&^a|%d1hqd zN9j<)`sVD!UmUmyK;Fc)5$(cT=EmW>MKsP};98xg^Aj^2yHVO=t?}B|Qj2Pa{Q&Bl zdxIs==xd!Km3xPaO&zLo+_2p|f^Xl;ip(sHSeM~p_KjSzwNBx86Z%a!l6s9ig^wFO zB)i8vfB&$_o{;D74bj#d#O=AMDKuDf5VzBm7+<#)(Klmy|0n3dfl8bnsKuSK6k%D| zSApW+U%XtQbSvd}qf58$=6GYcNLrM*{{Qwl`8CKj#rQMV1du&n#?QN?fd83`0y#9X$SiaDDh^D*C_<)@bW>=a5}I~;WU3$;WXc( zaGGybIL&wA&-C94;RlL^*8;!)|5>%DRor7;(}<-Rbwd7&-h}8uCXo^vjuSeo zU{~xJTiHoS)is#df#ZI|0BHaCO zdyl*-i%OjB-(+G^lp6Ts#Pl7BQT8=xnR86VThQz5GWJ=jnYmJ8e3Q*;1$t6Hh6xBX zUYRou_SUFEazxS4u$aUSoqP09)=L6PA-eUTZuj`GPMvd2rC0a064i|o&WoI~h(4)k zKdr|h7n9U{#X56|sLE-4g}5{>!F4USdio!xOmOJMdezz!W?5j>J{b1-3jN@ad?E;H zAlwPqaCzHY!lc5+4Qs;gNr&n}snL$}pSq~I1Dlatyxs6^b77=eI;RGLYV9_dr;uJx z53YG*{c&QKbWFnq*GRBtiNzD6u%+nG5xW!?U@2q_?j|bR5f!bs6h6rG56t67@#xfd zm&cE=mO7HU?{0(yXXknF=rMbeU*l^J|D9@Gx_iy~@(c4$wX2sl>mQtMSj}tfa_-Q> zE7QZ1>|W8dvRM`vR&f}`809s$pagGFD>ZLWo2J~LHqE+0&6brEV|H?|?p`6UbL-y8 zf1O*LSkx~1Y0=PYq-#EAvm8;CFJ>q8Z{W2)N*wL(%G9e&|K1P!hxMo0SJ5H;;<_Zi zlI@a@qZ4ok-Nrp(t@X{K&Gkta#78G0aG(}5H>eXF<_1N4SU&75vBK~_oJiQ@ClXEd zXzbCO5B4SFN7q2+GROHJD10x>9foBc?(fG>ugO^_ndAIDiiH!9{;Ke^;Aa$m9=x?x zj`{v&aQ_(#awj|=rkHbBzeM4Q;O3DFStm-xY3BGD4$%P?4W3LjA5(8ymcpqw?P`Tz z1AdpnS#(r>6S)6j=WUsvpo4JE6P;1nYm|Ex54RPI%Ar58dpo%@VDE>TcB6S`Wj&P};c%Ml ze0n;V+Y{SiRXNNOit!5^QF42taeD{O_ls#aVgnzv^t+8GIt1tV4S|=auJz>(<~G2O zU`YOrYU$?=a%-Zv_aZFmKVe`y6Fk;@KRLyV%x3?nKK~ zbUo!N>m)`#)us@Ddjn)m14B5r;FleCWp(ulPP zls<^0t+=*e9#)V?9uG15L*cAcoJbFbir;}<9cnk}fj_ov;<$6)nD4m=q}*-RR8~6}H%{%BJ&@+O^dmlzmI==^nW?DO3ETw`wc4 zY)xuu9B6Is?)sji%}n7PiaVg+yo__ganFWNn>{2%eyHXve{+pTc|`@^)wHrSS7Vn1SC@1Q%d(M&aDEQKDo>?%7Z|GxURs zIWu&r!kM9`DV!O)OyS*mTgNO#kPi#x3g?;9;ORVvJXKMln2&(@5`}Zm#xjL-&&EoH zKMcM~;bmS3)+&OAdo-{&L43Y5DFr?Afdj)+ut_vyHukP|!B|SPe-(En4#W+KXxWav zY>UxHh)Yw`lf$bPr)z3 zoM{a60_{f#2Ec;ZD{*LH4)a#sEbE0V@Jz*gF!=l67(+@ACX4TP|5qhMMf#%2CrQrA zY40V8&iX?0#<`cF;*%Tx7H~g9ru|pU&#q&SC0$1cg_5N?IGSYkRb=Hec4&0fwzZK*u+go*SVc=dtj2TO+CouF`VsB`30z4JJCf3cx6GkC)J3^=q@T$72M&(zqFg&N*|NB>OYqte{drO0fQx&(C^wEAwk-as z-Z*0KD%W+5jIQQwBX9f*Rb5?$*V!!7F&Fcb-NQs(1@2~fPq;25W!k?-w|b9QJq#ns zK^OcZNet)YTB_#{0}!ezUe0t9ddUlJhdK&wiCaK z{S-OqBmCw9hxwRVr`^bHe*O)9+@ z2bqsUiwNOO!P#{B&AFNqrSMc%j4nmc8Wv&|-U&Qj;a7sQ?e#m@7u-KO;7D~KcuU3n zX7DV97lXG|_*f3af~Wl*8r!MPiUl4o3)WYTpw>r(fPIyxVIF+KF>~R+3&}0}B1gox z7ZXyVgZ(qJib)bFbFG_=xO(e{^M6eg;kHv(WsUB(x6?11Q*4z^@y5g0 zulkb6uf#03f%@)BUPhU&U(JgwGL3>Z<|Xv3h>Rs|v=7!n#*TKXDal z&K`|!n(h@}Ca1c@b8#+ra0ENDtNWJ9`@6V1d7)5Ksu!6t3rG}iZgHg;_(Ris#gd!dL;BtgIkS!V)LniAKc2-On=dG@le11S zurSWzp8)+2m-yIC)I^6zyh&pHv}Dd)g=@$B7J!^rIoW_m$qFqfa&k|T^v{$zuk~gSb1bcqK^Az($aGq!N zyO$0g)IQ?W+Ja9G_xq0kbb;WK@&dPmyPQD>t^rR|_+aqc6@CjiS1SD;GNY^fPMB{| z%-KqBaa!@`C*UUF?TUp5!QWFjN5*><{y4ZZ!txLAF9fep_%iTs6uuh#oWiMJrxX{K zS&vgr0Pa=zc38Ne@DITUHwxPS0{kY0e+#};;YYzYDEt)o+X_Di?)yd&{0qSk3TLO~ zq{176uj3S^e4JVf@cjx;0l%Pd_9^-|4%+AV{~d+*48!+d(j;hs-%RCHG_p)F=lFG{ z!ubtVek06(Rm^V(zZ1KA%m?$s;CCs!MCxBu1XEyPjKXJvKd0~~!Otmt33v`CdF6vk z>%a#pd@J~1h3^KBWpBf>|EUjxI~BoK;FA@87`#;BKY>qG_;29T6#f_ZOA6=g^Dc!) zfIHcNvI5{^r4kzx6eNK^uJD%N^Az5W_G5$gyMntF&Kc}9h4%yRsBmse=ojQZZ8!vz zf&y(6_)>-63%*_9lfj!{LzekCsKPlTFhb$af!`kBKBu-0f=K~^Q`-!_ zO5xkV&08PnrBnL|{H7L`|KQc&B?>e+zU?isOIC;T7wrWyfgS*gNGnzR0OYO^3%tGuuPe51mbfmbVh4fr<-e-->! zg})8H78~Zw2dyReI)!u6V5{V^{&#BoA=s~2_yPO}g`WifRpIBr*KmeGK2Gfd_y&bL z(2^cjI8#XFE|?#sx!L}h?Y$IO4kp6Fz1TTtK4ucDyd}&_6!Z4r4=S8VuJZ0M_dmQn z^ID6G_IJA5>OYEG?{ug5vaMpqek7k7D@px)ht>M|d2|SWD}+B`)f;~M?}wNlu~O7B zAEK=f@o-y13)2Gy-}pc$$#io@2!A1jzaPTC4dHbm+z9lMO!uQ3 z@{XFfp+M^u!fy@X6U6L(u9WE4L&SSU#*XBa)PF<7%>q3r)BE<~P^Ts-zFR}YkA(0A zA^e39z9WQx62gy$@cM?lqm~fpshQzw9m4ZM_$^}4$KffyWg+5CA^f8d{&NVA3iQuR zZ##tWfg$|9hJ2hhzo9^T-r{3WNpQ2)+YPuw`viOws#>qCL@@RP{|WV8vc;RAYWoAF z_;HK(1b-McQMveXth-I~u}HVBmeFn)eUDmqxM(`geZ6lax*4r4qxGo$yD5ARILE-O zjH6K#9|8Xiy^ML5eI1o~1bi*GID3_^ps=yLG=u$a;7`K6Qj3oOpMpX^)Z$OXqBX@R zH4uP}uy6_v?6NF;1AY&F`@>!jehs3PW0}XI)Au~$=6A3?cyk1Dl4X89_!J}+MoBV2 zCE#uF+yDN8=4j0yRxE6Ug$N{26hg%qdtW}0iw^?74cs39_A;A-cel)!`XHEyKXfRi1KaWYR{ZuS;W6-Uks_@086Z27b3S6| zPx5r|N0bQk1?LtMf0Ew?9u3F+0eAwOXI+ae_k61%NQdiJT7q}L?*JcS@vp$Y#W!Xi zU;t{tA4Tf;^Gp-uhhs3DYnitPe+bZ$>28PvHAg!0$i`;7gMGw6zdi3+8ul zFSr2DuwJMKe;2jkL5nxR=NN@=?)M-I{8?0211|cU8)LlBYry%GB3;ra13!IB`7c2+90nb;=|D^+{7g#Iu z{aCpC2U75Ai+2alg`wBt*MWbG-~BB<2K=H~5BQ`5(;?tlO8+-p4qgNYKCoWc1RjQb zfJjUG`@q{F75w}U@EsujOxp|@@ByS~d&_=D@KJEzZ+{^8qu{OCn`aEhL-4s$3TA>Y zLar~g99Rzi3Owm(@k;O;;er1X9R~Nnb^kY~g7246N+w(OTY#@enQm+G*5F@*XK^&a z09*~hMF<94{6_Fcl{_#Gd^Wh>10VReN(!t1zXIRXpMqP#*W)w!KhZbftCax%3*H<7 zM*cSgkeUJykpa3|yc;<8x4};tz@gyWdX{DJ2fzoQSWd9`v*0fyNf9P#zY;tSpKOc8 z4}$N8c|VK)11=hA;MazlqBr$fPyS4qHlDkGexLD7LX>>=)$Vnsb zyZgbrCp{oK_HI!w%I=Q6Mg0Cnbkj=rp7fjar6)sNbqNH<6QRsapM3F?fr6KvY3$!o-_f>V+dFI?}|;TinwTsEoJVJK~dS zR+VbC7qwL-OX{bis4VCUppDkL;j;t9YlPYJMwhT$FYpJ_uA8+mGKZcC8rM0(j17(JB6U;ytgWsfeCyOL^?7Aim)o-JHG}?>Ju*+e zTUJ;<)s|(e*;d}YoMCYk9$mPjO?{-RyddhU9rc)$>g%joy>LgpLz__$28qqJpg^zI zy;&uu0$cIGR(I!^{f6n0`M;iJtNTs7v(??sb4Js%?A6}F9VffzHBW;NRe7oYFzpw% zZSGd0%{F}A{bJxYcQ4=8swA&*=t3L)(7)d5vPM&qjIUo+B=cT$_hWvUAmWsRo7Y{nj#(S^mT3#m^Qm@ZVz z;79KMR-?k^wp6Wdzi_?d9^_-dwdza1xOQ}Z%T{QsJ7GVzuyy&Wg^LPoRpZN-6-3k^ zIlZrxuP898w$vARPvcicb#~d9GA85dIeOXgg#~4+7w#@Y;_I|Kv#e2h*o?VTZLJ+O zGs`#snSK9u#3y^yV`ZOAwPibM^f{aSvO5jm3_4?`l;%A-DR+kp!T5i7I$Q=zb^KH5 zVMMv&_>3JVU3vT#@mnhD`{z~E|LKkGt)-{-?jPQ-%9iff|7p0m%JK` z8dSgQz619g;5#hO^qoniK)wVYARkrL#)uO)9uBYntqd)g; zTD`N*)-=9qJN|doyj7pKYdd21QdMQWc629x>3Gwqx}lVBjOuHzjxHHgt2_UmT2!KY z$4-sJrtqzs^xD7lv6C2SN6Gp*`DO1+H75R@J~e;hJBX95DlAo>_&1UcztRdO(wbR; zY?~^=ceuTJoygjOvQ{UC0-8=JvDNht&v7`amel|0!fyW^?l}EVv2KSu8+F#c9qwnK zXlBArcXs1iBiGW}j5oyEo$mWm%slXieasYFmcz=6i!WN+XQyvW=yB@9eUiDHEsU{fgXE zeriT}fvtMv)cjhnK628Svbrf7rOEno%I}<7Q0q1BoV2cN;?$g}r_1@ysq*zRmhl~* z_0q|*ljT~)E9K+Lv&+X!V?ed6t7}e{k1a3LD*mmj>z9lVrI&4@{<-6~@QOVm1m()+w99c$n)2#4n*ACNPwkywRWa7vN z?%RFN)Yvgm#adm7edw6}#bI?3w(5Fkv|g8GM3<(P6qSxF39D;l$>NRZF{#BxV@ASW zj4d0#{6tmch-GfMY_535Q{ZS*x=cWrWIxvHa&Y8j?0CELPN z!>r88)}$maS{6P%1)B5>x%6N1v%rUmqwT5mll=S>l#_Icqlg= z6J4A?rU({e5Zn?OT>t0lzAbs1!}^$J5|+rym%(a+##4=!IPj6Xy^pm+<3iMi6^Mwd zymYt2_O)dTO>4H54RUvw4SM`GZMkWRN?k_6Ow#EZ>lR0ryE;58zRH=^tlD!lymfq4 zVs=Cz-&?L~uIh-R$=UH$S7h6()9u;32vGPwcDuXmpR0LaC`hYXJU43o3kBg{Eq-zy zP_NqeYp45YP>Js@gR$*kWy&Y+dwCoL9o;8Cb(dC# zf94*eH|PsZ-RpiPsefK%sR4EQ*OeO8HsIXSgw%u*y%0^7$obrzQrIJq$n9#zl>HVPCH+wblKt_bVAwnjc{0CAAB7{gJ2DZ!#0oj!z@R=k6;jYd&`$ z)5Eh2jsL`q=bSN>d%tw=(M7kD@$pN;?ajo_8h3JI>=m$6&pox>M~Gv~o!H?fE>^qa z#cefir%2l8o`oE~YM;9;j(Kq4DDFEQ8z)}>B_UkY?sKP$%AaGSMah?LM`h+$?zV<_ z?{JHFA2x+>{G#o~Bnz?LJm15~4h+zx(sqtlc%}+d9CFOa;RkO;#~2&hBXl{upcV-X zZJ=U8M_$Bp1v-tyCg#x^zMn~6WzH(lAI|#ts5YW44KQ}iC1RUPXCiiebs@rcj(@mY z?h4`$=9pGHg7Ggo?DrwI(6wubak{DA!mXR?Eik@8t0;&1MZ`Upnv1`snhT#i5jva( zaOgH7lC_waplhRu*k?1En54^jFN~zLG33}DQ$n1fOARSJ==C5ulIbB!K9z`wJxXk; zYh}cRy7m|m+T|aYD_0Ndriy_5<}9A}E$q+&CcG+$v6l9s>ve58`8eI&2UMbK&y#)qqm9pu$9F5x;$J!1syxc zuhr$gdFGK1$?@%wit^ikLd1~rQzA~HeM!W(NA{5N8e%V9YSW<{ag!P6J0jfm;WNs6 z296SuqmB`8(#_pd2dpavApezecu+@#{2USTKZx+)A0p)c5;5StKx~Ebq63jLd60yk zAe@L<10KuMT4PTrGB7e5GAc0}xtxfRcr5XLo!J0K)MPe*;uIa5$-vVwkwRRc(+@fA zlR+%k<*q9xZF_Qj!Vbh%nBOFhL8d0+6Lcr;NBSdG$mGV>pDdjg*{GUnAr-ltI3Ky32#;40TVv9Mh*Izp5%$&-@qsrGQLDT{ z9II;^iSYPMB2x5iB2tpuz*y;QmG?8;t4j?KJWjlm1`~AcePVm~NxV~+`@)#>J|*vf z33p;Qd4L=77gLc$e6kbVldK)Z=b->0JxRob z)+x)vZ$y-#IwF$%oMrw8aiDIh3x)Z=miYx@Cv%G}@6j;O5HRQ2iTEVkZ^j}JLF|mG z-p3yUbgd~77Ml^%bgelN4#yLZq685UK)GMAn>k-i4_Z==Ptl49c?J>gwX@{yi9L{L z#PO)wiO8AUr$)I?-j_BEb-QJ7C9x-T84>Y<+_H?A_qF7OM0mi1qD&FqMoasHh;Zj7 zOMWx)3W$ivskafY#HJM@B07qA74qL*{DIl?u|$+tsSx#Q_)U%^E+HaC9v~jYQZ}&{ zs&7j^mAK2CsM9{zv@&v(h8e^>OQC8fU3KQRk+KM~)E+o)Mxy+=e+zfbIoQbAmdQb8<4sUYT}?k8S@t^pD6e@(>uRLRAw zWeyRMhYl0_A+A6lcby)m05AMVycRnsiG6kL6cHZ(YROL%VZYXr*AcHnsUX6mzlccc ze~3uYi^TWwhw7I4+ro(WG~AKL&Vijf=U8n;Qh*n@HIFqIcdfJ6(3JR?ZXOeWd2{js zXef!ZbS;Spc`^~zS}O5JWEbK$I!D&`ZB)P0CZv1^E4^mvGHkVkf?fm-gmMa6RiIU;luQP<_cW7Y#B z$RkiHxN}as0mXud;xmc}4@MK=Fb@^+wBb17jVKkwTTv>Ai1`CV#B4GVG2_-hb_S*q z5g_S4zB#u5GD43LZ$jb`Z$|w)NB*$(1>b_kfqWSDfD%WbZ6Mx)wt<+TYw~V7RHZA) zhhtTU*j+bOY22!5FOZk$+Bza)x}G=!Js{#lUE54VPl*Qya09(h+rl3Y>Do3TiqUrB z33OB?NA4%$(|kxor(h4UxvqUiM2z+l@4!+85nZ``#7W5gM6{lALo+_{A#%8Lm{^S5 zPn?Rj^EiKuM7|+ji8g?EC)xmFPhI2YL~WF&{Z2$DfUCb;?EI7X2y#1dJ3ceVR50A+$dt$-B0!yp=pb^lBfIfEfIjBVD=D~)T9w#B*Yb#C zQ9BY**B27Yk=reKKO#IBV95s($DyDQ(Onv9$!{hig}6DA{fFC#s85QC@OPw*<$pX< zn}R3NzbD>{ND#}=6C&P+E&*`?ayt><@Ig!d5OJEWO||5YSaNwl6YkBh~A`tV@Ga@3-{7c-2!4PpjDnUE&Eb=?? zFMR)S{(uL(W1Y8;MG%LeR1kkh8$g_fej~9D+5qBj$fv|dQA&vDLc596(K8~V3!Fy8 z=S?R*u4`GuG7K>+b9sa_3Q3S_8FaKP_8=k;^d!zeCx(bld>#>9t=>d9SV;T;4JHva z-F3v7XxNCi>)K!o5Zj^+AU=-lLhOh(fcONy9&xfR51~^2D0w*&hqwrB0C5hS2KqQYnnS@{{3Bu* zw2+AI^;1N=@H7$jxPg_8(lf-*u&11e3TibGt=?MVcjyTb@kuujkut9l9q0)W=i@*c z@nK!tV&?}!2;ZV$A#y#j7jiuj0oX}I0Cp1*fDecWz{f*)di7W`A4tS|HxQSj5+u$?&xeRoHQbWR9jh}j{wlT% zMp_1U5+6fbV9Cc=^07pCJi(IRZ^=uD2*5*@e6l5fn1~v3nk9eKl20e10((r#QT}IH z2D6DMHglx`hRv3I9uc{9ktKi1k}oFWTQ0NY%Psi|B2wUaOTLP@0;PmF3ZrHs^2~ao z51H&${y+@gAfm^znTT)w77^ciD-p%%T_TFpcH%RzN<`jykBB6G-;#eogh!uP@=u8? zQDTYH(H0Q#DZT>Uz$vW#6d>0hAR=UkiC>sIcBpaTI5~PU++D|joFraAdqUJuN{DMw zN{B_eNR5e4fi}{sqo7)Q+FY9}DiS#zMn+@I)QGxM&UkUhukP3gzqpB*_NzNRK${Bh zEF&pyfj%lm`{2WmzOeCCzg?F&_$&5$M+&_WRK0xJFQu_)ecIh9;6*dcP>8xU;W1fZ zvyBD%EisSg$4tFO`F~Ih6|x2$j1iMhO9zjQOK%}AoN_i6_kQ1^vEEz^N^R~9xZ46P zjmZBFS1Nwj$rcp|Yn;eB<4z6Oibwk++MIDGhzV!hQ3&O+=j<(-_k@29{7hsz6y?Xn zig(Vq<6$lJc{@`q_gSRa7df^F{4V0}g}r0=dm?{V)x}2yJW8eFgNfy~77o*4G4-sw zHEh0k*4;kdpH{8p+#@_UpG%_n`xXhp_M1BuHjkZ+Y#~y_~OYcKzXWzKcW1!4Ex*fnOsI8JukBKkeNZc3D4S<%5sCK9N>kCO z&Ycwq1N71A-sAwiTJ-wL>Fwf=VlO!<8VJ%*{K}7+J_{M;9^|!#IW13kW8!1Q7j^PO z9)c$b$!f!Erdr@j^yZhqw+wuVW3#6U>1a4=0FcQk%O)*B5z&`$v4TIvhBMzUN@$+Av{5QOo&Kl0eS+U`gth2k zCFlnlGC-3S0jF*kRev{XiI?Lj)MPJy1n9di;R z0yZbG>Pv_j@?W{{ezCpY-63GFMEGVm@xqC#|8}gAIfBP{ZV&EWSZL47~gB(nXQp04tTR22yDm5-n~hdb`IM#j-N5?eqWElN ztY~xI9Ti9ebgvV{?paOT;>g$*_JC8UjZ~-Rg*r7y?75(n%eg_91JRf-@-DhN2k1ia z=tU(LR*2UxD#@`(eEwZpYQXYS|HHk-qG&MI?IXpdBhHYI^0avP5;A(E*mVit>-9_S z=s^6?C5#oTYw?YG{o=F-JXj`bFS*%5eW^#a5E+-1#(Rb6ec2rh$}>WLOONd|eU^Sx zX!4^Aa)pxKbMZSrX4)*ij=Ws2G#QGkyAb5hvmwL*x>V+G zV32}JQ!_BtS4_MW!#pB-UwjPAKgkGT-bqGitQ8@Q%w>cy0G1KLfH$6lC*vL~M)z7V z>Sx91Ix9vP!pj(8E=UL>%d;}ZgZz_WMk9A$dBdJu@>1?ms^x0t2rHriS{dWPQGc$ z>*REU#`iI9(UPk$%L44$1;a#Oqz981@6n){F13S4Vn*vQ4UVA0N(4VcY=J2|BJ5ot z#vzH3+T=}u$(T87NuH!*Jrel0Tx{1O_sF567MXxW4ayUBj_S3@Mwp!?HpAcrsi{TA z>l|lj$?N4rh}IS9w1V;(m=&emsY`9|k>8?MPdR+sPke|AP{0QfKq4lv4Fed3Z%)KK zVk~jLxvUe3Sa3Nf@)9OofsNW@@WSPoNQ@x{6H5?6;-8rE0d^gNBm^dZglPiGKQI?7 z=`;K9N82L z*hGA@$n5D}ww zmicxfM&dj?JNk9xA#wziL;XmMzHAueFomNWD1UUQD+MsulLHUOm`VqfDF(U3ok`w>Ia)E_5)Hrk}ig?u0WAO$u zA$bkl0`gO502#sd+$cYKBa)XEa!{^`NQr^OaFk=9ObHw7CVTeg{c(jCw_f`_& z;TmEZ){%+ukjFYlZ#ETR7&{SQa%A?MG#`%gFBM(D!X5}1GFt=?neI~{GudGx96nBj z!@mJXBSvZH0`L>?^k(EPd@ADSm}a!(dw|K1*Au@-1RKFTQrE5~qTVPZMx*>o#TM%^ zw+8_$qG>ch$Yv4|pbBCagqVmJe`N75h*+LENQ8ZBy&Y^eYkBB)D4oC$TsBp%RAH&275h*s8 zi1nnWhzQ^cA|kemh?;T(5fR!<^ufYT{OI~5DiC1u7941&0RnWC_%$ZKi8?Y>6I1R6 zCVSC1k>?^QiO4g9iO8JeXbyKDB!|7}#0X5;6OmF2X#R?+V8dr5qZ~tEq+l|U26$m7 zEyCey;vvjO0$Glalf%50_$jsn5b;T3n*tFdFOVJ=kRyezBO)b+5FsBybELrIu zo3i}l2M=H}2Hjmi)X`T0yFQEAH}d9~rX`-hG!79-yoZQd>zb6qqdO_b`_GZX-bO?({X|2zCh#lY>ohq-iEwI z4)fQEn3>;2xevu@4+WT-|AL6A`h!Hs&k;XE=^!Eov55#MGF>7t5^Diz_TRM_#x@L<%->15qy| z0%zzgWU6VIc9BOXUh*^WOn)ZM`3FVKG{A^@X-qqmr zDt4Za3>VMe9upzPH}PON|3iy-@m=3kS2SutwBkHeZEl2ZhATpnMT+ zixE9L+T^Y-+8{GDmLJrjmLoT>G?Cr@AyAH^<}3 z%y>BX`P0Ic)CAXlQTDwlJO8vOrfd~u4pEZ?d#OvsM#^d-Gjf+gJ*(gM>z6Kd!yqpK z2Dj1x+V7=r)0T?CG^v0IP9^3i!kLvz#VX2<()O!MsSDDwy??2wrAbaAY@aY~|7WSl z^FUTcnN37{Jei`O+Y=>Lc&N7#Qc>de*hH+y)6(cH#8F!ICc$zaY1tSmL{2hfC6F0+ z3FUh{B19QYcG2WXA)+rNSpj)Th-#X++%S1tDCzvQ5Z)A+6vG5}KTUKaLYIUnp=={< zH(AEpge`Y6m*M)pCM}kFV7Z$pN`~cYmI;>^mIp&-+^kwIStg2UvWg~U%an9kw@hrL zNi9vbE>rT${$)#3VUU*$4^BuAgwu<}8J>#7sen}Ec#${{gf)vbKS=Cyv5IdTg_+TE zxp@JB{8XKni&~oGq`;)lawVN^T`uy{U{Xet@ig&&u!`lPf+p28S*5;Hxm+BjiPwve zeJpali2Cv6A}1ZP63Whr8I(0zA<8J*1(}hwLWy+m6{4CZu2h)ZutMw()%$0-ysr%DZ3;_Qr6@d z(W?z)t0+qrb?K0Gdqymztd_EC#Icr;-TsU?LRnrqWD`t#Pdp=hFT?W+$PDp}@|E6v zMtn(=qqP0LY5VXqB4r(9IV~YOW6JC+#r>3(L1r{xseGJPE1^>sCe^gvMWkjR4EVV}xq)-j!lFh0|2wJe*~P5Jy_0Gx6eEE5$#gA4+%h!{S;xcV?xixP;k6nUKb_ zVnqg=Y4)s=_j8{Wzfze0tdhltKP!4>LO4zpKK87bOX1>Y&Fhz?n;V}M2PxbIoBoof z9}?MFs9H~pB7o8QIWaX0R(d|CWQ04P6Q5Ez={XT?^Vc}*pA(7Mh{HCqC>!s8BE}L9 znCz6;M)tR4M#S?XvNhgMcs}T_(fN5X970qQBiq8`q0fsAv~!ng$M?MWhr)%=D~a&> z^WwTT5bjijs5FDlxY$ z0x?P~YLE9GSS1dUK4#Lzt3>N|aOMTY8GXB$(hgSlt_qef$dOlqUk zOX5=sd%vVqB{#ez61&6cQ6jeo+?@837zb+1gNkQ=Z$e)$wsnWuHsw9!kqFpF9yvy% z_?N}-9&jZ~?CuGg|FYNsY81V!B;NFw#Xl4-csbZ35am~(91QJ=an{6X}+1o%ppUoQ@TXt^#ehPV~G2^eRzzCFrnqVlJpLW}OnJ(skk>?Uc(`^wlC8 zR`pGyi13M+LO5WuI`IjeK@{bs^0H=1ST7QUgW}N69>jOexo>D z%=g$6jTReBMcP#!yURWX7OF*EZ5X<+S9@Ic?wDbz7OQVEVnowqm^)v^NKRb5+LLbQ zFtx%g(RaY8Nd;m99!E~6Ze4P^i`B{YID5ygT|4yj%j67q3yPrsIIx2WdeMl-FY!oLTvRrpWf{V=6zJ`Qd+ z)MhFiBN(5yMiF2JL(#$OkVlh>Bdqt~VKf3aLE(wu%M_jtJ}WY4zb*L2MnR6rr3U;8 zOdM)k6bqYSSLJ>1!gj@c0Qh?f=W@h;h2H^w9us}$aC<0}pDnb#UW(1O7C4P@}Cw9(Pl@?>SglBgb=Qh+YOisql^9 zXB55-e3~5hnfBiUcgXRd$v*@CNa6dzg9>LI@&M2ZIZl-JecI2kustZyeg}U~;q~BW z6s{vf&XNO6(?iBs<&iKiSIlF;Ip1bJxI_rNBEVxD=7Al{n3oH574|-!L1^q|9BUdQ zdNogrYCH|^_@8Fj)6_CX+>_aoz1!)J;F{gU*PB4QJFaYrc5^UlJ@liy*if99B=01+ zQ?%O~o#K^o$V09 zxm@IbXnq&?NM!wc@f#N;_~a&89RiHsDbQYog;U6?3>W!3;8Yfd6&lG;fj@@Y#%q~# z{pbbQFSK|n_~&r%Q;TyW=5o|7nAVi<7lYTqjbYL~>=)%e#gVYU;z1ABf!`0_+TvB< zRQ?5!=HKGSU#J~eL(%^4;H}``UW+$D;4qICh(H(c_ffkr_Ow3~d=awZ0{lTYmqROo z0QThxOImmmyb}am9VLGW{001Nw;b4w-(SN)EWk+fqu{d<8rGAv??h@{3mK+OByS1+ zKFXdyLOsB#+;17oZ{rI$LhuX(Y1RuR;8bbn=d-{+Ms2X!GG7iJ4!+CcuYo^`+GMW9 z_ky2AidBT%Q4zcbw%xU!>LR1oDPE5bPc!PH#r>@tXBa=_h+}%Q3`c%0)+3q;{Ygif z@pW(Xhj3rRf!>%zr;PsMF@r?~=X~ImHy8Ei&(3atx94J{u`(F~pR07$OE^0%z$*ko6kE?rnx~^AK~o zXE25LSQg7*$eEs16jlr|!}`V$bCQRbo)}d_bY~p%mbrCFA;AL_Wtwyn3$F z!?(yC%Cd6{JMuxP#nMBU?p?jgliM{%_C9;ai*<2Ta;|k%^6x`LlZa-0M9HeK&Az+v zDrz6=sk=PY{}agjMP@YMk)|GifXu)DW+8%}Hf$vo~_K<1S3LgT# zU*Wfce`oTW5LSm&0B~5ba33rjRrq9Z|HCdKziIG6gNbLXW#52%Pl#`aJ5t1L1H)aI zD%g4!7hYam;&6#fbQ(qVDE#MnBt1%a*V$~M^;TT0?t3#nNAy`|bBPO|MMsI)^I@^= z`YJs;G^yG^g|kN>51`U#Jk7-FYHtkY40^m0VRkpa6IY>I=i~hi{)di)vvXuU&*p#l6+9vQN^$pkTZ*`@eG`{& zNr;&|R${%(cfSlVm!~%rbM7zlKeQhm!qY-{enak)9Y)oGi484iAtJ&CAY#gkIk;n_-L%~_Ry5f&r$_e09`|IyiF9t878Duo)r2yT){pKHo z-w(5nAzj8zZ^g9{wZ9lqmEoH_F@H?MYG*|K_^3T|6=?kVxv_nw=L(NBmk4r59!?+4GF`f%~W51t;lb@uxoJe^vm z^^%UuDQF#=p)=iu`>glHc zB2tfeI;H44xBaQ#Q2@{Td7PzsR!WVY#&j|r>MkBQ=E-#(*kSr?3b#nt6U7(DJk8?X z-BEDvN(3MtE=+3|QyO1r%PKoJP5gDta|5QCuRreb#Ppu67sAbAW2wF&|6C)NRy#pF za@>=fp1Q-NMQ|k6xf|*;{noMz^UpPh#XjQ8PFLQkBHnKJ?)GO+ePt@o_PItG37_kLs&!o{YOtWuC+`!;qfGm*j{kXjyD_n z6a$|g6GgB9wS)Jc@U+u!6VIOTRORmZvEW=gV^QDm1_4WU)k5AL&NP&#xK4b4*;Ag=(79U%MRIwLR8vct<^}Vvn&>Kd{HQR_cslBLJ<`k z0-_N`35vZD1WQ1T9RW3=$y-o<&*$u1Zn?+j`^WDdgy%kAGdnvwZKu9orPX4^pJ{2X zDZ6|nSG;*8QPtwrKhp}(8vOBRTGMFXZ@HyYWo-WtnSZ6V?-u@B@tH(zL2*pwm7Yea z(Zql5!yQ^)!^(Gm4aTPMOj@^%#i^B7da(`ipL=b`m0nSndReXOxn1J%ztX(e*s%XE z>|Xfb*WxqX9UF_Cb)~WBjL-e%uaWS%NYws?it=K4bWPgl4x@gOI8YUxQhxqyTCAgE zcg&Z#CSuNn*cm-zG|R5Bn6o5y#BOKeY;3V1jzhPNScvYJxc2X~{(c(Ma?Qe4VB%;@ zWVrDm$i&Eln1zlxF&o`apzAhFR^dzT>V#QjA|A&Lcf`jOen*^%8BAgq^qcX;aTQ_1 z3Gq(MOAsN?Cw9Z^b0=IB_|O5Tpfxr<5~t${kvK#m)`kRxK;J5!L0 zEk49NOg;f8wXjAEMt3AMxX}wed}1GT+=+t`F(AWTg>5_0n7=uwko)4I@j@qvelK=e z;ev0%A%@Wts}scD*tP@YoB4>y(Y8dq;W#Cyu>jXym<%Q&>mCC}H^tUqBC?J{5(5J% zZjdwj;Y5Iv|4Kv_p9K1uSC=V39{;C2aAOfYaExMLZf^n5bq^+;h6M zT@hn?ybdFQ@}~c!P0)?s)uhwvcrhk14olT)(uqcyf5x^WP8iMUX-zuKLrU(l)@I~H zQ_Eh~+MpyodIe{lw)V1&r0zx@o)A9_3C}b(_OT`wo)Wul5RZtM13ad|4gi;NE2^_p6gRd5&KW1}%}3XSJ{5n=J?VKgVIaY#d`7u{0|w zwgqY$_3hOC$bYG0>_lqX|M16%rs`tn&CZOViuYizaj%}f-wc1S%#nA4xX+tDR!<9A5e~)W6h1SnWwT^W^7K1Zl z*OdAR{-5iFu+olLa-QD$Iko5z&XvTQZSFW)WT^#|H#n(F?<%9+O~B=1o^ofD>>S~n zGN}R&1Jxxq&lHN2}$_KVIT9sEf zNjJP$fd8padQW{@d9%Lh8^ZOboG8x>{~#ROyJZ;_?#~jiRzD~`EBqL;b`MKwlBgJ8 zKL(cM#|}!*F&^@X1OJ8l^tECasQ#&_{X8K_l+1N-N8$X-2{}f`95MC^eDo3n2jhnS z<*+%zl=8js5+$}!mXd3&zYmyb#>3)0B;A!n`Wh{YhCntwmkaVfeTi62`baJ+ykonz9X(bpI4|Ny#(pJE zuS)6O94RM%EMFf4h{OmgT&epp4}TPY3=2tKw9en?(d7$=r$6MyCQ4cH=OI^WEz{1b z-hb?6%^kZ9ivef7^21^L?GDJ2!LKzpVw9P+QhzX38)>my!V2>%w>9>t?joCe~$nc`{STX3DOcx&+caGj-i zH}H3H?NodUI7>2kw0yt{2=;4Y`q)OkU{fJKh}EyehKrr^)8ory{OQMhFj&r3!pL!o z{@-|gFdGp+D7~?8kIafO^0USC<6dl6oa1nZ=VzmPC%i+9Orx3AN`&Y8pwQ6j7_o^k z?(%U-Nj4Ya?eB2h_X80>6#hTSf!v3ow)bDOAXjqa8jS*1xt2sW4;`)Mp;xZe zuvFXuU-AFpzNt#G`F=>o{)cvHz|eYbV~G;;X0{>+mZF>WtX;SltlFk1a7u7clF zmuwZd%x(Q#)N!pnX5%NoD{Qk8=nX6WL=j(7xg1qI;<4Ou`zid78K9N10R7v zDkM@Kwu18jtMzk9UBVk|d=K1vvelPAmsB16wT-_A_v1GHIe4{=vwizfay}ms_yK~G zHV-GkFWC55@SuTomv$L^WR&%I-XD(g5Zo>1(&E4;+1!)BZ?$m`_&jp?d<2jOLD1s5 zOJfVV&UOPe^9Hw@xuizk*KO|9#Cy`lsezXVU9F!>8x0<`*zVHU0$+f;^?XEN1_VL# zrY?;db*T^{5WxN5ZW~_??z3?!${lCpPk_&|aVo}LZsR+_ce?`5M+Ejl;EoPHkX0(z z#yRcEZ2nWgPuMtL;Dp~M$bg5_HcmygH8$QB{G5$50(RaR?uqP+%b!c@ z0iJ5({lPspJ_6j&v%i5G7$Z9$3lF#3-1$H|zZLE;*xY%)ol`IEPMiC^;CpQR0jmCe z%_dk05BqFffLGY~X7GbH&Inz_;eN#CPCc{#+4vja%`gpU{qQZI>fZvJfcj%gZTw4c zHzo)JH+&D?*T$(Pc7ly#T39P^2mMnm?Cmzr6teR$s{Z8J;J^d;Ms^+tcb*XrxF>@T zzzk!6GeA4ffcp@eJHxZ{W^kWmbN5q4LvWKMW{JT$#Tj@&Z}10goN8TPxA9xR-?njn zh(57#uG+fUr<6aJMy;$oi>$a`dk})Gpg=C`%83+p!$!Dwu(@vo?`z{s0XyFT_W?Hd z*T9F^xJ;2cj_?25@NjpXz$LY&zF^~2I?)1CqAJEx`9xbAKMD6+Z2TPf6dR|~(-Iqx z#Fz4|0O$9=J_IKN0&prZ?b$H+K)#`!^V{9m=FT^=^L)5-X4Cq)qz=Q_WRFWFUq3 zdmfSCFTh)>G85oGsSZnkC#jY%z^8`z{{~qa6$r4CI9lm3^_#?X-P~qpsw)ZnSedD| zB=BR^kZLcLfbLJ(+~Y;-*U~d_Qe@a`=`D-u*LB;ht+-7?c*hVvz{dHc>EflA(oEr- z09)c;g}6EEdT1P`qU8x_*_F4lP1>{}4VwoPRFN^oN?I|0u-UPa*uz z5RPJ7_hYnDLU_{<9_+2jXu|44h=+M0d_xF-C4?Ue;U`0QL|tdeN*CW%9JL|TzK7lnOxWXuy|AP)b(ytze5}ac(;VO zz8S)gifkC8$ISe9gBzIsP}B7z>Ut_x*t0|U!y)|n5WY8re-Xlihc9IK4o$BozU=8v z_ft(u;K!VA6~eoR@S8$-X$W5x!gqx5_pj!D?XRl^T1;IR$x4ZqA^e6AJ|l#$4B@YY z@E@<@V&D4_^^3CVdO6lJi$i#@n`OB#331;n9(WP8@OX&$-w>Y81Xe#@UK_%PhwwW? z__7fGYcbs|?}P3={bA@_!-Rtn0d1?^zVW`-Je(SMhGxO?Z_62PH!I#t{BN z2tOr8e;8r5YK3Lzz>iVv7Q#n{@CU?QJ5Y-ss7QDF4}`dV6~g}r;m*45m-WuMA)Gp7 z0zbxOY6zcyHE*pgzFMF?62e~!;RnTeMBaZfL|jjG`!GF$)f%Ukdliq;ioiLQ#Nr&! zo*wuLbhKK4*9Vs>XmGtwx<_h{z@5iHZc*<0!5iZK?iTlJhatEN-v#y#8332q=b|$( zLUFFB$HN_B>7EY00^Fx~7w{i2NXl1yH281$8>#plT>J64V2?Dh9C~$=)G@) zfX6=gZK8+Q!Q12Y3KZw&+(mG2tN0o4Qz$^UAc^Qd7BQcS&;l=zg^Ry!4=e`1f>t?@ zLSw*rGAD!KvG;x#1V`baiF&{a@Kfj)@VmeVJPrOgc;F4*1b+h&V%LH0?1iP_e(Q}~ z+C}hh;fOx6bWcL|{9xk+;PD8IFO121m)08ss;W;_H%tU?tUS7<_ks7q16Qf= ze*k~T2y8rcX|>?-$Ra;pN=Cq&hR!C+z%_~&g1>_sN)#Ujo`)N7pY*>ToZFbQ6yF2> z0C=EU9tD3Hyn}N81H2x}K_Ckq=_tf0NdLeC8$-|$Z^U+zDN+cYgmxg1$2WmPS*JYS zK=<+BH=yz28BcOQ_*7i`6yF3+Q#gSne+!(cja-xdKL)=Is|R%t`~?E)vY(@R6z>ZD2Cl~` z-XGlWMXBwf1h+%L-w`AsSL(|=ur6bJ;A(K{@(o1b8Sq#ee-nHts&OENj`DsRKMlUx z7G9VaIr6YgknOdWlICev5_biE5uq(md?@%?oBun&-vG~7?hk+;K#Jg>%%Y9p^AX!z z#a{(KWxM|qZyT)QBF~ZP@`hjFVLy_*nd1L|--H|BMY_jlpwx?{AEf657a42IldloQ z@tKW8S&K$dVwp3xzIc0L_`2|{2`yR`h@$smvc*I1H+oVGc-B=-VVlK1)AcFKqJYsdtLMvSBWu&4=kpM zICJ!@iFeM@Zohr>l(Ew$+&*!%bQOQZVjJ_9v3hcORGgk4R{qq<^xI9W&(?RD9qS!} zDP(KA?S%C3^Bc=Yy3F@=Y=X{+G2iibKcsoG{=ue<8o%L(so?k;f4yrC6{e=-p8aCW z?q7EAI@O?m*nUsgE2rGkTO9JJ{iG?mxrd$J&2ikzs^?~Wqj^uj?z`@N_iQ1yj`d1? z_iUNM3WZ2wDKAu5W?}5v3VHG2Zbu%rbBvEQdv>nbqwT-)BsQ#$(P|>JHW%H6dQF7h z=3=}CS-ze!uv_1#EteecZ@c82=y&x$*YnQYD95Fw`1oCon`|#X8EZbK$9V=WahD!A zTcPW_B0U4ex_ahsdXBi)Z8k1Qsg|*B5!U12{#Vm4?8bcVw;L|D)gHtKQtYOxZKt0| zp^w~M6VfAVBO_~QWPE@5=Wg?P9Y!Z-*Ec5^tO1(%wt+d%4HMKoGfTBo?`qDBvWxfT zi`yES{W6;WezDt?8_IfYFOBP=W;*gqI*3k*W-se;^ApWx<$Dv&r*+pdEvj1cK5%iFTTD$h z$3$$>3R4$e+$0Vqo6FmKw9Lbe^&ZiOE=5EfJ&`&nwPMr?DDd>BJD%68V{2m_k6dh{ zRh&i6;Ou}WFS7FRZheim7V7!U)M!VGgD^)wM=QJN7O$n4y~B@f-d*yhh-zfEsJFQ! z_n(NGiip^w7k7u{ZWBEknVt^E)?M7}&fB$l313Wuz3|Q2-KjOZw-<+<-#F`&FWx*+ zBQ3fk>)b9_IuGlSd)U{b|GACgiAH8qC^-43k@)~h>VU>(O4pJ-n%7`17j{QsDl9g3 zFSryoWSd*t-Q&#U@nNTq%yM6HoDDm*(7B<()>BYgeCkk%v&r`Tg{k_k!r~IKwXssPtwiC<-ez!8}%?oPCVc-%VPSUTT~*`F#Eu65$iQqo8KPUtv54{ z_eu@VJAF)V7JvLopOMLW*1Nk8m+H+O-XF7J?vw(^oCQJ9zO7z1`P{nBC$4#4jC~5wuFdiU~`DC zTYALluO+BotG4ucQ(HzmdMLIOigSNkM{;~V*h8R^*sjFwP)tY+)3xh}g_eSG?M7uM z8u#_39I?KE2>*kKAL_Jwh>xqKL0x-B*KU#>f&*5kOGDirOAk13KY@r%c$10Yu$V>c z4?A+i0Z>dz#8+ZEaig*qU9QvKnY1TWN<=?qHW6}u&KQyT#P6+cDkHuK?=N@qEv5td zGE0abKszlFS@RGP>Ai~hI4o!p&sg0~Y9W7=9J}|PAa;W-QDSfCh$JGy&k(T|znzF- z%d^Cnpt6xT1*U@de0E57D#0s6^wM4>J_`$4#75Q`d@kZ6v1CTSO)P;0Eh4rmen2#l z%0wjfXGD)Q6Ntqh=mRImOaN<5Nsf~BDX|@FT@gXPAR_&b5DRb%5sp>F ze!6yy*d7~9sKJL@Pkx}F7gVMaJHUo0@p)xO8YSrzd28qcCU!(EAR<4`5F6^+c_RE> zAfmbaoA@?VFcYyi=U?Krh%50OU2_<~K~O?3?M7p~z}+Xb|LP(hN1HUJ!y9uW#(@3&iGakdn5m8T0wgh<`s!O@v$KGLDeKa0lRXN>)HdveyBFY z`LHWT%!I;X;sA{Fh%chnD7mylJrHprAE#@N5b@@6BO0pnCUXCEx@CxZ2pTyG7DH(? z5f6Blh#OxZ;!ULCY23J*+@%apC%`BL`A}HiB@V+Up148ToyL7{EC25jyPy^khoe{l zG5mw+T?%eS%^@y@1p^`;APr9^L#sXcEl5QoQtG(k-xA^fN8)JI8e%DG4RH+A=@1ct zKZ!`GTH-L&8sd12Bn{U8RrpvakC%veF!$-OLDwBXyqQ6~9bE$AJbWvN_##CSr{Naj zELdMB{*Jx}@hoZyu@ibsM06ICh%-@3h$!SHH;=IA;-R1fUqp%MG7%xqQSw|OZfvgP zEtI?^aW1|cO5RS%3yAkAyVD4#6Zs63JK_WAK@m@2FRN7OgqZfEAOc+|Vk4MdAmT=D z_~AxV{AVM=oETh zcp)MM%ZZ7o6~wvd5EJ45E#d{#K;jkjWr#GL`#vww%lL?h6yOFTzQG|PdK;C*d3Y8P zU!<>y__%ycEJL4!cmO>pB0etMV5H4QZV+#Wo;tLo! zD1I{$0golFLt{yN1>XWCzml$}L(b$l*H+>BKTy7p? zOY|hM8lx=Y&*(A{f5XcXkwPyKQ8soHQLkSi#-NlF@fF-ld<<0IxD{P~BJTGn?j^27b&~t2pTtX3 z@Umrih{GJIQ4Yf#?#1GOu9dtIc7lkAXh$MS`8C9+(90r@!8n0fiB1yn2s%Z?r%~#O zPb&M;@OJ~b3jqz_#Z9^x_*8fz_6e+}xz)JUu+|bIiuU1j!$%!WUY9)>lbFPz^>qpJ zR?0TOh(TF^z=#*FYs_5n^|?k#;0_jq_bopv293m_&KaqEZlu_Jt(k@J-@Vo>02H+eOBCM?bn+FlJDEPQe{oo( z7~IJ;<&~Z(R>U_<6U&!Eda+@{dg7%{CNu{x2}=^+|7S*t@9BN^lCXM~5!Dz`xhgGD zBzHEG5n!v%W+%Xo#DTjB1UG}TSaCLZv3^#Y!Mak*Gn8Yosw=POt)f{ z(c;#?l>?n<%Rp_jC1J7p0P#k#>8rbWpg37<=GHxP2zqgrsbT4PnAmbUC8^Hya8a+ULn&El*EqWNdun7U}9Z`V!yb-$4+Zr#(kp-8*VY*goerdWL?x`F6- zTV{mlye_Mrxb-?Sy3X}ZG4DFlmmEmDS=MqA>Yw}_UjJH5199j&Gc105!tAT6++D(b z9;PG%H{LDWJ#5K1TXgMVc0|rdTb|6uI-m1I<*7(kloBrtQM`0Ig*h+naR!U(0-;}T zX4TyS&Dk{n8FOc$LmG>QyESER9c;&X4h7(LPzUY956 zc{CDzTQ*3OVuZW5r`ZA^4QZ;^KAzQ(d$V$TNtfZh%v`XtUS{i*z{}z5Ehkph>+RG< zQEg;$U4G%4n^gDa_*6q%OJoAVsMlMD*rm4&ak2%gddtf4T5ppN{kk_=L%x7;_6bz+ zr!4!ZG2(_k=2(BNwOUH+RG0&l##?+ud@frP<18DD1${Y`##eEWwOm{<0`o@Tlh6}E z$5kU=NrXT2dZa(ZTiSMef%u~}!RSKA;xKu&98+L#1}@+R%?<+85Q%aW zoF?dy(B0n}7c^VPE)SEET^+swyELwY=)e=vM;k(X7o$?58wLY`%(9u}NSRV%2Sk8! z+`j-wi$)KU!{2(k!{26NM@*knJ_7l_5Eq;Sf0Yh5AZaZJjl02lN72tB;=#>;Oo?K0+&@NfY2y*$+zp=I7{=k~z7qMrUU{H$Ufyt!93DRb z(&LwuBVa7n%fd;eYA#H1M4n zdFhy2HnU1nTyXMh&!)8Rt3xQ0T zK?-^1j_#%8P82?1dJ3l7u{TbZ)*Tcepx1y5fV;e1Z=l{2kyPi1n9?+&fnQ;u52U{g z@}3ys04KeL2q^hAl=p#wV4(3SW!jV z_`{o|0@J~H*3S3{<3=F;b)h@v^ZF7I;bFx2n3JVD9#BS(`=oiy1WcWh55+Kn%y#y)(kz>SZsvv~&h3kp%zl|8FYp)Wkk+np8^r^K!{X3)>IVK9v0sZvo zss{&n^bz5q00^6@S{LFE_y$n^6Xt5jF>N-6920&sfilG?KZPMUk%gFuiNgPgZLrSg z24Z3`gNXZ^5OM!CZq$EThc2c76M{W}1UtS=e}1j+V+t0@)tiqTHvEW8UswC8s(vmWd4tw-LWaVFfb0*NKSm z+eAdz{}DYzVKG<pVm#i=ljaw<%7 zO~dzF@#R3i;d&z8a3|%+^Vf+;u}_G&?+6jq`#Xg-O73cCxx0z}-;jh#z|(`qC&+7H z!A?{+;x2Tth`aGwR=5;MYn3a>U&d#eJO^JnBIfs=BW9!1O3Xs-Ae!h;5HVr+8L=5! zSfHQwbEPR%FDClv;6aiRTVTzG*c?lki9k&F#SxpJ`%TP42Ls56HB(rqu%E)472c|_ zRN;dP*Cq1%j{vqR0ae41(}pVXJ%!w_PA)aTA&-3+kI|mz03t?8BZ&XQv?~!=SV8<7 z_XDH%SPI;tUqKU0{wk_pG7#Z(Pe%Snqcq+P0b8yzBEItrm50T^Nfqd`k;C6Xy2IZg zBKiSGC`Ul@TqgXT22cM34G`t!@RI`mCw5Z+=`R(?2)0$&)2}W@5K(W}5G%1PLp*{S z1>}u~$Z_M>#4+d%6K_Hr4&>L6=Q7z&@H{5J_Z&>}GtKjt#s}!Y5I;mjh-gQ6uG07% zk@N5Z0q~rpaR_-yM2p9Bkj6e?jx>v6!wkcae_{AvOdDzDi+?;(@#3#lm>}DKzHzwt z;GagN!lk!#DC=$C8B=n5gZ5ie~BW;cn$tN|@oDX%9Vf$t1)q+H^~ zY^k*~oQsxyD8B`5330UAbTkH^aB_4F`V+^?N1|DuD4&T1WKl56YzYf|lSY~Sy|b}& zKyP!UPdRv=Kt2x}L5OAI%Tea!_?2=gO)ibhqIh+AzgsXh>l7sAV&%YklcH#B)d70I zvMI`4*STWXSeIo})M!{J9um<0_u4H~;^#9Oj9#A<=L>Iuh##SHtOT*D!s(WLozQnc zpP%#rBZ6a0x0Bx5HWID+doqlkv!&v!@VIt)g`apHZ;N_VgaB zXkEf*472=9Uq!?y5(3+`nh}PDxT48m zRjZ{^AH7zrCe_ziI)0MZ&^Uz8$X#REwUgR`x~!pb2s~wteC5e&Xcod}+_T2^%8S;} zEQHSxHX(Ged#57s@-^0*eko><{t8M{3Nq}3wX_A{GcvJp6schpuN5!@>N5tdwUnXd z4@r-QS~VB|^%?iAr40!mc0TU972!OmyvUb)SLnAvc64oBoZ`hmO3nu*ZX^6r0lXyCORa;I^3Krn7jDorEs?xlMEAaZ476Y(cxifzf+2h zo)24@J>g-?g6Hzr!sEr36qxjtDZ21s%ZTUAuLi^el9QqNX*!;^=V4WN?!?UZE=s8qg*VnyX!zE8h1fis^IYj{bQDyo6??PIhc4_I>7rV^nmY@RBHBTu*7g{OZYLqS|>!BC%JXIH(w{zx!BtF3_JrIlJ=Y_82| zt>x4K)@*43m4zs_pUwSY%l#H*E;s*fGd{-VEG*}Fk64xbaWVfM#N$OV--CFRjYC1J zguwXnkzjFv!BcN3JYBLpQKMPR#$a4GSs`X^4Bipj(dNFza_R zX!EX&KvFztbB4-LloMn9M$u|0ENRQ;<6E(7HX`}QMrl8qB9WYx76Utp^eYOpP!QMZ z&aBwpj|SuUycN*MM=f)$GT|23++VcZ*F0)9W%5BUirP7N(3_81sdZcw%>_OEs5IPT zrG5Hi!AHDo1<^v;vz3qNVsn4Ra_?t%zs2TWZn;mhyU(+^@3q`l+T3C7v+`bK&JM9F z2g&ET7dhy?50N}(_jF3kpzM;8RlrxwuD-Us#4V&&qWcOGCnZyUhK#Go7q8c`STOcsb*@KLFA{g1v ztw*LjA-{pK`8KCY5&t@#=4~1%NTY3zU#O@)LF>%E*cCRXqhjn%`+cxn+iE@{^$Csg zLW|`DBb1Fmd(|*HkaQm zmp+!u1e?n#G5<9bfX$YjQCV)6+noOpGxp$pVEET+tMJ*ZU5Ll;la_sb(8*r(0O(Jf zty1D?j7(hp0L;(J4@e|U^d_x`Lc^FX!DyZr2i`)xZnZ_45?z0v!|l8u&Wq!OYkzn~ zcr?bF8!WAh1K`&BN${Ov)~Dltn)SmhE_A1l9beL7dP`5>7tod3K|C}=PYUnQp;bUx zYP4A0JpN%(J-NO|d^889sx~IMJ;5VgP%&F1O0IRd%70sA7JKxq*3&EEVG?Jt=(io& zKU`FIaOdbRi_I@&)6lJc!rMR`e<3>o*EKI>rz97&Z5@aQF&Gz`GYxCg3f4^B+ro0= zmyD5b5Z+ev;35~=m1opCeiN}H!;^(8&ezG$SF?UjtsED(2B_wg`tq0B`1`ni&c-o{ zlJ@f~kyGx!KWTIS9@qcq0fCcy00{?V!yaQ+d`V zAmxrpPpKRzaQ`Impr%15cSUJku!<6JF9pBZ#^+-eR$FcpECsKy@wMRRZ2U3spvoE; zb_C~gOyB`Kz}wn*Id}&fuK*ur6e?oZ32y|2phP90eHZZZJe9CQ*C@3yxMtdxVN^sQ!`TekxDq$|Dw{5<>zIJZK63;zJ=|2!^Q+IU(xc2Xh&{#ybMfZ$2g)4&Z} z)ou*FSh;Tn$Gf2Fk#<;Gf&vc{qMF-mry=P+Rb2xb`SM7#z3A z**_-v9Prz0?$3hz--I9#z*i9bi@yNBf@|t1=%513#5J<7F2Zc(E5 ze**jzuCZxCrWluAA4V2p0#x#I(a8Tl@cP@8z{K0JIqsqO4dB<|&!_lZxaJ1(V#V3W zw8#B{6#5XHTj+Z$_p{)G@z6j76JoKO9$Kk(VM2V@{G{{{D``-g&4?O1>>^+WKybhMI$DzAp)0f9nS z3%(iw0A!M-V{UUeA{=n<3{DkwfkJyb`1iO!!1sXDjB(%v&VuLIBAm??%1yQh6oJ18 z9!R45z^95UdrX^7f}(QQ^u3!1Z?CL*O z-&1nEhQE?MI4AA?sI*cZq`!|xy4|ihdXvcgF`l~*8HmjMIW>8AR5_M}O}TDLqaLkm z{Q9KIN@x7h`ZZ(fjjfE2a2z#iBAnqZ;;RSBYll;B5nUbMq+aEqYJILduYXm1#0^K* zI~};gQLksEquQwPJ9I~0w?jrvj5DT%^Uzbpoxgacw#ej-tXZ3? zN1Rbditw&2s*Jqk{f<1m>0Bc(rwTrf-apr9no)J&zAd#49k(~t5Bu{PSL*Y^@{+6e z?)t)M9M$s@D)nk3&wXhAeep<>m_wCL$B`oVh^T6nysK=Uk?W|^bHgfE;c+GVRCQPj>v^ZYGoG?vSjf!^7KGFV!ITi8Qa>DErTgB3| zw0Qe|XI{iH@xK#h=Z00qFbAd|pI_?T#>D`L~{ zW}1Fny!pG?7`8efY#fVsb{r3@EQG;6h#V))R{p9brNwh%kfshOw=kMG4}~>pQMF*s zxR+bkgzLs3_r7=(ugZw%qwmZyntH3|FLvPV(!L05x_y6GUdk~&b6`ZuQDd&rB%$hn zjBmX!!k}>=EHC=lO{qrH=wpt>Ws7g@W?XWdGcIZI%ZrV}ZuP$IeI?h6mrt5Gc-6f6 zl|_rS#YU5uj@-ia`xs>G?kFa_)V!)#Jt&ueqsm>1S0 zzbbxj(d@9iW>sR;A7&?b)|c{u@ciT-W()uGWmkG9%+Z^&K4~@E%8bl}nW*9=T5Y~D zu+%^_*OrDgEjzQeEM;#cc-fhiW$~pNihHXXoQ|tmRMx5{!hrS=PhrgiWgkT}J8CTM zws>RloMZhjT%J|m+*;gee`E8>;+cmREPiM4+Tv-)3NOsfFl_@Y-t%cJ_z;-#yLbC0U z=Eh>rVe$K)W>x`GX_=Kuy;28u>!s~F^-ev<;RDOcmd!^t=c{baM>eDFulq6O6NUdT z93u$)Hzc|1{){DCX+rP9J>51GU!7Oe>O~wbMBZ)lJJ5cv&R8WT)nMChm3XMeOv|qF z?A<&&5~U#C<9_o{MA(tBi;X<}+xlP{{v5~`5Z!L?ky{&S8=JvOmFV2Vk6){ zwTavn25F$4>!rEK(D|j2d5)?IxP{YA^sB|T`(t8qt=T@?YS@C;7ANoOeP(a`;^N>Vamv;1<7%ebcwLsWirGf4fq0l_%yHPHTynYK9=Vr+HYHzf^=cV-D^Nc>R0VWE zFQ7f~A?(>8;$z;KxJ<1$<6GU0e3n{Kj#n$ncdHd+^cwop9T6Bp1RqL-e|8YavG~lR zi`p0>_*g!lUC2pFFqv2)PpnE0caV?AUJW8{xRZDf28=``$86#Px!f#!6$nj+heX5a z2boy%_#56)_N(wN^8DQ@ViGTT#~SQ9p#bSBh#TaAFqyuX1eU_B#6}p!5La5AO0BU{ zOR>Vzq{YtuOLU)sEmXub9H}GXg5q9b z>2QXaBagt!biSzMa+(rd)_=%vkq1Dff7w~jL!VuT9Qo%Y;sMyQBTF3i2+913Rq{9@ zN+7m{VM+wKMQn!j=R6zrm0$~=RJPEVh>Z6TTO$#OkD#AU!~;0*#!fl5>d2$X*hwSh z*jXc08DK|^Jlfn=$=eYN@Q=7jp6QqVJCV0X`gi8Vc9e1=9?*^00kamwZBn~|l=mj@ zh;bJY1z`XY{;?xgsxBBrT!b#Pl4D;9o+eMaLDK^gkGzx8QgN?5s*m(X9m94jc`}&8 zSE?qsjkpfwhKL8uAa+H$Aug6DTd@~b9vGKZ;XdVW97%v z^|VM0FMG&)%Y&uZ#D`iy-bbEn*R;*31w5(1{U-g_*f3->r&7A4GEXgr`#=b0Sg9-N&jM%B9F#ptP-^{gvDujKi*F%D0p z*hD(_lG&goihSLVW7WFzJ;nlgz^B-;^6T!iM!iJ|_bv>3 z!1185NcT&>?-vIp#iG?^e7pawjlo&8|FF_C`c_7WSAJeS^mI~`SoOOLQ6ojv;zg%Z zIJ+o4-^{C(XJg{Uy}auFFI*qvm7f9ZM zGqSPRY#>F4UqQzLJ9T2*4aD9n2xayw(8&DgSCMW}am9=laSd?n(tja3PVCqkh4Y3_ zxa&Qf>4_J~Jb1{^Q=6$TqDofQHkGZ$OTzm_WW&0bYA$A6h)$IO8Le%RFxuLP$VoKn zJzVWc5&aYK=>EDV8RrzI=pLUa)NwG7uOKG#>f1$e$zoa!Qb-n>mAsPgyF*(>9&n-{kxMu&AX_2A@X;pcx-p1 zoee~(bKTV_UIm}gWE-9#lchGylPO;A?HD3F`3=JTE#zlRD**EAO?*xvKcT$XEh68DwG-*FLJ2-o z9=KdY4@QLL?gla-E*nwqQSuf_-UaBwCv2p`+ZA#GmGYemVb% zO2AbdV-&g##F5sj4UGn8fis{2g*_FHR5(rHQiVS&lqWuL--u}I{%VDqj$N7fiI3OD zc|~D|uy8Rw(vu}(?#O&ee7Y{~Ve!Tew>us&YmQRJE;M3`eu}uQv5_GfyF4}Gd~#MN zQQagekH=e(!`et|N8@5VqFnrNi`vl`-Zd4c-KDWl-7V&i@Fj^uyL|EC=rMR=Evv@M zl~v{hX!#7beYR4(=WyXCAEEg4;oLllJ-@@P_j+hJ z_e}bXO^UxXoLeP*#(u>=A8u`s{PS%@_^}4j*x*s6U1X_o*ctBBA7+j zju3y)OCQUNanlIVIUW2q#pjL?E6A5A{^$ttE&20`zcE5IH^Dzv{MZO_ANeW8FO3kN zl1JYt&8q8JBGrQ^w7t=Kt?oC9J3Me6qWFXx#hc`_6km8FbdZ9tQ+(TvVifrv#Sh*n zUL-%F_|G?rf632TTn`g{Gw`?uBdy0}jTDb(z`3pB-A9T)$cHFCVWjAs2|i2lg(JlZ z@^y-D8!5ge-=p}!k)nAP_z{c8{*14g8(#@@KC~^^pq1R%I5$$76A$l+4_v7jI3heV zyaM08fod-gY{a*T$56Z!xA3l~@W&rMl{ipR&_3T|`_=81dqi$EuN8vAmx_zVxs~$k|>wp-8QX!?}IDaBF#-=OIfd~G{ zRKZewgf?63$o1IFgv0i4yYj3&&%2(M?GF{E_rl*O_2&Wx{zl`PeV&oxjbyT)l9SM0VR6q9t zX67$Rjjc_S>VhLPBDTAvUt?8Fb??;3QrDWu%;@YD7qc{kkRSD&v8KFfAJ6xCeZI09 z(5}>r5@s5kMd}Tn^-+r<=h3#;#Tz$xj);YAGqa4gVPZ^ToDZuTFshxScNE@NQ_$t1 zz2c6UI65chUmuZ)?YZ%v!CbJ1Hj1xgi6U;=mj^PM3cb$0`L$wTg;VVq7unLtdH6Hg ztShu(teci8bZ!7NTKYt*C5BJ$YLoT%iTRKjqk%@?P{2Z;sHAY6FSvcsc)=&Uv{Agz z_i#llzG~P)sr$r?rOF~PcTyfoNaD6XqcBH|nSs_ae|SB2cv%i6XoLIy!k2(|5LJa#`1YZsiAbBE-ruvb~={3b!>Tx`)?nn3j;1rF) zA2tGr-!3}RuG)@hnPh);sAoxrK0{h$he7%s_jq#j4x;jvlpGvp_z%oDmw|pMdIlFW zME_E>kI|X3pDKI2P=G#vt|LiQqaP>^yqc0@tj!epGZGU;OMjBv_&8Ixm&o`ovptOx z^V|Pl=_~R_CO2{vv~4GwKVww3h>NP=wVB_Il!1;SB;mrYv@)7A7VXv4ypM zPB{W)GZ5grae)z$`dJ3p(dn<_Z{sRPd^_0FRE(VKaS!`0-~?pi{f$423S=wJT@;)H z4YzU5WnzRRn;yDzN|K4qIFYkyacCm{8JEp;_`qMII+u66*E1kfztc+Z=f#dqNbi|e zdVePV12cY9>HTYlRm(V-(CdpCNL@WcCO11T`aGH5`bzQVW&{x@;>(fx=~;3tp|`MT zm#pA0LhmOIe1zb~X9Y(Q!d;NrR-8;`j|@WvF{U6hOdKw0*g$rVp2@OC5oL!G+}w`( z8X^!YKHG}NWs8CBGjsIjBK=8EvKY2HCc&BCrhU77)TMN6GW}~+qo&4Am;k?&a>2V0 zX~MLzezjLN1}=fDI9tRCBQ{O+chz_Dc)0pG<&^x70SbTb;F?=0t)ElcYJb7Tzkq|C ze*?bL=Kce?ocNRhIH^^W>RZ)MZcL2}FhnduGsN7rF{Tl&ufHuNJ-$_)SL-X&T|E9$ zwkfLGrNq$ij5VpN?q_|JbGA0VRs5Nk-dKA506{S{zAa13Igp=ti{f5!)4CYjcL#fi z`-qa+iSF{h*Twwe(+j1!c|BR^`(ko*oz~`a^ig6Un2~~Z6}44Q6I)0J`ySSzaE)b1 zlwD3pX2y!`mlI;dF{3^X)m%=%p_(^ivW)v_UtW%L^rx{|1Gm1KBabS`!d5AMfC%SG zR*!%}wlTM$Q=MZKqnh#*x8cgQ>iI2V{#&?nQl6N;upWjg=n&~8qVlbnq?DHJTNnIa zwZDTHJIn8P=yY~&-Ejibe~r|jJY znQfkLu;h5%c8^;$2y2imRxOD2mf!xg=YtH@1{jYzMA>xRr>~cdK=_#qti*}2{Tz)& z$-bCK=zzoLILEj>ljjkvjMVQJUesiq&5&&`bHi$TU0I@K>l7abkl(_L}P8O9z!xNA_?f&oHsqns-o#beZnq9l9Q67vd{QI%z zZ}G$n5e>v2Wl71{F9~Z>w)A4V`z(0BI+;`3h3i2!&U_qZ;|Fk!&bInFrONkP#K#xn z8cSvFlL9UX`UhO!YU3wyJSui!PS`jLjfbBJ`NPIzaH$Gc@zGat>{Olz!4QY? zj}({&KElTD0l(SCnHhFo2KR9`_a)#{Y=p^aC9FShY2a8AqyBJdOVD#bC|>69wU*V#OrhX*_7baLRwc3Wy1 z4+y|%_df7r^-c@n%|m#nAg?dm1I|wee(~t9dJ@Ej^A1d9{F>N6Gos`a55CsLk|GUKI|Ulj^t@sa2Sagig~ZIRE)2;tBuTleE_qeHk~v@3=& z&LiTw9%*J#Gj>wckG=<2X(>4Hqqv1=2LrtRu_0pWmJ0mn z4W(6Pj0e{okUa_hJ2HoBCTt)-2lpZ^xgt#d2lx!67GH_H5xP_uS=aGy;Io77er-Ag z!)+b}I5$KG0(b*_wT*MT?_`^Q9V7AQ@$fF{fla|#<2lS_1jc~Rx81)C{Il{bJPLejzysXZfa8T^^UF7)f+eiW*7^St{0^Ic4|=(G+T6K!8M_$j{LcoTt9UO4 z_y`0K*aG+%oCE7g@I?0u;BVmiX2p3%;aPcYx%US5i|KnCUcI%nNR%HzXM8{d-{<1! zQO^o7=C#tmCE{1PM1G8rZk?-Em;Ub7W81R*3%8)KC{Dr1-5Xhi-#%F)4^ zM@-~P<2Os}>H~Jzhk)yjh~bDHoKQ1{ShKcvVzAF~Q|cty{crVCkRb zE&!-(-r@2#iwU#lMh#?a5^RMvY_vYw8!lR|tRE@LUdAp0sW>_RY)rK1812m#=lF;# z3$YtQZdZ_3tGIDNuC8Odg1S0XcUAMB*-hN^gu6m6V9Rrl(T%Jb!01$~l}ztz72@y|e+FN7IgJK7rk94p!l*rZ33z!O6WLOJlgF4F9Pko%|S0DZkcd{n%f9zx}e4bI< z=p3A_FzR=?c7$tm%A7u%wzU-^Eh zOK{P1Qx^`$#em#K^jo*?dALh(wdc1k_O;J0a>`WB+oX22t$#M_S~rR}uJ0OL1J#F% z_=Jcgc|%E8+cIcbS5B!)`R1;{l~8@B7`so;F)F$S7eVzymaMvKa1B(iv1Ax()-8cz z%Axj6-0LX}u7K+KmaMQaxBv>p+0x&b!r=NR<`1N-tT4FzsjsqRn+rwV>L=nS{Z$kO z7e5g{DXT85Tl+-xq)02OTlz%o4pcC9MZuL%#7@czi>yV@<@1x>#(*MgmSdavGZn?S zZ#PTTgPi4I}c zqdX$@#-tcI+<6q$F!1AWW@~@|xsbEV#@Wf(1O7yvEJ8Lusc0#zUxfSy-fZK%f1Hi; z8!2}*T3^=)`GC7^9{9NnjsCdtG5;j8tHwLK(99QZV$v2c&fiZO1@6w{A; zvAmCk6X&g&=*<|GTC0z;rCKZFvutYtL+Z5pHCxtiUW?<$(J0GBk%>NQ&Ezh8>kH+Y ziSdfhYE-5BSJtA5@f(&u0(z;$v=@_;#h4-W+(vSa<+o%$HlQ8&7t1xDyanYuy>rCC zaHlW)3G@_7#Fk-3rV*Db#*A_`6#egW#D_P|MejuD)*?vz4*&0YpyaUpcKHR?D&;ug z@2UUBX*&ONNVVY4DJ}mYjnvO+?X^~n1)5*Sz>fu5cAEkMxHG(-HvU=NwUyo9+c-K9 zeyPwqAdBY(Ggtk{lS6oJ2Ed8jpEYMu|r|UU-u2_8urE5SxM~uEud=63g2U!fn zI|Lu*xDsrk$d_d+Q52B01=)!eu+#kf1y{fg*9nS>8;c5sxPhVqq9QHPmtE+20=ai@!o0M)nA(!U5icfKt z`I2~!3wuYI!rPeFcca;f%rt%OTogjDXxR@pY-51UpqM-pbIwo3iZa}CvR^dZTA1yw z9MG@2LY0Z9o01xfEHici9+i))Ld&u1aX_qo*>avcj&o#%6USLf*ItXi6UPiHPLAr% zw&5(Py3Xw84_?w^a^;ubvdxeKRMsEP4V;aG_z5{ukvkqgM=E5;wv!_8JHR(- znA-*(*6dG>>G{LKA>fxZTn7A44fg{M$_?%086o2YFyhM#A>$R2c)c_ZYD z$qmKqQyJy_wihYq0*%H5{7?eklz_iYz(*2rdfSVa>5C7Z=~h%UOk=Y5cDjanQ`5!O z=j9j1R@-bo75ilCf%#hb`T8+2`?f9LB5@a^8JIF9?`C{&%N5QwT7gsBOa$Lf0BV#WY42yBKi8knE1bAbjs0fqC8Yue#-{8Fw z7=FyyUI%;xLNzc98S{Z}2Ijn81}dwEfZxLJTpRN`tZS@6)<}#@khWMhRba!`C0r3#?8nkpB>>ZU@l$w7#jiie4M{Sg4W3+ zId9ul#X5JSn9~ihZuq7MwiP2)V)Fb2BSq|cIEMXzl1E0;QLBB#)}gE~XxTk!rfTFZ$8qs7(V;v%jwN)t&Ym?z$5#GYe>|Cqb$;zN0U(e*npCMbr? zUHIO;fV>;xJimB}oF~R8D3r)yr&V*Srr$^JlI(KzkgYSI5k@P>^OJJ0VD!LEz90>Y{O zGbC?`PbvKOI5FcYyzD>5iIP3Y5jQNOfT0w5)gFlZ!FPRIPM$2@Chy$w+BL2bUH5`_ z`*_hX4W~UTE+E{@D0YD~zY{N!cVN8K-jn&0Ej&MgRVs~~?7~njP9txa&YLKnAa9z^ zn=Sq%Z{EpjdMC}D=YyM@=srA?OI%9QPb}G2)YDPoq|TRn;DGY}0X4C6p-B6==*!so zs6yFTsL*okI_D6SvmA3Y%qC*4hB?b|XFHrm%X2Lx(-yy-MZsg56!W|z5-#9X-W=>m zY=b}4P9Xl-#=L3v`Hq6}cwE9fTuW2-V6o-5B3D!CuSIVcVR;fZeIfU5v_ntHnO^Je zBGm}&Epn=SpL=f+Q^I6i$Ql?_bG*j~mFAV0e#Lo$Mg#W{BtXUeUy z(ca;?pq?Ve&dbX~Q?E3h!Ign||C$3pIq53bsM~nS+yc7Yr0Wjg`1?tg`l(-N@%Q2Q zcMWqA-^ILDtEtIyt=VRPm&~{*@S6L$jo=~L7REDRyh3l4+CsQ2J~ ztY?>CK-}_%+vmS4A=XNfw*ebyZV}I}3g(H1ZTLWLT-(j(=N5-fU}|v7-z8XRmWiK9 zMu}gL_LQs8QDH_f0v8rIxaD$Ajg40W56AJzHr@!#j8@&dWV!J=vt*bp-v>GKrK62a z@nF|rd|g6F4bz6H9X(CGvx2{bOm|cM;NVm@tk&n$1VirS=#_o1Rw`~0{t4M7)~*sU z^C-&Rt`cZdD8r7wM9UUWiTh9~y1~jaLKfa@y0eyznD>YkZ~JY(%)jEZ=u~1I?Jhdj z1+k+=Pq~T2Wup9ctHg|nnQwSXtR+3A4F|eWGbbSKD?O$42AZwyuS2?{r?lIE&vywA z_0()O(nQN?ol4Bf;+LVp68CMr@aS<%4J`Q`Umxt@R8aDJs3`Ame-96e=jwxh@p}mP zA3~wLafZNUrPut z2c|wH)^A~1eaY4QjAAxU5%^J{fsa%PznAL zu(~e>E*CRTb9WXWT^8)DFF{oF?OUOY=d50Rnr8gbagZ5%6#1coN7jARIdt$lI2fm4 zzTcG^{v7z?w(ngj9k0~zUdZ3oa0~Fy8a~M3p3dOg+^I=Y3=TZFlVf-7Ij*f#i-iPDI@k1$+@-#fsCBSMt?vZ{Y9)s*ITV4-2 zvtojcPX&G)cq^-1Uf>^K(AFpTe|=fYuW%)cGd&&Bn%=r1m=-q2i|tE;y$0odQ5rq= z*U@9y8%O=#rDoHfKW`ft1!qLYG-F?lyK}cyM)oAP;c0g7J2A=Hce8c+?1P@)KDoQ@ z=N(U;aDUKjs#zB7YKg16W`&!seK0uOj2*@eq;)~*$CHqb08Q^zg;o;f zP>Q4ZX&RaoP9+ieNsbwhPx^Hq*qM~ay{LTE9l|5}f~= zr`dP&Mw!x5qV5UyKtSV|C1$WDEJ4#aPD~k?8M3bKt@de=HRRoxMOrSNI~_G-_m#m+ zt%h_}^dHbq?hRnxE^b>H{43VT+{aIamSantLr`|**%fyJThX-+kkljnsqw2)LG2~b@kNlAYjW1XRT{nlxLU)v0w1U01;8~LUJA?#kD(uj2rIxCrbVFH z$|w!9o8bgD0&j|EpA3!_Lw~T!VGexh=%PZ=VX?<2j-TN7nZrcy#h$z_thKLbduml{ z-zv_2BfU_}zauYwabvz~{D%p0dY*Rz&yTl!s(ZxU#GOESyrEL^p5oUD{yf=WOwyvV zU81TxM>d)Gu|B^E_%9-|73!FZl0>=Q-+|A^yZHl7a5316>`8-aHrew~e%0n>OCwXIB#8<-yt?8N^R zcsQ_{K85KZFxBr}^qR;U=zzISzSw#@f&OCbn*SLxz$h)P>4!DJ$12S;)kb?#&GQt@ z#|2BwDp_BOnpa`Hw@@4f%i7sXX?lJq#(WL9t+!ZlV^#!P)0wActGaV&AEo1Yiujc= z@?g$)I8RlH{VP?q8m(+oUK9rprGSE2(e%lJDmORTwlHOX>41Kv z30nHbbwFXn`PzfHK%gqF0$N@b&%%*aaUIYzt1zRdS{t$EZ)D?|d|X$0z_}$ZvL30@ zv_PM&Ql3iQu8M1bTA$j?U#jBjpXL!!#2e|*PpN*Q@qxwD!{HKWzuovf3dc2zH+Lv8 z?-$#?5BAhr7G5mh+cbJ|$dV!E&#HGS}4c>k#lmR6&^uj-pZa;7-3e zTu^++BJZs1Zqjr%A4S^<{J{A!k`={|#Xl+r@A;qNUjAelUS0PDKM2B{QqJrw#3zVh z&KQh#u2XiG{|TZ)6}P(-jn^f)MEIqgFpQkX-wq#8avT&5skuD@^Srn*_GW2->HaXp zmYIVgvrtHb>^`;)<`8KOAdhx=7`tbogs|p^eagGGq@H!kt9EkkbfMY$+wJs$%xigIuc%>Uf z^Yht-{(mK~e-n9En}spze>j1$sm|d9;@QAgf;zK9D}b9c{0{K(z|4Ane20PArvZ_; z2t9@l8a^4AgF0ItGh$$1$l)-I7lA7@`~@&Nlx=ccLoUlZ7YGBh-{#;Ez&NE1Uj~ff zW*dGG7{gE-{{wdYU=+78JjSoUIU3GNZeP9B1G9E=E=cEwhcvtdnA5b5d^4~qb}h^m1x^T+lv{g~Vd;__wB~dWV^YgA9k z{S0#K88s$tcnJm{z14D~Y&b5K-6pY4@wa1Q&HWk1ZWz;jgA__DR7VC{wbBZ3}XLBx&_>7NB*or>o4uGnXMI? zg^btkS!Gwodr4NQVv3!oWn-J#T%;-;0}iv}POQ{=O4DrS>`Ki>W}eMlTB-GqR@tdG zpN>>tW`9b$1>9=0%h-iWWp_t<2HaCA{g7E^-?rWn7WL*lfc{I5zM65&puW_+$3DWK zj$=R=Bgu%@^^Nz4%sW-r?}5Hrhv+HAd!?^t3-g}h?dYp)VWf4)zP@6`wFMD(EvmfF zR1=@mPig#13y})(9gi`7eLAYe3(sfoehL7cu_o(Bas06v}ul({e0k7t$KZ zPc`lat;f&758&8^69S+nM(Iz1a;~t(##=zAYWUy4D>eKR@Lc?A@Wc5rqZJ2l#u?Ii z_;)xVpdv_PX%6511dm%}aUv2BC-axmHmk}n%Y@6eJpVykUL)hg zlBH%fj%DCH#6~*;8A)i~wrZG-)O+o4vat=AiK~D{4#(SghcaNQzD>sTyzS4Afx*$= zo4kGdgkRg8kkbAHJn;d@x1j!T;vWGHK&QpQ9$Z|<>A+!4-UYbS#(3QxqW}zQ={O0L z0GDf+vw&3^rXqB;hU{rg1yVyw_T#Kv#|r+8cJTdP6x ze&jvp7n$`6rxrYKr2B?0-rBC7aCDW0n)>EA^*cKF@9sdz>yW$M`GmEs{)(!Mp*qwQ}b z{`kJt9s5Vy7?mm30)pfI%8l^>$xVQ8Eah0!#R1T_KsEh_ytLrN4TdkuwSNcwR)*WVAYK2vxgN-n-ST$ zs>L*Y&sR??Z@6~atcDHK)-@cQ_IpG1^ztd!PMC=mk~({acis?7n%NY7IV`0Q7bPgP&?KePEeNn;TFYzq$9 zg2SY^fCrTjFOW{kCne>R+WfH1FC#@d+>DhMs3FCLhmj)wIGg__X#ZlUZQA^wKx2$> zz-F{ELKqju08n0-6c^66ae1mQRbKK>CdG}M2AURt!Mly8+Vpx--0&S< zynmi>pDmz9d>U@xQDQv#DpK6QI#R^jK#GL7*mxW10F)V0B>01k_k;4n+$WLoIZ$A{ zOj5)vuyKzRynjY4Cj$`&*%4|$$sb0Htej-?r;#GwESo>q=HF-Ysd3L6r6xToRe4F@ zwrMjd&i@3I>3Xld+wXip0^}$>Wdm&c2>U~&4RIkIr$dSDb3nR+o znjU{Klxmt6$n`qwW;kuQxN8K8hqXCDy53m+*^y`sk&0>-0s}saR3yj5P7j0T1i!vi~6?dSy}V@ibeA3jI&vURZvfC6h#|47sBw;=rwq2Cogh|e9_+7rIpHjV(HnvUuIH??Q{|oQ3 zhw!g=hpd)<93n+5JX)LCtrhIAhDcI(tFph;-Rf{FYNh@7R?)#QJi@;jTaaG`9{@jf zfhj+nk-Bd=f!Y#siSE$Lp-iRDGEh_;>zw7P?BBn?ngM#Y>5NxGE>j#SDaeemGlRE| zB(Y)xT7+M&jn{!*hYrmw8-D^C!?jCo{0FEL*qc7=08sX(IYSc<${U)4IYELM8+M^Y zQD!hV7HAjQYZPmkHi+%zDbmYRJh4={VCGj?+0R zV9E|yPOV6WN4;OP&MIIA5Ax$W#xZX|$A1IYXmSg=QEy|^$4C&2VOoSt;87Z;YqfD2 zjsQ>4a3A1_8fF31aW&+VG!AdMW?X%YAYI=%<;^_u(v;CD4lJ))mAEX#m~sq(U4 z!?gB0KrFA18=!GSs}^A^@L>&a2Ua`MsT=+R*wvZG3?AcKV6TR$<&m!8KY)E2J_?)( ztgep)lJQAoYZ0hdl&|3&;DCmiLptUnc)2ELy`kftkk@E(u6d8^Oz%W8c#Px0XwV`= zft`?qsmx6A%xj^-qKO)t`9obEClFsPwqVv(tZWYWVoMTaD-!TJ4YRbpoPa+_z~3a` z|0ZCo?W2`bqvDdMyZMVs+cS;21bnLa=j)+D|799mJqPXb{0}CuUld*75l}Qw4f|^U zOpqnF)d?I3!}(GI?va4&M8OnyVeB6X?AZzU_5|#B7v$CbXinBZ&ZY@{KZ$AnhYpAw z^Ha_N2jhlq`DehDI7SI%{Fw0@7+g`X8OBjybWqwbM;;97f?hfDh~pHa5^@$TbkC3= zoO1%RBsrJ^4i-fRUj&SzXJfPgjbJcP^Mo@Fi-CDO3_RjzZTUQj)8q()@i{l|$6U(S zkl&2>>w!6g@h7l}hd2(MOJW)kK8H8L2P6&wA3=dzNX!<1yRUBqqt1>n9Jn81kFfDH z;O;1FrML(axC{76$ZxXcYk|ijd-w_{rzI@+y5I1Zn&#Bk{k9}lZUCZi}S)h_j$w6 zG|XH5#vJJ#zsnR8?6)??xsYHmfcz@czLv%r2mS7clA?#9Id*cy}Cj2mwp-F z7&Tpg10{hmYT;U@cKjHn+VBA-qsJ)2A1S$bjGDIZRshNMW7L|3l-xB&&D~!@$%DFN z?HDzIzloApb;bBlR54rl2EjcVPG;1%1cLseJJ?B}2z* zH*m^WHKTuolJoR)=8aX;`lADoEFCK~K2&Nj0g{{kJVePR+ipl+=hLxjivJf%e$XYy z;A@iG{~TWgNvCmIYGIg-a95wZDXEg1GTC=sKTbKo`ihbX?f+aCb1F!F?;it(c8P4b&KEfnsl z7Lf;*i*;pIma89qu=`iKO3bO^y-@hD=rGBhEn5GPkttq0C%0N#P)?S*0sQV&NH(_M zAm2t*^4*H#Q5tT>@yi}1ZMJ0NOyJp;czSeR zuDE}4uFv1z6A+$HjBM(n^qyCV@!P|BqV-*Wrr9dK#0sCmA&Bda_ z78nCj`bI+R-3eIljxc_}ZXxivvYqS)j26mpFfD%hcF}s_W|NJXz+AB{xAC38J@G&& zO;n46Aq*HNfx*OyR|7MkF_0H{2{=cSZv{RB*tx(?;K>^1Ac!{uBGXGl8~QDdo%kid z)FJZFXDKguA{ZPEb9Ib(GVo~NOYtLSSLPKQm)e+z>Z&fg5}tXKv8|u zk?!H2!?|A-&7LxYGur(5HU?%JrH8jSU|;I3B57=x`>XUA8}9AGZuDP?v&M!8Vn^yF zW5Z*Cei$1rH@7xrjSDYIfq#YCt#G+Sg*^8P%(U1$(almyc|J5}?rrD`!#egEcgVxT z>upD4BYG(#v@yNJZ^QG{_AJ8pawnI#JPF@F=Sr}T1T^+atV?@K8#K?2z41(zDB{e> zjiPp$Gcz*3TQ2PHOk;{o^V7=~|JM_?R#k}S z?u2RF!qedGY=aiX!fJL)9xQlk&VteJXB9L|vRW!cEp2~0C1LW&luO8%hPez|#Z-z# z6ilX|$QH<3t*BJy!p~Att4qdLiVB(t%jupem2$er{bD5sYocXnFl0Sm#T-!6Jm#z7 zghlCDVpK!e*70HW3>}{&XvwMCxwlx|5VnxbDJ7qCSn_T8 z+n{leG#+UNe}^Xj6!IT5OeLSVeyyYA(^efQC7-Z{|HKLLNf3{53|QAv_9F3eExsRE z*HX>}uGZv_;d~v3%*!z3*CLeR1l^r{Kj4Qo`3b;}YWO5zCveVcqK4UuvCeh^tDg&n ze|m5$AFc=ZDyc5^n^)6US%S^4-A9ssKg&+}xu&tGR!5=jQC{F4(mTzu#}EY|OPvJ)e84 zUCm<;#1PZloVL>lcxRYM#~V2KV^W~?M=S8>kFLOhAH_@a!&jZ!dwcEgra3J)6KRC; zOKxr~EZy!29vi+vt`ra2=`B)68?LR{-(YN*Rk1TAuwiCekrDWNX7#L;qGQ9ZnRR-R zF>k}HYc4lZTW8e;szq!;_`0UU3&Ov+%(I05Cu~uARAPNoE{9%Hg>$f2 z1eSXw?mJtmQb9vks%>A}S87t3cZdq=2CcW(2B>*%VtX_4pvtq5+o;xH8zdM&%6PD5 zY};DZ#7lj3Fci|bCoWEATaCDsTihdTSIVhv+Fc^CGJYfhQhiWTH7#vWyixAS2P7ao_I z+wQ;d9_C4VA#;wXeFRyw1nWyng@0gXXVLhG)<(&V2&)G`@th-wT=CT-XrrDjC<=&W zPjn8O`QpyQIfb#M_$XEI7~656Iv(Wap#2tMV!fZ z0_)^w6Y#&p#gQ!4XdDtN(65(BeLYw&3q)E3%7&8F z-fCd>m1p5c{0gvXEP1g|-zkh6K0#|er|I3t!cUaI`fKKU;gEYIYE0WAu7-xVwnf~7 z_}*Ssrn?hGEjMUd2-6MgtP=4YoN@@?y8-UjB)y$T^}`inW=U>|b)-bu!gW9ezFcZN zTThpYme#xo+)wyR5#vB9cOZ*c0qo?(#WbnsR^DChfjPH3s(xjKwzh|8NRO!fp4=~^ zM+%K=+Ub^U)5?|{o>ukiYj=RwircrLaQ**GwrS9$f->3uLc^~?aBW-mE0b+jZccob z%ilHpIq)FVJt`=ZUcDE=(M+VRq4iL$IA)xqF*sJ;tzj2#rfqEouaRR_9d`!SmulFF z)0b-G>KU3`6|k`flFfnrRYK$60NZ0T)I8(!%GJca%jwJ0pVZ;A6Cg{kh&1ols2#d+|taQmy!AI-fZFEdt;jQtjQ!Q#y#d^Rxm zrI~BvS->U0oZF>*E->wqoR*vhsk{bXFy%BzWmm;HpGzEEe4AjO{|WF8;N=Qe8oz?^ zJbpEHgcO`iKU>ZPvw;WWH_et8i$x!W+v|B@_rptbyyC)7!>LVuJ`Trv!(*;AJDr7Y zhO&+~u|tGocItUPg5vI$+ka!=wg@ZS?r(ZxdzyHYWKD!orw0>R(o$q@SzE(o?JQGY z+J3ZZ)5NX`SW=$YTkPVe1p`j0+3wvl{KwpycBC7-}Il@^n{MS60}5X*!5Sz5I*)jd;y0Pb$EeRowXm949Z! z@&)2OM2yt2iC*6%chlG2;voU^DfQ+!&bAhr;@Pi)@NE@Plgi~^bxOx9+w!%=CFVw9 z?kUO?U#>0gjN|=li*v={?#2H0({7a&_U^sb4LwA8Me3ii8*nrFJ>Bcv9w?XMm$k#G za*v!i%OeeLx3w`m($!6~hF`_;P7Sl+{VtAUvgO?qXGkl=qZ;P)h}Cw79;Gm^;bV|{ zG|UTfFsFh?wr2qibKn=pC&4xn3{JN=Cs4>4ItO>halCa_JE@gx^1(Q+64y=g4Cu$o z>7q7~nu+01!3mVJ!f*mBre&hf4_ynzQ&3W=;!Lr$ckyC@u}YN~B|IIMcs*`$YoFpiqVBy=jYujlE)p-5g*%GW6U@a;UzVfj ziqQDtd@*!EeDTs)v6}Z{uL5$!8aoU zYPbL?s%ePOZ7jr)x<9Xz7M2Q_>M4pIW39Ndf|#uGK#n4d=)p6n-5yqRCg$3y&1iibD|T7ZY+S5OeZKoc*B z@dKb1a)5=;!W*w5rG1HMnUejVeps;$`-v&+mYrzBQ$+=K)|5jQ>-L;1zho zjmp;HKzA{u7q()So(SCN1I`xaL^rlouA4CVvdiN;Vzh0mY}-IomfI$drcYdUX7T@R z1A%uT11rv39RNzTp~V_z*4+J?uAvzRt>YH>X@UUca=h+(~n?S+K|A$5%_F~ zojRD4T_*xNbvAw0pa<7h$3Fpl8E`6otm8SVyava0Hhu^AH5_|vOl2&F0DjO;2ujlt zzCFe882?2C#$jn>f-Z6Wl*#eY9VQemxfR`zkzxfr zFA1p#IWi(A`rTtAu367+#!`N|d*`&ZxDwsx3u!VAF0))|els{zj$#9eai@0j z!MjN9Yq(1}m%gf0yvAw&4O)WM)>6*z+tcWum8xmgtkd%{D-Oug_?iCf^r7RW$uP?|HBl55{=cMuua3avI z1BlHwjuS_JC{AlizNRzhpvXj^4yW#gpSrLAXwmeH5 zS=a9Sr*Dq%;F!0dLbB}U&2u1$nT#_lPqm=I8Z#q%9f`ywcl*!(w3^63+(1FU&{7ozz@(jYI0kgC(axnz}EJR`D>hO z9mRfGcc9fdnihe+k-Z((xo8pRaXYNAn4FG#Zv}3^XM$nM!|9Q>hQ^om+}=6wx+i{qNMC&ISdz*lJa4`7a)Re&-i z$5B;wsbaT?1LnIl%<)yThI4=;D6uMdj36-AgB;uw_}#WFfiETCdUsrYJn*d!rZQv{ zjF%k-@K|8#j5-NU1YXmYrygSpaL44h{6gTB8onHOLP}hIJ@D?-IOf;9$HwRnV@*|K z5Z?#oLmbmmxk5|;Ma{2t+U&aZ%%*o;wY=mBPo5tpO4<+DD;?xtn6`}_! zJzP-nxdbsDMoc!$V}WnOd#tkY<-kAA{Cf3x%{|D-=3>ByNXMroA&&E z^NbhW(T>sz+7-3RHf*-SqknJmMTeHxM>}4X|6=QWvHiG6_l~2?)Y+~c`J0E&c6Be@ zF4B*W)WxoU(G`V(v|-+0cJH&@)iTQCEnYXE`nm^CC4@Xt5?USHbkH)8o$z0H3FDp z>@mC6sqxq$? zd24f`R&aP!UD7OdZAYmwQufuPT$SHchhty$=Hx#b2Mjkh=b49+#a3ke3wXt@KN_pN zOIL#Dy3f_XEbF!R;7K>FTNL#meNWI3(`zFiVC{cET_n``ruFv}EUH_-*&A&vXk1@} zredMEq%P9aJKR`!sAYfSdhuvor1$6vUwH0+1qH+0SL6MlHPE>FF7Lit)D+gfTC=u3 zZBfcXYo9kMX?5zo#-jXX521W{pGsfNhcHX~Z=XJY&mBCrqRC6wq3Gufjht`ZBw|A& zIhiLtTOB>hH#+v7b&Ys8U$xFyF4hi>1mO1x@2JLlYEU$7b&bpzw_$A`98HY`cN)R* zl5=eMw!3RwM*2+!OX`w#OwY$X|M}8-Bbc_jRLYa08|1tFJny+f`&;f?n!hgjsm8m~_SKlzG|XXM8WZbV8_a!a*2@jnDq~^V>ilKuzRl8_#K}+?^X6$NqV2_WnCt8!PS_IA_LP zv**OTtDc+xbZfxZGQYO5a=}fFGZ(zpxPE~(r)5Fy9K01-uvOts!V|lm8WF9aXJX{h zrq)cO=EU^oO*p&uL|?NP@}y<1``u3|#|y3~B#03}j7-ExAqCE`&&X^Jz(RAoca?i} z+8S%2xyZO@L^SCECwb>|6Vdu^S2x11Xt*mSotJmnx8d38aEHm;niDnf6{;%NEZyJi z95dDk#7feCPUD1<&!+UVKrshxeA**W4uzQVrwGw*Dyk8)D_thJ3ws>4q3j(dy zorkvb8Om?IX5P%3H_Tgi^WXDYZmzz)eC{>3@4sW_+)jLP@I?GhXE;d5qKue(Qe?Ud z+Un3pIw_KG21LhUkuuTsx{e*i$YGJeV*6Zww%9q>pJGnL4niI7jGfF58Up^I@swk& zbW#8;kf5u?rdeSuYDjrDDF%f(r0C7CIp=asA?au=r;(nZoMCaEGD18`O=Gg3SVlZn zdFP68OkPRGso0c?6j!Y#ouGO@_}KU-yH&NM7;V&%j)Sf?DVQTjPs9#Nr09U)T8427 zOo&K_sTF#z@tjUPMD@U^z;}k6Fh0$mSw})s7y${LOX|n&@}y(b3O&!hhvq+H>SCU4dXGV(bx|$Ssbv-HM=#EQyBPsfMb0nt$0|qki*td~(!HAC(3EfQ! zz8v`vRzqh_4c|jPZb*>g373(cgB~ntAEkpp?`Mw@_fw8udE-wKXJI0abTYb+@{Y3Y zAs7;Ro`U0Gwoi%|{30px`DIe@Um?x4*AFJCsbzCFK>7qWvGFZgRxMA$`&SF)S58wLoZXWAwl1!{ehUF2WM#}l=X z;(`ZAaYKKR;)V{A;uRkuMS4d`3z7fFcyKlbC?+Tp;P{XUq>>^5s?0C}juVZ(C>Epv zyna$#mw7Go%~%gT$6aG1OU;kO_=9OV zf%7|G?Lr(2|GcDluli|IwbMQt7a5LC?q^!*+2Z&vmd}S*6n4@FoiF^3NL)WYGN_|2 zTxP=mXnN-^wVf}twsyXz-8H+5=LYyn#Qtw#Wwi64H%ly^=W)d@=q0C$Cvh#t z?l#3ZDkd-Jvmn5WDI>+3rZG?|K3*CDrQ)l<$HuSP_$N|))V?I#a0n|eq(!JmK*^s- zIv8rQHl?;I-Ksoj%Q=fq{7F&_5m92kqyY3Mn{qQy;)A3^kweHyK3O^`YK2@<6mjn1 zNlI@4bP93>C>^|T=hOZX+z4q2szcD!<1p^C`7}Ere;Iu)Qt&z{F1VExwLvo}zL}p$ z@zv7;mI-pe$P=Zn9h@h9?bPE!;4|L2l$WBmA+AHZq>yhTJrS=U85Gxf+orLDJirsU zyr8(C7c{LHuYefu>Rg*%WmD+@W-_WP8*^_*CVVoQuM2uZ?H-gDkp5Xf7ZM}=M@fhBw|L3B8V}yH1k+7VYK|-8>q4yEaqtH7E=TEEwYTm@^4l+e z!2&+CH9a@tdwV!t>X%vhgVeqT0emATO2bp7DscW_O^fqNF=t|=1f6oJTjtq?V!bs< zwA|?lnybZ>SIrV@;}E6x{EmX34~Z`wn0poP?;)B-SxSx6NrPU1e-iGlTC{9}-e^vZ zD_vYX30)raYrudD<>x4#t;RWGa_1WuGPO@t`Ldk4Uu#)YDy$uY;A~Ci3o<`+~_&x%tbWv@pE+42Dztlbh`}GfKp`w4e z^i^ytZIoA3*=oE`C|}ZVKYj;sty6|tQie6FVc>mvP4Y@EVZ4>gHJ&!PIT#G*sc0Of`;*u!xbS#Qht zZoVrj*5hsc6%q|JtCp|7K+FLTCKNN@4V1u2WIJPE%PZDgCUz`)9&oS?Cy1GZQ;Ver ZD<&UbBdmc&1~*)lo?fHE|3W0|{{bm`LLUGC diff --git a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/base_addresses.h b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/base_addresses.h new file mode 100644 index 000000000..ea3f0fbf1 --- /dev/null +++ b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/base_addresses.h @@ -0,0 +1,521 @@ +#ifndef __BASE_ADDRESSES_H +#define __BASE_ADDRESSES_H + +#if 33U == __CORTEX_M // NOLINT(readability-magic-numbers) + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + + #define R_MPU_BASE 0x40000000 + #define R_TZF_BASE 0x40000E00 + #define R_SRAM_BASE 0x40002000 + #define R_BUS_BASE 0x40003000 + #define R_DMAC0_BASE 0x40005000 + #define R_DMAC1_BASE 0x40005040 + #define R_DMAC2_BASE 0x40005080 + #define R_DMAC3_BASE 0x400050C0 + #define R_DMAC4_BASE 0x40005100 + #define R_DMAC5_BASE 0x40005140 + #define R_DMAC6_BASE 0x40005180 + #define R_DMAC7_BASE 0x400051C0 + #define R_DMA_BASE 0x40005200 + #define R_DTC_BASE 0x40005400 + #define R_ICU_BASE 0x40006000 + #define R_CPSCU_BASE 0x40008000 + #define R_DBG_BASE 0x4001B000 + #define R_FCACHE_BASE 0x4001C000 + #define R_SYSC_BASE 0x4001E000 + #define R_TSN_CAL_BASE 0x407FB17C + #define R_TSN_CTRL_BASE 0x400F3000 + #define R_PFS_BASE 0x40080800 + #define R_ELC_BASE 0x40082000 + #define R_TC_BASE 0x40083000 + #define R_IWDT_BASE 0x40083200 + #define R_WDT_BASE 0x40083400 + #define R_CAC_BASE 0x40083600 + #define R_MSTP_BASE 0x40084004 + +// #define R_MSTP_BASE 0x40084000 + #define R_POEG_BASE 0x4008A000 + #define R_USB_FS0_BASE 0x40090000 + #define R_SDHI0_BASE 0x40092000 + #define R_SSI0_BASE 0x4009D000 + #define R_IIC0_BASE 0x4009F000 + #define R_IIC0WU_BASE 0x4009F014 + #define R_IIC1_BASE 0x4009F100 + #define R_OSPI_BASE 0x400A6000 + #define R_CAN0_BASE 0x400A8000 + #define R_CAN1_BASE 0x400A9000 + #define R_CTSU_BASE 0x400D0000 + #define R_PSCU_BASE 0x400E0000 + #define R_AGT0_BASE 0x400E8000 + #define R_AGT1_BASE 0x400E8100 + #define R_AGT2_BASE 0x400E8200 + #define R_AGT3_BASE 0x400E8300 + #define R_AGT4_BASE 0x400E8400 + #define R_AGT5_BASE 0x400E8500 + #define R_TSN_CTRL_BASE 0x400F3000 + #define R_CRC_BASE 0x40108000 + #define R_DOC_BASE 0x40109000 + #define R_ETHERC_EDMAC_BASE 0x40114000 + #define R_ETHERC0_BASE 0x40114100 + #define R_SCI0_BASE 0x40118000 + #define R_SCI1_BASE 0x40118100 + #define R_SCI2_BASE 0x40118200 + #define R_SCI3_BASE 0x40118300 + #define R_SCI4_BASE 0x40118400 + #define R_SCI5_BASE 0x40118500 + #define R_SCI6_BASE 0x40118600 + #define R_SCI7_BASE 0x40118700 + #define R_SCI8_BASE 0x40118800 + #define R_SCI9_BASE 0x40118900 + #define R_SPI0_BASE 0x4011A000 + #define R_SPI1_BASE 0x4011A100 + #define R_GPT320_BASE 0x40169000 + #define R_GPT321_BASE 0x40169100 + #define R_GPT322_BASE 0x40169200 + #define R_GPT323_BASE 0x40169300 + #define R_GPT164_BASE 0x40169400 + #define R_GPT165_BASE 0x40169500 + #define R_GPT166_BASE 0x40169600 + #define R_GPT167_BASE 0x40169700 + #define R_GPT168_BASE 0x40169800 + #define R_GPT169_BASE 0x40169900 + #define R_GPT_OPS_BASE 0x40169A00 + #define R_ADC120_BASE 0x40170000 + #define R_ADC121_BASE 0x40170200 + #define R_DAC12_BASE 0x40171000 + #define R_FLAD_BASE 0x407FC000 + #define R_FACI_HP_CMD_BASE 0x407E0000 + #define R_FACI_HP_BASE 0x407FE000 + #define R_QSPI_BASE 0x64000000 + +/* Not included in SVD */ + #define R_PORT0_BASE 0x40080000 + #define R_PORT1_BASE 0x40080020 + #define R_PORT2_BASE 0x40080040 + #define R_PORT3_BASE 0x40080060 + #define R_PORT4_BASE 0x40080080 + #define R_PORT5_BASE 0x400800A0 + #define R_PORT6_BASE 0x400800C0 + #define R_PORT7_BASE 0x400800E0 + #define R_PORT8_BASE 0x40080100 + #define R_PORT9_BASE 0x40080120 + #define R_PORT10_BASE 0x40080140 + #define R_PORT11_BASE 0x40080160 + #define R_PFS_BASE 0x40080800 + #define R_PMISC_BASE 0x40080D00 // does not exist but FSP will not build without this + + #define R_GPT_POEG0_BASE 0x4008A000 + #define R_GPT_POEG1_BASE 0x4008A100 + #define R_GPT_POEG2_BASE 0x4008A200 + #define R_GPT_POEG3_BASE 0x4008A300 + + #define R_RTC_BASE 0x40083000 + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + +// #define R_MPU ((R_MPU_Type *) R_MPU_BASE) + #define R_TZF ((R_TZF_Type *) R_TZF_BASE) + #define R_SRAM ((R_SRAM_Type *) R_SRAM_BASE) + #define R_BUS ((R_BUS_Type *) R_BUS_BASE) + #define R_DMAC0 ((R_DMAC0_Type *) R_DMAC0_BASE) + #define R_DMAC1 ((R_DMAC0_Type *) R_DMAC1_BASE) + #define R_DMAC2 ((R_DMAC0_Type *) R_DMAC2_BASE) + #define R_DMAC3 ((R_DMAC0_Type *) R_DMAC3_BASE) + #define R_DMAC4 ((R_DMAC0_Type *) R_DMAC4_BASE) + #define R_DMAC5 ((R_DMAC0_Type *) R_DMAC5_BASE) + #define R_DMAC6 ((R_DMAC0_Type *) R_DMAC6_BASE) + #define R_DMAC7 ((R_DMAC0_Type *) R_DMAC7_BASE) + #define R_DMA ((R_DMA_Type *) R_DMA_BASE) + #define R_DTC ((R_DTC_Type *) R_DTC_BASE) + #define R_ICU ((R_ICU_Type *) R_ICU_BASE) + #define R_CPSCU ((R_CPSCU_Type *) R_CPSCU_BASE) + #define R_DEBUG ((R_DEBUG_Type *) R_DBG_BASE) + #define R_FCACHE ((R_FCACHE_Type *) R_FCACHE_BASE) + #define R_SYSTEM ((R_SYSTEM_Type *) R_SYSC_BASE) + #define R_TSN_CAL ((R_TSN_CAL_Type *) R_TSN_CAL_BASE) + #define R_TSN_CTRL ((R_TSN_CTRL_Type *) R_TSN_CTRL_BASE) + #define R_PFS ((R_PFS_Type *) R_PFS_BASE) + #define R_ELC ((R_ELC_Type *) R_ELC_BASE) + #define R_TC ((R_TC_Type *) R_TC_BASE) + #define R_IWDT ((R_IWDT_Type *) R_IWDT_BASE) + #define R_WDT ((R_WDT_Type *) R_WDT_BASE) + #define R_CAC ((R_CAC_Type *) R_CAC_BASE) + #define R_MSTP ((R_MSTP_Type *) R_MSTP_BASE) + #define R_POEG ((R_POEG_Type *) R_POEG_BASE) + #define R_USB_FS0 ((R_USB_FS0_Type *) R_USB_FS0_BASE) + #define R_SDHI0 ((R_SDHI0_Type *) R_SDHI0_BASE) + #define R_SSI0 ((R_SSI0_Type *) R_SSI0_BASE) + #define R_IIC0 ((R_IIC0_Type *) R_IIC0_BASE) + #define R_IIC0WU ((R_IIC0WU_Type *) R_IIC0WU_BASE) + #define R_IIC1 ((R_IIC0_Type *) R_IIC1_BASE) + #define R_OSPI ((R_OSPI_Type *) R_OSPI_BASE) + #define R_CAN0 ((R_CAN0_Type *) R_CAN0_BASE) + #define R_CAN1 ((R_CAN0_Type *) R_CAN1_BASE) + #define R_CTSU ((R_CTSU_Type *) R_CTSU_BASE) + #define R_PSCU ((R_PSCU_Type *) R_PSCU_BASE) + #define R_AGT0 ((R_AGT0_Type *) R_AGT0_BASE) + #define R_AGT1 ((R_AGT0_Type *) R_AGT1_BASE) + #define R_AGT2 ((R_AGT0_Type *) R_AGT2_BASE) + #define R_AGT3 ((R_AGT0_Type *) R_AGT3_BASE) + #define R_AGT4 ((R_AGT0_Type *) R_AGT4_BASE) + #define R_AGT5 ((R_AGT0_Type *) R_AGT5_BASE) + #define R_TSN_CTRL ((R_TSN_CTRL_Type *) R_TSN_CTRL_BASE) + #define R_CRC ((R_CRC_Type *) R_CRC_BASE) + #define R_DOC ((R_DOC_Type *) R_DOC_BASE) + #define R_ETHERC_EDMAC0 ((R_ETHERC_EDMAC0_Type *) R_ETHERC_EDMAC0_BASE) + #define R_ETHERC0 ((R_ETHERC0_Type *) R_ETHERC0_BASE) + #define R_SCI0 ((R_SCI0_Type *) R_SCI0_BASE) + #define R_SCI1 ((R_SCI0_Type *) R_SCI1_BASE) + #define R_SCI2 ((R_SCI0_Type *) R_SCI2_BASE) + #define R_SCI3 ((R_SCI0_Type *) R_SCI3_BASE) + #define R_SCI4 ((R_SCI0_Type *) R_SCI4_BASE) + #define R_SCI5 ((R_SCI0_Type *) R_SCI5_BASE) + #define R_SCI6 ((R_SCI0_Type *) R_SCI6_BASE) + #define R_SCI7 ((R_SCI0_Type *) R_SCI7_BASE) + #define R_SCI8 ((R_SCI0_Type *) R_SCI8_BASE) + #define R_SCI9 ((R_SCI0_Type *) R_SCI9_BASE) + #define R_SPI0 ((R_SPI0_Type *) R_SPI0_BASE) + #define R_SPI1 ((R_SPI0_Type *) R_SPI1_BASE) + #define R_GPT0 ((R_GPT0_Type *) R_GPT320_BASE) + #define R_GPT1 ((R_GPT0_Type *) R_GPT321_BASE) + #define R_GPT2 ((R_GPT0_Type *) R_GPT322_BASE) + #define R_GPT3 ((R_GPT0_Type *) R_GPT323_BASE) + #define R_GPT4 ((R_GPT0_Type *) R_GPT164_BASE) + #define R_GPT5 ((R_GPT0_Type *) R_GPT165_BASE) + #define R_GPT6 ((R_GPT0_Type *) R_GPT166_BASE) + #define R_GPT7 ((R_GPT0_Type *) R_GPT167_BASE) + #define R_GPT8 ((R_GPT0_Type *) R_GPT168_BASE) + #define R_GPT9 ((R_GPT0_Type *) R_GPT169_BASE) + #define R_GPT_OPS ((R_GPT_OPS_Type *) R_GPT_OPS_BASE) + #define R_ADC0 ((R_ADC0_Type *) R_ADC120_BASE) + #define R_ADC1 ((R_ADC0_Type *) R_ADC121_BASE) + #define R_DAC ((R_DAC_Type *) R_DAC12_BASE) + #define R_FLAD ((R_FLAD_Type *) R_FLAD_BASE) + #define R_FACI_HP_CMD ((R_FACI_HP_CMD_Type *) R_FACI_HP_CMD_BASE) + #define R_FACI_HP ((R_FACI_HP_Type *) R_FACI_HP_BASE) + #define R_QSPI ((R_QSPI_Type *) R_QSPI_BASE) + +/* Not in SVD. */ + + #define R_PORT0 ((R_PORT0_Type *) R_PORT0_BASE) + #define R_PORT1 ((R_PORT0_Type *) R_PORT1_BASE) + #define R_PORT2 ((R_PORT0_Type *) R_PORT2_BASE) + #define R_PORT3 ((R_PORT0_Type *) R_PORT3_BASE) + #define R_PORT4 ((R_PORT0_Type *) R_PORT4_BASE) + #define R_PORT5 ((R_PORT0_Type *) R_PORT5_BASE) + #define R_PORT6 ((R_PORT0_Type *) R_PORT6_BASE) + #define R_PORT7 ((R_PORT0_Type *) R_PORT7_BASE) + #define R_PORT8 ((R_PORT0_Type *) R_PORT8_BASE) + #define R_PORT9 ((R_PORT0_Type *) R_PORT9_BASE) + #define R_PORT10 ((R_PORT0_Type *) R_PORT10_BASE) + #define R_PORT11 ((R_PORT0_Type *) R_PORT11_BASE) + #define R_PFS ((R_PFS_Type *) R_PFS_BASE) + #define R_PMISC ((R_PMISC_Type *) R_PMISC_BASE) + + #define R_GPT_POEG0 ((R_GPT_POEG0_Type *) R_GPT_POEG0_BASE) + #define R_GPT_POEG1 ((R_GPT_POEG0_Type *) R_GPT_POEG1_BASE) + #define R_GPT_POEG2 ((R_GPT_POEG0_Type *) R_GPT_POEG2_BASE) + #define R_GPT_POEG3 ((R_GPT_POEG0_Type *) R_GPT_POEG3_BASE) + + #define R_RTC ((R_RTC_Type *) R_RTC_BASE) + +/** @} */ /* End of group Device_Peripheral_declaration */ + +#else + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + + #define R_ACMPHS0_BASE 0x40085000 + #define R_ACMPHS1_BASE 0x40085100 + #define R_ACMPHS2_BASE 0x40085200 + #define R_ACMPHS3_BASE 0x40085300 + #define R_ACMPHS4_BASE 0x40085400 + #define R_ACMPHS5_BASE 0x40085500 + #define R_ACMPLP_BASE 0x40085E00 + #define R_ADC0_BASE 0x4005C000 + #define R_ADC1_BASE 0x4005C200 + #define R_AGT0_BASE 0x40084000 + #define R_AGT1_BASE 0x40084100 + #define R_BUS_BASE 0x40003000 + #define R_CAC_BASE 0x40044600 + #define R_CAN0_BASE 0x40050000 + #define R_CAN1_BASE 0x40051000 + #define R_CRC_BASE 0x40074000 + #define R_CTSU_BASE 0x40081000 + #define R_CTSU2_BASE 0x40082000 + #define R_DAC_BASE 0x4005E000 + #define R_DAC8_BASE 0x4009E000 + #define R_DALI0_BASE 0x4008F000 + #define R_DEBUG_BASE 0x4001B000 + #define R_DMA_BASE 0x40005200 + #define R_DMAC0_BASE 0x40005000 + #define R_DMAC1_BASE 0x40005040 + #define R_DMAC2_BASE 0x40005080 + #define R_DMAC3_BASE 0x400050C0 + #define R_DMAC4_BASE 0x40005100 + #define R_DMAC5_BASE 0x40005140 + #define R_DMAC6_BASE 0x40005180 + #define R_DMAC7_BASE 0x400051C0 + #define R_DOC_BASE 0x40054100 + #define R_DRW_BASE 0x400E4000 + #define R_DTC_BASE 0x40005400 + #define R_ELC_BASE 0x40041000 + #define R_ETHERC0_BASE 0x40064100 + #define R_ETHERC_EDMAC_BASE 0x40064000 + #define R_ETHERC_EPTPC_BASE 0x40065800 + #define R_ETHERC_EPTPC1_BASE 0x40065C00 + #define R_ETHERC_EPTPC_CFG_BASE 0x40064500 + #define R_ETHERC_EPTPC_COMMON_BASE 0x40065000 + #define R_FACI_HP_CMD_BASE 0x407E0000 + #define R_FACI_HP_BASE 0x407FE000 + #define R_FACI_LP_BASE 0x407EC000 + #define R_FCACHE_BASE 0x4001C000 + #define R_GLCDC_BASE 0x400E0000 + #define R_GPT0_BASE 0x40078000 + #define R_GPT1_BASE 0x40078100 + #define R_GPT2_BASE 0x40078200 + #define R_GPT3_BASE 0x40078300 + #define R_GPT4_BASE 0x40078400 + #define R_GPT5_BASE 0x40078500 + #define R_GPT6_BASE 0x40078600 + #define R_GPT7_BASE 0x40078700 + #define R_GPT8_BASE 0x40078800 + #define R_GPT9_BASE 0x40078900 + #define R_GPT10_BASE 0x40078A00 + #define R_GPT11_BASE 0x40078B00 + #define R_GPT12_BASE 0x40078C00 + #define R_GPT13_BASE 0x40078D00 + #define R_GPT_ODC_BASE 0x4007B000 + #define R_GPT_OPS_BASE 0x40078FF0 + #define R_GPT_POEG0_BASE 0x40042000 + #define R_GPT_POEG1_BASE 0x40042100 + #define R_GPT_POEG2_BASE 0x40042200 + #define R_GPT_POEG3_BASE 0x40042300 + #define R_ICU_BASE 0x40006000 + #define R_IIC0_BASE 0x40053000 + #define R_IIC1_BASE 0x40053100 + #define R_IIC2_BASE 0x40053200 + #define R_IRDA_BASE 0x40070F00 + #define R_IWDT_BASE 0x40044400 + #define R_JPEG_BASE 0x400E6000 + #define R_KINT_BASE 0x40080000 + #define R_MMF_BASE 0x40001000 + #define R_MPU_MMPU_BASE 0x40000000 + #define R_MPU_SMPU_BASE 0x40000C00 + #define R_MPU_SPMON_BASE 0x40000D00 + #define R_MSTP_BASE 0x40047000 + #define R_OPAMP_BASE 0x40086000 + #define R_OPAMP2_BASE 0x400867F8 + #define R_PDC_BASE 0x40094000 + #define R_PORT0_BASE 0x40040000 + #define R_PORT1_BASE 0x40040020 + #define R_PORT2_BASE 0x40040040 + #define R_PORT3_BASE 0x40040060 + #define R_PORT4_BASE 0x40040080 + #define R_PORT5_BASE 0x400400A0 + #define R_PORT6_BASE 0x400400C0 + #define R_PORT7_BASE 0x400400E0 + #define R_PORT8_BASE 0x40040100 + #define R_PORT9_BASE 0x40040120 + #define R_PORT10_BASE 0x40040140 + #define R_PORT11_BASE 0x40040160 + #define R_PFS_BASE 0x40040800 + #define R_PMISC_BASE 0x40040D00 + #define R_QSPI_BASE 0x64000000 + #define R_RTC_BASE 0x40044000 + #define R_SCI0_BASE 0x40070000 + #define R_SCI1_BASE 0x40070020 + #define R_SCI2_BASE 0x40070040 + #define R_SCI3_BASE 0x40070060 + #define R_SCI4_BASE 0x40070080 + #define R_SCI5_BASE 0x400700A0 + #define R_SCI6_BASE 0x400700C0 + #define R_SCI7_BASE 0x400700E0 + #define R_SCI8_BASE 0x40070100 + #define R_SCI9_BASE 0x40070120 + #define R_SDADC0_BASE 0x4009C000 + #define R_SDHI0_BASE 0x40062000 + #define R_SDHI1_BASE 0x40062400 + #define R_SLCDC_BASE 0x40082000 + #define R_SPI0_BASE 0x40072000 + #define R_SPI1_BASE 0x40072100 + #define R_SRAM_BASE 0x40002000 + #define R_SRC_BASE 0x40048000 + #define R_SSI0_BASE 0x4004E000 + #define R_SSI1_BASE 0x4004E100 + #define R_SYSTEM_BASE 0x4001E000 + #define R_TSN_BASE 0x407EC000 + #define R_TSN_CAL_BASE 0x407FB17C + #define R_TSN_CTRL_BASE 0x4005D000 + #define R_USB_FS0_BASE 0x40090000 + #define R_USB_HS0_BASE 0x40060000 + #define R_WDT_BASE 0x40044200 + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + + #define R_ACMPHS0 ((R_ACMPHS0_Type *) R_ACMPHS0_BASE) + #define R_ACMPHS1 ((R_ACMPHS0_Type *) R_ACMPHS1_BASE) + #define R_ACMPHS2 ((R_ACMPHS0_Type *) R_ACMPHS2_BASE) + #define R_ACMPHS3 ((R_ACMPHS0_Type *) R_ACMPHS3_BASE) + #define R_ACMPHS4 ((R_ACMPHS0_Type *) R_ACMPHS4_BASE) + #define R_ACMPHS5 ((R_ACMPHS0_Type *) R_ACMPHS5_BASE) + #define R_ACMPLP ((R_ACMPLP_Type *) R_ACMPLP_BASE) + #define R_ADC0 ((R_ADC0_Type *) R_ADC0_BASE) + #define R_ADC1 ((R_ADC0_Type *) R_ADC1_BASE) + #define R_AGT0 ((R_AGT0_Type *) R_AGT0_BASE) + #define R_AGT1 ((R_AGT0_Type *) R_AGT1_BASE) + #define R_BUS ((R_BUS_Type *) R_BUS_BASE) + #define R_CAC ((R_CAC_Type *) R_CAC_BASE) + #define R_CAN0 ((R_CAN0_Type *) R_CAN0_BASE) + #define R_CAN1 ((R_CAN0_Type *) R_CAN1_BASE) + #define R_CRC ((R_CRC_Type *) R_CRC_BASE) + #if (BSP_FEATURE_CTSU_VERSION == 2) + #define R_CTSU ((R_CTSU2_Type *) R_CTSU2_BASE) + #else + #define R_CTSU ((R_CTSU_Type *) R_CTSU_BASE) + #endif + #define R_DAC ((R_DAC_Type *) R_DAC_BASE) + #define R_DAC8 ((R_DAC8_Type *) R_DAC8_BASE) + #define R_DALI0 ((R_DALI0_Type *) R_DALI0_BASE) + #define R_DEBUG ((R_DEBUG_Type *) R_DEBUG_BASE) + #define R_DMA ((R_DMA_Type *) R_DMA_BASE) + #define R_DMAC0 ((R_DMAC0_Type *) R_DMAC0_BASE) + #define R_DMAC1 ((R_DMAC0_Type *) R_DMAC1_BASE) + #define R_DMAC2 ((R_DMAC0_Type *) R_DMAC2_BASE) + #define R_DMAC3 ((R_DMAC0_Type *) R_DMAC3_BASE) + #define R_DMAC4 ((R_DMAC0_Type *) R_DMAC4_BASE) + #define R_DMAC5 ((R_DMAC0_Type *) R_DMAC5_BASE) + #define R_DMAC6 ((R_DMAC0_Type *) R_DMAC6_BASE) + #define R_DMAC7 ((R_DMAC0_Type *) R_DMAC7_BASE) + #define R_DOC ((R_DOC_Type *) R_DOC_BASE) + #define R_DRW ((R_DRW_Type *) R_DRW_BASE) + #define R_DTC ((R_DTC_Type *) R_DTC_BASE) + #define R_ELC ((R_ELC_Type *) R_ELC_BASE) + #define R_ETHERC0 ((R_ETHERC0_Type *) R_ETHERC0_BASE) + #define R_ETHERC_EDMAC ((R_ETHERC_EDMAC_Type *) R_ETHERC_EDMAC_BASE) + #define R_ETHERC_EPTPC ((R_ETHERC_EPTPC_Type *) R_ETHERC_EPTPC_BASE) + #define R_ETHERC_EPTPC1 ((R_ETHERC_EPTPC0_Type *) R_ETHERC_EPTPC1_BASE) + #define R_ETHERC_EPTPC_CFG ((R_ETHERC_EPTPC_CFG_Type *) R_ETHERC_EPTPC_CFG_BASE) + #define R_ETHERC_EPTPC_COMMON ((R_ETHERC_EPTPC_COMMON_Type *) R_ETHERC_EPTPC_COMMON_BASE) + #define R_FACI_HP_CMD ((R_FACI_HP_CMD_Type *) R_FACI_HP_CMD_BASE) + #define R_FACI_HP ((R_FACI_HP_Type *) R_FACI_HP_BASE) + #define R_FACI_LP ((R_FACI_LP_Type *) R_FACI_LP_BASE) + #define R_FCACHE ((R_FCACHE_Type *) R_FCACHE_BASE) + #define R_GLCDC ((R_GLCDC_Type *) R_GLCDC_BASE) + #define R_GPT0 ((R_GPT0_Type *) R_GPT0_BASE) + #define R_GPT1 ((R_GPT0_Type *) R_GPT1_BASE) + #define R_GPT2 ((R_GPT0_Type *) R_GPT2_BASE) + #define R_GPT3 ((R_GPT0_Type *) R_GPT3_BASE) + #define R_GPT4 ((R_GPT0_Type *) R_GPT4_BASE) + #define R_GPT5 ((R_GPT0_Type *) R_GPT5_BASE) + #define R_GPT6 ((R_GPT0_Type *) R_GPT6_BASE) + #define R_GPT7 ((R_GPT0_Type *) R_GPT7_BASE) + #define R_GPT8 ((R_GPT0_Type *) R_GPT8_BASE) + #define R_GPT9 ((R_GPT0_Type *) R_GPT9_BASE) + #define R_GPT10 ((R_GPT0_Type *) R_GPT10_BASE) + #define R_GPT11 ((R_GPT0_Type *) R_GPT11_BASE) + #define R_GPT12 ((R_GPT0_Type *) R_GPT12_BASE) + #define R_GPT13 ((R_GPT0_Type *) R_GPT13_BASE) + #define R_GPT_ODC ((R_GPT_ODC_Type *) R_GPT_ODC_BASE) + #define R_GPT_OPS ((R_GPT_OPS_Type *) R_GPT_OPS_BASE) + #define R_GPT_POEG0 ((R_GPT_POEG0_Type *) R_GPT_POEG0_BASE) + #define R_GPT_POEG1 ((R_GPT_POEG0_Type *) R_GPT_POEG1_BASE) + #define R_GPT_POEG2 ((R_GPT_POEG0_Type *) R_GPT_POEG2_BASE) + #define R_GPT_POEG3 ((R_GPT_POEG0_Type *) R_GPT_POEG3_BASE) + #define R_ICU ((R_ICU_Type *) R_ICU_BASE) + #define R_IIC0 ((R_IIC0_Type *) R_IIC0_BASE) + #define R_IIC1 ((R_IIC0_Type *) R_IIC1_BASE) + #define R_IIC2 ((R_IIC0_Type *) R_IIC2_BASE) + #define R_IRDA ((R_IRDA_Type *) R_IRDA_BASE) + #define R_IWDT ((R_IWDT_Type *) R_IWDT_BASE) + #define R_JPEG ((R_JPEG_Type *) R_JPEG_BASE) + #define R_KINT ((R_KINT_Type *) R_KINT_BASE) + #define R_MMF ((R_MMF_Type *) R_MMF_BASE) + #define R_MPU_MMPU ((R_MPU_MMPU_Type *) R_MPU_MMPU_BASE) + #define R_MPU_SMPU ((R_MPU_SMPU_Type *) R_MPU_SMPU_BASE) + #define R_MPU_SPMON ((R_MPU_SPMON_Type *) R_MPU_SPMON_BASE) + #define R_MSTP ((R_MSTP_Type *) R_MSTP_BASE) + #if (BSP_FEATURE_OPAMP_BASE_ADDRESS == 2U) + #define R_OPAMP ((R_OPAMP_Type *) R_OPAMP2_BASE) + #else + #define R_OPAMP ((R_OPAMP_Type *) R_OPAMP_BASE) + #endif + #define R_PDC ((R_PDC_Type *) R_PDC_BASE) + #define R_PORT0 ((R_PORT0_Type *) R_PORT0_BASE) + #define R_PORT1 ((R_PORT0_Type *) R_PORT1_BASE) + #define R_PORT2 ((R_PORT0_Type *) R_PORT2_BASE) + #define R_PORT3 ((R_PORT0_Type *) R_PORT3_BASE) + #define R_PORT4 ((R_PORT0_Type *) R_PORT4_BASE) + #define R_PORT5 ((R_PORT0_Type *) R_PORT5_BASE) + #define R_PORT6 ((R_PORT0_Type *) R_PORT6_BASE) + #define R_PORT7 ((R_PORT0_Type *) R_PORT7_BASE) + #define R_PORT8 ((R_PORT0_Type *) R_PORT8_BASE) + #define R_PORT9 ((R_PORT0_Type *) R_PORT9_BASE) + #define R_PORT10 ((R_PORT0_Type *) R_PORT10_BASE) + #define R_PORT11 ((R_PORT0_Type *) R_PORT11_BASE) + #define R_PFS ((R_PFS_Type *) R_PFS_BASE) + #define R_PMISC ((R_PMISC_Type *) R_PMISC_BASE) + #define R_QSPI ((R_QSPI_Type *) R_QSPI_BASE) + #define R_RTC ((R_RTC_Type *) R_RTC_BASE) + #define R_SCI0 ((R_SCI0_Type *) R_SCI0_BASE) + #define R_SCI1 ((R_SCI0_Type *) R_SCI1_BASE) + #define R_SCI2 ((R_SCI0_Type *) R_SCI2_BASE) + #define R_SCI3 ((R_SCI0_Type *) R_SCI3_BASE) + #define R_SCI4 ((R_SCI0_Type *) R_SCI4_BASE) + #define R_SCI5 ((R_SCI0_Type *) R_SCI5_BASE) + #define R_SCI6 ((R_SCI0_Type *) R_SCI6_BASE) + #define R_SCI7 ((R_SCI0_Type *) R_SCI7_BASE) + #define R_SCI8 ((R_SCI0_Type *) R_SCI8_BASE) + #define R_SCI9 ((R_SCI0_Type *) R_SCI9_BASE) + #define R_SDADC0 ((R_SDADC0_Type *) R_SDADC0_BASE) + #define R_SDHI0 ((R_SDHI0_Type *) R_SDHI0_BASE) + #define R_SDHI1 ((R_SDHI0_Type *) R_SDHI1_BASE) + #define R_SLCDC ((R_SLCDC_Type *) R_SLCDC_BASE) + #define R_SPI0 ((R_SPI0_Type *) R_SPI0_BASE) + #define R_SPI1 ((R_SPI0_Type *) R_SPI1_BASE) + #define R_SRAM ((R_SRAM_Type *) R_SRAM_BASE) + #define R_SRC ((R_SRC_Type *) R_SRC_BASE) + #define R_SSI0 ((R_SSI0_Type *) R_SSI0_BASE) + #define R_SSI1 ((R_SSI0_Type *) R_SSI1_BASE) + #define R_SYSTEM ((R_SYSTEM_Type *) R_SYSTEM_BASE) + #define R_TSN ((R_TSN_Type *) R_TSN_BASE) + #define R_TSN_CAL ((R_TSN_CAL_Type *) R_TSN_CAL_BASE) + #define R_TSN_CTRL ((R_TSN_CTRL_Type *) R_TSN_CTRL_BASE) + #define R_USB_FS0 ((R_USB_FS0_Type *) R_USB_FS0_BASE) + #define R_USB_HS0 ((R_USB_HS0_Type *) R_USB_HS0_BASE) + #define R_WDT ((R_WDT_Type *) R_WDT_BASE) + +/** @} */ /* End of group Device_Peripheral_declaration */ + +#endif + +#endif diff --git a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h index 52e18073c..68983b5cb 100644 --- a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h +++ b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h @@ -89,6 +89,14 @@ extern "C" { #define __FPU_PRESENT 0 /*!< FPU present or not */ #define __VTOR_PRESENT 1 /*!< Vector table VTOR register available or not */ #include "core_cm23.h" /*!< Cortex-M23 processor and core peripherals */ + #elif defined(RENESAS_CORTEX_M33) + #define __MPU_PRESENT 1 /*!< MPU present or not */ + #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 __FPU_PRESENT 1 /*!< FPU present or not */ + #define __VTOR_PRESENT 1 /*!< Vector table VTOR register available or not */ + #define __DSP_PRESENT 1 /*!< DSP present or not */ + #include "core_cm33.h" /*!< Cortex-M33 processor and core peripherals */ #endif #include "system.h" /*!< System */ @@ -1870,6 +1878,14 @@ typedef struct __IOM R_PFS_PORT_PIN_Type PIN[16]; /*!< (@ 0x00000000) Pin Function Selects */ } R_PFS_PORT_Type; /*!< Size = 64 (0x40) */ +/** + * @brief R_PMISC_PMSAR [PMSAR] (Port Security Attribution Register) + */ +typedef struct +{ + __IOM uint16_t PMSAR; /*!< (@ 0x00000000) Port Security Attribution Register */ +} R_PMISC_PMSAR_Type; /*!< Size = 2 (0x2) */ + /** * @brief R_RTC_RTCCR [RTCCR] (Time Capture Control Register) */ @@ -2281,12 +2297,36 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure __IOM uint16_t EXTRG : 1; /*!< [8..8] Trigger Select */ __IOM uint16_t TRGE : 1; /*!< [9..9] Trigger Start Enable */ __IOM uint16_t ADHSC : 1; /*!< [10..10] A/D Conversion Operation Mode Select */ - uint16_t : 2; + uint16_t : 1; + __IOM uint16_t ADIE : 1; /*!< [12..12] Scan End Interrupt Enable */ __IOM uint16_t ADCS : 2; /*!< [14..13] Scan Mode Select */ __IOM uint16_t ADST : 1; /*!< [15..15] A/D Conversion Start */ } ADCSR_b; }; - __IM uint16_t RESERVED; + + union + { + __IOM uint8_t ADREF; /*!< (@ 0x00000002) A/D status register */ + + struct + { + __IOM uint8_t ADF : 1; /*!< [0..0] Scanning end flag bitThis bit is a status bit that becomes + * "1" while scanning. */ + uint8_t : 6; + __IM uint8_t ADSCACT : 1; /*!< [7..7] Scanning status bit */ + } ADREF_b; + }; + + union + { + __IOM uint8_t ADEXREF; /*!< (@ 0x00000003) A/D enhancing status register */ + + struct + { + __IOM uint8_t GBADF : 1; /*!< [0..0] Group B scanning end flag bit. */ + uint8_t : 7; + } ADEXREF_b; + }; union { @@ -2362,7 +2402,7 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure * (ADADC.ADC[2:0] = 010b) */ } ADADC_b; }; - __IM uint8_t RESERVED1; + __IM uint8_t RESERVED; union { @@ -2372,7 +2412,8 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure { uint16_t : 1; __IOM uint16_t ADPRC : 2; /*!< [2..1] A/D Conversion Accuracy Specify */ - uint16_t : 2; + uint16_t : 1; + __IOM uint16_t DCE : 1; /*!< [4..4] Discharge Enable */ __IOM uint16_t ACE : 1; /*!< [5..5] A/D Data Register Automatic Clearing Enable */ uint16_t : 2; __IOM uint16_t DIAGVAL : 2; /*!< [9..8] Self-Diagnosis Conversion Voltage Select */ @@ -2419,7 +2460,9 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure * Group B in group scan mode. */ __IOM uint16_t OCSB : 1; /*!< [11..11] Internal Reference Voltage A/D Conversion Select for * Group B in group scan mode. */ - uint16_t : 4; + uint16_t : 2; + __IOM uint16_t EXSEL : 1; /*!< [14..14] Extended Analog Input Select */ + __IOM uint16_t EXOEN : 1; /*!< [15..15] Extended Analog Output Control */ } ADEXICR_b; }; @@ -2519,7 +2562,43 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure * storing the result of A/D conversion. */ } ADDR_b[28]; }; - __IM uint16_t RESERVED2[7]; + __IM uint16_t RESERVED1[5]; + + union + { + __IOM uint8_t ADAMPOFF; /*!< (@ 0x00000062) A/D RRAMP off state register */ + + struct + { + __IOM uint8_t OPOFF : 8; /*!< [7..0] OPOFF */ + } ADAMPOFF_b; + }; + + union + { + __IOM uint8_t ADTSTPR; /*!< (@ 0x00000063) A/D Test Protecting Release Register */ + + struct + { + __IOM uint8_t PRO : 1; /*!< [0..0] Test register protecting bit. */ + __IOM uint8_t B0WI : 1; /*!< [1..1] Bit 0 writing permission bit. */ + uint8_t : 6; + } ADTSTPR_b; + }; + + union + { + __IOM uint16_t ADDDACER; /*!< (@ 0x00000064) A/D RRAMP Discharge Period Register */ + + struct + { + __IOM uint16_t WRION : 5; /*!< [4..0] WRION */ + uint16_t : 3; + __IOM uint16_t WRIOFF : 5; /*!< [12..8] WRIOFF */ + uint16_t : 2; + __IOM uint16_t ADHS : 1; /*!< [15..15] ADHS */ + } ADDDACER_b; + }; union { @@ -2535,7 +2614,148 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure uint16_t : 5; } ADSHCR_b; }; - __IM uint16_t RESERVED3[9]; + + union + { + __IOM uint16_t ADEXTSTR; /*!< (@ 0x00000068) A/D Enhancing Test Register */ + + struct + { + __IOM uint16_t SHTEST : 3; /*!< [2..0] Test mode bit for S&H circuit.Test mode bit of S&H circuit + * only for channel. */ + uint16_t : 1; + __IOM uint16_t SWTST : 2; /*!< [5..4] Test selection bit for pressure switch. */ + uint16_t : 2; + __IOM uint16_t SHTRM : 2; /*!< [9..8] Current adjustment trim bit for S&H circuit.Trim bit + * for adjustment to hardening of process. */ + uint16_t : 1; + __IOM uint16_t ADTRM3 : 1; /*!< [11..11] Trim bit 3 for A/D hard macro.3bit Flash comparator + * power save bit for A/D hard macro to hardening of process. */ + __IOM uint16_t ADTRM2 : 2; /*!< [13..12] Trim bit 2 for A/D hard macro.Bias adjustment trim + * bit for A/D hard macro to hardening of process. */ + __IOM uint16_t ADTRM1 : 2; /*!< [15..14] Trim bit 1 for A/D hard macro.Timing adjustment trim + * bit for A/D hard macro to hardening of process. */ + } ADEXTSTR_b; + }; + + union + { + __IOM uint16_t ADTSTRA; /*!< (@ 0x0000006A) A/D Test Register A */ + + struct + { + __IOM uint16_t ATBUSSEL : 1; /*!< [0..0] Analog test bus selection bit. */ + __IOM uint16_t TSTSWREF : 3; /*!< [3..1] Pressure switch refreshing setting bit for S&H circuit + * amplifier test.Refreshing the pressure switch that opens + * for the DAC output voltage charge period when the amplifier + * of the S&H circuit is tested only for the channel is set. */ + uint16_t : 1; + __IOM uint16_t OCSW : 1; /*!< [5..5] Internal reference voltage analog switch test control + * bit. */ + __IOM uint16_t TSSW : 1; /*!< [6..6] Temperature sensor output analogue switch test control + * bit */ + uint16_t : 1; + __IOM uint16_t ADTEST_AD : 4; /*!< [11..8] Test bit for A/D analog module Bit for test of A/D analog + * module Details are described to the bit explanation. */ + __IOM uint16_t ADTEST_IO : 4; /*!< [15..12] Test bit for analog I/ODetails are described to the + * bit explanation. */ + } ADTSTRA_b; + }; + + union + { + __IOM uint16_t ADTSTRB; /*!< (@ 0x0000006C) A/D Test Register B */ + + struct + { + __IOM uint16_t ADVAL : 15; /*!< [14..0] Signal input bit bit14-0 for A/D analog module test.It + * corresponds to ADVAL 14:0 input of A/D analog module. */ + uint16_t : 1; + } ADTSTRB_b; + }; + + union + { + __IOM uint16_t ADTSTRC; /*!< (@ 0x0000006E) A/D Test Register C */ + + struct + { + __IOM uint16_t ADMD : 8; /*!< [7..0] Bit for A/D analog module test.ADMODE 6:0 input of A/D + * analog module. */ + uint16_t : 4; + __IOM uint16_t SYNCERR : 1; /*!< [12..12] Synchronous analog to digital conversion error bit. */ + uint16_t : 3; + } ADTSTRC_b; + }; + + union + { + __IOM uint16_t ADTSTRD; /*!< (@ 0x00000070) A/D Test Register D */ + + struct + { + __IOM uint16_t ADVAL16 : 1; /*!< [0..0] Signal input bit bit16 for A/D analog module test.It + * corresponds to ADVAL 16 input of A/D analog module. */ + uint16_t : 15; + } ADTSTRD_b; + }; + + union + { + __IOM uint16_t ADSWTSTR0; /*!< (@ 0x00000072) A/D Channel Switch Test Control Register 0 */ + + struct + { + __IOM uint16_t CHSW00 : 1; /*!< [0..0] Channel switch test control bit. */ + __IOM uint16_t CHSW01 : 1; /*!< [1..1] Channel switch test control bit. */ + __IOM uint16_t CHSW02 : 1; /*!< [2..2] Channel switch test control bit. */ + __IOM uint16_t CHSW03 : 1; /*!< [3..3] Channel switch test control bit. */ + __IOM uint16_t CHSW04 : 1; /*!< [4..4] Channel switch test control bit. */ + __IOM uint16_t CHSW05 : 1; /*!< [5..5] Channel switch test control bit. */ + uint16_t : 10; + } ADSWTSTR0_b; + }; + + union + { + __IOM uint16_t ADSWTSTR1; /*!< (@ 0x00000074) A/D Channel Switch Test Control Register 1 */ + + struct + { + __IOM uint16_t CHSW16 : 1; /*!< [0..0] Channel switch test control bit. */ + __IOM uint16_t CHSW17 : 1; /*!< [1..1] Channel switch test control bit. */ + __IOM uint16_t CHSW18 : 1; /*!< [2..2] Channel switch test control bit. */ + __IOM uint16_t CHSW19 : 1; /*!< [3..3] Channel switch test control bit. */ + __IOM uint16_t CHSW20 : 1; /*!< [4..4] Channel switch test control bit. */ + __IOM uint16_t CHSW21 : 1; /*!< [5..5] Channel switch test control bit. */ + uint16_t : 10; + } ADSWTSTR1_b; + }; + + union + { + __IOM uint16_t ADSWTSTR2; /*!< (@ 0x00000076) A/D Channel Switch Test Control Register 2 */ + + struct + { + __IOM uint16_t EX0SW : 1; /*!< [0..0] Test control of 0 enhancing input channel switches bit + * (ANEX0 switch) */ + __IOM uint16_t EX1SW : 1; /*!< [1..1] Test control of one enhancing input channel switch bit + * (ANEX1 switch). */ + uint16_t : 2; + __IOM uint16_t SHBYPS0 : 1; /*!< [4..4] S&H circuit by-pass switch control bit 0. */ + __IOM uint16_t SHBYPS1 : 1; /*!< [5..5] S&H circuit by-pass switch control bit 1. */ + __IOM uint16_t SHBYPS2 : 1; /*!< [6..6] S&H circuit by-pass switch control bit 2. */ + uint16_t : 1; + __IOM uint16_t GRP0SW : 1; /*!< [8..8] Test control of 0 group switches bit. */ + __IOM uint16_t GRP1SW : 1; /*!< [9..9] Test control of one group switch bit. */ + __IOM uint16_t GRP2SW : 1; /*!< [10..10] Test control of two group switches bit */ + __IOM uint16_t GRP3SW : 1; /*!< [11..11] Test control of two group switches bit */ + __IOM uint16_t GRPEX1SW : 1; /*!< [12..12] Switch test control bit of enhancing analog ANEX1 */ + uint16_t : 3; + } ADSWTSTR2_b; + }; + __IM uint16_t RESERVED2; union { @@ -2548,7 +2768,20 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure uint8_t : 3; } ADDISCR_b; }; - __IM uint8_t RESERVED4; + + union + { + __IOM uint8_t ADSWCR; /*!< (@ 0x0000007B) A/D Pressure Switch Control Register */ + + struct + { + __IOM uint8_t ADSWREF : 3; /*!< [2..0] These bits are read as 0. The write value should be 0.Refreshing + * the pressure switch in A/D analog module is set. */ + uint8_t : 1; + __IOM uint8_t SHSWREF : 3; /*!< [6..4] S&H Boost Switch Refresh Interval Setting */ + uint8_t : 1; + } ADSWCR_b; + }; union { @@ -2572,28 +2805,41 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure uint8_t : 6; } ADICR_b; }; - __IM uint16_t RESERVED5; + __IM uint16_t RESERVED3; union { - __IOM uint16_t ADGSPCR; /*!< (@ 0x00000080) A/D Group Scan Priority Control Register */ + __IOM uint16_t ADGSPCR; /*!< (@ 0x00000080) A/D Group Scan Priority Control Register */ struct { - __IOM uint16_t PGS : 1; /*!< [0..0] Group A priority control setting bit.Note: When the PGS - * bit is to be set to 1, the ADCSR.ADCS[1:0] bits must be - * set to 01b (group scan mode). If the bits are set to any - * other values, proper operation is not guaranteed. */ - __IOM uint16_t GBRSCN : 1; /*!< [1..1] Group B Restart Setting(Enabled only when PGS = 1. Reserved - * when PGS = 0.) */ - uint16_t : 13; - __IOM uint16_t GBRP : 1; /*!< [15..15] Group B Single Scan Continuous Start(Enabled only when - * PGS = 1. Reserved when PGS = 0.)Note: When the GBRP bit - * has been set to 1, single scan is performed continuously - * for group B regardless of the setting of the GBRSCN bit. */ + __IOM uint16_t PGS : 1; /*!< [0..0] Group A priority control setting bit.Note: When the PGS + * bit is to be set to 1, the ADCSR.ADCS[1:0] bits must be + * set to 01b (group scan mode). If the bits are set to any + * other values, proper operation is not guaranteed. */ + __IOM uint16_t GBRSCN : 1; /*!< [1..1] Group B Restart Setting(Enabled only when PGS = 1. Reserved + * when PGS = 0.) */ + uint16_t : 6; + __IOM uint16_t GBEXTRG : 1; /*!< [8..8] External trigger selection bit for group B. */ + uint16_t : 6; + __IOM uint16_t GBRP : 1; /*!< [15..15] Group B Single Scan Continuous Start(Enabled only when + * PGS = 1. Reserved when PGS = 0.)Note: When the GBRP bit + * has been set to 1, single scan is performed continuously + * for group B regardless of the setting of the GBRSCN bit. */ } ADGSPCR_b; }; - __IM uint16_t RESERVED6; + + union + { + __IM uint16_t ADGSCS; /*!< (@ 0x00000082) A/D Conversion Channel Status Register (for Group + * Scan) */ + + struct + { + __IM uint16_t CHSELGB : 8; /*!< [7..0] Channel status of Group B scan */ + __IM uint16_t CHSELGA : 8; /*!< [15..8] Channel status of Group A scan */ + } ADGSCS_b; + }; union { @@ -2618,7 +2864,18 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure * triggers during extended operation in double trigger mode. */ } ADDBLDRB_b; }; - __IM uint16_t RESERVED7; + + union + { + __IOM uint8_t ADSER; /*!< (@ 0x00000088) A/D Sampling Extension Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t SMPEX : 1; /*!< [7..7] Sampling extension control */ + } ADSER_b; + }; + __IM uint8_t RESERVED4; union { @@ -2634,7 +2891,7 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure __IOM uint8_t ADSLP : 1; /*!< [7..7] Sleep */ } ADHVREFCNT_b; }; - __IM uint8_t RESERVED8; + __IM uint8_t RESERVED5; union { @@ -2652,8 +2909,8 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure uint8_t : 2; } ADWINMON_b; }; - __IM uint8_t RESERVED9; - __IM uint16_t RESERVED10; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; union { @@ -2829,7 +3086,7 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure uint8_t : 6; } ADCMPSER_b; }; - __IM uint8_t RESERVED11; + __IM uint8_t RESERVED8; union { @@ -2844,7 +3101,7 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure __IOM uint8_t CMPLB : 1; /*!< [7..7] Compare window B Compare condition setting bit. */ } ADCMPBNSR_b; }; - __IM uint8_t RESERVED12; + __IM uint8_t RESERVED9; union { @@ -2883,1711 +3140,1516 @@ typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure uint8_t : 7; } ADCMPBSR_b; }; - __IM uint8_t RESERVED13; - __IM uint16_t RESERVED14[23]; - __IM uint8_t RESERVED15; + __IM uint8_t RESERVED10; + __IM uint16_t RESERVED11; union { - __IOM uint8_t ADSSTRL; /*!< (@ 0x000000DD) A/D Sampling State Register L */ + __IM uint16_t ADBUF0; /*!< (@ 0x000000B0) A/D Data Buffer Register 0 */ struct { - __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (AN016-AN027) */ - } ADSSTRL_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF0_b; }; union { - __IOM uint8_t ADSSTRT; /*!< (@ 0x000000DE) A/D Sampling State Register T */ + __IM uint16_t ADBUF1; /*!< (@ 0x000000B2) A/D Data Buffer Register 1 */ struct { - __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (temperature sensor output) */ - } ADSSTRT_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF1_b; }; union { - __IOM uint8_t ADSSTRO; /*!< (@ 0x000000DF) A/D Sampling State Register O */ + __IM uint16_t ADBUF2; /*!< (@ 0x000000B4) A/D Data Buffer Register 2 */ struct { - __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (Internal reference voltage) */ - } ADSSTRO_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF2_b; }; union { - __IOM uint8_t ADSSTR[16]; /*!< (@ 0x000000E0) A/D Sampling State Registers */ + __IM uint16_t ADBUF3; /*!< (@ 0x000000B6) A/D Data Buffer Register 3 */ struct { - __IOM uint8_t SST : 8; /*!< [7..0] Sampling time setting */ - } ADSSTR_b[16]; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF3_b; }; union { - __IOM uint16_t ADANIM; /*!< (@ 0x000000F0) A/D Channel Input Mode Select Register */ + __IM uint16_t ADBUF4; /*!< (@ 0x000000B8) A/D Data Buffer Register 4 */ struct { - __IOM uint16_t ANIM0 : 1; /*!< [0..0] Analog Channel Input Mode Select */ - __IOM uint16_t ANIM1 : 1; /*!< [1..1] Analog Channel Input Mode Select */ - __IOM uint16_t ANIM2 : 1; /*!< [2..2] Analog Channel Input Mode Select */ - __IOM uint16_t ANIM3 : 1; /*!< [3..3] Analog Channel Input Mode Select */ - uint16_t : 12; - } ADANIM_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF4_b; }; union { - __IOM uint8_t ADCALEXE; /*!< (@ 0x000000F2) A/D Calibration Execution Register */ + __IM uint16_t ADBUF5; /*!< (@ 0x000000BA) A/D Data Buffer Register 5 */ struct { - uint8_t : 6; - __IM uint8_t CALMON : 1; /*!< [6..6] Calibration Status Flag */ - __IOM uint8_t CALEXE : 1; /*!< [7..7] Calibration Start */ - } ADCALEXE_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF5_b; }; - __IM uint8_t RESERVED16; union { - __IOM uint8_t VREFAMPCNT; /*!< (@ 0x000000F4) A/D Dedicated Reference Voltage Circuit Control - * Register */ + __IM uint16_t ADBUF6; /*!< (@ 0x000000BC) A/D Data Buffer Register 6 */ struct { - __IOM uint8_t OLDETEN : 1; /*!< [0..0] OLDET Enable */ - __IOM uint8_t VREFADCG : 2; /*!< [2..1] VREFADC Output Voltage Control */ - __IOM uint8_t VREFADCEN : 1; /*!< [3..3] VREFADCG Enable */ - __IOM uint8_t BGREN : 1; /*!< [4..4] BGR Enable */ - uint8_t : 2; - __IOM uint8_t ADSLP : 1; /*!< [7..7] Sleep */ - } VREFAMPCNT_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF6_b; }; - __IM uint8_t RESERVED17; - __IM uint16_t RESERVED18; union { - __IOM uint16_t ADRD; /*!< (@ 0x000000F8) A/D Self-Diagnosis Data Register */ + __IM uint16_t ADBUF7; /*!< (@ 0x000000BE) A/D Data Buffer Register 7 */ struct { - __IM uint16_t AD : 16; /*!< [15..0] Converted Value 15 to 0 */ - } ADRD_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF7_b; }; union { - __IM uint8_t ADRST; /*!< (@ 0x000000FA) A/D Self-Diagnostic Status Register */ + __IM uint16_t ADBUF8; /*!< (@ 0x000000C0) A/D Data Buffer Register 8 */ struct { - __IM uint8_t DIAGST : 2; /*!< [1..0] Self-Diagnosis Status */ - uint8_t : 6; - } ADRST_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF8_b; }; - __IM uint8_t RESERVED19; - __IM uint16_t RESERVED20[82]; union { - __IOM uint16_t ADPGACR; /*!< (@ 0x000001A0) A/D Programmable Gain Amplifier Control Register */ + __IM uint16_t ADBUF9; /*!< (@ 0x000000C2) A/D Data Buffer Register 9 */ struct { - __IOM uint16_t P000SEL0 : 1; /*!< [0..0] A through amplifier is enable for PGA P000 */ - __IOM uint16_t P000SEL1 : 1; /*!< [1..1] The amplifier passing is enable for PGA P000 */ - __IOM uint16_t P000ENAMP : 1; /*!< [2..2] Amplifier enable bit for PGA P000 */ - __IOM uint16_t P000GEN : 1; /*!< [3..3] PGA P000 gain setting and enable bit */ - __IOM uint16_t P001SEL0 : 1; /*!< [4..4] A through amplifier is enable for PGA P001 */ - __IOM uint16_t P001SEL1 : 1; /*!< [5..5] The amplifier passing is enable for PGA P001 */ - __IOM uint16_t P001ENAMP : 1; /*!< [6..6] Amplifier enable bit for PGA P001 */ - __IOM uint16_t P001GEN : 1; /*!< [7..7] PGA P001 gain setting and enable bit */ - __IOM uint16_t P002SEL0 : 1; /*!< [8..8] A through amplifier is enable for PGA P002 */ - __IOM uint16_t P002SEL1 : 1; /*!< [9..9] The amplifier passing is enable for PGA P002 */ - __IOM uint16_t P002ENAMP : 1; /*!< [10..10] Amplifier enable bit for PGA P002 */ - __IOM uint16_t P002GEN : 1; /*!< [11..11] PGA P002 gain setting and enable bit */ - uint16_t : 4; - } ADPGACR_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF9_b; }; union { - __IOM uint16_t ADPGAGS0; /*!< (@ 0x000001A2) A/D Programmable Gain Amplifier Gain Setting - * Register 0 */ + __IM uint16_t ADBUF10; /*!< (@ 0x000000C4) A/D Data Buffer Register 10 */ struct { - __IOM uint16_t P000GAIN : 4; /*!< [3..0] PGA P000 gain setting bit.The gain magnification of (ADPGSDCR0.P000GEN= - * b) when the shingle end is input and each PGA P000 is set. - * When the differential motion is input, (ADPGSDCR0.P000GEN=1b) - * sets the gain magnification when the differential motion - * is input by the combination with ADPGSDCR0.P000DG 1:0. */ - __IOM uint16_t P001GAIN : 4; /*!< [7..4] PGA P001 gain setting bit.The gain magnification of (ADPGSDCR0.P001GEN= - * b) when the shingle end is input and each PGA P001 is set. - * When the differential motion is input, (ADPGSDCR0.P001GEN=1b) - * sets the gain magnification when the differential motion - * is input by the combination with ADPGSDCR0.P001DG 1:0. */ - __IOM uint16_t P002GAIN : 4; /*!< [11..8] PGA P002 gain setting bit.The gain magnification of - * (ADPGSDCR0.P002GEN=0b) when the shingle end is input and - * each PGA P002 is set. When the differential motion is input, - * (ADPGSDCR0.P002GEN=1b) sets the gain magnification when - * the differential motion is input by the combination with - * ADPGSDCR0.P002DG 1:0. */ - uint16_t : 4; - } ADPGAGS0_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF10_b; }; - __IM uint16_t RESERVED21[6]; union { - __IOM uint16_t ADPGADCR0; /*!< (@ 0x000001B0) A/D Programmable Gain Amplifier Differential - * Input Control Register */ + __IM uint16_t ADBUF11; /*!< (@ 0x000000C6) A/D Data Buffer Register 11 */ struct { - __IOM uint16_t P000DG : 2; /*!< [1..0] P000 Differential Input Gain SettingNOTE: When these - * bits are used, set {P000DEN, P000GEN} to 11b. */ - uint16_t : 1; - __IOM uint16_t P000DEN : 1; /*!< [3..3] P000 Differential Input Enable */ - __IOM uint16_t P001DG : 2; /*!< [5..4] P001 Differential Input Gain SettingNOTE: When these - * bits are used, set {P001DEN, P001GEN} to 11b. */ - uint16_t : 1; - __IOM uint16_t P001DEN : 1; /*!< [7..7] P001 Differential Input Enable */ - __IOM uint16_t P002DG : 2; /*!< [9..8] P002 Differential Input Gain SettingNOTE: When these - * bits are used, set {P002DEN, P002GEN} to 11b. */ - uint16_t : 1; - __IOM uint16_t P002DEN : 1; /*!< [11..11] P002 Differential Input Enable */ - __IOM uint16_t P003DG : 2; /*!< [13..12] P003 Differential Input Gain SettingNOTE: When these - * bits are used, set {P003DEN, P003GEN} to 11b. */ - uint16_t : 2; - } ADPGADCR0_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF11_b; }; -} R_ADC0_Type; /*!< Size = 434 (0x1b2) */ - -/* =========================================================================================================================== */ -/* ================ R_AGT0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Asynchronous General Purpose Timer (R_AGT0) - */ -typedef struct /*!< (@ 0x40084000) R_AGT0 Structure */ -{ union { - __IOM uint16_t AGT; /*!< (@ 0x00000000) AGT Counter Register */ + __IM uint16_t ADBUF12; /*!< (@ 0x000000C8) A/D Data Buffer Register 12 */ struct { - __IOM uint16_t AGT : 16; /*!< [15..0] 16bit counter and reload registerNOTE : When 1 is written - * to the TSTOP bit in the AGTCRn register, the 16-bit counter - * is forcibly stopped and set to FFFFH. */ - } AGT_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF12_b; }; union { - __IOM uint16_t AGTCMA; /*!< (@ 0x00000002) AGT Compare Match A Register */ + __IM uint16_t ADBUF13; /*!< (@ 0x000000CA) A/D Data Buffer Register 13 */ struct { - __IOM uint16_t AGTCMA : 16; /*!< [15..0] AGT Compare Match A data is stored.NOTE : When 1 is - * written to the TSTOP bit in the AGTCRn register, set to - * FFFFH */ - } AGTCMA_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF13_b; }; union { - __IOM uint16_t AGTCMB; /*!< (@ 0x00000004) AGT Compare Match B Register */ + __IM uint16_t ADBUF14; /*!< (@ 0x000000CC) A/D Data Buffer Register 14 */ struct { - __IOM uint16_t AGTCMB : 16; /*!< [15..0] AGT Compare Match B data is stored.NOTE : When 1 is - * written to the TSTOP bit in the AGTCR register, set to - * FFFFH */ - } AGTCMB_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF14_b; }; - __IM uint16_t RESERVED; union { - __IOM uint8_t AGTCR; /*!< (@ 0x00000008) AGT Control Register */ + __IM uint16_t ADBUF15; /*!< (@ 0x000000CE) A/D Data Buffer Register 15 */ struct { - __IOM uint8_t TSTART : 1; /*!< [0..0] AGT count start */ - __IM uint8_t TCSTF : 1; /*!< [1..1] AGT count status flag */ - __OM uint8_t TSTOP : 1; /*!< [2..2] AGT count forced stop */ - uint8_t : 1; - __IOM uint8_t TEDGF : 1; /*!< [4..4] Active edge judgment flag */ - __IOM uint8_t TUNDF : 1; /*!< [5..5] Underflow flag */ - __IOM uint8_t TCMAF : 1; /*!< [6..6] Compare match A flag */ - __IOM uint8_t TCMBF : 1; /*!< [7..7] Compare match B flag */ - } AGTCR_b; + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF15_b; }; union { - __IOM uint8_t AGTMR1; /*!< (@ 0x00000009) AGT Mode Register 1 */ + __IOM uint8_t ADBUFEN; /*!< (@ 0x000000D0) A/D Data Buffer Enable Register */ struct { - __IOM uint8_t TMOD : 3; /*!< [2..0] Operating mode */ - __IOM uint8_t TEDGPL : 1; /*!< [3..3] Edge polarity */ - __IOM uint8_t TCK : 3; /*!< [6..4] Count source */ - uint8_t : 1; - } AGTMR1_b; + __IOM uint8_t BUFEN : 1; /*!< [0..0] Data Buffer Enable */ + uint8_t : 7; + } ADBUFEN_b; }; + __IM uint8_t RESERVED12; union { - __IOM uint8_t AGTMR2; /*!< (@ 0x0000000A) AGT Mode Register 2 */ + __IOM uint8_t ADBUFPTR; /*!< (@ 0x000000D2) A/D Data Buffer Pointer Register */ struct { - __IOM uint8_t CKS : 3; /*!< [2..0] AGTLCLK/AGTSCLK count source clock frequency division - * ratio */ - uint8_t : 4; - __IOM uint8_t LPM : 1; /*!< [7..7] Low Power Mode */ - } AGTMR2_b; + __IM uint8_t BUFPTR : 4; /*!< [3..0] Data Buffer PointerThese bits indicate the number of + * data buffer to which the next A/D converted data is transferred. */ + __IM uint8_t PTROVF : 1; /*!< [4..4] Pointer Overflow Flag */ + uint8_t : 3; + } ADBUFPTR_b; }; - __IM uint8_t RESERVED1; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14[4]; + __IM uint8_t RESERVED15; union { - __IOM uint8_t AGTIOC; /*!< (@ 0x0000000C) AGT I/O Control Register */ + __IOM uint8_t ADSSTRL; /*!< (@ 0x000000DD) A/D Sampling State Register L */ struct { - __IOM uint8_t TEDGSEL : 1; /*!< [0..0] I/O polarity switchFunction varies depending on the operating - * mode. */ - uint8_t : 1; - __IOM uint8_t TOE : 1; /*!< [2..2] AGTOn output enable */ - uint8_t : 1; - __IOM uint8_t TIPF : 2; /*!< [5..4] Input filter */ - __IOM uint8_t TIOGT : 2; /*!< [7..6] Count control */ - } AGTIOC_b; + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (AN016-AN027) */ + } ADSSTRL_b; }; union { - __IOM uint8_t AGTISR; /*!< (@ 0x0000000D) AGT Event Pin Select Register */ + __IOM uint8_t ADSSTRT; /*!< (@ 0x000000DE) A/D Sampling State Register T */ struct { - uint8_t : 2; - __IOM uint8_t EEPS : 1; /*!< [2..2] AGTEE polarty selection */ - uint8_t : 5; - } AGTISR_b; + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (temperature sensor output) */ + } ADSSTRT_b; }; union { - __IOM uint8_t AGTCMSR; /*!< (@ 0x0000000E) AGT Compare Match Function Select Register */ + __IOM uint8_t ADSSTRO; /*!< (@ 0x000000DF) A/D Sampling State Register O */ struct { - __IOM uint8_t TCMEA : 1; /*!< [0..0] Compare match A register enable */ - __IOM uint8_t TOEA : 1; /*!< [1..1] AGTOA output enable */ - __IOM uint8_t TOPOLA : 1; /*!< [2..2] AGTOA polarity select */ - uint8_t : 1; - __IOM uint8_t TCMEB : 1; /*!< [4..4] Compare match B register enable */ - __IOM uint8_t TOEB : 1; /*!< [5..5] AGTOB output enable */ - __IOM uint8_t TOPOLB : 1; /*!< [6..6] AGTOB polarity select */ - uint8_t : 1; - } AGTCMSR_b; + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (Internal reference voltage) */ + } ADSSTRO_b; }; union { - __IOM uint8_t AGTIOSEL; /*!< (@ 0x0000000F) AGT Pin Select Register */ + __IOM uint8_t ADSSTR[16]; /*!< (@ 0x000000E0) A/D Sampling State Registers */ struct { - uint8_t : 4; - __IOM uint8_t TIES : 1; /*!< [4..4] AGTIO input enable */ - uint8_t : 3; - } AGTIOSEL_b; + __IOM uint8_t SST : 8; /*!< [7..0] Sampling time setting */ + } ADSSTR_b[16]; }; -} R_AGT0_Type; /*!< Size = 16 (0x10) */ - -/* =========================================================================================================================== */ -/* ================ R_BUS ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Bus Interface (R_BUS) - */ - -typedef struct /*!< (@ 0x40003000) R_BUS Structure */ -{ - __IOM R_BUS_CSa_Type CSa[8]; /*!< (@ 0x00000000) CS Registers */ - __IM uint32_t RESERVED[480]; - __IOM R_BUS_CSb_Type CSb[8]; /*!< (@ 0x00000800) CS Registers */ union { - __IOM uint16_t CSRECEN; /*!< (@ 0x00000880) CS Recovery Cycle Insertion Enable Register */ + __IOM uint16_t ADANIM; /*!< (@ 0x000000F0) A/D Channel Input Mode Select Register */ struct { - __IOM uint16_t RCVEN0 : 1; /*!< [0..0] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN1 : 1; /*!< [1..1] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN2 : 1; /*!< [2..2] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN3 : 1; /*!< [3..3] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN4 : 1; /*!< [4..4] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN5 : 1; /*!< [5..5] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN6 : 1; /*!< [6..6] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVEN7 : 1; /*!< [7..7] Separate Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM0 : 1; /*!< [8..8] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM1 : 1; /*!< [9..9] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM2 : 1; /*!< [10..10] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM3 : 1; /*!< [11..11] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM4 : 1; /*!< [12..12] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM5 : 1; /*!< [13..13] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM6 : 1; /*!< [14..14] Multiplexed Bus Recovery Cycle Insertion Enable */ - __IOM uint16_t RCVENM7 : 1; /*!< [15..15] Multiplexed Bus Recovery Cycle Insertion Enable */ - } CSRECEN_b; + __IOM uint16_t ANIM0 : 1; /*!< [0..0] Analog Channel Input Mode Select */ + __IOM uint16_t ANIM1 : 1; /*!< [1..1] Analog Channel Input Mode Select */ + __IOM uint16_t ANIM2 : 1; /*!< [2..2] Analog Channel Input Mode Select */ + __IOM uint16_t ANIM3 : 1; /*!< [3..3] Analog Channel Input Mode Select */ + uint16_t : 12; + } ADANIM_b; }; - __IM uint16_t RESERVED1; - __IM uint32_t RESERVED2[223]; - __IOM R_BUS_SDRAM_Type SDRAM; /*!< (@ 0x00000C00) SDRAM Registers */ - __IM uint32_t RESERVED3[235]; - __IOM R_BUS_BUSM_Type BUSM[6]; /*!< (@ 0x00001000) Master Bus Control Register Array */ - __IM uint32_t RESERVED4[58]; - __IOM R_BUS_BUSS_Type BUSS[16]; /*!< (@ 0x00001100) Slave Bus Control Register Array */ - __IM uint32_t RESERVED5[432]; - __IOM R_BUS_BUSERR_Type BUSERR[11]; /*!< (@ 0x00001800) Bus Error Registers */ -} R_BUS_Type; /*!< Size = 6320 (0x18b0) */ - -/* =========================================================================================================================== */ -/* ================ R_CAC ================ */ -/* =========================================================================================================================== */ -/** - * @brief Clock Frequency Accuracy Measurement Circuit (R_CAC) - */ - -typedef struct /*!< (@ 0x40044600) R_CAC Structure */ -{ union { - __IOM uint8_t CACR0; /*!< (@ 0x00000000) CAC Control Register 0 */ + __IOM uint8_t ADCALEXE; /*!< (@ 0x000000F2) A/D Calibration Execution Register */ struct { - __IOM uint8_t CFME : 1; /*!< [0..0] Clock Frequency Measurement Enable. */ - uint8_t : 7; - } CACR0_b; + uint8_t : 6; + __IM uint8_t CALMON : 1; /*!< [6..6] Calibration Status Flag */ + __IOM uint8_t CALEXE : 1; /*!< [7..7] Calibration Start */ + } ADCALEXE_b; }; + __IM uint8_t RESERVED16; union { - __IOM uint8_t CACR1; /*!< (@ 0x00000001) CAC Control Register 1 */ + __IOM uint8_t VREFAMPCNT; /*!< (@ 0x000000F4) A/D Dedicated Reference Voltage Circuit Control + * Register */ struct { - __IOM uint8_t CACREFE : 1; /*!< [0..0] CACREF Pin Input Enable */ - __IOM uint8_t FMCS : 3; /*!< [3..1] Measurement Target Clock Select */ - __IOM uint8_t TCSS : 2; /*!< [5..4] Measurement Target Clock Frequency Division Ratio Select */ - __IOM uint8_t EDGES : 2; /*!< [7..6] Valid Edge Select */ - } CACR1_b; + __IOM uint8_t OLDETEN : 1; /*!< [0..0] OLDET Enable */ + __IOM uint8_t VREFADCG : 2; /*!< [2..1] VREFADC Output Voltage Control */ + __IOM uint8_t VREFADCEN : 1; /*!< [3..3] VREFADCG Enable */ + __IOM uint8_t BGREN : 1; /*!< [4..4] BGR Enable */ + uint8_t : 2; + __IOM uint8_t ADSLP : 1; /*!< [7..7] Sleep */ + } VREFAMPCNT_b; }; + __IM uint8_t RESERVED17; + __IM uint16_t RESERVED18; union { - __IOM uint8_t CACR2; /*!< (@ 0x00000002) CAC Control Register 2 */ + __IOM uint16_t ADRD; /*!< (@ 0x000000F8) A/D Self-Diagnosis Data Register */ struct { - __IOM uint8_t RPS : 1; /*!< [0..0] Reference Signal Select */ - __IOM uint8_t RSCS : 3; /*!< [3..1] Measurement Reference Clock Select */ - __IOM uint8_t RCDS : 2; /*!< [5..4] Measurement Reference Clock Frequency Division Ratio - * Select */ - __IOM uint8_t DFS : 2; /*!< [7..6] Digital Filter Selection */ - } CACR2_b; + __IM uint16_t AD : 16; /*!< [15..0] Converted Value 15 to 0 */ + } ADRD_b; }; union { - __IOM uint8_t CAICR; /*!< (@ 0x00000003) CAC Interrupt Control Register */ + __IM uint8_t ADRST; /*!< (@ 0x000000FA) A/D Self-Diagnostic Status Register */ struct { - __IOM uint8_t FERRIE : 1; /*!< [0..0] Frequency Error Interrupt Request Enable */ - __IOM uint8_t MENDIE : 1; /*!< [1..1] Measurement End Interrupt Request Enable */ - __IOM uint8_t OVFIE : 1; /*!< [2..2] Overflow Interrupt Request Enable */ - uint8_t : 1; - __OM uint8_t FERRFCL : 1; /*!< [4..4] FERRF Clear */ - __OM uint8_t MENDFCL : 1; /*!< [5..5] MENDF Clear */ - __OM uint8_t OVFFCL : 1; /*!< [6..6] OVFF Clear */ - uint8_t : 1; - } CAICR_b; + __IM uint8_t DIAGST : 2; /*!< [1..0] Self-Diagnosis Status */ + uint8_t : 6; + } ADRST_b; }; + __IM uint8_t RESERVED19; + __IM uint16_t RESERVED20[82]; union { - __IM uint8_t CASTR; /*!< (@ 0x00000004) CAC Status Register */ + __IOM uint16_t ADPGACR; /*!< (@ 0x000001A0) A/D Programmable Gain Amplifier Control Register */ struct { - __IM uint8_t FERRF : 1; /*!< [0..0] Frequency Error Flag */ - __IM uint8_t MENDF : 1; /*!< [1..1] Measurement End Flag */ - __IM uint8_t OVFF : 1; /*!< [2..2] Counter Overflow Flag */ - uint8_t : 5; - } CASTR_b; + __IOM uint16_t P000SEL0 : 1; /*!< [0..0] A through amplifier is enable for PGA P000 */ + __IOM uint16_t P000SEL1 : 1; /*!< [1..1] The amplifier passing is enable for PGA P000 */ + __IOM uint16_t P000ENAMP : 1; /*!< [2..2] Amplifier enable bit for PGA P000 */ + __IOM uint16_t P000GEN : 1; /*!< [3..3] PGA P000 gain setting and enable bit */ + __IOM uint16_t P001SEL0 : 1; /*!< [4..4] A through amplifier is enable for PGA P001 */ + __IOM uint16_t P001SEL1 : 1; /*!< [5..5] The amplifier passing is enable for PGA P001 */ + __IOM uint16_t P001ENAMP : 1; /*!< [6..6] Amplifier enable bit for PGA P001 */ + __IOM uint16_t P001GEN : 1; /*!< [7..7] PGA P001 gain setting and enable bit */ + __IOM uint16_t P002SEL0 : 1; /*!< [8..8] A through amplifier is enable for PGA P002 */ + __IOM uint16_t P002SEL1 : 1; /*!< [9..9] The amplifier passing is enable for PGA P002 */ + __IOM uint16_t P002ENAMP : 1; /*!< [10..10] Amplifier enable bit for PGA P002 */ + __IOM uint16_t P002GEN : 1; /*!< [11..11] PGA P002 gain setting and enable bit */ + __IOM uint16_t P003SEL0 : 1; /*!< [12..12] A through amplifier is enable for PGA P003 */ + __IOM uint16_t P003SEL1 : 1; /*!< [13..13] The amplifier passing is enable for PGA P003 */ + __IOM uint16_t P003ENAMP : 1; /*!< [14..14] Amplifier enable bit for PGA P003 */ + __IOM uint16_t P003GEN : 1; /*!< [15..15] PGA P003 gain setting and enable bit */ + } ADPGACR_b; }; - __IM uint8_t RESERVED; union { - __IOM uint16_t CAULVR; /*!< (@ 0x00000006) CAC Upper-Limit Value Setting Register */ + __IOM uint16_t ADPGAGS0; /*!< (@ 0x000001A2) A/D Programmable Gain Amplifier Gain Setting + * Register 0 */ struct { - __IOM uint16_t CAULVR : 16; /*!< [15..0] CAULVR is a 16-bit readable/writable register that stores - * the upper-limit value of the frequency. */ - } CAULVR_b; - }; - + __IOM uint16_t P000GAIN : 4; /*!< [3..0] PGA P000 gain setting bit.The gain magnification of (ADPGSDCR0.P000GEN= + * b) when the shingle end is input and each PGA P000 is set. + * When the differential motion is input, (ADPGSDCR0.P000GEN=1b) + * sets the gain magnification when the differential motion + * is input by the combination with ADPGSDCR0.P000DG 1:0. */ + __IOM uint16_t P001GAIN : 4; /*!< [7..4] PGA P001 gain setting bit.The gain magnification of (ADPGSDCR0.P001GEN= + * b) when the shingle end is input and each PGA P001 is set. + * When the differential motion is input, (ADPGSDCR0.P001GEN=1b) + * sets the gain magnification when the differential motion + * is input by the combination with ADPGSDCR0.P001DG 1:0. */ + __IOM uint16_t P002GAIN : 4; /*!< [11..8] PGA P002 gain setting bit.The gain magnification of + * (ADPGSDCR0.P002GEN=0b) when the shingle end is input and + * each PGA P002 is set. When the differential motion is input, + * (ADPGSDCR0.P002GEN=1b) sets the gain magnification when + * the differential motion is input by the combination with + * ADPGSDCR0.P002DG 1:0. */ + __IOM uint16_t P003GAIN : 4; /*!< [15..12] PGA P003 gain setting bit.The gain magnification of + * (ADPGSDCR0.P003GEN=0b) when the shingle end is input and + * each PGA P003 is set. When the differential motion is input, + * (ADPGSDCR0.P003GEN=1b) sets the gain magnification when + * the differential motion is input by the combination with + * ADPGSDCR0.P003DG 1:0. */ + } ADPGAGS0_b; + }; + __IM uint16_t RESERVED21[6]; + union { - __IOM uint16_t CALLVR; /*!< (@ 0x00000008) CAC Lower-Limit Value Setting Register */ + __IOM uint16_t ADPGADCR0; /*!< (@ 0x000001B0) A/D Programmable Gain Amplifier Differential + * Input Control Register */ struct { - __IOM uint16_t CALLVR : 16; /*!< [15..0] CALLVR is a 16-bit readable/writable register that stores - * the lower-limit value of the frequency. */ - } CALLVR_b; + __IOM uint16_t P000DG : 2; /*!< [1..0] P000 Differential Input Gain SettingNOTE: When these + * bits are used, set {P000DEN, P000GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P000DEN : 1; /*!< [3..3] P000 Differential Input Enable */ + __IOM uint16_t P001DG : 2; /*!< [5..4] P001 Differential Input Gain SettingNOTE: When these + * bits are used, set {P001DEN, P001GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P001DEN : 1; /*!< [7..7] P001 Differential Input Enable */ + __IOM uint16_t P002DG : 2; /*!< [9..8] P002 Differential Input Gain SettingNOTE: When these + * bits are used, set {P002DEN, P002GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P002DEN : 1; /*!< [11..11] P002 Differential Input Enable */ + __IOM uint16_t P003DG : 2; /*!< [13..12] P003 Differential Input Gain SettingNOTE: When these + * bits are used, set {P003DEN, P003GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P003DEN : 1; /*!< [15..15] P003 Differential Input Enable */ + } ADPGADCR0_b; }; + __IM uint16_t RESERVED22; union { - __IM uint16_t CACNTBR; /*!< (@ 0x0000000A) CAC Counter Buffer Register */ + __IOM uint8_t ADPGADBS0; /*!< (@ 0x000001B4) A/D Programmable Gain Amplifier Differential + * Input Bias Select Register 0 */ struct { - __IM uint16_t CACNTBR : 16; /*!< [15..0] CACNTBR is a 16-bit read-only register that retains - * the counter value at the time a valid reference signal - * edge is input */ - } CACNTBR_b; + __IOM uint8_t P0BIAS : 1; /*!< [0..0] Programmable Gain Amplifiers P000 to P002 Bias Voltage + * SelectNOTE: This bit selects the input bias voltage value + * when differential inputs are used. */ + uint8_t : 7; + } ADPGADBS0_b; }; -} R_CAC_Type; /*!< Size = 12 (0xc) */ + + union + { + __IOM uint8_t ADPGADBS1; /*!< (@ 0x000001B5) A/D Programmable Gain Amplifier Differential + * Input Bias Select Register 1 */ + + struct + { + __IOM uint8_t P3BIAS : 1; /*!< [0..0] Programmable Gain Amplifiers P003 Bias Voltage SelectNOTE: + * This bit selects the input bias voltage value when differential + * inputs are used. */ + uint8_t : 7; + } ADPGADBS1_b; + }; + __IM uint16_t RESERVED23[21]; + + union + { + __IOM uint8_t ADREFMON; /*!< (@ 0x000001E0) A/D External Reference Voltage Monitor Register */ + + struct + { + __IOM uint8_t PGAMON : 3; /*!< [2..0] PGA Monitor Output Enable */ + uint8_t : 1; + __IOM uint8_t MONSEL : 4; /*!< [7..4] Monitor output selection bit. */ + } ADREFMON_b; + }; + __IM uint8_t RESERVED24; + __IM uint16_t RESERVED25; +} R_ADC0_Type; /*!< Size = 484 (0x1e4) */ /* =========================================================================================================================== */ -/* ================ R_CAN0 ================ */ +/* ================ R_PSCU ================ */ /* =========================================================================================================================== */ /** - * @brief Controller Area Network (CAN) Module (R_CAN0) + * @brief Peripheral Security Control Unit (R_PSCU) */ -typedef struct /*!< (@ 0x40050000) R_CAN0 Structure */ +typedef struct /*!< (@ 0x400E0000) R_PSCU Structure */ { - __IM uint32_t RESERVED[128]; - __IOM R_CAN0_MB_Type MB[32]; /*!< (@ 0x00000200) Mailbox */ + __IM uint32_t RESERVED; union { - __IOM uint32_t MKR[8]; /*!< (@ 0x00000400) Mask Register */ + __IOM uint32_t PSARB; /*!< (@ 0x00000004) Peripheral Security Attribution Register B */ struct { - __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ - __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ - uint32_t : 3; - } MKR_b[8]; + uint32_t : 1; + __IOM uint32_t PSARB1 : 1; /*!< [1..1] CAN1 and the MSTPCRB.MSTPB1 bit security attribution */ + __IOM uint32_t PSARB2 : 1; /*!< [2..2] CAN0 and the MSTPCRB.MSTPB2 bit security attribution */ + __IOM uint32_t PSARB3 : 1; /*!< [3..3] CEC and the MSTPCRB.MSTPB3 bit security attribution */ + uint32_t : 2; + __IM uint32_t PSARB6 : 1; /*!< [6..6] QSPI and the MSTPCRB.MSTPB6 bit security attribution */ + __IOM uint32_t PSARB7 : 1; /*!< [7..7] IIC2 and the MSTPCRB.MSTPB7 bit security attribution */ + __IOM uint32_t PSARB8 : 1; /*!< [8..8] IIC1 and the MSTPCRB.MSTPB8 bit security attribution */ + __IOM uint32_t PSARB9 : 1; /*!< [9..9] IIC0 and the MSTPCRB.MSTPB9 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARB11 : 1; /*!< [11..11] USBFS and the MSTPCRB.MSTPB11 bit security attribution */ + __IOM uint32_t PSARB12 : 1; /*!< [12..12] USBHS and the MSTPCRB.MSTPB12 bit security attribution */ + uint32_t : 2; + __IM uint32_t PSARB15 : 1; /*!< [15..15] ETHER0/EDMAC0, the MSTPCRB.MSTPB15 bit and the PFENET.PHYMODE0 + * bit security attribution */ + __IM uint32_t PSARB16 : 1; /*!< [16..16] OSPI and the MSTPCRB.MSTPB16 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARB18 : 1; /*!< [18..18] RSPI1 and the MSTPCRB.MSTPB18 bit security attribution */ + __IOM uint32_t PSARB19 : 1; /*!< [19..19] RSPI0 and the MSTPCRB.MSTPB19 bit security attribution */ + uint32_t : 2; + __IOM uint32_t PSARB22 : 1; /*!< [22..22] SCI9 and the MSTPCRB.MSTPB22 bit security attribution */ + __IOM uint32_t PSARB23 : 1; /*!< [23..23] SCI8 and the MSTPCRB.MSTPB23 bit security attribution */ + __IOM uint32_t PSARB24 : 1; /*!< [24..24] SCI7 and the MSTPCRB.MSTPB24 bit security attribution */ + __IOM uint32_t PSARB25 : 1; /*!< [25..25] SCI6 and the MSTPCRB.MSTPB25 bit security attribution */ + __IOM uint32_t PSARB26 : 1; /*!< [26..26] SCI5 and the MSTPCRB.MSTPB26 bit security attribution */ + __IOM uint32_t PSARB27 : 1; /*!< [27..27] SCI4 and the MSTPCRB.MSTPB27 bit security attribution */ + __IOM uint32_t PSARB28 : 1; /*!< [28..28] SCI3 and the MSTPCRB.MSTPB28 bit security attribution */ + __IOM uint32_t PSARB29 : 1; /*!< [29..29] SCI2 and the MSTPCRB.MSTPB29 bit security attribution */ + __IOM uint32_t PSARB30 : 1; /*!< [30..30] SCI1 and the MSTPCRB.MSTPB30 bit security attribution */ + __IOM uint32_t PSARB31 : 1; /*!< [31..31] SCI0 and the MSTPCRB.MSTPB31 bit security attribution */ + } PSARB_b; }; union { - __IOM uint32_t FIDCR[2]; /*!< (@ 0x00000420) FIFO Received ID Compare Registers */ + __IOM uint32_t PSARC; /*!< (@ 0x00000008) Peripheral Security Attribution Register C */ struct { - __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ - __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ - uint32_t : 1; - __IOM uint32_t RTR : 1; /*!< [30..30] Remote Transmission Request */ - __IOM uint32_t IDE : 1; /*!< [31..31] ID Extension */ - } FIDCR_b[2]; + __IOM uint32_t PSARC0 : 1; /*!< [0..0] CAC and the MSTPCRC.MSTPC0 bit security attribution */ + __IOM uint32_t PSARC1 : 1; /*!< [1..1] CRC and the MSTPCRC.MSTPC1 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARC3 : 1; /*!< [3..3] CTSU and the MSTPCRC.MSTPC3 bit security attribution */ + uint32_t : 4; + __IOM uint32_t PSARC8 : 1; /*!< [8..8] SSIE0 and the MSTPCRC.MSTPC8 bit security attribution */ + uint32_t : 3; + __IOM uint32_t PSARC12 : 1; /*!< [12..12] SDHI0 and the MSTPCRC.MSTPC12 bit security attribution */ + __IOM uint32_t PSARC13 : 1; /*!< [13..13] DOC and the MSTPCRC.MSTPC13 bit security attribution */ + uint32_t : 12; + __IOM uint32_t PSARC26 : 1; /*!< [26..26] CANFD1 and the MSTPCRC.MSTPC26 bit security attribution */ + __IOM uint32_t PSARC27 : 1; /*!< [27..27] CANFD0 and the MSTPCRC.MSTPC27 bit security attribution */ + uint32_t : 3; + __IOM uint32_t PSARC31 : 1; /*!< [31..31] TSIP and the MSTPCRC.MSTPC31 bit security attribution */ + } PSARC_b; }; union { - __IOM uint32_t MKIVLR; /*!< (@ 0x00000428) Mask Invalid Register */ + __IOM uint32_t PSARD; /*!< (@ 0x0000000C) Peripheral Security Attribution Register D */ struct { - __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Mask Invalid */ - __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Mask Invalid */ - __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Mask Invalid */ - __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Mask Invalid */ - __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Mask Invalid */ - __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Mask Invalid */ - __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Mask Invalid */ - __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Mask Invalid */ - __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Mask Invalid */ - __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Mask Invalid */ - __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Mask Invalid */ - __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Mask Invalid */ - __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Mask Invalid */ - __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Mask Invalid */ - __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Mask Invalid */ - __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Mask Invalid */ - __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Mask Invalid */ - __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Mask Invalid */ - __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Mask Invalid */ - __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Mask Invalid */ - __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Mask Invalid */ - __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Mask Invalid */ - __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Mask Invalid */ - __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Mask Invalid */ - __IOM uint32_t MB24 : 1; /*!< [24..24] mailbox 24 Mask Invalid */ - __IOM uint32_t MB25 : 1; /*!< [25..25] mailbox 25 Mask Invalid */ - __IOM uint32_t MB26 : 1; /*!< [26..26] mailbox 26 Mask Invalid */ - __IOM uint32_t MB27 : 1; /*!< [27..27] mailbox 27 Mask Invalid */ - __IOM uint32_t MB28 : 1; /*!< [28..28] mailbox 28 Mask Invalid */ - __IOM uint32_t MB29 : 1; /*!< [29..29] mailbox 29 Mask Invalid */ - __IOM uint32_t MB30 : 1; /*!< [30..30] mailbox 30 Mask Invalid */ - __IOM uint32_t MB31 : 1; /*!< [31..31] mailbox 31 Mask Invalid */ - } MKIVLR_b; + __IOM uint32_t PSARD0 : 1; /*!< [0..0] AGT3 and the MSTPCRD.MSTPD0 bit security attribution */ + __IOM uint32_t PSARD1 : 1; /*!< [1..1] AGT2 and the MSTPCRD.MSTPD1 bit security attribution */ + __IOM uint32_t PSARD2 : 1; /*!< [2..2] AGT1 and the MSTPCRD.MSTPD2 bit security attribution */ + __IOM uint32_t PSARD3 : 1; /*!< [3..3] AGT0 and the MSTPCRD.MSTPD3 bit security attribution */ + uint32_t : 7; + __IOM uint32_t PSARD11 : 1; /*!< [11..11] PGI3 and the MSTPCRD.MSTPD11 bit security attribution */ + __IOM uint32_t PSARD12 : 1; /*!< [12..12] PGI2 and the MSTPCRD.MSTPD12 bit security attribution */ + __IOM uint32_t PSARD13 : 1; /*!< [13..13] PGI1 and the MSTPCRD.MSTPD13 bit security attribution */ + __IOM uint32_t PSARD14 : 1; /*!< [14..14] PGI0 and the MSTPCRD.MSTPD14 bit security attribution */ + __IOM uint32_t PSARD15 : 1; /*!< [15..15] ADC1 and the MSTPCRD.MSTPD15 bit security attribution */ + __IOM uint32_t PSARD16 : 1; /*!< [16..16] ADC0 and the MSTPCRD.MSTPD16 bit security attribution */ + uint32_t : 3; + __IOM uint32_t PSARD20 : 1; /*!< [20..20] DAC12 and the MSTPCRD.MSTPD20 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARD22 : 1; /*!< [22..22] TSN and the MSTPCRD.MSTPD22 bit security attribution */ + uint32_t : 9; + } PSARD_b; }; union { - union - { - __IOM uint32_t MIER; /*!< (@ 0x0000042C) Mailbox Interrupt Enable Register */ - - struct - { - __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Interrupt Enable */ - __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Interrupt Enable */ - __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Interrupt Enable */ - __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Interrupt Enable */ - __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Interrupt Enable */ - __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Interrupt Enable */ - __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Interrupt Enable */ - __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Interrupt Enable */ - __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Interrupt Enable */ - __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Interrupt Enable */ - __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Interrupt Enable */ - __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Interrupt Enable */ - __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Interrupt Enable */ - __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Interrupt Enable */ - __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Interrupt Enable */ - __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Interrupt Enable */ - __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Interrupt Enable */ - __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Interrupt Enable */ - __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Interrupt Enable */ - __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Interrupt Enable */ - __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Interrupt Enable */ - __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Interrupt Enable */ - __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Interrupt Enable */ - __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Interrupt Enable */ - __IOM uint32_t MB24 : 1; /*!< [24..24] mailbox 24 Interrupt Enable */ - __IOM uint32_t MB25 : 1; /*!< [25..25] mailbox 25 Interrupt Enable */ - __IOM uint32_t MB26 : 1; /*!< [26..26] mailbox 26 Interrupt Enable */ - __IOM uint32_t MB27 : 1; /*!< [27..27] mailbox 27 Interrupt Enable */ - __IOM uint32_t MB28 : 1; /*!< [28..28] mailbox 28 Interrupt Enable */ - __IOM uint32_t MB29 : 1; /*!< [29..29] mailbox 29 Interrupt Enable */ - __IOM uint32_t MB30 : 1; /*!< [30..30] mailbox 30 Interrupt Enable */ - __IOM uint32_t MB31 : 1; /*!< [31..31] mailbox 31 Interrupt Enable */ - } MIER_b; - }; + __IOM uint32_t PSARE; /*!< (@ 0x00000010) Peripheral Security Attribution Register E */ - union + struct { - __IOM uint32_t MIER_FIFO; /*!< (@ 0x0000042C) Mailbox Interrupt Enable Register for FIFO Mailbox - * Mode */ - - struct - { - __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Interrupt Enable */ - __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Interrupt Enable */ - __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Interrupt Enable */ - __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Interrupt Enable */ - __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Interrupt Enable */ - __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Interrupt Enable */ - __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Interrupt Enable */ - __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Interrupt Enable */ - __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Interrupt Enable */ - __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Interrupt Enable */ - __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Interrupt Enable */ - __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Interrupt Enable */ - __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Interrupt Enable */ - __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Interrupt Enable */ - __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Interrupt Enable */ - __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Interrupt Enable */ - __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Interrupt Enable */ - __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Interrupt Enable */ - __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Interrupt Enable */ - __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Interrupt Enable */ - __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Interrupt Enable */ - __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Interrupt Enable */ - __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Interrupt Enable */ - __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Interrupt Enable */ - __IOM uint32_t MB24 : 1; /*!< [24..24] Transmit FIFO Interrupt Enable */ - __IOM uint32_t MB25 : 1; /*!< [25..25] Transmit FIFO Interrupt Generation Timing Control */ - uint32_t : 2; - __IOM uint32_t MB28 : 1; /*!< [28..28] Receive FIFO Interrupt Enable */ - __IOM uint32_t MB29 : 1; /*!< [29..29] Receive FIFO Interrupt Generation Timing Control */ - uint32_t : 2; - } MIER_FIFO_b; - }; + __IOM uint32_t PSARE0 : 1; /*!< [0..0] WDT security attribution */ + __IOM uint32_t PSARE1 : 1; /*!< [1..1] IWDT security attribution */ + __IOM uint32_t PSARE2 : 1; /*!< [2..2] RTC security attribution */ + uint32_t : 11; + __IOM uint32_t PSARE14 : 1; /*!< [14..14] AGT5 and the MSTPCRE.MSTPE14 bit security attribution */ + __IOM uint32_t PSARE15 : 1; /*!< [15..15] AGT4 and the MSTPCRE.MSTPE15 bit security attribution */ + uint32_t : 6; + __IOM uint32_t PSARE22 : 1; /*!< [22..22] GPT9 and the MSTPCRE.MSTPE22 bit security attribution */ + __IOM uint32_t PSARE23 : 1; /*!< [23..23] GPT8 and the MSTPCRE.MSTPE23 bit security attribution */ + __IOM uint32_t PSARE24 : 1; /*!< [24..24] GPT7 and the MSTPCRE.MSTPE24 bit security attribution */ + __IOM uint32_t PSARE25 : 1; /*!< [25..25] GPT6 and the MSTPCRE.MSTPE25 bit security attribution */ + __IOM uint32_t PSARE26 : 1; /*!< [26..26] GPT5 and the MSTPCRE.MSTPE26 bit security attribution */ + __IOM uint32_t PSARE27 : 1; /*!< [27..27] GPT4 and the MSTPCRE.MSTPE27 bit security attribution */ + __IOM uint32_t PSARE28 : 1; /*!< [28..28] GPT3 and the MSTPCRE.MSTPE28 bit security attribution */ + __IOM uint32_t PSARE29 : 1; /*!< [29..29] GPT2 and the MSTPCRE.MSTPE29 bit security attribution */ + __IOM uint32_t PSARE30 : 1; /*!< [30..30] GPT1 and the MSTPCRE.MSTPE30 bit security attribution */ + __IOM uint32_t PSARE31 : 1; /*!< [31..31] GPT0 and the MSTPCRE.MSTPE31 bit security attribution */ + } PSARE_b; }; - __IM uint32_t RESERVED1[252]; union { - union + __IOM uint32_t MSSAR; /*!< (@ 0x00000014) Module Stop Security Attribution Register */ + + struct { - __IOM uint8_t MCTL_TX[32]; /*!< (@ 0x00000820) Message Control Register for Transmit */ + __IOM uint32_t MSSAR0 : 1; /*!< [0..0] The MSTPCRC.MSTPC14 bit security attribution */ + __IOM uint32_t MSSAR1 : 1; /*!< [1..1] The MSTPCRA.MSTPA22 bit security attribution */ + __IOM uint32_t MSSAR2 : 1; /*!< [2..2] The MSTPCRA.MSTPA7 bit security attribution */ + __IOM uint32_t MSSAR3 : 1; /*!< [3..3] The MSTPCRA.MSTPA0 bit security attribution */ + uint32_t : 28; + } MSSAR_b; + }; - struct - { - __IOM uint8_t SENTDATA : 1; /*!< [0..0] Transmission Complete Flag */ - __IM uint8_t TRMACTIVE : 1; /*!< [1..1] Transmission-in-Progress Status Flag (Transmit mailbox - * setting enabled) */ - __IOM uint8_t TRMABT : 1; /*!< [2..2] Transmission Abort Complete Flag (Transmit mailbox setting - * enabled) */ - uint8_t : 1; - __IOM uint8_t ONESHOT : 1; /*!< [4..4] One-Shot Enable */ - uint8_t : 1; - __IOM uint8_t RECREQ : 1; /*!< [6..6] Receive Mailbox Request */ - __IOM uint8_t TRMREQ : 1; /*!< [7..7] Transmit Mailbox Request */ - } MCTL_TX_b[32]; - }; + union + { + __IM uint32_t CFSAMONA; /*!< (@ 0x00000018) Code Flash Security Attribution Monitor Register + * A */ - union + struct { - __IOM uint8_t MCTL_RX[32]; /*!< (@ 0x00000820) Message Control Register for Receive */ - - struct - { - __IOM uint8_t NEWDATA : 1; /*!< [0..0] Reception Complete Flag */ - __IM uint8_t INVALDATA : 1; /*!< [1..1] Reception-in-Progress Status Flag (Receive mailbox setting - * enabled) */ - __IOM uint8_t MSGLOST : 1; /*!< [2..2] Message Lost Flag(Receive mailbox setting enabled) */ - uint8_t : 1; - __IOM uint8_t ONESHOT : 1; /*!< [4..4] One-Shot Enable */ - uint8_t : 1; - __IOM uint8_t RECREQ : 1; /*!< [6..6] Receive Mailbox Request */ - __IOM uint8_t TRMREQ : 1; /*!< [7..7] Transmit Mailbox Request */ - } MCTL_RX_b[32]; - }; + uint32_t : 15; + __IM uint32_t CFS1 : 9; /*!< [23..15] Code Flash Secure area 1 */ + uint32_t : 8; + } CFSAMONA_b; }; union { - __IOM uint16_t CTLR; /*!< (@ 0x00000840) Control Register */ + __IM uint32_t CFSAMONB; /*!< (@ 0x0000001C) Code Flash Security Attribution Monitor Register + * B */ struct { - __IOM uint16_t MBM : 1; /*!< [0..0] CAN Mailbox Mode Select */ - __IOM uint16_t IDFM : 2; /*!< [2..1] ID Format Mode Select */ - __IOM uint16_t MLM : 1; /*!< [3..3] Message Lost Mode Select */ - __IOM uint16_t TPM : 1; /*!< [4..4] Transmission Priority Mode Select */ - __IOM uint16_t TSRC : 1; /*!< [5..5] Time Stamp Counter Reset Command */ - __IOM uint16_t TSPS : 2; /*!< [7..6] Time Stamp Prescaler Select */ - __IOM uint16_t CANM : 2; /*!< [9..8] CAN Operating Mode Select */ - __IOM uint16_t SLPM : 1; /*!< [10..10] CAN Sleep Mode */ - __IOM uint16_t BOM : 2; /*!< [12..11] Bus-Off Recovery Mode by a program request */ - __IOM uint16_t RBOC : 1; /*!< [13..13] Forcible Return From Bus-Off */ - uint16_t : 2; - } CTLR_b; - }; - - union - { - __IM uint16_t STR; /*!< (@ 0x00000842) Status Register */ - - struct - { - __IM uint16_t NDST : 1; /*!< [0..0] NEWDATA Status Flag */ - __IM uint16_t SDST : 1; /*!< [1..1] SENTDATA Status Flag */ - __IM uint16_t RFST : 1; /*!< [2..2] Receive FIFO Status Flag */ - __IM uint16_t TFST : 1; /*!< [3..3] Transmit FIFO Status Flag */ - __IM uint16_t NMLST : 1; /*!< [4..4] Normal Mailbox Message Lost Status Flag */ - __IM uint16_t FMLST : 1; /*!< [5..5] FIFO Mailbox Message Lost Status Flag */ - __IM uint16_t TABST : 1; /*!< [6..6] Transmission Abort Status Flag */ - __IM uint16_t EST : 1; /*!< [7..7] Error Status Flag */ - __IM uint16_t RSTST : 1; /*!< [8..8] CAN Reset Status Flag */ - __IM uint16_t HLTST : 1; /*!< [9..9] CAN Halt Status Flag */ - __IM uint16_t SLPST : 1; /*!< [10..10] CAN Sleep Status Flag */ - __IM uint16_t EPST : 1; /*!< [11..11] Error-Passive Status Flag */ - __IM uint16_t BOST : 1; /*!< [12..12] Bus-Off Status Flag */ - __IM uint16_t TRMST : 1; /*!< [13..13] Transmit Status Flag (transmitter) */ - __IM uint16_t RECST : 1; /*!< [14..14] Receive Status Flag (receiver) */ - uint16_t : 1; - } STR_b; - }; - - union - { - __IOM uint32_t BCR; /*!< (@ 0x00000844) Bit Configuration Register */ - - struct - { - __IOM uint32_t CCLKS : 1; /*!< [0..0] CAN Clock Source Selection */ - uint32_t : 7; - __IOM uint32_t TSEG2 : 3; /*!< [10..8] Time Segment 2 Control */ - uint32_t : 1; - __IOM uint32_t SJW : 2; /*!< [13..12] Resynchronization Jump Width Control */ - uint32_t : 2; - __IOM uint32_t BRP : 10; /*!< [25..16] Prescaler Division Ratio Select . These bits set the - * frequency of the CAN communication clock (fCANCLK). */ - uint32_t : 2; - __IOM uint32_t TSEG1 : 4; /*!< [31..28] Time Segment 1 Control */ - } BCR_b; + uint32_t : 10; + __IM uint32_t CFS2 : 14; /*!< [23..10] Code Flash Secure area 2 */ + uint32_t : 8; + } CFSAMONB_b; }; union { - __IOM uint8_t RFCR; /*!< (@ 0x00000848) Receive FIFO Control Register */ + __IM uint32_t DFSAMON; /*!< (@ 0x00000020) Data Flash Security Attribution Monitor Register */ struct { - __IOM uint8_t RFE : 1; /*!< [0..0] Receive FIFO Enable */ - __IM uint8_t RFUST : 3; /*!< [3..1] Receive FIFO Unread Message Number Status */ - __IOM uint8_t RFMLF : 1; /*!< [4..4] Receive FIFO Message Lost Flag */ - __IM uint8_t RFFST : 1; /*!< [5..5] Receive FIFO Full Status Flag */ - __IM uint8_t RFWST : 1; /*!< [6..6] Receive FIFO Buffer Warning Status Flag */ - __IM uint8_t RFEST : 1; /*!< [7..7] Receive FIFO Empty Status Flag */ - } RFCR_b; + uint32_t : 10; + __IM uint32_t DFS : 6; /*!< [15..10] Data flash Secure area */ + uint32_t : 16; + } DFSAMON_b; }; union { - __OM uint8_t RFPCR; /*!< (@ 0x00000849) Receive FIFO Pointer Control Register */ + __IM uint32_t SSAMONA; /*!< (@ 0x00000024) SRAM Security Attribution Monitor Register A */ struct { - __OM uint8_t RFPCR : 8; /*!< [7..0] The CPU-side pointer for the receive FIFO is incremented - * by writing FFh to RFPCR. */ - } RFPCR_b; + uint32_t : 13; + __IM uint32_t SS1 : 8; /*!< [20..13] SRAM Secure area 1 */ + uint32_t : 11; + } SSAMONA_b; }; union { - __IOM uint8_t TFCR; /*!< (@ 0x0000084A) Transmit FIFO Control Register */ + __IM uint32_t SSAMONB; /*!< (@ 0x00000028) SRAM Security Attribution Monitor Register B */ struct { - __IOM uint8_t TFE : 1; /*!< [0..0] Transmit FIFO Enable */ - __IM uint8_t TFUST : 3; /*!< [3..1] Transmit FIFO Unsent Message Number Status */ - uint8_t : 2; - __IM uint8_t TFFST : 1; /*!< [6..6] Transmit FIFO Full Status */ - __IM uint8_t TFEST : 1; /*!< [7..7] Transmit FIFO Empty Status */ - } TFCR_b; + uint32_t : 10; + __IM uint32_t SS2 : 11; /*!< [20..10] SRAM secure area 2 */ + uint32_t : 11; + } SSAMONB_b; }; union { - __OM uint8_t TFPCR; /*!< (@ 0x0000084B) Transmit FIFO Pointer Control Register */ + __IM uint32_t DLMMON; /*!< (@ 0x0000002C) Device Lifecycle Management State Monitor Register */ struct { - __OM uint8_t TFPCR : 8; /*!< [7..0] The CPU-side pointer for the transmit FIFO is incremented - * by writing FFh to TFPCR. */ - } TFPCR_b; + __IM uint32_t DLMMON : 4; /*!< [3..0] Device Lifecycle Management State Monitor */ + uint32_t : 28; + } DLMMON_b; }; +} R_PSCU_Type; /*!< Size = 48 (0x30) */ - union - { - __IOM uint8_t EIER; /*!< (@ 0x0000084C) Error Interrupt Enable Register */ +/* =========================================================================================================================== */ +/* ================ R_AGT0 ================ */ +/* =========================================================================================================================== */ - struct - { - __IOM uint8_t BEIE : 1; /*!< [0..0] Bus Error Interrupt Enable */ - __IOM uint8_t EWIE : 1; /*!< [1..1] Error-Warning Interrupt Enable */ - __IOM uint8_t EPIE : 1; /*!< [2..2] Error-Passive Interrupt Enable */ - __IOM uint8_t BOEIE : 1; /*!< [3..3] Bus-Off Entry Interrupt Enable */ - __IOM uint8_t BORIE : 1; /*!< [4..4] Bus-Off Recovery Interrupt Enable */ - __IOM uint8_t ORIE : 1; /*!< [5..5] Overrun Interrupt Enable */ - __IOM uint8_t OLIE : 1; /*!< [6..6] Overload Frame Transmit Interrupt Enable */ - __IOM uint8_t BLIE : 1; /*!< [7..7] Bus Lock Interrupt Enable */ - } EIER_b; - }; +/** + * @brief Asynchronous General Purpose Timer (R_AGT0) + */ +typedef struct /*!< (@ 0x40084000) R_AGT0 Structure */ +{ union { - __IOM uint8_t EIFR; /*!< (@ 0x0000084D) Error Interrupt Factor Judge Register */ + __IOM uint16_t AGT; /*!< (@ 0x00000000) AGT Counter Register */ struct { - __IOM uint8_t BEIF : 1; /*!< [0..0] Bus Error Detect Flag */ - __IOM uint8_t EWIF : 1; /*!< [1..1] Error-Warning Detect Flag */ - __IOM uint8_t EPIF : 1; /*!< [2..2] Error-Passive Detect Flag */ - __IOM uint8_t BOEIF : 1; /*!< [3..3] Bus-Off Entry Detect Flag */ - __IOM uint8_t BORIF : 1; /*!< [4..4] Bus-Off Recovery Detect Flag */ - __IOM uint8_t ORIF : 1; /*!< [5..5] Receive Overrun Detect Flag */ - __IOM uint8_t OLIF : 1; /*!< [6..6] Overload Frame Transmission Detect Flag */ - __IOM uint8_t BLIF : 1; /*!< [7..7] Bus Lock Detect Flag */ - } EIFR_b; + __IOM uint16_t AGT : 16; /*!< [15..0] 16bit counter and reload registerNOTE : When 1 is written + * to the TSTOP bit in the AGTCRn register, the 16-bit counter + * is forcibly stopped and set to FFFFH. */ + } AGT_b; }; union { - __IM uint8_t RECR; /*!< (@ 0x0000084E) Receive Error Count Register */ + __IOM uint16_t AGTCMA; /*!< (@ 0x00000002) AGT Compare Match A Register */ struct { - __IM uint8_t RECR : 8; /*!< [7..0] Receive error count functionRECR increments or decrements - * the counter value according to the error status of the - * CAN module during reception. */ - } RECR_b; + __IOM uint16_t AGTCMA : 16; /*!< [15..0] AGT Compare Match A data is stored.NOTE : When 1 is + * written to the TSTOP bit in the AGTCRn register, set to + * FFFFH */ + } AGTCMA_b; }; union { - __IM uint8_t TECR; /*!< (@ 0x0000084F) Transmit Error Count Register */ + __IOM uint16_t AGTCMB; /*!< (@ 0x00000004) AGT Compare Match B Register */ struct { - __IM uint8_t TECR : 8; /*!< [7..0] Transmit error count functionTECR increments or decrements - * the counter value according to the error status of the - * CAN module during transmission. */ - } TECR_b; + __IOM uint16_t AGTCMB : 16; /*!< [15..0] AGT Compare Match B data is stored.NOTE : When 1 is + * written to the TSTOP bit in the AGTCR register, set to + * FFFFH */ + } AGTCMB_b; }; + __IM uint16_t RESERVED; union { - __IOM uint8_t ECSR; /*!< (@ 0x00000850) Error Code Store Register */ + __IOM uint8_t AGTCR; /*!< (@ 0x00000008) AGT Control Register */ struct { - __IOM uint8_t SEF : 1; /*!< [0..0] Stuff Error Flag */ - __IOM uint8_t FEF : 1; /*!< [1..1] Form Error Flag */ - __IOM uint8_t AEF : 1; /*!< [2..2] ACK Error Flag */ - __IOM uint8_t CEF : 1; /*!< [3..3] CRC Error Flag */ - __IOM uint8_t BE1F : 1; /*!< [4..4] Bit Error (recessive) Flag */ - __IOM uint8_t BE0F : 1; /*!< [5..5] Bit Error (dominant) Flag */ - __IOM uint8_t ADEF : 1; /*!< [6..6] ACK Delimiter Error Flag */ - __IOM uint8_t EDPM : 1; /*!< [7..7] Error Display Mode Select */ - } ECSR_b; + __IOM uint8_t TSTART : 1; /*!< [0..0] AGT count start */ + __IM uint8_t TCSTF : 1; /*!< [1..1] AGT count status flag */ + __OM uint8_t TSTOP : 1; /*!< [2..2] AGT count forced stop */ + uint8_t : 1; + __IOM uint8_t TEDGF : 1; /*!< [4..4] Active edge judgment flag */ + __IOM uint8_t TUNDF : 1; /*!< [5..5] Underflow flag */ + __IOM uint8_t TCMAF : 1; /*!< [6..6] Compare match A flag */ + __IOM uint8_t TCMBF : 1; /*!< [7..7] Compare match B flag */ + } AGTCR_b; }; union { - __IOM uint8_t CSSR; /*!< (@ 0x00000851) Channel Search Support Register */ + __IOM uint8_t AGTMR1; /*!< (@ 0x00000009) AGT Mode Register 1 */ struct { - __IOM uint8_t CSSR : 8; /*!< [7..0] When the value for the channel search is input, the channel - * number is output to MSSR. */ - } CSSR_b; + __IOM uint8_t TMOD : 3; /*!< [2..0] Operating mode */ + __IOM uint8_t TEDGPL : 1; /*!< [3..3] Edge polarity */ + __IOM uint8_t TCK : 3; /*!< [6..4] Count source */ + uint8_t : 1; + } AGTMR1_b; }; union { - __IM uint8_t MSSR; /*!< (@ 0x00000852) Mailbox Search Status Register */ + __IOM uint8_t AGTMR2; /*!< (@ 0x0000000A) AGT Mode Register 2 */ struct { - __IM uint8_t MBNST : 5; /*!< [4..0] Search Result Mailbox Number Status These bits output - * the smallest mailbox number that is searched in each mode - * of MSMR. */ - uint8_t : 2; - __IM uint8_t SEST : 1; /*!< [7..7] Search Result Status */ - } MSSR_b; + __IOM uint8_t CKS : 3; /*!< [2..0] AGTLCLK/AGTSCLK count source clock frequency division + * ratio */ + uint8_t : 4; + __IOM uint8_t LPM : 1; /*!< [7..7] Low Power Mode */ + } AGTMR2_b; }; + __IM uint8_t RESERVED1; union { - __IOM uint8_t MSMR; /*!< (@ 0x00000853) Mailbox Search Mode Register */ + __IOM uint8_t AGTIOC; /*!< (@ 0x0000000C) AGT I/O Control Register */ struct { - __IOM uint8_t MBSM : 2; /*!< [1..0] Mailbox Search Mode Select */ - uint8_t : 6; - } MSMR_b; + __IOM uint8_t TEDGSEL : 1; /*!< [0..0] I/O polarity switchFunction varies depending on the operating + * mode. */ + uint8_t : 1; + __IOM uint8_t TOE : 1; /*!< [2..2] AGTOn output enable */ + uint8_t : 1; + __IOM uint8_t TIPF : 2; /*!< [5..4] Input filter */ + __IOM uint8_t TIOGT : 2; /*!< [7..6] Count control */ + } AGTIOC_b; }; union { - __IM uint16_t TSR; /*!< (@ 0x00000854) Time Stamp Register */ + __IOM uint8_t AGTISR; /*!< (@ 0x0000000D) AGT Event Pin Select Register */ struct { - __IM uint16_t TSR : 16; /*!< [15..0] Free-running counter value for the time stamp function */ - } TSR_b; + uint8_t : 2; + __IOM uint8_t EEPS : 1; /*!< [2..2] AGTEE polarty selection */ + uint8_t : 5; + } AGTISR_b; }; union { - __IOM uint16_t AFSR; /*!< (@ 0x00000856) Acceptance Filter Support Register */ + __IOM uint8_t AGTCMSR; /*!< (@ 0x0000000E) AGT Compare Match Function Select Register */ struct { - __IOM uint16_t AFSR : 16; /*!< [15..0] After the standard ID of a received message is written, - * the value converted for data table search can be read. */ - } AFSR_b; + __IOM uint8_t TCMEA : 1; /*!< [0..0] Compare match A register enable */ + __IOM uint8_t TOEA : 1; /*!< [1..1] AGTOA output enable */ + __IOM uint8_t TOPOLA : 1; /*!< [2..2] AGTOA polarity select */ + uint8_t : 1; + __IOM uint8_t TCMEB : 1; /*!< [4..4] Compare match B register enable */ + __IOM uint8_t TOEB : 1; /*!< [5..5] AGTOB output enable */ + __IOM uint8_t TOPOLB : 1; /*!< [6..6] AGTOB polarity select */ + uint8_t : 1; + } AGTCMSR_b; }; union { - __IOM uint8_t TCR; /*!< (@ 0x00000858) Test Control Register */ + __IOM uint8_t AGTIOSEL; /*!< (@ 0x0000000F) AGT Pin Select Register */ struct { - __IOM uint8_t TSTE : 1; /*!< [0..0] CAN Test Mode Enable */ - __IOM uint8_t TSTM : 2; /*!< [2..1] CAN Test Mode Select */ - uint8_t : 5; - } TCR_b; + __IOM uint8_t SEL : 2; /*!< [1..0] AGTIO pin select */ + uint8_t : 2; + __IOM uint8_t TIES : 1; /*!< [4..4] AGTIO input enable */ + uint8_t : 3; + } AGTIOSEL_b; }; - __IM uint8_t RESERVED2; - __IM uint16_t RESERVED3; -} R_CAN0_Type; /*!< Size = 2140 (0x85c) */ +} R_AGT0_Type; /*!< Size = 16 (0x10) */ /* =========================================================================================================================== */ -/* ================ R_CRC ================ */ +/* ================ R_BUS ================ */ /* =========================================================================================================================== */ /** - * @brief Cyclic Redundancy Check (CRC) Calculator (R_CRC) + * @brief Bus Interface (R_BUS) */ -typedef struct /*!< (@ 0x40074000) R_CRC Structure */ +typedef struct /*!< (@ 0x40003000) R_BUS Structure */ { - union - { - __IOM uint8_t CRCCR0; /*!< (@ 0x00000000) CRC Control Register0 */ - - struct - { - __IOM uint8_t GPS : 3; /*!< [2..0] CRC Generating Polynomial Switching */ - uint8_t : 3; - __IOM uint8_t LMS : 1; /*!< [6..6] CRC Calculation Switching */ - __OM uint8_t DORCLR : 1; /*!< [7..7] CRCDOR Register Clear */ - } CRCCR0_b; - }; + __IOM R_BUS_CSa_Type CSa[8]; /*!< (@ 0x00000000) CS Registers */ + __IM uint32_t RESERVED[480]; + __IOM R_BUS_CSb_Type CSb[8]; /*!< (@ 0x00000800) CS Registers */ union { - __IOM uint8_t CRCCR1; /*!< (@ 0x00000001) CRC Control Register1 */ + __IOM uint16_t CSRECEN; /*!< (@ 0x00000880) CS Recovery Cycle Insertion Enable Register */ struct { - uint8_t : 6; - __IOM uint8_t CRCSWR : 1; /*!< [6..6] Snoop-on-write/read switch bit */ - __IOM uint8_t CRCSEN : 1; /*!< [7..7] Snoop enable bit */ - } CRCCR1_b; - }; - __IM uint16_t RESERVED; - - union - { - union - { - __IOM uint32_t CRCDIR; /*!< (@ 0x00000004) CRC Data Input Register */ - - struct - { - __IOM uint32_t CRCDIR : 32; /*!< [31..0] Calculation input Data (Case of CRC-32, CRC-32C ) */ - } CRCDIR_b; - }; - - union - { - __IOM uint8_t CRCDIR_BY; /*!< (@ 0x00000004) CRC Data Input Register (byte access) */ - - struct - { - __IOM uint8_t CRCDIR_BY : 8; /*!< [7..0] Calculation input Data ( Case of CRC-8, CRC-16 or CRC-CCITT - * ) */ - } CRCDIR_BY_b; - }; - }; - - union - { - union - { - __IOM uint32_t CRCDOR; /*!< (@ 0x00000008) CRC Data Output Register */ - - struct - { - __IOM uint32_t CRCDOR : 32; /*!< [31..0] Calculation output Data (Case of CRC-32, CRC-32C ) */ - } CRCDOR_b; - }; - - union - { - __IOM uint16_t CRCDOR_HA; /*!< (@ 0x00000008) CRC Data Output Register (halfword access) */ - - struct - { - __IOM uint16_t CRCDOR_HA : 16; /*!< [15..0] Calculation output Data (Case of CRC-16 or CRC-CCITT - * ) */ - } CRCDOR_HA_b; - }; - - union - { - __IOM uint8_t CRCDOR_BY; /*!< (@ 0x00000008) CRC Data Output Register(byte access) */ - - struct - { - __IOM uint8_t CRCDOR_BY : 8; /*!< [7..0] Calculation output Data (Case of CRC-8 ) */ - } CRCDOR_BY_b; - }; - }; - - union - { - __IOM uint16_t CRCSAR; /*!< (@ 0x0000000C) Snoop Address Register */ - - struct - { - __IOM uint16_t CRCSA : 14; /*!< [13..0] snoop address bitSet the I/O register address to snoop */ - uint16_t : 2; - } CRCSAR_b; + __IOM uint16_t RCVEN0 : 1; /*!< [0..0] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN1 : 1; /*!< [1..1] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN2 : 1; /*!< [2..2] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN3 : 1; /*!< [3..3] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN4 : 1; /*!< [4..4] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN5 : 1; /*!< [5..5] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN6 : 1; /*!< [6..6] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN7 : 1; /*!< [7..7] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM0 : 1; /*!< [8..8] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM1 : 1; /*!< [9..9] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM2 : 1; /*!< [10..10] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM3 : 1; /*!< [11..11] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM4 : 1; /*!< [12..12] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM5 : 1; /*!< [13..13] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM6 : 1; /*!< [14..14] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM7 : 1; /*!< [15..15] Multiplexed Bus Recovery Cycle Insertion Enable */ + } CSRECEN_b; }; - __IM uint16_t RESERVED1; -} R_CRC_Type; /*!< Size = 16 (0x10) */ + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[223]; + __IOM R_BUS_SDRAM_Type SDRAM; /*!< (@ 0x00000C00) SDRAM Registers */ + __IM uint32_t RESERVED3[235]; + __IOM R_BUS_BUSM_Type BUSM[6]; /*!< (@ 0x00001000) Master Bus Control Register Array */ + __IM uint32_t RESERVED4[58]; + __IOM R_BUS_BUSS_Type BUSS[16]; /*!< (@ 0x00001100) Slave Bus Control Register Array */ + __IM uint32_t RESERVED5[432]; + __IOM R_BUS_BUSERR_Type BUSERR[11]; /*!< (@ 0x00001800) Bus Error Registers */ +} R_BUS_Type; /*!< Size = 6320 (0x18b0) */ /* =========================================================================================================================== */ -/* ================ R_CTSU ================ */ +/* ================ R_CAC ================ */ /* =========================================================================================================================== */ /** - * @brief Capacitive Touch Sensing Unit (R_CTSU) + * @brief Clock Frequency Accuracy Measurement Circuit (R_CAC) */ -typedef struct /*!< (@ 0x40081000) R_CTSU Structure */ +typedef struct /*!< (@ 0x40044600) R_CAC Structure */ { union { - __IOM uint8_t CTSUCR0; /*!< (@ 0x00000000) CTSU Control Register 0 */ + __IOM uint8_t CACR0; /*!< (@ 0x00000000) CAC Control Register 0 */ struct { - __IOM uint8_t CTSUSTRT : 1; /*!< [0..0] CTSU Measurement Operation Start */ - __IOM uint8_t CTSUCAP : 1; /*!< [1..1] CTSU Measurement Operation Start Trigger Select */ - __IOM uint8_t CTSUSNZ : 1; /*!< [2..2] CTSU Wait State Power-Saving Enable */ - __IOM uint8_t CTSUIOC : 1; /*!< [3..3] CTSU Transmit Pin Control */ - __IOM uint8_t CTSUINIT : 1; /*!< [4..4] CTSU Control Block Initialization */ - uint8_t : 2; - __IOM uint8_t CTSUTXVSEL : 1; /*!< [7..7] CTSU Transmission power supply selection */ - } CTSUCR0_b; + __IOM uint8_t CFME : 1; /*!< [0..0] Clock Frequency Measurement Enable. */ + uint8_t : 7; + } CACR0_b; }; union { - __IOM uint8_t CTSUCR1; /*!< (@ 0x00000001) CTSU Control Register 1 */ + __IOM uint8_t CACR1; /*!< (@ 0x00000001) CAC Control Register 1 */ struct { - __IOM uint8_t CTSUPON : 1; /*!< [0..0] CTSU Power Supply Enable */ - __IOM uint8_t CTSUCSW : 1; /*!< [1..1] CTSU LPF Capacitance Charging Control */ - __IOM uint8_t CTSUATUNE0 : 1; /*!< [2..2] CTSU Power Supply Operating Mode Setting */ - __IOM uint8_t CTSUATUNE1 : 1; /*!< [3..3] CTSU Power Supply Capacity Adjustment */ - __IOM uint8_t CTSUCLK : 2; /*!< [5..4] CTSU Operating Clock Select */ - __IOM uint8_t CTSUMD : 2; /*!< [7..6] CTSU Measurement Mode Select */ - } CTSUCR1_b; + __IOM uint8_t CACREFE : 1; /*!< [0..0] CACREF Pin Input Enable */ + __IOM uint8_t FMCS : 3; /*!< [3..1] Measurement Target Clock Select */ + __IOM uint8_t TCSS : 2; /*!< [5..4] Measurement Target Clock Frequency Division Ratio Select */ + __IOM uint8_t EDGES : 2; /*!< [7..6] Valid Edge Select */ + } CACR1_b; }; union { - __IOM uint8_t CTSUSDPRS; /*!< (@ 0x00000002) CTSU Synchronous Noise Reduction Setting Register */ + __IOM uint8_t CACR2; /*!< (@ 0x00000002) CAC Control Register 2 */ struct { - __IOM uint8_t CTSUPRRATIO : 4; /*!< [3..0] CTSU Measurement Time and Pulse Count AdjustmentRecommended - * setting: 3 (0011b) */ - __IOM uint8_t CTSUPRMODE : 2; /*!< [5..4] CTSU Base Period and Pulse Count Setting */ - __IOM uint8_t CTSUSOFF : 1; /*!< [6..6] CTSU High-Pass Noise Reduction Function Off Setting */ - uint8_t : 1; - } CTSUSDPRS_b; + __IOM uint8_t RPS : 1; /*!< [0..0] Reference Signal Select */ + __IOM uint8_t RSCS : 3; /*!< [3..1] Measurement Reference Clock Select */ + __IOM uint8_t RCDS : 2; /*!< [5..4] Measurement Reference Clock Frequency Division Ratio + * Select */ + __IOM uint8_t DFS : 2; /*!< [7..6] Digital Filter Selection */ + } CACR2_b; }; union { - __IOM uint8_t CTSUSST; /*!< (@ 0x00000003) CTSU Sensor Stabilization Wait Control Register */ + __IOM uint8_t CAICR; /*!< (@ 0x00000003) CAC Interrupt Control Register */ struct { - __IOM uint8_t CTSUSST : 8; /*!< [7..0] CTSU Sensor Stabilization Wait ControlNOTE: The value - * of these bits should be fixed to 00010000b. */ - } CTSUSST_b; + __IOM uint8_t FERRIE : 1; /*!< [0..0] Frequency Error Interrupt Request Enable */ + __IOM uint8_t MENDIE : 1; /*!< [1..1] Measurement End Interrupt Request Enable */ + __IOM uint8_t OVFIE : 1; /*!< [2..2] Overflow Interrupt Request Enable */ + uint8_t : 1; + __OM uint8_t FERRFCL : 1; /*!< [4..4] FERRF Clear */ + __OM uint8_t MENDFCL : 1; /*!< [5..5] MENDF Clear */ + __OM uint8_t OVFFCL : 1; /*!< [6..6] OVFF Clear */ + uint8_t : 1; + } CAICR_b; }; union { - __IOM uint8_t CTSUMCH0; /*!< (@ 0x00000004) CTSU Measurement Channel Register 0 */ + __IM uint8_t CASTR; /*!< (@ 0x00000004) CAC Status Register */ struct { - __IOM uint8_t CTSUMCH0 : 6; /*!< [5..0] CTSU Measurement Channel 0.Note1: Writing to these bits - * is only enabled in self-capacitance single-scan mode (CTSUCR1.CTSUMD[1:0] - * bits = 00b).Note2: If the value of CTSUMCH0 was set to - * b'111111 in mode other than self-capacitor single scan - * mode, the measurement is stopped. */ - uint8_t : 2; - } CTSUMCH0_b; + __IM uint8_t FERRF : 1; /*!< [0..0] Frequency Error Flag */ + __IM uint8_t MENDF : 1; /*!< [1..1] Measurement End Flag */ + __IM uint8_t OVFF : 1; /*!< [2..2] Counter Overflow Flag */ + uint8_t : 5; + } CASTR_b; }; + __IM uint8_t RESERVED; union { - __IOM uint8_t CTSUMCH1; /*!< (@ 0x00000005) CTSU Measurement Channel Register 1 */ + __IOM uint16_t CAULVR; /*!< (@ 0x00000006) CAC Upper-Limit Value Setting Register */ struct { - __IM uint8_t CTSUMCH1 : 6; /*!< [5..0] CTSU Measurement Channel 1Note1: If the value of CTSUMCH1 - * was set to b'111111, the measurement is stopped. */ - uint8_t : 2; - } CTSUMCH1_b; + __IOM uint16_t CAULVR : 16; /*!< [15..0] CAULVR is a 16-bit readable/writable register that stores + * the upper-limit value of the frequency. */ + } CAULVR_b; }; union { - __IOM uint8_t CTSUCHAC[5]; /*!< (@ 0x00000006) CTSU Channel Enable Control Register */ + __IOM uint16_t CALLVR; /*!< (@ 0x00000008) CAC Lower-Limit Value Setting Register */ struct { - __IOM uint8_t TS0 : 1; /*!< [0..0] CTSU Channel Enable Control */ - __IOM uint8_t TS1 : 1; /*!< [1..1] CTSU Channel Enable Control */ - __IOM uint8_t TS2 : 1; /*!< [2..2] CTSU Channel Enable Control */ - __IOM uint8_t TS3 : 1; /*!< [3..3] CTSU Channel Enable Control */ - __IOM uint8_t TS4 : 1; /*!< [4..4] CTSU Channel Enable Control */ - __IOM uint8_t TS5 : 1; /*!< [5..5] CTSU Channel Enable Control */ - __IOM uint8_t TS6 : 1; /*!< [6..6] CTSU Channel Enable Control */ - __IOM uint8_t TS7 : 1; /*!< [7..7] CTSU Channel Enable Control */ - } CTSUCHAC_b[5]; + __IOM uint16_t CALLVR : 16; /*!< [15..0] CALLVR is a 16-bit readable/writable register that stores + * the lower-limit value of the frequency. */ + } CALLVR_b; }; union { - __IOM uint8_t CTSUCHTRC[5]; /*!< (@ 0x0000000B) CTSU Channel Transmit/Receive Control Register */ + __IM uint16_t CACNTBR; /*!< (@ 0x0000000A) CAC Counter Buffer Register */ struct { - __IOM uint8_t TS0 : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS1 : 1; /*!< [1..1] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS2 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS3 : 1; /*!< [3..3] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS4 : 1; /*!< [4..4] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS5 : 1; /*!< [5..5] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS6 : 1; /*!< [6..6] CTSU Channel Transmit/Receive Control */ - __IOM uint8_t TS7 : 1; /*!< [7..7] CTSU Channel Transmit/Receive Control */ - } CTSUCHTRC_b[5]; + __IM uint16_t CACNTBR : 16; /*!< [15..0] CACNTBR is a 16-bit read-only register that retains + * the counter value at the time a valid reference signal + * edge is input */ + } CACNTBR_b; }; +} R_CAC_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_CAN0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Controller Area Network (CAN) Module (R_CAN0) + */ + +typedef struct /*!< (@ 0x40050000) R_CAN0 Structure */ +{ + __IM uint32_t RESERVED[128]; + __IOM R_CAN0_MB_Type MB[32]; /*!< (@ 0x00000200) Mailbox */ union { - __IOM uint8_t CTSUDCLKC; /*!< (@ 0x00000010) CTSU High-Pass Noise Reduction Control Register */ + __IOM uint32_t MKR[8]; /*!< (@ 0x00000400) Mask Register */ struct { - __IOM uint8_t CTSUSSMOD : 2; /*!< [1..0] CTSU Diffusion Clock Mode SelectNOTE: This bit should - * be set to 00b. */ - uint8_t : 2; - __IOM uint8_t CTSUSSCNT : 2; /*!< [5..4] CTSU Diffusion Clock Mode ControlNOTE: This bit should - * be set to 11b. */ - uint8_t : 2; - } CTSUDCLKC_b; + __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ + __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ + uint32_t : 3; + } MKR_b[8]; }; union { - __IOM uint8_t CTSUST; /*!< (@ 0x00000011) CTSU Status Register */ + __IOM uint32_t FIDCR[2]; /*!< (@ 0x00000420) FIFO Received ID Compare Registers */ struct { - __IM uint8_t CTSUSTC : 3; /*!< [2..0] CTSU Measurement Status Counter */ - uint8_t : 1; - __IM uint8_t CTSUDTSR : 1; /*!< [4..4] CTSU Data Transfer Status Flag */ - __IOM uint8_t CTSUSOVF : 1; /*!< [5..5] CTSU Sensor Counter Overflow Flag */ - __IOM uint8_t CTSUROVF : 1; /*!< [6..6] CTSU Reference Counter Overflow Flag */ - __IM uint8_t CTSUPS : 1; /*!< [7..7] CTSU Mutual Capacitance Status Flag */ - } CTSUST_b; + __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ + __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ + uint32_t : 1; + __IOM uint32_t RTR : 1; /*!< [30..30] Remote Transmission Request */ + __IOM uint32_t IDE : 1; /*!< [31..31] ID Extension */ + } FIDCR_b[2]; }; union { - __IOM uint16_t CTSUSSC; /*!< (@ 0x00000012) CTSU High-Pass Noise Reduction Spectrum Diffusion - * Control Register */ + __IOM uint32_t MKIVLR; /*!< (@ 0x00000428) Mask Invalid Register */ struct { - uint16_t : 8; - __IOM uint16_t CTSUSSDIV : 4; /*!< [11..8] CTSU Spectrum Diffusion Frequency Division Setting */ - uint16_t : 4; - } CTSUSSC_b; + __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Mask Invalid */ + __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Mask Invalid */ + __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Mask Invalid */ + __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Mask Invalid */ + __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Mask Invalid */ + __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Mask Invalid */ + __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Mask Invalid */ + __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Mask Invalid */ + __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Mask Invalid */ + __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Mask Invalid */ + __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Mask Invalid */ + __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Mask Invalid */ + __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Mask Invalid */ + __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Mask Invalid */ + __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Mask Invalid */ + __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Mask Invalid */ + __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Mask Invalid */ + __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Mask Invalid */ + __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Mask Invalid */ + __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Mask Invalid */ + __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Mask Invalid */ + __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Mask Invalid */ + __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Mask Invalid */ + __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Mask Invalid */ + __IOM uint32_t MB24 : 1; /*!< [24..24] mailbox 24 Mask Invalid */ + __IOM uint32_t MB25 : 1; /*!< [25..25] mailbox 25 Mask Invalid */ + __IOM uint32_t MB26 : 1; /*!< [26..26] mailbox 26 Mask Invalid */ + __IOM uint32_t MB27 : 1; /*!< [27..27] mailbox 27 Mask Invalid */ + __IOM uint32_t MB28 : 1; /*!< [28..28] mailbox 28 Mask Invalid */ + __IOM uint32_t MB29 : 1; /*!< [29..29] mailbox 29 Mask Invalid */ + __IOM uint32_t MB30 : 1; /*!< [30..30] mailbox 30 Mask Invalid */ + __IOM uint32_t MB31 : 1; /*!< [31..31] mailbox 31 Mask Invalid */ + } MKIVLR_b; }; union { - __IOM uint16_t CTSUSO0; /*!< (@ 0x00000014) CTSU Sensor Offset Register 0 */ + union + { + __IOM uint32_t MIER; /*!< (@ 0x0000042C) Mailbox Interrupt Enable Register */ - struct + struct + { + __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Interrupt Enable */ + __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Interrupt Enable */ + __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Interrupt Enable */ + __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Interrupt Enable */ + __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Interrupt Enable */ + __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Interrupt Enable */ + __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Interrupt Enable */ + __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Interrupt Enable */ + __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Interrupt Enable */ + __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Interrupt Enable */ + __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Interrupt Enable */ + __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Interrupt Enable */ + __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Interrupt Enable */ + __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Interrupt Enable */ + __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Interrupt Enable */ + __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Interrupt Enable */ + __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Interrupt Enable */ + __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Interrupt Enable */ + __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Interrupt Enable */ + __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Interrupt Enable */ + __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Interrupt Enable */ + __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Interrupt Enable */ + __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Interrupt Enable */ + __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Interrupt Enable */ + __IOM uint32_t MB24 : 1; /*!< [24..24] mailbox 24 Interrupt Enable */ + __IOM uint32_t MB25 : 1; /*!< [25..25] mailbox 25 Interrupt Enable */ + __IOM uint32_t MB26 : 1; /*!< [26..26] mailbox 26 Interrupt Enable */ + __IOM uint32_t MB27 : 1; /*!< [27..27] mailbox 27 Interrupt Enable */ + __IOM uint32_t MB28 : 1; /*!< [28..28] mailbox 28 Interrupt Enable */ + __IOM uint32_t MB29 : 1; /*!< [29..29] mailbox 29 Interrupt Enable */ + __IOM uint32_t MB30 : 1; /*!< [30..30] mailbox 30 Interrupt Enable */ + __IOM uint32_t MB31 : 1; /*!< [31..31] mailbox 31 Interrupt Enable */ + } MIER_b; + }; + + union { - __IOM uint16_t CTSUSO : 10; /*!< [9..0] CTSU Sensor Offset AdjustmentCurrent offset amount is - * CTSUSO ( 0 to 1023 ) */ - __IOM uint16_t CTSUSNUM : 6; /*!< [15..10] CTSU Measurement Count Setting */ - } CTSUSO0_b; + __IOM uint32_t MIER_FIFO; /*!< (@ 0x0000042C) Mailbox Interrupt Enable Register for FIFO Mailbox + * Mode */ + + struct + { + __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Interrupt Enable */ + __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Interrupt Enable */ + __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Interrupt Enable */ + __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Interrupt Enable */ + __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Interrupt Enable */ + __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Interrupt Enable */ + __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Interrupt Enable */ + __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Interrupt Enable */ + __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Interrupt Enable */ + __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Interrupt Enable */ + __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Interrupt Enable */ + __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Interrupt Enable */ + __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Interrupt Enable */ + __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Interrupt Enable */ + __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Interrupt Enable */ + __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Interrupt Enable */ + __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Interrupt Enable */ + __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Interrupt Enable */ + __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Interrupt Enable */ + __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Interrupt Enable */ + __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Interrupt Enable */ + __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Interrupt Enable */ + __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Interrupt Enable */ + __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Interrupt Enable */ + __IOM uint32_t MB24 : 1; /*!< [24..24] Transmit FIFO Interrupt Enable */ + __IOM uint32_t MB25 : 1; /*!< [25..25] Transmit FIFO Interrupt Generation Timing Control */ + uint32_t : 2; + __IOM uint32_t MB28 : 1; /*!< [28..28] Receive FIFO Interrupt Enable */ + __IOM uint32_t MB29 : 1; /*!< [29..29] Receive FIFO Interrupt Generation Timing Control */ + uint32_t : 2; + } MIER_FIFO_b; + }; }; + __IM uint32_t RESERVED1[252]; union { - __IOM uint16_t CTSUSO1; /*!< (@ 0x00000016) CTSU Sensor Offset Register 1 */ + union + { + __IOM uint8_t MCTL_TX[32]; /*!< (@ 0x00000820) Message Control Register for Transmit */ - struct + struct + { + __IOM uint8_t SENTDATA : 1; /*!< [0..0] Transmission Complete Flag */ + __IM uint8_t TRMACTIVE : 1; /*!< [1..1] Transmission-in-Progress Status Flag (Transmit mailbox + * setting enabled) */ + __IOM uint8_t TRMABT : 1; /*!< [2..2] Transmission Abort Complete Flag (Transmit mailbox setting + * enabled) */ + uint8_t : 1; + __IOM uint8_t ONESHOT : 1; /*!< [4..4] One-Shot Enable */ + uint8_t : 1; + __IOM uint8_t RECREQ : 1; /*!< [6..6] Receive Mailbox Request */ + __IOM uint8_t TRMREQ : 1; /*!< [7..7] Transmit Mailbox Request */ + } MCTL_TX_b[32]; + }; + + union { - __IOM uint16_t CTSURICOA : 8; /*!< [7..0] CTSU Reference ICO Current AdjustmentCurrent offset amount - * is CTSUSO ( 0 to 255 ) */ - __IOM uint16_t CTSUSDPA : 5; /*!< [12..8] CTSU Base Clock SettingOperating clock divided by ( - * CTSUSDPA + 1 ) x 2 */ - __IOM uint16_t CTSUICOG : 2; /*!< [14..13] CTSU ICO Gain Adjustment */ - uint16_t : 1; - } CTSUSO1_b; + __IOM uint8_t MCTL_RX[32]; /*!< (@ 0x00000820) Message Control Register for Receive */ + + struct + { + __IOM uint8_t NEWDATA : 1; /*!< [0..0] Reception Complete Flag */ + __IM uint8_t INVALDATA : 1; /*!< [1..1] Reception-in-Progress Status Flag (Receive mailbox setting + * enabled) */ + __IOM uint8_t MSGLOST : 1; /*!< [2..2] Message Lost Flag(Receive mailbox setting enabled) */ + uint8_t : 1; + __IOM uint8_t ONESHOT : 1; /*!< [4..4] One-Shot Enable */ + uint8_t : 1; + __IOM uint8_t RECREQ : 1; /*!< [6..6] Receive Mailbox Request */ + __IOM uint8_t TRMREQ : 1; /*!< [7..7] Transmit Mailbox Request */ + } MCTL_RX_b[32]; + }; }; union { - __IM uint16_t CTSUSC; /*!< (@ 0x00000018) CTSU Sensor Counter */ + __IOM uint16_t CTLR; /*!< (@ 0x00000840) Control Register */ struct { - __IM uint16_t CTSUSC : 16; /*!< [15..0] CTSU Sensor CounterThese bits indicate the measurement - * result of the CTSU. These bits indicate FFFFh when an overflow - * occurs. */ - } CTSUSC_b; + __IOM uint16_t MBM : 1; /*!< [0..0] CAN Mailbox Mode Select */ + __IOM uint16_t IDFM : 2; /*!< [2..1] ID Format Mode Select */ + __IOM uint16_t MLM : 1; /*!< [3..3] Message Lost Mode Select */ + __IOM uint16_t TPM : 1; /*!< [4..4] Transmission Priority Mode Select */ + __IOM uint16_t TSRC : 1; /*!< [5..5] Time Stamp Counter Reset Command */ + __IOM uint16_t TSPS : 2; /*!< [7..6] Time Stamp Prescaler Select */ + __IOM uint16_t CANM : 2; /*!< [9..8] CAN Operating Mode Select */ + __IOM uint16_t SLPM : 1; /*!< [10..10] CAN Sleep Mode */ + __IOM uint16_t BOM : 2; /*!< [12..11] Bus-Off Recovery Mode by a program request */ + __IOM uint16_t RBOC : 1; /*!< [13..13] Forcible Return From Bus-Off */ + uint16_t : 2; + } CTLR_b; }; union { - __IM uint16_t CTSURC; /*!< (@ 0x0000001A) CTSU Reference Counter */ + __IM uint16_t STR; /*!< (@ 0x00000842) Status Register */ struct { - __IM uint16_t CTSURC : 16; /*!< [15..0] CTSU Reference CounterThese bits indicate the measurement - * result of the reference ICO.These bits indicate FFFFh when - * an overflow occurs. */ - } CTSURC_b; + __IM uint16_t NDST : 1; /*!< [0..0] NEWDATA Status Flag */ + __IM uint16_t SDST : 1; /*!< [1..1] SENTDATA Status Flag */ + __IM uint16_t RFST : 1; /*!< [2..2] Receive FIFO Status Flag */ + __IM uint16_t TFST : 1; /*!< [3..3] Transmit FIFO Status Flag */ + __IM uint16_t NMLST : 1; /*!< [4..4] Normal Mailbox Message Lost Status Flag */ + __IM uint16_t FMLST : 1; /*!< [5..5] FIFO Mailbox Message Lost Status Flag */ + __IM uint16_t TABST : 1; /*!< [6..6] Transmission Abort Status Flag */ + __IM uint16_t EST : 1; /*!< [7..7] Error Status Flag */ + __IM uint16_t RSTST : 1; /*!< [8..8] CAN Reset Status Flag */ + __IM uint16_t HLTST : 1; /*!< [9..9] CAN Halt Status Flag */ + __IM uint16_t SLPST : 1; /*!< [10..10] CAN Sleep Status Flag */ + __IM uint16_t EPST : 1; /*!< [11..11] Error-Passive Status Flag */ + __IM uint16_t BOST : 1; /*!< [12..12] Bus-Off Status Flag */ + __IM uint16_t TRMST : 1; /*!< [13..13] Transmit Status Flag (transmitter) */ + __IM uint16_t RECST : 1; /*!< [14..14] Receive Status Flag (receiver) */ + uint16_t : 1; + } STR_b; }; union { - __IM uint16_t CTSUERRS; /*!< (@ 0x0000001C) CTSU Error Status Register */ + __IOM uint32_t BCR; /*!< (@ 0x00000844) Bit Configuration Register */ struct { - uint16_t : 15; - __IM uint16_t CTSUICOMP : 1; /*!< [15..15] TSCAP Voltage Error Monitor */ - } CTSUERRS_b; + __IOM uint32_t CCLKS : 1; /*!< [0..0] CAN Clock Source Selection */ + uint32_t : 7; + __IOM uint32_t TSEG2 : 3; /*!< [10..8] Time Segment 2 Control */ + uint32_t : 1; + __IOM uint32_t SJW : 2; /*!< [13..12] Resynchronization Jump Width Control */ + uint32_t : 2; + __IOM uint32_t BRP : 10; /*!< [25..16] Prescaler Division Ratio Select . These bits set the + * frequency of the CAN communication clock (fCANCLK). */ + uint32_t : 2; + __IOM uint32_t TSEG1 : 4; /*!< [31..28] Time Segment 1 Control */ + } BCR_b; }; -} R_CTSU_Type; /*!< Size = 30 (0x1e) */ -/* =========================================================================================================================== */ -/* ================ R_CTSU2 ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint8_t RFCR; /*!< (@ 0x00000848) Receive FIFO Control Register */ -/** - * @brief Capacitive Touch Sensing Unit (R_CTSU2) - */ + struct + { + __IOM uint8_t RFE : 1; /*!< [0..0] Receive FIFO Enable */ + __IM uint8_t RFUST : 3; /*!< [3..1] Receive FIFO Unread Message Number Status */ + __IOM uint8_t RFMLF : 1; /*!< [4..4] Receive FIFO Message Lost Flag */ + __IM uint8_t RFFST : 1; /*!< [5..5] Receive FIFO Full Status Flag */ + __IM uint8_t RFWST : 1; /*!< [6..6] Receive FIFO Buffer Warning Status Flag */ + __IM uint8_t RFEST : 1; /*!< [7..7] Receive FIFO Empty Status Flag */ + } RFCR_b; + }; -typedef struct /*!< (@ 0x40082000) R_CTSU2 Structure */ -{ union { - union + __OM uint8_t RFPCR; /*!< (@ 0x00000849) Receive FIFO Pointer Control Register */ + + struct { - __IOM uint32_t CTSUCRA; /*!< (@ 0x00000000) CTSU Control Register A */ + __OM uint8_t RFPCR : 8; /*!< [7..0] The CPU-side pointer for the receive FIFO is incremented + * by writing FFh to RFPCR. */ + } RFPCR_b; + }; - struct - { - __IOM uint32_t STRT : 1; /*!< [0..0] CTSU Measurement Operation Start */ - __IOM uint32_t CAP : 1; /*!< [1..1] CTSU Measurement Operation Start Trigger Select */ - __IOM uint32_t SNZ : 1; /*!< [2..2] CTSU Wait State Power-Saving Enable */ - __IOM uint32_t CFCON : 1; /*!< [3..3] CTSU CFC Power on Control */ - __OM uint32_t INIT : 1; /*!< [4..4] CTSU Control Block Initialization */ - __IOM uint32_t PUMPON : 1; /*!< [5..5] CTSU Boost Circuit Control */ - __IOM uint32_t TXVSEL : 2; /*!< [7..6] CTSU Transmission Power Supply Selection */ - __IOM uint32_t PON : 1; /*!< [8..8] CTSU Power Supply Enable */ - __IOM uint32_t CSW : 1; /*!< [9..9] CTSU LPF Capacitance Charging Control */ - __IOM uint32_t ATUNE0 : 1; /*!< [10..10] CTSU Power Supply Operating Mode Setting */ - __IOM uint32_t ATUNE1 : 1; /*!< [11..11] CTSU Current Range Adjustment */ - __IOM uint32_t CLK : 2; /*!< [13..12] CTSU Operating Clock Select */ - __IOM uint32_t MD0 : 1; /*!< [14..14] CTSU Measurement Mode Select 0 */ - __IOM uint32_t MD1 : 1; /*!< [15..15] CTSU Measurement Mode Select 1 */ - __IOM uint32_t MD2 : 1; /*!< [16..16] CTSU Measurement Mode Select 2 */ - __IOM uint32_t ATUNE2 : 1; /*!< [17..17] CTSU Current Range Adjustment */ - __IOM uint32_t LOAD : 2; /*!< [19..18] CTSU Measurement Load Control */ - __IOM uint32_t POSEL : 2; /*!< [21..20] CTSU Non-measured Channel Output Select */ - __IOM uint32_t SDPSEL : 1; /*!< [22..22] CTSU Sensor Drive Pulse Select */ - __IOM uint32_t FCMODE : 1; /*!< [23..23] CTSU SUCLK Control */ - __IOM uint32_t STCLK : 6; /*!< [29..24] CTSU STCLK Select */ - __IOM uint32_t DCMODE : 1; /*!< [30..30] CTSU Current Measurement Mode Select */ - __IOM uint32_t DCBACK : 1; /*!< [31..31] CTSU Current Measurement Feedback Select */ - } CTSUCRA_b; - }; + union + { + __IOM uint8_t TFCR; /*!< (@ 0x0000084A) Transmit FIFO Control Register */ struct { - union - { - __IOM uint16_t CTSUCRAL; /*!< (@ 0x00000000) CTSU Control Register A */ - - struct - { - __IOM uint8_t CTSUCR0; /*!< (@ 0x00000000) CTSU Control Register A */ - __IOM uint8_t CTSUCR1; /*!< (@ 0x00000001) CTSU Control Register A */ - }; - }; - __IOM uint8_t CTSUCR2; /*!< (@ 0x00000002) CTSU Control Register A */ - __IOM uint8_t CTSUCR3; /*!< (@ 0x00000003) CTSU Control Register A */ - }; + __IOM uint8_t TFE : 1; /*!< [0..0] Transmit FIFO Enable */ + __IM uint8_t TFUST : 3; /*!< [3..1] Transmit FIFO Unsent Message Number Status */ + uint8_t : 2; + __IM uint8_t TFFST : 1; /*!< [6..6] Transmit FIFO Full Status */ + __IM uint8_t TFEST : 1; /*!< [7..7] Transmit FIFO Empty Status */ + } TFCR_b; }; union { - union - { - __IOM uint32_t CTSUCRB; /*!< (@ 0x00000004) CTSU Control Register B */ - - struct - { - __IOM uint32_t PRRATIO : 4; /*!< [3..0] CTSU Measurement Time and Pulse Count Adjustment */ - __IOM uint32_t PRMODE : 2; /*!< [5..4] CTSU Base Period and Pulse Count Setting */ - __IOM uint32_t SOFF : 1; /*!< [6..6] CTSU High-Pass Noise Reduction Function Off Setting */ - __IOM uint32_t PROFF : 1; /*!< [7..7] CTSU Random Number Off Control */ - __IOM uint32_t SST : 8; /*!< [15..8] CTSU Sensor Stabilization Wait Control */ - uint32_t : 8; - __IOM uint32_t SSMOD : 3; /*!< [26..24] CTSU SUCLK Diffusion Mode Select */ - uint32_t : 1; - __IOM uint32_t SSCNT : 2; /*!< [29..28] CTSU SUCLK Diffusion Control */ - uint32_t : 2; - } CTSUCRB_b; - }; + __OM uint8_t TFPCR; /*!< (@ 0x0000084B) Transmit FIFO Pointer Control Register */ struct { - union - { - __IOM uint16_t CTSUCRBL; /*!< (@ 0x00000004) CTSU Control Register B */ - - struct - { - __IOM uint8_t CTSUSDPRS; /*!< (@ 0x00000004) CTSU Control Register B */ - __IOM uint8_t CTSUSST; /*!< (@ 0x00000005) CTSU Control Register B */ - }; - }; - - union - { - __IOM uint16_t CTSUCRBH; /*!< (@ 0x00000006) CTSU Control Register B */ - - struct - { - __IM uint8_t RESERVED; - __IOM uint8_t CTSUDCLKC; /*!< (@ 0x00000007) CTSU Control Register B */ - }; - }; - }; + __OM uint8_t TFPCR : 8; /*!< [7..0] The CPU-side pointer for the transmit FIFO is incremented + * by writing FFh to TFPCR. */ + } TFPCR_b; }; union { - union - { - __IOM uint32_t CTSUMCH; /*!< (@ 0x00000008) CTSU Measurement Channel Register */ - - struct - { - __IOM uint32_t MCH0 : 6; /*!< [5..0] CTSU Measurement Channel 0 */ - uint32_t : 2; - __IOM uint32_t MCH1 : 6; /*!< [13..8] CTSU Measurement Channel 1 */ - uint32_t : 2; - __IOM uint32_t MCA0 : 1; /*!< [16..16] CTSU Multiple Valid Clock Control */ - __IOM uint32_t MCA1 : 1; /*!< [17..17] CTSU Multiple Valid Clock Control */ - __IOM uint32_t MCA2 : 1; /*!< [18..18] CTSU Multiple Valid Clock Control */ - __IOM uint32_t MCA3 : 1; /*!< [19..19] CTSU Multiple Valid Clock Control */ - uint32_t : 12; - } CTSUMCH_b; - }; + __IOM uint8_t EIER; /*!< (@ 0x0000084C) Error Interrupt Enable Register */ struct { - union - { - __IOM uint16_t CTSUMCHL; /*!< (@ 0x00000008) CTSU Measurement Channel Register */ + __IOM uint8_t BEIE : 1; /*!< [0..0] Bus Error Interrupt Enable */ + __IOM uint8_t EWIE : 1; /*!< [1..1] Error-Warning Interrupt Enable */ + __IOM uint8_t EPIE : 1; /*!< [2..2] Error-Passive Interrupt Enable */ + __IOM uint8_t BOEIE : 1; /*!< [3..3] Bus-Off Entry Interrupt Enable */ + __IOM uint8_t BORIE : 1; /*!< [4..4] Bus-Off Recovery Interrupt Enable */ + __IOM uint8_t ORIE : 1; /*!< [5..5] Overrun Interrupt Enable */ + __IOM uint8_t OLIE : 1; /*!< [6..6] Overload Frame Transmit Interrupt Enable */ + __IOM uint8_t BLIE : 1; /*!< [7..7] Bus Lock Interrupt Enable */ + } EIER_b; + }; - struct - { - __IOM uint8_t CTSUMCH0; /*!< (@ 0x00000008) CTSU Measurement Channel Register */ - __IOM uint8_t CTSUMCH1; /*!< (@ 0x00000009) CTSU Measurement Channel Register */ - }; - }; + union + { + __IOM uint8_t EIFR; /*!< (@ 0x0000084D) Error Interrupt Factor Judge Register */ - union - { - __IOM uint16_t CTSUMCHH; /*!< (@ 0x0000000A) CTSU Measurement Channel Register */ - __IOM uint8_t CTSUMFAF; /*!< (@ 0x0000000A) CTSU Measurement Channel Register */ - }; - }; + struct + { + __IOM uint8_t BEIF : 1; /*!< [0..0] Bus Error Detect Flag */ + __IOM uint8_t EWIF : 1; /*!< [1..1] Error-Warning Detect Flag */ + __IOM uint8_t EPIF : 1; /*!< [2..2] Error-Passive Detect Flag */ + __IOM uint8_t BOEIF : 1; /*!< [3..3] Bus-Off Entry Detect Flag */ + __IOM uint8_t BORIF : 1; /*!< [4..4] Bus-Off Recovery Detect Flag */ + __IOM uint8_t ORIF : 1; /*!< [5..5] Receive Overrun Detect Flag */ + __IOM uint8_t OLIF : 1; /*!< [6..6] Overload Frame Transmission Detect Flag */ + __IOM uint8_t BLIF : 1; /*!< [7..7] Bus Lock Detect Flag */ + } EIFR_b; }; union { - union + __IM uint8_t RECR; /*!< (@ 0x0000084E) Receive Error Count Register */ + + struct { - __IOM uint32_t CTSUCHACA; /*!< (@ 0x0000000C) CTSU Channel Enable Control Register A */ + __IM uint8_t RECR : 8; /*!< [7..0] Receive error count functionRECR increments or decrements + * the counter value according to the error status of the + * CAN module during reception. */ + } RECR_b; + }; - struct - { - __IOM uint32_t CHAC00 : 1; /*!< [0..0] CTSU Channel Enable Control A */ - uint32_t : 1; - __IOM uint32_t CHAC02 : 1; /*!< [2..2] CTSU Channel Enable Control A */ - uint32_t : 1; - __IOM uint32_t CHAC04 : 1; /*!< [4..4] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC05 : 1; /*!< [5..5] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC06 : 1; /*!< [6..6] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC07 : 1; /*!< [7..7] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC08 : 1; /*!< [8..8] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC09 : 1; /*!< [9..9] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC10 : 1; /*!< [10..10] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC11 : 1; /*!< [11..11] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC12 : 1; /*!< [12..12] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC13 : 1; /*!< [13..13] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC14 : 1; /*!< [14..14] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC15 : 1; /*!< [15..15] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC16 : 1; /*!< [16..16] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC17 : 1; /*!< [17..17] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC18 : 1; /*!< [18..18] CTSU Channel Enable Control A */ - uint32_t : 2; - __IOM uint32_t CHAC21 : 1; /*!< [21..21] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC22 : 1; /*!< [22..22] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC23 : 1; /*!< [23..23] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC24 : 1; /*!< [24..24] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC25 : 1; /*!< [25..25] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC26 : 1; /*!< [26..26] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC27 : 1; /*!< [27..27] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC28 : 1; /*!< [28..28] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC29 : 1; /*!< [29..29] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC30 : 1; /*!< [30..30] CTSU Channel Enable Control A */ - __IOM uint32_t CHAC31 : 1; /*!< [31..31] CTSU Channel Enable Control A */ - } CTSUCHACA_b; - }; + union + { + __IM uint8_t TECR; /*!< (@ 0x0000084F) Transmit Error Count Register */ struct { - union - { - __IOM uint16_t CTSUCHACAL; /*!< (@ 0x0000000C) CTSU Channel Enable Control Register A */ - - struct - { - __IOM uint8_t CTSUCHAC0; /*!< (@ 0x0000000C) CTSU Channel Enable Control Register A */ - __IOM uint8_t CTSUCHAC1; /*!< (@ 0x0000000D) CTSU Channel Enable Control Register A */ - }; - }; + __IM uint8_t TECR : 8; /*!< [7..0] Transmit error count functionTECR increments or decrements + * the counter value according to the error status of the + * CAN module during transmission. */ + } TECR_b; + }; - union - { - __IOM uint16_t CTSUCHACAH; /*!< (@ 0x0000000E) CTSU Channel Enable Control Register A */ + union + { + __IOM uint8_t ECSR; /*!< (@ 0x00000850) Error Code Store Register */ - struct - { - __IOM uint8_t CTSUCHAC2; /*!< (@ 0x0000000E) CTSU Channel Enable Control Register A */ - __IOM uint8_t CTSUCHAC3; /*!< (@ 0x0000000F) CTSU Channel Enable Control Register A */ - }; - }; - }; + struct + { + __IOM uint8_t SEF : 1; /*!< [0..0] Stuff Error Flag */ + __IOM uint8_t FEF : 1; /*!< [1..1] Form Error Flag */ + __IOM uint8_t AEF : 1; /*!< [2..2] ACK Error Flag */ + __IOM uint8_t CEF : 1; /*!< [3..3] CRC Error Flag */ + __IOM uint8_t BE1F : 1; /*!< [4..4] Bit Error (recessive) Flag */ + __IOM uint8_t BE0F : 1; /*!< [5..5] Bit Error (dominant) Flag */ + __IOM uint8_t ADEF : 1; /*!< [6..6] ACK Delimiter Error Flag */ + __IOM uint8_t EDPM : 1; /*!< [7..7] Error Display Mode Select */ + } ECSR_b; }; union { - union - { - __IOM uint32_t CTSUCHACB; /*!< (@ 0x00000010) CTSU Channel Enable Control Register B */ + __IOM uint8_t CSSR; /*!< (@ 0x00000851) Channel Search Support Register */ - struct - { - __IOM uint32_t CHAC32 : 1; /*!< [0..0] CTSU Channel Enable Control B */ - __IOM uint32_t CHAC33 : 1; /*!< [1..1] CTSU Channel Enable Control B */ - __IOM uint32_t CHAC34 : 1; /*!< [2..2] CTSU Channel Enable Control B */ - __IOM uint32_t CHAC35 : 1; /*!< [3..3] CTSU Channel Enable Control B */ - uint32_t : 28; - } CTSUCHACB_b; - }; - __IOM uint16_t CTSUCHACBL; /*!< (@ 0x00000010) CTSU Channel Enable Control Register B */ - __IOM uint8_t CTSUCHAC4; /*!< (@ 0x00000010) CTSU Channel Enable Control Register B */ + struct + { + __IOM uint8_t CSSR : 8; /*!< [7..0] When the value for the channel search is input, the channel + * number is output to MSSR. */ + } CSSR_b; }; union { - union + __IM uint8_t MSSR; /*!< (@ 0x00000852) Mailbox Search Status Register */ + + struct { - __IOM uint32_t CTSUCHTRCA; /*!< (@ 0x00000014) CTSU Channel Transmit/Receive Control Register - * A */ + __IM uint8_t MBNST : 5; /*!< [4..0] Search Result Mailbox Number Status These bits output + * the smallest mailbox number that is searched in each mode + * of MSMR. */ + uint8_t : 2; + __IM uint8_t SEST : 1; /*!< [7..7] Search Result Status */ + } MSSR_b; + }; - struct - { - __IOM uint32_t CHTRC : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control A */ - uint32_t : 1; - __IOM uint32_t CHTRC02 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control A */ - uint32_t : 1; - __IOM uint32_t CHTRC04 : 1; /*!< [4..4] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC05 : 1; /*!< [5..5] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC06 : 1; /*!< [6..6] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC07 : 1; /*!< [7..7] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC08 : 1; /*!< [8..8] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC09 : 1; /*!< [9..9] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC10 : 1; /*!< [10..10] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC11 : 1; /*!< [11..11] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC12 : 1; /*!< [12..12] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC13 : 1; /*!< [13..13] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC14 : 1; /*!< [14..14] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC15 : 1; /*!< [15..15] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC16 : 1; /*!< [16..16] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC17 : 1; /*!< [17..17] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC18 : 1; /*!< [18..18] CTSU Channel Transmit/Receive Control A */ - uint32_t : 2; - __IOM uint32_t CHTRC21 : 1; /*!< [21..21] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC22 : 1; /*!< [22..22] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC23 : 1; /*!< [23..23] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC24 : 1; /*!< [24..24] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC25 : 1; /*!< [25..25] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC26 : 1; /*!< [26..26] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC27 : 1; /*!< [27..27] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC28 : 1; /*!< [28..28] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC29 : 1; /*!< [29..29] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC30 : 1; /*!< [30..30] CTSU Channel Transmit/Receive Control A */ - __IOM uint32_t CHTRC31 : 1; /*!< [31..31] CTSU Channel Transmit/Receive Control A */ - } CTSUCHTRCA_b; - }; + union + { + __IOM uint8_t MSMR; /*!< (@ 0x00000853) Mailbox Search Mode Register */ struct { - union - { - __IOM uint16_t CTSUCHTRCAL; /*!< (@ 0x00000014) CTSU Channel Transmit/Receive Control Register - * A */ - - struct - { - __IOM uint8_t CTSUCHTRC0; /*!< (@ 0x00000014) CTSU Channel Transmit/Receive Control Register - * A */ - __IOM uint8_t CTSUCHTRC1; /*!< (@ 0x00000015) CTSU Channel Transmit/Receive Control Register - * A */ - }; - }; + __IOM uint8_t MBSM : 2; /*!< [1..0] Mailbox Search Mode Select */ + uint8_t : 6; + } MSMR_b; + }; - union - { - __IOM uint16_t CTSUCHTRCAH; /*!< (@ 0x00000016) CTSU Channel Transmit/Receive Control Register - * A */ + union + { + __IM uint16_t TSR; /*!< (@ 0x00000854) Time Stamp Register */ - struct - { - __IOM uint8_t CTSUCHTRC2; /*!< (@ 0x00000016) CTSU Channel Transmit/Receive Control Register - * A */ - __IOM uint8_t CTSUCHTRC3; /*!< (@ 0x00000017) CTSU Channel Transmit/Receive Control Register - * A */ - }; - }; - }; + struct + { + __IM uint16_t TSR : 16; /*!< [15..0] Free-running counter value for the time stamp function */ + } TSR_b; }; union { - union - { - __IOM uint32_t CTSUCHTRCB; /*!< (@ 0x00000018) CTSU Channel Transmit/Receive Control Register - * B */ + __IOM uint16_t AFSR; /*!< (@ 0x00000856) Acceptance Filter Support Register */ - struct - { - __IOM uint32_t CHTRC32 : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control B */ - __IOM uint32_t CHTRC33 : 1; /*!< [1..1] CTSU Channel Transmit/Receive Control B */ - __IOM uint32_t CHTRC34 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control B */ - __IOM uint32_t CHTRC35 : 1; /*!< [3..3] CTSU Channel Transmit/Receive Control B */ - uint32_t : 28; - } CTSUCHTRCB_b; - }; - __IOM uint16_t CTSUCHTRCBL; /*!< (@ 0x00000018) CTSU Channel Transmit/Receive Control Register - * B */ - __IOM uint8_t CTSUCHTRC4; /*!< (@ 0x00000018) CTSU Channel Transmit/Receive Control Register - * B */ + struct + { + __IOM uint16_t AFSR : 16; /*!< [15..0] After the standard ID of a received message is written, + * the value converted for data table search can be read. */ + } AFSR_b; }; union { - union + __IOM uint8_t TCR; /*!< (@ 0x00000858) Test Control Register */ + + struct { - __IOM uint32_t CTSUSR; /*!< (@ 0x0000001C) CTSU Status Register */ + __IOM uint8_t TSTE : 1; /*!< [0..0] CAN Test Mode Enable */ + __IOM uint8_t TSTM : 2; /*!< [2..1] CAN Test Mode Select */ + uint8_t : 5; + } TCR_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; +} R_CAN0_Type; /*!< Size = 2140 (0x85c) */ - struct - { - __IOM uint32_t MFC : 2; /*!< [1..0] CTSU Multi-clock Counter */ - uint32_t : 3; - __OM uint32_t ICOMPRST : 1; /*!< [5..5] CTSU CTSUICOMP1 Flag Reset */ - __IM uint32_t ICOMP1 : 1; /*!< [6..6] CTSU Sense Current Error Monitor */ - __IM uint32_t ICOMP0 : 1; /*!< [7..7] TSCAP Voltage Error Monitor */ - __IM uint32_t STC : 3; /*!< [10..8] CTSU Measurement Status Counter */ - uint32_t : 1; - __IM uint32_t DTSR : 1; /*!< [12..12] CTSU Data Transfer Status Flag */ - __IOM uint32_t SENSOVF : 1; /*!< [13..13] CTSU Sensor Counter Overflow Flag */ - uint32_t : 1; - __IM uint32_t PS : 1; /*!< [15..15] CTSU Mutual Capacitance Status Flag */ - __IOM uint32_t CFCRDCH : 6; /*!< [21..16] CTSU CFC Read Channel Select */ - uint32_t : 10; - } CTSUSR_b; - }; +/* =========================================================================================================================== */ +/* ================ R_CRC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Cyclic Redundancy Check (CRC) Calculator (R_CRC) + */ + +typedef struct /*!< (@ 0x40074000) R_CRC Structure */ +{ + union + { + __IOM uint8_t CRCCR0; /*!< (@ 0x00000000) CRC Control Register0 */ struct { - union - { - __IOM uint16_t CTSUSRL; /*!< (@ 0x0000001C) CTSU Status Register */ + __IOM uint8_t GPS : 3; /*!< [2..0] CRC Generating Polynomial Switching */ + uint8_t : 3; + __IOM uint8_t LMS : 1; /*!< [6..6] CRC Calculation Switching */ + __OM uint8_t DORCLR : 1; /*!< [7..7] CRCDOR Register Clear */ + } CRCCR0_b; + }; - struct - { - __IOM uint8_t CTSUSR0; /*!< (@ 0x0000001C) CTSU Status Register */ - __IOM uint8_t CTSUST; /*!< (@ 0x0000001D) CTSU Status Register */ - }; - }; + union + { + __IOM uint8_t CRCCR1; /*!< (@ 0x00000001) CRC Control Register1 */ - union - { - __IOM uint16_t CTSUSRH; /*!< (@ 0x0000001E) CTSU Status Register */ - __IOM uint8_t CTSUSR2; /*!< (@ 0x0000001E) CTSU Status Register */ - }; - }; + struct + { + uint8_t : 6; + __IOM uint8_t CRCSWR : 1; /*!< [6..6] Snoop-on-write/read switch bit */ + __IOM uint8_t CRCSEN : 1; /*!< [7..7] Snoop enable bit */ + } CRCCR1_b; }; + __IM uint16_t RESERVED; union { union { - __IOM uint32_t CTSUSO; /*!< (@ 0x00000020) CTSU Sensor Offset Register */ + __IOM uint32_t CRCDIR; /*!< (@ 0x00000004) CRC Data Input Register */ struct { - __IOM uint32_t SO : 10; /*!< [9..0] CTSU Sensor Offset Adjustment */ - __IOM uint32_t SNUM : 8; /*!< [17..10] CTSU Measurement Count Setting */ - uint32_t : 2; - __IOM uint32_t SSDIV : 4; /*!< [23..20] CTSU Spectrum Diffusion Frequency Division Setting */ - __IOM uint32_t SDPA : 8; /*!< [31..24] CTSU Base Clock Setting */ - } CTSUSO_b; + __IOM uint32_t CRCDIR : 32; /*!< [31..0] Calculation input Data (Case of CRC-32, CRC-32C ) */ + } CRCDIR_b; }; - struct + union { - __IOM uint16_t CTSUSO0; /*!< (@ 0x00000020) CTSU Sensor Offset Register */ - __IOM uint16_t CTSUSO1; /*!< (@ 0x00000022) CTSU Sensor Offset Register */ + __IOM uint8_t CRCDIR_BY; /*!< (@ 0x00000004) CRC Data Input Register (byte access) */ + + struct + { + __IOM uint8_t CRCDIR_BY : 8; /*!< [7..0] Calculation input Data ( Case of CRC-8, CRC-16 or CRC-CCITT + * ) */ + } CRCDIR_BY_b; }; }; @@ -4595,7556 +4657,9807 @@ typedef struct /*!< (@ 0x40082000) R_CTSU2 Structure { union { - __IM uint32_t CTSUSCNT; /*!< (@ 0x00000024) CTSU Sensor Counter Register */ + __IOM uint32_t CRCDOR; /*!< (@ 0x00000008) CRC Data Output Register */ struct { - __IM uint32_t SENSCNT : 16; /*!< [15..0] CTSU Sensor Counter */ - uint32_t : 16; - } CTSUSCNT_b; + __IOM uint32_t CRCDOR : 32; /*!< [31..0] Calculation output Data (Case of CRC-32, CRC-32C ) */ + } CRCDOR_b; }; - __IM uint16_t CTSUSC; /*!< (@ 0x00000024) CTSU Sensor Counter Register */ - }; - union - { union { - __IOM uint32_t CTSUCALIB; /*!< (@ 0x00000028) CTSU Calibration Register */ + __IOM uint16_t CRCDOR_HA; /*!< (@ 0x00000008) CRC Data Output Register (halfword access) */ struct { - uint32_t : 2; - __IOM uint32_t TSOD : 1; /*!< [2..2] CTSU TS Pins Fixed Output Select */ - __IOM uint32_t DRV : 1; /*!< [3..3] CTSU Calibration Setting Bit 1 */ - uint32_t : 2; - __IOM uint32_t SUCLKEN : 1; /*!< [6..6] CTSU SUCLK Enable Control */ - __IOM uint32_t TSOC : 1; /*!< [7..7] CTSU Calibration Setting Bit 2 */ - uint32_t : 1; - __IOM uint32_t IOC : 1; /*!< [9..9] CTSU Transfer Pins Control */ - __IOM uint32_t CFCRDMD : 1; /*!< [10..10] CTSU CFC Counter Read Mode Select */ - __IOM uint32_t DCOFF : 1; /*!< [11..11] CTSU Down Converter Control */ - uint32_t : 10; - __IOM uint32_t CFCMODE : 1; /*!< [22..22] CTSU CFC Current Source Switching */ - uint32_t : 2; - __IOM uint32_t DACCARRY : 1; /*!< [25..25] CTSU DAC Upper Current Source Carry Control */ - uint32_t : 1; - __IOM uint32_t SUCARRY : 1; /*!< [27..27] CTSU CCO Carry Control */ - __IOM uint32_t DACCLK : 1; /*!< [28..28] CTSU DAC Modulation Circuit Clock Select */ - __IOM uint32_t CCOCLK : 1; /*!< [29..29] CTSU CCO Modulation Circuit Clock Select */ - __IOM uint32_t CCOCALIB : 1; /*!< [30..30] CTSU CCO Calibration Mode Select */ - uint32_t : 1; - } CTSUCALIB_b; + __IOM uint16_t CRCDOR_HA : 16; /*!< [15..0] Calculation output Data (Case of CRC-16 or CRC-CCITT + * ) */ + } CRCDOR_HA_b; }; - struct + union { - __IOM uint16_t CTSUDBGR0; /*!< (@ 0x00000028) CTSU Calibration Register */ - __IOM uint16_t CTSUDBGR1; /*!< (@ 0x0000002A) CTSU Calibration Register */ + __IOM uint8_t CRCDOR_BY; /*!< (@ 0x00000008) CRC Data Output Register(byte access) */ + + struct + { + __IOM uint8_t CRCDOR_BY : 8; /*!< [7..0] Calculation output Data (Case of CRC-8 ) */ + } CRCDOR_BY_b; }; }; union { - __IOM uint32_t CTSUSUCLKA; /*!< (@ 0x0000002C) CTSU Sensor Unit Clock Control Register A */ + __IOM uint16_t CRCSAR; /*!< (@ 0x0000000C) Snoop Address Register */ struct { - __IOM uint16_t CTSUSUCLK0; /*!< (@ 0x0000002C) CTSU Sensor Unit Clock Control Register A */ - __IOM uint16_t CTSUSUCLK1; /*!< (@ 0x0000002E) CTSU Sensor Unit Clock Control Register A */ - }; + __IOM uint16_t CRCSA : 14; /*!< [13..0] snoop address bitSet the I/O register address to snoop */ + uint16_t : 2; + } CRCSAR_b; }; + __IM uint16_t RESERVED1; +} R_CRC_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_CTSU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Capacitive Touch Sensing Unit (R_CTSU) + */ +typedef struct /*!< (@ 0x40081000) R_CTSU Structure */ +{ union { - union - { - __IOM uint32_t CTSUSUCLKB; /*!< (@ 0x00000030) CTSU Sensor Unit Clock Control Register B */ - - struct - { - __IOM uint32_t SUADJ2 : 8; /*!< [7..0] CTSU SUCLK Frequency Adjustment */ - __IOM uint32_t SUMULTI2 : 8; /*!< [15..8] CTSU SUCLK Multiplier Rate Setting */ - __IOM uint32_t SUADJ3 : 8; /*!< [23..16] CTSU SUCLK Frequency Adjustment */ - __IOM uint32_t SUMULTI3 : 8; /*!< [31..24] CTSU SUCLK Multiplier Rate Setting */ - } CTSUSUCLKB_b; - }; + __IOM uint8_t CTSUCR0; /*!< (@ 0x00000000) CTSU Control Register 0 */ struct { - __IOM uint16_t CTSUSUCLK2; /*!< (@ 0x00000030) CTSU Sensor Unit Clock Control Register B */ - __IOM uint16_t CTSUSUCLK3; /*!< (@ 0x00000032) CTSU Sensor Unit Clock Control Register B */ - }; + __IOM uint8_t CTSUSTRT : 1; /*!< [0..0] CTSU Measurement Operation Start */ + __IOM uint8_t CTSUCAP : 1; /*!< [1..1] CTSU Measurement Operation Start Trigger Select */ + __IOM uint8_t CTSUSNZ : 1; /*!< [2..2] CTSU Wait State Power-Saving Enable */ + __IOM uint8_t CTSUIOC : 1; /*!< [3..3] CTSU Transmit Pin Control */ + __IOM uint8_t CTSUINIT : 1; /*!< [4..4] CTSU Control Block Initialization */ + uint8_t : 2; + __IOM uint8_t CTSUTXVSEL : 1; /*!< [7..7] CTSU Transmission power supply selection */ + } CTSUCR0_b; }; union { - union - { - __IM uint32_t CTSUCFCCNT; /*!< (@ 0x00000034) CTSU CFC Counter Register */ + __IOM uint8_t CTSUCR1; /*!< (@ 0x00000001) CTSU Control Register 1 */ - struct - { - __IM uint32_t CFCCNT : 16; /*!< [15..0] CTSU CFC Counter */ - uint32_t : 16; - } CTSUCFCCNT_b; - }; - __IM uint16_t CTSUCFCCNTL; /*!< (@ 0x00000034) CTSU CFC Counter Register */ + struct + { + __IOM uint8_t CTSUPON : 1; /*!< [0..0] CTSU Power Supply Enable */ + __IOM uint8_t CTSUCSW : 1; /*!< [1..1] CTSU LPF Capacitance Charging Control */ + __IOM uint8_t CTSUATUNE0 : 1; /*!< [2..2] CTSU Power Supply Operating Mode Setting */ + __IOM uint8_t CTSUATUNE1 : 1; /*!< [3..3] CTSU Power Supply Capacity Adjustment */ + __IOM uint8_t CTSUCLK : 2; /*!< [5..4] CTSU Operating Clock Select */ + __IOM uint8_t CTSUMD : 2; /*!< [7..6] CTSU Measurement Mode Select */ + } CTSUCR1_b; }; -} R_CTSU2_Type; /*!< Size = 56 (0x38) */ - -/* =========================================================================================================================== */ -/* ================ R_DAC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief D/A Converter (R_DAC) - */ -typedef struct /*!< (@ 0x4005E000) R_DAC Structure */ -{ union { - __IOM uint16_t DADR[2]; /*!< (@ 0x00000000) D/A Data Register */ + __IOM uint8_t CTSUSDPRS; /*!< (@ 0x00000002) CTSU Synchronous Noise Reduction Setting Register */ struct { - __IOM uint16_t DADR : 16; /*!< [15..0] D/A Data RegisterNOTE: When DADPR.DPSEL = 0, the high-order - * 4 bits are fixed to 0: right justified format. When DADPR.DPSEL - * = 1, the low-order 4 bits are fixed to 0: left justified - * format. */ - } DADR_b[2]; + __IOM uint8_t CTSUPRRATIO : 4; /*!< [3..0] CTSU Measurement Time and Pulse Count AdjustmentRecommended + * setting: 3 (0011b) */ + __IOM uint8_t CTSUPRMODE : 2; /*!< [5..4] CTSU Base Period and Pulse Count Setting */ + __IOM uint8_t CTSUSOFF : 1; /*!< [6..6] CTSU High-Pass Noise Reduction Function Off Setting */ + uint8_t : 1; + } CTSUSDPRS_b; }; union { - __IOM uint8_t DACR; /*!< (@ 0x00000004) D/A Control Register */ + __IOM uint8_t CTSUSST; /*!< (@ 0x00000003) CTSU Sensor Stabilization Wait Control Register */ struct { - uint8_t : 5; - __IOM uint8_t DAE : 1; /*!< [5..5] D/A Enable */ - __IOM uint8_t DAOE0 : 1; /*!< [6..6] D/A Output Enable 0 */ - __IOM uint8_t DAOE1 : 1; /*!< [7..7] D/A Output Enable 0 */ - } DACR_b; + __IOM uint8_t CTSUSST : 8; /*!< [7..0] CTSU Sensor Stabilization Wait ControlNOTE: The value + * of these bits should be fixed to 00010000b. */ + } CTSUSST_b; }; union { - __IOM uint8_t DADPR; /*!< (@ 0x00000005) DADR0 Format Select Register */ + __IOM uint8_t CTSUMCH0; /*!< (@ 0x00000004) CTSU Measurement Channel Register 0 */ struct { - uint8_t : 7; - __IOM uint8_t DPSEL : 1; /*!< [7..7] DADRm Format Select */ - } DADPR_b; + __IOM uint8_t CTSUMCH0 : 6; /*!< [5..0] CTSU Measurement Channel 0.Note1: Writing to these bits + * is only enabled in self-capacitance single-scan mode (CTSUCR1.CTSUMD[1:0] + * bits = 00b).Note2: If the value of CTSUMCH0 was set to + * b'111111 in mode other than self-capacitor single scan + * mode, the measurement is stopped. */ + uint8_t : 2; + } CTSUMCH0_b; }; union { - __IOM uint8_t DAADSCR; /*!< (@ 0x00000006) D/A-A/D Synchronous Start Control Register */ + __IOM uint8_t CTSUMCH1; /*!< (@ 0x00000005) CTSU Measurement Channel Register 1 */ struct { - uint8_t : 7; - __IOM uint8_t DAADST : 1; /*!< [7..7] D/A-A/D Synchronous Conversion */ - } DAADSCR_b; + __IM uint8_t CTSUMCH1 : 6; /*!< [5..0] CTSU Measurement Channel 1Note1: If the value of CTSUMCH1 + * was set to b'111111, the measurement is stopped. */ + uint8_t : 2; + } CTSUMCH1_b; }; union { - __IOM uint8_t DAVREFCR; /*!< (@ 0x00000007) D/A VREF Control Register */ + __IOM uint8_t CTSUCHAC[5]; /*!< (@ 0x00000006) CTSU Channel Enable Control Register */ struct { - __IOM uint8_t REF : 3; /*!< [2..0] D/A Reference Voltage Select */ - uint8_t : 5; - } DAVREFCR_b; + __IOM uint8_t TS0 : 1; /*!< [0..0] CTSU Channel Enable Control */ + __IOM uint8_t TS1 : 1; /*!< [1..1] CTSU Channel Enable Control */ + __IOM uint8_t TS2 : 1; /*!< [2..2] CTSU Channel Enable Control */ + __IOM uint8_t TS3 : 1; /*!< [3..3] CTSU Channel Enable Control */ + __IOM uint8_t TS4 : 1; /*!< [4..4] CTSU Channel Enable Control */ + __IOM uint8_t TS5 : 1; /*!< [5..5] CTSU Channel Enable Control */ + __IOM uint8_t TS6 : 1; /*!< [6..6] CTSU Channel Enable Control */ + __IOM uint8_t TS7 : 1; /*!< [7..7] CTSU Channel Enable Control */ + } CTSUCHAC_b[5]; }; union { - __IOM uint8_t DAAMPCR; /*!< (@ 0x00000008) D/A Output Amplifier Control Register */ + __IOM uint8_t CTSUCHTRC[5]; /*!< (@ 0x0000000B) CTSU Channel Transmit/Receive Control Register */ struct { - uint8_t : 6; - __IOM uint8_t DAAMP0 : 1; /*!< [6..6] Amplifier Control */ - __IOM uint8_t DAAMP1 : 1; /*!< [7..7] Amplifier Control */ - } DAAMPCR_b; + __IOM uint8_t TS0 : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS1 : 1; /*!< [1..1] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS2 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS3 : 1; /*!< [3..3] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS4 : 1; /*!< [4..4] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS5 : 1; /*!< [5..5] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS6 : 1; /*!< [6..6] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS7 : 1; /*!< [7..7] CTSU Channel Transmit/Receive Control */ + } CTSUCHTRC_b[5]; }; union { - __IOM uint8_t DAPC; /*!< (@ 0x00000009) D/A Switch Charge Pump Control Register */ + __IOM uint8_t CTSUDCLKC; /*!< (@ 0x00000010) CTSU High-Pass Noise Reduction Control Register */ struct { - __IOM uint8_t PUMPEN : 1; /*!< [0..0] Charge Pump Enable */ - uint8_t : 7; - } DAPC_b; + __IOM uint8_t CTSUSSMOD : 2; /*!< [1..0] CTSU Diffusion Clock Mode SelectNOTE: This bit should + * be set to 00b. */ + uint8_t : 2; + __IOM uint8_t CTSUSSCNT : 2; /*!< [5..4] CTSU Diffusion Clock Mode ControlNOTE: This bit should + * be set to 11b. */ + uint8_t : 2; + } CTSUDCLKC_b; }; - __IM uint16_t RESERVED[9]; union { - __IOM uint8_t DAASWCR; /*!< (@ 0x0000001C) D/A Amplifier Stabilization Wait Control Register */ + __IOM uint8_t CTSUST; /*!< (@ 0x00000011) CTSU Status Register */ struct { - uint8_t : 6; - __IOM uint8_t DAASW0 : 1; /*!< [6..6] Set the DAASW0 bit to 1 in the initialization procedure - * to wait for stabilization of the output amplifier of D/A - * channel 0. When DAASW0 is set to 1, D/A conversion operates, - * but the conversion result D/A is not output from channel - * 0. When the DAASW0 bit is 0, the stabilization wait time - * stops, and the D/A conversion result of channel 0 is output - * through the output amplifier. */ - __IOM uint8_t DAASW1 : 1; /*!< [7..7] Set the DAASW1 bit to 1 in the initialization procedure - * to wait for stabilization of the output amplifier of D/A - * channel 1. When DAASW1 is set to 1, D/A conversion operates, - * but the conversion result D/A is not output from channel - * 1. When the DAASW1 bit is 0, the stabilization wait time - * stops, and the D/A conversion result of channel 1 is output - * through the output amplifier. */ - } DAASWCR_b; + __IM uint8_t CTSUSTC : 3; /*!< [2..0] CTSU Measurement Status Counter */ + uint8_t : 1; + __IM uint8_t CTSUDTSR : 1; /*!< [4..4] CTSU Data Transfer Status Flag */ + __IOM uint8_t CTSUSOVF : 1; /*!< [5..5] CTSU Sensor Counter Overflow Flag */ + __IOM uint8_t CTSUROVF : 1; /*!< [6..6] CTSU Reference Counter Overflow Flag */ + __IM uint8_t CTSUPS : 1; /*!< [7..7] CTSU Mutual Capacitance Status Flag */ + } CTSUST_b; }; - __IM uint8_t RESERVED1; - __IM uint16_t RESERVED2[2129]; union { - __IOM uint8_t DAADUSR; /*!< (@ 0x000010C0) D/A A/D Synchronous Unit Select Register */ + __IOM uint16_t CTSUSSC; /*!< (@ 0x00000012) CTSU High-Pass Noise Reduction Spectrum Diffusion + * Control Register */ struct { - uint8_t : 6; - __IOM uint8_t AMADSEL1 : 1; /*!< [6..6] The DAADUSR register selects the target ADC12 unit for - * D/A and A/D synchronous conversions. Set bit [1] to 1 to - * select unit 1 as the target synchronous unit for the MCU. - * When setting the DAADSCR.DAADST bit to 1 for synchronous - * conversions, select the target unit in this register in - * advance. Only set the DAADUSR register while the ADCSR.ADST - * bit of the ADC12 is set to 0 and the DAADSCR.DAADST bit - * is set to 0. */ - uint8_t : 1; - } DAADUSR_b; + uint16_t : 8; + __IOM uint16_t CTSUSSDIV : 4; /*!< [11..8] CTSU Spectrum Diffusion Frequency Division Setting */ + uint16_t : 4; + } CTSUSSC_b; }; - __IM uint8_t RESERVED3; - __IM uint16_t RESERVED4; -} R_DAC_Type; /*!< Size = 4292 (0x10c4) */ - -/* =========================================================================================================================== */ -/* ================ R_DAC8 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief 8-Bit D/A Converter (R_DAC8) - */ -typedef struct /*!< (@ 0x4009E000) R_DAC8 Structure */ -{ union { - __IOM uint8_t DACS[2]; /*!< (@ 0x00000000) D/A Conversion Value Setting Register [0..1] */ + __IOM uint16_t CTSUSO0; /*!< (@ 0x00000014) CTSU Sensor Offset Register 0 */ struct { - __IOM uint8_t DACS : 8; /*!< [7..0] DACS D/A conversion store data */ - } DACS_b[2]; + __IOM uint16_t CTSUSO : 10; /*!< [9..0] CTSU Sensor Offset AdjustmentCurrent offset amount is + * CTSUSO ( 0 to 1023 ) */ + __IOM uint16_t CTSUSNUM : 6; /*!< [15..10] CTSU Measurement Count Setting */ + } CTSUSO0_b; }; - __IM uint8_t RESERVED; union { - __IOM uint8_t DAM; /*!< (@ 0x00000003) D/A Converter Mode Register */ + __IOM uint16_t CTSUSO1; /*!< (@ 0x00000016) CTSU Sensor Offset Register 1 */ struct { - __IOM uint8_t DAMD0 : 1; /*!< [0..0] D/A operation mode select 0 */ - __IOM uint8_t DAMD1 : 1; /*!< [1..1] D/A operation mode select 1 */ - uint8_t : 2; - __IOM uint8_t DACE0 : 1; /*!< [4..4] D/A operation enable 0 */ - __IOM uint8_t DACE1 : 1; /*!< [5..5] D/A operation enable 1 */ - uint8_t : 2; - } DAM_b; + __IOM uint16_t CTSURICOA : 8; /*!< [7..0] CTSU Reference ICO Current AdjustmentCurrent offset amount + * is CTSUSO ( 0 to 255 ) */ + __IOM uint16_t CTSUSDPA : 5; /*!< [12..8] CTSU Base Clock SettingOperating clock divided by ( + * CTSUSDPA + 1 ) x 2 */ + __IOM uint16_t CTSUICOG : 2; /*!< [14..13] CTSU ICO Gain Adjustment */ + uint16_t : 1; + } CTSUSO1_b; }; - __IM uint8_t RESERVED1[2]; union { - __IOM uint8_t DACADSCR; /*!< (@ 0x00000006) D/A A/D Synchronous Start Control Register */ + __IM uint16_t CTSUSC; /*!< (@ 0x00000018) CTSU Sensor Counter */ struct { - __IOM uint8_t DACADST : 1; /*!< [0..0] D/A A/D Synchronous Conversion */ - uint8_t : 7; - } DACADSCR_b; + __IM uint16_t CTSUSC : 16; /*!< [15..0] CTSU Sensor CounterThese bits indicate the measurement + * result of the CTSU. These bits indicate FFFFh when an overflow + * occurs. */ + } CTSUSC_b; }; union { - __IOM uint8_t DACPC; /*!< (@ 0x00000007) D/A SW Charge Pump Control Register */ + __IM uint16_t CTSURC; /*!< (@ 0x0000001A) CTSU Reference Counter */ struct { - __IOM uint8_t PUMPEN : 1; /*!< [0..0] Charge pump enable */ - uint8_t : 7; - } DACPC_b; - }; -} R_DAC8_Type; /*!< Size = 8 (0x8) */ + __IM uint16_t CTSURC : 16; /*!< [15..0] CTSU Reference CounterThese bits indicate the measurement + * result of the reference ICO.These bits indicate FFFFh when + * an overflow occurs. */ + } CTSURC_b; + }; + + union + { + __IM uint16_t CTSUERRS; /*!< (@ 0x0000001C) CTSU Error Status Register */ + + struct + { + __IOM uint16_t CTSUSPMD : 2; /*!< [1..0] Calibration Mode */ + __IOM uint16_t CTSUTSOD : 1; /*!< [2..2] TS Pin Fixed Output */ + __IOM uint16_t CTSUDRV : 1; /*!< [3..3] Calibration Setting 1 */ + uint16_t : 3; + __IOM uint16_t CTSUTSOC : 1; /*!< [7..7] Calibration Setting 2 */ + uint16_t : 7; + __IM uint16_t CTSUICOMP : 1; /*!< [15..15] TSCAP Voltage Error Monitor */ + } CTSUERRS_b; + }; + __IM uint16_t RESERVED; + __IOM uint8_t CTSUTRMR; /*!< (@ 0x00000020) CTSU Reference Current Calibration Register */ + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; +} R_CTSU_Type; /*!< Size = 36 (0x24) */ /* =========================================================================================================================== */ -/* ================ R_DALI0 ================ */ +/* ================ R_CTSU2 ================ */ /* =========================================================================================================================== */ /** - * @brief Digital Addressable Lighting Interface (R_DALI0) + * @brief Capacitive Touch Sensing Unit (R_CTSU2) */ -typedef struct /*!< (@ 0x4008F000) R_DALI0 Structure */ +typedef struct /*!< (@ 0x40082000) R_CTSU2 Structure */ { union { - __IOM uint16_t BTVTHR1; /*!< (@ 0x00000000) DALI Bit Timing Violation Threshold Register - * 1 */ - - struct + union { - __IOM uint16_t BTV1 : 7; /*!< [6..0] Bit Timing Violation Threshold 1Specifies the bit timing - * violation threshold value 1.Note 1. These bits must be - * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE - * bit is 0. */ - uint16_t : 1; - __IOM uint16_t BTV2 : 8; /*!< [15..8] Bit Timing Violation Threshold 2Specifies the bit timing - * violation threshold value 2.Note 1. These bits must be - * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE - * bit is 0. */ - } BTVTHR1_b; - }; + __IOM uint32_t CTSUCRA; /*!< (@ 0x00000000) CTSU Control Register A */ - union - { - __IOM uint16_t BTVTHR2; /*!< (@ 0x00000002) DALI Bit Timing Violation Threshold Register - * 2 */ + struct + { + __IOM uint32_t STRT : 1; /*!< [0..0] CTSU Measurement Operation Start */ + __IOM uint32_t CAP : 1; /*!< [1..1] CTSU Measurement Operation Start Trigger Select */ + __IOM uint32_t SNZ : 1; /*!< [2..2] CTSU Wait State Power-Saving Enable */ + __IOM uint32_t CFCON : 1; /*!< [3..3] CTSU CFC Power on Control */ + __OM uint32_t INIT : 1; /*!< [4..4] CTSU Control Block Initialization */ + __IOM uint32_t PUMPON : 1; /*!< [5..5] CTSU Boost Circuit Control */ + __IOM uint32_t TXVSEL : 2; /*!< [7..6] CTSU Transmission Power Supply Selection */ + __IOM uint32_t PON : 1; /*!< [8..8] CTSU Power Supply Enable */ + __IOM uint32_t CSW : 1; /*!< [9..9] CTSU LPF Capacitance Charging Control */ + __IOM uint32_t ATUNE0 : 1; /*!< [10..10] CTSU Power Supply Operating Mode Setting */ + __IOM uint32_t ATUNE1 : 1; /*!< [11..11] CTSU Current Range Adjustment */ + __IOM uint32_t CLK : 2; /*!< [13..12] CTSU Operating Clock Select */ + __IOM uint32_t MD0 : 1; /*!< [14..14] CTSU Measurement Mode Select 0 */ + __IOM uint32_t MD1 : 1; /*!< [15..15] CTSU Measurement Mode Select 1 */ + __IOM uint32_t MD2 : 1; /*!< [16..16] CTSU Measurement Mode Select 2 */ + __IOM uint32_t ATUNE2 : 1; /*!< [17..17] CTSU Current Range Adjustment */ + __IOM uint32_t LOAD : 2; /*!< [19..18] CTSU Measurement Load Control */ + __IOM uint32_t POSEL : 2; /*!< [21..20] CTSU Non-measured Channel Output Select */ + __IOM uint32_t SDPSEL : 1; /*!< [22..22] CTSU Sensor Drive Pulse Select */ + __IOM uint32_t FCMODE : 1; /*!< [23..23] CTSU SUCLK Control */ + __IOM uint32_t STCLK : 6; /*!< [29..24] CTSU STCLK Select */ + __IOM uint32_t DCMODE : 1; /*!< [30..30] CTSU Current Measurement Mode Select */ + __IOM uint32_t DCBACK : 1; /*!< [31..31] CTSU Current Measurement Feedback Select */ + } CTSUCRA_b; + }; struct { - __IOM uint16_t BTV3 : 8; /*!< [7..0] Bit Timing Violation Threshold 3Specifies the bit timing - * violation threshold value 3.Note 1. These bits must be - * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE - * bit is 0. */ - __IOM uint16_t BTV4 : 8; /*!< [15..8] Bit Timing Violation Threshold 4Specifies the bit timing - * violation threshold value 4.Note 1. These bits must be - * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE - * bit is 0. */ - } BTVTHR2_b; - }; - - union - { - __IOM uint16_t BTVTHR3; /*!< (@ 0x00000004) DALI Bit Timing Violation Threshold Register - * 3 */ + union + { + __IOM uint16_t CTSUCRAL; /*!< (@ 0x00000000) CTSU Control Register A */ - struct - { - __IOM uint16_t BTV5 : 8; /*!< [7..0] Bit Timing Violation Threshold 5Specifies the bit timing - * violation threshold value 5.Note 1. These bits must be - * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE - * bit is 0. */ - uint16_t : 8; - } BTVTHR3_b; + struct + { + __IOM uint8_t CTSUCR0; /*!< (@ 0x00000000) CTSU Control Register A */ + __IOM uint8_t CTSUCR1; /*!< (@ 0x00000001) CTSU Control Register A */ + }; + }; + __IOM uint8_t CTSUCR2; /*!< (@ 0x00000002) CTSU Control Register A */ + __IOM uint8_t CTSUCR3; /*!< (@ 0x00000003) CTSU Control Register A */ + }; }; union { - __IOM uint16_t BTVTHR4; /*!< (@ 0x00000006) DALI Bit Timing Violation Threshold Register - * 4 */ - - struct + union { - __IOM uint16_t BTV6 : 9; /*!< [8..0] Bit Timing Violation Threshold 6Specifies the bit timing - * violation threshold value 6.Note 1. These bits must be - * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE - * bit is 0. */ - uint16_t : 7; - } BTVTHR4_b; - }; + __IOM uint32_t CTSUCRB; /*!< (@ 0x00000004) CTSU Control Register B */ - union - { - __IOM uint16_t COLTHR1; /*!< (@ 0x00000008) DALI Collision Threshold Register 1 */ + struct + { + __IOM uint32_t PRRATIO : 4; /*!< [3..0] CTSU Measurement Time and Pulse Count Adjustment */ + __IOM uint32_t PRMODE : 2; /*!< [5..4] CTSU Base Period and Pulse Count Setting */ + __IOM uint32_t SOFF : 1; /*!< [6..6] CTSU High-Pass Noise Reduction Function Off Setting */ + __IOM uint32_t PROFF : 1; /*!< [7..7] CTSU Random Number Off Control */ + __IOM uint32_t SST : 8; /*!< [15..8] CTSU Sensor Stabilization Wait Control */ + uint32_t : 8; + __IOM uint32_t SSMOD : 3; /*!< [26..24] CTSU SUCLK Diffusion Mode Select */ + uint32_t : 1; + __IOM uint32_t SSCNT : 2; /*!< [29..28] CTSU SUCLK Diffusion Control */ + uint32_t : 2; + } CTSUCRB_b; + }; struct { - __IOM uint16_t COL1 : 6; /*!< [5..0] Collision Threshold 1Specifies the collision threshold - * value 1.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 2; - __IOM uint16_t COL2 : 6; /*!< [13..8] Collision Threshold 2Specifies the collision threshold - * value 2.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 2; - } COLTHR1_b; - }; + union + { + __IOM uint16_t CTSUCRBL; /*!< (@ 0x00000004) CTSU Control Register B */ - union - { - __IOM uint16_t COLTHR2; /*!< (@ 0x0000000A) DALI Collision Threshold Register 2 */ + struct + { + __IOM uint8_t CTSUSDPRS; /*!< (@ 0x00000004) CTSU Control Register B */ + __IOM uint8_t CTSUSST; /*!< (@ 0x00000005) CTSU Control Register B */ + }; + }; - struct - { - __IOM uint16_t COL3 : 7; /*!< [6..0] Collision Threshold 3Specifies the collision threshold - * value 3.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 1; - __IOM uint16_t COL4 : 7; /*!< [14..8] Collision Threshold 4Specifies the collision threshold - * value 4.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 1; - } COLTHR2_b; + union + { + __IOM uint16_t CTSUCRBH; /*!< (@ 0x00000006) CTSU Control Register B */ + + struct + { + __IM uint8_t RESERVED; + __IOM uint8_t CTSUDCLKC; /*!< (@ 0x00000007) CTSU Control Register B */ + }; + }; + }; }; union { - __IOM uint16_t COLTHR3; /*!< (@ 0x0000000C) DALI Collision Threshold Register 3 */ - - struct + union { - __IOM uint16_t COL5 : 7; /*!< [6..0] Collision Threshold 5Specifies the collision threshold - * value 5.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 1; - __IOM uint16_t COL6 : 7; /*!< [14..8] Collision Threshold 6Specifies the collision threshold - * value 6.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 1; - } COLTHR3_b; - }; + __IOM uint32_t CTSUMCH; /*!< (@ 0x00000008) CTSU Measurement Channel Register */ - union - { - __IOM uint16_t COLTHR4; /*!< (@ 0x0000000E) DALI Collision Threshold Register 4 */ + struct + { + __IOM uint32_t MCH0 : 6; /*!< [5..0] CTSU Measurement Channel 0 */ + uint32_t : 2; + __IOM uint32_t MCH1 : 6; /*!< [13..8] CTSU Measurement Channel 1 */ + uint32_t : 2; + __IOM uint32_t MCA0 : 1; /*!< [16..16] CTSU Multiple Valid Clock Control */ + __IOM uint32_t MCA1 : 1; /*!< [17..17] CTSU Multiple Valid Clock Control */ + __IOM uint32_t MCA2 : 1; /*!< [18..18] CTSU Multiple Valid Clock Control */ + __IOM uint32_t MCA3 : 1; /*!< [19..19] CTSU Multiple Valid Clock Control */ + uint32_t : 12; + } CTSUMCH_b; + }; struct { - __IOM uint16_t COL7 : 8; /*!< [7..0] Collision Threshold 7Specifies the collision threshold - * value 7.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - __IOM uint16_t COL8 : 8; /*!< [15..8] Collision Threshold 8Specifies the collision threshold - * value 8.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - } COLTHR4_b; - }; + union + { + __IOM uint16_t CTSUMCHL; /*!< (@ 0x00000008) CTSU Measurement Channel Register */ - union - { - __IOM uint16_t COLTHR5; /*!< (@ 0x00000010) DALI Collision Threshold Register 5 */ + struct + { + __IOM uint8_t CTSUMCH0; /*!< (@ 0x00000008) CTSU Measurement Channel Register */ + __IOM uint8_t CTSUMCH1; /*!< (@ 0x00000009) CTSU Measurement Channel Register */ + }; + }; - struct - { - __IOM uint16_t COL9 : 8; /*!< [7..0] Collision Threshold 9Specifies the collision threshold - * value 9.Note 1. These bits must be modified when the DALI0.CTR1.RE - * bit is 0 and the DALI0.CTR1.TE bit is 0. */ - uint16_t : 8; - } COLTHR5_b; + union + { + __IOM uint16_t CTSUMCHH; /*!< (@ 0x0000000A) CTSU Measurement Channel Register */ + __IOM uint8_t CTSUMFAF; /*!< (@ 0x0000000A) CTSU Measurement Channel Register */ + }; + }; }; union { - __IOM uint16_t CNFR1; /*!< (@ 0x00000012) DALI Configuration Register 1 */ - - struct + union { - __IOM uint16_t BR : 8; /*!< [7..0] Clock SelectBit rate setting example is shown in Table */ - __IOM uint16_t CKS : 2; /*!< [9..8] Clock Select */ - uint16_t : 2; - __IOM uint16_t CHL : 3; /*!< [14..12] Character Length */ - uint16_t : 1; - } CNFR1_b; - }; + __IOM uint32_t CTSUCHACA; /*!< (@ 0x0000000C) CTSU Channel Enable Control Register A */ - union - { - __IOM uint16_t CNFR2; /*!< (@ 0x00000014) DALI Configuration Register 2 */ + struct + { + __IOM uint32_t CHAC00 : 1; /*!< [0..0] CTSU Channel Enable Control A */ + uint32_t : 1; + __IOM uint32_t CHAC02 : 1; /*!< [2..2] CTSU Channel Enable Control A */ + uint32_t : 1; + __IOM uint32_t CHAC04 : 1; /*!< [4..4] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC05 : 1; /*!< [5..5] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC06 : 1; /*!< [6..6] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC07 : 1; /*!< [7..7] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC08 : 1; /*!< [8..8] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC09 : 1; /*!< [9..9] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC10 : 1; /*!< [10..10] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC11 : 1; /*!< [11..11] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC12 : 1; /*!< [12..12] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC13 : 1; /*!< [13..13] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC14 : 1; /*!< [14..14] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC15 : 1; /*!< [15..15] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC16 : 1; /*!< [16..16] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC17 : 1; /*!< [17..17] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC18 : 1; /*!< [18..18] CTSU Channel Enable Control A */ + uint32_t : 2; + __IOM uint32_t CHAC21 : 1; /*!< [21..21] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC22 : 1; /*!< [22..22] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC23 : 1; /*!< [23..23] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC24 : 1; /*!< [24..24] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC25 : 1; /*!< [25..25] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC26 : 1; /*!< [26..26] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC27 : 1; /*!< [27..27] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC28 : 1; /*!< [28..28] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC29 : 1; /*!< [29..29] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC30 : 1; /*!< [30..30] CTSU Channel Enable Control A */ + __IOM uint32_t CHAC31 : 1; /*!< [31..31] CTSU Channel Enable Control A */ + } CTSUCHACA_b; + }; struct { - __IOM uint16_t BTVE : 1; /*!< [0..0] Bit Timing Violation EnableNote: The bit must be modified - * only when the DALI0.STR1.BBF bit is 0. */ - __IOM uint16_t BTVM : 1; /*!< [1..1] Bit Timing Violation ModeNote: The bit must be modified - * only when the DALI0.STR1.BBF bit is 0. */ - __IOM uint16_t SGA : 1; /*!< [2..2] Save an Edge of Gray Area ModeNote: The bit must be modified - * only when the DALI0.STR1.BBF bit is 0. */ - __IOM uint16_t TXWE : 1; /*!< [3..3] DTX Width Modulation EnableNote: The bit must be modified - * only when the DALI0.STR1.BBF bit is 0. */ - __IOM uint16_t CDE : 1; /*!< [4..4] Collision Detect EnableNote: The bit must be modified - * only when the DALI0.STR1.BBF bit is 0. */ - __IOM uint16_t CDM0 : 1; /*!< [5..5] Collision Detect ModeNote: The bit must be modified only - * when the DALI0.STR1.BBF bit is 0. */ - uint16_t : 10; - } CNFR2_b; - }; + union + { + __IOM uint16_t CTSUCHACAL; /*!< (@ 0x0000000C) CTSU Channel Enable Control Register A */ - union - { - __IOM uint16_t TXWR1; /*!< (@ 0x00000016) DALI DTX Width Register 1 */ + struct + { + __IOM uint8_t CTSUCHAC0; /*!< (@ 0x0000000C) CTSU Channel Enable Control Register A */ + __IOM uint8_t CTSUCHAC1; /*!< (@ 0x0000000D) CTSU Channel Enable Control Register A */ + }; + }; - struct - { - __IOM uint16_t TXLW : 7; /*!< [6..0] DTX Low WidthDTX0 pin low level width */ - uint16_t : 9; - } TXWR1_b; + union + { + __IOM uint16_t CTSUCHACAH; /*!< (@ 0x0000000E) CTSU Channel Enable Control Register A */ + + struct + { + __IOM uint8_t CTSUCHAC2; /*!< (@ 0x0000000E) CTSU Channel Enable Control Register A */ + __IOM uint8_t CTSUCHAC3; /*!< (@ 0x0000000F) CTSU Channel Enable Control Register A */ + }; + }; + }; }; - __IM uint16_t RESERVED[3]; union { - __IOM uint16_t TDR1H; /*!< (@ 0x0000001E) DALI Transmit Data Register 1H */ - - struct + union { - __IOM uint16_t DTDR : 16; /*!< [15..0] Upper 16-bit DALI transmit data */ - } TDR1H_b; + __IOM uint32_t CTSUCHACB; /*!< (@ 0x00000010) CTSU Channel Enable Control Register B */ + + struct + { + __IOM uint32_t CHAC32 : 1; /*!< [0..0] CTSU Channel Enable Control B */ + __IOM uint32_t CHAC33 : 1; /*!< [1..1] CTSU Channel Enable Control B */ + __IOM uint32_t CHAC34 : 1; /*!< [2..2] CTSU Channel Enable Control B */ + __IOM uint32_t CHAC35 : 1; /*!< [3..3] CTSU Channel Enable Control B */ + uint32_t : 28; + } CTSUCHACB_b; + }; + __IOM uint16_t CTSUCHACBL; /*!< (@ 0x00000010) CTSU Channel Enable Control Register B */ + __IOM uint8_t CTSUCHAC4; /*!< (@ 0x00000010) CTSU Channel Enable Control Register B */ }; union { - __IOM uint16_t TDR1L; /*!< (@ 0x00000020) DALI Transmit Data Register 1L */ - - struct + union { - __IOM uint16_t DTDR : 16; /*!< [15..0] Lower 16-bit DALI transmit data */ - } TDR1L_b; - }; + __IOM uint32_t CTSUCHTRCA; /*!< (@ 0x00000014) CTSU Channel Transmit/Receive Control Register + * A */ - union - { - __OM uint16_t TRSTR1; /*!< (@ 0x00000022) DALI Transmit Control Register 1 */ + struct + { + __IOM uint32_t CHTRC : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control A */ + uint32_t : 1; + __IOM uint32_t CHTRC02 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control A */ + uint32_t : 1; + __IOM uint32_t CHTRC04 : 1; /*!< [4..4] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC05 : 1; /*!< [5..5] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC06 : 1; /*!< [6..6] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC07 : 1; /*!< [7..7] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC08 : 1; /*!< [8..8] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC09 : 1; /*!< [9..9] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC10 : 1; /*!< [10..10] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC11 : 1; /*!< [11..11] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC12 : 1; /*!< [12..12] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC13 : 1; /*!< [13..13] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC14 : 1; /*!< [14..14] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC15 : 1; /*!< [15..15] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC16 : 1; /*!< [16..16] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC17 : 1; /*!< [17..17] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC18 : 1; /*!< [18..18] CTSU Channel Transmit/Receive Control A */ + uint32_t : 2; + __IOM uint32_t CHTRC21 : 1; /*!< [21..21] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC22 : 1; /*!< [22..22] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC23 : 1; /*!< [23..23] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC24 : 1; /*!< [24..24] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC25 : 1; /*!< [25..25] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC26 : 1; /*!< [26..26] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC27 : 1; /*!< [27..27] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC28 : 1; /*!< [28..28] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC29 : 1; /*!< [29..29] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC30 : 1; /*!< [30..30] CTSU Channel Transmit/Receive Control A */ + __IOM uint32_t CHTRC31 : 1; /*!< [31..31] CTSU Channel Transmit/Receive Control A */ + } CTSUCHTRCA_b; + }; struct { - __OM uint16_t TRST : 1; /*!< [0..0] Transmission Start Trigger */ - uint16_t : 15; - } TRSTR1_b; - }; - __IM uint16_t RESERVED1; + union + { + __IOM uint16_t CTSUCHTRCAL; /*!< (@ 0x00000014) CTSU Channel Transmit/Receive Control Register + * A */ - union - { - __IOM uint16_t CTR1; /*!< (@ 0x00000026) DALI Control Register 1 */ + struct + { + __IOM uint8_t CTSUCHTRC0; /*!< (@ 0x00000014) CTSU Channel Transmit/Receive Control Register + * A */ + __IOM uint8_t CTSUCHTRC1; /*!< (@ 0x00000015) CTSU Channel Transmit/Receive Control Register + * A */ + }; + }; - struct - { - __IOM uint16_t TE : 1; /*!< [0..0] Transmit Enabling */ - __IOM uint16_t RE : 1; /*!< [1..1] Receive Enabling */ - uint16_t : 6; - __IOM uint16_t SDIE : 1; /*!< [8..8] DALI_SDI Output Enabling */ - __IOM uint16_t DEIE : 1; /*!< [9..9] DALI_DEI Output Enabling */ - __IOM uint16_t CLIE : 1; /*!< [10..10] DALI_CLI Output Enabling */ - __IOM uint16_t BPIE : 1; /*!< [11..11] DALI_BPI Output Enabling */ - __IOM uint16_t FEIE : 1; /*!< [12..12] DALI_FEI Output Enabling */ - uint16_t : 3; - } CTR1_b; + union + { + __IOM uint16_t CTSUCHTRCAH; /*!< (@ 0x00000016) CTSU Channel Transmit/Receive Control Register + * A */ + + struct + { + __IOM uint8_t CTSUCHTRC2; /*!< (@ 0x00000016) CTSU Channel Transmit/Receive Control Register + * A */ + __IOM uint8_t CTSUCHTRC3; /*!< (@ 0x00000017) CTSU Channel Transmit/Receive Control Register + * A */ + }; + }; + }; }; union { - __IOM uint16_t TXDCTR1; /*!< (@ 0x00000028) DALI DTX Control Register 1 */ - - struct + union { - __IOM uint16_t TXAS : 1; /*!< [0..0] DTX Assert LevelNote 1. The bit must be modified only - * when the DALI0.CTR1.TE bit is 0. */ - __IOM uint16_t TXASE : 1; /*!< [1..1] DTX Assert EnablingNote 1. The bit must be modified only - * when the DALI0.CTR1.TE bit is 0. */ - uint16_t : 14; - } TXDCTR1_b; + __IOM uint32_t CTSUCHTRCB; /*!< (@ 0x00000018) CTSU Channel Transmit/Receive Control Register + * B */ + + struct + { + __IOM uint32_t CHTRC32 : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control B */ + __IOM uint32_t CHTRC33 : 1; /*!< [1..1] CTSU Channel Transmit/Receive Control B */ + __IOM uint32_t CHTRC34 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control B */ + __IOM uint32_t CHTRC35 : 1; /*!< [3..3] CTSU Channel Transmit/Receive Control B */ + uint32_t : 28; + } CTSUCHTRCB_b; + }; + __IOM uint16_t CTSUCHTRCBL; /*!< (@ 0x00000018) CTSU Channel Transmit/Receive Control Register + * B */ + __IOM uint8_t CTSUCHTRC4; /*!< (@ 0x00000018) CTSU Channel Transmit/Receive Control Register + * B */ }; - __IM uint16_t RESERVED2[2]; union { - __IM uint16_t RDR1H; /*!< (@ 0x0000002E) DALI Reception Data Register 1H */ - - struct + union { - __IM uint16_t DRDR : 16; /*!< [15..0] Upper 16-bit of DALI receive data */ - } RDR1H_b; - }; + __IOM uint32_t CTSUSR; /*!< (@ 0x0000001C) CTSU Status Register */ - union - { - __IM uint16_t RDR1L; /*!< (@ 0x00000030) DALI Reception Data Register 1L */ + struct + { + __IOM uint32_t MFC : 2; /*!< [1..0] CTSU Multi-clock Counter */ + uint32_t : 3; + __OM uint32_t ICOMPRST : 1; /*!< [5..5] CTSU CTSUICOMP1 Flag Reset */ + __IM uint32_t ICOMP1 : 1; /*!< [6..6] CTSU Sense Current Error Monitor */ + __IM uint32_t ICOMP0 : 1; /*!< [7..7] TSCAP Voltage Error Monitor */ + __IM uint32_t STC : 3; /*!< [10..8] CTSU Measurement Status Counter */ + uint32_t : 1; + __IM uint32_t DTSR : 1; /*!< [12..12] CTSU Data Transfer Status Flag */ + __IOM uint32_t SENSOVF : 1; /*!< [13..13] CTSU Sensor Counter Overflow Flag */ + uint32_t : 1; + __IM uint32_t PS : 1; /*!< [15..15] CTSU Mutual Capacitance Status Flag */ + __IOM uint32_t CFCRDCH : 6; /*!< [21..16] CTSU CFC Read Channel Select */ + uint32_t : 10; + } CTSUSR_b; + }; struct { - __IM uint16_t DRDR : 16; /*!< [15..0] Lower 16-bit of DALI receive data */ - } RDR1L_b; - }; - + union + { + __IOM uint16_t CTSUSRL; /*!< (@ 0x0000001C) CTSU Status Register */ + + struct + { + __IOM uint8_t CTSUSR0; /*!< (@ 0x0000001C) CTSU Status Register */ + __IOM uint8_t CTSUST; /*!< (@ 0x0000001D) CTSU Status Register */ + }; + }; + + union + { + __IOM uint16_t CTSUSRH; /*!< (@ 0x0000001E) CTSU Status Register */ + __IOM uint8_t CTSUSR2; /*!< (@ 0x0000001E) CTSU Status Register */ + }; + }; + }; + union { - __IM uint16_t STR1; /*!< (@ 0x00000032) DALI Status Register 1 */ + union + { + __IOM uint32_t CTSUSO; /*!< (@ 0x00000020) CTSU Sensor Offset Register */ + + struct + { + __IOM uint32_t SO : 10; /*!< [9..0] CTSU Sensor Offset Adjustment */ + __IOM uint32_t SNUM : 8; /*!< [17..10] CTSU Measurement Count Setting */ + uint32_t : 2; + __IOM uint32_t SSDIV : 4; /*!< [23..20] CTSU Spectrum Diffusion Frequency Division Setting */ + __IOM uint32_t SDPA : 8; /*!< [31..24] CTSU Base Clock Setting */ + } CTSUSO_b; + }; struct { - __IM uint16_t MFEF : 1; /*!< [0..0] Manchester Flaming Error Flag */ - __IM uint16_t OVF : 1; /*!< [1..1] Overrun Error Flag */ - __IM uint16_t BTVF : 1; /*!< [2..2] Bit Timing Violation Flag */ - __IM uint16_t RDRF : 1; /*!< [3..3] Receive Data Register Full Flag */ - __IM uint16_t TENDF : 1; /*!< [4..4] Transmit End Flag */ - __IM uint16_t BBF : 1; /*!< [5..5] Bus BUSY Flag */ - __IM uint16_t BPDF : 1; /*!< [6..6] Bus Power Down Flag */ - __IM uint16_t O32F : 1; /*!< [7..7] Over 32-Bit Data Reception Flag */ - __IM uint16_t CDF : 1; /*!< [8..8] Collision Detect Flag */ - __IM uint16_t DAF : 1; /*!< [9..9] Destroy Area Flag */ - __IM uint16_t RDBL : 6; /*!< [15..10] Receive Data Bit LengthThese bits store the bit length - * for data received successfully */ - } STR1_b; + __IOM uint16_t CTSUSO0; /*!< (@ 0x00000020) CTSU Sensor Offset Register */ + __IOM uint16_t CTSUSO1; /*!< (@ 0x00000022) CTSU Sensor Offset Register */ + }; }; - __IM uint16_t RESERVED3; union { - __IM uint16_t COLR1; /*!< (@ 0x00000036) DALI Collision Register 1 */ - - struct + union { - __IM uint16_t CFTF2 : 4; /*!< [3..0] Collision Detect Timing Flag 2 */ - __IM uint16_t CDTF1 : 1; /*!< [4..4] Collision Detect Timing Flag 1 */ - uint16_t : 5; - __IM uint16_t CLDAF : 1; /*!< [10..10] Collision Last Destroy Area Flag */ - __IM uint16_t RXDMON : 1; /*!< [11..11] DRX MonitorThis bit monitors the DRX0 pin value after - * the DRX0 pin is synchronized */ - __IM uint16_t RXDCEG : 1; /*!< [12..12] DRX Collision Edge */ - __IM uint16_t TXDCV : 1; /*!< [13..13] DTX Collision Value */ - uint16_t : 2; - } COLR1_b; + __IM uint32_t CTSUSCNT; /*!< (@ 0x00000024) CTSU Sensor Counter Register */ + + struct + { + __IM uint32_t SENSCNT : 16; /*!< [15..0] CTSU Sensor Counter */ + uint32_t : 16; + } CTSUSCNT_b; + }; + __IM uint16_t CTSUSC; /*!< (@ 0x00000024) CTSU Sensor Counter Register */ }; - __IM uint16_t RESERVED4; union { - __OM uint16_t FECR1; /*!< (@ 0x0000003A) DALI Flag Error Clear Register 1 */ + union + { + __IOM uint32_t CTSUCALIB; /*!< (@ 0x00000028) CTSU Calibration Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t TSOD : 1; /*!< [2..2] CTSU TS Pins Fixed Output Select */ + __IOM uint32_t DRV : 1; /*!< [3..3] CTSU Calibration Setting Bit 1 */ + uint32_t : 2; + __IOM uint32_t SUCLKEN : 1; /*!< [6..6] CTSU SUCLK Enable Control */ + __IOM uint32_t TSOC : 1; /*!< [7..7] CTSU Calibration Setting Bit 2 */ + uint32_t : 1; + __IOM uint32_t IOC : 1; /*!< [9..9] CTSU Transfer Pins Control */ + __IOM uint32_t CFCRDMD : 1; /*!< [10..10] CTSU CFC Counter Read Mode Select */ + __IOM uint32_t DCOFF : 1; /*!< [11..11] CTSU Down Converter Control */ + uint32_t : 10; + __IOM uint32_t CFCMODE : 1; /*!< [22..22] CTSU CFC Current Source Switching */ + uint32_t : 2; + __IOM uint32_t DACCARRY : 1; /*!< [25..25] CTSU DAC Upper Current Source Carry Control */ + uint32_t : 1; + __IOM uint32_t SUCARRY : 1; /*!< [27..27] CTSU CCO Carry Control */ + __IOM uint32_t DACCLK : 1; /*!< [28..28] CTSU DAC Modulation Circuit Clock Select */ + __IOM uint32_t CCOCLK : 1; /*!< [29..29] CTSU CCO Modulation Circuit Clock Select */ + __IOM uint32_t CCOCALIB : 1; /*!< [30..30] CTSU CCO Calibration Mode Select */ + uint32_t : 1; + } CTSUCALIB_b; + }; struct { - __OM uint16_t MFEFC : 1; /*!< [0..0] Manchester Flaming Error Flag Clear */ - __OM uint16_t OVFC : 1; /*!< [1..1] Overrun Error Flag Clear */ - __OM uint16_t BTVFC : 1; /*!< [2..2] Bit Timing Violation Flag Clear */ - __OM uint16_t RDRFC : 1; /*!< [3..3] Receive Data Register Full Flag Clear */ - __OM uint16_t TENDFC : 1; /*!< [4..4] Transmit End Flag Clear */ - __OM uint16_t BBFC : 1; /*!< [5..5] Bus BUSY Flag ClearNote1: Do not clear DALI0.STR1.BBF - * bit when DALI0.CTR1.TE bit or DALI0.CTR1.RE bit is 1. */ - __OM uint16_t BPDFC : 1; /*!< [6..6] Bus Power Down Flag Clear */ - __OM uint16_t O32FC : 1; /*!< [7..7] Over 32-Bit Data Reception Flag Clear */ - __OM uint16_t CDFC : 1; /*!< [8..8] Collision Detect Flag Clear */ - __OM uint16_t DAFC : 1; /*!< [9..9] Destroy Area Flag Clear */ - uint16_t : 6; - } FECR1_b; + __IOM uint16_t CTSUDBGR0; /*!< (@ 0x00000028) CTSU Calibration Register */ + __IOM uint16_t CTSUDBGR1; /*!< (@ 0x0000002A) CTSU Calibration Register */ + }; }; union { - __OM uint16_t SWRR1; /*!< (@ 0x0000003C) DALI Software Reset Register 1 */ + __IOM uint32_t CTSUSUCLKA; /*!< (@ 0x0000002C) CTSU Sensor Unit Clock Control Register A */ struct { - __OM uint16_t SWR : 1; /*!< [0..0] Software ResetWriting 1 to this bit causes a software - * reset. */ - uint16_t : 15; - } SWRR1_b; + __IOM uint16_t CTSUSUCLK0; /*!< (@ 0x0000002C) CTSU Sensor Unit Clock Control Register A */ + __IOM uint16_t CTSUSUCLK1; /*!< (@ 0x0000002E) CTSU Sensor Unit Clock Control Register A */ + }; }; -} R_DALI0_Type; /*!< Size = 62 (0x3e) */ - -/* =========================================================================================================================== */ -/* ================ R_DEBUG ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Debug Function (R_DEBUG) - */ -typedef struct /*!< (@ 0x4001B000) R_DEBUG Structure */ -{ union { - __IM uint32_t DBGSTR; /*!< (@ 0x00000000) Debug Status Register */ + union + { + __IOM uint32_t CTSUSUCLKB; /*!< (@ 0x00000030) CTSU Sensor Unit Clock Control Register B */ + + struct + { + __IOM uint32_t SUADJ2 : 8; /*!< [7..0] CTSU SUCLK Frequency Adjustment */ + __IOM uint32_t SUMULTI2 : 8; /*!< [15..8] CTSU SUCLK Multiplier Rate Setting */ + __IOM uint32_t SUADJ3 : 8; /*!< [23..16] CTSU SUCLK Frequency Adjustment */ + __IOM uint32_t SUMULTI3 : 8; /*!< [31..24] CTSU SUCLK Multiplier Rate Setting */ + } CTSUSUCLKB_b; + }; struct { - uint32_t : 28; - __IM uint32_t CDBGPWRUPREQ : 1; /*!< [28..28] Debug power-up request */ - __IM uint32_t CDBGPWRUPACK : 1; /*!< [29..29] Debug power-up acknowledge */ - uint32_t : 2; - } DBGSTR_b; + __IOM uint16_t CTSUSUCLK2; /*!< (@ 0x00000030) CTSU Sensor Unit Clock Control Register B */ + __IOM uint16_t CTSUSUCLK3; /*!< (@ 0x00000032) CTSU Sensor Unit Clock Control Register B */ + }; }; - __IM uint32_t RESERVED[3]; union { - __IOM uint32_t DBGSTOPCR; /*!< (@ 0x00000010) Debug Stop Control Register */ - - struct + union { - __IOM uint32_t DBGSTOP_IWDT : 1; /*!< [0..0] Mask bit for IWDT reset/interrupt */ - __IOM uint32_t DBGSTOP_WDT : 1; /*!< [1..1] Mask bit for WDT reset/interrupt */ - uint32_t : 14; - __IOM uint32_t DBGSTOP_LVD0 : 1; /*!< [16..16] Mask bit for LVD reset/interupt */ - __IOM uint32_t DBGSTOP_LVD1 : 1; /*!< [17..17] Mask bit for LVD reset/interupt */ - __IOM uint32_t DBGSTOP_LVD2 : 1; /*!< [18..18] Mask bit for LVD reset/interupt */ - uint32_t : 5; - __IOM uint32_t DBGSTOP_RPER : 1; /*!< [24..24] Mask bit for SRAM parity error */ - __IOM uint32_t DBGSTOP_RECCR : 1; /*!< [25..25] Mask bit for SRAM ECC error */ - uint32_t : 6; - } DBGSTOPCR_b; + __IM uint32_t CTSUCFCCNT; /*!< (@ 0x00000034) CTSU CFC Counter Register */ + + struct + { + __IM uint32_t CFCCNT : 16; /*!< [15..0] CTSU CFC Counter */ + uint32_t : 16; + } CTSUCFCCNT_b; + }; + __IM uint16_t CTSUCFCCNTL; /*!< (@ 0x00000034) CTSU CFC Counter Register */ }; -} R_DEBUG_Type; /*!< Size = 20 (0x14) */ +} R_CTSU2_Type; /*!< Size = 56 (0x38) */ /* =========================================================================================================================== */ -/* ================ R_DMA ================ */ +/* ================ R_DAC ================ */ /* =========================================================================================================================== */ /** - * @brief DMA Controller Common (R_DMA) + * @brief D/A Converter (R_DAC) */ -typedef struct /*!< (@ 0x40005200) R_DMA Structure */ +typedef struct /*!< (@ 0x4005E000) R_DAC Structure */ { union { - __IOM uint8_t DMAST; /*!< (@ 0x00000000) DMAC Module Activation Register */ + __IOM uint16_t DADR[2]; /*!< (@ 0x00000000) D/A Data Register */ struct { - __IOM uint8_t DMST : 1; /*!< [0..0] DMAC Operation Enable */ - uint8_t : 7; - } DMAST_b; + __IOM uint16_t DADR : 16; /*!< [15..0] D/A Data RegisterNOTE: When DADPR.DPSEL = 0, the high-order + * 4 bits are fixed to 0: right justified format. When DADPR.DPSEL + * = 1, the low-order 4 bits are fixed to 0: left justified + * format. */ + } DADR_b[2]; }; -} R_DMA_Type; /*!< Size = 1 (0x1) */ -/* =========================================================================================================================== */ -/* ================ R_DMAC0 ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint8_t DACR; /*!< (@ 0x00000004) D/A Control Register */ -/** - * @brief DMA Controller (R_DMAC0) - */ + struct + { + uint8_t : 5; + __IOM uint8_t DAE : 1; /*!< [5..5] D/A Enable */ + __IOM uint8_t DAOE0 : 1; /*!< [6..6] D/A Output Enable 0 */ + __IOM uint8_t DAOE1 : 1; /*!< [7..7] D/A Output Enable 0 */ + } DACR_b; + }; -typedef struct /*!< (@ 0x40005000) R_DMAC0 Structure */ -{ union { - __IOM uint32_t DMSAR; /*!< (@ 0x00000000) DMA Source Address Register */ + __IOM uint8_t DADPR; /*!< (@ 0x00000005) DADR0 Format Select Register */ struct { - __IOM uint32_t DMSAR : 32; /*!< [31..0] Specifies the transfer source start address. */ - } DMSAR_b; + uint8_t : 7; + __IOM uint8_t DPSEL : 1; /*!< [7..7] DADRm Format Select */ + } DADPR_b; }; union { - __IOM uint32_t DMDAR; /*!< (@ 0x00000004) DMA Destination Address Register */ + __IOM uint8_t DAADSCR; /*!< (@ 0x00000006) D/A-A/D Synchronous Start Control Register */ struct { - __IOM uint32_t DMDAR : 32; /*!< [31..0] Specifies the transfer destination start address. */ - } DMDAR_b; + uint8_t : 7; + __IOM uint8_t DAADST : 1; /*!< [7..7] D/A-A/D Synchronous Conversion */ + } DAADSCR_b; }; union { - __IOM uint32_t DMCRA; /*!< (@ 0x00000008) DMA Transfer Count Register */ + __IOM uint8_t DAVREFCR; /*!< (@ 0x00000007) D/A VREF Control Register */ struct { - __IOM uint32_t DMCRAL : 16; /*!< [15..0] Lower bits of transfer count */ - __IOM uint32_t DMCRAH : 10; /*!< [25..16] Upper bits of transfer count */ - uint32_t : 6; - } DMCRA_b; + __IOM uint8_t REF : 3; /*!< [2..0] D/A Reference Voltage Select */ + uint8_t : 5; + } DAVREFCR_b; }; union { - __IOM uint16_t DMCRB; /*!< (@ 0x0000000C) DMA Block Transfer Count Register */ + __IOM uint8_t DAAMPCR; /*!< (@ 0x00000008) D/A Output Amplifier Control Register */ struct { - __IOM uint16_t DMCRB : 16; /*!< [15..0] Specifies the number of block transfer operations or - * repeat transfer operations. */ - } DMCRB_b; + uint8_t : 6; + __IOM uint8_t DAAMP0 : 1; /*!< [6..6] Amplifier Control */ + __IOM uint8_t DAAMP1 : 1; /*!< [7..7] Amplifier Control */ + } DAAMPCR_b; }; - __IM uint16_t RESERVED; union { - __IOM uint16_t DMTMD; /*!< (@ 0x00000010) DMA Transfer Mode Register */ + __IOM uint8_t DAPC; /*!< (@ 0x00000009) D/A Switch Charge Pump Control Register */ struct { - __IOM uint16_t DCTG : 2; /*!< [1..0] Transfer Request Source Select */ - uint16_t : 6; - __IOM uint16_t SZ : 2; /*!< [9..8] Transfer Data Size Select */ - uint16_t : 2; - __IOM uint16_t DTS : 2; /*!< [13..12] Repeat Area Select */ - __IOM uint16_t MD : 2; /*!< [15..14] Transfer Mode Select */ - } DMTMD_b; + __IOM uint8_t PUMPEN : 1; /*!< [0..0] Charge Pump Enable */ + uint8_t : 7; + } DAPC_b; }; - __IM uint8_t RESERVED1; + __IM uint16_t RESERVED[9]; union { - __IOM uint8_t DMINT; /*!< (@ 0x00000013) DMA Interrupt Setting Register */ + __IOM uint8_t DAASWCR; /*!< (@ 0x0000001C) D/A Amplifier Stabilization Wait Control Register */ struct { - __IOM uint8_t DARIE : 1; /*!< [0..0] Destination Address Extended Repeat Area Overflow Interrupt - * Enable */ - __IOM uint8_t SARIE : 1; /*!< [1..1] Source Address Extended Repeat Area Overflow Interrupt - * Enable */ - __IOM uint8_t RPTIE : 1; /*!< [2..2] Repeat Size End Interrupt Enable */ - __IOM uint8_t ESIE : 1; /*!< [3..3] Transfer Escape End Interrupt Enable */ - __IOM uint8_t DTIE : 1; /*!< [4..4] Transfer End Interrupt Enable */ - uint8_t : 3; - } DMINT_b; + uint8_t : 6; + __IOM uint8_t DAASW0 : 1; /*!< [6..6] Set the DAASW0 bit to 1 in the initialization procedure + * to wait for stabilization of the output amplifier of D/A + * channel 0. When DAASW0 is set to 1, D/A conversion operates, + * but the conversion result D/A is not output from channel + * 0. When the DAASW0 bit is 0, the stabilization wait time + * stops, and the D/A conversion result of channel 0 is output + * through the output amplifier. */ + __IOM uint8_t DAASW1 : 1; /*!< [7..7] Set the DAASW1 bit to 1 in the initialization procedure + * to wait for stabilization of the output amplifier of D/A + * channel 1. When DAASW1 is set to 1, D/A conversion operates, + * but the conversion result D/A is not output from channel + * 1. When the DAASW1 bit is 0, the stabilization wait time + * stops, and the D/A conversion result of channel 1 is output + * through the output amplifier. */ + } DAASWCR_b; }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2[2129]; union { - __IOM uint16_t DMAMD; /*!< (@ 0x00000014) DMA Address Mode Register */ + __IOM uint8_t DAADUSR; /*!< (@ 0x000010C0) D/A A/D Synchronous Unit Select Register */ struct { - __IOM uint16_t DARA : 5; /*!< [4..0] Destination Address Extended Repeat Area Specifies the - * extended repeat area on the destination address. For details - * on the settings. */ - uint16_t : 1; - __IOM uint16_t DM : 2; /*!< [7..6] Destination Address Update Mode */ - __IOM uint16_t SARA : 5; /*!< [12..8] Source Address Extended Repeat Area Specifies the extended - * repeat area on the source address. For details on the settings. */ - uint16_t : 1; - __IOM uint16_t SM : 2; /*!< [15..14] Source Address Update Mode */ - } DMAMD_b; + uint8_t : 6; + __IOM uint8_t AMADSEL1 : 1; /*!< [6..6] The DAADUSR register selects the target ADC12 unit for + * D/A and A/D synchronous conversions. Set bit [1] to 1 to + * select unit 1 as the target synchronous unit for the MCU. + * When setting the DAADSCR.DAADST bit to 1 for synchronous + * conversions, select the target unit in this register in + * advance. Only set the DAADUSR register while the ADCSR.ADST + * bit of the ADC12 is set to 0 and the DAADSCR.DAADST bit + * is set to 0. */ + uint8_t : 1; + } DAADUSR_b; }; - __IM uint16_t RESERVED2; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; +} R_DAC_Type; /*!< Size = 4292 (0x10c4) */ + +/* =========================================================================================================================== */ +/* ================ R_DAC8 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief 8-Bit D/A Converter (R_DAC8) + */ +typedef struct /*!< (@ 0x4009E000) R_DAC8 Structure */ +{ union { - __IOM uint32_t DMOFR; /*!< (@ 0x00000018) DMA Offset Register */ + __IOM uint8_t DACS[2]; /*!< (@ 0x00000000) D/A Conversion Value Setting Register [0..1] */ struct { - __IOM uint32_t DMOFR : 32; /*!< [31..0] Specifies the offset when offset addition is selected - * as the address update mode for transfer source or destination. */ - } DMOFR_b; + __IOM uint8_t DACS : 8; /*!< [7..0] DACS D/A conversion store data */ + } DACS_b[2]; }; + __IM uint8_t RESERVED; union { - __IOM uint8_t DMCNT; /*!< (@ 0x0000001C) DMA Transfer Enable Register */ + __IOM uint8_t DAM; /*!< (@ 0x00000003) D/A Converter Mode Register */ struct { - __IOM uint8_t DTE : 1; /*!< [0..0] DMA Transfer Enable */ - uint8_t : 7; - } DMCNT_b; + __IOM uint8_t DAMD0 : 1; /*!< [0..0] D/A operation mode select 0 */ + __IOM uint8_t DAMD1 : 1; /*!< [1..1] D/A operation mode select 1 */ + uint8_t : 2; + __IOM uint8_t DACE0 : 1; /*!< [4..4] D/A operation enable 0 */ + __IOM uint8_t DACE1 : 1; /*!< [5..5] D/A operation enable 1 */ + uint8_t : 2; + } DAM_b; }; + __IM uint8_t RESERVED1[2]; union { - __IOM uint8_t DMREQ; /*!< (@ 0x0000001D) DMA Software Start Register */ + __IOM uint8_t DACADSCR; /*!< (@ 0x00000006) D/A A/D Synchronous Start Control Register */ struct { - __IOM uint8_t SWREQ : 1; /*!< [0..0] DMA Software Start */ - uint8_t : 3; - __IOM uint8_t CLRS : 1; /*!< [4..4] DMA Software Start Bit Auto Clear Select */ - uint8_t : 3; - } DMREQ_b; + __IOM uint8_t DACADST : 1; /*!< [0..0] D/A A/D Synchronous Conversion */ + uint8_t : 7; + } DACADSCR_b; }; union { - __IOM uint8_t DMSTS; /*!< (@ 0x0000001E) DMA Status Register */ + __IOM uint8_t DACPC; /*!< (@ 0x00000007) D/A SW Charge Pump Control Register */ struct { - __IOM uint8_t ESIF : 1; /*!< [0..0] Transfer Escape End Interrupt Flag */ - uint8_t : 3; - __IOM uint8_t DTIF : 1; /*!< [4..4] Transfer End Interrupt Flag */ - uint8_t : 2; - __IM uint8_t ACT : 1; /*!< [7..7] DMA Active Flag */ - } DMSTS_b; + __IOM uint8_t PUMPEN : 1; /*!< [0..0] Charge pump enable */ + uint8_t : 7; + } DACPC_b; }; - __IM uint8_t RESERVED3; -} R_DMAC0_Type; /*!< Size = 32 (0x20) */ +} R_DAC8_Type; /*!< Size = 8 (0x8) */ /* =========================================================================================================================== */ -/* ================ R_DOC ================ */ +/* ================ R_DALI0 ================ */ /* =========================================================================================================================== */ /** - * @brief Data Operation Circuit (R_DOC) + * @brief Digital Addressable Lighting Interface (R_DALI0) */ -typedef struct /*!< (@ 0x40054100) R_DOC Structure */ +typedef struct /*!< (@ 0x4008F000) R_DALI0 Structure */ { union { - __IOM uint8_t DOCR; /*!< (@ 0x00000000) DOC Control Register */ + __IOM uint16_t BTVTHR1; /*!< (@ 0x00000000) DALI Bit Timing Violation Threshold Register + * 1 */ struct { - __IOM uint8_t OMS : 2; /*!< [1..0] Operating Mode Select */ - __IOM uint8_t DCSEL : 1; /*!< [2..2] Detection Condition Select */ - uint8_t : 2; - __IM uint8_t DOPCF : 1; /*!< [5..5] Data Operation Circuit Flag */ - __IOM uint8_t DOPCFCL : 1; /*!< [6..6] DOPCF Clear */ - uint8_t : 1; - } DOCR_b; + __IOM uint16_t BTV1 : 7; /*!< [6..0] Bit Timing Violation Threshold 1Specifies the bit timing + * violation threshold value 1.Note 1. These bits must be + * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE + * bit is 0. */ + uint16_t : 1; + __IOM uint16_t BTV2 : 8; /*!< [15..8] Bit Timing Violation Threshold 2Specifies the bit timing + * violation threshold value 2.Note 1. These bits must be + * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE + * bit is 0. */ + } BTVTHR1_b; }; - __IM uint8_t RESERVED; union { - __IOM uint16_t DODIR; /*!< (@ 0x00000002) DOC Data Input Register */ + __IOM uint16_t BTVTHR2; /*!< (@ 0x00000002) DALI Bit Timing Violation Threshold Register + * 2 */ struct { - __IOM uint16_t DODIR : 16; /*!< [15..0] 16-bit read-write register in which 16-bit data for - * use in the operations are stored. */ - } DODIR_b; + __IOM uint16_t BTV3 : 8; /*!< [7..0] Bit Timing Violation Threshold 3Specifies the bit timing + * violation threshold value 3.Note 1. These bits must be + * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE + * bit is 0. */ + __IOM uint16_t BTV4 : 8; /*!< [15..8] Bit Timing Violation Threshold 4Specifies the bit timing + * violation threshold value 4.Note 1. These bits must be + * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE + * bit is 0. */ + } BTVTHR2_b; }; union { - __IOM uint16_t DODSR; /*!< (@ 0x00000004) DOC Data Setting Register */ + __IOM uint16_t BTVTHR3; /*!< (@ 0x00000004) DALI Bit Timing Violation Threshold Register + * 3 */ struct { - __IOM uint16_t DODSR : 16; /*!< [15..0] This register stores 16-bit data for use as a reference - * in data comparison mode. This register also stores the - * results of operations in data addition and data subtraction - * modes. */ - } DODSR_b; + __IOM uint16_t BTV5 : 8; /*!< [7..0] Bit Timing Violation Threshold 5Specifies the bit timing + * violation threshold value 5.Note 1. These bits must be + * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE + * bit is 0. */ + uint16_t : 8; + } BTVTHR3_b; }; -} R_DOC_Type; /*!< Size = 6 (0x6) */ - -/* =========================================================================================================================== */ -/* ================ R_DRW ================ */ -/* =========================================================================================================================== */ - -/** - * @brief 2D Drawing Engine (R_DRW) - */ -typedef struct /*!< (@ 0x400E4000) R_DRW Structure */ -{ union { - union - { - __OM uint32_t CONTROL; /*!< (@ 0x00000000) Geometry Control Register */ - - struct - { - __OM uint32_t LIM1ENABLE : 1; /*!< [0..0] Enable limiter 1 */ - __OM uint32_t LIM2ENABLE : 1; /*!< [1..1] Enable limiter 2 */ - __OM uint32_t LIM3ENABLE : 1; /*!< [2..2] Enable limiter 3 */ - __OM uint32_t LIM4ENABLE : 1; /*!< [3..3] Enable limiter 4 */ - __OM uint32_t LIM5ENABLE : 1; /*!< [4..4] Enable limiter 5 */ - __OM uint32_t LIM6ENABLE : 1; /*!< [5..5] Enable limiter 6 */ - __OM uint32_t QUAD1ENABLE : 1; /*!< [6..6] Enable quadratic coupling of limiters 1 and 2 */ - __OM uint32_t QUAD2ENABLE : 1; /*!< [7..7] Enable quadratic coupling of limiters 3 and 4 */ - __OM uint32_t QUAD3ENABLE : 1; /*!< [8..8] Enable quadratic coupling of limiters 5 and 6 */ - __OM uint32_t LIM1THRESHOLD : 1; /*!< [9..9] Enable limiter 1 threshold mode */ - __OM uint32_t LIM2THRESHOLD : 1; /*!< [10..10] Enable limiter 2 threshold mode */ - __OM uint32_t LIM3THRESHOLD : 1; /*!< [11..11] Enable limiter 3 threshold mode */ - __OM uint32_t LIM4THRESHOLD : 1; /*!< [12..12] Enable limiter 4 threshold mode */ - __OM uint32_t LIM5THRESHOLD : 1; /*!< [13..13] Enable limiter 5 threshold mode */ - __OM uint32_t LIM6THRESHOLD : 1; /*!< [14..14] Enable limiter 6 threshold mode */ - __OM uint32_t BAND1ENABLE : 1; /*!< [15..15] Enable band postprocess for limiter 1 (see L1BAND) */ - __OM uint32_t BAND2ENABLE : 1; /*!< [16..16] Enable band postprocess for limiter 1 (see L1BAND) */ - __OM uint32_t UNION12 : 1; /*!< [17..17] Combine limter 1 & 2 as union (output is called A) */ - __OM uint32_t UNION34 : 1; /*!< [18..18] Combine limter 3 & 4 as union (output is called B) */ - __OM uint32_t UNION56 : 1; /*!< [19..19] Combine limter 5 & 6 as union (output is called D) */ - __OM uint32_t UNIONAB : 1; /*!< [20..20] Combine outputs A & B as union (output is called C) */ - __OM uint32_t UNIONCD : 1; /*!< [21..21] Combine outputs C & D as union (output is final) */ - __OM uint32_t SPANABORT : 1; /*!< [22..22] Shape is horizontally convex, only a single span per - * scanline */ - __OM uint32_t SPANSTORE : 1; /*!< [23..23] Nextline span start is always equal or left to current-line - * span start */ - uint32_t : 8; - } CONTROL_b; - }; + __IOM uint16_t BTVTHR4; /*!< (@ 0x00000006) DALI Bit Timing Violation Threshold Register + * 4 */ - union + struct { - __IM uint32_t STATUS; /*!< (@ 0x00000000) Status Control Register */ - - struct - { - __IM uint32_t BUSYENUM : 1; /*!< [0..0] Enumeration unit status */ - __IM uint32_t BUSYWRITE : 1; /*!< [1..1] Framebuffer writeback status */ - __IM uint32_t CACHEDIRTY : 1; /*!< [2..2] Framebuffer cache status */ - __IM uint32_t DLISTACTIVE : 1; /*!< [3..3] Display list reader status */ - __IM uint32_t ENUMIRQ : 1; /*!< [4..4] enumeration finished interrupt triggered */ - __IM uint32_t DLISTIRQ : 1; /*!< [5..5] display list finished interrupt triggered */ - __IM uint32_t BUSIRQ : 1; /*!< [6..6] bus error interrupt triggered */ - uint32_t : 1; - __IM uint32_t BUSERRMFB : 1; /*!< [8..8] framebuffer bus error interrupt triggered */ - __IM uint32_t BUSERRMTXMRL : 1; /*!< [9..9] texture bus error interrupt triggered */ - __IM uint32_t BUSERRMDL : 1; /*!< [10..10] display list bus error interrupt triggered */ - uint32_t : 21; - } STATUS_b; - }; + __IOM uint16_t BTV6 : 9; /*!< [8..0] Bit Timing Violation Threshold 6Specifies the bit timing + * violation threshold value 6.Note 1. These bits must be + * modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE + * bit is 0. */ + uint16_t : 7; + } BTVTHR4_b; }; union { - union - { - __OM uint32_t CONTROL2; /*!< (@ 0x00000004) Surface Control Register */ + __IOM uint16_t COLTHR1; /*!< (@ 0x00000008) DALI Collision Threshold Register 1 */ - struct - { - __OM uint32_t PATTERNENABLE : 1; /*!< [0..0] Pixel source is a pattern color (blend of COLOR1 and - * COLOR2 depending on PATTERN and pattern index) */ - __OM uint32_t TEXTUREENABLE : 1; /*!< [1..1] Pixel source is read from texture and used as an alpha - * to blend between COLOR1 and COLOR2 */ - __OM uint32_t PATTERNSOURCEL5 : 1; /*!< [2..2] Limiter 5 is used as pattern index instead of the default - * U limiter.Limiter 5 can be combined with limiter 6 to form - * a quadratic limiter which can be used to make quadratic - * pattern functions to draw radial patterns. */ - __OM uint32_t USEACB : 1; /*!< [3..3] Alpha blend mode */ - __OM uint32_t READFORMAT32 : 2; /*!< [5..4] Bit 4 and 3 of the texture buffer format.See READFORMAT - * above for description */ - __OM uint32_t BSFA : 1; /*!< [6..6] Blend source factor for alpha channel in alpha channel - * blending mode (USEACB = 1) */ - __OM uint32_t BDFA : 1; /*!< [7..7] Blend destinetion factor for alpha channel in alpha channel - * blending mode (USEACB = 1) */ - __OM uint32_t WRITEFORMAT2 : 1; /*!< [8..8] Bit 3 of framebuffer pixel formatSee WRITEFORMAT above - * description. */ - __OM uint32_t BSF : 1; /*!< [9..9] Blend source factorsrc factor is alpha (factor is 1 per - * default) */ - __OM uint32_t BDF : 1; /*!< [10..10] Blend destination factordst factor is alpha (factor - * is 1 per default) */ - __OM uint32_t BSI : 1; /*!< [11..11] Blend source factor is invertedsrc factor will be inverted - * (meaning 1-a or 1-1 depending on BSF) */ - __OM uint32_t BDI : 1; /*!< [12..12] Blend destination factor is inverteddst factor will - * be inverted (meaning 1-a or 1-1 depending on BDF) */ - __OM uint32_t BC2 : 1; /*!< [13..13] Blend color 2 instead of framebuffer pixel */ - __OM uint32_t TEXTURECLAMPX : 1; /*!< [14..14] Calculating U limiter outside use textureThe bit describes - * what happens if the U limiter (x direction in texture space) - * calculates a U value outside of the used texture */ - __OM uint32_t TEXTURECLAMPY : 1; /*!< [15..15] Calculating V limiter outside use textureThe bit describes - * what happens if the V limiter (y direction in texture space) - * calculates a V value outside of the used texture */ - __OM uint32_t TEXTUREFILTERX : 1; /*!< [16..16] Linear filtering on texture U axis */ - __OM uint32_t TEXTUREFILTERY : 1; /*!< [17..17] Linear filtering on texture V axis */ - __OM uint32_t READFORMAT10 : 2; /*!< [19..18] Pixel format of the texture buffer{READFORMAT32,READFORMAT10}0000: - * 8 bpp a(8)0001: 16 bpp RGB(565)0010: 32 bpp aRGB(8888)0011: - * 16 bpp aRGB(4444)0100: 16 bpp aRGB(1555)0101: 8 bpp aCLUT(44) - * 4 bit alpha and 4 bit indexed color1001: 8 bpp CLUT(8)/I(8), - * 8 bit indexed color/luminance1010: 4 bpp CLUT(4)/I(4), - * 4 bit indexed color/luminance1011: 2 bpp CLUT(2)/I(2), - * 2 bit indexed color/luminance 1100: 1 bpp CLUT(1)/I(1), - * 1 bit indexed color/luminance */ - __OM uint32_t WRITEFORMAT10 : 2; /*!< [21..20] Pixel format of the framebuffer */ - __OM uint32_t WRITEALPHA : 2; /*!< [23..22] Writeback alpha source for framebufferSet the 'alpha - * source' for the framebuffer(USEACB = 0)Blend alpha in color - * 2 instead of framebuffer alpha((USEACB = 1))In not alpha - * channel blending mode (USEACB = 0):Set the 'alpha source' - * for the framebuffer.In alpha channel blending mode (USEACB - * = 1):Blend alpha in color 2 instead of framebuffer alpha00B: - * BC2A = 1: use alpha from framebuffer as destination (DST_A)else: - * BC2A = 0: use alpha in color 2 as destination (DST_A) */ - __OM uint32_t RLEENABLE : 1; /*!< [24..24] RLE enable */ - __OM uint32_t CLUTENABLE : 1; /*!< [25..25] CLUT enable */ - __OM uint32_t COLKEYENABLE : 1; /*!< [26..26] color keying enable */ - __OM uint32_t CLUTFORMAT : 1; /*!< [27..27] Format of the CLUT */ - __OM uint32_t BSIA : 1; /*!< [28..28] Blend source factor inverted in alpha channel (USEACB - * = 1) */ - __OM uint32_t BDIA : 1; /*!< [29..29] Blend destination factor inverted in alpha channel - * (USEACB = 1) */ - __OM uint32_t RLEPIXELWIDTH : 2; /*!< [31..30] Texel width for RLE unit */ - } CONTROL2_b; - }; - - union + struct { - __IM uint32_t HWREVISION; /*!< (@ 0x00000004) Hardware Version and Feature Set ID Register */ - - struct - { - __IM uint32_t REV : 12; /*!< [11..0] Revision number */ - uint32_t : 5; - __IM uint32_t DLR : 1; /*!< [17..17] Display list reader feature */ - __IM uint32_t FBCACHE : 1; /*!< [18..18] Framebuffer cache feature */ - __IM uint32_t TXCACHE : 1; /*!< [19..19] Texture cache feature */ - __IM uint32_t PERFCOUNT : 1; /*!< [20..20] Two performance counter feature */ - __IM uint32_t TEXCLU : 1; /*!< [21..21] Texture CLUT with 16 or 256 entries feature */ - uint32_t : 1; - __IM uint32_t RLEUNIT : 1; /*!< [23..23] RLE unit feature */ - __IM uint32_t TEXCLUT256 : 1; /*!< [24..24] Texture CLUT feature */ - __IM uint32_t COLORKEY : 1; /*!< [25..25] Colorkey feature */ - uint32_t : 1; - __IM uint32_t ACBLEND : 1; /*!< [27..27] Alpha channel blending feature */ - uint32_t : 4; - } HWREVISION_b; - }; + __IOM uint16_t COL1 : 6; /*!< [5..0] Collision Threshold 1Specifies the collision threshold + * value 1.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 2; + __IOM uint16_t COL2 : 6; /*!< [13..8] Collision Threshold 2Specifies the collision threshold + * value 2.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 2; + } COLTHR1_b; }; - __IM uint32_t RESERVED[2]; union { - __OM uint32_t L1START; /*!< (@ 0x00000010) Limiter 1 Start Value Register */ + __IOM uint16_t COLTHR2; /*!< (@ 0x0000000A) DALI Collision Threshold Register 2 */ struct { - __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ - } L1START_b; + __IOM uint16_t COL3 : 7; /*!< [6..0] Collision Threshold 3Specifies the collision threshold + * value 3.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 1; + __IOM uint16_t COL4 : 7; /*!< [14..8] Collision Threshold 4Specifies the collision threshold + * value 4.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 1; + } COLTHR2_b; }; union { - __OM uint32_t L2START; /*!< (@ 0x00000014) Limiter 2 Start Value Register */ + __IOM uint16_t COLTHR3; /*!< (@ 0x0000000C) DALI Collision Threshold Register 3 */ struct { - __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ - } L2START_b; + __IOM uint16_t COL5 : 7; /*!< [6..0] Collision Threshold 5Specifies the collision threshold + * value 5.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 1; + __IOM uint16_t COL6 : 7; /*!< [14..8] Collision Threshold 6Specifies the collision threshold + * value 6.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 1; + } COLTHR3_b; }; union { - __OM uint32_t L3START; /*!< (@ 0x00000018) Limiter 3 Start Value Register */ + __IOM uint16_t COLTHR4; /*!< (@ 0x0000000E) DALI Collision Threshold Register 4 */ struct { - __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ - } L3START_b; + __IOM uint16_t COL7 : 8; /*!< [7..0] Collision Threshold 7Specifies the collision threshold + * value 7.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + __IOM uint16_t COL8 : 8; /*!< [15..8] Collision Threshold 8Specifies the collision threshold + * value 8.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + } COLTHR4_b; }; union { - __OM uint32_t L4START; /*!< (@ 0x0000001C) Limiter 4 Start Value Register */ + __IOM uint16_t COLTHR5; /*!< (@ 0x00000010) DALI Collision Threshold Register 5 */ struct { - __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ - } L4START_b; + __IOM uint16_t COL9 : 8; /*!< [7..0] Collision Threshold 9Specifies the collision threshold + * value 9.Note 1. These bits must be modified when the DALI0.CTR1.RE + * bit is 0 and the DALI0.CTR1.TE bit is 0. */ + uint16_t : 8; + } COLTHR5_b; }; union { - __OM uint32_t L5START; /*!< (@ 0x00000020) Limiter 5 Start Value Register */ + __IOM uint16_t CNFR1; /*!< (@ 0x00000012) DALI Configuration Register 1 */ struct { - __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ - } L5START_b; + __IOM uint16_t BR : 8; /*!< [7..0] Clock SelectBit rate setting example is shown in Table */ + __IOM uint16_t CKS : 2; /*!< [9..8] Clock Select */ + uint16_t : 2; + __IOM uint16_t CHL : 3; /*!< [14..12] Character Length */ + uint16_t : 1; + } CNFR1_b; }; union { - __OM uint32_t L6START; /*!< (@ 0x00000024) Limiter 6 Start Value Register */ + __IOM uint16_t CNFR2; /*!< (@ 0x00000014) DALI Configuration Register 2 */ struct { - __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ - } L6START_b; + __IOM uint16_t BTVE : 1; /*!< [0..0] Bit Timing Violation EnableNote: The bit must be modified + * only when the DALI0.STR1.BBF bit is 0. */ + __IOM uint16_t BTVM : 1; /*!< [1..1] Bit Timing Violation ModeNote: The bit must be modified + * only when the DALI0.STR1.BBF bit is 0. */ + __IOM uint16_t SGA : 1; /*!< [2..2] Save an Edge of Gray Area ModeNote: The bit must be modified + * only when the DALI0.STR1.BBF bit is 0. */ + __IOM uint16_t TXWE : 1; /*!< [3..3] DTX Width Modulation EnableNote: The bit must be modified + * only when the DALI0.STR1.BBF bit is 0. */ + __IOM uint16_t CDE : 1; /*!< [4..4] Collision Detect EnableNote: The bit must be modified + * only when the DALI0.STR1.BBF bit is 0. */ + __IOM uint16_t CDM0 : 1; /*!< [5..5] Collision Detect ModeNote: The bit must be modified only + * when the DALI0.STR1.BBF bit is 0. */ + uint16_t : 10; + } CNFR2_b; }; union { - __OM uint32_t L1XADD; /*!< (@ 0x00000028) Limiter 1 X-Axis Increment Register */ + __IOM uint16_t TXWR1; /*!< (@ 0x00000016) DALI DTX Width Register 1 */ struct { - __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ - } L1XADD_b; + __IOM uint16_t TXLW : 7; /*!< [6..0] DTX Low WidthDTX0 pin low level width */ + uint16_t : 9; + } TXWR1_b; }; + __IM uint16_t RESERVED[3]; union { - __OM uint32_t L2XADD; /*!< (@ 0x0000002C) Limiter 2 X-Axis Increment Register */ + __IOM uint16_t TDR1H; /*!< (@ 0x0000001E) DALI Transmit Data Register 1H */ struct { - __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ - } L2XADD_b; + __IOM uint16_t DTDR : 16; /*!< [15..0] Upper 16-bit DALI transmit data */ + } TDR1H_b; }; union { - __OM uint32_t L3XADD; /*!< (@ 0x00000030) Limiter 3 X-Axis Increment Register */ + __IOM uint16_t TDR1L; /*!< (@ 0x00000020) DALI Transmit Data Register 1L */ struct { - __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ - } L3XADD_b; + __IOM uint16_t DTDR : 16; /*!< [15..0] Lower 16-bit DALI transmit data */ + } TDR1L_b; }; union { - __OM uint32_t L4XADD; /*!< (@ 0x00000034) Limiter 4 X-Axis Increment Register */ + __OM uint16_t TRSTR1; /*!< (@ 0x00000022) DALI Transmit Control Register 1 */ struct { - __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ - } L4XADD_b; + __OM uint16_t TRST : 1; /*!< [0..0] Transmission Start Trigger */ + uint16_t : 15; + } TRSTR1_b; }; + __IM uint16_t RESERVED1; union { - __OM uint32_t L5XADD; /*!< (@ 0x00000038) Limiter 5 X-Axis Increment Register */ + __IOM uint16_t CTR1; /*!< (@ 0x00000026) DALI Control Register 1 */ struct { - __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ - } L5XADD_b; + __IOM uint16_t TE : 1; /*!< [0..0] Transmit Enabling */ + __IOM uint16_t RE : 1; /*!< [1..1] Receive Enabling */ + uint16_t : 6; + __IOM uint16_t SDIE : 1; /*!< [8..8] DALI_SDI Output Enabling */ + __IOM uint16_t DEIE : 1; /*!< [9..9] DALI_DEI Output Enabling */ + __IOM uint16_t CLIE : 1; /*!< [10..10] DALI_CLI Output Enabling */ + __IOM uint16_t BPIE : 1; /*!< [11..11] DALI_BPI Output Enabling */ + __IOM uint16_t FEIE : 1; /*!< [12..12] DALI_FEI Output Enabling */ + uint16_t : 3; + } CTR1_b; }; union { - __OM uint32_t L6XADD; /*!< (@ 0x0000003C) Limiter 6 X-Axis Increment Register */ + __IOM uint16_t TXDCTR1; /*!< (@ 0x00000028) DALI DTX Control Register 1 */ struct { - __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ - } L6XADD_b; + __IOM uint16_t TXAS : 1; /*!< [0..0] DTX Assert LevelNote 1. The bit must be modified only + * when the DALI0.CTR1.TE bit is 0. */ + __IOM uint16_t TXASE : 1; /*!< [1..1] DTX Assert EnablingNote 1. The bit must be modified only + * when the DALI0.CTR1.TE bit is 0. */ + uint16_t : 14; + } TXDCTR1_b; }; + __IM uint16_t RESERVED2[2]; union { - __OM uint32_t L1YADD; /*!< (@ 0x00000040) Limiter 1 Y-Axis Increment Register */ + __IM uint16_t RDR1H; /*!< (@ 0x0000002E) DALI Reception Data Register 1H */ struct { - __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ - } L1YADD_b; + __IM uint16_t DRDR : 16; /*!< [15..0] Upper 16-bit of DALI receive data */ + } RDR1H_b; }; union { - __OM uint32_t L2YADD; /*!< (@ 0x00000044) Limiter 2 Y-Axis Increment Register */ + __IM uint16_t RDR1L; /*!< (@ 0x00000030) DALI Reception Data Register 1L */ struct { - __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ - } L2YADD_b; + __IM uint16_t DRDR : 16; /*!< [15..0] Lower 16-bit of DALI receive data */ + } RDR1L_b; }; union { - __OM uint32_t L3YADD; /*!< (@ 0x00000048) Limiter 3 Y-Axis Increment Register */ + __IM uint16_t STR1; /*!< (@ 0x00000032) DALI Status Register 1 */ struct { - __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ - } L3YADD_b; + __IM uint16_t MFEF : 1; /*!< [0..0] Manchester Flaming Error Flag */ + __IM uint16_t OVF : 1; /*!< [1..1] Overrun Error Flag */ + __IM uint16_t BTVF : 1; /*!< [2..2] Bit Timing Violation Flag */ + __IM uint16_t RDRF : 1; /*!< [3..3] Receive Data Register Full Flag */ + __IM uint16_t TENDF : 1; /*!< [4..4] Transmit End Flag */ + __IM uint16_t BBF : 1; /*!< [5..5] Bus BUSY Flag */ + __IM uint16_t BPDF : 1; /*!< [6..6] Bus Power Down Flag */ + __IM uint16_t O32F : 1; /*!< [7..7] Over 32-Bit Data Reception Flag */ + __IM uint16_t CDF : 1; /*!< [8..8] Collision Detect Flag */ + __IM uint16_t DAF : 1; /*!< [9..9] Destroy Area Flag */ + __IM uint16_t RDBL : 6; /*!< [15..10] Receive Data Bit LengthThese bits store the bit length + * for data received successfully */ + } STR1_b; }; + __IM uint16_t RESERVED3; union { - __OM uint32_t L4YADD; /*!< (@ 0x0000004C) Limiter 4 Y-Axis Increment Register */ + __IM uint16_t COLR1; /*!< (@ 0x00000036) DALI Collision Register 1 */ struct { - __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ - } L4YADD_b; - }; - - union - { - __OM uint32_t L5YADD; /*!< (@ 0x00000050) Limiter 5 Y-Axis Increment Register */ - - struct - { - __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ - } L5YADD_b; + __IM uint16_t CFTF2 : 4; /*!< [3..0] Collision Detect Timing Flag 2 */ + __IM uint16_t CDTF1 : 1; /*!< [4..4] Collision Detect Timing Flag 1 */ + uint16_t : 5; + __IM uint16_t CLDAF : 1; /*!< [10..10] Collision Last Destroy Area Flag */ + __IM uint16_t RXDMON : 1; /*!< [11..11] DRX MonitorThis bit monitors the DRX0 pin value after + * the DRX0 pin is synchronized */ + __IM uint16_t RXDCEG : 1; /*!< [12..12] DRX Collision Edge */ + __IM uint16_t TXDCV : 1; /*!< [13..13] DTX Collision Value */ + uint16_t : 2; + } COLR1_b; }; + __IM uint16_t RESERVED4; union { - __OM uint32_t L6YADD; /*!< (@ 0x00000054) Limiter 6 Y-Axis Increment Register */ + __OM uint16_t FECR1; /*!< (@ 0x0000003A) DALI Flag Error Clear Register 1 */ struct { - __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ - } L6YADD_b; + __OM uint16_t MFEFC : 1; /*!< [0..0] Manchester Flaming Error Flag Clear */ + __OM uint16_t OVFC : 1; /*!< [1..1] Overrun Error Flag Clear */ + __OM uint16_t BTVFC : 1; /*!< [2..2] Bit Timing Violation Flag Clear */ + __OM uint16_t RDRFC : 1; /*!< [3..3] Receive Data Register Full Flag Clear */ + __OM uint16_t TENDFC : 1; /*!< [4..4] Transmit End Flag Clear */ + __OM uint16_t BBFC : 1; /*!< [5..5] Bus BUSY Flag ClearNote1: Do not clear DALI0.STR1.BBF + * bit when DALI0.CTR1.TE bit or DALI0.CTR1.RE bit is 1. */ + __OM uint16_t BPDFC : 1; /*!< [6..6] Bus Power Down Flag Clear */ + __OM uint16_t O32FC : 1; /*!< [7..7] Over 32-Bit Data Reception Flag Clear */ + __OM uint16_t CDFC : 1; /*!< [8..8] Collision Detect Flag Clear */ + __OM uint16_t DAFC : 1; /*!< [9..9] Destroy Area Flag Clear */ + uint16_t : 6; + } FECR1_b; }; union { - __OM uint32_t L1BAND; /*!< (@ 0x00000058) Limiter 1 Band Width Parameter Register */ + __OM uint16_t SWRR1; /*!< (@ 0x0000003C) DALI Software Reset Register 1 */ struct { - __OM uint32_t LBAND : 32; /*!< [31..0] Limiter m band width parameter */ - } L1BAND_b; + __OM uint16_t SWR : 1; /*!< [0..0] Software ResetWriting 1 to this bit causes a software + * reset. */ + uint16_t : 15; + } SWRR1_b; }; +} R_DALI0_Type; /*!< Size = 62 (0x3e) */ + +/* =========================================================================================================================== */ +/* ================ R_DEBUG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Debug Function (R_DEBUG) + */ +typedef struct /*!< (@ 0x4001B000) R_DEBUG Structure */ +{ union { - __OM uint32_t L2BAND; /*!< (@ 0x0000005C) Limiter 2 Band Width Parameter Register */ + __IM uint32_t DBGSTR; /*!< (@ 0x00000000) Debug Status Register */ struct { - __OM uint32_t LBAND : 32; /*!< [31..0] Limiter m band width parameter */ - } L2BAND_b; + uint32_t : 28; + __IM uint32_t CDBGPWRUPREQ : 1; /*!< [28..28] Debug power-up request */ + __IM uint32_t CDBGPWRUPACK : 1; /*!< [29..29] Debug power-up acknowledge */ + uint32_t : 2; + } DBGSTR_b; }; - __IM uint32_t RESERVED1; + __IM uint32_t RESERVED[3]; union { - __OM uint32_t COLOR1; /*!< (@ 0x00000064) Base Color Register */ + __IOM uint32_t DBGSTOPCR; /*!< (@ 0x00000010) Debug Stop Control Register */ struct { - __OM uint32_t COLOR1B : 8; /*!< [7..0] Blue channel of color 1 */ - __OM uint32_t COLOR1G : 8; /*!< [15..8] Green channel of color 1 */ - __OM uint32_t COLOR1R : 8; /*!< [23..16] Red channel of color 1 */ - __OM uint32_t COLOR1A : 8; /*!< [31..24] Alpha channel of color 1(0x00: transparent. . . 0xFF: - * opaque) */ - } COLOR1_b; + __IOM uint32_t DBGSTOP_IWDT : 1; /*!< [0..0] Mask bit for IWDT reset/interrupt */ + __IOM uint32_t DBGSTOP_WDT : 1; /*!< [1..1] Mask bit for WDT reset/interrupt */ + uint32_t : 14; + __IOM uint32_t DBGSTOP_LVD0 : 1; /*!< [16..16] Mask bit for LVD reset/interupt */ + __IOM uint32_t DBGSTOP_LVD1 : 1; /*!< [17..17] Mask bit for LVD reset/interupt */ + __IOM uint32_t DBGSTOP_LVD2 : 1; /*!< [18..18] Mask bit for LVD reset/interupt */ + uint32_t : 5; + __IOM uint32_t DBGSTOP_RPER : 1; /*!< [24..24] Mask bit for SRAM parity error */ + __IOM uint32_t DBGSTOP_RECCR : 1; /*!< [25..25] Mask bit for SRAM ECC error */ + uint32_t : 5; + __IOM uint32_t DBGSTOP_CPER : 1; /*!< [31..31] Mask bit for Cache SRAM parity error reset/interrupt */ + } DBGSTOPCR_b; }; +} R_DEBUG_Type; /*!< Size = 20 (0x14) */ + +/* =========================================================================================================================== */ +/* ================ R_DMA ================ */ +/* =========================================================================================================================== */ +/** + * @brief DMA Controller Common (R_DMA) + */ + +typedef struct /*!< (@ 0x40005200) R_DMA Structure */ +{ union { - __OM uint32_t COLOR2; /*!< (@ 0x00000068) Secondary Color Register */ + __IOM uint8_t DMAST; /*!< (@ 0x00000000) DMAC Module Activation Register */ struct { - __OM uint32_t COLOR2B : 8; /*!< [7..0] Blue channel of color 2 */ - __OM uint32_t COLOR2G : 8; /*!< [15..8] Green channel of color 2 */ - __OM uint32_t COLOR2R : 8; /*!< [23..16] Red channel of color 2 */ - __OM uint32_t COLOR2A : 8; /*!< [31..24] Alpha channel of color 2(0x00: transparent. . . 0xFF: - * opaque) */ - } COLOR2_b; + __IOM uint8_t DMST : 1; /*!< [0..0] DMAC Operation Enable */ + uint8_t : 7; + } DMAST_b; }; - __IM uint32_t RESERVED2[2]; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[15]; union { - __OM uint32_t PATTERN; /*!< (@ 0x00000074) Pattern Register */ + __IOM uint32_t DMECHR; /*!< (@ 0x00000040) DMAC Error Channel Register */ struct { - __OM uint32_t PATTERN : 8; /*!< [7..0] Bitmap of the pattern */ - uint32_t : 24; - } PATTERN_b; + __IM uint32_t DMECH : 3; /*!< [2..0] DMAC Error channel */ + uint32_t : 5; + __IM uint32_t DMECHSAM : 1; /*!< [8..8] DMAC Error channel Security Attribution Monitor */ + uint32_t : 7; + __IOM uint32_t DMESTA : 1; /*!< [16..16] DMAC Error Status */ + uint32_t : 15; + } DMECHR_b; }; +} R_DMA_Type; /*!< Size = 68 (0x44) */ + +/* =========================================================================================================================== */ +/* ================ R_DMAC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DMA Controller (R_DMAC0) + */ +typedef struct /*!< (@ 0x40005000) R_DMAC0 Structure */ +{ union { - __OM uint32_t SIZE; /*!< (@ 0x00000078) Bounding Box Dimension Register */ + __IOM uint32_t DMSAR; /*!< (@ 0x00000000) DMA Source Address Register */ struct { - __OM uint32_t SIZEX : 16; /*!< [15..0] Width of the bounding box in pixelsvalid range: 0 to - * 1024 */ - __OM uint32_t SIZEY : 16; /*!< [31..16] Height of the bounding box in pixelsvalid range: 0 - * to 1024 */ - } SIZE_b; + __IOM uint32_t DMSAR : 32; /*!< [31..0] Specifies the transfer source start address. */ + } DMSAR_b; }; union { - __OM uint32_t PITCH; /*!< (@ 0x0000007C) Framebuffer Pitch And Spanstore Delay Register */ + __IOM uint32_t DMDAR; /*!< (@ 0x00000004) DMA Destination Address Register */ struct { - __OM uint32_t PITCH : 16; /*!< [15..0] pitch of the framebuffer. A negative width can be used - * to render bottom-up instead of top-down */ - __OM uint32_t SSD : 16; /*!< [31..16] Spanstore delay */ - } PITCH_b; + __IOM uint32_t DMDAR : 32; /*!< [31..0] Specifies the transfer destination start address. */ + } DMDAR_b; }; union { - __OM uint32_t ORIGIN; /*!< (@ 0x00000080) Framebuffer Base Address Register */ + __IOM uint32_t DMCRA; /*!< (@ 0x00000008) DMA Transfer Count Register */ struct { - __OM uint32_t ORIGIN : 32; /*!< [31..0] Address of the first pixel in framebuffer */ - } ORIGIN_b; + __IOM uint32_t DMCRAL : 16; /*!< [15..0] Lower bits of transfer count */ + __IOM uint32_t DMCRAH : 10; /*!< [25..16] Upper bits of transfer count */ + uint32_t : 6; + } DMCRA_b; }; - __IM uint32_t RESERVED3[3]; union { - __OM uint32_t LUSTART; /*!< (@ 0x00000090) U Limiter Start Value Register */ + __IOM uint16_t DMCRB; /*!< (@ 0x0000000C) DMA Block Transfer Count Register */ struct { - __OM uint32_t LUSTART : 32; /*!< [31..0] U limiter start value */ - } LUSTART_b; + __IOM uint16_t DMCRB : 16; /*!< [15..0] Specifies the number of block transfer operations or + * repeat transfer operations. */ + } DMCRB_b; }; + __IM uint16_t RESERVED; union { - __OM uint32_t LUXADD; /*!< (@ 0x00000094) U Limiter X-Axis Increment Register */ + __IOM uint16_t DMTMD; /*!< (@ 0x00000010) DMA Transfer Mode Register */ struct { - __OM uint32_t LUXADD : 32; /*!< [31..0] U limiter x-axis increment */ - } LUXADD_b; + __IOM uint16_t DCTG : 2; /*!< [1..0] Transfer Request Source Select */ + uint16_t : 6; + __IOM uint16_t SZ : 2; /*!< [9..8] Transfer Data Size Select */ + __IOM uint16_t TKP : 1; /*!< [10..10] Transfer Keeping */ + uint16_t : 1; + __IOM uint16_t DTS : 2; /*!< [13..12] Repeat Area Select */ + __IOM uint16_t MD : 2; /*!< [15..14] Transfer Mode Select */ + } DMTMD_b; }; + __IM uint8_t RESERVED1; union { - __OM uint32_t LUYADD; /*!< (@ 0x00000098) U Limiter Y-Axis Increment Register */ + __IOM uint8_t DMINT; /*!< (@ 0x00000013) DMA Interrupt Setting Register */ struct { - __OM uint32_t LUYADD : 32; /*!< [31..0] U limiter y-axis increment */ - } LUYADD_b; + __IOM uint8_t DARIE : 1; /*!< [0..0] Destination Address Extended Repeat Area Overflow Interrupt + * Enable */ + __IOM uint8_t SARIE : 1; /*!< [1..1] Source Address Extended Repeat Area Overflow Interrupt + * Enable */ + __IOM uint8_t RPTIE : 1; /*!< [2..2] Repeat Size End Interrupt Enable */ + __IOM uint8_t ESIE : 1; /*!< [3..3] Transfer Escape End Interrupt Enable */ + __IOM uint8_t DTIE : 1; /*!< [4..4] Transfer End Interrupt Enable */ + uint8_t : 3; + } DMINT_b; }; union { - __OM uint32_t LVSTARTI; /*!< (@ 0x0000009C) V Limiter Start Value Integer Part Register */ + __IOM uint16_t DMAMD; /*!< (@ 0x00000014) DMA Address Mode Register */ struct { - __OM uint32_t LVSTARTI : 32; /*!< [31..0] V limiter start value integer part */ - } LVSTARTI_b; + __IOM uint16_t DARA : 5; /*!< [4..0] Destination Address Extended Repeat Area Specifies the + * extended repeat area on the destination address. For details + * on the settings. */ + __IOM uint16_t DADR : 1; /*!< [5..5] Destination Address Update Select After Reload */ + __IOM uint16_t DM : 2; /*!< [7..6] Destination Address Update Mode */ + __IOM uint16_t SARA : 5; /*!< [12..8] Source Address Extended Repeat Area Specifies the extended + * repeat area on the source address. For details on the settings. */ + __IOM uint16_t SADR : 1; /*!< [13..13] Source Address Update Select After Reload */ + __IOM uint16_t SM : 2; /*!< [15..14] Source Address Update Mode */ + } DMAMD_b; }; + __IM uint16_t RESERVED2; union { - __OM uint32_t LVSTARTF; /*!< (@ 0x000000A0) V Limiter Start Value Fractional Part Register */ + __IOM uint32_t DMOFR; /*!< (@ 0x00000018) DMA Offset Register */ struct { - __OM uint32_t LVSTARTF : 16; /*!< [15..0] V limiter start value fractional part */ - uint32_t : 16; - } LVSTARTF_b; + __IOM uint32_t DMOFR : 32; /*!< [31..0] Specifies the offset when offset addition is selected + * as the address update mode for transfer source or destination. */ + } DMOFR_b; }; union { - __OM uint32_t LVXADDI; /*!< (@ 0x000000A4) V Limiter X-Axis Increment Integer Part Register */ + __IOM uint8_t DMCNT; /*!< (@ 0x0000001C) DMA Transfer Enable Register */ struct { - __OM uint32_t LVXADDI : 32; /*!< [31..0] V limiter x-axis increment integer part */ - } LVXADDI_b; + __IOM uint8_t DTE : 1; /*!< [0..0] DMA Transfer Enable */ + uint8_t : 7; + } DMCNT_b; }; union { - __OM uint32_t LVYADDI; /*!< (@ 0x000000A8) V Limiter Y-Axis Increment Integer Part Register */ + __IOM uint8_t DMREQ; /*!< (@ 0x0000001D) DMA Software Start Register */ struct { - __OM uint32_t LVYADDI : 32; /*!< [31..0] V limiter y-axis increment integer part */ - } LVYADDI_b; + __IOM uint8_t SWREQ : 1; /*!< [0..0] DMA Software Start */ + uint8_t : 3; + __IOM uint8_t CLRS : 1; /*!< [4..4] DMA Software Start Bit Auto Clear Select */ + uint8_t : 3; + } DMREQ_b; }; union { - __OM uint32_t LVYXADDF; /*!< (@ 0x000000AC) V Limiter Increment Fractional Parts Register */ + __IOM uint8_t DMSTS; /*!< (@ 0x0000001E) DMA Status Register */ struct { - __OM uint32_t LVXADDF : 16; /*!< [15..0] V xlimiter increment fractional part */ - __OM uint32_t LVYADDF : 16; /*!< [31..16] V y limiter increment fractional part */ - } LVYXADDF_b; + __IOM uint8_t ESIF : 1; /*!< [0..0] Transfer Escape End Interrupt Flag */ + uint8_t : 3; + __IOM uint8_t DTIF : 1; /*!< [4..4] Transfer End Interrupt Flag */ + uint8_t : 2; + __IM uint8_t ACT : 1; /*!< [7..7] DMA Active Flag */ + } DMSTS_b; }; - __IM uint32_t RESERVED4; + __IM uint8_t RESERVED3; + __IOM uint32_t DMSRR; /*!< (@ 0x00000020) DMA Source Reload Address Register */ + __IOM uint32_t DMDRR; /*!< (@ 0x00000024) DMA Destination Reload Address Register */ union { - __OM uint32_t TEXPITCH; /*!< (@ 0x000000B4) Texels Per Texture Line Register */ + __IOM uint32_t DMSBS; /*!< (@ 0x00000028) DMA Source Buffer Size Register */ struct { - __OM uint32_t TEXPITCH : 32; /*!< [31..0] Texels per texture linevalid range: 0 to 2048 */ - } TEXPITCH_b; + __IOM uint32_t DMSBSL : 16; /*!< [15..0] Functions as data transfer counter in repeat-block transfer + * mode */ + __IOM uint32_t DMSBSH : 16; /*!< [31..16] Specifies the repeat-area size in repeat-block transfer + * mode */ + } DMSBS_b; }; union { - __OM uint32_t TEXMASK; /*!< (@ 0x000000B8) Texture Size or Texture Address Mask Register */ + __IOM uint32_t DMDBS; /*!< (@ 0x0000002C) DMA Destination Buffer Size Register */ struct { - __OM uint32_t TEXUMASK : 11; /*!< [10..0] U maskSet TEXUMASK[10:0] = texture_width -1In texture - * wrapping mode (CONTROL2.TEXTURECLAMPX = 0): texture_width - * must be a power of 2.In texture clamping mode (CONTROL2.TEXTURECLAMPX - * = 1):all widths up to 2048 are allowed. */ - __OM uint32_t TEXVMASK : 21; /*!< [31..11] V maskSet TEXVMASK[20:0] = TEXPITCH * (texture_height - * - 1).In texture wrapping mode (CONTROL2.TEXTURECLAMPY = - * 0): texture_height must be a power of 2In texture clamping - * mode (CONTROL2.TEXTURECLAMPY = 1):all heights up to 1024 - * are allowed. */ - } TEXMASK_b; + __IOM uint32_t DMDBSL : 16; /*!< [15..0] Functions as data transfer counter in repeat-block transfer + * mode */ + __IOM uint32_t DMDBSH : 16; /*!< [31..16] Specifies the repeat-area size in repeat-block transfer + * mode */ + } DMDBS_b; }; union { - __OM uint32_t TEXORIGIN; /*!< (@ 0x000000BC) Texture Base Address Register */ + __IOM uint8_t DMBWR; /*!< (@ 0x00000030) DMA Bufferable Write Enable Register */ struct { - __OM uint32_t TEXORIGIN : 32; /*!< [31..0] Texture base address */ - } TEXORIGIN_b; + __IOM uint8_t BWE : 1; /*!< [0..0] Bufferable Write Enable */ + uint8_t : 7; + } DMBWR_b; }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; +} R_DMAC0_Type; /*!< Size = 52 (0x34) */ - union - { - __OM uint32_t IRQCTL; /*!< (@ 0x000000C0) Interrupt Control Register */ +/* =========================================================================================================================== */ +/* ================ R_DOC ================ */ +/* =========================================================================================================================== */ - struct - { - __OM uint32_t ENUMIRQEN : 1; /*!< [0..0] ENUMIRQ interrupt mask enable */ - __OM uint32_t DLISTIRQEN : 1; /*!< [1..1] DLISTIRQ interrupt mask enable */ - __OM uint32_t ENUMIRQCLR : 1; /*!< [2..2] Clear enumeration interrupt ENUMIRQ */ - __OM uint32_t DLISTIRQCLR : 1; /*!< [3..3] Clear display list interrupt DLISTIRQ */ - __OM uint32_t BUSIRQEN : 1; /*!< [4..4] BUSIRQ interrupt mask enable */ - __OM uint32_t BUSIRQCLR : 1; /*!< [5..5] Clear bus error interrupt BUSIRQ */ - uint32_t : 26; - } IRQCTL_b; - }; +/** + * @brief Data Operation Circuit (R_DOC) + */ +typedef struct /*!< (@ 0x40054100) R_DOC Structure */ +{ union { - __OM uint32_t CACHECTL; /*!< (@ 0x000000C4) Cache Control Register */ + __IOM uint8_t DOCR; /*!< (@ 0x00000000) DOC Control Register */ struct { - __OM uint32_t CENABLEFX : 1; /*!< [0..0] Framebuffer cache enable */ - __OM uint32_t CFLUSHFX : 1; /*!< [1..1] Flush framebuffer cache */ - __OM uint32_t CENABLETX : 1; /*!< [2..2] Texture cache enable */ - __OM uint32_t CFLUSHTX : 1; /*!< [3..3] Flush texture cache */ - uint32_t : 28; - } CACHECTL_b; + __IOM uint8_t OMS : 2; /*!< [1..0] Operating Mode Select */ + __IOM uint8_t DCSEL : 1; /*!< [2..2] Detection Condition Select */ + uint8_t : 2; + __IM uint8_t DOPCF : 1; /*!< [5..5] Data Operation Circuit Flag */ + __IOM uint8_t DOPCFCL : 1; /*!< [6..6] DOPCF Clear */ + uint8_t : 1; + } DOCR_b; }; + __IM uint8_t RESERVED; union { - __OM uint32_t DLISTSTART; /*!< (@ 0x000000C8) Display List Start Address Register */ + __IOM uint16_t DODIR; /*!< (@ 0x00000002) DOC Data Input Register */ struct { - __OM uint32_t DLISTSTART : 32; /*!< [31..0] Display list start address */ - } DLISTSTART_b; + __IOM uint16_t DODIR : 16; /*!< [15..0] 16-bit read-write register in which 16-bit data for + * use in the operations are stored. */ + } DODIR_b; }; union { - __IOM uint32_t PERFCOUNT1; /*!< (@ 0x000000CC) Performance Counter 1 */ + __IOM uint16_t DODSR; /*!< (@ 0x00000004) DOC Data Setting Register */ struct { - __IOM uint32_t PERFCOUNT : 32; /*!< [31..0] Counter value.The counter is reset by writing PERFCOUNT - * = 0000 0000H. */ - } PERFCOUNT1_b; + __IOM uint16_t DODSR : 16; /*!< [15..0] This register stores 16-bit data for use as a reference + * in data comparison mode. This register also stores the + * results of operations in data addition and data subtraction + * modes. */ + } DODSR_b; }; +} R_DOC_Type; /*!< Size = 6 (0x6) */ +/* =========================================================================================================================== */ +/* ================ R_DRW ================ */ +/* =========================================================================================================================== */ + +/** + * @brief 2D Drawing Engine (R_DRW) + */ + +typedef struct /*!< (@ 0x400E4000) R_DRW Structure */ +{ union { - __IOM uint32_t PERFCOUNT2; /*!< (@ 0x000000D0) Performance Counter 2 */ + union + { + __OM uint32_t CONTROL; /*!< (@ 0x00000000) Geometry Control Register */ - struct + struct + { + __OM uint32_t LIM1ENABLE : 1; /*!< [0..0] Enable limiter 1 */ + __OM uint32_t LIM2ENABLE : 1; /*!< [1..1] Enable limiter 2 */ + __OM uint32_t LIM3ENABLE : 1; /*!< [2..2] Enable limiter 3 */ + __OM uint32_t LIM4ENABLE : 1; /*!< [3..3] Enable limiter 4 */ + __OM uint32_t LIM5ENABLE : 1; /*!< [4..4] Enable limiter 5 */ + __OM uint32_t LIM6ENABLE : 1; /*!< [5..5] Enable limiter 6 */ + __OM uint32_t QUAD1ENABLE : 1; /*!< [6..6] Enable quadratic coupling of limiters 1 and 2 */ + __OM uint32_t QUAD2ENABLE : 1; /*!< [7..7] Enable quadratic coupling of limiters 3 and 4 */ + __OM uint32_t QUAD3ENABLE : 1; /*!< [8..8] Enable quadratic coupling of limiters 5 and 6 */ + __OM uint32_t LIM1THRESHOLD : 1; /*!< [9..9] Enable limiter 1 threshold mode */ + __OM uint32_t LIM2THRESHOLD : 1; /*!< [10..10] Enable limiter 2 threshold mode */ + __OM uint32_t LIM3THRESHOLD : 1; /*!< [11..11] Enable limiter 3 threshold mode */ + __OM uint32_t LIM4THRESHOLD : 1; /*!< [12..12] Enable limiter 4 threshold mode */ + __OM uint32_t LIM5THRESHOLD : 1; /*!< [13..13] Enable limiter 5 threshold mode */ + __OM uint32_t LIM6THRESHOLD : 1; /*!< [14..14] Enable limiter 6 threshold mode */ + __OM uint32_t BAND1ENABLE : 1; /*!< [15..15] Enable band postprocess for limiter 1 (see L1BAND) */ + __OM uint32_t BAND2ENABLE : 1; /*!< [16..16] Enable band postprocess for limiter 1 (see L1BAND) */ + __OM uint32_t UNION12 : 1; /*!< [17..17] Combine limter 1 & 2 as union (output is called A) */ + __OM uint32_t UNION34 : 1; /*!< [18..18] Combine limter 3 & 4 as union (output is called B) */ + __OM uint32_t UNION56 : 1; /*!< [19..19] Combine limter 5 & 6 as union (output is called D) */ + __OM uint32_t UNIONAB : 1; /*!< [20..20] Combine outputs A & B as union (output is called C) */ + __OM uint32_t UNIONCD : 1; /*!< [21..21] Combine outputs C & D as union (output is final) */ + __OM uint32_t SPANABORT : 1; /*!< [22..22] Shape is horizontally convex, only a single span per + * scanline */ + __OM uint32_t SPANSTORE : 1; /*!< [23..23] Nextline span start is always equal or left to current-line + * span start */ + uint32_t : 8; + } CONTROL_b; + }; + + union { - __IOM uint32_t PERFCOUNT : 32; /*!< [31..0] Counter value.The counter is reset by writing PERFCOUNT - * = 0000 0000H. */ - } PERFCOUNT2_b; + __IM uint32_t STATUS; /*!< (@ 0x00000000) Status Control Register */ + + struct + { + __IM uint32_t BUSYENUM : 1; /*!< [0..0] Enumeration unit status */ + __IM uint32_t BUSYWRITE : 1; /*!< [1..1] Framebuffer writeback status */ + __IM uint32_t CACHEDIRTY : 1; /*!< [2..2] Framebuffer cache status */ + __IM uint32_t DLISTACTIVE : 1; /*!< [3..3] Display list reader status */ + __IM uint32_t ENUMIRQ : 1; /*!< [4..4] enumeration finished interrupt triggered */ + __IM uint32_t DLISTIRQ : 1; /*!< [5..5] display list finished interrupt triggered */ + __IM uint32_t BUSIRQ : 1; /*!< [6..6] bus error interrupt triggered */ + uint32_t : 1; + __IM uint32_t BUSERRMFB : 1; /*!< [8..8] framebuffer bus error interrupt triggered */ + __IM uint32_t BUSERRMTXMRL : 1; /*!< [9..9] texture bus error interrupt triggered */ + __IM uint32_t BUSERRMDL : 1; /*!< [10..10] display list bus error interrupt triggered */ + uint32_t : 21; + } STATUS_b; + }; }; union { - __OM uint32_t PERFTRIGGER; /*!< (@ 0x000000D4) Performance Counters Control Register */ + union + { + __OM uint32_t CONTROL2; /*!< (@ 0x00000004) Surface Control Register */ - struct + struct + { + __OM uint32_t PATTERNENABLE : 1; /*!< [0..0] Pixel source is a pattern color (blend of COLOR1 and + * COLOR2 depending on PATTERN and pattern index) */ + __OM uint32_t TEXTUREENABLE : 1; /*!< [1..1] Pixel source is read from texture and used as an alpha + * to blend between COLOR1 and COLOR2 */ + __OM uint32_t PATTERNSOURCEL5 : 1; /*!< [2..2] Limiter 5 is used as pattern index instead of the default + * U limiter.Limiter 5 can be combined with limiter 6 to form + * a quadratic limiter which can be used to make quadratic + * pattern functions to draw radial patterns. */ + __OM uint32_t USEACB : 1; /*!< [3..3] Alpha blend mode */ + __OM uint32_t READFORMAT32 : 2; /*!< [5..4] Bit 4 and 3 of the texture buffer format.See READFORMAT + * above for description */ + __OM uint32_t BSFA : 1; /*!< [6..6] Blend source factor for alpha channel in alpha channel + * blending mode (USEACB = 1) */ + __OM uint32_t BDFA : 1; /*!< [7..7] Blend destinetion factor for alpha channel in alpha channel + * blending mode (USEACB = 1) */ + __OM uint32_t WRITEFORMAT2 : 1; /*!< [8..8] Bit 3 of framebuffer pixel formatSee WRITEFORMAT above + * description. */ + __OM uint32_t BSF : 1; /*!< [9..9] Blend source factorsrc factor is alpha (factor is 1 per + * default) */ + __OM uint32_t BDF : 1; /*!< [10..10] Blend destination factordst factor is alpha (factor + * is 1 per default) */ + __OM uint32_t BSI : 1; /*!< [11..11] Blend source factor is invertedsrc factor will be inverted + * (meaning 1-a or 1-1 depending on BSF) */ + __OM uint32_t BDI : 1; /*!< [12..12] Blend destination factor is inverteddst factor will + * be inverted (meaning 1-a or 1-1 depending on BDF) */ + __OM uint32_t BC2 : 1; /*!< [13..13] Blend color 2 instead of framebuffer pixel */ + __OM uint32_t TEXTURECLAMPX : 1; /*!< [14..14] Calculating U limiter outside use textureThe bit describes + * what happens if the U limiter (x direction in texture space) + * calculates a U value outside of the used texture */ + __OM uint32_t TEXTURECLAMPY : 1; /*!< [15..15] Calculating V limiter outside use textureThe bit describes + * what happens if the V limiter (y direction in texture space) + * calculates a V value outside of the used texture */ + __OM uint32_t TEXTUREFILTERX : 1; /*!< [16..16] Linear filtering on texture U axis */ + __OM uint32_t TEXTUREFILTERY : 1; /*!< [17..17] Linear filtering on texture V axis */ + __OM uint32_t READFORMAT10 : 2; /*!< [19..18] Pixel format of the texture buffer{READFORMAT32,READFORMAT10}0000: + * 8 bpp a(8)0001: 16 bpp RGB(565)0010: 32 bpp aRGB(8888)0011: + * 16 bpp aRGB(4444)0100: 16 bpp aRGB(1555)0101: 8 bpp aCLUT(44) + * 4 bit alpha and 4 bit indexed color1001: 8 bpp CLUT(8)/I(8), + * 8 bit indexed color/luminance1010: 4 bpp CLUT(4)/I(4), + * 4 bit indexed color/luminance1011: 2 bpp CLUT(2)/I(2), + * 2 bit indexed color/luminance 1100: 1 bpp CLUT(1)/I(1), + * 1 bit indexed color/luminance */ + __OM uint32_t WRITEFORMAT10 : 2; /*!< [21..20] Pixel format of the framebuffer */ + __OM uint32_t WRITEALPHA : 2; /*!< [23..22] Writeback alpha source for framebufferSet the 'alpha + * source' for the framebuffer(USEACB = 0)Blend alpha in color + * 2 instead of framebuffer alpha((USEACB = 1))In not alpha + * channel blending mode (USEACB = 0):Set the 'alpha source' + * for the framebuffer.In alpha channel blending mode (USEACB + * = 1):Blend alpha in color 2 instead of framebuffer alpha00B: + * BC2A = 1: use alpha from framebuffer as destination (DST_A)else: + * BC2A = 0: use alpha in color 2 as destination (DST_A) */ + __OM uint32_t RLEENABLE : 1; /*!< [24..24] RLE enable */ + __OM uint32_t CLUTENABLE : 1; /*!< [25..25] CLUT enable */ + __OM uint32_t COLKEYENABLE : 1; /*!< [26..26] color keying enable */ + __OM uint32_t CLUTFORMAT : 1; /*!< [27..27] Format of the CLUT */ + __OM uint32_t BSIA : 1; /*!< [28..28] Blend source factor inverted in alpha channel (USEACB + * = 1) */ + __OM uint32_t BDIA : 1; /*!< [29..29] Blend destination factor inverted in alpha channel + * (USEACB = 1) */ + __OM uint32_t RLEPIXELWIDTH : 2; /*!< [31..30] Texel width for RLE unit */ + } CONTROL2_b; + }; + + union { - __OM uint32_t PERFTRIGGER1 : 16; /*!< [15..0] Selects the internal event that will increment PERFCOUNT1 - * register. */ - __OM uint32_t PERFTRIGGER2 : 16; /*!< [31..16] Selects the internal event that will increment PERFCOUNT2 - * register */ - } PERFTRIGGER_b; + __IM uint32_t HWREVISION; /*!< (@ 0x00000004) Hardware Version and Feature Set ID Register */ + + struct + { + __IM uint32_t REV : 12; /*!< [11..0] Revision number */ + uint32_t : 5; + __IM uint32_t DLR : 1; /*!< [17..17] Display list reader feature */ + __IM uint32_t FBCACHE : 1; /*!< [18..18] Framebuffer cache feature */ + __IM uint32_t TXCACHE : 1; /*!< [19..19] Texture cache feature */ + __IM uint32_t PERFCOUNT : 1; /*!< [20..20] Two performance counter feature */ + __IM uint32_t TEXCLU : 1; /*!< [21..21] Texture CLUT with 16 or 256 entries feature */ + uint32_t : 1; + __IM uint32_t RLEUNIT : 1; /*!< [23..23] RLE unit feature */ + __IM uint32_t TEXCLUT256 : 1; /*!< [24..24] Texture CLUT feature */ + __IM uint32_t COLORKEY : 1; /*!< [25..25] Colorkey feature */ + uint32_t : 1; + __IM uint32_t ACBLEND : 1; /*!< [27..27] Alpha channel blending feature */ + uint32_t : 4; + } HWREVISION_b; + }; }; - __IM uint32_t RESERVED5; + __IM uint32_t RESERVED[2]; union { - __OM uint32_t TEXCLADDR; /*!< (@ 0x000000DC) CLUT Start Address Register */ + __OM uint32_t L1START; /*!< (@ 0x00000010) Limiter 1 Start Value Register */ struct { - __OM uint32_t CLADDR : 8; /*!< [7..0] Texture CLUT start address for indexed texture format */ - uint32_t : 24; - } TEXCLADDR_b; + __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ + } L1START_b; }; union { - __OM uint32_t TEXCLDATA; /*!< (@ 0x000000E0) CLUT Data Register */ + __OM uint32_t L2START; /*!< (@ 0x00000014) Limiter 2 Start Value Register */ struct { - __OM uint32_t CLDATA : 32; /*!< [31..0] Texture CLUT data for Indexed texture format */ - } TEXCLDATA_b; + __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ + } L2START_b; }; union { - __OM uint32_t TEXCLOFFSET; /*!< (@ 0x000000E4) CLUT Offset Register */ + __OM uint32_t L3START; /*!< (@ 0x00000018) Limiter 3 Start Value Register */ struct { - __OM uint32_t CLOFFSET : 8; /*!< [7..0] Texture CLUT offset for Indexed texture format. CLOFFSET[7:0] - * is or'ed with the original index */ - uint32_t : 24; - } TEXCLOFFSET_b; + __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ + } L3START_b; }; union { - __OM uint32_t COLKEY; /*!< (@ 0x000000E8) Color Key Register */ + __OM uint32_t L4START; /*!< (@ 0x0000001C) Limiter 4 Start Value Register */ struct { - __OM uint32_t COLKEYB : 8; /*!< [7..0] Blue channel of color key */ - __OM uint32_t COLKEYG : 8; /*!< [15..8] Green channel of color key */ - __OM uint32_t COLKEYR : 8; /*!< [23..16] Red channel of color key */ - uint32_t : 8; - } COLKEY_b; + __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ + } L4START_b; }; -} R_DRW_Type; /*!< Size = 236 (0xec) */ - -/* =========================================================================================================================== */ -/* ================ R_DTC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Data Transfer Controller (R_DTC) - */ -typedef struct /*!< (@ 0x40005400) R_DTC Structure */ -{ union { - __IOM uint8_t DTCCR; /*!< (@ 0x00000000) DTC Control Register */ + __OM uint32_t L5START; /*!< (@ 0x00000020) Limiter 5 Start Value Register */ struct { - uint8_t : 4; - __IOM uint8_t RRS : 1; /*!< [4..4] DTC Transfer Information Read Skip Enable. */ - uint8_t : 3; - } DTCCR_b; + __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ + } L5START_b; }; - __IM uint8_t RESERVED; - __IM uint16_t RESERVED1; union { - __IOM uint32_t DTCVBR; /*!< (@ 0x00000004) DTC Vector Base Register */ + __OM uint32_t L6START; /*!< (@ 0x00000024) Limiter 6 Start Value Register */ struct { - __IOM uint32_t DTCVBR : 32; /*!< [31..0] DTC Vector Base Address.Note: A value cannot be set - * in the lower-order 10 bits. These bits are fixed to 0. */ - } DTCVBR_b; + __OM uint32_t LSTART : 32; /*!< [31..0] Start value of the n'th limiter(n=1-6) */ + } L6START_b; }; - __IM uint32_t RESERVED2; union { - __IOM uint8_t DTCST; /*!< (@ 0x0000000C) DTC Module Start Register */ + __OM uint32_t L1XADD; /*!< (@ 0x00000028) Limiter 1 X-Axis Increment Register */ struct { - __IOM uint8_t DTCST : 1; /*!< [0..0] DTC Module Start */ - uint8_t : 7; - } DTCST_b; + __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ + } L1XADD_b; }; - __IM uint8_t RESERVED3; union { - __IM uint16_t DTCSTS; /*!< (@ 0x0000000E) DTC Status Register */ + __OM uint32_t L2XADD; /*!< (@ 0x0000002C) Limiter 2 X-Axis Increment Register */ struct { - __IM uint16_t VECN : 8; /*!< [7..0] DTC-Activating Vector Number MonitoringThese bits indicate - * the vector number for the activating source when DTC transfer - * is in progress.The value is only valid if DTC transfer - * is in progress (the value of the ACT flag is 1) */ - uint16_t : 7; - __IM uint16_t ACT : 1; /*!< [15..15] DTC Active Flag */ - } DTCSTS_b; + __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ + } L2XADD_b; }; -} R_DTC_Type; /*!< Size = 16 (0x10) */ - -/* =========================================================================================================================== */ -/* ================ R_ELC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Event Link Controller (R_ELC) - */ -typedef struct /*!< (@ 0x40041000) R_ELC Structure */ -{ union { - __IOM uint8_t ELCR; /*!< (@ 0x00000000) Event Link Controller Register */ + __OM uint32_t L3XADD; /*!< (@ 0x00000030) Limiter 3 X-Axis Increment Register */ struct { - uint8_t : 7; - __IOM uint8_t ELCON : 1; /*!< [7..7] All Event Link Enable */ - } ELCR_b; + __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ + } L3XADD_b; }; - __IM uint8_t RESERVED; - __IOM R_ELC_ELSEGR_Type ELSEGR[2]; /*!< (@ 0x00000002) Event Link Software Event Generation Register */ - __IM uint16_t RESERVED1[5]; - __IOM R_ELC_ELSR_Type ELSR[23]; /*!< (@ 0x00000010) Event Link Setting Register [0..22] */ -} R_ELC_Type; /*!< Size = 108 (0x6c) */ - -/* =========================================================================================================================== */ -/* ================ R_ETHERC0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Ethernet MAC Controller (R_ETHERC0) - */ -typedef struct /*!< (@ 0x40064100) R_ETHERC0 Structure */ -{ union { - __IOM uint32_t ECMR; /*!< (@ 0x00000000) ETHERC Mode Register */ + __OM uint32_t L4XADD; /*!< (@ 0x00000034) Limiter 4 X-Axis Increment Register */ struct { - __IOM uint32_t PRM : 1; /*!< [0..0] Promiscuous Mode */ - __IOM uint32_t DM : 1; /*!< [1..1] Duplex Mode */ - __IOM uint32_t RTM : 1; /*!< [2..2] Bit Rate */ - __IOM uint32_t ILB : 1; /*!< [3..3] Internal Loopback Mode */ - uint32_t : 1; - __IOM uint32_t TE : 1; /*!< [5..5] Transmission Enable */ - __IOM uint32_t RE : 1; /*!< [6..6] Reception Enable */ - uint32_t : 2; - __IOM uint32_t MPDE : 1; /*!< [9..9] Magic Packet Detection Enable */ - uint32_t : 2; - __IOM uint32_t PRCEF : 1; /*!< [12..12] CRC Error Frame Receive Mode */ - uint32_t : 3; - __IOM uint32_t TXF : 1; /*!< [16..16] Transmit Flow Control Operating Mode */ - __IOM uint32_t RXF : 1; /*!< [17..17] Receive Flow Control Operating Mode */ - __IOM uint32_t PFR : 1; /*!< [18..18] PAUSE Frame Receive Mode */ - __IOM uint32_t ZPF : 1; /*!< [19..19] 0 Time PAUSE Frame Enable */ - __IOM uint32_t TPC : 1; /*!< [20..20] PAUSE Frame Transmit */ - uint32_t : 11; - } ECMR_b; + __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ + } L4XADD_b; }; - __IM uint32_t RESERVED; union { - __IOM uint32_t RFLR; /*!< (@ 0x00000008) Receive Frame Maximum Length Register */ + __OM uint32_t L5XADD; /*!< (@ 0x00000038) Limiter 5 X-Axis Increment Register */ struct { - __IOM uint32_t RFL : 12; /*!< [11..0] Receive Frame Maximum LengthThe set value becomes the - * maximum frame length. The minimum value that can be set - * is 1,518 bytes, and the maximum value that can be set is - * 2,048 bytes. Values that are less than 1,518 bytes are - * regarded as 1,518 bytes, and values larger than 2,048 bytes - * are regarded as 2,048 bytes. */ - uint32_t : 20; - } RFLR_b; + __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ + } L5XADD_b; }; - __IM uint32_t RESERVED1; union { - __IOM uint32_t ECSR; /*!< (@ 0x00000010) ETHERC Status Register */ + __OM uint32_t L6XADD; /*!< (@ 0x0000003C) Limiter 6 X-Axis Increment Register */ struct { - __IOM uint32_t ICD : 1; /*!< [0..0] False Carrier Detect Flag */ - __IOM uint32_t MPD : 1; /*!< [1..1] Magic Packet Detect Flag */ - __IOM uint32_t LCHNG : 1; /*!< [2..2] LCHNG Link Signal Change Flag */ - uint32_t : 1; - __IOM uint32_t PSRTO : 1; /*!< [4..4] PAUSE Frame Retransmit Over Flag */ - __IOM uint32_t BFR : 1; /*!< [5..5] Continuous Broadcast Frame Reception Flag */ - uint32_t : 26; - } ECSR_b; + __OM uint32_t LXADD : 32; /*!< [31..0] X-axis increment */ + } L6XADD_b; }; - __IM uint32_t RESERVED2; union { - __IOM uint32_t ECSIPR; /*!< (@ 0x00000018) ETHERC Interrupt Enable Register */ + __OM uint32_t L1YADD; /*!< (@ 0x00000040) Limiter 1 Y-Axis Increment Register */ struct { - __IOM uint32_t ICDIP : 1; /*!< [0..0] False Carrier Detect Interrupt Enable */ - __IOM uint32_t MPDIP : 1; /*!< [1..1] Magic Packet Detect Interrupt Enable */ - __IOM uint32_t LCHNGIP : 1; /*!< [2..2] LINK Signal Change Interrupt Enable */ - uint32_t : 1; - __IOM uint32_t PSRTOIP : 1; /*!< [4..4] PAUSE Frame Retransmit Over Interrupt Enable */ - __IOM uint32_t BFSIPR : 1; /*!< [5..5] Continuous Broadcast Frame Reception Interrupt Enable */ - uint32_t : 26; - } ECSIPR_b; + __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ + } L1YADD_b; }; - __IM uint32_t RESERVED3; union { - __IOM uint32_t PIR; /*!< (@ 0x00000020) PHY Interface Register */ + __OM uint32_t L2YADD; /*!< (@ 0x00000044) Limiter 2 Y-Axis Increment Register */ struct { - __IOM uint32_t MDC : 1; /*!< [0..0] MII/RMII Management Data ClockThe MDC bit value is output - * from the ETn_MDC pin to supply the management data clock - * to the MII or RMII. */ - __IOM uint32_t MMD : 1; /*!< [1..1] MII/RMII Management Mode */ - __IOM uint32_t MDO : 1; /*!< [2..2] MII/RMII Management Data-OutThe MDO bit value is output - * from the ETn_MDIO pin when the MMD bit is 1 (write). The - * value is not output when the MMD bit is 0 (read). */ - __IM uint32_t MDI : 1; /*!< [3..3] MII/RMII Management Data-InThis bit indicates the level - * of the ETn_MDIO pin. The write value should be 0. */ - uint32_t : 28; - } PIR_b; + __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ + } L2YADD_b; }; - __IM uint32_t RESERVED4; union { - __IM uint32_t PSR; /*!< (@ 0x00000028) PHY Status Register */ + __OM uint32_t L3YADD; /*!< (@ 0x00000048) Limiter 3 Y-Axis Increment Register */ struct { - __IM uint32_t LMON : 1; /*!< [0..0] ETn_LINKSTA Pin Status FlagThe link status can be read - * by connecting the link signal output from the PHY-LSI to - * the ETn_LINKSTA pin. For details on the polarity, refer - * to the specifications of the connected PHY-LSI. */ - uint32_t : 31; - } PSR_b; + __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ + } L3YADD_b; }; - __IM uint32_t RESERVED5[5]; union { - __IOM uint32_t RDMLR; /*!< (@ 0x00000040) Random Number Generation Counter Upper Limit - * Setting Register */ + __OM uint32_t L4YADD; /*!< (@ 0x0000004C) Limiter 4 Y-Axis Increment Register */ struct { - __IOM uint32_t RMD : 20; /*!< [19..0] Random Number Generation Counter */ - uint32_t : 12; - } RDMLR_b; + __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ + } L4YADD_b; }; - __IM uint32_t RESERVED6[3]; union { - __IOM uint32_t IPGR; /*!< (@ 0x00000050) IPG Register */ + __OM uint32_t L5YADD; /*!< (@ 0x00000050) Limiter 5 Y-Axis Increment Register */ struct { - __IOM uint32_t IPG : 5; /*!< [4..0] Interpacket Gap Range:'16bit time(0x00)'-'140bit time(0x1F)' */ - uint32_t : 27; - } IPGR_b; + __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ + } L5YADD_b; }; union { - __IOM uint32_t APR; /*!< (@ 0x00000054) Automatic PAUSE Frame Register */ + __OM uint32_t L6YADD; /*!< (@ 0x00000054) Limiter 6 Y-Axis Increment Register */ struct { - __IOM uint32_t AP : 16; /*!< [15..0] Automatic PAUSE Time SettingThese bits set the value - * of the pause_time parameter for a PAUSE frame that is automatically - * transmitted. Transmission is not performed until the set - * value multiplied by 512 bit time has elapsed. */ - uint32_t : 16; - } APR_b; + __OM uint32_t LYADD : 32; /*!< [31..0] Y-axis increment */ + } L6YADD_b; }; union { - __OM uint32_t MPR; /*!< (@ 0x00000058) Manual PAUSE Frame Register */ + __OM uint32_t L1BAND; /*!< (@ 0x00000058) Limiter 1 Band Width Parameter Register */ struct { - __OM uint32_t MP : 16; /*!< [15..0] Manual PAUSE Time SettingThese bits set the value of - * the pause_time parameter for a PAUSE frame that is manually - * transmitted. Transmission is not performed until the set - * value multiplied by 512 bit time has elapsed. The read - * value is undefined. */ - uint32_t : 16; - } MPR_b; + __OM uint32_t LBAND : 32; /*!< [31..0] Limiter m band width parameter */ + } L1BAND_b; }; - __IM uint32_t RESERVED7; union { - __IM uint32_t RFCF; /*!< (@ 0x00000060) Received PAUSE Frame Counter */ + __OM uint32_t L2BAND; /*!< (@ 0x0000005C) Limiter 2 Band Width Parameter Register */ struct { - __IM uint32_t RPAUSE : 8; /*!< [7..0] Received PAUSE Frame CountNumber of received PAUSE frames */ - uint32_t : 24; - } RFCF_b; + __OM uint32_t LBAND : 32; /*!< [31..0] Limiter m band width parameter */ + } L2BAND_b; }; + __IM uint32_t RESERVED1; union { - __IOM uint32_t TPAUSER; /*!< (@ 0x00000064) PAUSE Frame Retransmit Count Setting Register */ + __OM uint32_t COLOR1; /*!< (@ 0x00000064) Base Color Register */ struct { - __IOM uint32_t TPAUSE : 16; /*!< [15..0] Automatic PAUSE Frame Retransmit Setting */ - uint32_t : 16; - } TPAUSER_b; + __OM uint32_t COLOR1B : 8; /*!< [7..0] Blue channel of color 1 */ + __OM uint32_t COLOR1G : 8; /*!< [15..8] Green channel of color 1 */ + __OM uint32_t COLOR1R : 8; /*!< [23..16] Red channel of color 1 */ + __OM uint32_t COLOR1A : 8; /*!< [31..24] Alpha channel of color 1(0x00: transparent. . . 0xFF: + * opaque) */ + } COLOR1_b; }; - __IM uint32_t TPAUSECR; /*!< (@ 0x00000068) PAUSE Frame Retransmit Counter */ union { - __IOM uint32_t BCFRR; /*!< (@ 0x0000006C) Broadcast Frame Receive Count Setting Register */ + __OM uint32_t COLOR2; /*!< (@ 0x00000068) Secondary Color Register */ struct { - __IOM uint32_t BCF : 16; /*!< [15..0] Broadcast Frame Continuous Receive Count Setting */ - uint32_t : 16; - } BCFRR_b; + __OM uint32_t COLOR2B : 8; /*!< [7..0] Blue channel of color 2 */ + __OM uint32_t COLOR2G : 8; /*!< [15..8] Green channel of color 2 */ + __OM uint32_t COLOR2R : 8; /*!< [23..16] Red channel of color 2 */ + __OM uint32_t COLOR2A : 8; /*!< [31..24] Alpha channel of color 2(0x00: transparent. . . 0xFF: + * opaque) */ + } COLOR2_b; }; - __IM uint32_t RESERVED8[20]; + __IM uint32_t RESERVED2[2]; union { - __IOM uint32_t MAHR; /*!< (@ 0x000000C0) MAC Address Upper Bit Register */ + __OM uint32_t PATTERN; /*!< (@ 0x00000074) Pattern Register */ struct { - __IOM uint32_t MAHR : 32; /*!< [31..0] MAC Address Upper Bit RegisterThe MAHR register sets - * the upper 32 bits (b47 to b16) of the 48-bit MAC address. */ - } MAHR_b; + __OM uint32_t PATTERN : 8; /*!< [7..0] Bitmap of the pattern */ + uint32_t : 24; + } PATTERN_b; }; - __IM uint32_t RESERVED9; union { - __IOM uint32_t MALR; /*!< (@ 0x000000C8) MAC Address Lower Bit Register */ + __OM uint32_t SIZE; /*!< (@ 0x00000078) Bounding Box Dimension Register */ struct { - __IOM uint32_t MALR : 16; /*!< [15..0] MAC Address Lower Bit RegisterThe MALR register sets - * the lower 16 bits of the 48-bit MAC address. */ - uint32_t : 16; - } MALR_b; + __OM uint32_t SIZEX : 16; /*!< [15..0] Width of the bounding box in pixelsvalid range: 0 to + * 1024 */ + __OM uint32_t SIZEY : 16; /*!< [31..16] Height of the bounding box in pixelsvalid range: 0 + * to 1024 */ + } SIZE_b; }; - __IM uint32_t RESERVED10; union { - __IOM uint32_t TROCR; /*!< (@ 0x000000D0) Transmit Retry Over Counter Register */ + __OM uint32_t PITCH; /*!< (@ 0x0000007C) Framebuffer Pitch And Spanstore Delay Register */ struct { - __IOM uint32_t TROCR : 32; /*!< [31..0] Transmit Retry Over Counter RegisterThe TROCR register - * is a counter indicating the number of frames that fail - * to be retransmitted. */ - } TROCR_b; - }; - __IOM uint32_t CDCR; /*!< (@ 0x000000D4) Late Collision Detect Counter Register */ + __OM uint32_t PITCH : 16; /*!< [15..0] pitch of the framebuffer. A negative width can be used + * to render bottom-up instead of top-down */ + __OM uint32_t SSD : 16; /*!< [31..16] Spanstore delay */ + } PITCH_b; + }; union { - __IOM uint32_t LCCR; /*!< (@ 0x000000D8) Lost Carrier Counter Register */ + __OM uint32_t ORIGIN; /*!< (@ 0x00000080) Framebuffer Base Address Register */ struct { - __IOM uint32_t LCCR : 32; /*!< [31..0] Lost Carrier Counter RegisterThe LCCR register is a - * counter indicating the number of times a loss of carrier - * is detected during frame transmission. */ - } LCCR_b; + __OM uint32_t ORIGIN : 32; /*!< [31..0] Address of the first pixel in framebuffer */ + } ORIGIN_b; }; + __IM uint32_t RESERVED3[3]; union { - __IOM uint32_t CNDCR; /*!< (@ 0x000000DC) Carrier Not Detect Counter Register */ + __OM uint32_t LUSTART; /*!< (@ 0x00000090) U Limiter Start Value Register */ struct { - __IOM uint32_t CNDCR : 32; /*!< [31..0] Carrier Not Detect Counter RegisterThe CNDCR register - * is a counter indicating the number of times a carrier is - * not detected during preamble transmission. */ - } CNDCR_b; + __OM uint32_t LUSTART : 32; /*!< [31..0] U limiter start value */ + } LUSTART_b; }; - __IM uint32_t RESERVED11; union { - __IOM uint32_t CEFCR; /*!< (@ 0x000000E4) CRC Error Frame Receive Counter Register */ + __OM uint32_t LUXADD; /*!< (@ 0x00000094) U Limiter X-Axis Increment Register */ struct { - __IOM uint32_t CEFCR : 32; /*!< [31..0] CRC Error Frame Receive Counter RegisterThe CEFCR register - * is a counter indicating the number of received frames where - * a CRC error has been detected. */ - } CEFCR_b; + __OM uint32_t LUXADD : 32; /*!< [31..0] U limiter x-axis increment */ + } LUXADD_b; }; union { - __IOM uint32_t FRECR; /*!< (@ 0x000000E8) Frame Receive Error Counter Register */ + __OM uint32_t LUYADD; /*!< (@ 0x00000098) U Limiter Y-Axis Increment Register */ struct { - __IOM uint32_t FRECR : 32; /*!< [31..0] Frame Receive Error Counter RegisterThe FRECR register - * is a counter indicating the number of times a frame receive - * error has occurred. */ - } FRECR_b; + __OM uint32_t LUYADD : 32; /*!< [31..0] U limiter y-axis increment */ + } LUYADD_b; }; union { - __IOM uint32_t TSFRCR; /*!< (@ 0x000000EC) Too-Short Frame Receive Counter Register */ + __OM uint32_t LVSTARTI; /*!< (@ 0x0000009C) V Limiter Start Value Integer Part Register */ struct { - __IOM uint32_t TSFRCR : 32; /*!< [31..0] Too-Short Frame Receive Counter RegisterThe TSFRCR register - * is a counter indicating the number of times a short frame - * that is shorter than 64 bytes has been received. */ - } TSFRCR_b; + __OM uint32_t LVSTARTI : 32; /*!< [31..0] V limiter start value integer part */ + } LVSTARTI_b; }; union { - __IOM uint32_t TLFRCR; /*!< (@ 0x000000F0) Too-Long Frame Receive Counter Register */ + __OM uint32_t LVSTARTF; /*!< (@ 0x000000A0) V Limiter Start Value Fractional Part Register */ struct { - __IOM uint32_t TLFRCR : 32; /*!< [31..0] Too-Long Frame Receive Counter RegisterThe TLFRCR register - * is a counter indicating the number of times a long frame - * that is longer than the RFLR register value has been received. */ - } TLFRCR_b; + __OM uint32_t LVSTARTF : 16; /*!< [15..0] V limiter start value fractional part */ + uint32_t : 16; + } LVSTARTF_b; }; union { - __IOM uint32_t RFCR; /*!< (@ 0x000000F4) Received Alignment Error Frame Counter Register */ + __OM uint32_t LVXADDI; /*!< (@ 0x000000A4) V Limiter X-Axis Increment Integer Part Register */ struct { - __IOM uint32_t RFCR : 32; /*!< [31..0] Received Alignment Error Frame Counter RegisterThe RFCR - * register is a counter indicating the number of times a - * frame has been received with the alignment error (frame - * is not an integral number of octets). */ - } RFCR_b; + __OM uint32_t LVXADDI : 32; /*!< [31..0] V limiter x-axis increment integer part */ + } LVXADDI_b; }; union { - __IOM uint32_t MAFCR; /*!< (@ 0x000000F8) Multicast Address Frame Receive Counter Register */ + __OM uint32_t LVYADDI; /*!< (@ 0x000000A8) V Limiter Y-Axis Increment Integer Part Register */ struct { - __IOM uint32_t MAFCR : 32; /*!< [31..0] Multicast Address Frame Receive Counter RegisterThe - * MAFCR register is a counter indicating the number of times - * a frame where the multicast address is set has been received. */ - } MAFCR_b; + __OM uint32_t LVYADDI : 32; /*!< [31..0] V limiter y-axis increment integer part */ + } LVYADDI_b; }; -} R_ETHERC0_Type; /*!< Size = 252 (0xfc) */ - -/* =========================================================================================================================== */ -/* ================ R_ETHERC_EDMAC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Ethernet DMA Controller (R_ETHERC_EDMAC) - */ -typedef struct /*!< (@ 0x40064000) R_ETHERC_EDMAC Structure */ -{ union { - __IOM uint32_t EDMR; /*!< (@ 0x00000000) EDMAC Mode Register */ + __OM uint32_t LVYXADDF; /*!< (@ 0x000000AC) V Limiter Increment Fractional Parts Register */ struct { - __OM uint32_t SWR : 1; /*!< [0..0] Software Reset */ - uint32_t : 3; - __IOM uint32_t DL : 2; /*!< [5..4] Transmit/Receive DescriptorLength */ - __IOM uint32_t DE : 1; /*!< [6..6] Big Endian Mode/Little Endian ModeNOTE: This setting - * applies to data for the transmit/receive buffer. It does - * not apply to transmit/receive descriptors and registers. */ - uint32_t : 25; - } EDMR_b; + __OM uint32_t LVXADDF : 16; /*!< [15..0] V xlimiter increment fractional part */ + __OM uint32_t LVYADDF : 16; /*!< [31..16] V y limiter increment fractional part */ + } LVYXADDF_b; }; - __IM uint32_t RESERVED; + __IM uint32_t RESERVED4; union { - __IOM uint32_t EDTRR; /*!< (@ 0x00000008) EDMAC Transmit Request Register */ + __OM uint32_t TEXPITCH; /*!< (@ 0x000000B4) Texels Per Texture Line Register */ struct { - __OM uint32_t TR : 1; /*!< [0..0] Transmit Request */ - uint32_t : 31; - } EDTRR_b; + __OM uint32_t TEXPITCH : 32; /*!< [31..0] Texels per texture linevalid range: 0 to 2048 */ + } TEXPITCH_b; }; - __IM uint32_t RESERVED1; union { - __IOM uint32_t EDRRR; /*!< (@ 0x00000010) EDMAC Receive Request Register */ + __OM uint32_t TEXMASK; /*!< (@ 0x000000B8) Texture Size or Texture Address Mask Register */ struct { - __IOM uint32_t RR : 1; /*!< [0..0] Receive Request */ - uint32_t : 31; - } EDRRR_b; + __OM uint32_t TEXUMASK : 11; /*!< [10..0] U maskSet TEXUMASK[10:0] = texture_width -1In texture + * wrapping mode (CONTROL2.TEXTURECLAMPX = 0): texture_width + * must be a power of 2.In texture clamping mode (CONTROL2.TEXTURECLAMPX + * = 1):all widths up to 2048 are allowed. */ + __OM uint32_t TEXVMASK : 21; /*!< [31..11] V maskSet TEXVMASK[20:0] = TEXPITCH * (texture_height + * - 1).In texture wrapping mode (CONTROL2.TEXTURECLAMPY = + * 0): texture_height must be a power of 2In texture clamping + * mode (CONTROL2.TEXTURECLAMPY = 1):all heights up to 1024 + * are allowed. */ + } TEXMASK_b; }; - __IM uint32_t RESERVED2; union { - __IOM uint32_t TDLAR; /*!< (@ 0x00000018) Transmit Descriptor List Start Address Register */ + __OM uint32_t TEXORIGIN; /*!< (@ 0x000000BC) Texture Base Address Register */ struct { - __IOM uint32_t TDLAR : 32; /*!< [31..0] The start address of the transmit descriptor list is - * set. Set the start address according to the descriptor - * length selected by the EDMR.DL[1:0] bits.16-byte boundary: - * Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte - * boundary: Lower 6 bits = 000000b */ - } TDLAR_b; + __OM uint32_t TEXORIGIN : 32; /*!< [31..0] Texture base address */ + } TEXORIGIN_b; }; - __IM uint32_t RESERVED3; union { - __IOM uint32_t RDLAR; /*!< (@ 0x00000020) Receive Descriptor List Start Address Register */ + __OM uint32_t IRQCTL; /*!< (@ 0x000000C0) Interrupt Control Register */ struct { - __IOM uint32_t RDLAR : 32; /*!< [31..0] The start address of the receive descriptor list is - * set. Set the start address according to the descriptor - * length selected by the EDMR.DL[1:0] bits.16-byte boundary: - * Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte - * boundary: Lower 6 bits = 000000b */ - } RDLAR_b; + __OM uint32_t ENUMIRQEN : 1; /*!< [0..0] ENUMIRQ interrupt mask enable */ + __OM uint32_t DLISTIRQEN : 1; /*!< [1..1] DLISTIRQ interrupt mask enable */ + __OM uint32_t ENUMIRQCLR : 1; /*!< [2..2] Clear enumeration interrupt ENUMIRQ */ + __OM uint32_t DLISTIRQCLR : 1; /*!< [3..3] Clear display list interrupt DLISTIRQ */ + __OM uint32_t BUSIRQEN : 1; /*!< [4..4] BUSIRQ interrupt mask enable */ + __OM uint32_t BUSIRQCLR : 1; /*!< [5..5] Clear bus error interrupt BUSIRQ */ + uint32_t : 26; + } IRQCTL_b; }; - __IM uint32_t RESERVED4; union { - __IOM uint32_t EESR; /*!< (@ 0x00000028) ETHERC/EDMAC Status Register */ + __OM uint32_t CACHECTL; /*!< (@ 0x000000C4) Cache Control Register */ struct { - __IOM uint32_t CERF : 1; /*!< [0..0] CRC Error Flag */ - __IOM uint32_t PRE : 1; /*!< [1..1] PHY-LSI Receive Error Flag */ - __IOM uint32_t RTSF : 1; /*!< [2..2] Frame-Too-Short Error Flag */ - __IOM uint32_t RTLF : 1; /*!< [3..3] Frame-Too-Long Error Flag */ - __IOM uint32_t RRF : 1; /*!< [4..4] Alignment Error Flag */ - uint32_t : 2; - __IOM uint32_t RMAF : 1; /*!< [7..7] Multicast Address Frame Receive Flag */ - __IOM uint32_t TRO : 1; /*!< [8..8] Transmit Retry Over Flag */ - __IOM uint32_t CD : 1; /*!< [9..9] Late Collision Detect Flag */ - __IOM uint32_t DLC : 1; /*!< [10..10] Loss of Carrier Detect Flag */ - __IOM uint32_t CND : 1; /*!< [11..11] Carrier Not Detect Flag */ - uint32_t : 4; - __IOM uint32_t RFOF : 1; /*!< [16..16] Receive FIFO Overflow Flag */ - __IOM uint32_t RDE : 1; /*!< [17..17] Receive Descriptor Empty Flag */ - __IOM uint32_t FR : 1; /*!< [18..18] Frame Receive Flag */ - __IOM uint32_t TFUF : 1; /*!< [19..19] Transmit FIFO Underflow Flag */ - __IOM uint32_t TDE : 1; /*!< [20..20] Transmit Descriptor Empty Flag */ - __IOM uint32_t TC : 1; /*!< [21..21] Frame Transfer Complete Flag */ - __IM uint32_t ECI : 1; /*!< [22..22] ETHERC Status Register Source FlagNOTE: When the source - * in the ETHERCn.ECSR register is cleared, the ECI flag is - * also cleared. */ - __IOM uint32_t ADE : 1; /*!< [23..23] Address Error Flag */ - __IOM uint32_t RFCOF : 1; /*!< [24..24] Receive Frame Counter Overflow Flag */ - __IOM uint32_t RABT : 1; /*!< [25..25] Receive Abort Detect Flag */ - __IOM uint32_t TABT : 1; /*!< [26..26] Transmit Abort Detect Flag */ - uint32_t : 3; - __IOM uint32_t TWB : 1; /*!< [30..30] Write-Back Complete Flag */ - uint32_t : 1; - } EESR_b; + __OM uint32_t CENABLEFX : 1; /*!< [0..0] Framebuffer cache enable */ + __OM uint32_t CFLUSHFX : 1; /*!< [1..1] Flush framebuffer cache */ + __OM uint32_t CENABLETX : 1; /*!< [2..2] Texture cache enable */ + __OM uint32_t CFLUSHTX : 1; /*!< [3..3] Flush texture cache */ + uint32_t : 28; + } CACHECTL_b; }; - __IM uint32_t RESERVED5; union { - __IOM uint32_t EESIPR; /*!< (@ 0x00000030) ETHERC/EDMAC Status Interrupt Enable Register */ + __OM uint32_t DLISTSTART; /*!< (@ 0x000000C8) Display List Start Address Register */ struct { - __IOM uint32_t CERFIP : 1; /*!< [0..0] CRC Error Interrupt Request Enable */ - __IOM uint32_t PREIP : 1; /*!< [1..1] PHY-LSI Receive Error Interrupt Request Enable */ - __IOM uint32_t RTSFIP : 1; /*!< [2..2] Frame-Too-Short Error Interrupt Request Enable */ - __IOM uint32_t RTLFIP : 1; /*!< [3..3] Frame-Too-Long Error Interrupt Request Enable */ - __IOM uint32_t RRFIP : 1; /*!< [4..4] Alignment Error Interrupt Request Enable */ - uint32_t : 2; - __IOM uint32_t RMAFIP : 1; /*!< [7..7] Multicast Address Frame Receive Interrupt Request Enable */ - __IOM uint32_t TROIP : 1; /*!< [8..8] Transmit Retry Over Interrupt Request Enable */ - __IOM uint32_t CDIP : 1; /*!< [9..9] Late Collision Detect Interrupt Request Enable */ - __IOM uint32_t DLCIP : 1; /*!< [10..10] Loss of Carrier Detect Interrupt Request Enable */ - __IOM uint32_t CNDIP : 1; /*!< [11..11] Carrier Not Detect Interrupt Request Enable */ - uint32_t : 4; - __IOM uint32_t RFOFIP : 1; /*!< [16..16] Receive FIFO Overflow Interrupt Request Enable */ - __IOM uint32_t RDEIP : 1; /*!< [17..17] Receive Descriptor Empty Interrupt Request Enable */ - __IOM uint32_t FRIP : 1; /*!< [18..18] Frame Receive Interrupt Request Enable */ - __IOM uint32_t TFUFIP : 1; /*!< [19..19] Transmit FIFO Underflow Interrupt Request Enable */ - __IOM uint32_t TDEIP : 1; /*!< [20..20] Transmit Descriptor Empty Interrupt Request Enable */ - __IOM uint32_t TCIP : 1; /*!< [21..21] Frame Transfer Complete Interrupt Request Enable */ - __IOM uint32_t ECIIP : 1; /*!< [22..22] ETHERC Status Register Source Interrupt Request Enable */ - __IOM uint32_t ADEIP : 1; /*!< [23..23] Address Error Interrupt Request Enable */ - __IOM uint32_t RFCOFIP : 1; /*!< [24..24] Receive Frame Counter Overflow Interrupt Request Enable */ - __IOM uint32_t RABTIP : 1; /*!< [25..25] Receive Abort Detect Interrupt Request Enable */ - __IOM uint32_t TABTIP : 1; /*!< [26..26] Transmit Abort Detect Interrupt Request Enable */ - uint32_t : 3; - __IOM uint32_t TWBIP : 1; /*!< [30..30] Write-Back Complete Interrupt Request Enable */ - uint32_t : 1; - } EESIPR_b; + __OM uint32_t DLISTSTART : 32; /*!< [31..0] Display list start address */ + } DLISTSTART_b; }; - __IM uint32_t RESERVED6; union { - __IOM uint32_t TRSCER; /*!< (@ 0x00000038) ETHERC/EDMAC Transmit/Receive Status Copy Enable - * Register */ + __IOM uint32_t PERFCOUNT1; /*!< (@ 0x000000CC) Performance Counter 1 */ struct { - uint32_t : 4; - __IOM uint32_t RRFCE : 1; /*!< [4..4] RRF Flag Copy Enable */ - uint32_t : 2; - __IOM uint32_t RMAFCE : 1; /*!< [7..7] RMAF Flag Copy Enable */ - uint32_t : 24; - } TRSCER_b; + __IOM uint32_t PERFCOUNT : 32; /*!< [31..0] Counter value.The counter is reset by writing PERFCOUNT + * = 0000 0000H. */ + } PERFCOUNT1_b; }; - __IM uint32_t RESERVED7; union { - __IOM uint32_t RMFCR; /*!< (@ 0x00000040) Missed-Frame Counter Register */ + __IOM uint32_t PERFCOUNT2; /*!< (@ 0x000000D0) Performance Counter 2 */ struct { - __IOM uint32_t MFC : 16; /*!< [15..0] Missed-Frame CounterThese bits indicate the number of - * frames that are discarded and not transferred to the receive - * buffer during reception. */ - uint32_t : 16; - } RMFCR_b; + __IOM uint32_t PERFCOUNT : 32; /*!< [31..0] Counter value.The counter is reset by writing PERFCOUNT + * = 0000 0000H. */ + } PERFCOUNT2_b; }; - __IM uint32_t RESERVED8; union { - __IOM uint32_t TFTR; /*!< (@ 0x00000048) Transmit FIFO Threshold Register */ + __OM uint32_t PERFTRIGGER; /*!< (@ 0x000000D4) Performance Counters Control Register */ struct { - __IOM uint32_t TFT : 11; /*!< [10..0] Transmit FIFO Threshold00Dh to 200h: The threshold is - * the set value multiplied by 4. Example: 00Dh: 52 bytes - * 040h: 256 bytes 100h: 1024 bytes 200h: 2048 bytes */ - uint32_t : 21; - } TFTR_b; - }; - __IM uint32_t RESERVED9; - - union - { - __IOM uint32_t FDR; /*!< (@ 0x00000050) Transmit FIFO Threshold Register */ - - struct - { - __IOM uint32_t RFD : 5; /*!< [4..0] Transmit FIFO Depth */ - uint32_t : 3; - __IOM uint32_t TFD : 5; /*!< [12..8] Receive FIFO Depth */ - uint32_t : 19; - } FDR_b; + __OM uint32_t PERFTRIGGER1 : 16; /*!< [15..0] Selects the internal event that will increment PERFCOUNT1 + * register. */ + __OM uint32_t PERFTRIGGER2 : 16; /*!< [31..16] Selects the internal event that will increment PERFCOUNT2 + * register */ + } PERFTRIGGER_b; }; - __IM uint32_t RESERVED10; + __IM uint32_t RESERVED5; union { - __IOM uint32_t RMCR; /*!< (@ 0x00000058) Receive Method Control Register */ + __OM uint32_t TEXCLADDR; /*!< (@ 0x000000DC) CLUT Start Address Register */ struct { - __IOM uint32_t RNR : 1; /*!< [0..0] Receive Request Reset */ - uint32_t : 31; - } RMCR_b; + __OM uint32_t CLADDR : 8; /*!< [7..0] Texture CLUT start address for indexed texture format */ + uint32_t : 24; + } TEXCLADDR_b; }; - __IM uint32_t RESERVED11[2]; union { - __IOM uint32_t TFUCR; /*!< (@ 0x00000064) Transmit FIFO Underflow Counter */ + __OM uint32_t TEXCLDATA; /*!< (@ 0x000000E0) CLUT Data Register */ struct { - __IOM uint32_t UNDER : 16; /*!< [15..0] Transmit FIFO Underflow CountThese bits indicate how - * many times the transmit FIFO has underflowed. The counter - * stops when the counter value reaches FFFFh. */ - uint32_t : 16; - } TFUCR_b; + __OM uint32_t CLDATA : 32; /*!< [31..0] Texture CLUT data for Indexed texture format */ + } TEXCLDATA_b; }; union { - __IOM uint32_t RFOCR; /*!< (@ 0x00000068) Receive FIFO Overflow Counter */ + __OM uint32_t TEXCLOFFSET; /*!< (@ 0x000000E4) CLUT Offset Register */ struct { - __IOM uint32_t OVER : 16; /*!< [15..0] Receive FIFO Overflow CountThese bits indicate how many - * times the receive FIFO has overflowed. The counter stops - * when the counter value reaches FFFFh. */ - uint32_t : 16; - } RFOCR_b; + __OM uint32_t CLOFFSET : 8; /*!< [7..0] Texture CLUT offset for Indexed texture format. CLOFFSET[7:0] + * is or'ed with the original index */ + uint32_t : 24; + } TEXCLOFFSET_b; }; union { - __IOM uint32_t IOSR; /*!< (@ 0x0000006C) Independent Output Signal Setting Register */ + __OM uint32_t COLKEY; /*!< (@ 0x000000E8) Color Key Register */ struct { - __IOM uint32_t ELB : 1; /*!< [0..0] External Loopback Mode */ - uint32_t : 31; - } IOSR_b; + __OM uint32_t COLKEYB : 8; /*!< [7..0] Blue channel of color key */ + __OM uint32_t COLKEYG : 8; /*!< [15..8] Green channel of color key */ + __OM uint32_t COLKEYR : 8; /*!< [23..16] Red channel of color key */ + uint32_t : 8; + } COLKEY_b; }; +} R_DRW_Type; /*!< Size = 236 (0xec) */ - union - { - __IOM uint32_t FCFTR; /*!< (@ 0x00000070) Flow Control Start FIFO Threshold Setting Register */ +/* =========================================================================================================================== */ +/* ================ R_DTC ================ */ +/* =========================================================================================================================== */ - struct - { - __IOM uint32_t RFDO : 3; /*!< [2..0] Receive FIFO Data PAUSE Output Threshold(When (RFDO+1)x256-32 - * bytes of data is stored in the receive FIFO.) */ - uint32_t : 13; - __IOM uint32_t RFFO : 3; /*!< [18..16] Receive FIFO Frame PAUSE Output Threshold(When ((RFFO+1)x2) - * receive frames have been stored in the receive FIFO.) */ - uint32_t : 13; - } FCFTR_b; - }; - __IM uint32_t RESERVED12; +/** + * @brief Data Transfer Controller (R_DTC) + */ +typedef struct /*!< (@ 0x40005400) R_DTC Structure */ +{ union { - __IOM uint32_t RPADIR; /*!< (@ 0x00000078) Receive Data Padding Insert Register */ + __IOM uint8_t DTCCR; /*!< (@ 0x00000000) DTC Control Register */ struct { - __IOM uint32_t PADR : 6; /*!< [5..0] Padding Slot */ - uint32_t : 10; - __IOM uint32_t PADS : 2; /*!< [17..16] Padding Size */ - uint32_t : 14; - } RPADIR_b; + uint8_t : 4; + __IOM uint8_t RRS : 1; /*!< [4..4] DTC Transfer Information Read Skip Enable. */ + uint8_t : 3; + } DTCCR_b; }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; union { - __IOM uint32_t TRIMD; /*!< (@ 0x0000007C) Transmit Interrupt Setting Register */ + __IOM uint32_t DTCVBR; /*!< (@ 0x00000004) DTC Vector Base Register */ struct { - __IOM uint32_t TIS : 1; /*!< [0..0] Transmit Interrupt EnableSet the EESR.TWB flag to 1 in - * the mode selected by the TIM bit to notify an interrupt. */ - uint32_t : 3; - __IOM uint32_t TIM : 1; /*!< [4..4] Transmit Interrupt Mode */ - uint32_t : 27; - } TRIMD_b; + __IOM uint32_t DTCVBR : 32; /*!< [31..0] DTC Vector Base Address.Note: A value cannot be set + * in the lower-order 10 bits. These bits are fixed to 0. */ + } DTCVBR_b; }; - __IM uint32_t RESERVED13[18]; + __IM uint32_t RESERVED2; union { - __IOM uint32_t RBWAR; /*!< (@ 0x000000C8) Receive Buffer Write Address Register */ + __IOM uint8_t DTCST; /*!< (@ 0x0000000C) DTC Module Start Register */ struct { - __IM uint32_t RBWAR : 32; /*!< [31..0] Receive Buffer Write Address RegisterThe RBWAR register - * indicates the last address that the EDMAC has written data - * to when writing to the receive buffer.Refer to the address - * indicated by the RBWAR register to recognize which address - * in the receive buffer the EDMAC is writing data to. Note - * that the address that the EDMAC is outputting to the receive - * buffer may not match the read value of the RBWAR register - * during data reception. */ - } RBWAR_b; + __IOM uint8_t DTCST : 1; /*!< [0..0] DTC Module Start */ + uint8_t : 7; + } DTCST_b; }; + __IM uint8_t RESERVED3; union { - __IOM uint32_t RDFAR; /*!< (@ 0x000000CC) Receive Descriptor Fetch Address Register */ + __IM uint16_t DTCSTS; /*!< (@ 0x0000000E) DTC Status Register */ struct { - __IM uint32_t RDFAR : 32; /*!< [31..0] Receive Descriptor Fetch Address RegisterThe RDFAR register - * indicates the start address of the last fetched receive - * descriptor when the EDMAC fetches descriptor information - * from the receive descriptor.Refer to the address indicated - * by the RDFAR register to recognize which receive descriptor - * information the EDMAC is using for the current processing. - * Note that the address of the receive descriptor that the - * EDMAC fetches may not match the read value of the RDFAR - * register during data reception. */ - } RDFAR_b; + __IM uint16_t VECN : 8; /*!< [7..0] DTC-Activating Vector Number MonitoringThese bits indicate + * the vector number for the activating source when DTC transfer + * is in progress.The value is only valid if DTC transfer + * is in progress (the value of the ACT flag is 1) */ + uint16_t : 7; + __IM uint16_t ACT : 1; /*!< [15..15] DTC Active Flag */ + } DTCSTS_b; }; - __IM uint32_t RESERVED14; union { - __IOM uint32_t TBRAR; /*!< (@ 0x000000D4) Transmit Buffer Read Address Register */ + __IOM uint8_t DTCCR_SEC; /*!< (@ 0x00000010) DTC Control Register for secure Region */ struct { - __IM uint32_t TBRAR : 32; /*!< [31..0] Transmit Buffer Read Address RegisterThe TBRAR register - * indicates the last address that the EDMAC has read data - * from when reading data from the transmit buffer.Refer to - * the address indicated by the TBRAR register to recognize - * which address in the transmit buffer the EDMAC is reading - * from. Note that the address that the EDMAC is outputting - * to the transmit buffer may not match the read value of - * the TBRAR register. */ - } TBRAR_b; + uint8_t : 4; + __IOM uint8_t RRSS : 1; /*!< [4..4] DTC Transfer Information Read Skip Enable for Secure */ + uint8_t : 3; + } DTCCR_SEC_b; }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; + __IOM uint32_t DTCVBR_SEC; /*!< (@ 0x00000014) DTC Vector Base Register for secure Region */ + __IM uint32_t RESERVED6[2]; union { - __IM uint32_t TDFAR; /*!< (@ 0x000000D8) Transmit Descriptor Fetch Address Register */ + __IOM uint32_t DTEVR; /*!< (@ 0x00000020) DTC Error Vector Register */ struct { - __IM uint32_t TDFAR : 32; /*!< [31..0] Transmit Descriptor Fetch Address RegisterThe TDFAR - * register indicates the start address of the last fetched - * transmit descriptor when the EDMAC fetches descriptor information - * from the transmit descriptor.Refer to the address indicated - * by the TDFAR register to recognize which transmit descriptor - * information the EDMAC is using for the current processing. - * Note that the address of the transmit descriptor that the - * EDMAC fetches may not match the read value of the TDFAR - * register. */ - } TDFAR_b; + __IM uint32_t DTEV : 8; /*!< [7..0] DTC Error Vector Number */ + __IM uint32_t DTEVSAM : 1; /*!< [8..8] DTC Error Vector Number SA Monitor */ + uint32_t : 7; + __IOM uint32_t DTESTA : 1; /*!< [16..16] DTC Error Status Flag */ + uint32_t : 15; + } DTEVR_b; }; -} R_ETHERC_EDMAC_Type; /*!< Size = 220 (0xdc) */ +} R_DTC_Type; /*!< Size = 36 (0x24) */ /* =========================================================================================================================== */ -/* ================ R_ETHERC_EPTPC ================ */ +/* ================ R_ELC ================ */ /* =========================================================================================================================== */ /** - * @brief Ethernet PTP Controller (R_ETHERC_EPTPC) + * @brief Event Link Controller (R_ELC) */ -typedef struct /*!< (@ 0x40065800) R_ETHERC_EPTPC Structure */ +typedef struct /*!< (@ 0x40041000) R_ELC Structure */ { union { - __IOM uint32_t SYSR; /*!< (@ 0x00000000) SYNFP Status Register */ + __IOM uint8_t ELCR; /*!< (@ 0x00000000) Event Link Controller Register */ struct { - __IOM uint32_t OFMUD : 1; /*!< [0..0] offsetFromMaster Value Update Flag */ - __IOM uint32_t INTCHG : 1; /*!< [1..1] Receive logMessageInterval Value Change Detection Flag */ - __IOM uint32_t MPDUD : 1; /*!< [2..2] meanPathDelay Value Update Flag */ - uint32_t : 1; - __IOM uint32_t DRPTO : 1; /*!< [4..4] Delay_Resp/Pdelay_Resp Reception Timeout Detection Flag */ - __IOM uint32_t INTDEV : 1; /*!< [5..5] Receive logMessageInterval Value Out-of-Range Flag */ - __IOM uint32_t DRQOVR : 1; /*!< [6..6] Delay_Req Reception FIFO Overflow Detection Flag */ - uint32_t : 5; - __IOM uint32_t RECLP : 1; /*!< [12..12] Loop Reception Detection Flag */ - uint32_t : 1; - __IOM uint32_t INFABT : 1; /*!< [14..14] Control Information Abnormality Detection Flag */ - uint32_t : 1; - __IOM uint32_t RESDN : 1; /*!< [16..16] Response Stop Completion Detection Flag */ - __IOM uint32_t GENDN : 1; /*!< [17..17] Generation Stop Completion Detection Flag */ - uint32_t : 14; - } SYSR_b; + uint8_t : 7; + __IOM uint8_t ELCON : 1; /*!< [7..7] All Event Link Enable */ + } ELCR_b; }; + __IM uint8_t RESERVED; + __IOM R_ELC_ELSEGR_Type ELSEGR[2]; /*!< (@ 0x00000002) Event Link Software Event Generation Register */ + __IM uint16_t RESERVED1[5]; + __IOM R_ELC_ELSR_Type ELSR[23]; /*!< (@ 0x00000010) Event Link Setting Register [0..22] */ + __IM uint16_t RESERVED2[4]; union { - __IOM uint32_t SYIPR; /*!< (@ 0x00000004) SYNFP Status Notification Permission Register */ + __IOM uint16_t ELCSARA; /*!< (@ 0x00000074) Event Link Controller Security Attribution Register + * A */ struct { - __IOM uint32_t OFMUD : 1; /*!< [0..0] SYSR.OFMUD Status Notification Permission */ - __IOM uint32_t INTCHG : 1; /*!< [1..1] SYSR.INTCHG Status Notification Permission */ - __IOM uint32_t MPDUD : 1; /*!< [2..2] SYSR.MPDUD Status Notification Permission */ - uint32_t : 1; - __IOM uint32_t DRPTO : 1; /*!< [4..4] SYSR.DRPTO Status Notification Permission */ - __IOM uint32_t INTDEV : 1; /*!< [5..5] SYSR.INTDEV Status Notification Permission */ - __IOM uint32_t DRQOVR : 1; /*!< [6..6] SYSR.DRQOVR Status Notification Permission */ - uint32_t : 5; - __IOM uint32_t RECLP : 1; /*!< [12..12] SYSR.RECLP Status Notification Permission */ - uint32_t : 1; - __IOM uint32_t INFABT : 1; /*!< [14..14] SYSR.INFABT Status Notification Permission */ - uint32_t : 1; - __IOM uint32_t RESDN : 1; /*!< [16..16] SYSR.RESDN Status Notification Permission */ - __IOM uint32_t GENDN : 1; /*!< [17..17] SYSR.GENDN Status Notification Permission */ - uint32_t : 14; - } SYIPR_b; + __IOM uint16_t ELSEGR0 : 1; /*!< [0..0] Event Link Software Event Generation Register 0 Security + * Attribution */ + __IOM uint16_t ELSEGR1 : 1; /*!< [1..1] Event Link Software Event Generation Register 1Security + * Attribution */ + __IOM uint16_t ELCR : 1; /*!< [2..2] Event Link Controller RegisterSecurity Attribution */ + uint16_t : 13; + } ELCSARA_b; }; - __IM uint32_t RESERVED[2]; + __IM uint16_t RESERVED3; union { - __IOM uint32_t SYMACRU; /*!< (@ 0x00000010) SYNFP MAC Address Registers */ + __IOM uint16_t ELCSARB; /*!< (@ 0x00000078) Event Link Controller Security Attribution Register + * B */ struct { - __IOM uint32_t SYMACRU : 24; /*!< [23..0] These bits hold the setting for the higher-order 24 - * bits of the local MAC address. */ - uint32_t : 8; - } SYMACRU_b; + __IOM uint16_t ELSR0 : 1; /*!< [0..0] Event Link Setting Register 0Security Attribution */ + __IOM uint16_t ELSR1 : 1; /*!< [1..1] Event Link Setting Register 1Security Attribution */ + __IOM uint16_t ELSR2 : 1; /*!< [2..2] Event Link Setting Register 2Security Attribution */ + __IOM uint16_t ELSR3 : 1; /*!< [3..3] Event Link Setting Register 3Security Attribution */ + __IOM uint16_t ELSR4 : 1; /*!< [4..4] Event Link Setting Register 4Security Attribution */ + __IOM uint16_t ELSR5 : 1; /*!< [5..5] Event Link Setting Register 5Security Attribution */ + __IOM uint16_t ELSR6 : 1; /*!< [6..6] Event Link Setting Register 6Security Attribution */ + __IOM uint16_t ELSR7 : 1; /*!< [7..7] Event Link Setting Register 7Security Attribution */ + __IOM uint16_t ELSR8 : 1; /*!< [8..8] Event Link Setting Register 8Security Attribution */ + __IOM uint16_t ELSR9 : 1; /*!< [9..9] Event Link Setting Register 9Security Attribution */ + __IOM uint16_t ELSR10 : 1; /*!< [10..10] Event Link Setting Register 10Security Attribution */ + __IOM uint16_t ELSR11 : 1; /*!< [11..11] Event Link Setting Register 11Security Attribution */ + __IOM uint16_t ELSR12 : 1; /*!< [12..12] Event Link Setting Register 12Security Attribution */ + __IOM uint16_t ELSR13 : 1; /*!< [13..13] Event Link Setting Register 13Security Attribution */ + __IOM uint16_t ELSR14 : 1; /*!< [14..14] Event Link Setting Register 14Security Attribution */ + __IOM uint16_t ELSR15 : 1; /*!< [15..15] Event Link Setting Register 15Security Attribution */ + } ELCSARB_b; }; + __IM uint16_t RESERVED4; union { - __IOM uint32_t SYMACRL; /*!< (@ 0x00000014) SYNFP MAC Address Registers */ + __IOM uint16_t ELCSARC; /*!< (@ 0x0000007C) Event Link Controller Security Attribution Register + * C */ struct { - __IOM uint32_t SYMACRL : 24; /*!< [23..0] These bits hold the setting for the lower-order 24 bits - * of the local MAC address. */ - uint32_t : 8; - } SYMACRL_b; + __IOM uint16_t ELSR16 : 1; /*!< [0..0] Event Link Setting Register 16Security Attribution */ + __IOM uint16_t ELSR17 : 1; /*!< [1..1] Event Link Setting Register 17Security Attribution */ + __IOM uint16_t ELSR18 : 1; /*!< [2..2] Event Link Setting Register 18Security Attribution */ + uint16_t : 13; + } ELCSARC_b; }; +} R_ELC_Type; /*!< Size = 126 (0x7e) */ - union - { - __IOM uint32_t SYLLCCTLR; /*!< (@ 0x00000018) SYNFP LLC-CTL Value Register */ +/* =========================================================================================================================== */ +/* ================ R_ETHERC0 ================ */ +/* =========================================================================================================================== */ - struct - { - __IOM uint32_t CTL : 8; /*!< [7..0] LLC-CTL FieldThese bits specify the value used for the - * control field in the LLC sublayer when generating IEEE802.3 - * frames. */ - uint32_t : 24; - } SYLLCCTLR_b; - }; +/** + * @brief Ethernet MAC Controller (R_ETHERC0) + */ +typedef struct /*!< (@ 0x40064100) R_ETHERC0 Structure */ +{ union { - __IOM uint32_t SYIPADDRR; /*!< (@ 0x0000001C) SYNFP Local IP Address Register */ + __IOM uint32_t ECMR; /*!< (@ 0x00000000) ETHERC Mode Register */ struct { - __IOM uint32_t SYIPADDRR : 32; /*!< [31..0] These bits hold the setting for the local IP address. */ - } SYIPADDRR_b; - }; - __IM uint32_t RESERVED1[8]; - + __IOM uint32_t PRM : 1; /*!< [0..0] Promiscuous Mode */ + __IOM uint32_t DM : 1; /*!< [1..1] Duplex Mode */ + __IOM uint32_t RTM : 1; /*!< [2..2] Bit Rate */ + __IOM uint32_t ILB : 1; /*!< [3..3] Internal Loopback Mode */ + uint32_t : 1; + __IOM uint32_t TE : 1; /*!< [5..5] Transmission Enable */ + __IOM uint32_t RE : 1; /*!< [6..6] Reception Enable */ + uint32_t : 2; + __IOM uint32_t MPDE : 1; /*!< [9..9] Magic Packet Detection Enable */ + uint32_t : 2; + __IOM uint32_t PRCEF : 1; /*!< [12..12] CRC Error Frame Receive Mode */ + uint32_t : 3; + __IOM uint32_t TXF : 1; /*!< [16..16] Transmit Flow Control Operating Mode */ + __IOM uint32_t RXF : 1; /*!< [17..17] Receive Flow Control Operating Mode */ + __IOM uint32_t PFR : 1; /*!< [18..18] PAUSE Frame Receive Mode */ + __IOM uint32_t ZPF : 1; /*!< [19..19] 0 Time PAUSE Frame Enable */ + __IOM uint32_t TPC : 1; /*!< [20..20] PAUSE Frame Transmit */ + uint32_t : 11; + } ECMR_b; + }; + __IM uint32_t RESERVED; + union { - __IOM uint32_t SYSPVRR; /*!< (@ 0x00000040) SYNFP Specification Version Setting Register */ + __IOM uint32_t RFLR; /*!< (@ 0x00000008) Receive Frame Maximum Length Register */ struct { - __IOM uint32_t VER : 4; /*!< [3..0] versionPTP Field ValueThese bits are used to set the - * versionPTP field value of the PTP v2 header.When a message - * is received, this value is compared with the versionPTP - * field of the received frame.In generating messages, the - * value is used for the versionPTP field of the frame for - * transmission.Set these bits to 0010b (PTP v2). */ - __IOM uint32_t TRSP : 4; /*!< [7..4] transportSpecific Field ValueThese bits are used to set - * the transportSpecific field value of the PTP v2 header.When - * a message is received, this value is compared with the - * transportSpecific field of the received frame.In generating - * messages, the value is used for the transportSpecific field - * of the frame for transmission.Set these bits to 0000b (IEEE - * 1588). */ - uint32_t : 24; - } SYSPVRR_b; + __IOM uint32_t RFL : 12; /*!< [11..0] Receive Frame Maximum LengthThe set value becomes the + * maximum frame length. The minimum value that can be set + * is 1,518 bytes, and the maximum value that can be set is + * 2,048 bytes. Values that are less than 1,518 bytes are + * regarded as 1,518 bytes, and values larger than 2,048 bytes + * are regarded as 2,048 bytes. */ + uint32_t : 20; + } RFLR_b; }; + __IM uint32_t RESERVED1; union { - __IOM uint32_t SYDOMR; /*!< (@ 0x00000044) SYNFP Domain Number Setting Register */ + __IOM uint32_t ECSR; /*!< (@ 0x00000010) ETHERC Status Register */ struct { - __IOM uint32_t DNUM : 8; /*!< [7..0] domainNumber Field Value SettingThese bits are used to - * set the domainNumber field value of the PTP v2 header.When - * a message is received, this value is compared with the - * domainNumber field of the received frame as a condition - * for PTP reception processing.In generating messages, the - * value is used for the domainNumber field of the frame for - * transmission. */ - uint32_t : 24; - } SYDOMR_b; + __IOM uint32_t ICD : 1; /*!< [0..0] False Carrier Detect Flag */ + __IOM uint32_t MPD : 1; /*!< [1..1] Magic Packet Detect Flag */ + __IOM uint32_t LCHNG : 1; /*!< [2..2] LCHNG Link Signal Change Flag */ + uint32_t : 1; + __IOM uint32_t PSRTO : 1; /*!< [4..4] PAUSE Frame Retransmit Over Flag */ + __IOM uint32_t BFR : 1; /*!< [5..5] Continuous Broadcast Frame Reception Flag */ + uint32_t : 26; + } ECSR_b; }; - __IM uint32_t RESERVED2[2]; + __IM uint32_t RESERVED2; union { - __IOM uint32_t ANFR; /*!< (@ 0x00000050) Announce Message Flag Field Setting Register */ + __IOM uint32_t ECSIPR; /*!< (@ 0x00000018) ETHERC Interrupt Enable Register */ struct { - __IOM uint32_t FLAG0 : 1; /*!< [0..0] leap61This bit is used to set the logical value of the - * leap61 member of timePropertiesDS. */ - __IOM uint32_t FLAG1 : 1; /*!< [1..1] leap59This bit is used to set the logical value of the - * leap59 member of timePropertiesDS. */ - __IOM uint32_t FLAG2 : 1; /*!< [2..2] currentUtcOffsetValidThis bit is used to set the logical - * value of the currentUtcOffsetValid member of timePropertiesDS. */ - __IOM uint32_t FLAG3 : 1; /*!< [3..3] ptpTimescaleThis bit is used to set the logical value - * of the ptpTimescale member of timePropertiesDS. */ - __IOM uint32_t FLAG4 : 1; /*!< [4..4] timeTraceableThis bit is used to set the logical value - * of the timeTraceable member of timePropertiesDS. */ - __IOM uint32_t FLAG5 : 1; /*!< [5..5] frequencyTraceableThis bit is used to set the logical - * value of the frequencyTraceable member of timePropertiesDS. */ - uint32_t : 2; - __IOM uint32_t FLAG8 : 1; /*!< [8..8] alternateMasterFlag */ - uint32_t : 1; - __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ - uint32_t : 2; - __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ - __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ - uint32_t : 17; - } ANFR_b; + __IOM uint32_t ICDIP : 1; /*!< [0..0] False Carrier Detect Interrupt Enable */ + __IOM uint32_t MPDIP : 1; /*!< [1..1] Magic Packet Detect Interrupt Enable */ + __IOM uint32_t LCHNGIP : 1; /*!< [2..2] LINK Signal Change Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t PSRTOIP : 1; /*!< [4..4] PAUSE Frame Retransmit Over Interrupt Enable */ + __IOM uint32_t BFSIPR : 1; /*!< [5..5] Continuous Broadcast Frame Reception Interrupt Enable */ + uint32_t : 26; + } ECSIPR_b; }; + __IM uint32_t RESERVED3; union { - __IOM uint32_t SYNFR; /*!< (@ 0x00000054) Sync Message Flag Field Setting Register */ + __IOM uint32_t PIR; /*!< (@ 0x00000020) PHY Interface Register */ struct { - uint32_t : 8; - __IOM uint32_t FLAG8 : 1; /*!< [8..8] alternateMasterFlag */ - __IOM uint32_t FLAG9 : 1; /*!< [9..9] twoStepFlag */ - __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ - uint32_t : 2; - __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ - __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ - uint32_t : 17; - } SYNFR_b; + __IOM uint32_t MDC : 1; /*!< [0..0] MII/RMII Management Data ClockThe MDC bit value is output + * from the ETn_MDC pin to supply the management data clock + * to the MII or RMII. */ + __IOM uint32_t MMD : 1; /*!< [1..1] MII/RMII Management Mode */ + __IOM uint32_t MDO : 1; /*!< [2..2] MII/RMII Management Data-OutThe MDO bit value is output + * from the ETn_MDIO pin when the MMD bit is 1 (write). The + * value is not output when the MMD bit is 0 (read). */ + __IM uint32_t MDI : 1; /*!< [3..3] MII/RMII Management Data-InThis bit indicates the level + * of the ETn_MDIO pin. The write value should be 0. */ + uint32_t : 28; + } PIR_b; }; + __IM uint32_t RESERVED4; union { - __IOM uint32_t DYRQFR; /*!< (@ 0x00000058) Delay_Req Message Flag Field Setting Register */ + __IM uint32_t PSR; /*!< (@ 0x00000028) PHY Status Register */ struct { - uint32_t : 10; - __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ - uint32_t : 2; - __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ - __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ - uint32_t : 17; - } DYRQFR_b; + __IM uint32_t LMON : 1; /*!< [0..0] ETn_LINKSTA Pin Status FlagThe link status can be read + * by connecting the link signal output from the PHY-LSI to + * the ETn_LINKSTA pin. For details on the polarity, refer + * to the specifications of the connected PHY-LSI. */ + uint32_t : 31; + } PSR_b; }; + __IM uint32_t RESERVED5[5]; union { - __IOM uint32_t DYRPFR; /*!< (@ 0x0000005C) Delay_Resp Message Flag Field Setting Register */ + __IOM uint32_t RDMLR; /*!< (@ 0x00000040) Random Number Generation Counter Upper Limit + * Setting Register */ struct { - uint32_t : 8; - __IOM uint32_t FLAG8 : 1; /*!< [8..8] alternateMasterFlag */ - __IOM uint32_t FLAG9 : 1; /*!< [9..9] woStepFlag */ - __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ - uint32_t : 2; - __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ - __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ - uint32_t : 17; - } DYRPFR_b; + __IOM uint32_t RMD : 20; /*!< [19..0] Random Number Generation Counter */ + uint32_t : 12; + } RDMLR_b; }; + __IM uint32_t RESERVED6[3]; union { - __IOM uint32_t SYCIDRU; /*!< (@ 0x00000060) SYNFP Local Clock ID Registers */ + __IOM uint32_t IPGR; /*!< (@ 0x00000050) IPG Register */ struct { - __IOM uint32_t SYCIDRU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 - * bits of the clock-ID of your port. */ - } SYCIDRU_b; + __IOM uint32_t IPG : 5; /*!< [4..0] Interpacket Gap Range:"16bit time(0x00)"-"140bit time(0x1F)" */ + uint32_t : 27; + } IPGR_b; }; union { - __IOM uint32_t SYCIDRL; /*!< (@ 0x00000064) SYNFP Local Clock ID Registers */ + __IOM uint32_t APR; /*!< (@ 0x00000054) Automatic PAUSE Frame Register */ struct { - __IOM uint32_t SYCIDRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the clock-ID of your port. */ - } SYCIDRL_b; + __IOM uint32_t AP : 16; /*!< [15..0] Automatic PAUSE Time SettingThese bits set the value + * of the pause_time parameter for a PAUSE frame that is automatically + * transmitted. Transmission is not performed until the set + * value multiplied by 512 bit time has elapsed. */ + uint32_t : 16; + } APR_b; }; union { - __IOM uint32_t SYPNUMR; /*!< (@ 0x00000068) SYNFP Local Port Number Register */ + __OM uint32_t MPR; /*!< (@ 0x00000058) Manual PAUSE Frame Register */ struct { - __IOM uint32_t PNUM : 16; /*!< [15..0] Local Port Number SettingThese bits hold the setting - * for the port number of the local port. */ + __OM uint32_t MP : 16; /*!< [15..0] Manual PAUSE Time SettingThese bits set the value of + * the pause_time parameter for a PAUSE frame that is manually + * transmitted. Transmission is not performed until the set + * value multiplied by 512 bit time has elapsed. The read + * value is undefined. */ uint32_t : 16; - } SYPNUMR_b; + } MPR_b; }; - __IM uint32_t RESERVED3[5]; + __IM uint32_t RESERVED7; union { - __OM uint32_t SYRVLDR; /*!< (@ 0x00000080) SYNFP Register Value Load Directive Register */ + __IM uint32_t RFCF; /*!< (@ 0x00000060) Received PAUSE Frame Counter */ struct { - __OM uint32_t BMUP : 1; /*!< [0..0] BMC Update */ - __OM uint32_t STUP : 1; /*!< [1..1] State Update */ - __OM uint32_t ANUP : 1; /*!< [2..2] Announce Message Generation Information Update */ - uint32_t : 29; - } SYRVLDR_b; + __IM uint32_t RPAUSE : 8; /*!< [7..0] Received PAUSE Frame CountNumber of received PAUSE frames */ + uint32_t : 24; + } RFCF_b; }; - __IM uint32_t RESERVED4[3]; union { - __IOM uint32_t SYRFL1R; /*!< (@ 0x00000090) SYNFP Reception Filter Register 1 */ + __IOM uint32_t TPAUSER; /*!< (@ 0x00000064) PAUSE Frame Retransmit Count Setting Register */ struct { - __IOM uint32_t ANCE0 : 1; /*!< [0..0] Announce Message Processing */ - __IOM uint32_t ANCE1 : 1; /*!< [1..1] Announce Message Processing */ - uint32_t : 2; - __IOM uint32_t SYNC0 : 1; /*!< [4..4] Sync Message Processing */ - __IOM uint32_t SYNC1 : 1; /*!< [5..5] Sync Message Processing */ - __IOM uint32_t SYNC2 : 1; /*!< [6..6] Sync Message Processing */ - uint32_t : 1; - __IOM uint32_t FUP0 : 1; /*!< [8..8] Follow_Up Message Processing */ - __IOM uint32_t FUP1 : 1; /*!< [9..9] Follow_Up Message Processing */ - __IOM uint32_t FUP2 : 1; /*!< [10..10] Follow_Up Message Processing */ - uint32_t : 1; - __IOM uint32_t DRQ0 : 1; /*!< [12..12] Delay_Req Message Processing */ - __IOM uint32_t DRQ1 : 1; /*!< [13..13] Delay_Req Message Processing */ - __IOM uint32_t DRQ2 : 1; /*!< [14..14] Delay_Req Message Processing */ - uint32_t : 1; - __IOM uint32_t DRP0 : 1; /*!< [16..16] Delay_Resp Message Processing */ - __IOM uint32_t DRP1 : 1; /*!< [17..17] Delay_Resp Message Processing */ - __IOM uint32_t DRP2 : 1; /*!< [18..18] Delay_Resp Message Processing */ - uint32_t : 1; - __IOM uint32_t PDRQ0 : 1; /*!< [20..20] Pdelay_Req Message Processing */ - __IOM uint32_t PDRQ1 : 1; /*!< [21..21] Pdelay_Req Message Processing */ - __IOM uint32_t PDRQ2 : 1; /*!< [22..22] Pdelay_Req Message Processing */ - uint32_t : 1; - __IOM uint32_t PDRP0 : 1; /*!< [24..24] Pdelay_Resp Message Processing */ - __IOM uint32_t PDRP1 : 1; /*!< [25..25] Pdelay_Resp Message Processing */ - __IOM uint32_t PDRP2 : 1; /*!< [26..26] Pdelay_Resp Message Processing */ - uint32_t : 1; - __IOM uint32_t PDFUP0 : 1; /*!< [28..28] Pdelay_Resp_Follow_Up Message Processing */ - __IOM uint32_t PDFUP1 : 1; /*!< [29..29] Pdelay_Resp_Follow_Up Message Processing */ - __IOM uint32_t PDFUP2 : 1; /*!< [30..30] Pdelay_Resp_Follow_Up Message Processing */ - uint32_t : 1; - } SYRFL1R_b; + __IOM uint32_t TPAUSE : 16; /*!< [15..0] Automatic PAUSE Frame Retransmit Setting */ + uint32_t : 16; + } TPAUSER_b; }; + __IM uint32_t TPAUSECR; /*!< (@ 0x00000068) PAUSE Frame Retransmit Counter */ union { - __IOM uint32_t SYRFL2R; /*!< (@ 0x00000094) SYNFP Reception Filter Register 2 */ + __IOM uint32_t BCFRR; /*!< (@ 0x0000006C) Broadcast Frame Receive Count Setting Register */ struct { - __IOM uint32_t MAN0 : 1; /*!< [0..0] Management Message Processing Setting */ - __IOM uint32_t MAN1 : 1; /*!< [1..1] Management Message Processing Setting */ - uint32_t : 2; - __IOM uint32_t SIG0 : 1; /*!< [4..4] Signaling Message Processing Setting */ - __IOM uint32_t SIG1 : 1; /*!< [5..5] Signaling Message Processing Setting */ - uint32_t : 22; - __IOM uint32_t ILL0 : 1; /*!< [28..28] Illegal Message Processing Setting */ - __IOM uint32_t ILL1 : 1; /*!< [29..29] Illegal Message Processing Setting */ - uint32_t : 2; - } SYRFL2R_b; + __IOM uint32_t BCF : 16; /*!< [15..0] Broadcast Frame Continuous Receive Count Setting */ + uint32_t : 16; + } BCFRR_b; }; + __IM uint32_t RESERVED8[20]; union { - __IOM uint32_t SYTRENR; /*!< (@ 0x00000098) SYNFP Transmission Enable Register */ + __IOM uint32_t MAHR; /*!< (@ 0x000000C0) MAC Address Upper Bit Register */ struct { - __IOM uint32_t ANCE : 1; /*!< [0..0] Announce Message Transmission Enable */ - uint32_t : 3; - __IOM uint32_t SYNC : 1; /*!< [4..4] Sync Message Transmission Enable */ - uint32_t : 3; - __IOM uint32_t DRQ : 1; /*!< [8..8] Delay_Req Message Transmission Enable */ - uint32_t : 3; - __IOM uint32_t PDRQ : 1; /*!< [12..12] Pdelay_Req Message Transmission Enable */ - uint32_t : 19; - } SYTRENR_b; + __IOM uint32_t MAHR : 32; /*!< [31..0] MAC Address Upper Bit RegisterThe MAHR register sets + * the upper 32 bits (b47 to b16) of the 48-bit MAC address. */ + } MAHR_b; }; - __IM uint32_t RESERVED5; + __IM uint32_t RESERVED9; union { - __IOM uint32_t MTCIDU; /*!< (@ 0x000000A0) Master Clock ID Registers */ + __IOM uint32_t MALR; /*!< (@ 0x000000C8) MAC Address Lower Bit Register */ struct { - __IOM uint32_t MTCIDU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 - * bits of the clock-ID of the master clock. */ - } MTCIDU_b; + __IOM uint32_t MALR : 16; /*!< [15..0] MAC Address Lower Bit RegisterThe MALR register sets + * the lower 16 bits of the 48-bit MAC address. */ + uint32_t : 16; + } MALR_b; }; + __IM uint32_t RESERVED10; union { - __IOM uint32_t MTCIDL; /*!< (@ 0x000000A4) Master Clock ID Registers */ + __IOM uint32_t TROCR; /*!< (@ 0x000000D0) Transmit Retry Over Counter Register */ struct { - __IOM uint32_t MTCIDL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the clock-ID of the master clock. */ - } MTCIDL_b; + __IOM uint32_t TROCR : 32; /*!< [31..0] Transmit Retry Over Counter RegisterThe TROCR register + * is a counter indicating the number of frames that fail + * to be retransmitted. */ + } TROCR_b; }; + __IOM uint32_t CDCR; /*!< (@ 0x000000D4) Late Collision Detect Counter Register */ union { - __IOM uint32_t MTPID; /*!< (@ 0x000000A8) Master clock port number register */ + __IOM uint32_t LCCR; /*!< (@ 0x000000D8) Lost Carrier Counter Register */ struct { - __IOM uint32_t PNUM : 16; /*!< [15..0] Master Clock Port Number SettingThese bits hold the - * setting for the port number of the master clock. */ - uint32_t : 16; - } MTPID_b; + __IOM uint32_t LCCR : 32; /*!< [31..0] Lost Carrier Counter RegisterThe LCCR register is a + * counter indicating the number of times a loss of carrier + * is detected during frame transmission. */ + } LCCR_b; }; - __IM uint32_t RESERVED6[5]; union { - __IOM uint32_t SYTLIR; /*!< (@ 0x000000C0) SYNFP Transmission Interval Setting Register */ + __IOM uint32_t CNDCR; /*!< (@ 0x000000DC) Carrier Not Detect Counter Register */ struct { - __IOM uint32_t ANCE : 8; /*!< [7..0] Announce Message Transmission Interval SettingThese bits - * set the interval for the transmission of Announce messages. */ - __IOM uint32_t SYNC : 8; /*!< [15..8] Sync Message Transmission Interval SettingThese bits - * set the interval for the transmission of Sync messages. - * The setting is also placed in the logMessageInterval field - * of transmitted Sync messages. */ - __IOM uint32_t DREQ : 8; /*!< [23..16] Delay_Req Transmission Interval Average Value/ Pdelay_Req - * Transmission Interval SettingThe bits set the average interval - * for the transmission of Delay_Req messages and the interval - * for the transmission of Pdelay_Req messages.The setting - * is also placed in the logMessageInterval field of Delay_Resp - * messages. */ - uint32_t : 8; - } SYTLIR_b; + __IOM uint32_t CNDCR : 32; /*!< [31..0] Carrier Not Detect Counter RegisterThe CNDCR register + * is a counter indicating the number of times a carrier is + * not detected during preamble transmission. */ + } CNDCR_b; }; + __IM uint32_t RESERVED11; union { - __IM uint32_t SYRLIR; /*!< (@ 0x000000C4) SYNFP Received logMessageInterval Value Indication - * Register */ + __IOM uint32_t CEFCR; /*!< (@ 0x000000E4) CRC Error Frame Receive Counter Register */ struct { - __IM uint32_t ANCE : 8; /*!< [7..0] Announce Message logMessageInterval Field IndicationThese - * bits indicate the logMessageInterval field value of a received - * Announce message. */ - __IM uint32_t SYNC : 8; /*!< [15..8] Sync Message logMessageInterval Field IndicationThese - * bits indicate the logMessageInterval field value of a received - * Sync message. */ - __IM uint32_t DRESP : 8; /*!< [23..16] Delay_Resp Message logMessageInterval Field IndicationThese - * bits indicate the logMessageInterval field value of a received - * Delay_Resp message. */ - uint32_t : 8; - } SYRLIR_b; + __IOM uint32_t CEFCR : 32; /*!< [31..0] CRC Error Frame Receive Counter RegisterThe CEFCR register + * is a counter indicating the number of received frames where + * a CRC error has been detected. */ + } CEFCR_b; }; union { - __IM uint32_t OFMRU; /*!< (@ 0x000000C8) offsetFromMaster Value Registers */ + __IOM uint32_t FRECR; /*!< (@ 0x000000E8) Frame Receive Error Counter Register */ struct { - __IM uint32_t OFMRU : 32; /*!< [31..0] These bits indicate the higher-order 32 bits of the - * calculated offsetFromMaster value. */ - } OFMRU_b; + __IOM uint32_t FRECR : 32; /*!< [31..0] Frame Receive Error Counter RegisterThe FRECR register + * is a counter indicating the number of times a frame receive + * error has occurred. */ + } FRECR_b; }; union { - __IM uint32_t OFMRL; /*!< (@ 0x000000CC) offsetFromMaster Value Registers */ + __IOM uint32_t TSFRCR; /*!< (@ 0x000000EC) Too-Short Frame Receive Counter Register */ struct { - __IM uint32_t OFMRL : 32; /*!< [31..0] These bits indicate the lower-order 32 bits of the calculated - * offsetFromMaster value. */ - } OFMRL_b; + __IOM uint32_t TSFRCR : 32; /*!< [31..0] Too-Short Frame Receive Counter RegisterThe TSFRCR register + * is a counter indicating the number of times a short frame + * that is shorter than 64 bytes has been received. */ + } TSFRCR_b; }; union { - __IM uint32_t MPDRU; /*!< (@ 0x000000D0) meanPathDelay Value Registers */ + __IOM uint32_t TLFRCR; /*!< (@ 0x000000F0) Too-Long Frame Receive Counter Register */ struct { - __IM uint32_t MPDRU : 32; /*!< [31..0] These bits indicate the higher-order 32 bits of the - * calculated meanPathDelay value. */ - } MPDRU_b; + __IOM uint32_t TLFRCR : 32; /*!< [31..0] Too-Long Frame Receive Counter RegisterThe TLFRCR register + * is a counter indicating the number of times a long frame + * that is longer than the RFLR register value has been received. */ + } TLFRCR_b; }; union { - __IM uint32_t MPDRL; /*!< (@ 0x000000D4) meanPathDelay Value Registers */ + __IOM uint32_t RFCR; /*!< (@ 0x000000F4) Received Alignment Error Frame Counter Register */ struct { - __IM uint32_t MPDRL : 32; /*!< [31..0] These bits indicate the lower-order 32 bits of the calculated - * meanPathDelay value. */ - } MPDRL_b; + __IOM uint32_t RFCR : 32; /*!< [31..0] Received Alignment Error Frame Counter RegisterThe RFCR + * register is a counter indicating the number of times a + * frame has been received with the alignment error (frame + * is not an integral number of octets). */ + } RFCR_b; }; - __IM uint32_t RESERVED7[2]; union { - __IOM uint32_t GMPR; /*!< (@ 0x000000E0) grandmasterPriority Field Setting Register */ + __IOM uint32_t MAFCR; /*!< (@ 0x000000F8) Multicast Address Frame Receive Counter Register */ struct { - __IOM uint32_t GMPR2 : 8; /*!< [7..0] grandmasterPriority2 Field Value SettingThese bits are - * used to set the value of the grandmasterPriority2 fields - * of Announce messages. */ - uint32_t : 8; - __IOM uint32_t GMPR1 : 8; /*!< [23..16] grandmasterPriority1 Field Value SettingThese bits - * are used to set the value of the grandmasterPriority1 fields - * of Announce messages. */ - uint32_t : 8; - } GMPR_b; + __IOM uint32_t MAFCR : 32; /*!< [31..0] Multicast Address Frame Receive Counter RegisterThe + * MAFCR register is a counter indicating the number of times + * a frame where the multicast address is set has been received. */ + } MAFCR_b; }; +} R_ETHERC0_Type; /*!< Size = 252 (0xfc) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHERC_EDMAC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet DMA Controller (R_ETHERC_EDMAC) + */ +typedef struct /*!< (@ 0x40064000) R_ETHERC_EDMAC Structure */ +{ union { - __IOM uint32_t GMCQR; /*!< (@ 0x000000E4) grandmasterClockQuality Field Setting Register */ + __IOM uint32_t EDMR; /*!< (@ 0x00000000) EDMAC Mode Register */ struct { - __IOM uint32_t GMCQR : 32; /*!< [31..0] These bits are used to set the value of the grandmasterClockQuality - * fields of Announce messages. The correspondence between - * bits and the grandmasterClockQuality fields is as listed - * below.b31 to b24: clockClassb23 to b16: clockAccuracyb15 - * to b0: offsetScaledLogVariance */ - } GMCQR_b; + __OM uint32_t SWR : 1; /*!< [0..0] Software Reset */ + uint32_t : 3; + __IOM uint32_t DL : 2; /*!< [5..4] Transmit/Receive DescriptorLength */ + __IOM uint32_t DE : 1; /*!< [6..6] Big Endian Mode/Little Endian ModeNOTE: This setting + * applies to data for the transmit/receive buffer. It does + * not apply to transmit/receive descriptors and registers. */ + uint32_t : 25; + } EDMR_b; }; + __IM uint32_t RESERVED; union { - __IOM uint32_t GMIDRU; /*!< (@ 0x000000E8) grandmasterIdentity Field Setting Registers */ + __IOM uint32_t EDTRR; /*!< (@ 0x00000008) EDMAC Transmit Request Register */ struct { - __IOM uint32_t GMIDRU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 - * bits of the value of the grandmasterIdentity fields of - * Announce messages. */ - } GMIDRU_b; + __OM uint32_t TR : 1; /*!< [0..0] Transmit Request */ + uint32_t : 31; + } EDTRR_b; }; + __IM uint32_t RESERVED1; union { - __IOM uint32_t GMIDRL; /*!< (@ 0x000000EC) grandmasterIdentity Field Setting Registers */ + __IOM uint32_t EDRRR; /*!< (@ 0x00000010) EDMAC Receive Request Register */ struct { - __IOM uint32_t GMIDRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the value of the grandmasterIdentity fields of Announce - * messages. */ - } GMIDRL_b; + __IOM uint32_t RR : 1; /*!< [0..0] Receive Request */ + uint32_t : 31; + } EDRRR_b; }; + __IM uint32_t RESERVED2; union { - __IOM uint32_t CUOTSR; /*!< (@ 0x000000F0) currentUtcOffset/timeSource Field Setting Register */ + __IOM uint32_t TDLAR; /*!< (@ 0x00000018) Transmit Descriptor List Start Address Register */ struct { - __IOM uint32_t TSRC : 8; /*!< [7..0] timeSource Field SettingThese bits set the value of the - * timeSource fields of Announce messages. */ - uint32_t : 8; - __IOM uint32_t CUTO : 16; /*!< [31..16] currentUtcOffset Field SettingThese bits set the value - * of the currentUtcOffset fields of Announce messages. */ - } CUOTSR_b; + __IOM uint32_t TDLAR : 32; /*!< [31..0] The start address of the transmit descriptor list is + * set. Set the start address according to the descriptor + * length selected by the EDMR.DL[1:0] bits.16-byte boundary: + * Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte + * boundary: Lower 6 bits = 000000b */ + } TDLAR_b; }; + __IM uint32_t RESERVED3; union { - __IOM uint32_t SRR; /*!< (@ 0x000000F4) stepsRemoved Field Setting Register */ + __IOM uint32_t RDLAR; /*!< (@ 0x00000020) Receive Descriptor List Start Address Register */ struct { - __IOM uint32_t SRMV : 16; /*!< [15..0] stepsRemoved Field Value SettingThese bits set the value - * of the stepsRemoved fields of Announce messages. */ - uint32_t : 16; - } SRR_b; + __IOM uint32_t RDLAR : 32; /*!< [31..0] The start address of the receive descriptor list is + * set. Set the start address according to the descriptor + * length selected by the EDMR.DL[1:0] bits.16-byte boundary: + * Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte + * boundary: Lower 6 bits = 000000b */ + } RDLAR_b; }; - __IM uint32_t RESERVED8[2]; + __IM uint32_t RESERVED4; union { - __IOM uint32_t PPMACRU; /*!< (@ 0x00000100) PTP-primary Message Destination MAC Address Setting - * Registers */ + __IOM uint32_t EESR; /*!< (@ 0x00000028) ETHERC/EDMAC Status Register */ struct { - __IOM uint32_t PPMACRU : 24; /*!< [23..0] These bits hold the setting for the higher-order 24 - * bits of the destination MAC address for PTP-primary messages. */ - uint32_t : 8; - } PPMACRU_b; + __IOM uint32_t CERF : 1; /*!< [0..0] CRC Error Flag */ + __IOM uint32_t PRE : 1; /*!< [1..1] PHY-LSI Receive Error Flag */ + __IOM uint32_t RTSF : 1; /*!< [2..2] Frame-Too-Short Error Flag */ + __IOM uint32_t RTLF : 1; /*!< [3..3] Frame-Too-Long Error Flag */ + __IOM uint32_t RRF : 1; /*!< [4..4] Alignment Error Flag */ + uint32_t : 2; + __IOM uint32_t RMAF : 1; /*!< [7..7] Multicast Address Frame Receive Flag */ + __IOM uint32_t TRO : 1; /*!< [8..8] Transmit Retry Over Flag */ + __IOM uint32_t CD : 1; /*!< [9..9] Late Collision Detect Flag */ + __IOM uint32_t DLC : 1; /*!< [10..10] Loss of Carrier Detect Flag */ + __IOM uint32_t CND : 1; /*!< [11..11] Carrier Not Detect Flag */ + uint32_t : 4; + __IOM uint32_t RFOF : 1; /*!< [16..16] Receive FIFO Overflow Flag */ + __IOM uint32_t RDE : 1; /*!< [17..17] Receive Descriptor Empty Flag */ + __IOM uint32_t FR : 1; /*!< [18..18] Frame Receive Flag */ + __IOM uint32_t TFUF : 1; /*!< [19..19] Transmit FIFO Underflow Flag */ + __IOM uint32_t TDE : 1; /*!< [20..20] Transmit Descriptor Empty Flag */ + __IOM uint32_t TC : 1; /*!< [21..21] Frame Transfer Complete Flag */ + __IM uint32_t ECI : 1; /*!< [22..22] ETHERC Status Register Source FlagNOTE: When the source + * in the ETHERCn.ECSR register is cleared, the ECI flag is + * also cleared. */ + __IOM uint32_t ADE : 1; /*!< [23..23] Address Error Flag */ + __IOM uint32_t RFCOF : 1; /*!< [24..24] Receive Frame Counter Overflow Flag */ + __IOM uint32_t RABT : 1; /*!< [25..25] Receive Abort Detect Flag */ + __IOM uint32_t TABT : 1; /*!< [26..26] Transmit Abort Detect Flag */ + uint32_t : 3; + __IOM uint32_t TWB : 1; /*!< [30..30] Write-Back Complete Flag */ + uint32_t : 1; + } EESR_b; }; + __IM uint32_t RESERVED5; union { - __IOM uint32_t PPMACRL; /*!< (@ 0x00000104) PTP-primary Message Destination MAC Address Setting - * Registers */ + __IOM uint32_t EESIPR; /*!< (@ 0x00000030) ETHERC/EDMAC Status Interrupt Enable Register */ struct { - __IOM uint32_t PPMACRL : 24; /*!< [23..0] These bits hold the setting for the lower-order 24 bits - * of the destination MAC address for PTP-primary messages. */ - uint32_t : 8; - } PPMACRL_b; + __IOM uint32_t CERFIP : 1; /*!< [0..0] CRC Error Interrupt Request Enable */ + __IOM uint32_t PREIP : 1; /*!< [1..1] PHY-LSI Receive Error Interrupt Request Enable */ + __IOM uint32_t RTSFIP : 1; /*!< [2..2] Frame-Too-Short Error Interrupt Request Enable */ + __IOM uint32_t RTLFIP : 1; /*!< [3..3] Frame-Too-Long Error Interrupt Request Enable */ + __IOM uint32_t RRFIP : 1; /*!< [4..4] Alignment Error Interrupt Request Enable */ + uint32_t : 2; + __IOM uint32_t RMAFIP : 1; /*!< [7..7] Multicast Address Frame Receive Interrupt Request Enable */ + __IOM uint32_t TROIP : 1; /*!< [8..8] Transmit Retry Over Interrupt Request Enable */ + __IOM uint32_t CDIP : 1; /*!< [9..9] Late Collision Detect Interrupt Request Enable */ + __IOM uint32_t DLCIP : 1; /*!< [10..10] Loss of Carrier Detect Interrupt Request Enable */ + __IOM uint32_t CNDIP : 1; /*!< [11..11] Carrier Not Detect Interrupt Request Enable */ + uint32_t : 4; + __IOM uint32_t RFOFIP : 1; /*!< [16..16] Receive FIFO Overflow Interrupt Request Enable */ + __IOM uint32_t RDEIP : 1; /*!< [17..17] Receive Descriptor Empty Interrupt Request Enable */ + __IOM uint32_t FRIP : 1; /*!< [18..18] Frame Receive Interrupt Request Enable */ + __IOM uint32_t TFUFIP : 1; /*!< [19..19] Transmit FIFO Underflow Interrupt Request Enable */ + __IOM uint32_t TDEIP : 1; /*!< [20..20] Transmit Descriptor Empty Interrupt Request Enable */ + __IOM uint32_t TCIP : 1; /*!< [21..21] Frame Transfer Complete Interrupt Request Enable */ + __IOM uint32_t ECIIP : 1; /*!< [22..22] ETHERC Status Register Source Interrupt Request Enable */ + __IOM uint32_t ADEIP : 1; /*!< [23..23] Address Error Interrupt Request Enable */ + __IOM uint32_t RFCOFIP : 1; /*!< [24..24] Receive Frame Counter Overflow Interrupt Request Enable */ + __IOM uint32_t RABTIP : 1; /*!< [25..25] Receive Abort Detect Interrupt Request Enable */ + __IOM uint32_t TABTIP : 1; /*!< [26..26] Transmit Abort Detect Interrupt Request Enable */ + uint32_t : 3; + __IOM uint32_t TWBIP : 1; /*!< [30..30] Write-Back Complete Interrupt Request Enable */ + uint32_t : 1; + } EESIPR_b; }; + __IM uint32_t RESERVED6; union { - __IOM uint32_t PDMACRU; /*!< (@ 0x00000108) PTP-pdelay Message MAC Address Setting Registers */ + __IOM uint32_t TRSCER; /*!< (@ 0x00000038) ETHERC/EDMAC Transmit/Receive Status Copy Enable + * Register */ struct { - __IOM uint32_t PDMACRU : 24; /*!< [23..0] These bits hold the setting for the higher-order 24 - * bits of the destination MAC address for PTP-pdelay messages. */ - uint32_t : 8; - } PDMACRU_b; + uint32_t : 4; + __IOM uint32_t RRFCE : 1; /*!< [4..4] RRF Flag Copy Enable */ + uint32_t : 2; + __IOM uint32_t RMAFCE : 1; /*!< [7..7] RMAF Flag Copy Enable */ + uint32_t : 24; + } TRSCER_b; }; + __IM uint32_t RESERVED7; union { - __IOM uint32_t PDMACRL; /*!< (@ 0x0000010C) PTP-pdelay Message MAC Address Setting Registers */ + __IOM uint32_t RMFCR; /*!< (@ 0x00000040) Missed-Frame Counter Register */ struct { - __IOM uint32_t PDMACRL : 24; /*!< [23..0] These bits hold the setting for the lower-order 24 bits - * of the destination MAC address for PTP-pdelay messages. */ - uint32_t : 8; - } PDMACRL_b; + __IOM uint32_t MFC : 16; /*!< [15..0] Missed-Frame CounterThese bits indicate the number of + * frames that are discarded and not transferred to the receive + * buffer during reception. */ + uint32_t : 16; + } RMFCR_b; }; + __IM uint32_t RESERVED8; union { - __IOM uint32_t PETYPER; /*!< (@ 0x00000110) PTP Message EtherType Setting Register */ + __IOM uint32_t TFTR; /*!< (@ 0x00000048) Transmit FIFO Threshold Register */ struct { - __IOM uint32_t TYPE : 16; /*!< [15..0] PTP Message EtherType Value SettingThese bits hold the - * setting for the EtherType field value for frames in the - * Ethernet II format. */ - uint32_t : 16; - } PETYPER_b; + __IOM uint32_t TFT : 11; /*!< [10..0] Transmit FIFO Threshold00Dh to 200h: The threshold is + * the set value multiplied by 4. Example: 00Dh: 52 bytes + * 040h: 256 bytes 100h: 1024 bytes 200h: 2048 bytes */ + uint32_t : 21; + } TFTR_b; }; - __IM uint32_t RESERVED9[3]; + __IM uint32_t RESERVED9; union { - __IOM uint32_t PPIPR; /*!< (@ 0x00000120) PTP-primary Message Destination IP Address Setting - * Register */ + __IOM uint32_t FDR; /*!< (@ 0x00000050) Transmit FIFO Threshold Register */ struct { - __IOM uint32_t PPIPR : 32; /*!< [31..0] These bits hold the setting for the destination IP address - * for PTPprimary messages. */ - } PPIPR_b; + __IOM uint32_t RFD : 5; /*!< [4..0] Transmit FIFO Depth */ + uint32_t : 3; + __IOM uint32_t TFD : 5; /*!< [12..8] Receive FIFO Depth */ + uint32_t : 19; + } FDR_b; }; + __IM uint32_t RESERVED10; union { - __IOM uint32_t PDIPR; /*!< (@ 0x00000124) PTP-pdelay Message Destination IP Address Setting - * Register */ + __IOM uint32_t RMCR; /*!< (@ 0x00000058) Receive Method Control Register */ struct { - __IOM uint32_t PDIPR : 32; /*!< [31..0] These bits hold the setting for the destination IP address - * for PTPpdelay messages. */ - } PDIPR_b; + __IOM uint32_t RNR : 1; /*!< [0..0] Receive Request Reset */ + uint32_t : 31; + } RMCR_b; }; + __IM uint32_t RESERVED11[2]; union { - __IOM uint32_t PETOSR; /*!< (@ 0x00000128) PTP Event Message TOS Setting Register */ + __IOM uint32_t TFUCR; /*!< (@ 0x00000064) Transmit FIFO Underflow Counter */ struct { - __IOM uint32_t EVTO : 8; /*!< [7..0] PTP Event Message TOS Field Value SettingThese bits hold - * the setting for the value of the TOS field within the IPv4 - * headers of PTP event messages. */ - uint32_t : 24; - } PETOSR_b; + __IOM uint32_t UNDER : 16; /*!< [15..0] Transmit FIFO Underflow CountThese bits indicate how + * many times the transmit FIFO has underflowed. The counter + * stops when the counter value reaches FFFFh. */ + uint32_t : 16; + } TFUCR_b; }; union { - __IOM uint32_t PGTOSR; /*!< (@ 0x0000012C) PTP general Message TOS Setting Register */ + __IOM uint32_t RFOCR; /*!< (@ 0x00000068) Receive FIFO Overflow Counter */ struct { - __IOM uint32_t GETO : 8; /*!< [7..0] PTP general Message TOS Field Value SettingThese bits - * hold the setting for the value of the TOS field within - * the IPv4 headers of PTP general messages. */ - uint32_t : 24; - } PGTOSR_b; + __IOM uint32_t OVER : 16; /*!< [15..0] Receive FIFO Overflow CountThese bits indicate how many + * times the receive FIFO has overflowed. The counter stops + * when the counter value reaches FFFFh. */ + uint32_t : 16; + } RFOCR_b; }; union { - __IOM uint32_t PPTTLR; /*!< (@ 0x00000130) PTP-primary Message TTL Setting Register */ + __IOM uint32_t IOSR; /*!< (@ 0x0000006C) Independent Output Signal Setting Register */ struct { - __IOM uint32_t PRTL : 8; /*!< [7..0] PTP-primary Message TTL Field Value SettingThese bits - * hold the setting for the value of the TTL field within - * the IPv4 headers of PTP-primary messages. */ - uint32_t : 24; - } PPTTLR_b; + __IOM uint32_t ELB : 1; /*!< [0..0] External Loopback Mode */ + uint32_t : 31; + } IOSR_b; }; union { - __IOM uint32_t PDTTLR; /*!< (@ 0x00000134) PTP-pdelay Message TTL Setting Register */ + __IOM uint32_t FCFTR; /*!< (@ 0x00000070) Flow Control Start FIFO Threshold Setting Register */ struct { - __IOM uint32_t PDTL : 8; /*!< [7..0] PTP-pdelay Message TTL Field ValueThese bits hold the - * setting for the value of the TTL field within the IPv4 - * headers of PTP-pdelay messages. */ - uint32_t : 24; - } PDTTLR_b; + __IOM uint32_t RFDO : 3; /*!< [2..0] Receive FIFO Data PAUSE Output Threshold(When (RFDO+1)x256-32 + * bytes of data is stored in the receive FIFO.) */ + uint32_t : 13; + __IOM uint32_t RFFO : 3; /*!< [18..16] Receive FIFO Frame PAUSE Output Threshold(When ((RFFO+1)x2) + * receive frames have been stored in the receive FIFO.) */ + uint32_t : 13; + } FCFTR_b; }; + __IM uint32_t RESERVED12; union { - __IOM uint32_t PEUDPR; /*!< (@ 0x00000138) PTP Event Message UDP Destination Port Number - * Setting Register */ + __IOM uint32_t RPADIR; /*!< (@ 0x00000078) Receive Data Padding Insert Register */ struct { - __IOM uint32_t EVUPT : 16; /*!< [15..0] PTP Event Message Destination Port Number SettingThese - * bits hold the setting for the value of the destination - * port number field within the UDP headers of PTP event messages. */ - uint32_t : 16; - } PEUDPR_b; + __IOM uint32_t PADR : 6; /*!< [5..0] Padding Slot */ + uint32_t : 10; + __IOM uint32_t PADS : 2; /*!< [17..16] Padding Size */ + uint32_t : 14; + } RPADIR_b; }; union { - __IOM uint32_t PGUDPR; /*!< (@ 0x0000013C) PTP general Message UDP Destination Port Number - * Setting Register */ + __IOM uint32_t TRIMD; /*!< (@ 0x0000007C) Transmit Interrupt Setting Register */ struct { - __IOM uint32_t GEUPT : 16; /*!< [15..0] PTP general Message Destination Port NumberThese bits - * hold the setting for the value of the destination port - * number field within the UDP headers of PTP general messages. */ - uint32_t : 16; - } PGUDPR_b; + __IOM uint32_t TIS : 1; /*!< [0..0] Transmit Interrupt EnableSet the EESR.TWB flag to 1 in + * the mode selected by the TIM bit to notify an interrupt. */ + uint32_t : 3; + __IOM uint32_t TIM : 1; /*!< [4..4] Transmit Interrupt Mode */ + uint32_t : 27; + } TRIMD_b; }; + __IM uint32_t RESERVED13[18]; union { - __IOM uint32_t FFLTR; /*!< (@ 0x00000140) Frame Reception Filter Setting Register */ + __IOM uint32_t RBWAR; /*!< (@ 0x000000C8) Receive Buffer Write Address Register */ struct { - __IOM uint32_t SEL : 1; /*!< [0..0] Receive MAC Address SelectNOTE: The setting of these - * bits is only effective when EXTPRM=0, ENB=1and RPT=1. */ - __IOM uint32_t PRT : 1; /*!< [1..1] Frame Reception EnableNOTE: The setting of these bits - * is only effective when EXTPRM=0 and ENB=1. */ - __IOM uint32_t ENB : 1; /*!< [2..2] Reception Filter EnableNOTE: The setting of these bits - * is only effective when EXTPRM=0. */ - uint32_t : 13; - __IOM uint32_t EXTPRM : 1; /*!< [16..16] Extended Promiscuous ModeSetting */ - uint32_t : 15; - } FFLTR_b; + __IM uint32_t RBWAR : 32; /*!< [31..0] Receive Buffer Write Address RegisterThe RBWAR register + * indicates the last address that the EDMAC has written data + * to when writing to the receive buffer.Refer to the address + * indicated by the RBWAR register to recognize which address + * in the receive buffer the EDMAC is writing data to. Note + * that the address that the EDMAC is outputting to the receive + * buffer may not match the read value of the RBWAR register + * during data reception. */ + } RBWAR_b; }; - __IM uint32_t RESERVED10[31]; union { - __IOM uint32_t DASYMRU; /*!< (@ 0x000001C0) Asymmetric Delay Setting Registers */ + __IOM uint32_t RDFAR; /*!< (@ 0x000000CC) Receive Descriptor Fetch Address Register */ struct { - __IOM uint32_t DASYMRU : 16; /*!< [15..0] These bits hold the setting for the higher-order 16 - * bits of the asymmetric delay value. */ - uint32_t : 16; - } DASYMRU_b; + __IM uint32_t RDFAR : 32; /*!< [31..0] Receive Descriptor Fetch Address RegisterThe RDFAR register + * indicates the start address of the last fetched receive + * descriptor when the EDMAC fetches descriptor information + * from the receive descriptor.Refer to the address indicated + * by the RDFAR register to recognize which receive descriptor + * information the EDMAC is using for the current processing. + * Note that the address of the receive descriptor that the + * EDMAC fetches may not match the read value of the RDFAR + * register during data reception. */ + } RDFAR_b; }; + __IM uint32_t RESERVED14; union { - __IOM uint32_t DASYMRL; /*!< (@ 0x000001C4) Asymmetric Delay Setting Registers */ + __IOM uint32_t TBRAR; /*!< (@ 0x000000D4) Transmit Buffer Read Address Register */ struct { - __IOM uint32_t DASYMRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the asymmetric delay value. */ - } DASYMRL_b; + __IM uint32_t TBRAR : 32; /*!< [31..0] Transmit Buffer Read Address RegisterThe TBRAR register + * indicates the last address that the EDMAC has read data + * from when reading data from the transmit buffer.Refer to + * the address indicated by the TBRAR register to recognize + * which address in the transmit buffer the EDMAC is reading + * from. Note that the address that the EDMAC is outputting + * to the transmit buffer may not match the read value of + * the TBRAR register. */ + } TBRAR_b; }; union { - __IOM uint32_t TSLATR; /*!< (@ 0x000001C8) Timestamp Latency Setting Register */ + __IM uint32_t TDFAR; /*!< (@ 0x000000D8) Transmit Descriptor Fetch Address Register */ struct { - __IOM uint32_t EGP : 16; /*!< [15..0] Input Port Timestamp Latency SettingThese bits hold - * the setting for the time stamp latency (ns) for the input - * ports. */ - __IOM uint32_t INGP : 16; /*!< [31..16] Output Port Timestamp Latency SettingThese bits hold - * the setting for the time stamp latency (ns) for the output - * ports. */ - } TSLATR_b; + __IM uint32_t TDFAR : 32; /*!< [31..0] Transmit Descriptor Fetch Address RegisterThe TDFAR + * register indicates the start address of the last fetched + * transmit descriptor when the EDMAC fetches descriptor information + * from the transmit descriptor.Refer to the address indicated + * by the TDFAR register to recognize which transmit descriptor + * information the EDMAC is using for the current processing. + * Note that the address of the transmit descriptor that the + * EDMAC fetches may not match the read value of the TDFAR + * register. */ + } TDFAR_b; }; +} R_ETHERC_EDMAC_Type; /*!< Size = 220 (0xdc) */ +/* =========================================================================================================================== */ +/* ================ R_ETHERC_EPTPC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet PTP Controller (R_ETHERC_EPTPC) + */ + +typedef struct /*!< (@ 0x40065800) R_ETHERC_EPTPC Structure */ +{ union { - __IOM uint32_t SYCONFR; /*!< (@ 0x000001CC) SYNFP Operation Setting Register */ + __IOM uint32_t SYSR; /*!< (@ 0x00000000) SYNFP Status Register */ struct { - __IOM uint32_t TCYC : 8; /*!< [7..0] PTP Message Transmission Interval SettingThese bits are - * used to set the time from the completion of one transmission - * to the start of the next in cycles of the transmission - * clock. A value n in these bits means that a transmission - * interval of n cycles will be secured.No interval is secured - * if the setting is 00h.We recommend the setting 28h (40 - * cycles). */ - uint32_t : 4; - __IOM uint32_t SBDIS : 1; /*!< [12..12] Sync Message Transmission Bandwidth Securing Disable */ - uint32_t : 3; - __IOM uint32_t FILDIS : 1; /*!< [16..16] Receive Message domainNumber Filter Disable */ - uint32_t : 3; - __IOM uint32_t TCMOD : 1; /*!< [20..20] TC Mode Setting */ - uint32_t : 11; - } SYCONFR_b; + __IOM uint32_t OFMUD : 1; /*!< [0..0] offsetFromMaster Value Update Flag */ + __IOM uint32_t INTCHG : 1; /*!< [1..1] Receive logMessageInterval Value Change Detection Flag */ + __IOM uint32_t MPDUD : 1; /*!< [2..2] meanPathDelay Value Update Flag */ + uint32_t : 1; + __IOM uint32_t DRPTO : 1; /*!< [4..4] Delay_Resp/Pdelay_Resp Reception Timeout Detection Flag */ + __IOM uint32_t INTDEV : 1; /*!< [5..5] Receive logMessageInterval Value Out-of-Range Flag */ + __IOM uint32_t DRQOVR : 1; /*!< [6..6] Delay_Req Reception FIFO Overflow Detection Flag */ + uint32_t : 5; + __IOM uint32_t RECLP : 1; /*!< [12..12] Loop Reception Detection Flag */ + uint32_t : 1; + __IOM uint32_t INFABT : 1; /*!< [14..14] Control Information Abnormality Detection Flag */ + uint32_t : 1; + __IOM uint32_t RESDN : 1; /*!< [16..16] Response Stop Completion Detection Flag */ + __IOM uint32_t GENDN : 1; /*!< [17..17] Generation Stop Completion Detection Flag */ + uint32_t : 14; + } SYSR_b; }; union { - __IOM uint32_t SYFORMR; /*!< (@ 0x000001D0) SYNFP Frame Format Setting Register */ + __IOM uint32_t SYIPR; /*!< (@ 0x00000004) SYNFP Status Notification Permission Register */ struct { - __IOM uint32_t FORM0 : 1; /*!< [0..0] Ethernet/UDP Encapsulation */ - __IOM uint32_t FORM1 : 1; /*!< [1..1] Ethernet Frame Format Setting */ - uint32_t : 30; - } SYFORMR_b; + __IOM uint32_t OFMUD : 1; /*!< [0..0] SYSR.OFMUD Status Notification Permission */ + __IOM uint32_t INTCHG : 1; /*!< [1..1] SYSR.INTCHG Status Notification Permission */ + __IOM uint32_t MPDUD : 1; /*!< [2..2] SYSR.MPDUD Status Notification Permission */ + uint32_t : 1; + __IOM uint32_t DRPTO : 1; /*!< [4..4] SYSR.DRPTO Status Notification Permission */ + __IOM uint32_t INTDEV : 1; /*!< [5..5] SYSR.INTDEV Status Notification Permission */ + __IOM uint32_t DRQOVR : 1; /*!< [6..6] SYSR.DRQOVR Status Notification Permission */ + uint32_t : 5; + __IOM uint32_t RECLP : 1; /*!< [12..12] SYSR.RECLP Status Notification Permission */ + uint32_t : 1; + __IOM uint32_t INFABT : 1; /*!< [14..14] SYSR.INFABT Status Notification Permission */ + uint32_t : 1; + __IOM uint32_t RESDN : 1; /*!< [16..16] SYSR.RESDN Status Notification Permission */ + __IOM uint32_t GENDN : 1; /*!< [17..17] SYSR.GENDN Status Notification Permission */ + uint32_t : 14; + } SYIPR_b; }; + __IM uint32_t RESERVED[2]; union { - __IOM uint32_t RSTOUTR; /*!< (@ 0x000001D4) Response Message Reception Timeout Register */ + __IOM uint32_t SYMACRU; /*!< (@ 0x00000010) SYNFP MAC Address Registers */ struct { - __IOM uint32_t RSTOUTR : 32; /*!< [31..0] Response Message Reception Timeout Time SettingA response - * message not being received within n x 1024 (ns), where - * n is the setting, is judged to represent a timeout. */ - } RSTOUTR_b; + __IOM uint32_t SYMACRU : 24; /*!< [23..0] These bits hold the setting for the higher-order 24 + * bits of the local MAC address. */ + uint32_t : 8; + } SYMACRU_b; }; -} R_ETHERC_EPTPC_Type; /*!< Size = 472 (0x1d8) */ - -/* =========================================================================================================================== */ -/* ================ R_ETHERC_EPTPC_CFG ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Ethernet PTP Configuration (R_ETHERC_EPTPC_CFG) - */ -typedef struct /*!< (@ 0x40064500) R_ETHERC_EPTPC_CFG Structure */ -{ union { - __IOM uint32_t PTRSTR; /*!< (@ 0x00000000) EPTPC Reset Register */ + __IOM uint32_t SYMACRL; /*!< (@ 0x00000014) SYNFP MAC Address Registers */ struct { - __IOM uint32_t RESET : 1; /*!< [0..0] EPTPC Software Reset */ - uint32_t : 31; - } PTRSTR_b; + __IOM uint32_t SYMACRL : 24; /*!< [23..0] These bits hold the setting for the lower-order 24 bits + * of the local MAC address. */ + uint32_t : 8; + } SYMACRL_b; }; union { - __IOM uint32_t STCSELR; /*!< (@ 0x00000004) STCA Clock Select Register */ + __IOM uint32_t SYLLCCTLR; /*!< (@ 0x00000018) SYNFP LLC-CTL Value Register */ struct { - __IOM uint32_t SCLKDIV : 3; /*!< [2..0] PCLKA Clock Frequency Division */ - uint32_t : 5; - __IOM uint32_t SCLKSEL : 3; /*!< [10..8] STCA Clock Select */ - uint32_t : 21; - } STCSELR_b; + __IOM uint32_t CTL : 8; /*!< [7..0] LLC-CTL FieldThese bits specify the value used for the + * control field in the LLC sublayer when generating IEEE802.3 + * frames. */ + uint32_t : 24; + } SYLLCCTLR_b; }; union { - __IOM uint32_t BYPASS; /*!< (@ 0x00000008) Bypass 1588 module Register */ + __IOM uint32_t SYIPADDRR; /*!< (@ 0x0000001C) SYNFP Local IP Address Register */ struct { - __IOM uint32_t BYPASS0 : 1; /*!< [0..0] Bypass 1588 module for Ether 0ch */ - uint32_t : 15; - __IOM uint32_t BYPASS1 : 1; /*!< [16..16] Bypass 1588 module for Ether 1ch */ - uint32_t : 15; - } BYPASS_b; + __IOM uint32_t SYIPADDRR : 32; /*!< [31..0] These bits hold the setting for the local IP address. */ + } SYIPADDRR_b; }; -} R_ETHERC_EPTPC_CFG_Type; /*!< Size = 12 (0xc) */ + __IM uint32_t RESERVED1[8]; -/* =========================================================================================================================== */ -/* ================ R_ETHERC_EPTPC_COMMON ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint32_t SYSPVRR; /*!< (@ 0x00000040) SYNFP Specification Version Setting Register */ -/** - * @brief Ethernet PTP Controller Common (R_ETHERC_EPTPC_COMMON) - */ + struct + { + __IOM uint32_t VER : 4; /*!< [3..0] versionPTP Field ValueThese bits are used to set the + * versionPTP field value of the PTP v2 header.When a message + * is received, this value is compared with the versionPTP + * field of the received frame.In generating messages, the + * value is used for the versionPTP field of the frame for + * transmission.Set these bits to 0010b (PTP v2). */ + __IOM uint32_t TRSP : 4; /*!< [7..4] transportSpecific Field ValueThese bits are used to set + * the transportSpecific field value of the PTP v2 header.When + * a message is received, this value is compared with the + * transportSpecific field of the received frame.In generating + * messages, the value is used for the transportSpecific field + * of the frame for transmission.Set these bits to 0000b (IEEE + * 1588). */ + uint32_t : 24; + } SYSPVRR_b; + }; -typedef struct /*!< (@ 0x40065000) R_ETHERC_EPTPC_COMMON Structure */ -{ union { - __IOM uint32_t MIESR; /*!< (@ 0x00000000) MINT Interrupt Source Status Register */ + __IOM uint32_t SYDOMR; /*!< (@ 0x00000044) SYNFP Domain Number Setting Register */ struct { - __IM uint32_t ST : 1; /*!< [0..0] STCA Status Flag */ - __IM uint32_t SY0 : 1; /*!< [1..1] SYNFP0 Status Flag */ - __IM uint32_t SY1 : 1; /*!< [2..2] SYNFP1 Status Flag */ - __IM uint32_t PRC : 1; /*!< [3..3] PRC-TC Status Flag */ - uint32_t : 12; - __IOM uint32_t CYC0 : 1; /*!< [16..16] Pulse Output Timer 0 Rising Edge Detection Flag */ - __IOM uint32_t CYC1 : 1; /*!< [17..17] Pulse Output Timer 1 Rising Edge Detection Flag */ - __IOM uint32_t CYC2 : 1; /*!< [18..18] Pulse Output Timer 2 Rising Edge Detection Flag */ - __IOM uint32_t CYC3 : 1; /*!< [19..19] Pulse Output Timer 3 Rising Edge Detection Flag */ - __IOM uint32_t CYC4 : 1; /*!< [20..20] Pulse Output Timer 4 Rising Edge Detection Flag */ - __IOM uint32_t CYC5 : 1; /*!< [21..21] Pulse Output Timer 5 Rising Edge Detection Flag */ - uint32_t : 10; - } MIESR_b; + __IOM uint32_t DNUM : 8; /*!< [7..0] domainNumber Field Value SettingThese bits are used to + * set the domainNumber field value of the PTP v2 header.When + * a message is received, this value is compared with the + * domainNumber field of the received frame as a condition + * for PTP reception processing.In generating messages, the + * value is used for the domainNumber field of the frame for + * transmission. */ + uint32_t : 24; + } SYDOMR_b; }; + __IM uint32_t RESERVED2[2]; union { - __IOM uint32_t MIEIPR; /*!< (@ 0x00000004) MINT Interrupt Request Permission Register */ + __IOM uint32_t ANFR; /*!< (@ 0x00000050) Announce Message Flag Field Setting Register */ struct { - __IOM uint32_t ST : 1; /*!< [0..0] STCA Status Interrupt Request Permission */ - __IOM uint32_t SY0 : 1; /*!< [1..1] SYNFP0 Status Interrupt Request Permission */ - __IOM uint32_t SY1 : 1; /*!< [2..2] SYNFP1 Status Interrupt Request Permission */ - __IOM uint32_t PRC : 1; /*!< [3..3] PRC-TC Status Interrupt Request Permission */ - uint32_t : 12; - __IOM uint32_t CYC0 : 1; /*!< [16..16] Pulse Output Timer 0 Rising Edge Detection Interrupt - * Request Permission */ - __IOM uint32_t CYC1 : 1; /*!< [17..17] Pulse Output Timer 1 Rising Edge Detection Interrupt - * Request Permission */ - __IOM uint32_t CYC2 : 1; /*!< [18..18] Pulse Output Timer 2 Rising Edge Detection Interrupt - * Request Permission */ - __IOM uint32_t CYC3 : 1; /*!< [19..19] Pulse Output Timer 3 Rising Edge Detection Interrupt - * Request Permission */ - __IOM uint32_t CYC4 : 1; /*!< [20..20] Pulse Output Timer 4 Rising Edge Detection Interrupt - * Request Permission */ - __IOM uint32_t CYC5 : 1; /*!< [21..21] Pulse Output Timer 5 Rising Edge Detection Interrupt - * Request Permission */ - uint32_t : 10; - } MIEIPR_b; + __IOM uint32_t FLAG0 : 1; /*!< [0..0] leap61This bit is used to set the logical value of the + * leap61 member of timePropertiesDS. */ + __IOM uint32_t FLAG1 : 1; /*!< [1..1] leap59This bit is used to set the logical value of the + * leap59 member of timePropertiesDS. */ + __IOM uint32_t FLAG2 : 1; /*!< [2..2] currentUtcOffsetValidThis bit is used to set the logical + * value of the currentUtcOffsetValid member of timePropertiesDS. */ + __IOM uint32_t FLAG3 : 1; /*!< [3..3] ptpTimescaleThis bit is used to set the logical value + * of the ptpTimescale member of timePropertiesDS. */ + __IOM uint32_t FLAG4 : 1; /*!< [4..4] timeTraceableThis bit is used to set the logical value + * of the timeTraceable member of timePropertiesDS. */ + __IOM uint32_t FLAG5 : 1; /*!< [5..5] frequencyTraceableThis bit is used to set the logical + * value of the frequencyTraceable member of timePropertiesDS. */ + uint32_t : 2; + __IOM uint32_t FLAG8 : 1; /*!< [8..8] alternateMasterFlag */ + uint32_t : 1; + __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ + uint32_t : 2; + __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ + __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ + uint32_t : 17; + } ANFR_b; }; - __IM uint32_t RESERVED[2]; union { - __IOM uint32_t ELIPPR; /*!< (@ 0x00000010) ELC Output/ETHER_IPLS Interrupt Request Permission - * Register */ + __IOM uint32_t SYNFR; /*!< (@ 0x00000054) Sync Message Flag Field Setting Register */ struct { - __IOM uint32_t CYCP0 : 1; /*!< [0..0] Pulse Output Timer 0 Rising Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCP1 : 1; /*!< [1..1] Pulse Output Timer 1 Rising Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCP2 : 1; /*!< [2..2] Pulse Output Timer 2 Rising Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCP3 : 1; /*!< [3..3] Pulse Output Timer 3 Rising Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCP4 : 1; /*!< [4..4] Pulse Output Timer 4 Rising Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCP5 : 1; /*!< [5..5] Pulse Output Timer 5 Rising Edge Detection Event Output - * Enable */ - uint32_t : 2; - __IOM uint32_t CYCN0 : 1; /*!< [8..8] Pulse Output Timer 0 Falling Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCN1 : 1; /*!< [9..9] Pulse Output Timer 1 Falling Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCN2 : 1; /*!< [10..10] Pulse Output Timer 2 Falling Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCN3 : 1; /*!< [11..11] Pulse Output Timer 3 Falling Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCN4 : 1; /*!< [12..12] Pulse Output Timer 4 Falling Edge Detection Event Output - * Enable */ - __IOM uint32_t CYCN5 : 1; /*!< [13..13] Pulse Output Timer 5 Falling Edge Detection Event Output - * Enable */ - uint32_t : 2; - __IOM uint32_t PLSP : 1; /*!< [16..16] Pulse Output Timer Rising Edge Detection IPLS Interrupt - * Request Permission */ - uint32_t : 7; - __IOM uint32_t PLSN : 1; /*!< [24..24] Pulse Output Timer Falling Edge Detection IPLS Interrupt - * Request Permission */ - uint32_t : 7; - } ELIPPR_b; + uint32_t : 8; + __IOM uint32_t FLAG8 : 1; /*!< [8..8] alternateMasterFlag */ + __IOM uint32_t FLAG9 : 1; /*!< [9..9] twoStepFlag */ + __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ + uint32_t : 2; + __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ + __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ + uint32_t : 17; + } SYNFR_b; }; union { - __IOM uint32_t ELIPACR; /*!< (@ 0x00000014) ELC Output/IPLS Interrupt Permission Automatic - * Clearing Register */ + __IOM uint32_t DYRQFR; /*!< (@ 0x00000058) Delay_Req Message Flag Field Setting Register */ struct { - __IOM uint32_t CYCP0 : 1; /*!< [0..0] ELIPPR.CYCP0 Bit Automatic Clearing */ - __IOM uint32_t CYCP1 : 1; /*!< [1..1] ELIPPR.CYCP1 Bit Automatic Clearing */ - __IOM uint32_t CYCP2 : 1; /*!< [2..2] ELIPPR.CYCP2 Bit Automatic Clearing */ - __IOM uint32_t CYCP3 : 1; /*!< [3..3] ELIPPR.CYCP3 Bit Automatic Clearing */ - __IOM uint32_t CYCP4 : 1; /*!< [4..4] ELIPPR.CYCP4 Bit Automatic Clearing */ - __IOM uint32_t CYCP5 : 1; /*!< [5..5] ELIPPR.CYCP5 Bit Automatic Clearing */ - uint32_t : 2; - __IOM uint32_t CYCN0 : 1; /*!< [8..8] ELIPPR.CYCN0 Bit Automatic Clearing */ - __IOM uint32_t CYCN1 : 1; /*!< [9..9] ELIPPR.CYCN1 Bit Automatic Clearing */ - __IOM uint32_t CYCN2 : 1; /*!< [10..10] ELIPPR.CYCN2 Bit Automatic Clearing */ - __IOM uint32_t CYCN3 : 1; /*!< [11..11] ELIPPR.CYCN3 Bit Automatic Clearing */ - __IOM uint32_t CYCN4 : 1; /*!< [12..12] ELIPPR.CYCN4 Bit Automatic Clearing */ - __IOM uint32_t CYCN5 : 1; /*!< [13..13] ELIPPR.CYCN5 Bit Automatic Clearing */ - uint32_t : 2; - __IOM uint32_t PLSP : 1; /*!< [16..16] ELIPPR.PLSP Bit Automatic Clearing */ - uint32_t : 7; - __IOM uint32_t PLSN : 1; /*!< [24..24] ELIPPR.PLSN Bit Automatic Clearing */ - uint32_t : 7; - } ELIPACR_b; + uint32_t : 10; + __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ + uint32_t : 2; + __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ + __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ + uint32_t : 17; + } DYRQFR_b; }; - __IM uint32_t RESERVED1[10]; union { - __IOM uint32_t STSR; /*!< (@ 0x00000040) STCA Status Register */ + __IOM uint32_t DYRPFR; /*!< (@ 0x0000005C) Delay_Resp Message Flag Field Setting Register */ struct { - __IOM uint32_t SYNC : 1; /*!< [0..0] Synchronized State Detection Flag */ - __IOM uint32_t SYNCOUT : 1; /*!< [1..1] Synchronization Loss Detection Flag */ - uint32_t : 1; - __IOM uint32_t SYNTOUT : 1; /*!< [3..3] Sync Message Reception Timeout Detection Flag */ - __IOM uint32_t W10D : 1; /*!< [4..4] Worst 10 Acquisition Completion Flag */ - uint32_t : 27; - } STSR_b; + uint32_t : 8; + __IOM uint32_t FLAG8 : 1; /*!< [8..8] alternateMasterFlag */ + __IOM uint32_t FLAG9 : 1; /*!< [9..9] woStepFlag */ + __IOM uint32_t FLAG10 : 1; /*!< [10..10] unicastFlag */ + uint32_t : 2; + __IOM uint32_t FLAG13 : 1; /*!< [13..13] PTP profile Specific 1 */ + __IOM uint32_t FLAG14 : 1; /*!< [14..14] PTP profile Specific 2 */ + uint32_t : 17; + } DYRPFR_b; }; union { - __IOM uint32_t STIPR; /*!< (@ 0x00000044) STCA Status Notification Permission Register */ + __IOM uint32_t SYCIDRU; /*!< (@ 0x00000060) SYNFP Local Clock ID Registers */ struct { - __IOM uint32_t SYNC : 1; /*!< [0..0] SYNC Status Notification Enable */ - __IOM uint32_t SYNCOUT : 1; /*!< [1..1] SYNCOUT Status Notification Enable */ - uint32_t : 1; - __IOM uint32_t SYNTOUT : 1; /*!< [3..3] SYNTOUT Status Notification Enable */ - __IOM uint32_t W10D : 1; /*!< [4..4] W10D Status Notification Enable */ - uint32_t : 27; - } STIPR_b; + __IOM uint32_t SYCIDRU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 + * bits of the clock-ID of your port. */ + } SYCIDRU_b; }; - __IM uint32_t RESERVED2[2]; union { - __IOM uint32_t STCFR; /*!< (@ 0x00000050) STCA Clock Frequency Setting Register */ + __IOM uint32_t SYCIDRL; /*!< (@ 0x00000064) SYNFP Local Clock ID Registers */ struct { - __IOM uint32_t STCF : 2; /*!< [1..0] STCA Clock Frequency */ - uint32_t : 30; - } STCFR_b; + __IOM uint32_t SYCIDRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the clock-ID of your port. */ + } SYCIDRL_b; }; union { - __IOM uint32_t STMR; /*!< (@ 0x00000054) STCA Operating Mode Register */ + __IOM uint32_t SYPNUMR; /*!< (@ 0x00000068) SYNFP Local Port Number Register */ struct { - __IOM uint32_t WINT : 8; /*!< [7..0] Worst 10 Acquisition Time */ - uint32_t : 5; - __IOM uint32_t CMOD : 1; /*!< [13..13] Time Synchronization Correction Mode */ - uint32_t : 1; - __IOM uint32_t W10S : 1; /*!< [15..15] Worst 10 Acquisition Control Select */ - __IOM uint32_t SYTH : 4; /*!< [19..16] Synchronized State Detection Threshold Setting */ - __IOM uint32_t DVTH : 4; /*!< [23..20] Synchronization Loss Detection Threshold Setting */ - uint32_t : 4; - __IOM uint32_t ALEN0 : 1; /*!< [28..28] Alarm Detection Enable 0 */ - __IOM uint32_t ALEN1 : 1; /*!< [29..29] Alarm Detection Enable 1 */ - uint32_t : 2; - } STMR_b; + __IOM uint32_t PNUM : 16; /*!< [15..0] Local Port Number SettingThese bits hold the setting + * for the port number of the local port. */ + uint32_t : 16; + } SYPNUMR_b; }; + __IM uint32_t RESERVED3[5]; union { - __IOM uint32_t SYNTOR; /*!< (@ 0x00000058) Sync Message Reception Timeout Register */ + __OM uint32_t SYRVLDR; /*!< (@ 0x00000080) SYNFP Register Value Load Directive Register */ struct { - __IOM uint32_t SYNTOR : 32; /*!< [31..0] A Sync message not being received within 1024 x n (ns), - * where n is the setting, leads to a timeout for reception - * of Sync messages, leading to the STSR.SYNTOUT flag being - * set to 1. */ - } SYNTOR_b; + __OM uint32_t BMUP : 1; /*!< [0..0] BMC Update */ + __OM uint32_t STUP : 1; /*!< [1..1] State Update */ + __OM uint32_t ANUP : 1; /*!< [2..2] Announce Message Generation Information Update */ + uint32_t : 29; + } SYRVLDR_b; }; - __IM uint32_t RESERVED3; + __IM uint32_t RESERVED4[3]; union { - __IOM uint32_t IPTSELR; /*!< (@ 0x00000060) IPLS Interrupt Request Timer Select Register */ + __IOM uint32_t SYRFL1R; /*!< (@ 0x00000090) SYNFP Reception Filter Register 1 */ struct { - __IOM uint32_t IPTSEL0 : 1; /*!< [0..0] Pulse Output Timer 0 Select */ - __IOM uint32_t IPTSEL1 : 1; /*!< [1..1] Pulse Output Timer 1 Select */ - __IOM uint32_t IPTSEL2 : 1; /*!< [2..2] Pulse Output Timer 2 Select */ - __IOM uint32_t IPTSEL3 : 1; /*!< [3..3] Pulse Output Timer 3 Select */ - __IOM uint32_t IPTSEL4 : 1; /*!< [4..4] Pulse Output Timer 4 Select */ - __IOM uint32_t IPTSEL5 : 1; /*!< [5..5] Pulse Output Timer 5 Select */ - uint32_t : 26; - } IPTSELR_b; + __IOM uint32_t ANCE0 : 1; /*!< [0..0] Announce Message Processing */ + __IOM uint32_t ANCE1 : 1; /*!< [1..1] Announce Message Processing */ + uint32_t : 2; + __IOM uint32_t SYNC0 : 1; /*!< [4..4] Sync Message Processing */ + __IOM uint32_t SYNC1 : 1; /*!< [5..5] Sync Message Processing */ + __IOM uint32_t SYNC2 : 1; /*!< [6..6] Sync Message Processing */ + uint32_t : 1; + __IOM uint32_t FUP0 : 1; /*!< [8..8] Follow_Up Message Processing */ + __IOM uint32_t FUP1 : 1; /*!< [9..9] Follow_Up Message Processing */ + __IOM uint32_t FUP2 : 1; /*!< [10..10] Follow_Up Message Processing */ + uint32_t : 1; + __IOM uint32_t DRQ0 : 1; /*!< [12..12] Delay_Req Message Processing */ + __IOM uint32_t DRQ1 : 1; /*!< [13..13] Delay_Req Message Processing */ + __IOM uint32_t DRQ2 : 1; /*!< [14..14] Delay_Req Message Processing */ + uint32_t : 1; + __IOM uint32_t DRP0 : 1; /*!< [16..16] Delay_Resp Message Processing */ + __IOM uint32_t DRP1 : 1; /*!< [17..17] Delay_Resp Message Processing */ + __IOM uint32_t DRP2 : 1; /*!< [18..18] Delay_Resp Message Processing */ + uint32_t : 1; + __IOM uint32_t PDRQ0 : 1; /*!< [20..20] Pdelay_Req Message Processing */ + __IOM uint32_t PDRQ1 : 1; /*!< [21..21] Pdelay_Req Message Processing */ + __IOM uint32_t PDRQ2 : 1; /*!< [22..22] Pdelay_Req Message Processing */ + uint32_t : 1; + __IOM uint32_t PDRP0 : 1; /*!< [24..24] Pdelay_Resp Message Processing */ + __IOM uint32_t PDRP1 : 1; /*!< [25..25] Pdelay_Resp Message Processing */ + __IOM uint32_t PDRP2 : 1; /*!< [26..26] Pdelay_Resp Message Processing */ + uint32_t : 1; + __IOM uint32_t PDFUP0 : 1; /*!< [28..28] Pdelay_Resp_Follow_Up Message Processing */ + __IOM uint32_t PDFUP1 : 1; /*!< [29..29] Pdelay_Resp_Follow_Up Message Processing */ + __IOM uint32_t PDFUP2 : 1; /*!< [30..30] Pdelay_Resp_Follow_Up Message Processing */ + uint32_t : 1; + } SYRFL1R_b; }; union { - __IOM uint32_t MITSELR; /*!< (@ 0x00000064) MINT Interrupt Request Timer Select Register */ + __IOM uint32_t SYRFL2R; /*!< (@ 0x00000094) SYNFP Reception Filter Register 2 */ struct { - __IOM uint32_t MINTEN0 : 1; /*!< [0..0] Pulse Output Timer 0 MINT Interrupt Output Enable */ - __IOM uint32_t MINTEN1 : 1; /*!< [1..1] Pulse Output Timer 1 MINT Interrupt Output Enable */ - __IOM uint32_t MINTEN2 : 1; /*!< [2..2] Pulse Output Timer 2 MINT Interrupt Output Enable */ - __IOM uint32_t MINTEN3 : 1; /*!< [3..3] Pulse Output Timer 3 MINT Interrupt Output Enable */ - __IOM uint32_t MINTEN4 : 1; /*!< [4..4] Pulse Output Timer 4 MINT Interrupt Output Enable */ - __IOM uint32_t MINTEN5 : 1; /*!< [5..5] Pulse Output Timer 5 MINT Interrupt Output Enable */ - uint32_t : 26; - } MITSELR_b; + __IOM uint32_t MAN0 : 1; /*!< [0..0] Management Message Processing Setting */ + __IOM uint32_t MAN1 : 1; /*!< [1..1] Management Message Processing Setting */ + uint32_t : 2; + __IOM uint32_t SIG0 : 1; /*!< [4..4] Signaling Message Processing Setting */ + __IOM uint32_t SIG1 : 1; /*!< [5..5] Signaling Message Processing Setting */ + uint32_t : 22; + __IOM uint32_t ILL0 : 1; /*!< [28..28] Illegal Message Processing Setting */ + __IOM uint32_t ILL1 : 1; /*!< [29..29] Illegal Message Processing Setting */ + uint32_t : 2; + } SYRFL2R_b; }; union { - __IOM uint32_t ELTSELR; /*!< (@ 0x00000068) ELC Output Timer Select Register */ + __IOM uint32_t SYTRENR; /*!< (@ 0x00000098) SYNFP Transmission Enable Register */ struct { - __IOM uint32_t ELTDIS0 : 1; /*!< [0..0] Pulse Output Timer 0 Event Generation Disable */ - __IOM uint32_t ELTDIS1 : 1; /*!< [1..1] Pulse Output Timer 1 Event Generation Disable */ - __IOM uint32_t ELTDIS2 : 1; /*!< [2..2] Pulse Output Timer 2 Event Generation Disable */ - __IOM uint32_t ELTDIS3 : 1; /*!< [3..3] Pulse Output Timer 3 Event Generation Disable */ - __IOM uint32_t ELTDIS4 : 1; /*!< [4..4] Pulse Output Timer 4 Event Generation Disable */ - __IOM uint32_t ELTDIS5 : 1; /*!< [5..5] Pulse Output Timer 5 Event Generation Disable */ - uint32_t : 26; - } ELTSELR_b; + __IOM uint32_t ANCE : 1; /*!< [0..0] Announce Message Transmission Enable */ + uint32_t : 3; + __IOM uint32_t SYNC : 1; /*!< [4..4] Sync Message Transmission Enable */ + uint32_t : 3; + __IOM uint32_t DRQ : 1; /*!< [8..8] Delay_Req Message Transmission Enable */ + uint32_t : 3; + __IOM uint32_t PDRQ : 1; /*!< [12..12] Pdelay_Req Message Transmission Enable */ + uint32_t : 19; + } SYTRENR_b; }; + __IM uint32_t RESERVED5; union { - __IOM uint32_t STCHSELR; /*!< (@ 0x0000006C) Time Synchronization Channel Select Register */ + __IOM uint32_t MTCIDU; /*!< (@ 0x000000A0) Master Clock ID Registers */ struct { - __IOM uint32_t SYSEL : 1; /*!< [0..0] Timer Information Input SelectNOTE: Do not change the - * value of this bit while the SYNSTARTR.STR bit is 1. */ - uint32_t : 31; - } STCHSELR_b; + __IOM uint32_t MTCIDU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 + * bits of the clock-ID of the master clock. */ + } MTCIDU_b; }; - __IM uint32_t RESERVED4[4]; union { - __IOM uint32_t SYNSTARTR; /*!< (@ 0x00000080) Slave Time Synchronization Start Register */ + __IOM uint32_t MTCIDL; /*!< (@ 0x000000A4) Master Clock ID Registers */ struct { - __IOM uint32_t STR : 1; /*!< [0..0] Slave Time Synchronization Control */ - uint32_t : 31; - } SYNSTARTR_b; + __IOM uint32_t MTCIDL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the clock-ID of the master clock. */ + } MTCIDL_b; }; union { - __OM uint32_t LCIVLDR; /*!< (@ 0x00000084) Local Time Counter Initial Value Load Directive - * Register */ + __IOM uint32_t MTPID; /*!< (@ 0x000000A8) Master clock port number register */ struct { - __OM uint32_t LOAD : 1; /*!< [0..0] Local Time Counter Initial Value Load Directive */ - uint32_t : 31; - } LCIVLDR_b; + __IOM uint32_t PNUM : 16; /*!< [15..0] Master Clock Port Number SettingThese bits hold the + * setting for the port number of the master clock. */ + uint32_t : 16; + } MTPID_b; }; - __IM uint32_t RESERVED5[2]; + __IM uint32_t RESERVED6[5]; union { - __IOM uint32_t SYNTDARU; /*!< (@ 0x00000090) Synchronization Loss Detection Threshold Registers */ + __IOM uint32_t SYTLIR; /*!< (@ 0x000000C0) SYNFP Transmission Interval Setting Register */ struct { - __IOM uint32_t SYNTDARU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 - * bits of the threshold for detection of loss of synchronization. */ - } SYNTDARU_b; + __IOM uint32_t ANCE : 8; /*!< [7..0] Announce Message Transmission Interval SettingThese bits + * set the interval for the transmission of Announce messages. */ + __IOM uint32_t SYNC : 8; /*!< [15..8] Sync Message Transmission Interval SettingThese bits + * set the interval for the transmission of Sync messages. + * The setting is also placed in the logMessageInterval field + * of transmitted Sync messages. */ + __IOM uint32_t DREQ : 8; /*!< [23..16] Delay_Req Transmission Interval Average Value/ Pdelay_Req + * Transmission Interval SettingThe bits set the average interval + * for the transmission of Delay_Req messages and the interval + * for the transmission of Pdelay_Req messages.The setting + * is also placed in the logMessageInterval field of Delay_Resp + * messages. */ + uint32_t : 8; + } SYTLIR_b; }; union { - __IOM uint32_t SYNTDARL; /*!< (@ 0x00000094) Synchronization Loss Detection Threshold Registers */ + __IM uint32_t SYRLIR; /*!< (@ 0x000000C4) SYNFP Received logMessageInterval Value Indication + * Register */ struct { - __IOM uint32_t SYNTDARL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the threshold for detection of loss of synchronization. */ - } SYNTDARL_b; + __IM uint32_t ANCE : 8; /*!< [7..0] Announce Message logMessageInterval Field IndicationThese + * bits indicate the logMessageInterval field value of a received + * Announce message. */ + __IM uint32_t SYNC : 8; /*!< [15..8] Sync Message logMessageInterval Field IndicationThese + * bits indicate the logMessageInterval field value of a received + * Sync message. */ + __IM uint32_t DRESP : 8; /*!< [23..16] Delay_Resp Message logMessageInterval Field IndicationThese + * bits indicate the logMessageInterval field value of a received + * Delay_Resp message. */ + uint32_t : 8; + } SYRLIR_b; }; union { - __IOM uint32_t SYNTDBRU; /*!< (@ 0x00000098) Synchronization Detection Threshold Registers */ + __IM uint32_t OFMRU; /*!< (@ 0x000000C8) offsetFromMaster Value Registers */ struct { - __IOM uint32_t SYNTDBRU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 - * bits of the threshold for detection of synchronization. */ - } SYNTDBRU_b; + __IM uint32_t OFMRU : 32; /*!< [31..0] These bits indicate the higher-order 32 bits of the + * calculated offsetFromMaster value. */ + } OFMRU_b; }; union { - __IOM uint32_t SYNTDBRL; /*!< (@ 0x0000009C) Synchronization Detection Threshold Registers */ + __IM uint32_t OFMRL; /*!< (@ 0x000000CC) offsetFromMaster Value Registers */ struct { - __IOM uint32_t SYNTDBRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the threshold for detection of synchronization. */ - } SYNTDBRL_b; + __IM uint32_t OFMRL : 32; /*!< [31..0] These bits indicate the lower-order 32 bits of the calculated + * offsetFromMaster value. */ + } OFMRL_b; }; - __IM uint32_t RESERVED6[4]; union { - __IOM uint32_t LCIVRU; /*!< (@ 0x000000B0) Local Time Counter Initial Value Registers */ + __IM uint32_t MPDRU; /*!< (@ 0x000000D0) meanPathDelay Value Registers */ struct { - __IOM uint32_t LCIVRU : 16; /*!< [15..0] These bits hold the setting for the higher-order 16 - * bits of the integer portion of the initial value for the - * local timer counter. */ - uint32_t : 16; - } LCIVRU_b; + __IM uint32_t MPDRU : 32; /*!< [31..0] These bits indicate the higher-order 32 bits of the + * calculated meanPathDelay value. */ + } MPDRU_b; }; union { - __IOM uint32_t LCIVRM; /*!< (@ 0x000000B4) Local Time Counter Initial Value Registers */ + __IM uint32_t MPDRL; /*!< (@ 0x000000D4) meanPathDelay Value Registers */ struct { - __IOM uint32_t LCIVRM : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the integer portion of the initial value for the local - * timer counter. */ - } LCIVRM_b; + __IM uint32_t MPDRL : 32; /*!< [31..0] These bits indicate the lower-order 32 bits of the calculated + * meanPathDelay value. */ + } MPDRL_b; }; + __IM uint32_t RESERVED7[2]; union { - __IOM uint32_t LCIVRL; /*!< (@ 0x000000B8) Local Time Counter Initial Value Registers */ + __IOM uint32_t GMPR; /*!< (@ 0x000000E0) grandmasterPriority Field Setting Register */ struct { - __IOM uint32_t LCIVRL : 32; /*!< [31..0] These bits hold the setting for the fractional portion - * of the initial value of the local timer counter in nanoseconds. */ - } LCIVRL_b; + __IOM uint32_t GMPR2 : 8; /*!< [7..0] grandmasterPriority2 Field Value SettingThese bits are + * used to set the value of the grandmasterPriority2 fields + * of Announce messages. */ + uint32_t : 8; + __IOM uint32_t GMPR1 : 8; /*!< [23..16] grandmasterPriority1 Field Value SettingThese bits + * are used to set the value of the grandmasterPriority1 fields + * of Announce messages. */ + uint32_t : 8; + } GMPR_b; }; - __IM uint32_t RESERVED7[26]; union { - __IOM uint32_t GETW10R; /*!< (@ 0x00000124) Worst 10 Acquisition Directive Register */ + __IOM uint32_t GMCQR; /*!< (@ 0x000000E4) grandmasterClockQuality Field Setting Register */ struct { - __IOM uint32_t GW10 : 1; /*!< [0..0] Worst 10 Acquisition Directive */ - uint32_t : 31; - } GETW10R_b; + __IOM uint32_t GMCQR : 32; /*!< [31..0] These bits are used to set the value of the grandmasterClockQuality + * fields of Announce messages. The correspondence between + * bits and the grandmasterClockQuality fields is as listed + * below.b31 to b24: clockClassb23 to b16: clockAccuracyb15 + * to b0: offsetScaledLogVariance */ + } GMCQR_b; }; union { - __IOM uint32_t PLIMITRU; /*!< (@ 0x00000128) Positive Gradient Limit Registers */ + __IOM uint32_t GMIDRU; /*!< (@ 0x000000E8) grandmasterIdentity Field Setting Registers */ struct { - __IOM uint32_t PLIMITRU : 31; /*!< [30..0] These bits hold the setting for the higher-order 31 - * bits of the limit for the positive gradient. */ - uint32_t : 1; - } PLIMITRU_b; + __IOM uint32_t GMIDRU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 + * bits of the value of the grandmasterIdentity fields of + * Announce messages. */ + } GMIDRU_b; }; union { - __IOM uint32_t PLIMITRM; /*!< (@ 0x0000012C) Positive Gradient Limit Registers */ + __IOM uint32_t GMIDRL; /*!< (@ 0x000000EC) grandmasterIdentity Field Setting Registers */ struct { - __IOM uint32_t PLIMITRM : 32; /*!< [31..0] These bits hold the setting for the middle-order 32 - * bits of the limit for the positive gradient. */ - } PLIMITRM_b; + __IOM uint32_t GMIDRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the value of the grandmasterIdentity fields of Announce + * messages. */ + } GMIDRL_b; }; union { - __IOM uint32_t PLIMITRL; /*!< (@ 0x00000130) Positive Gradient Limit Registers */ + __IOM uint32_t CUOTSR; /*!< (@ 0x000000F0) currentUtcOffset/timeSource Field Setting Register */ struct { - __IOM uint32_t PLIMITRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the limit for the positive gradient. */ - } PLIMITRL_b; + __IOM uint32_t TSRC : 8; /*!< [7..0] timeSource Field SettingThese bits set the value of the + * timeSource fields of Announce messages. */ + uint32_t : 8; + __IOM uint32_t CUTO : 16; /*!< [31..16] currentUtcOffset Field SettingThese bits set the value + * of the currentUtcOffset fields of Announce messages. */ + } CUOTSR_b; }; union { - __IOM uint32_t MLIMITRU; /*!< (@ 0x00000134) Negative Gradient Limit Registers */ + __IOM uint32_t SRR; /*!< (@ 0x000000F4) stepsRemoved Field Setting Register */ struct { - __IOM uint32_t MLIMITRU : 31; /*!< [30..0] These bits hold the setting for the higher-order 31 - * bits of the limit for the negative gradient. */ - uint32_t : 1; - } MLIMITRU_b; + __IOM uint32_t SRMV : 16; /*!< [15..0] stepsRemoved Field Value SettingThese bits set the value + * of the stepsRemoved fields of Announce messages. */ + uint32_t : 16; + } SRR_b; }; + __IM uint32_t RESERVED8[2]; union { - __IOM uint32_t MLIMITRM; /*!< (@ 0x00000138) Negative Gradient Limit Registers */ + __IOM uint32_t PPMACRU; /*!< (@ 0x00000100) PTP-primary Message Destination MAC Address Setting + * Registers */ struct { - __IOM uint32_t MLIMITRM : 32; /*!< [31..0] These bits hold the setting for the middle-order 32 - * bits of the limit for the negative gradient. */ - } MLIMITRM_b; + __IOM uint32_t PPMACRU : 24; /*!< [23..0] These bits hold the setting for the higher-order 24 + * bits of the destination MAC address for PTP-primary messages. */ + uint32_t : 8; + } PPMACRU_b; }; union { - __IOM uint32_t MLIMITRL; /*!< (@ 0x0000013C) Negative Gradient Limit Registers */ + __IOM uint32_t PPMACRL; /*!< (@ 0x00000104) PTP-primary Message Destination MAC Address Setting + * Registers */ struct { - __IOM uint32_t MLIMITRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits - * of the limit for the negative gradient. */ - } MLIMITRL_b; + __IOM uint32_t PPMACRL : 24; /*!< [23..0] These bits hold the setting for the lower-order 24 bits + * of the destination MAC address for PTP-primary messages. */ + uint32_t : 8; + } PPMACRL_b; }; union { - __IOM uint32_t GETINFOR; /*!< (@ 0x00000140) Statistical Information Retention Control Register */ + __IOM uint32_t PDMACRU; /*!< (@ 0x00000108) PTP-pdelay Message MAC Address Setting Registers */ struct { - __IOM uint32_t INFO : 1; /*!< [0..0] Information Retention ControlNOTE: Once information fetching - * is directed, values of various statistical information - * read before completion of information fetching are not - * guaranteed. */ - uint32_t : 31; - } GETINFOR_b; + __IOM uint32_t PDMACRU : 24; /*!< [23..0] These bits hold the setting for the higher-order 24 + * bits of the destination MAC address for PTP-pdelay messages. */ + uint32_t : 8; + } PDMACRU_b; }; - __IM uint32_t RESERVED8[11]; union { - __IM uint32_t LCCVRU; /*!< (@ 0x00000170) Local Time Counters */ + __IOM uint32_t PDMACRL; /*!< (@ 0x0000010C) PTP-pdelay Message MAC Address Setting Registers */ struct { - __IM uint32_t LCCVRU : 16; /*!< [15..0] These bits are for reading the higher-order 16 bits - * of the integer portion of the local timer counter's value. */ - uint32_t : 16; - } LCCVRU_b; + __IOM uint32_t PDMACRL : 24; /*!< [23..0] These bits hold the setting for the lower-order 24 bits + * of the destination MAC address for PTP-pdelay messages. */ + uint32_t : 8; + } PDMACRL_b; }; union { - __IM uint32_t LCCVRM; /*!< (@ 0x00000174) Local Time Counters */ + __IOM uint32_t PETYPER; /*!< (@ 0x00000110) PTP Message EtherType Setting Register */ struct { - __IM uint32_t LCCVRM : 32; /*!< [31..0] These bits are for reading the lower-order 32 bits of - * the integer portion of the local timer counter's value. */ - } LCCVRM_b; + __IOM uint32_t TYPE : 16; /*!< [15..0] PTP Message EtherType Value SettingThese bits hold the + * setting for the EtherType field value for frames in the + * Ethernet II format. */ + uint32_t : 16; + } PETYPER_b; }; + __IM uint32_t RESERVED9[3]; union { - __IM uint32_t LCCVRL; /*!< (@ 0x00000178) Local Time Counters */ + __IOM uint32_t PPIPR; /*!< (@ 0x00000120) PTP-primary Message Destination IP Address Setting + * Register */ struct { - __IM uint32_t LCCVRL : 32; /*!< [31..0] These bits are for reading the fractional portion of - * the local timer counter's value (in nanoseconds). */ - } LCCVRL_b; + __IOM uint32_t PPIPR : 32; /*!< [31..0] These bits hold the setting for the destination IP address + * for PTPprimary messages. */ + } PPIPR_b; }; - __IM uint32_t RESERVED9[37]; union { - __IM uint32_t PW10VRU; /*!< (@ 0x00000210) Positive Gradient Worst 10 Value Registers */ + __IOM uint32_t PDIPR; /*!< (@ 0x00000124) PTP-pdelay Message Destination IP Address Setting + * Register */ struct { - __IM uint32_t PW10VRU : 32; /*!< [31..0] These bits are for reading the higher-order 32 bits - * of the positive gradient value. */ - } PW10VRU_b; + __IOM uint32_t PDIPR : 32; /*!< [31..0] These bits hold the setting for the destination IP address + * for PTPpdelay messages. */ + } PDIPR_b; }; union { - __IM uint32_t PW10VRM; /*!< (@ 0x00000214) Positive Gradient Worst 10 Value Registers */ + __IOM uint32_t PETOSR; /*!< (@ 0x00000128) PTP Event Message TOS Setting Register */ struct { - __IM uint32_t PW10VRM : 32; /*!< [31..0] These bits are for reading the middle-order 32 bits - * of the positive gradient value. */ - } PW10VRM_b; + __IOM uint32_t EVTO : 8; /*!< [7..0] PTP Event Message TOS Field Value SettingThese bits hold + * the setting for the value of the TOS field within the IPv4 + * headers of PTP event messages. */ + uint32_t : 24; + } PETOSR_b; }; union { - __IM uint32_t PW10VRL; /*!< (@ 0x00000218) Positive Gradient Worst 10 Value Registers */ + __IOM uint32_t PGTOSR; /*!< (@ 0x0000012C) PTP general Message TOS Setting Register */ struct { - __IM uint32_t PW10VRL : 32; /*!< [31..0] These bits are for reading the lower-order 32 bits of - * the positive gradient value. */ - } PW10VRL_b; + __IOM uint32_t GETO : 8; /*!< [7..0] PTP general Message TOS Field Value SettingThese bits + * hold the setting for the value of the TOS field within + * the IPv4 headers of PTP general messages. */ + uint32_t : 24; + } PGTOSR_b; }; - __IM uint32_t RESERVED10[45]; union { - __IM uint32_t MW10RU; /*!< (@ 0x000002D0) Negative Gradient Worst 10 Value Registers */ + __IOM uint32_t PPTTLR; /*!< (@ 0x00000130) PTP-primary Message TTL Setting Register */ struct { - __IM uint32_t MW10RU : 32; /*!< [31..0] These bits are for reading the higher-order 32 bits - * of the negative gradient value. */ - } MW10RU_b; + __IOM uint32_t PRTL : 8; /*!< [7..0] PTP-primary Message TTL Field Value SettingThese bits + * hold the setting for the value of the TTL field within + * the IPv4 headers of PTP-primary messages. */ + uint32_t : 24; + } PPTTLR_b; }; union { - __IM uint32_t MW10RM; /*!< (@ 0x000002D4) Negative Gradient Worst 10 Value Registers */ + __IOM uint32_t PDTTLR; /*!< (@ 0x00000134) PTP-pdelay Message TTL Setting Register */ struct { - __IM uint32_t MW10RM : 32; /*!< [31..0] These bits are for reading the middle-order 32 bits - * of the negative gradient value. */ - } MW10RM_b; + __IOM uint32_t PDTL : 8; /*!< [7..0] PTP-pdelay Message TTL Field ValueThese bits hold the + * setting for the value of the TTL field within the IPv4 + * headers of PTP-pdelay messages. */ + uint32_t : 24; + } PDTTLR_b; }; union { - __IM uint32_t MW10RL; /*!< (@ 0x000002D8) Negative Gradient Worst 10 Value Registers */ + __IOM uint32_t PEUDPR; /*!< (@ 0x00000138) PTP Event Message UDP Destination Port Number + * Setting Register */ struct { - __IM uint32_t MW10RL : 32; /*!< [31..0] These bits are for reading the lower-order 32 bits of - * the negative gradient value. */ - } MW10RL_b; + __IOM uint32_t EVUPT : 16; /*!< [15..0] PTP Event Message Destination Port Number SettingThese + * bits hold the setting for the value of the destination + * port number field within the UDP headers of PTP event messages. */ + uint32_t : 16; + } PEUDPR_b; }; - __IM uint32_t RESERVED11[9]; - __IOM R_ETHERC_EPTPC_COMMON_TM_Type TM[6]; /*!< (@ 0x00000300) Timer Setting Registers */ - __IM uint32_t RESERVED12[7]; union { - __IOM uint32_t TMSTARTR; /*!< (@ 0x0000037C) Timer Start Register */ + __IOM uint32_t PGUDPR; /*!< (@ 0x0000013C) PTP general Message UDP Destination Port Number + * Setting Register */ struct { - __IOM uint32_t EN0 : 1; /*!< [0..0] Pulse Output Timer 0 Start */ - __IOM uint32_t EN1 : 1; /*!< [1..1] Pulse Output Timer 1 Start */ - __IOM uint32_t EN2 : 1; /*!< [2..2] Pulse Output Timer 2 Start */ - __IOM uint32_t EN3 : 1; /*!< [3..3] Pulse Output Timer 3 Start */ - __IOM uint32_t EN4 : 1; /*!< [4..4] Pulse Output Timer 4 Start */ - __IOM uint32_t EN5 : 1; /*!< [5..5] Pulse Output Timer 5 Start */ - uint32_t : 26; - } TMSTARTR_b; + __IOM uint32_t GEUPT : 16; /*!< [15..0] PTP general Message Destination Port NumberThese bits + * hold the setting for the value of the destination port + * number field within the UDP headers of PTP general messages. */ + uint32_t : 16; + } PGUDPR_b; }; - __IM uint32_t RESERVED13[32]; union { - __IOM uint32_t PRSR; /*!< (@ 0x00000400) PRC-TC Status Register */ + __IOM uint32_t FFLTR; /*!< (@ 0x00000140) Frame Reception Filter Setting Register */ struct { - __IOM uint32_t OVRE0 : 1; /*!< [0..0] Relay Packet Overflow Detection Flag 0 */ - __IOM uint32_t OVRE1 : 1; /*!< [1..1] Relay Packet Overflow Detection Flag 1 */ - __IOM uint32_t OVRE2 : 1; /*!< [2..2] Relay Packet Overflow Detection Flag 2 */ - __IOM uint32_t OVRE3 : 1; /*!< [3..3] Relay Packet Overflow Detection Flag 3 */ - uint32_t : 4; - __IOM uint32_t MACE : 1; /*!< [8..8] Originating MAC Address Mismatch Detection Flag */ - uint32_t : 19; - __IOM uint32_t URE0 : 1; /*!< [28..28] Relay Packet Underflow Detection Flag 0 */ - __IOM uint32_t URE1 : 1; /*!< [29..29] Relay Packet Underflow Detection Flag 1 */ - uint32_t : 2; - } PRSR_b; + __IOM uint32_t SEL : 1; /*!< [0..0] Receive MAC Address SelectNOTE: The setting of these + * bits is only effective when EXTPRM=0, ENB=1and RPT=1. */ + __IOM uint32_t PRT : 1; /*!< [1..1] Frame Reception EnableNOTE: The setting of these bits + * is only effective when EXTPRM=0 and ENB=1. */ + __IOM uint32_t ENB : 1; /*!< [2..2] Reception Filter EnableNOTE: The setting of these bits + * is only effective when EXTPRM=0. */ + uint32_t : 13; + __IOM uint32_t EXTPRM : 1; /*!< [16..16] Extended Promiscuous ModeSetting */ + uint32_t : 15; + } FFLTR_b; }; + __IM uint32_t RESERVED10[31]; union { - __IOM uint32_t PRIPR; /*!< (@ 0x00000404) PRC-TC Status Notification Permission Register */ + __IOM uint32_t DASYMRU; /*!< (@ 0x000001C0) Asymmetric Delay Setting Registers */ struct { - __IOM uint32_t OVRE0 : 1; /*!< [0..0] PRSR.OVRE0 Status Notification Permission */ - __IOM uint32_t OVRE1 : 1; /*!< [1..1] PRSR.OVRE1 Status Notification Permission */ - __IOM uint32_t OVRE2 : 1; /*!< [2..2] PRSR.OVRE2 Status Notification Permission */ - __IOM uint32_t OVRE3 : 1; /*!< [3..3] PRSR.OVRE3 Status Notification Permission */ - uint32_t : 4; - __IOM uint32_t MACE : 1; /*!< [8..8] PRSR.MACE Status Notification Permission */ - uint32_t : 19; - __IOM uint32_t URE0 : 1; /*!< [28..28] PRSR.URE0 Status Notification Permission */ - __IOM uint32_t URE1 : 1; /*!< [29..29] PRSR.URE1 Status Notification Permission */ - uint32_t : 2; - } PRIPR_b; + __IOM uint32_t DASYMRU : 16; /*!< [15..0] These bits hold the setting for the higher-order 16 + * bits of the asymmetric delay value. */ + uint32_t : 16; + } DASYMRU_b; }; - __IM uint32_t RESERVED14[2]; - __IOM R_ETHERC_EPTPC_COMMON_PR_Type PR[2]; /*!< (@ 0x00000410) Local MAC Address Registers */ union { - __IOM uint32_t TRNDISR; /*!< (@ 0x00000420) Packet Transmission Control Register */ + __IOM uint32_t DASYMRL; /*!< (@ 0x000001C4) Asymmetric Delay Setting Registers */ struct { - __IOM uint32_t TDIS : 2; /*!< [1..0] Packet Transmission Control */ - uint32_t : 30; - } TRNDISR_b; + __IOM uint32_t DASYMRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the asymmetric delay value. */ + } DASYMRL_b; }; - __IM uint32_t RESERVED15[3]; union { - __IOM uint32_t TRNMR; /*!< (@ 0x00000430) Relay Mode Register */ + __IOM uint32_t TSLATR; /*!< (@ 0x000001C8) Timestamp Latency Setting Register */ struct { - __IOM uint32_t MOD : 1; /*!< [0..0] Cut-Through Mode */ - uint32_t : 7; - __IOM uint32_t FWD0 : 1; /*!< [8..8] Channel 0 Relay Enable */ - __IOM uint32_t FWD1 : 1; /*!< [9..9] Channel 1 Relay Enable */ - uint32_t : 22; - } TRNMR_b; + __IOM uint32_t EGP : 16; /*!< [15..0] Input Port Timestamp Latency SettingThese bits hold + * the setting for the time stamp latency (ns) for the input + * ports. */ + __IOM uint32_t INGP : 16; /*!< [31..16] Output Port Timestamp Latency SettingThese bits hold + * the setting for the time stamp latency (ns) for the output + * ports. */ + } TSLATR_b; }; union { - __IOM uint32_t TRNCTTDR; /*!< (@ 0x00000434) Cut-Through Transfer Start Threshold Register */ + __IOM uint32_t SYCONFR; /*!< (@ 0x000001CC) SYNFP Operation Setting Register */ struct { - __IOM uint32_t THVAL : 11; /*!< [10..0] FIFO Read Start ThresholdThreshold for starting to read - * data from the relay FIFO in cut-through mode (specified - * as the number of bytes)NOTE1: A value cannot be set in - * the lower-order 2 bits. These bits are fixed to 0.NOTE2: - * A value of less than 96 bytes cannot be set. */ - uint32_t : 21; - } TRNCTTDR_b; + __IOM uint32_t TCYC : 8; /*!< [7..0] PTP Message Transmission Interval SettingThese bits are + * used to set the time from the completion of one transmission + * to the start of the next in cycles of the transmission + * clock. A value n in these bits means that a transmission + * interval of n cycles will be secured.No interval is secured + * if the setting is 00h.We recommend the setting 28h (40 + * cycles). */ + uint32_t : 4; + __IOM uint32_t SBDIS : 1; /*!< [12..12] Sync Message Transmission Bandwidth Securing Disable */ + uint32_t : 3; + __IOM uint32_t FILDIS : 1; /*!< [16..16] Receive Message domainNumber Filter Disable */ + uint32_t : 3; + __IOM uint32_t TCMOD : 1; /*!< [20..20] TC Mode Setting */ + uint32_t : 11; + } SYCONFR_b; }; -} R_ETHERC_EPTPC_COMMON_Type; /*!< Size = 1080 (0x438) */ -/* =========================================================================================================================== */ -/* ================ R_FACI_HP_CMD ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint32_t SYFORMR; /*!< (@ 0x000001D0) SYNFP Frame Format Setting Register */ -/** - * @brief Flash Application Command Interface Command-Issuing Area (R_FACI_HP_CMD) - */ + struct + { + __IOM uint32_t FORM0 : 1; /*!< [0..0] Ethernet/UDP Encapsulation */ + __IOM uint32_t FORM1 : 1; /*!< [1..1] Ethernet Frame Format Setting */ + uint32_t : 30; + } SYFORMR_b; + }; -typedef struct /*!< (@ 0x407E0000) R_FACI_HP_CMD Structure */ -{ union { - __IOM uint16_t FACI_CMD16; /*!< (@ 0x00000000) FACI Command Issuing Area (halfword access) */ - __IOM uint8_t FACI_CMD8; /*!< (@ 0x00000000) FACI Command Issuing Area (halfword access) */ + __IOM uint32_t RSTOUTR; /*!< (@ 0x000001D4) Response Message Reception Timeout Register */ + + struct + { + __IOM uint32_t RSTOUTR : 32; /*!< [31..0] Response Message Reception Timeout Time SettingA response + * message not being received within n x 1024 (ns), where + * n is the setting, is judged to represent a timeout. */ + } RSTOUTR_b; }; -} R_FACI_HP_CMD_Type; /*!< Size = 2 (0x2) */ +} R_ETHERC_EPTPC_Type; /*!< Size = 472 (0x1d8) */ /* =========================================================================================================================== */ -/* ================ R_FACI_HP ================ */ +/* ================ R_ETHERC_EPTPC_CFG ================ */ /* =========================================================================================================================== */ /** - * @brief Flash Application Command Interface (R_FACI_HP) + * @brief Ethernet PTP Configuration (R_ETHERC_EPTPC_CFG) */ -typedef struct /*!< (@ 0x407FE000) R_FACI_HP Structure */ +typedef struct /*!< (@ 0x40064500) R_ETHERC_EPTPC_CFG Structure */ { - __IM uint32_t RESERVED[4]; - union { - __IOM uint8_t FASTAT; /*!< (@ 0x00000010) Flash Access Status */ + __IOM uint32_t PTRSTR; /*!< (@ 0x00000000) EPTPC Reset Register */ struct { - __IM uint8_t ECRCT : 1; /*!< [0..0] ECRCT */ - uint8_t : 2; - __IOM uint8_t DFAE : 1; /*!< [3..3] Data Flash Access Error */ - __IM uint8_t CMDLK : 1; /*!< [4..4] Command Lock */ - uint8_t : 2; - __IOM uint8_t CFAE : 1; /*!< [7..7] Code Flash Access Error */ - } FASTAT_b; + __IOM uint32_t RESET : 1; /*!< [0..0] EPTPC Software Reset */ + uint32_t : 31; + } PTRSTR_b; }; - __IM uint8_t RESERVED1; - __IM uint16_t RESERVED2; union { - __IOM uint8_t FAEINT; /*!< (@ 0x00000014) Flash Access Error Interrupt Enable */ + __IOM uint32_t STCSELR; /*!< (@ 0x00000004) STCA Clock Select Register */ struct { - __IOM uint8_t ECRCTIE : 1; /*!< [0..0] Error Correct Interrupt Enable */ - uint8_t : 2; - __IOM uint8_t DFAEIE : 1; /*!< [3..3] Data Flash Access Error Interrupt Enable */ - __IOM uint8_t CMDLKIE : 1; /*!< [4..4] Command Lock Interrupt Enable */ - uint8_t : 2; - __IOM uint8_t CFAEIE : 1; /*!< [7..7] Code Flash Access Error Interrupt Enable */ - } FAEINT_b; + __IOM uint32_t SCLKDIV : 3; /*!< [2..0] PCLKA Clock Frequency Division */ + uint32_t : 5; + __IOM uint32_t SCLKSEL : 3; /*!< [10..8] STCA Clock Select */ + uint32_t : 21; + } STCSELR_b; }; - __IM uint8_t RESERVED3; - __IM uint16_t RESERVED4; union { - __IOM uint8_t FRDYIE; /*!< (@ 0x00000018) Flash Ready Interrupt Enable */ + __IOM uint32_t BYPASS; /*!< (@ 0x00000008) Bypass 1588 module Register */ struct { - __IOM uint8_t FRDYIE : 1; /*!< [0..0] FRDY Interrupt Enable */ - uint8_t : 7; - } FRDYIE_b; + __IOM uint32_t BYPASS0 : 1; /*!< [0..0] Bypass 1588 module for Ether 0ch */ + uint32_t : 15; + __IOM uint32_t BYPASS1 : 1; /*!< [16..16] Bypass 1588 module for Ether 1ch */ + uint32_t : 15; + } BYPASS_b; }; - __IM uint8_t RESERVED5; - __IM uint16_t RESERVED6; - __IM uint32_t RESERVED7[5]; +} R_ETHERC_EPTPC_CFG_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHERC_EPTPC_COMMON ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet PTP Controller Common (R_ETHERC_EPTPC_COMMON) + */ +typedef struct /*!< (@ 0x40065000) R_ETHERC_EPTPC_COMMON Structure */ +{ union { - __IOM uint32_t FSADDR; /*!< (@ 0x00000030) Flash Start Address */ + __IOM uint32_t MIESR; /*!< (@ 0x00000000) MINT Interrupt Source Status Register */ struct { - __IOM uint32_t FSA : 32; /*!< [31..0] Start Address of Flash Sequencer Command Target Area - * These bits can be written when FRDY bit of FSTATR register - * is "1". Writing to these bits in FRDY = "0" is ignored. */ - } FSADDR_b; + __IM uint32_t ST : 1; /*!< [0..0] STCA Status Flag */ + __IM uint32_t SY0 : 1; /*!< [1..1] SYNFP0 Status Flag */ + __IM uint32_t SY1 : 1; /*!< [2..2] SYNFP1 Status Flag */ + __IM uint32_t PRC : 1; /*!< [3..3] PRC-TC Status Flag */ + uint32_t : 12; + __IOM uint32_t CYC0 : 1; /*!< [16..16] Pulse Output Timer 0 Rising Edge Detection Flag */ + __IOM uint32_t CYC1 : 1; /*!< [17..17] Pulse Output Timer 1 Rising Edge Detection Flag */ + __IOM uint32_t CYC2 : 1; /*!< [18..18] Pulse Output Timer 2 Rising Edge Detection Flag */ + __IOM uint32_t CYC3 : 1; /*!< [19..19] Pulse Output Timer 3 Rising Edge Detection Flag */ + __IOM uint32_t CYC4 : 1; /*!< [20..20] Pulse Output Timer 4 Rising Edge Detection Flag */ + __IOM uint32_t CYC5 : 1; /*!< [21..21] Pulse Output Timer 5 Rising Edge Detection Flag */ + uint32_t : 10; + } MIESR_b; }; union { - __IOM uint32_t FEADDR; /*!< (@ 0x00000034) Flash End Address */ + __IOM uint32_t MIEIPR; /*!< (@ 0x00000004) MINT Interrupt Request Permission Register */ struct { - __IOM uint32_t FEA : 32; /*!< [31..0] End Address of Flash Sequencer Command Target Area Specifies - * end address of target area in "Blank Check" command. These - * bits can be written when FRDY bit of FSTATR register is - * "1". Writing to these bits in FRDY = "0" is ignored. */ - } FEADDR_b; + __IOM uint32_t ST : 1; /*!< [0..0] STCA Status Interrupt Request Permission */ + __IOM uint32_t SY0 : 1; /*!< [1..1] SYNFP0 Status Interrupt Request Permission */ + __IOM uint32_t SY1 : 1; /*!< [2..2] SYNFP1 Status Interrupt Request Permission */ + __IOM uint32_t PRC : 1; /*!< [3..3] PRC-TC Status Interrupt Request Permission */ + uint32_t : 12; + __IOM uint32_t CYC0 : 1; /*!< [16..16] Pulse Output Timer 0 Rising Edge Detection Interrupt + * Request Permission */ + __IOM uint32_t CYC1 : 1; /*!< [17..17] Pulse Output Timer 1 Rising Edge Detection Interrupt + * Request Permission */ + __IOM uint32_t CYC2 : 1; /*!< [18..18] Pulse Output Timer 2 Rising Edge Detection Interrupt + * Request Permission */ + __IOM uint32_t CYC3 : 1; /*!< [19..19] Pulse Output Timer 3 Rising Edge Detection Interrupt + * Request Permission */ + __IOM uint32_t CYC4 : 1; /*!< [20..20] Pulse Output Timer 4 Rising Edge Detection Interrupt + * Request Permission */ + __IOM uint32_t CYC5 : 1; /*!< [21..21] Pulse Output Timer 5 Rising Edge Detection Interrupt + * Request Permission */ + uint32_t : 10; + } MIEIPR_b; }; - __IM uint32_t RESERVED8[18]; + __IM uint32_t RESERVED[2]; union { - __IM uint32_t FSTATR; /*!< (@ 0x00000080) Flash Status */ + __IOM uint32_t ELIPPR; /*!< (@ 0x00000010) ELC Output/ETHER_IPLS Interrupt Request Permission + * Register */ struct { - uint32_t : 2; - __IM uint32_t TBLCRCT : 1; /*!< [2..2] Table Area ECC 1-Bit Error Correction Monitoring Bit */ - __IM uint32_t TBLDTCT : 1; /*!< [3..3] Table Area ECC 2-Bit Error Detection Monitoring Bit */ - __IM uint32_t CFGCRCT : 1; /*!< [4..4] Config Area ECC 1-Bit Error Correction Monitoring Bit */ - __IM uint32_t CFGDTCT : 1; /*!< [5..5] Config Area ECC 2-Bit Error Detection Monitoring Bit */ - __IM uint32_t FHVEERR : 1; /*!< [6..6] "fhve" Error */ - __IM uint32_t FCUERR : 1; /*!< [7..7] FCU Error */ - __IM uint32_t PRGSPD : 1; /*!< [8..8] Programming-Suspended Status */ - __IM uint32_t ERSSPD : 1; /*!< [9..9] Erasure-Suspended Status */ - __IM uint32_t DBFULL : 1; /*!< [10..10] Data Buffer Full */ - __IM uint32_t SUSRDY : 1; /*!< [11..11] Suspend Ready */ - __IM uint32_t PRGERR : 1; /*!< [12..12] Programming Error */ - __IM uint32_t ERSERR : 1; /*!< [13..13] Erasure Error */ - __IM uint32_t ILGLERR : 1; /*!< [14..14] Illegal Command Error */ - __IM uint32_t FRDY : 1; /*!< [15..15] Flash Ready */ - __IM uint32_t OTPCRCT : 1; /*!< [16..16] OTP Bit ECC 1-Bit Error Correction Monitoring Bit */ - __IM uint32_t OTPDTCT : 1; /*!< [17..17] OTP Bit ECC 2-Bit Error Detection Monitoring Bit */ - __IM uint32_t EBFULL : 1; /*!< [18..18] FDMYECC Buffer Full */ - uint32_t : 13; - } FSTATR_b; + __IOM uint32_t CYCP0 : 1; /*!< [0..0] Pulse Output Timer 0 Rising Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCP1 : 1; /*!< [1..1] Pulse Output Timer 1 Rising Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCP2 : 1; /*!< [2..2] Pulse Output Timer 2 Rising Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCP3 : 1; /*!< [3..3] Pulse Output Timer 3 Rising Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCP4 : 1; /*!< [4..4] Pulse Output Timer 4 Rising Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCP5 : 1; /*!< [5..5] Pulse Output Timer 5 Rising Edge Detection Event Output + * Enable */ + uint32_t : 2; + __IOM uint32_t CYCN0 : 1; /*!< [8..8] Pulse Output Timer 0 Falling Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCN1 : 1; /*!< [9..9] Pulse Output Timer 1 Falling Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCN2 : 1; /*!< [10..10] Pulse Output Timer 2 Falling Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCN3 : 1; /*!< [11..11] Pulse Output Timer 3 Falling Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCN4 : 1; /*!< [12..12] Pulse Output Timer 4 Falling Edge Detection Event Output + * Enable */ + __IOM uint32_t CYCN5 : 1; /*!< [13..13] Pulse Output Timer 5 Falling Edge Detection Event Output + * Enable */ + uint32_t : 2; + __IOM uint32_t PLSP : 1; /*!< [16..16] Pulse Output Timer Rising Edge Detection IPLS Interrupt + * Request Permission */ + uint32_t : 7; + __IOM uint32_t PLSN : 1; /*!< [24..24] Pulse Output Timer Falling Edge Detection IPLS Interrupt + * Request Permission */ + uint32_t : 7; + } ELIPPR_b; }; union { - __IOM uint16_t FENTRYR; /*!< (@ 0x00000084) Program/Erase Mode Entry */ + __IOM uint32_t ELIPACR; /*!< (@ 0x00000014) ELC Output/IPLS Interrupt Permission Automatic + * Clearing Register */ struct { - __IOM uint16_t FENTRYC : 1; /*!< [0..0] Code Flash P/E Mode Entry These bits can be written when - * FRDY bit in FSTATR register is "1". Writing to this bit - * in FRDY = "0" is ignored. Writing to these bits is enabled - * only when this register is accessed in 16-bit size and - * H'AA is written to KEY bits */ - uint16_t : 6; - __IOM uint16_t FENTRYD : 1; /*!< [7..7] Data Flash P/E Mode Entry These bits can be written when - * FRDY bit in FSTATR register is "1". Writing to this bit - * in FRDY = "0" is ignored. Writing to these bits is enabled - * only when this register is accessed in 16-bit size and - * H'AA is written to KEY bits. */ - __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ - } FENTRYR_b; + __IOM uint32_t CYCP0 : 1; /*!< [0..0] ELIPPR.CYCP0 Bit Automatic Clearing */ + __IOM uint32_t CYCP1 : 1; /*!< [1..1] ELIPPR.CYCP1 Bit Automatic Clearing */ + __IOM uint32_t CYCP2 : 1; /*!< [2..2] ELIPPR.CYCP2 Bit Automatic Clearing */ + __IOM uint32_t CYCP3 : 1; /*!< [3..3] ELIPPR.CYCP3 Bit Automatic Clearing */ + __IOM uint32_t CYCP4 : 1; /*!< [4..4] ELIPPR.CYCP4 Bit Automatic Clearing */ + __IOM uint32_t CYCP5 : 1; /*!< [5..5] ELIPPR.CYCP5 Bit Automatic Clearing */ + uint32_t : 2; + __IOM uint32_t CYCN0 : 1; /*!< [8..8] ELIPPR.CYCN0 Bit Automatic Clearing */ + __IOM uint32_t CYCN1 : 1; /*!< [9..9] ELIPPR.CYCN1 Bit Automatic Clearing */ + __IOM uint32_t CYCN2 : 1; /*!< [10..10] ELIPPR.CYCN2 Bit Automatic Clearing */ + __IOM uint32_t CYCN3 : 1; /*!< [11..11] ELIPPR.CYCN3 Bit Automatic Clearing */ + __IOM uint32_t CYCN4 : 1; /*!< [12..12] ELIPPR.CYCN4 Bit Automatic Clearing */ + __IOM uint32_t CYCN5 : 1; /*!< [13..13] ELIPPR.CYCN5 Bit Automatic Clearing */ + uint32_t : 2; + __IOM uint32_t PLSP : 1; /*!< [16..16] ELIPPR.PLSP Bit Automatic Clearing */ + uint32_t : 7; + __IOM uint32_t PLSN : 1; /*!< [24..24] ELIPPR.PLSN Bit Automatic Clearing */ + uint32_t : 7; + } ELIPACR_b; }; - __IM uint16_t RESERVED9; - __IM uint32_t RESERVED10; + __IM uint32_t RESERVED1[10]; union { - __IOM uint16_t FSUINITR; /*!< (@ 0x0000008C) Flash Sequencer Set-up Initialize */ + __IOM uint32_t STSR; /*!< (@ 0x00000040) STCA Status Register */ struct { - __IOM uint16_t SUINIT : 1; /*!< [0..0] Set-up Initialization This bit can be written when FRDY - * bit of FSTATR register is "1". Writing to this bit in FRDY - * = "0" is ignored. Writing to these bits is enabled only - * when this register is accessed in 16-bit size and H'2D - * is written to KEY bits. */ - uint16_t : 7; - __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ - } FSUINITR_b; + __IOM uint32_t SYNC : 1; /*!< [0..0] Synchronized State Detection Flag */ + __IOM uint32_t SYNCOUT : 1; /*!< [1..1] Synchronization Loss Detection Flag */ + uint32_t : 1; + __IOM uint32_t SYNTOUT : 1; /*!< [3..3] Sync Message Reception Timeout Detection Flag */ + __IOM uint32_t W10D : 1; /*!< [4..4] Worst 10 Acquisition Completion Flag */ + uint32_t : 27; + } STSR_b; }; - __IM uint16_t RESERVED11; - __IM uint32_t RESERVED12[4]; union { - __IM uint16_t FCMDR; /*!< (@ 0x000000A0) Flash Sequencer Command */ + __IOM uint32_t STIPR; /*!< (@ 0x00000044) STCA Status Notification Permission Register */ struct { - __IM uint16_t PCMDR : 8; /*!< [7..0] Previous Command Register */ - __IM uint16_t CMDR : 8; /*!< [15..8] Command Register */ - } FCMDR_b; + __IOM uint32_t SYNC : 1; /*!< [0..0] SYNC Status Notification Enable */ + __IOM uint32_t SYNCOUT : 1; /*!< [1..1] SYNCOUT Status Notification Enable */ + uint32_t : 1; + __IOM uint32_t SYNTOUT : 1; /*!< [3..3] SYNTOUT Status Notification Enable */ + __IOM uint32_t W10D : 1; /*!< [4..4] W10D Status Notification Enable */ + uint32_t : 27; + } STIPR_b; }; - __IM uint16_t RESERVED13; - __IM uint32_t RESERVED14[7]; + __IM uint32_t RESERVED2[2]; union { - __IM uint16_t FPESTAT; /*!< (@ 0x000000C0) Program/Erase Error Status */ + __IOM uint32_t STCFR; /*!< (@ 0x00000050) STCA Clock Frequency Setting Register */ struct { - __IM uint16_t PEERRST : 8; /*!< [7..0] P/E Error Status */ - uint16_t : 8; - } FPESTAT_b; + __IOM uint32_t STCF : 2; /*!< [1..0] STCA Clock Frequency */ + uint32_t : 30; + } STCFR_b; }; - __IM uint16_t RESERVED15; - __IM uint32_t RESERVED16[3]; union { - __IOM uint8_t FBCCNT; /*!< (@ 0x000000D0) Blank Check Control */ + __IOM uint32_t STMR; /*!< (@ 0x00000054) STCA Operating Mode Register */ struct { - __IOM uint8_t BCDIR : 1; /*!< [0..0] Blank Check Direction */ - uint8_t : 7; - } FBCCNT_b; + __IOM uint32_t WINT : 8; /*!< [7..0] Worst 10 Acquisition Time */ + uint32_t : 5; + __IOM uint32_t CMOD : 1; /*!< [13..13] Time Synchronization Correction Mode */ + uint32_t : 1; + __IOM uint32_t W10S : 1; /*!< [15..15] Worst 10 Acquisition Control Select */ + __IOM uint32_t SYTH : 4; /*!< [19..16] Synchronized State Detection Threshold Setting */ + __IOM uint32_t DVTH : 4; /*!< [23..20] Synchronization Loss Detection Threshold Setting */ + uint32_t : 4; + __IOM uint32_t ALEN0 : 1; /*!< [28..28] Alarm Detection Enable 0 */ + __IOM uint32_t ALEN1 : 1; /*!< [29..29] Alarm Detection Enable 1 */ + uint32_t : 2; + } STMR_b; }; - __IM uint8_t RESERVED17; - __IM uint16_t RESERVED18; union { - __IM uint8_t FBCSTAT; /*!< (@ 0x000000D4) Blank Check Status */ + __IOM uint32_t SYNTOR; /*!< (@ 0x00000058) Sync Message Reception Timeout Register */ struct { - __IM uint8_t BCST : 1; /*!< [0..0] Blank Check Status Bit */ - uint8_t : 7; - } FBCSTAT_b; + __IOM uint32_t SYNTOR : 32; /*!< [31..0] A Sync message not being received within 1024 x n (ns), + * where n is the setting, leads to a timeout for reception + * of Sync messages, leading to the STSR.SYNTOUT flag being + * set to 1. */ + } SYNTOR_b; }; - __IM uint8_t RESERVED19; - __IM uint16_t RESERVED20; + __IM uint32_t RESERVED3; union { - __IM uint32_t FPSADDR; /*!< (@ 0x000000D8) Programmed Area Start Address */ + __IOM uint32_t IPTSELR; /*!< (@ 0x00000060) IPLS Interrupt Request Timer Select Register */ struct { - __IM uint32_t PSADR : 19; /*!< [18..0] Programmed Area Start Address NOTE: Indicates address - * of the first programmed data which is found in "Blank Check" - * command execution. */ - uint32_t : 13; - } FPSADDR_b; + __IOM uint32_t IPTSEL0 : 1; /*!< [0..0] Pulse Output Timer 0 Select */ + __IOM uint32_t IPTSEL1 : 1; /*!< [1..1] Pulse Output Timer 1 Select */ + __IOM uint32_t IPTSEL2 : 1; /*!< [2..2] Pulse Output Timer 2 Select */ + __IOM uint32_t IPTSEL3 : 1; /*!< [3..3] Pulse Output Timer 3 Select */ + __IOM uint32_t IPTSEL4 : 1; /*!< [4..4] Pulse Output Timer 4 Select */ + __IOM uint32_t IPTSEL5 : 1; /*!< [5..5] Pulse Output Timer 5 Select */ + uint32_t : 26; + } IPTSELR_b; }; union { - __IM uint32_t FAWMON; /*!< (@ 0x000000DC) Flash Access Window Monitor */ + __IOM uint32_t MITSELR; /*!< (@ 0x00000064) MINT Interrupt Request Timer Select Register */ struct { - __IM uint32_t FAWS : 11; /*!< [10..0] Start Sector Address for Access Window NOTE: These bits - * indicate the start sector address for setting the access - * window that is located in the configuration area. */ - uint32_t : 4; - __IM uint32_t FSPR : 1; /*!< [15..15] Protection Flag of programming the Access Window, Boot - * Flag and Temporary Boot Swap Control and "Config Clear" - * command execution */ - __IM uint32_t FAWE : 11; /*!< [26..16] End Sector Address for Access Window NOTE: These bits - * indicate the end sector address for setting the access - * window that is located in the configuration area. */ - uint32_t : 4; - __IM uint32_t BTFLG : 1; /*!< [31..31] Flag of Start-Up area select for Boot Swap */ - } FAWMON_b; + __IOM uint32_t MINTEN0 : 1; /*!< [0..0] Pulse Output Timer 0 MINT Interrupt Output Enable */ + __IOM uint32_t MINTEN1 : 1; /*!< [1..1] Pulse Output Timer 1 MINT Interrupt Output Enable */ + __IOM uint32_t MINTEN2 : 1; /*!< [2..2] Pulse Output Timer 2 MINT Interrupt Output Enable */ + __IOM uint32_t MINTEN3 : 1; /*!< [3..3] Pulse Output Timer 3 MINT Interrupt Output Enable */ + __IOM uint32_t MINTEN4 : 1; /*!< [4..4] Pulse Output Timer 4 MINT Interrupt Output Enable */ + __IOM uint32_t MINTEN5 : 1; /*!< [5..5] Pulse Output Timer 5 MINT Interrupt Output Enable */ + uint32_t : 26; + } MITSELR_b; }; union { - __IOM uint16_t FCPSR; /*!< (@ 0x000000E0) FCU Process Switch */ + __IOM uint32_t ELTSELR; /*!< (@ 0x00000068) ELC Output Timer Select Register */ struct { - __IOM uint16_t ESUSPMD : 1; /*!< [0..0] Erasure-Suspended Mode */ - uint16_t : 15; - } FCPSR_b; + __IOM uint32_t ELTDIS0 : 1; /*!< [0..0] Pulse Output Timer 0 Event Generation Disable */ + __IOM uint32_t ELTDIS1 : 1; /*!< [1..1] Pulse Output Timer 1 Event Generation Disable */ + __IOM uint32_t ELTDIS2 : 1; /*!< [2..2] Pulse Output Timer 2 Event Generation Disable */ + __IOM uint32_t ELTDIS3 : 1; /*!< [3..3] Pulse Output Timer 3 Event Generation Disable */ + __IOM uint32_t ELTDIS4 : 1; /*!< [4..4] Pulse Output Timer 4 Event Generation Disable */ + __IOM uint32_t ELTDIS5 : 1; /*!< [5..5] Pulse Output Timer 5 Event Generation Disable */ + uint32_t : 26; + } ELTSELR_b; }; - __IM uint16_t RESERVED21; union { - __IOM uint16_t FPCKAR; /*!< (@ 0x000000E4) Flash Sequencer Processing Clock Frequency Notification */ + __IOM uint32_t STCHSELR; /*!< (@ 0x0000006C) Time Synchronization Channel Select Register */ struct { - __IOM uint16_t PCKA : 8; /*!< [7..0] Flash Sequencer Processing Clock Frequency These bits - * can be written when FRDY bit in FSTATR register is "1". - * Writing to this bit in FRDY = "0" is ignored. Writing to - * these bits is enabled only when this register is accessed - * in 16-bit size and H'1E is written to KEY bits. */ - __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ - } FPCKAR_b; + __IOM uint32_t SYSEL : 1; /*!< [0..0] Timer Information Input SelectNOTE: Do not change the + * value of this bit while the SYNSTARTR.STR bit is 1. */ + uint32_t : 31; + } STCHSELR_b; }; - __IM uint16_t RESERVED22; + __IM uint32_t RESERVED4[4]; union { - __IOM uint16_t FSUACR; /*!< (@ 0x000000E8) Flash Start-Up Area Control Register */ + __IOM uint32_t SYNSTARTR; /*!< (@ 0x00000080) Slave Time Synchronization Start Register */ struct { - __IOM uint16_t SAS : 2; /*!< [1..0] Start Up Area Select These bits can be written when FRDY - * bit in FSTATR register is "1". Writing to this bit in FRDY - * = "0" is ignored. Writing to these bits is enabled only - * when this register is accessed in 16-bit size and H'66 - * is written to KEY bits. */ - uint16_t : 6; - __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ - } FSUACR_b; + __IOM uint32_t STR : 1; /*!< [0..0] Slave Time Synchronization Control */ + uint32_t : 31; + } SYNSTARTR_b; }; - __IM uint16_t RESERVED23; -} R_FACI_HP_Type; /*!< Size = 236 (0xec) */ - -/* =========================================================================================================================== */ -/* ================ R_FACI_LP ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Flash Application Command Interface (R_FACI_LP) - */ - -typedef struct /*!< (@ 0x407EC000) R_FACI_LP Structure */ -{ - __IM uint32_t RESERVED[36]; - __IOM uint8_t DFLCTL; /*!< (@ 0x00000090) Flash P/E Mode Control Register */ - __IM uint8_t RESERVED1; - __IM uint16_t RESERVED2; - __IM uint32_t RESERVED3[27]; union { - __IOM uint8_t FPMCR; /*!< (@ 0x00000100) Flash P/E Mode Control Register */ + __OM uint32_t LCIVLDR; /*!< (@ 0x00000084) Local Time Counter Initial Value Load Directive + * Register */ struct { - uint8_t : 1; - __IOM uint8_t FMS0 : 1; /*!< [1..1] Flash Operating Mode Select 0FMS2,1,0: 000: Read mode - * 011: Discharge mode 1 111: Discharge mode 2 101: Code Flash - * P/E mode 010: Data flash P/E mode Others: Setting prohibited. */ - uint8_t : 1; - __IOM uint8_t RPDIS : 1; /*!< [3..3] Code Flash P/E Disable */ - __IOM uint8_t FMS1 : 1; /*!< [4..4] The bit to make data flash a programming modeRefer to - * the description of the FMS0 bit. */ - uint8_t : 1; - __IOM uint8_t VLPE : 1; /*!< [6..6] Low-Voltage P/E Mode Enable */ - __IOM uint8_t FMS2 : 1; /*!< [7..7] Flash Operating Mode Select 2.Refer to the description - * of the FMS0 bit. */ - } FPMCR_b; + __OM uint32_t LOAD : 1; /*!< [0..0] Local Time Counter Initial Value Load Directive */ + uint32_t : 31; + } LCIVLDR_b; }; - __IM uint8_t RESERVED4; - __IM uint16_t RESERVED5; + __IM uint32_t RESERVED5[2]; union { - __IOM uint8_t FASR; /*!< (@ 0x00000104) Flash Area Select Register */ + __IOM uint32_t SYNTDARU; /*!< (@ 0x00000090) Synchronization Loss Detection Threshold Registers */ struct { - __IOM uint8_t EXS : 1; /*!< [0..0] Extra area select */ - uint8_t : 7; - } FASR_b; + __IOM uint32_t SYNTDARU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 + * bits of the threshold for detection of loss of synchronization. */ + } SYNTDARU_b; }; - __IM uint8_t RESERVED6; - __IM uint16_t RESERVED7; union { - __IOM uint16_t FSARL; /*!< (@ 0x00000108) Flash Processing Start Address Register L */ + __IOM uint32_t SYNTDARL; /*!< (@ 0x00000094) Synchronization Loss Detection Threshold Registers */ struct { - __IOM uint16_t FSAR15_0 : 16; /*!< [15..0] Start address */ - } FSARL_b; + __IOM uint32_t SYNTDARL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the threshold for detection of loss of synchronization. */ + } SYNTDARL_b; }; - __IM uint16_t RESERVED8; - __IM uint32_t RESERVED9; union { - __IOM uint16_t FSARH; /*!< (@ 0x00000110) Flash Processing Start Address Register H */ + __IOM uint32_t SYNTDBRU; /*!< (@ 0x00000098) Synchronization Detection Threshold Registers */ struct { - __IOM uint16_t FSAR20_16 : 5; /*!< [4..0] Start address */ - uint16_t : 4; - __IOM uint16_t FSAR31_25 : 7; /*!< [15..9] Start address */ - } FSARH_b; + __IOM uint32_t SYNTDBRU : 32; /*!< [31..0] These bits hold the setting for the higher-order 32 + * bits of the threshold for detection of synchronization. */ + } SYNTDBRU_b; }; - __IM uint16_t RESERVED10; union { - __IOM uint8_t FCR; /*!< (@ 0x00000114) Flash Control Register */ + __IOM uint32_t SYNTDBRL; /*!< (@ 0x0000009C) Synchronization Detection Threshold Registers */ struct { - __IOM uint8_t CMD : 4; /*!< [3..0] Software Command Setting */ - __IOM uint8_t DRC : 1; /*!< [4..4] Data Read Completion */ - uint8_t : 1; - __IOM uint8_t STOP : 1; /*!< [6..6] Forced Processing Stop */ - __IOM uint8_t OPST : 1; /*!< [7..7] Processing Start */ - } FCR_b; - }; - __IM uint8_t RESERVED11; - __IM uint16_t RESERVED12; - - union - { - __IOM uint16_t FEARL; /*!< (@ 0x00000118) Flash Processing End Address Register L */ - - struct - { - __IOM uint16_t FEAR15_0 : 16; /*!< [15..0] End address */ - } FEARL_b; + __IOM uint32_t SYNTDBRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the threshold for detection of synchronization. */ + } SYNTDBRL_b; }; - __IM uint16_t RESERVED13; - __IM uint32_t RESERVED14; + __IM uint32_t RESERVED6[4]; union { - __IOM uint32_t FEARH; /*!< (@ 0x00000120) Flash Processing End Address Register H */ + __IOM uint32_t LCIVRU; /*!< (@ 0x000000B0) Local Time Counter Initial Value Registers */ struct { - __IOM uint32_t FEAR20_16 : 5; /*!< [4..0] End address */ - uint32_t : 4; - __IOM uint32_t FEAR31_25 : 7; /*!< [15..9] End address */ - uint32_t : 16; - } FEARH_b; + __IOM uint32_t LCIVRU : 16; /*!< [15..0] These bits hold the setting for the higher-order 16 + * bits of the integer portion of the initial value for the + * local timer counter. */ + uint32_t : 16; + } LCIVRU_b; }; union { - __IOM uint32_t FRESETR; /*!< (@ 0x00000124) Flash Reset Register */ + __IOM uint32_t LCIVRM; /*!< (@ 0x000000B4) Local Time Counter Initial Value Registers */ struct { - __IOM uint32_t FRESET : 1; /*!< [0..0] Software Reset of the registers */ - uint32_t : 31; - } FRESETR_b; + __IOM uint32_t LCIVRM : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the integer portion of the initial value for the local + * timer counter. */ + } LCIVRM_b; }; union { - __IM uint32_t FSTATR00; /*!< (@ 0x00000128) Flash Status Register00 */ + __IOM uint32_t LCIVRL; /*!< (@ 0x000000B8) Local Time Counter Initial Value Registers */ struct { - __IM uint32_t ERERR0 : 1; /*!< [0..0] Erase Error Flag0 */ - __IM uint32_t PRGERR0 : 1; /*!< [1..1] Program Error Flag0 */ - __IM uint32_t PRGERR01 : 1; /*!< [2..2] Program Error Flag 01 */ - __IM uint32_t BCERR0 : 1; /*!< [3..3] Blank Check Error Flag0 */ - __IM uint32_t ILGLERR : 1; /*!< [4..4] Illegal Command Error Flag */ - __IM uint32_t EILGLERR : 1; /*!< [5..5] Extra Area Illegal Command Error Flag */ - uint32_t : 26; - } FSTATR00_b; + __IOM uint32_t LCIVRL : 32; /*!< [31..0] These bits hold the setting for the fractional portion + * of the initial value of the local timer counter in nanoseconds. */ + } LCIVRL_b; }; + __IM uint32_t RESERVED7[26]; union { - __IM uint32_t FSTATR1; /*!< (@ 0x0000012C) Flash Status Register1 */ + __IOM uint32_t GETW10R; /*!< (@ 0x00000124) Worst 10 Acquisition Directive Register */ struct { - uint32_t : 1; - __IM uint32_t DRRDY : 1; /*!< [1..1] Data read request */ - uint32_t : 4; - __IM uint32_t FRDY : 1; /*!< [6..6] End status signal of a sequencer */ - __IM uint32_t EXRDY : 1; /*!< [7..7] End status signal of a Extra programming sequencer */ - uint32_t : 24; - } FSTATR1_b; + __IOM uint32_t GW10 : 1; /*!< [0..0] Worst 10 Acquisition Directive */ + uint32_t : 31; + } GETW10R_b; }; union { - __IOM uint32_t FWBL0; /*!< (@ 0x00000130) Flash Write Buffer Register L0 */ + __IOM uint32_t PLIMITRU; /*!< (@ 0x00000128) Positive Gradient Limit Registers */ struct { - __IOM uint32_t WDATA : 16; /*!< [15..0] Program data of the program command */ - uint32_t : 16; - } FWBL0_b; + __IOM uint32_t PLIMITRU : 31; /*!< [30..0] These bits hold the setting for the higher-order 31 + * bits of the limit for the positive gradient. */ + uint32_t : 1; + } PLIMITRU_b; }; - __IM uint32_t RESERVED15; union { - __IOM uint32_t FWBH0; /*!< (@ 0x00000138) Flash Write Buffer Register H0 */ + __IOM uint32_t PLIMITRM; /*!< (@ 0x0000012C) Positive Gradient Limit Registers */ struct { - __IOM uint32_t WDATA : 16; /*!< [15..0] Program data of the program command */ - uint32_t : 16; - } FWBH0_b; + __IOM uint32_t PLIMITRM : 32; /*!< [31..0] These bits hold the setting for the middle-order 32 + * bits of the limit for the positive gradient. */ + } PLIMITRM_b; }; union { - __IM uint32_t FSTATR01; /*!< (@ 0x0000013C) Flash Status Register01 */ + __IOM uint32_t PLIMITRL; /*!< (@ 0x00000130) Positive Gradient Limit Registers */ struct { - __IM uint32_t ERERR1 : 1; /*!< [0..0] Erase Error Flag1 */ - __IM uint32_t PRGERR1 : 1; /*!< [1..1] Program Error Flag1 */ - uint32_t : 1; - __IM uint32_t BCERR1 : 1; /*!< [3..3] Blank Check Error Flag1 */ - uint32_t : 28; - } FSTATR01_b; + __IOM uint32_t PLIMITRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the limit for the positive gradient. */ + } PLIMITRL_b; }; union { - __IOM uint32_t FWBL1; /*!< (@ 0x00000140) Flash Write Buffer Register L1 */ + __IOM uint32_t MLIMITRU; /*!< (@ 0x00000134) Negative Gradient Limit Registers */ struct { - __IOM uint32_t WDATA47_32 : 16; /*!< [15..0] Program data of the program command */ - uint32_t : 16; - } FWBL1_b; + __IOM uint32_t MLIMITRU : 31; /*!< [30..0] These bits hold the setting for the higher-order 31 + * bits of the limit for the negative gradient. */ + uint32_t : 1; + } MLIMITRU_b; }; union { - __IOM uint32_t FWBH1; /*!< (@ 0x00000144) Flash Write Buffer Register H1 */ + __IOM uint32_t MLIMITRM; /*!< (@ 0x00000138) Negative Gradient Limit Registers */ struct { - __IOM uint32_t WDATA63_48 : 16; /*!< [15..0] Program data of the program command */ - uint32_t : 16; - } FWBH1_b; + __IOM uint32_t MLIMITRM : 32; /*!< [31..0] These bits hold the setting for the middle-order 32 + * bits of the limit for the negative gradient. */ + } MLIMITRM_b; }; union { - __IM uint32_t FRBL1; /*!< (@ 0x00000148) Flash Read Buffer Register L1 */ + __IOM uint32_t MLIMITRL; /*!< (@ 0x0000013C) Negative Gradient Limit Registers */ struct { - __IM uint32_t RDATA47_32 : 16; /*!< [15..0] Read data of the consecutive read command */ - uint32_t : 16; - } FRBL1_b; + __IOM uint32_t MLIMITRL : 32; /*!< [31..0] These bits hold the setting for the lower-order 32 bits + * of the limit for the negative gradient. */ + } MLIMITRL_b; }; union { - __IM uint32_t FRBH1; /*!< (@ 0x0000014C) Flash Read Buffer Register H1 */ + __IOM uint32_t GETINFOR; /*!< (@ 0x00000140) Statistical Information Retention Control Register */ struct { - __IM uint32_t RDATA63_48 : 16; /*!< [15..0] Read data of the consecutive read command */ - uint32_t : 16; - } FRBH1_b; + __IOM uint32_t INFO : 1; /*!< [0..0] Information Retention ControlNOTE: Once information fetching + * is directed, values of various statistical information + * read before completion of information fetching are not + * guaranteed. */ + uint32_t : 31; + } GETINFOR_b; }; - __IM uint32_t RESERVED16[12]; + __IM uint32_t RESERVED8[11]; union { - __OM uint32_t FPR; /*!< (@ 0x00000180) Protection Unlock Register */ + __IM uint32_t LCCVRU; /*!< (@ 0x00000170) Local Time Counters */ struct { - __OM uint32_t FPR : 8; /*!< [7..0] Protection Unlock Register */ - uint32_t : 24; - } FPR_b; + __IM uint32_t LCCVRU : 16; /*!< [15..0] These bits are for reading the higher-order 16 bits + * of the integer portion of the local timer counter's value. */ + uint32_t : 16; + } LCCVRU_b; }; union { - __IM uint32_t FPSR; /*!< (@ 0x00000184) Protection Unlock Status Register */ + __IM uint32_t LCCVRM; /*!< (@ 0x00000174) Local Time Counters */ struct { - __IM uint32_t PERR : 1; /*!< [0..0] Protect Error Flag */ - uint32_t : 31; - } FPSR_b; + __IM uint32_t LCCVRM : 32; /*!< [31..0] These bits are for reading the lower-order 32 bits of + * the integer portion of the local timer counter's value. */ + } LCCVRM_b; }; union { - __IM uint32_t FRBL0; /*!< (@ 0x00000188) Flash Read Buffer Register L0 */ + __IM uint32_t LCCVRL; /*!< (@ 0x00000178) Local Time Counters */ struct { - __IM uint32_t RDATA : 16; /*!< [15..0] Read data of the consecutive read command */ - uint32_t : 16; - } FRBL0_b; + __IM uint32_t LCCVRL : 32; /*!< [31..0] These bits are for reading the fractional portion of + * the local timer counter's value (in nanoseconds). */ + } LCCVRL_b; }; - __IM uint32_t RESERVED17; + __IM uint32_t RESERVED9[37]; union { - __IM uint32_t FRBH0; /*!< (@ 0x00000190) Flash Read Buffer Register H0 */ + __IM uint32_t PW10VRU; /*!< (@ 0x00000210) Positive Gradient Worst 10 Value Registers */ struct { - __IM uint32_t RDATA : 16; /*!< [15..0] Read data of the consecutive read command */ - uint32_t : 16; - } FRBH0_b; + __IM uint32_t PW10VRU : 32; /*!< [31..0] These bits are for reading the higher-order 32 bits + * of the positive gradient value. */ + } PW10VRU_b; }; - __IM uint32_t RESERVED18[11]; union { - __IM uint32_t FSCMR; /*!< (@ 0x000001C0) Flash Start-Up Setting Monitor Register */ + __IM uint32_t PW10VRM; /*!< (@ 0x00000214) Positive Gradient Worst 10 Value Registers */ struct { - uint32_t : 8; - __IM uint32_t SASMF : 1; /*!< [8..8] Start-up Area Setting Monitor Flag */ - uint32_t : 5; - __IM uint32_t FSPR : 1; /*!< [14..14] Access Window Protection Flag */ - uint32_t : 17; - } FSCMR_b; + __IM uint32_t PW10VRM : 32; /*!< [31..0] These bits are for reading the middle-order 32 bits + * of the positive gradient value. */ + } PW10VRM_b; }; - __IM uint32_t RESERVED19; union { - __IM uint32_t FAWSMR; /*!< (@ 0x000001C8) Flash Access Window Start Address Monitor Register */ + __IM uint32_t PW10VRL; /*!< (@ 0x00000218) Positive Gradient Worst 10 Value Registers */ struct { - __IM uint32_t FAWS : 12; /*!< [11..0] Flash Access Window Start Address */ - uint32_t : 20; - } FAWSMR_b; + __IM uint32_t PW10VRL : 32; /*!< [31..0] These bits are for reading the lower-order 32 bits of + * the positive gradient value. */ + } PW10VRL_b; }; - __IM uint32_t RESERVED20; + __IM uint32_t RESERVED10[45]; union { - __IM uint32_t FAWEMR; /*!< (@ 0x000001D0) Flash Access Window End Address Monitor Register */ + __IM uint32_t MW10RU; /*!< (@ 0x000002D0) Negative Gradient Worst 10 Value Registers */ struct { - __IM uint32_t FAWE : 12; /*!< [11..0] Flash Access Window End Address */ - uint32_t : 20; - } FAWEMR_b; + __IM uint32_t MW10RU : 32; /*!< [31..0] These bits are for reading the higher-order 32 bits + * of the negative gradient value. */ + } MW10RU_b; }; - __IM uint32_t RESERVED21; union { - __IOM uint32_t FISR; /*!< (@ 0x000001D8) Flash Initial Setting Register */ + __IM uint32_t MW10RM; /*!< (@ 0x000002D4) Negative Gradient Worst 10 Value Registers */ struct { - __IOM uint32_t PCKA : 6; /*!< [5..0] Peripheral Clock Notification */ - __IOM uint32_t SAS : 2; /*!< [7..6] Temporary boot swap mode */ - uint32_t : 24; - } FISR_b; + __IM uint32_t MW10RM : 32; /*!< [31..0] These bits are for reading the middle-order 32 bits + * of the negative gradient value. */ + } MW10RM_b; }; union { - __IOM uint32_t FEXCR; /*!< (@ 0x000001DC) Flash Extra Area Control Register */ + __IM uint32_t MW10RL; /*!< (@ 0x000002D8) Negative Gradient Worst 10 Value Registers */ struct { - __IOM uint32_t CMD : 3; /*!< [2..0] Processing Start) */ - uint32_t : 4; - __IOM uint32_t OPST : 1; /*!< [7..7] Software Command Setting */ - uint32_t : 24; - } FEXCR_b; + __IM uint32_t MW10RL : 32; /*!< [31..0] These bits are for reading the lower-order 32 bits of + * the negative gradient value. */ + } MW10RL_b; }; + __IM uint32_t RESERVED11[9]; + __IOM R_ETHERC_EPTPC_COMMON_TM_Type TM[6]; /*!< (@ 0x00000300) Timer Setting Registers */ + __IM uint32_t RESERVED12[7]; union { - __IM uint32_t FEAML; /*!< (@ 0x000001E0) Flash Error Address Monitor Register L */ + __IOM uint32_t TMSTARTR; /*!< (@ 0x0000037C) Timer Start Register */ struct { - __IM uint32_t FEAM : 16; /*!< [15..0] Flash Error Address Monitor Register */ - uint32_t : 16; - } FEAML_b; + __IOM uint32_t EN0 : 1; /*!< [0..0] Pulse Output Timer 0 Start */ + __IOM uint32_t EN1 : 1; /*!< [1..1] Pulse Output Timer 1 Start */ + __IOM uint32_t EN2 : 1; /*!< [2..2] Pulse Output Timer 2 Start */ + __IOM uint32_t EN3 : 1; /*!< [3..3] Pulse Output Timer 3 Start */ + __IOM uint32_t EN4 : 1; /*!< [4..4] Pulse Output Timer 4 Start */ + __IOM uint32_t EN5 : 1; /*!< [5..5] Pulse Output Timer 5 Start */ + uint32_t : 26; + } TMSTARTR_b; }; - __IM uint32_t RESERVED22; + __IM uint32_t RESERVED13[32]; union { - __IM uint32_t FEAMH; /*!< (@ 0x000001E8) Flash Error Address Monitor Register H */ + __IOM uint32_t PRSR; /*!< (@ 0x00000400) PRC-TC Status Register */ struct { - __IM uint32_t FEAM : 16; /*!< [15..0] Flash Error Address Monitor Register */ - uint32_t : 16; - } FEAMH_b; + __IOM uint32_t OVRE0 : 1; /*!< [0..0] Relay Packet Overflow Detection Flag 0 */ + __IOM uint32_t OVRE1 : 1; /*!< [1..1] Relay Packet Overflow Detection Flag 1 */ + __IOM uint32_t OVRE2 : 1; /*!< [2..2] Relay Packet Overflow Detection Flag 2 */ + __IOM uint32_t OVRE3 : 1; /*!< [3..3] Relay Packet Overflow Detection Flag 3 */ + uint32_t : 4; + __IOM uint32_t MACE : 1; /*!< [8..8] Originating MAC Address Mismatch Detection Flag */ + uint32_t : 19; + __IOM uint32_t URE0 : 1; /*!< [28..28] Relay Packet Underflow Detection Flag 0 */ + __IOM uint32_t URE1 : 1; /*!< [29..29] Relay Packet Underflow Detection Flag 1 */ + uint32_t : 2; + } PRSR_b; }; - __IM uint32_t RESERVED23; union { - __IM uint32_t FSTATR2; /*!< (@ 0x000001F0) Flash Status Register2 */ + __IOM uint32_t PRIPR; /*!< (@ 0x00000404) PRC-TC Status Notification Permission Register */ struct { - __IM uint32_t ERERR : 1; /*!< [0..0] Erase Error Flag */ - __IM uint32_t PRGERR1 : 1; /*!< [1..1] Program Error Flag */ - __IOM uint32_t PRGERR01 : 1; /*!< [2..2] Program Error Flag 01 */ - __IM uint32_t BCERR : 1; /*!< [3..3] Blank Check Error Flag */ - __IM uint32_t ILGLERR : 1; /*!< [4..4] Illegal Command Error Flag */ - __IM uint32_t EILGLERR : 1; /*!< [5..5] Extra Area Illegal Command Error Flag */ - uint32_t : 26; - } FSTATR2_b; + __IOM uint32_t OVRE0 : 1; /*!< [0..0] PRSR.OVRE0 Status Notification Permission */ + __IOM uint32_t OVRE1 : 1; /*!< [1..1] PRSR.OVRE1 Status Notification Permission */ + __IOM uint32_t OVRE2 : 1; /*!< [2..2] PRSR.OVRE2 Status Notification Permission */ + __IOM uint32_t OVRE3 : 1; /*!< [3..3] PRSR.OVRE3 Status Notification Permission */ + uint32_t : 4; + __IOM uint32_t MACE : 1; /*!< [8..8] PRSR.MACE Status Notification Permission */ + uint32_t : 19; + __IOM uint32_t URE0 : 1; /*!< [28..28] PRSR.URE0 Status Notification Permission */ + __IOM uint32_t URE1 : 1; /*!< [29..29] PRSR.URE1 Status Notification Permission */ + uint32_t : 2; + } PRIPR_b; }; - __IM uint32_t RESERVED24[3951]; - __IOM uint16_t FENTRYR_MF4; /*!< (@ 0x00003FB0) Flash P/E Mode Entry Register for MF4 */ - __IOM uint16_t FENTRYR; /*!< (@ 0x00003FB2) Flash P/E Mode Entry Register */ - __IM uint32_t RESERVED25[3]; - __IOM uint8_t FLWAITR; /*!< (@ 0x00003FC0) Flash Wait Cycle Register */ - __IM uint8_t RESERVED26; - __IM uint16_t RESERVED27; - __IM uint32_t RESERVED28; - __IOM uint8_t PFBER; /*!< (@ 0x00003FC8) Prefetch Buffer Enable Register */ - __IM uint8_t RESERVED29; - __IM uint16_t RESERVED30; -} R_FACI_LP_Type; /*!< Size = 16332 (0x3fcc) */ - -/* =========================================================================================================================== */ -/* ================ R_FCACHE ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Flash Memory Cache (R_FCACHE) - */ - -typedef struct /*!< (@ 0x4001C000) R_FCACHE Structure */ -{ - __IM uint16_t RESERVED[128]; + __IM uint32_t RESERVED14[2]; + __IOM R_ETHERC_EPTPC_COMMON_PR_Type PR[2]; /*!< (@ 0x00000410) Local MAC Address Registers */ union { - __IOM uint16_t FCACHEE; /*!< (@ 0x00000100) Flash Cache Enable Register */ + __IOM uint32_t TRNDISR; /*!< (@ 0x00000420) Packet Transmission Control Register */ struct { - __IOM uint16_t FCACHEEN : 1; /*!< [0..0] FCACHE Enable */ - uint16_t : 15; - } FCACHEE_b; + __IOM uint32_t TDIS : 2; /*!< [1..0] Packet Transmission Control */ + uint32_t : 30; + } TRNDISR_b; }; - __IM uint16_t RESERVED1; + __IM uint32_t RESERVED15[3]; union { - __IOM uint16_t FCACHEIV; /*!< (@ 0x00000104) Flash Cache Invalidate Register */ + __IOM uint32_t TRNMR; /*!< (@ 0x00000430) Relay Mode Register */ struct { - __IOM uint16_t FCACHEIV : 1; /*!< [0..0] Flash Cache Invalidate Register */ - uint16_t : 15; - } FCACHEIV_b; + __IOM uint32_t MOD : 1; /*!< [0..0] Cut-Through Mode */ + uint32_t : 7; + __IOM uint32_t FWD0 : 1; /*!< [8..8] Channel 0 Relay Enable */ + __IOM uint32_t FWD1 : 1; /*!< [9..9] Channel 1 Relay Enable */ + uint32_t : 22; + } TRNMR_b; }; - __IM uint16_t RESERVED2[11]; union { - __IOM uint8_t FLWT; /*!< (@ 0x0000011C) Flash Wait Cycle Register */ + __IOM uint32_t TRNCTTDR; /*!< (@ 0x00000434) Cut-Through Transfer Start Threshold Register */ struct { - __IOM uint8_t FLWT : 3; /*!< [2..0] Flash Wait Cycle */ - uint8_t : 5; - } FLWT_b; + __IOM uint32_t THVAL : 11; /*!< [10..0] FIFO Read Start ThresholdThreshold for starting to read + * data from the relay FIFO in cut-through mode (specified + * as the number of bytes)NOTE1: A value cannot be set in + * the lower-order 2 bits. These bits are fixed to 0.NOTE2: + * A value of less than 96 bytes cannot be set. */ + uint32_t : 21; + } TRNCTTDR_b; }; - __IM uint8_t RESERVED3; - __IM uint16_t RESERVED4; -} R_FCACHE_Type; /*!< Size = 288 (0x120) */ +} R_ETHERC_EPTPC_COMMON_Type; /*!< Size = 1080 (0x438) */ /* =========================================================================================================================== */ -/* ================ R_GLCDC ================ */ +/* ================ R_FACI_HP_CMD ================ */ /* =========================================================================================================================== */ /** - * @brief Graphics LCD Controller (R_GLCDC) + * @brief Flash Application Command Interface Command-Issuing Area (R_FACI_HP_CMD) */ -typedef struct /*!< (@ 0x400E0000) R_GLCDC Structure */ +typedef struct /*!< (@ 0x407E0000) R_FACI_HP_CMD Structure */ { union { - __IOM uint32_t GR1_CLUT0[256]; /*!< (@ 0x00000000) Color Palette 0 Plane for Graphics 1 Plane */ + __IOM uint16_t FACI_CMD16; /*!< (@ 0x00000000) FACI Command Issuing Area (halfword access) */ + __IOM uint8_t FACI_CMD8; /*!< (@ 0x00000000) FACI Command Issuing Area (halfword access) */ + }; +} R_FACI_HP_CMD_Type; /*!< Size = 2 (0x2) */ + +/* =========================================================================================================================== */ +/* ================ R_FACI_HP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Flash Application Command Interface (R_FACI_HP) + */ + +typedef struct /*!< (@ 0x407FE000) R_FACI_HP Structure */ +{ + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint8_t FASTAT; /*!< (@ 0x00000010) Flash Access Status */ struct { - __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics - * m Plane */ - } GR1_CLUT0_b[256]; + __IM uint8_t ECRCT : 1; /*!< [0..0] ECRCT */ + uint8_t : 2; + __IOM uint8_t DFAE : 1; /*!< [3..3] Data Flash Access Error */ + __IM uint8_t CMDLK : 1; /*!< [4..4] Command Lock */ + uint8_t : 2; + __IOM uint8_t CFAE : 1; /*!< [7..7] Code Flash Access Error */ + } FASTAT_b; }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; union { - __IOM uint32_t GR1_CLUT1[256]; /*!< (@ 0x00000400) Color Palette 1 Plane for Graphics 1 Plane */ + __IOM uint8_t FAEINT; /*!< (@ 0x00000014) Flash Access Error Interrupt Enable */ struct { - __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics - * m Plane */ - } GR1_CLUT1_b[256]; + __IOM uint8_t ECRCTIE : 1; /*!< [0..0] Error Correct Interrupt Enable */ + uint8_t : 2; + __IOM uint8_t DFAEIE : 1; /*!< [3..3] Data Flash Access Error Interrupt Enable */ + __IOM uint8_t CMDLKIE : 1; /*!< [4..4] Command Lock Interrupt Enable */ + uint8_t : 2; + __IOM uint8_t CFAEIE : 1; /*!< [7..7] Code Flash Access Error Interrupt Enable */ + } FAEINT_b; }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; union { - __IOM uint32_t GR2_CLUT0[256]; /*!< (@ 0x00000800) Color Palette 0 Plane for Graphics 2 Plane */ + __IOM uint8_t FRDYIE; /*!< (@ 0x00000018) Flash Ready Interrupt Enable */ struct { - __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics - * m Plane */ - } GR2_CLUT0_b[256]; + __IOM uint8_t FRDYIE : 1; /*!< [0..0] FRDY Interrupt Enable */ + uint8_t : 7; + } FRDYIE_b; }; + __IM uint8_t RESERVED5; + __IM uint16_t RESERVED6; + __IM uint32_t RESERVED7[5]; union { - __IOM uint32_t GR2_CLUT1[256]; /*!< (@ 0x00000C00) Color Palette 1 Plane for Graphics 2 Plane */ + __IOM uint32_t FSADDR; /*!< (@ 0x00000030) Flash Start Address */ struct { - __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ - __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics - * m Plane */ - } GR2_CLUT1_b[256]; + __IOM uint32_t FSA : 32; /*!< [31..0] Start Address of Flash Sequencer Command Target Area + * These bits can be written when FRDY bit of FSTATR register + * is "1". Writing to these bits in FRDY = "0" is ignored. */ + } FSADDR_b; }; - __IOM R_GLCDC_BG_Type BG; /*!< (@ 0x00001000) Background Registers */ - __IM uint32_t RESERVED[57]; - __IOM R_GLCDC_GR_Type GR[2]; /*!< (@ 0x00001100) Layer Registers */ - __IOM R_GLCDC_GAM_Type GAM[3]; /*!< (@ 0x00001300) Gamma Settings */ - __IOM R_GLCDC_OUT_Type OUT; /*!< (@ 0x000013C0) Output Control Registers */ - __IM uint32_t RESERVED1[6]; - __IOM R_GLCDC_TCON_Type TCON; /*!< (@ 0x00001400) Timing Control Registers */ - __IM uint32_t RESERVED2[5]; - __IOM R_GLCDC_SYSCNT_Type SYSCNT; /*!< (@ 0x00001440) GLCDC System Control Registers */ -} R_GLCDC_Type; /*!< Size = 5204 (0x1454) */ -/* =========================================================================================================================== */ -/* ================ R_GPT0 ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint32_t FEADDR; /*!< (@ 0x00000034) Flash End Address */ -/** - * @brief General PWM Timer (R_GPT0) - */ + struct + { + __IOM uint32_t FEA : 32; /*!< [31..0] End Address of Flash Sequencer Command Target Area Specifies + * end address of target area in "Blank Check" command. These + * bits can be written when FRDY bit of FSTATR register is + * "1". Writing to these bits in FRDY = "0" is ignored. */ + } FEADDR_b; + }; + __IM uint32_t RESERVED8[3]; -typedef struct /*!< (@ 0x40078000) R_GPT0 Structure */ -{ union { - __IOM uint32_t GTWP; /*!< (@ 0x00000000) General PWM Timer Write-Protection Register */ + __IOM uint16_t FMEPROT; /*!< (@ 0x00000044) Flash P/E Mode Entry Protection Register */ struct { - __IOM uint32_t WP : 1; /*!< [0..0] Register Write Disable */ - uint32_t : 7; - __OM uint32_t PRKEY : 8; /*!< [15..8] GTWP Key Code */ - uint32_t : 16; - } GTWP_b; + __IOM uint16_t CEPROT : 1; /*!< [0..0] Code Flash P/E Mode Entry ProtectionWriting to this bit + * is only possible when the FRDY bit in the FSTATR register + * is 1. Writing to this bit while the FRDY bit = 0 isignored.Writing + * to this bit is only possible when 16 bits are written and + * the value written to the KEY bits is D9h.Written values + * are not retained by these bits (always read as 0x00).Only + * secure access can write to this register. Both secure access + * and non-secure read access are allowed. Non-secure writeaccess + * is denied, but TrustZo */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FMEPROT_b; }; + __IM uint16_t RESERVED9; + __IM uint32_t RESERVED10[12]; union { - __IOM uint32_t GTSTR; /*!< (@ 0x00000004) General PWM Timer Software Start Register */ + __IOM uint16_t FBPROT0; /*!< (@ 0x00000078) Flash Block Protection Register */ struct { - __IOM uint32_t CSTRT0 : 1; /*!< [0..0] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT1 : 1; /*!< [1..1] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT2 : 1; /*!< [2..2] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT3 : 1; /*!< [3..3] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT4 : 1; /*!< [4..4] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT5 : 1; /*!< [5..5] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT6 : 1; /*!< [6..6] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT7 : 1; /*!< [7..7] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT8 : 1; /*!< [8..8] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT9 : 1; /*!< [9..9] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT10 : 1; /*!< [10..10] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT11 : 1; /*!< [11..11] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT12 : 1; /*!< [12..12] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - __IOM uint32_t CSTRT13 : 1; /*!< [13..13] Channel GTCNT Count StartRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter stop. 1 - * means counter running. */ - uint32_t : 18; - } GTSTR_b; + __IOM uint16_t BPCN0 : 1; /*!< [0..0] Block Protection for Non-secure CancelThis bit can be + * written when the FRDY bit in the FSTATR register is 1. + * Writing to this bit is ignored when the FRDY bit is 0.Writing + * to this bit is only possible when 16 bits are written and + * the value written to the KEY[7:0] bits is 0x78.Written + * values are not retained by these bits (always read as 0x00). */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FBPROT0_b; }; + __IM uint16_t RESERVED11; union { - __IOM uint32_t GTSTP; /*!< (@ 0x00000008) General PWM Timer Software Stop Register */ + __IOM uint16_t FBPROT1; /*!< (@ 0x0000007C) Flash Block Protection for Secure Register */ struct { - __IOM uint32_t CSTOP0 : 1; /*!< [0..0] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP1 : 1; /*!< [1..1] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP2 : 1; /*!< [2..2] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP3 : 1; /*!< [3..3] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP4 : 1; /*!< [4..4] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP5 : 1; /*!< [5..5] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP6 : 1; /*!< [6..6] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP7 : 1; /*!< [7..7] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP8 : 1; /*!< [8..8] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP9 : 1; /*!< [9..9] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP10 : 1; /*!< [10..10] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP11 : 1; /*!< [11..11] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP12 : 1; /*!< [12..12] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - __IOM uint32_t CSTOP13 : 1; /*!< [13..13] Channel GTCNT Count StopRead data shows each channel's - * counter status (GTCR.CST bit). 0 means counter runnning. - * 1 means counter stop. */ - uint32_t : 18; - } GTSTP_b; + __IOM uint16_t BPCN1 : 1; /*!< [0..0] Block Protection for Secure CancelWriting to this bit + * is only possible when the FRDY bit in the FSTATR register + * is 1. Writing to this bit while FRDY bit = 0 is ignored.Writing + * to this bit is only possible when 16 bits are written and + * the value written to the KEY[7:0] bits is 0xB1.Written + * values are not retained by these bits (always read as 0x00). */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FBPROT1_b; }; + __IM uint16_t RESERVED12; union { - __OM uint32_t GTCLR; /*!< (@ 0x0000000C) General PWM Timer Software Clear Register */ + __IM uint32_t FSTATR; /*!< (@ 0x00000080) Flash Status */ struct { - __OM uint32_t CCLR0 : 1; /*!< [0..0] Channel GTCNT Count Clear */ - __OM uint32_t CCLR1 : 1; /*!< [1..1] Channel GTCNT Count Clear */ - __OM uint32_t CCLR2 : 1; /*!< [2..2] Channel GTCNT Count Clear */ - __OM uint32_t CCLR3 : 1; /*!< [3..3] Channel GTCNT Count Clear */ - __OM uint32_t CCLR4 : 1; /*!< [4..4] Channel GTCNT Count Clear */ - __OM uint32_t CCLR5 : 1; /*!< [5..5] Channel GTCNT Count Clear */ - __OM uint32_t CCLR6 : 1; /*!< [6..6] Channel GTCNT Count Clear */ - __OM uint32_t CCLR7 : 1; /*!< [7..7] Channel GTCNT Count Clear */ - __OM uint32_t CCLR8 : 1; /*!< [8..8] Channel GTCNT Count Clear */ - __OM uint32_t CCLR9 : 1; /*!< [9..9] Channel GTCNT Count Clear */ - __OM uint32_t CCLR10 : 1; /*!< [10..10] Channel GTCNT Count Clear */ - __OM uint32_t CCLR11 : 1; /*!< [11..11] Channel GTCNT Count Clear */ - __OM uint32_t CCLR12 : 1; /*!< [12..12] Channel GTCNT Count Clear */ - __OM uint32_t CCLR13 : 1; /*!< [13..13] Channel GTCNT Count Clear */ - uint32_t : 18; - } GTCLR_b; + uint32_t : 6; + __IM uint32_t FLWEERR : 1; /*!< [6..6] Flash Write/Erase Protect Error Flag */ + uint32_t : 1; + __IM uint32_t PRGSPD : 1; /*!< [8..8] Programming-Suspended Status */ + __IM uint32_t ERSSPD : 1; /*!< [9..9] Erasure-Suspended Status */ + __IM uint32_t DBFULL : 1; /*!< [10..10] Data Buffer Full */ + __IM uint32_t SUSRDY : 1; /*!< [11..11] Suspend Ready */ + __IM uint32_t PRGERR : 1; /*!< [12..12] Programming Error */ + __IM uint32_t ERSERR : 1; /*!< [13..13] Erasure Error */ + __IM uint32_t ILGLERR : 1; /*!< [14..14] Illegal Command Error */ + __IM uint32_t FRDY : 1; /*!< [15..15] Flash Ready */ + uint32_t : 4; + __IM uint32_t OTERR : 1; /*!< [20..20] Other Error */ + __IOM uint32_t SECERR : 1; /*!< [21..21] Security Error */ + __IM uint32_t FESETERR : 1; /*!< [22..22] FENTRY Setting Error */ + __IM uint32_t ILGCOMERR : 1; /*!< [23..23] Illegal Command Error */ + uint32_t : 8; + } FSTATR_b; }; union { - __IOM uint32_t GTSSR; /*!< (@ 0x00000010) General PWM Timer Start Source Select Register */ + __IOM uint16_t FENTRYR; /*!< (@ 0x00000084) Program/Erase Mode Entry */ struct { - __IOM uint32_t SSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Start Enable */ - __IOM uint32_t SSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Start Enable */ - __IOM uint32_t SSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * Counter Start Enable */ - __IOM uint32_t SSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * Counter Start Enable */ - __IOM uint32_t SSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * Counter Start Enable */ - __IOM uint32_t SSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * Counter Start Enable */ - __IOM uint32_t SSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * Counter Start Enable */ - __IOM uint32_t SSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * Counter Start Enable */ - __IOM uint32_t SSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * Counter Start Enable */ - __IOM uint32_t SSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * Counter Start Enable */ - __IOM uint32_t SSELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Start Enable */ - __IOM uint32_t SSELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Start Enable */ - uint32_t : 7; - __IOM uint32_t CSTRT : 1; /*!< [31..31] Software Source Counter Start Enable */ - } GTSSR_b; + __IOM uint16_t FENTRYC : 1; /*!< [0..0] Code Flash P/E Mode Entry These bits can be written when + * FRDY bit in FSTATR register is "1". Writing to this bit + * in FRDY = "0" is ignored. Writing to these bits is enabled + * only when this register is accessed in 16-bit size and + * H'AA is written to KEY bits */ + uint16_t : 6; + __IOM uint16_t FENTRYD : 1; /*!< [7..7] Data Flash P/E Mode Entry These bits can be written when + * FRDY bit in FSTATR register is "1". Writing to this bit + * in FRDY = "0" is ignored. Writing to these bits is enabled + * only when this register is accessed in 16-bit size and + * H'AA is written to KEY bits. */ + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FENTRYR_b; }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14; union { - __IOM uint32_t GTPSR; /*!< (@ 0x00000014) General PWM Timer Stop Source Select Register */ + __IOM uint16_t FSUINITR; /*!< (@ 0x0000008C) Flash Sequencer Set-up Initialize */ struct { - __IOM uint32_t PSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Stop Enable */ - __IOM uint32_t PSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Stop Enable */ - __IOM uint32_t PSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * Counter Stop Enable */ - __IOM uint32_t PSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * Counter Stop Enable */ - __IOM uint32_t PSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * Counter Stop Enable */ - __IOM uint32_t PSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * Counter Stop Enable */ - __IOM uint32_t PSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * Counter Stop Enable */ - __IOM uint32_t PSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * Counter Stop Enable */ - __IOM uint32_t PSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * Counter Stop Enable */ - __IOM uint32_t PSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * Counter Stop Enable */ - __IOM uint32_t PSELCA : 1; /*!< [16..16] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCB : 1; /*!< [17..17] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCC : 1; /*!< [18..18] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCD : 1; /*!< [19..19] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCE : 1; /*!< [20..20] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCF : 1; /*!< [21..21] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCG : 1; /*!< [22..22] ELC_GPTA Event Source Counter Stop Enable */ - __IOM uint32_t PSELCH : 1; /*!< [23..23] ELC_GPTA Event Source Counter Stop Enable */ - uint32_t : 7; - __IOM uint32_t CSTOP : 1; /*!< [31..31] Software Source Counter Stop Enable */ - } GTPSR_b; + __IOM uint16_t SUINIT : 1; /*!< [0..0] Set-up Initialization This bit can be written when FRDY + * bit of FSTATR register is "1". Writing to this bit in FRDY + * = "0" is ignored. Writing to these bits is enabled only + * when this register is accessed in 16-bit size and H'2D + * is written to KEY bits. */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FSUINITR_b; }; + __IM uint16_t RESERVED15; + __IM uint32_t RESERVED16[4]; union { - __IOM uint32_t GTCSR; /*!< (@ 0x00000018) General PWM Timer Clear Source Select Register */ + __IM uint16_t FCMDR; /*!< (@ 0x000000A0) Flash Sequencer Command */ struct { - __IOM uint32_t CSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Clear Enable */ - __IOM uint32_t CSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Clear Enable */ - __IOM uint32_t CSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * Counter Clear Enable */ - __IOM uint32_t CSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * Counter Clear Enable */ - __IOM uint32_t CSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * Counter Clear Enable */ - __IOM uint32_t CSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * Counter Clear Enable */ - __IOM uint32_t CSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * Counter Clear Enable */ - __IOM uint32_t CSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * Counter Clear Enable */ - __IOM uint32_t CSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * Counter Clear Enable */ - __IOM uint32_t CSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * Counter Clear Enable */ - __IOM uint32_t CSELCA : 1; /*!< [16..16] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCB : 1; /*!< [17..17] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCC : 1; /*!< [18..18] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCD : 1; /*!< [19..19] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCE : 1; /*!< [20..20] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCF : 1; /*!< [21..21] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCG : 1; /*!< [22..22] ELC_GPTA Event Source Counter Clear Enable */ - __IOM uint32_t CSELCH : 1; /*!< [23..23] ELC_GPTA Event Source Counter Clear Enable */ - uint32_t : 7; - __IOM uint32_t CCLR : 1; /*!< [31..31] Software Source Counter Clear Enable */ - } GTCSR_b; + __IM uint16_t PCMDR : 8; /*!< [7..0] Previous Command Register */ + __IM uint16_t CMDR : 8; /*!< [15..8] Command Register */ + } FCMDR_b; }; + __IM uint16_t RESERVED17; + __IM uint32_t RESERVED18[7]; union { - __IOM uint32_t GTUPSR; /*!< (@ 0x0000001C) General PWM Timer Up Count Source Select Register */ + __IM uint16_t FPESTAT; /*!< (@ 0x000000C0) Program/Erase Error Status */ struct { - __IOM uint32_t USGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Count Up Enable */ - __IOM uint32_t USGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Count Up Enable */ - __IOM uint32_t USCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * Counter Count Up Enable */ - __IOM uint32_t USCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * Counter Count Up Enable */ - __IOM uint32_t USCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * Counter Count Up Enable */ - __IOM uint32_t USCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * Counter Count Up Enable */ - __IOM uint32_t USCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * Counter Count Up Enable */ - __IOM uint32_t USCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * Counter Count Up Enable */ - __IOM uint32_t USCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * Counter Count Up Enable */ - __IOM uint32_t USCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * Counter Count Up Enable */ - __IOM uint32_t USELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Count Up Enable */ - __IOM uint32_t USELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Count Up Enable */ - uint32_t : 8; - } GTUPSR_b; + __IM uint16_t PEERRST : 8; /*!< [7..0] P/E Error Status */ + uint16_t : 8; + } FPESTAT_b; }; + __IM uint16_t RESERVED19; + __IM uint32_t RESERVED20[3]; union { - __IOM uint32_t GTDNSR; /*!< (@ 0x00000020) General PWM Timer Down Count Source Select Register */ + __IOM uint8_t FBCCNT; /*!< (@ 0x000000D0) Blank Check Control */ struct { - __IOM uint32_t DSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Count Down Enable */ - __IOM uint32_t DSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Count Down Enable */ - __IOM uint32_t DSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * Counter Count Down Enable */ - __IOM uint32_t DSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * Counter Count Down Enable */ - __IOM uint32_t DSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * Counter Count Down Enable */ - __IOM uint32_t DSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * Counter Count Down Enable */ - __IOM uint32_t DSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * Counter Count Down Enable */ - __IOM uint32_t DSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * Counter Count Down Enable */ - __IOM uint32_t DSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * Counter Count Down Enable */ - __IOM uint32_t DSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * Counter Count Down Enable */ - __IOM uint32_t DSELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Count Down Enable */ - __IOM uint32_t DSELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Count Down Enable */ - uint32_t : 8; - } GTDNSR_b; + __IOM uint8_t BCDIR : 1; /*!< [0..0] Blank Check Direction */ + uint8_t : 7; + } FBCCNT_b; }; + __IM uint8_t RESERVED21; + __IM uint16_t RESERVED22; union { - __IOM uint32_t GTICASR; /*!< (@ 0x00000024) General PWM Timer Input Capture Source Select - * Register A */ + __IM uint8_t FBCSTAT; /*!< (@ 0x000000D4) Blank Check Status */ struct { - __IOM uint32_t ASGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source GTCCRA Input Capture - * Enable */ - __IOM uint32_t ASGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source GTCCRA Input Capture - * Enable */ - __IOM uint32_t ASGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source GTCCRA Input Capture - * Enable */ - __IOM uint32_t ASGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source GTCCRA Input Capture - * Enable */ - __IOM uint32_t ASCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCA : 1; /*!< [16..16] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCB : 1; /*!< [17..17] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCC : 1; /*!< [18..18] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCD : 1; /*!< [19..19] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCE : 1; /*!< [20..20] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCF : 1; /*!< [21..21] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCG : 1; /*!< [22..22] ELC_GPT Event Source GTCCRA Input Capture Enable */ - __IOM uint32_t ASELCH : 1; /*!< [23..23] ELC_GPT Event Source GTCCRA Input Capture Enable */ - uint32_t : 8; - } GTICASR_b; + __IM uint8_t BCST : 1; /*!< [0..0] Blank Check Status Bit */ + uint8_t : 7; + } FBCSTAT_b; }; + __IM uint8_t RESERVED23; + __IM uint16_t RESERVED24; union { - __IOM uint32_t GTICBSR; /*!< (@ 0x00000028) General PWM Timer Input Capture Source Select - * Register B */ + __IM uint32_t FPSADDR; /*!< (@ 0x000000D8) Programmed Area Start Address */ struct { - __IOM uint32_t BSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source GTCCRB Input Capture - * Enable */ - __IOM uint32_t BSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source GTCCRB Input Capture - * Enable */ - __IOM uint32_t BSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source GTCCRB Input Capture - * Enable */ - __IOM uint32_t BSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source GTCCRB Input Capture - * Enable */ - __IOM uint32_t BSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source - * GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCA : 1; /*!< [16..16] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCB : 1; /*!< [17..17] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCC : 1; /*!< [18..18] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCD : 1; /*!< [19..19] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCE : 1; /*!< [20..20] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCF : 1; /*!< [21..21] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCG : 1; /*!< [22..22] ELC_GPT Event Source GTCCRB Input Capture Enable */ - __IOM uint32_t BSELCH : 1; /*!< [23..23] ELC_GPT Event Source GTCCRB Input Capture Enable */ - uint32_t : 8; - } GTICBSR_b; + __IM uint32_t PSADR : 19; /*!< [18..0] Programmed Area Start Address NOTE: Indicates address + * of the first programmed data which is found in "Blank Check" + * command execution. */ + uint32_t : 13; + } FPSADDR_b; }; union { - __IOM uint32_t GTCR; /*!< (@ 0x0000002C) General PWM Timer Control Register */ + __IM uint32_t FAWMON; /*!< (@ 0x000000DC) Flash Access Window Monitor */ struct { - __IOM uint32_t CST : 1; /*!< [0..0] Count Start */ - uint32_t : 15; - __IOM uint32_t MD : 3; /*!< [18..16] Mode Select */ - uint32_t : 5; - __IOM uint32_t TPCS : 3; /*!< [26..24] Timer Prescaler Select */ - uint32_t : 5; - } GTCR_b; + __IM uint32_t FAWS : 11; /*!< [10..0] Start Sector Address for Access Window NOTE: These bits + * indicate the start sector address for setting the access + * window that is located in the configuration area. */ + uint32_t : 4; + __IM uint32_t FSPR : 1; /*!< [15..15] Protection Flag of programming the Access Window, Boot + * Flag and Temporary Boot Swap Control and "Config Clear" + * command execution */ + __IM uint32_t FAWE : 11; /*!< [26..16] End Sector Address for Access Window NOTE: These bits + * indicate the end sector address for setting the access + * window that is located in the configuration area. */ + uint32_t : 4; + __IM uint32_t BTFLG : 1; /*!< [31..31] Flag of Start-Up area select for Boot Swap */ + } FAWMON_b; }; union { - __IOM uint32_t GTUDDTYC; /*!< (@ 0x00000030) General PWM Timer Count Direction and Duty Setting - * Register */ + __IOM uint16_t FCPSR; /*!< (@ 0x000000E0) FCU Process Switch */ struct { - __IOM uint32_t UD : 1; /*!< [0..0] Count Direction Setting */ - __IOM uint32_t UDF : 1; /*!< [1..1] Forcible Count Direction Setting */ - uint32_t : 14; - __IOM uint32_t OADTY : 2; /*!< [17..16] GTIOCA Output Duty Setting */ - __IOM uint32_t OADTYF : 1; /*!< [18..18] Forcible GTIOCA Output Duty Setting */ - __IOM uint32_t OADTYR : 1; /*!< [19..19] GTIOCA Output Value Selecting after Releasing 0 percent/100 - * percent Duty Setting */ - uint32_t : 4; - __IOM uint32_t OBDTY : 2; /*!< [25..24] GTIOCB Output Duty Setting */ - __IOM uint32_t OBDTYF : 1; /*!< [26..26] Forcible GTIOCB Output Duty Setting */ - __IOM uint32_t OBDTYR : 1; /*!< [27..27] GTIOCB Output Value Selecting after Releasing 0 percent/100 - * percent Duty Setting */ - uint32_t : 4; - } GTUDDTYC_b; + __IOM uint16_t ESUSPMD : 1; /*!< [0..0] Erasure-Suspended Mode */ + uint16_t : 15; + } FCPSR_b; }; + __IM uint16_t RESERVED25; union { - __IOM uint32_t GTIOR; /*!< (@ 0x00000034) General PWM Timer I/O Control Register */ + __IOM uint16_t FPCKAR; /*!< (@ 0x000000E4) Flash Sequencer Processing Clock Frequency Notification */ struct { - __IOM uint32_t GTIOA : 5; /*!< [4..0] GTIOCA Pin Function Select */ - uint32_t : 1; - __IOM uint32_t OADFLT : 1; /*!< [6..6] GTIOCA Pin Output Value Setting at the Count Stop */ - __IOM uint32_t OAHLD : 1; /*!< [7..7] GTIOCA Pin Output Setting at the Start/Stop Count */ - __IOM uint32_t OAE : 1; /*!< [8..8] GTIOCA Pin Output Enable */ - __IOM uint32_t OADF : 2; /*!< [10..9] GTIOCA Pin Disable Value Setting */ - uint32_t : 2; - __IOM uint32_t NFAEN : 1; /*!< [13..13] Noise Filter A Enable */ - __IOM uint32_t NFCSA : 2; /*!< [15..14] Noise Filter A Sampling Clock Select */ - __IOM uint32_t GTIOB : 5; /*!< [20..16] GTIOCB Pin Function Select */ - uint32_t : 1; - __IOM uint32_t OBDFLT : 1; /*!< [22..22] GTIOCB Pin Output Value Setting at the Count Stop */ - __IOM uint32_t OBHLD : 1; /*!< [23..23] GTIOCB Pin Output Setting at the Start/Stop Count */ - __IOM uint32_t OBE : 1; /*!< [24..24] GTIOCB Pin Output Enable */ - __IOM uint32_t OBDF : 2; /*!< [26..25] GTIOCB Pin Disable Value Setting */ - uint32_t : 2; - __IOM uint32_t NFBEN : 1; /*!< [29..29] Noise Filter B Enable */ - __IOM uint32_t NFCSB : 2; /*!< [31..30] Noise Filter B Sampling Clock Select */ - } GTIOR_b; + __IOM uint16_t PCKA : 8; /*!< [7..0] Flash Sequencer Processing Clock Frequency These bits + * can be written when FRDY bit in FSTATR register is "1". + * Writing to this bit in FRDY = "0" is ignored. Writing to + * these bits is enabled only when this register is accessed + * in 16-bit size and H'1E is written to KEY bits. */ + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FPCKAR_b; }; + __IM uint16_t RESERVED26; union { - __IOM uint32_t GTINTAD; /*!< (@ 0x00000038) General PWM Timer Interrupt Output Setting Register */ + __IOM uint16_t FSUACR; /*!< (@ 0x000000E8) Flash Start-Up Area Control Register */ struct { - uint32_t : 24; - __IOM uint32_t GRP : 2; /*!< [25..24] Output Disable Source Select */ - uint32_t : 2; - __IOM uint32_t GRPDTE : 1; /*!< [28..28] Dead Time Error Output Disable Request Enable */ - __IOM uint32_t GRPABH : 1; /*!< [29..29] Same Time Output Level High Disable Request Enable */ - __IOM uint32_t GRPABL : 1; /*!< [30..30] Same Time Output Level Low Disable Request Enable */ - uint32_t : 1; - } GTINTAD_b; + __IOM uint16_t SAS : 2; /*!< [1..0] Start Up Area Select These bits can be written when FRDY + * bit in FSTATR register is "1". Writing to this bit in FRDY + * = "0" is ignored. Writing to these bits is enabled only + * when this register is accessed in 16-bit size and H'66 + * is written to KEY bits. */ + uint16_t : 6; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FSUACR_b; }; + __IM uint16_t RESERVED27; +} R_FACI_HP_Type; /*!< Size = 236 (0xec) */ - union - { - __IOM uint32_t GTST; /*!< (@ 0x0000003C) General PWM Timer Status Register */ +/* =========================================================================================================================== */ +/* ================ R_FACI_LP ================ */ +/* =========================================================================================================================== */ - struct - { - __IOM uint32_t TCFA : 1; /*!< [0..0] Input Capture/Compare Match Flag A */ - __IOM uint32_t TCFB : 1; /*!< [1..1] Input Capture/Compare Match Flag B */ - __IOM uint32_t TCFC : 1; /*!< [2..2] Input Compare Match Flag C */ - __IOM uint32_t TCFD : 1; /*!< [3..3] Input Compare Match Flag D */ - __IOM uint32_t TCFE : 1; /*!< [4..4] Input Compare Match Flag E */ - __IOM uint32_t TCFF : 1; /*!< [5..5] Input Compare Match Flag F */ - __IOM uint32_t TCFPO : 1; /*!< [6..6] Overflow Flag */ - __IOM uint32_t TCFPU : 1; /*!< [7..7] Underflow Flag */ - __IM uint32_t ITCNT : 3; /*!< [10..8] GTCIV/GTCIU Interrupt Skipping Count Counter(Counter - * for counting the number of times a timer interrupt has - * been skipped.) */ - uint32_t : 4; - __IM uint32_t TUCF : 1; /*!< [15..15] Count Direction Flag */ - __IOM uint32_t ADTRAUF : 1; /*!< [16..16] GTADTRA Compare Match (Up-Counting) A/D Converter Start - * Request Interrupt Enable */ - __IOM uint32_t ADTRADF : 1; /*!< [17..17] GTADTRA Compare Match(Down-Counting) A/D Convertor - * Start Request Flag */ - __IOM uint32_t ADTRBUF : 1; /*!< [18..18] GTADTRB Compare Match(Up-Counting) A/D Convertor Start - * Request Flag */ - __IOM uint32_t ADTRBDF : 1; /*!< [19..19] GTADTRB Compare Match(Down-Counting) A/D Convertor - * Start Request Flag */ - uint32_t : 4; - __IM uint32_t ODF : 1; /*!< [24..24] Output Disable Flag */ - uint32_t : 3; - __IM uint32_t DTEF : 1; /*!< [28..28] Dead Time Error Flag */ - __IM uint32_t OABHF : 1; /*!< [29..29] Same Time Output Level High Disable Request Enable */ - __IM uint32_t OABLF : 1; /*!< [30..30] Same Time Output Level Low Disable Request Enable */ - uint32_t : 1; - } GTST_b; - }; +/** + * @brief Flash Application Command Interface (R_FACI_LP) + */ + +typedef struct /*!< (@ 0x407EC000) R_FACI_LP Structure */ +{ + __IM uint32_t RESERVED[36]; + __IOM uint8_t DFLCTL; /*!< (@ 0x00000090) Flash P/E Mode Control Register */ + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3[27]; union { - __IOM uint32_t GTBER; /*!< (@ 0x00000040) General PWM Timer Buffer Enable Register */ + __IOM uint8_t FPMCR; /*!< (@ 0x00000100) Flash P/E Mode Control Register */ struct { - __IOM uint32_t BD0 : 1; /*!< [0..0] BD[0]: GTCCR Buffer Operation Disable */ - __IOM uint32_t BD1 : 1; /*!< [1..1] BD[1]: GTPR Buffer Operation Disable */ - __IOM uint32_t BD2 : 1; /*!< [2..2] BD[2]: GTADTR Buffer Operation DisableBD */ - __IOM uint32_t BD3 : 1; /*!< [3..3] BD[3]: GTDV Buffer Operation DisableBD[2] */ - uint32_t : 12; - __IOM uint32_t CCRA : 2; /*!< [17..16] GTCCRA Buffer Operation */ - __IOM uint32_t CCRB : 2; /*!< [19..18] GTCCRB Buffer Operation */ - __IOM uint32_t PR : 2; /*!< [21..20] GTPR Buffer Operation */ - __OM uint32_t CCRSWT : 1; /*!< [22..22] GTCCRA and GTCCRB Forcible Buffer OperationThis bit - * is read as 0. */ - uint32_t : 1; - __IOM uint32_t ADTTA : 2; /*!< [25..24] GTADTRA Buffer Transfer Timing Select in the Triangle - * wavesNOTE: In the Saw waves, values other than 0 0: Transfer - * at an underflow (in down-counting) or overflow (in up-counting) - * is performed. */ - __IOM uint32_t ADTDA : 1; /*!< [26..26] GTADTRA Double Buffer Operation */ - uint32_t : 1; - __IOM uint32_t ADTTB : 2; /*!< [29..28] GTADTRB Buffer Transfer Timing Select in the Triangle - * wavesNOTE: In the Saw waves, values other than 0 0: Transfer - * at an underflow (in down-counting) or overflow (in up-counting) - * is performed. */ - __IOM uint32_t ADTDB : 1; /*!< [30..30] GTADTRB Double Buffer Operation */ - uint32_t : 1; - } GTBER_b; + uint8_t : 1; + __IOM uint8_t FMS0 : 1; /*!< [1..1] Flash Operating Mode Select 0FMS2,1,0: 000: Read mode + * 011: Discharge mode 1 111: Discharge mode 2 101: Code Flash + * P/E mode 010: Data flash P/E mode Others: Setting prohibited. */ + uint8_t : 1; + __IOM uint8_t RPDIS : 1; /*!< [3..3] Code Flash P/E Disable */ + __IOM uint8_t FMS1 : 1; /*!< [4..4] The bit to make data flash a programming modeRefer to + * the description of the FMS0 bit. */ + uint8_t : 1; + __IOM uint8_t VLPE : 1; /*!< [6..6] Low-Voltage P/E Mode Enable */ + __IOM uint8_t FMS2 : 1; /*!< [7..7] Flash Operating Mode Select 2.Refer to the description + * of the FMS0 bit. */ + } FPMCR_b; }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; union { - __IOM uint32_t GTITC; /*!< (@ 0x00000044) General PWM Timer Interrupt and A/D Converter - * Start Request Skipping Setting Register */ + __IOM uint8_t FASR; /*!< (@ 0x00000104) Flash Area Select Register */ struct { - __IOM uint32_t ITLA : 1; /*!< [0..0] GTCCRA Compare Match/Input Capture Interrupt Link */ - __IOM uint32_t ITLB : 1; /*!< [1..1] GTCCRB Compare Match/Input Capture Interrupt Link */ - __IOM uint32_t ITLC : 1; /*!< [2..2] GTCCRC Compare Match Interrupt Link */ - __IOM uint32_t ITLD : 1; /*!< [3..3] GTCCRD Compare Match Interrupt Link */ - __IOM uint32_t ITLE : 1; /*!< [4..4] GTCCRE Compare Match Interrupt Link */ - __IOM uint32_t ITLF : 1; /*!< [5..5] GTCCRF Compare Match Interrupt Link */ - __IOM uint32_t IVTC : 2; /*!< [7..6] GPT_OVF/GPT_UDF Interrupt Skipping Function Select */ - __IOM uint32_t IVTT : 3; /*!< [10..8] GPT_OVF/GPT_UDF Interrupt Skipping Count Select */ - uint32_t : 1; - __IOM uint32_t ADTAL : 1; /*!< [12..12] GTADTRA A/D Converter Start Request Link */ - uint32_t : 1; - __IOM uint32_t ADTBL : 1; /*!< [14..14] GTADTRB A/D Converter Start Request Link */ - uint32_t : 17; - } GTITC_b; + __IOM uint8_t EXS : 1; /*!< [0..0] Extra area select */ + uint8_t : 7; + } FASR_b; }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; union { - __IOM uint32_t GTCNT; /*!< (@ 0x00000048) General PWM Timer Counter */ + __IOM uint16_t FSARL; /*!< (@ 0x00000108) Flash Processing Start Address Register L */ struct { - __IOM uint32_t GTCNT : 32; /*!< [31..0] Counter */ - } GTCNT_b; + __IOM uint16_t FSAR15_0 : 16; /*!< [15..0] Start address */ + } FSARL_b; }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9; union { - __IOM uint32_t GTCCR[6]; /*!< (@ 0x0000004C) General PWM Timer Compare Capture Register */ + __IOM uint16_t FSARH; /*!< (@ 0x00000110) Flash Processing Start Address Register H */ struct { - __IOM uint32_t GTCCR : 32; /*!< [31..0] Compare Capture Register A */ - } GTCCR_b[6]; + __IOM uint16_t FSAR20_16 : 5; /*!< [4..0] Start address */ + uint16_t : 4; + __IOM uint16_t FSAR31_25 : 7; /*!< [15..9] Start address */ + } FSARH_b; }; + __IM uint16_t RESERVED10; union { - __IOM uint32_t GTPR; /*!< (@ 0x00000064) General PWM Timer Cycle Setting Register */ + __IOM uint8_t FCR; /*!< (@ 0x00000114) Flash Control Register */ struct { - __IOM uint32_t GTPR : 32; /*!< [31..0] Cycle Setting Register */ - } GTPR_b; + __IOM uint8_t CMD : 4; /*!< [3..0] Software Command Setting */ + __IOM uint8_t DRC : 1; /*!< [4..4] Data Read Completion */ + uint8_t : 1; + __IOM uint8_t STOP : 1; /*!< [6..6] Forced Processing Stop */ + __IOM uint8_t OPST : 1; /*!< [7..7] Processing Start */ + } FCR_b; }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12; union { - __IOM uint32_t GTPBR; /*!< (@ 0x00000068) General PWM Timer Cycle Setting Buffer Register */ + __IOM uint16_t FEARL; /*!< (@ 0x00000118) Flash Processing End Address Register L */ struct { - __IOM uint32_t GTPBR : 32; /*!< [31..0] Cycle Setting Buffer Register */ - } GTPBR_b; + __IOM uint16_t FEAR15_0 : 16; /*!< [15..0] End address */ + } FEARL_b; }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14; union { - __IOM uint32_t GTPDBR; /*!< (@ 0x0000006C) General PWM Timer Cycle Setting Double-Buffer - * Register */ + __IOM uint32_t FEARH; /*!< (@ 0x00000120) Flash Processing End Address Register H */ struct { - __IOM uint32_t GTPDBR : 32; /*!< [31..0] Cycle Setting Double-Buffer Register */ - } GTPDBR_b; + __IOM uint32_t FEAR20_16 : 5; /*!< [4..0] End address */ + uint32_t : 4; + __IOM uint32_t FEAR31_25 : 7; /*!< [15..9] End address */ + uint32_t : 16; + } FEARH_b; }; union { - __IOM uint32_t GTADTRA; /*!< (@ 0x00000070) A/D Converter Start Request Timing Register A */ + __IOM uint32_t FRESETR; /*!< (@ 0x00000124) Flash Reset Register */ struct { - __IOM uint32_t GTADTRA : 32; /*!< [31..0] A/D Converter Start Request Timing Register A */ - } GTADTRA_b; + __IOM uint32_t FRESET : 1; /*!< [0..0] Software Reset of the registers */ + uint32_t : 31; + } FRESETR_b; }; union { - __IOM uint32_t GTADTBRA; /*!< (@ 0x00000074) A/D Converter Start Request Timing Buffer Register - * A */ + __IM uint32_t FSTATR00; /*!< (@ 0x00000128) Flash Status Register00 */ struct { - __IOM uint32_t GTADTBRA : 32; /*!< [31..0] A/D Converter Start Request Timing Buffer Register A */ - } GTADTBRA_b; + __IM uint32_t ERERR0 : 1; /*!< [0..0] Erase Error Flag0 */ + __IM uint32_t PRGERR0 : 1; /*!< [1..1] Program Error Flag0 */ + __IM uint32_t PRGERR01 : 1; /*!< [2..2] Program Error Flag 01 */ + __IM uint32_t BCERR0 : 1; /*!< [3..3] Blank Check Error Flag0 */ + __IM uint32_t ILGLERR : 1; /*!< [4..4] Illegal Command Error Flag */ + __IM uint32_t EILGLERR : 1; /*!< [5..5] Extra Area Illegal Command Error Flag */ + uint32_t : 26; + } FSTATR00_b; }; union { - __IOM uint32_t GTADTDBRA; /*!< (@ 0x00000078) A/D Converter Start Request Timing Double-Buffer - * Register A */ + __IM uint32_t FSTATR1; /*!< (@ 0x0000012C) Flash Status Register1 */ struct { - __IOM uint32_t GTADTDBRA : 32; /*!< [31..0] A/D Converter Start Request Timing Double-Buffer Register - * A */ - } GTADTDBRA_b; + uint32_t : 1; + __IM uint32_t DRRDY : 1; /*!< [1..1] Data read request */ + uint32_t : 4; + __IM uint32_t FRDY : 1; /*!< [6..6] End status signal of a sequencer */ + __IM uint32_t EXRDY : 1; /*!< [7..7] End status signal of a Extra programming sequencer */ + uint32_t : 24; + } FSTATR1_b; }; union { - __IOM uint32_t GTADTRB; /*!< (@ 0x0000007C) A/D Converter Start Request Timing Register B */ + __IOM uint32_t FWBL0; /*!< (@ 0x00000130) Flash Write Buffer Register L0 */ struct { - __IOM uint32_t GTADTRB : 32; /*!< [31..0] A/D Converter Start Request Timing Register B */ - } GTADTRB_b; + __IOM uint32_t WDATA : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBL0_b; }; + __IM uint32_t RESERVED15; union { - __IOM uint32_t GTADTBRB; /*!< (@ 0x00000080) A/D Converter Start Request Timing Buffer Register - * B */ + __IOM uint32_t FWBH0; /*!< (@ 0x00000138) Flash Write Buffer Register H0 */ struct { - __IOM uint32_t GTADTBRB : 32; /*!< [31..0] A/D Converter Start Request Timing Buffer Register B */ - } GTADTBRB_b; + __IOM uint32_t WDATA : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBH0_b; }; union { - __IOM uint32_t GTADTDBRB; /*!< (@ 0x00000084) A/D Converter Start Request Timing Double-Buffer - * Register B */ + __IM uint32_t FSTATR01; /*!< (@ 0x0000013C) Flash Status Register01 */ struct { - __IOM uint32_t GTADTDBRB : 32; /*!< [31..0] A/D Converter Start Request Timing Double-Buffer Register - * B */ - } GTADTDBRB_b; + __IM uint32_t ERERR1 : 1; /*!< [0..0] Erase Error Flag1 */ + __IM uint32_t PRGERR1 : 1; /*!< [1..1] Program Error Flag1 */ + uint32_t : 1; + __IM uint32_t BCERR1 : 1; /*!< [3..3] Blank Check Error Flag1 */ + uint32_t : 28; + } FSTATR01_b; }; union { - __IOM uint32_t GTDTCR; /*!< (@ 0x00000088) General PWM Timer Dead Time Control Register */ + __IOM uint32_t FWBL1; /*!< (@ 0x00000140) Flash Write Buffer Register L1 */ struct { - __IOM uint32_t TDE : 1; /*!< [0..0] Negative-Phase Waveform Setting */ - uint32_t : 3; - __IOM uint32_t TDBUE : 1; /*!< [4..4] GTDVU Buffer Operation Enable */ - __IOM uint32_t TDBDE : 1; /*!< [5..5] GTDVD Buffer Operation Enable */ - uint32_t : 2; - __IOM uint32_t TDFER : 1; /*!< [8..8] GTDVD Setting */ - uint32_t : 23; - } GTDTCR_b; + __IOM uint32_t WDATA47_32 : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBL1_b; }; union { - __IOM uint32_t GTDVU; /*!< (@ 0x0000008C) General PWM Timer Dead Time Value Register U */ + __IOM uint32_t FWBH1; /*!< (@ 0x00000144) Flash Write Buffer Register H1 */ struct { - __IOM uint32_t GTDVU : 32; /*!< [31..0] Dead Time Value Register U */ - } GTDVU_b; + __IOM uint32_t WDATA63_48 : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBH1_b; }; union { - __IOM uint32_t GTDVD; /*!< (@ 0x00000090) General PWM Timer Dead Time Value Register D */ + __IM uint32_t FRBL1; /*!< (@ 0x00000148) Flash Read Buffer Register L1 */ struct { - __IOM uint32_t GTDVD : 32; /*!< [31..0] Dead Time Value Register D */ - } GTDVD_b; + __IM uint32_t RDATA47_32 : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBL1_b; }; union { - __IOM uint32_t GTDBU; /*!< (@ 0x00000094) General PWM Timer Dead Time Buffer Register U */ + __IM uint32_t FRBH1; /*!< (@ 0x0000014C) Flash Read Buffer Register H1 */ struct { - __IOM uint32_t GTDVU : 32; /*!< [31..0] Dead Time Buffer Register U */ - } GTDBU_b; + __IM uint32_t RDATA63_48 : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBH1_b; }; + __IM uint32_t RESERVED16[12]; union { - __IOM uint32_t GTDBD; /*!< (@ 0x00000098) General PWM Timer Dead Time Buffer Register D */ + __OM uint32_t FPR; /*!< (@ 0x00000180) Protection Unlock Register */ struct { - __IOM uint32_t GTDBD : 32; /*!< [31..0] Dead Time Buffer Register D */ - } GTDBD_b; + __OM uint32_t FPR : 8; /*!< [7..0] Protection Unlock Register */ + uint32_t : 24; + } FPR_b; }; union { - __IM uint32_t GTSOS; /*!< (@ 0x0000009C) General PWM Timer Output Protection Function - * Status Register */ + __IM uint32_t FPSR; /*!< (@ 0x00000184) Protection Unlock Status Register */ struct { - __IM uint32_t SOS : 2; /*!< [1..0] Output Protection Function Status */ - uint32_t : 30; - } GTSOS_b; + __IM uint32_t PERR : 1; /*!< [0..0] Protect Error Flag */ + uint32_t : 31; + } FPSR_b; }; union { - __IOM uint32_t GTSOTR; /*!< (@ 0x000000A0) General PWM Timer Output Protection Function - * Temporary Release Register */ + __IM uint32_t FRBL0; /*!< (@ 0x00000188) Flash Read Buffer Register L0 */ struct { - __IOM uint32_t SOTR : 1; /*!< [0..0] Output Protection Function Temporary Release */ - uint32_t : 31; - } GTSOTR_b; + __IM uint32_t RDATA : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBL0_b; }; -} R_GPT0_Type; /*!< Size = 164 (0xa4) */ - -/* =========================================================================================================================== */ -/* ================ R_GPT_ODC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief PWM Delay Generation Circuit (R_GPT_ODC) - */ + __IM uint32_t RESERVED17; -typedef struct /*!< (@ 0x4007B000) R_GPT_ODC Structure */ -{ union { - __IOM uint16_t GTDLYCR1; /*!< (@ 0x00000000) PWM Output Delay Control Register1 */ + __IM uint32_t FRBH0; /*!< (@ 0x00000190) Flash Read Buffer Register H0 */ struct { - __IOM uint16_t DLLEN : 1; /*!< [0..0] DLL Operation Enable */ - __IOM uint16_t DLYRST : 1; /*!< [1..1] PWM Delay Generation Circuit Reset */ - uint16_t : 6; - __IOM uint16_t DLLMOD : 1; /*!< [8..8] DLL Mode Select */ - uint16_t : 7; - } GTDLYCR1_b; + __IM uint32_t RDATA : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBH0_b; }; + __IM uint32_t RESERVED18[11]; union { - __IOM uint16_t GTDLYCR2; /*!< (@ 0x00000002) PWM Output Delay Control Register2 */ + __IM uint32_t FSCMR; /*!< (@ 0x000001C0) Flash Start-Up Setting Monitor Register */ struct { - __IOM uint16_t DLYBS0 : 1; /*!< [0..0] PWM Delay Generation Circuit bypass */ - __IOM uint16_t DLYBS1 : 1; /*!< [1..1] PWM Delay Generation Circuit bypass */ - __IOM uint16_t DLYBS2 : 1; /*!< [2..2] PWM Delay Generation Circuit bypass */ - __IOM uint16_t DLYBS3 : 1; /*!< [3..3] PWM Delay Generation Circuit bypass */ - uint16_t : 4; - __IOM uint16_t DLYEN0 : 1; /*!< [8..8] PWM Delay Generation Circuit enable */ - uint16_t : 3; - __IOM uint16_t DLYDENB0 : 1; /*!< [12..12] PWM Delay Generation Circuit Disenable for GTIOCB */ - uint16_t : 3; - } GTDLYCR2_b; + uint32_t : 8; + __IM uint32_t SASMF : 1; /*!< [8..8] Start-up Area Setting Monitor Flag */ + uint32_t : 5; + __IM uint32_t FSPR : 1; /*!< [14..14] Access Window Protection Flag */ + uint32_t : 17; + } FSCMR_b; }; - __IM uint16_t RESERVED[10]; - __IOM R_GPT_ODC_GTDLYR_Type GTDLYR[4]; /*!< (@ 0x00000018) PWM DELAY RISING */ - __IOM R_GPT_ODC_GTDLYR_Type GTDLYF[4]; /*!< (@ 0x00000028) PWM DELAY FALLING */ -} R_GPT_ODC_Type; /*!< Size = 56 (0x38) */ - -/* =========================================================================================================================== */ -/* ================ R_GPT_OPS ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Output Phase Switching for GPT (R_GPT_OPS) - */ + __IM uint32_t RESERVED19; -typedef struct /*!< (@ 0x40078FF0) R_GPT_OPS Structure */ -{ union { - __IOM uint32_t OPSCR; /*!< (@ 0x00000000) Output Phase Switching Control Register */ + __IM uint32_t FAWSMR; /*!< (@ 0x000001C8) Flash Access Window Start Address Monitor Register */ struct { - __IOM uint32_t UF : 1; /*!< [0..0] Input Phase Soft Setting WFThis bit sets the input phase - * by the software settings.This bit setting is valid when - * the OPSCR.FB bit = 1. */ - __IOM uint32_t VF : 1; /*!< [1..1] Input Phase Soft Setting VFThis bit sets the input phase - * by the software settings.This bit setting is valid when - * the OPSCR.FB bit = 1. */ - __IOM uint32_t WF : 1; /*!< [2..2] Input Phase Soft Setting UFThis bit sets the input phase - * by the software settings.This bit setting is valid when - * the OPSCR.FB bit = 1. */ - uint32_t : 1; - __IM uint32_t U : 1; /*!< [4..4] Input U-Phase MonitorThis bit monitors the state of the - * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa - * e settings (UF/VF/WF) */ - __IM uint32_t V : 1; /*!< [5..5] Input V-Phase MonitorThis bit monitors the state of the - * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa - * e settings (UF/VF/WF) */ - __IM uint32_t W : 1; /*!< [6..6] Input W-Phase MonitorThis bit monitors the state of the - * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa - * e settings (UF/VF/WF) */ - uint32_t : 1; - __IOM uint32_t EN : 1; /*!< [8..8] Enable-Phase Output Control */ - uint32_t : 7; - __IOM uint32_t FB : 1; /*!< [16..16] External Feedback Signal EnableThis bit selects the - * input phase from the software settings and external input. */ - __IOM uint32_t P : 1; /*!< [17..17] Positive-Phase Output (P) Control */ - __IOM uint32_t N : 1; /*!< [18..18] Negative-Phase Output (N) Control */ - __IOM uint32_t INV : 1; /*!< [19..19] Invert-Phase Output Control */ - __IOM uint32_t RV : 1; /*!< [20..20] Output phase rotation direction reversal */ - __IOM uint32_t ALIGN : 1; /*!< [21..21] Input phase alignment */ - uint32_t : 2; - __IOM uint32_t GRP : 2; /*!< [25..24] Output disabled source selection */ - __IOM uint32_t GODF : 1; /*!< [26..26] Group output disable function */ - uint32_t : 2; - __IOM uint32_t NFEN : 1; /*!< [29..29] External Input Noise Filter Enable */ - __IOM uint32_t NFCS : 2; /*!< [31..30] External Input Noise Filter Clock selectionNoise filter - * sampling clock setting of the external input. */ - } OPSCR_b; + __IM uint32_t FAWS : 12; /*!< [11..0] Flash Access Window Start Address */ + uint32_t : 20; + } FAWSMR_b; }; -} R_GPT_OPS_Type; /*!< Size = 4 (0x4) */ - -/* =========================================================================================================================== */ -/* ================ R_GPT_POEG0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Port Output Enable for GPT (R_GPT_POEG0) - */ + __IM uint32_t RESERVED20; -typedef struct /*!< (@ 0x40042000) R_GPT_POEG0 Structure */ -{ union { - __IOM uint32_t POEGG; /*!< (@ 0x00000000) POEG Group Setting Register */ + __IM uint32_t FAWEMR; /*!< (@ 0x000001D0) Flash Access Window End Address Monitor Register */ struct { - __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ - __IOM uint32_t IOCF : 1; /*!< [1..1] Real Time Overcurrent Detection Flag */ - __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ - __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ - __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection EnableNote: Can be modified only - * once after a reset. */ - __IOM uint32_t IOCE : 1; /*!< [5..5] Enable for GPT Output-Disable RequestNote: Can be modified - * only once after a reset. */ - __IOM uint32_t OSTPE : 1; /*!< [6..6] Oscillation Stop Detection EnableNote: Can be modified - * only once after a reset. */ - uint32_t : 1; - __IOM uint32_t CDRE0 : 1; /*!< [8..8] Comparator Disable Request Enable. Note: Can be modified - * only once after a reset. */ - __IOM uint32_t CDRE1 : 1; /*!< [9..9] Comparator Disable Request Enable. Note: Can be modified - * only once after a reset. */ - __IOM uint32_t CDRE2 : 1; /*!< [10..10] Comparator Disable Request Enable. Note: Can be modified - * only once after a reset. */ - __IOM uint32_t CDRE3 : 1; /*!< [11..11] Comparator Disable Request Enable. Note: Can be modified - * only once after a reset. */ - __IOM uint32_t CDRE4 : 1; /*!< [12..12] Comparator Disable Request Enable. Note: Can be modified - * only once after a reset. */ - __IOM uint32_t CDRE5 : 1; /*!< [13..13] Comparator Disable Request Enable. Note: Can be modified - * only once after a reset. */ - uint32_t : 2; - __IM uint32_t ST : 1; /*!< [16..16] GTETRG Input Status Flag */ - uint32_t : 11; - __IOM uint32_t INV : 1; /*!< [28..28] GTETRG Input Reverse */ - __IOM uint32_t NFEN : 1; /*!< [29..29] Noise Filter Enable */ - __IOM uint32_t NFCS : 2; /*!< [31..30] Noise Filter Clock Select */ - } POEGG_b; + __IM uint32_t FAWE : 12; /*!< [11..0] Flash Access Window End Address */ + uint32_t : 20; + } FAWEMR_b; }; -} R_GPT_POEG0_Type; /*!< Size = 4 (0x4) */ + __IM uint32_t RESERVED21; -/* =========================================================================================================================== */ -/* ================ R_ICU ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint32_t FISR; /*!< (@ 0x000001D8) Flash Initial Setting Register */ -/** - * @brief Interrupt Controller Unit (R_ICU) - */ + struct + { + __IOM uint32_t PCKA : 6; /*!< [5..0] Peripheral Clock Notification */ + __IOM uint32_t SAS : 2; /*!< [7..6] Temporary boot swap mode */ + uint32_t : 24; + } FISR_b; + }; -typedef struct /*!< (@ 0x40006000) R_ICU Structure */ -{ union { - __IOM uint8_t IRQCR[16]; /*!< (@ 0x00000000) IRQ Control Register [0..15] */ + __IOM uint32_t FEXCR; /*!< (@ 0x000001DC) Flash Extra Area Control Register */ struct { - __IOM uint8_t IRQMD : 2; /*!< [1..0] IRQ Detection Sense Select */ - uint8_t : 2; - __IOM uint8_t FCLKSEL : 2; /*!< [5..4] IRQ Digital Filter Sampling Clock Select */ - uint8_t : 1; - __IOM uint8_t FLTEN : 1; /*!< [7..7] IRQ Digital Filter Enable */ - } IRQCR_b[16]; + __IOM uint32_t CMD : 3; /*!< [2..0] Processing Start) */ + uint32_t : 4; + __IOM uint32_t OPST : 1; /*!< [7..7] Software Command Setting */ + uint32_t : 24; + } FEXCR_b; }; - __IM uint32_t RESERVED[60]; union { - __IOM uint8_t NMICR; /*!< (@ 0x00000100) NMI Pin Interrupt Control Register */ + __IM uint32_t FEAML; /*!< (@ 0x000001E0) Flash Error Address Monitor Register L */ struct { - __IOM uint8_t NMIMD : 1; /*!< [0..0] NMI Detection Set */ - uint8_t : 3; - __IOM uint8_t NFCLKSEL : 2; /*!< [5..4] NMI Digital Filter Sampling Clock Select */ - uint8_t : 1; - __IOM uint8_t NFLTEN : 1; /*!< [7..7] NMI Digital Filter Enable */ - } NMICR_b; + __IM uint32_t FEAM : 16; /*!< [15..0] Flash Error Address Monitor Register */ + uint32_t : 16; + } FEAML_b; }; - __IM uint8_t RESERVED1; - __IM uint16_t RESERVED2; - __IM uint32_t RESERVED3[7]; + __IM uint32_t RESERVED22; union { - __IOM uint16_t NMIER; /*!< (@ 0x00000120) Non-Maskable Interrupt Enable Register */ + __IM uint32_t FEAMH; /*!< (@ 0x000001E8) Flash Error Address Monitor Register H */ struct { - __IOM uint16_t IWDTEN : 1; /*!< [0..0] IWDT Underflow/Refresh Error Interrupt Enable */ - __IOM uint16_t WDTEN : 1; /*!< [1..1] WDT Underflow/Refresh Error Interrupt Enable */ - __IOM uint16_t LVD1EN : 1; /*!< [2..2] Voltage-Monitoring 1 Interrupt Enable */ - __IOM uint16_t LVD2EN : 1; /*!< [3..3] Voltage-Monitoring 2 Interrupt Enable */ - __IOM uint16_t VBATTEN : 1; /*!< [4..4] VBATT monitor Interrupt Enable */ - uint16_t : 1; - __IOM uint16_t OSTEN : 1; /*!< [6..6] Oscillation Stop Detection Interrupt Enable */ - __IOM uint16_t NMIEN : 1; /*!< [7..7] NMI Pin Interrupt Enable */ - __IOM uint16_t RPEEN : 1; /*!< [8..8] RAM Parity Error Interrupt Enable */ - __IOM uint16_t RECCEN : 1; /*!< [9..9] RAM ECC Error Interrupt Enable */ - __IOM uint16_t BUSSEN : 1; /*!< [10..10] MPU Bus Slave Error Interrupt Enable */ - __IOM uint16_t BUSMEN : 1; /*!< [11..11] MPU Bus Master Error Interrupt Enable */ - __IOM uint16_t SPEEN : 1; /*!< [12..12] CPU Stack pointer monitor Interrupt Enable */ - uint16_t : 3; - } NMIER_b; + __IM uint32_t FEAM : 16; /*!< [15..0] Flash Error Address Monitor Register */ + uint32_t : 16; + } FEAMH_b; }; - __IM uint16_t RESERVED4; - __IM uint32_t RESERVED5[3]; + __IM uint32_t RESERVED23; union { - __IOM uint16_t NMICLR; /*!< (@ 0x00000130) Non-Maskable Interrupt Status Clear Register */ + __IM uint32_t FSTATR2; /*!< (@ 0x000001F0) Flash Status Register2 */ struct { - __OM uint16_t IWDTCLR : 1; /*!< [0..0] IWDT Clear */ - __OM uint16_t WDTCLR : 1; /*!< [1..1] WDT Clear */ - __OM uint16_t LVD1CLR : 1; /*!< [2..2] LVD1 Clear */ - __OM uint16_t LVD2CLR : 1; /*!< [3..3] LVD2 Clear */ - __OM uint16_t VBATTCLR : 1; /*!< [4..4] VBATT Clear */ - uint16_t : 1; - __OM uint16_t OSTCLR : 1; /*!< [6..6] OST Clear */ - __OM uint16_t NMICLR : 1; /*!< [7..7] NMI Clear */ - __OM uint16_t RPECLR : 1; /*!< [8..8] SRAM Parity Error Clear */ - __OM uint16_t RECCCLR : 1; /*!< [9..9] SRAM ECC Error Clear */ - __OM uint16_t BUSSCLR : 1; /*!< [10..10] Bus Slave Error Clear */ - __OM uint16_t BUSMCLR : 1; /*!< [11..11] Bus Master Error Clear */ - __OM uint16_t SPECLR : 1; /*!< [12..12] CPU Stack Pointer Monitor Interrupt Clear */ - uint16_t : 3; - } NMICLR_b; + __IM uint32_t ERERR : 1; /*!< [0..0] Erase Error Flag */ + __IM uint32_t PRGERR1 : 1; /*!< [1..1] Program Error Flag */ + __IOM uint32_t PRGERR01 : 1; /*!< [2..2] Program Error Flag 01 */ + __IM uint32_t BCERR : 1; /*!< [3..3] Blank Check Error Flag */ + __IM uint32_t ILGLERR : 1; /*!< [4..4] Illegal Command Error Flag */ + __IM uint32_t EILGLERR : 1; /*!< [5..5] Extra Area Illegal Command Error Flag */ + uint32_t : 26; + } FSTATR2_b; }; - __IM uint16_t RESERVED6; - __IM uint32_t RESERVED7[3]; + __IM uint32_t RESERVED24[3951]; + __IOM uint16_t FENTRYR_MF4; /*!< (@ 0x00003FB0) Flash P/E Mode Entry Register for MF4 */ + __IOM uint16_t FENTRYR; /*!< (@ 0x00003FB2) Flash P/E Mode Entry Register */ + __IM uint32_t RESERVED25[3]; + __IOM uint8_t FLWAITR; /*!< (@ 0x00003FC0) Flash Wait Cycle Register */ + __IM uint8_t RESERVED26; + __IM uint16_t RESERVED27; + __IM uint32_t RESERVED28; + __IOM uint8_t PFBER; /*!< (@ 0x00003FC8) Prefetch Buffer Enable Register */ + __IM uint8_t RESERVED29; + __IM uint16_t RESERVED30; +} R_FACI_LP_Type; /*!< Size = 16332 (0x3fcc) */ + +/* =========================================================================================================================== */ +/* ================ R_FCACHE ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Flash Memory Cache (R_FCACHE) + */ + +typedef struct /*!< (@ 0x4001C000) R_FCACHE Structure */ +{ + __IM uint16_t RESERVED[128]; union { - __IM uint16_t NMISR; /*!< (@ 0x00000140) Non-Maskable Interrupt Status Register */ + __IOM uint16_t FCACHEE; /*!< (@ 0x00000100) Flash Cache Enable Register */ struct { - __IM uint16_t IWDTST : 1; /*!< [0..0] IWDT Underflow/Refresh Error Status Flag */ - __IM uint16_t WDTST : 1; /*!< [1..1] WDT Underflow/Refresh Error Status Flag */ - __IM uint16_t LVD1ST : 1; /*!< [2..2] Voltage-Monitoring 1 Interrupt Status Flag */ - __IM uint16_t LVD2ST : 1; /*!< [3..3] Voltage-Monitoring 2 Interrupt Status Flag */ - __IM uint16_t VBATTST : 1; /*!< [4..4] VBATT monitor Interrupt Status Flag */ - uint16_t : 1; - __IM uint16_t OSTST : 1; /*!< [6..6] Oscillation Stop Detection Interrupt Status Flag */ - __IM uint16_t NMIST : 1; /*!< [7..7] NMI Status Flag */ - __IM uint16_t RPEST : 1; /*!< [8..8] RAM Parity Error Interrupt Status Flag */ - __IM uint16_t RECCST : 1; /*!< [9..9] RAM ECC Error Interrupt Status Flag */ - __IM uint16_t BUSSST : 1; /*!< [10..10] MPU Bus Slave Error Interrupt Status Flag */ - __IM uint16_t BUSMST : 1; /*!< [11..11] MPU Bus Master Error Interrupt Status Flag */ - __IM uint16_t SPEST : 1; /*!< [12..12] CPU Stack pointer monitor Interrupt Status Flag */ - uint16_t : 3; - } NMISR_b; + __IOM uint16_t FCACHEEN : 1; /*!< [0..0] FCACHE Enable */ + uint16_t : 15; + } FCACHEE_b; }; - __IM uint16_t RESERVED8; - __IM uint32_t RESERVED9[23]; + __IM uint16_t RESERVED1; union { - __IOM uint32_t WUPEN; /*!< (@ 0x000001A0) Wake Up Interrupt Enable Register */ + __IOM uint16_t FCACHEIV; /*!< (@ 0x00000104) Flash Cache Invalidate Register */ struct { - __IOM uint32_t IRQWUPEN0 : 1; /*!< [0..0] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN1 : 1; /*!< [1..1] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN2 : 1; /*!< [2..2] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN3 : 1; /*!< [3..3] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN4 : 1; /*!< [4..4] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN5 : 1; /*!< [5..5] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN6 : 1; /*!< [6..6] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN7 : 1; /*!< [7..7] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN8 : 1; /*!< [8..8] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN9 : 1; /*!< [9..9] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN10 : 1; /*!< [10..10] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN11 : 1; /*!< [11..11] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN12 : 1; /*!< [12..12] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN13 : 1; /*!< [13..13] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN14 : 1; /*!< [14..14] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IRQWUPEN15 : 1; /*!< [15..15] IRQ interrupt S/W standby returns enable */ - __IOM uint32_t IWDTWUPEN : 1; /*!< [16..16] IWDT interrupt S/W standby returns enable */ - __IOM uint32_t KEYWUPEN : 1; /*!< [17..17] Key interrupt S/W standby returns enable */ - __IOM uint32_t LVD1WUPEN : 1; /*!< [18..18] LVD1 interrupt S/W standby returns enable */ - __IOM uint32_t LVD2WUPEN : 1; /*!< [19..19] LVD2 interrupt S/W standby returns enable */ - __IOM uint32_t VBATTWUPEN : 1; /*!< [20..20] VBATT monitor interrupt S/W standby returns enable */ - uint32_t : 1; - __IOM uint32_t ACMPHS0WUPEN : 1; /*!< [22..22] ACMPHS0 interrupt S/W standby returns enable bit */ - __IOM uint32_t ACMPLP0WUPEN : 1; /*!< [23..23] ACMPLP0 interrupt S/W standby returns enable */ - __IOM uint32_t RTCALMWUPEN : 1; /*!< [24..24] RTC alarm interrupt S/W standby returns enable */ - __IOM uint32_t RTCPRDWUPEN : 1; /*!< [25..25] RCT period interrupt S/W standby returns enable */ - __IOM uint32_t USBHSWUPEN : 1; /*!< [26..26] USBHS interrupt S/W standby returns enable bit */ - __IOM uint32_t USBFSWUPEN : 1; /*!< [27..27] USBFS interrupt S/W standby returns enable */ - __IOM uint32_t AGT1UDWUPEN : 1; /*!< [28..28] AGT1 underflow interrupt S/W standby returns enable */ - __IOM uint32_t AGT1CAWUPEN : 1; /*!< [29..29] AGT1 compare match A interrupt S/W standby returns - * enable */ - __IOM uint32_t AGT1CBWUPEN : 1; /*!< [30..30] AGT1 compare match B interrupt S/W standby returns - * enable */ - __IOM uint32_t IIC0WUPEN : 1; /*!< [31..31] IIC0 address match interrupt S/W standby returns enable */ - } WUPEN_b; - }; - __IM uint32_t RESERVED10[23]; - - union - { - __IOM uint16_t SELSR0; /*!< (@ 0x00000200) Snooze Event Link Setting Register */ - - struct - { - __IOM uint16_t SELS : 9; /*!< [8..0] SYS Event Link Select */ - uint16_t : 7; - } SELSR0_b; + __IOM uint16_t FCACHEIV : 1; /*!< [0..0] Flash Cache Invalidate Register */ + uint16_t : 15; + } FCACHEIV_b; }; - __IM uint16_t RESERVED11; - __IM uint32_t RESERVED12[31]; + __IM uint16_t RESERVED2[11]; union { - __IOM uint32_t DELSR[8]; /*!< (@ 0x00000280) DMAC Event Link Setting Register */ + __IOM uint8_t FLWT; /*!< (@ 0x0000011C) Flash Wait Cycle Register */ struct { - __IOM uint32_t DELS : 9; /*!< [8..0] Event selection to DMAC Start request */ - uint32_t : 7; - __IOM uint32_t IR : 1; /*!< [16..16] Interrupt Status Flag for DMAC NOTE: Writing 1 to the - * IR flag is prohibited. */ - uint32_t : 15; - } DELSR_b[8]; + __IOM uint8_t FLWT : 3; /*!< [2..0] Flash Wait Cycle */ + uint8_t : 5; + } FLWT_b; }; - __IM uint32_t RESERVED13[24]; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4[17]; union { - __IOM uint32_t IELSR[96]; /*!< (@ 0x00000300) ICU Event Link Setting Register [0..95] */ + __IOM uint16_t FSAR; /*!< (@ 0x00000140) Flash Security Attribution Register */ struct { - __IOM uint32_t IELS : 9; /*!< [8..0] ICU Event selection to NVICSet the number for the event - * signal to be linked . */ - uint32_t : 7; - __IOM uint32_t IR : 1; /*!< [16..16] Interrupt Status Flag */ - uint32_t : 7; - __IOM uint32_t DTCE : 1; /*!< [24..24] DTC Activation Enable */ - uint32_t : 7; - } IELSR_b[96]; + __IOM uint16_t FLWTSA : 1; /*!< [0..0] FLWT Security Attribution */ + uint16_t : 7; + __IOM uint16_t FCKMHZSA : 1; /*!< [8..8] FCKMHZ Security Attribution */ + uint16_t : 7; + } FSAR_b; }; -} R_ICU_Type; /*!< Size = 1152 (0x480) */ +} R_FCACHE_Type; /*!< Size = 322 (0x142) */ /* =========================================================================================================================== */ -/* ================ R_IIC0 ================ */ +/* ================ R_GLCDC ================ */ /* =========================================================================================================================== */ /** - * @brief I2C Bus Interface (R_IIC0) + * @brief Graphics LCD Controller (R_GLCDC) */ -typedef struct /*!< (@ 0x40053000) R_IIC0 Structure */ +typedef struct /*!< (@ 0x400E0000) R_GLCDC Structure */ { union { - __IOM uint8_t ICCR1; /*!< (@ 0x00000000) I2C Bus Control Register 1 */ + __IOM uint32_t GR1_CLUT0[256]; /*!< (@ 0x00000000) Color Palette 0 Plane for Graphics 1 Plane */ struct { - __IM uint8_t SDAI : 1; /*!< [0..0] SDA Line Monitor */ - __IM uint8_t SCLI : 1; /*!< [1..1] SCL Line Monitor */ - __IOM uint8_t SDAO : 1; /*!< [2..2] SDA Output Control/Monitor */ - __IOM uint8_t SCLO : 1; /*!< [3..3] SCL Output Control/Monitor */ - __IOM uint8_t SOWP : 1; /*!< [4..4] SCLO/SDAO Write Protect */ - __IOM uint8_t CLO : 1; /*!< [5..5] Extra SCL Clock Cycle Output */ - __IOM uint8_t IICRST : 1; /*!< [6..6] I2C Bus Interface Internal ResetNote:If an internal reset - * is initiated using the IICRST bit for a bus hang-up occurred - * during communication with the master device in slave mode, - * the states may become different between the slave device - * and the master device (due to the difference in the bit - * counter information). */ - __IOM uint8_t ICE : 1; /*!< [7..7] I2C Bus Interface Enable */ - } ICCR1_b; + __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics + * m Plane */ + } GR1_CLUT0_b[256]; }; union { - __IOM uint8_t ICCR2; /*!< (@ 0x00000001) I2C Bus Control Register 2 */ + __IOM uint32_t GR1_CLUT1[256]; /*!< (@ 0x00000400) Color Palette 1 Plane for Graphics 1 Plane */ struct { - uint8_t : 1; - __IOM uint8_t ST : 1; /*!< [1..1] Start Condition Issuance RequestSet the ST bit to 1 (start - * condition issuance request) when the BBSY flag is set to - * 0 (bus free state). */ - __IOM uint8_t RS : 1; /*!< [2..2] Restart Condition Issuance RequestNote: Do not set the - * RS bit to 1 while issuing a stop condition. */ - __IOM uint8_t SP : 1; /*!< [3..3] Stop Condition Issuance RequestNote: Writing to the SP - * bit is not possible while the setting of the BBSY flag - * is 0 (bus free state).Note: Do not set the SP bit to 1 - * while a restart condition is being issued. */ - uint8_t : 1; - __IOM uint8_t TRS : 1; /*!< [5..5] Transmit/Receive Mode */ - __IOM uint8_t MST : 1; /*!< [6..6] Master/Slave Mode */ - __IM uint8_t BBSY : 1; /*!< [7..7] Bus Busy Detection Flag */ - } ICCR2_b; + __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics + * m Plane */ + } GR1_CLUT1_b[256]; }; union { - __IOM uint8_t ICMR1; /*!< (@ 0x00000002) I2C Bus Mode Register 1 */ + __IOM uint32_t GR2_CLUT0[256]; /*!< (@ 0x00000800) Color Palette 0 Plane for Graphics 2 Plane */ struct { - __IOM uint8_t BC : 3; /*!< [2..0] Bit Counter */ - __OM uint8_t BCWP : 1; /*!< [3..3] BC Write Protect(This bit is read as 1.) */ - __IOM uint8_t CKS : 3; /*!< [6..4] Internal Reference Clock (fIIC) Selection ( fIIC = PCLKB - * / 2^CKS ) */ - __IOM uint8_t MTWP : 1; /*!< [7..7] MST/TRS Write Protect */ - } ICMR1_b; + __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics + * m Plane */ + } GR2_CLUT0_b[256]; }; union { - __IOM uint8_t ICMR2; /*!< (@ 0x00000003) I2C Bus Mode Register 2 */ + __IOM uint32_t GR2_CLUT1[256]; /*!< (@ 0x00000C00) Color Palette 1 Plane for Graphics 2 Plane */ struct { - __IOM uint8_t TMOS : 1; /*!< [0..0] Timeout Detection Time Select */ - __IOM uint8_t TMOL : 1; /*!< [1..1] Timeout L Count Control */ - __IOM uint8_t TMOH : 1; /*!< [2..2] Timeout H Count Control */ - uint8_t : 1; - __IOM uint8_t SDDL : 3; /*!< [6..4] SDA Output Delay Counter */ - __IOM uint8_t DLCS : 1; /*!< [7..7] SDA Output Delay Clock Source Select */ - } ICMR2_b; + __IOM uint32_t B : 8; /*!< [7..0] B Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t G : 8; /*!< [15..8] G Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t R : 8; /*!< [23..16] R Value of Color Palette n Plane for Graphics m Plane */ + __IOM uint32_t A : 8; /*!< [31..24] Alpha Blending Value of Color Palette n Plane for Graphics + * m Plane */ + } GR2_CLUT1_b[256]; }; + __IOM R_GLCDC_BG_Type BG; /*!< (@ 0x00001000) Background Registers */ + __IM uint32_t RESERVED[57]; + __IOM R_GLCDC_GR_Type GR[2]; /*!< (@ 0x00001100) Layer Registers */ + __IOM R_GLCDC_GAM_Type GAM[3]; /*!< (@ 0x00001300) Gamma Settings */ + __IOM R_GLCDC_OUT_Type OUT; /*!< (@ 0x000013C0) Output Control Registers */ + __IM uint32_t RESERVED1[6]; + __IOM R_GLCDC_TCON_Type TCON; /*!< (@ 0x00001400) Timing Control Registers */ + __IM uint32_t RESERVED2[5]; + __IOM R_GLCDC_SYSCNT_Type SYSCNT; /*!< (@ 0x00001440) GLCDC System Control Registers */ +} R_GLCDC_Type; /*!< Size = 5204 (0x1454) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT0 ================ */ +/* =========================================================================================================================== */ +/** + * @brief General PWM Timer (R_GPT0) + */ + +typedef struct /*!< (@ 0x40078000) R_GPT0 Structure */ +{ union { - __IOM uint8_t ICMR3; /*!< (@ 0x00000004) I2C Bus Mode Register 3 */ + __IOM uint32_t GTWP; /*!< (@ 0x00000000) General PWM Timer Write-Protection Register */ struct { - __IOM uint8_t NF : 2; /*!< [1..0] Noise Filter Stage Selection */ - __IM uint8_t ACKBR : 1; /*!< [2..2] Receive Acknowledge */ - __IOM uint8_t ACKBT : 1; /*!< [3..3] Transmit Acknowledge */ - __IOM uint8_t ACKWP : 1; /*!< [4..4] ACKBT Write Protect */ - __IOM uint8_t RDRFS : 1; /*!< [5..5] RDRF Flag Set Timing Selection */ - __IOM uint8_t WAIT : 1; /*!< [6..6] WAITNote: When the value of the WAIT bit is to be read, - * be sure to read the ICDRR beforehand. */ - __IOM uint8_t SMBS : 1; /*!< [7..7] SMBus/I2C Bus Selection */ - } ICMR3_b; + __IOM uint32_t WP : 1; /*!< [0..0] Register Write Disable */ + __IOM uint32_t STRWP : 1; /*!< [1..1] GTSTR.CSTRT Bit Write Disable */ + __IOM uint32_t STPWP : 1; /*!< [2..2] GTSTP.CSTOP Bit Write Disable */ + __IOM uint32_t CLRWP : 1; /*!< [3..3] GTCLR.CCLR Bit Write Disable */ + __IOM uint32_t CMNWP : 1; /*!< [4..4] Common Register Write Disabled */ + uint32_t : 3; + __OM uint32_t PRKEY : 8; /*!< [15..8] GTWP Key Code */ + uint32_t : 16; + } GTWP_b; }; union { - __IOM uint8_t ICFER; /*!< (@ 0x00000005) I2C Bus Function Enable Register */ + __IOM uint32_t GTSTR; /*!< (@ 0x00000004) General PWM Timer Software Start Register */ struct { - __IOM uint8_t TMOE : 1; /*!< [0..0] Timeout Function Enable */ - __IOM uint8_t MALE : 1; /*!< [1..1] Master Arbitration-Lost Detection Enable */ - __IOM uint8_t NALE : 1; /*!< [2..2] NACK Transmission Arbitration-Lost Detection Enable */ - __IOM uint8_t SALE : 1; /*!< [3..3] Slave Arbitration-Lost Detection Enable */ - __IOM uint8_t NACKE : 1; /*!< [4..4] NACK Reception Transfer Suspension Enable */ - __IOM uint8_t NFE : 1; /*!< [5..5] Digital Noise Filter Circuit Enable */ - __IOM uint8_t SCLE : 1; /*!< [6..6] SCL Synchronous Circuit Enable */ - __IOM uint8_t FMPE : 1; /*!< [7..7] Fast-mode Plus Enable */ - } ICFER_b; + __IOM uint32_t CSTRT0 : 1; /*!< [0..0] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT1 : 1; /*!< [1..1] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT2 : 1; /*!< [2..2] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT3 : 1; /*!< [3..3] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT4 : 1; /*!< [4..4] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT5 : 1; /*!< [5..5] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT6 : 1; /*!< [6..6] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT7 : 1; /*!< [7..7] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT8 : 1; /*!< [8..8] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT9 : 1; /*!< [9..9] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT10 : 1; /*!< [10..10] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT11 : 1; /*!< [11..11] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT12 : 1; /*!< [12..12] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT13 : 1; /*!< [13..13] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + uint32_t : 18; + } GTSTR_b; }; union { - __IOM uint8_t ICSER; /*!< (@ 0x00000006) I2C Bus Status Enable Register */ + __IOM uint32_t GTSTP; /*!< (@ 0x00000008) General PWM Timer Software Stop Register */ struct { - __IOM uint8_t SAR0E : 1; /*!< [0..0] Slave Address Register 0 Enable */ - __IOM uint8_t SAR1E : 1; /*!< [1..1] Slave Address Register 1 Enable */ - __IOM uint8_t SAR2E : 1; /*!< [2..2] Slave Address Register 2 Enable */ - __IOM uint8_t GCAE : 1; /*!< [3..3] General Call Address Enable */ - uint8_t : 1; - __IOM uint8_t DIDE : 1; /*!< [5..5] Device-ID Address Detection Enable */ - uint8_t : 1; - __IOM uint8_t HOAE : 1; /*!< [7..7] Host Address Enable */ - } ICSER_b; - }; - - union - { - __IOM uint8_t ICIER; /*!< (@ 0x00000007) I2C Bus Interrupt Enable Register */ - - struct - { - __IOM uint8_t TMOIE : 1; /*!< [0..0] Timeout Interrupt Request Enable */ - __IOM uint8_t ALIE : 1; /*!< [1..1] Arbitration-Lost Interrupt Request Enable */ - __IOM uint8_t STIE : 1; /*!< [2..2] Start Condition Detection Interrupt Request Enable */ - __IOM uint8_t SPIE : 1; /*!< [3..3] Stop Condition Detection Interrupt Request Enable */ - __IOM uint8_t NAKIE : 1; /*!< [4..4] NACK Reception Interrupt Request Enable */ - __IOM uint8_t RIE : 1; /*!< [5..5] Receive Data Full Interrupt Request Enable */ - __IOM uint8_t TEIE : 1; /*!< [6..6] Transmit End Interrupt Request Enable */ - __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Data Empty Interrupt Request Enable */ - } ICIER_b; + __IOM uint32_t CSTOP0 : 1; /*!< [0..0] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP1 : 1; /*!< [1..1] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP2 : 1; /*!< [2..2] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP3 : 1; /*!< [3..3] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP4 : 1; /*!< [4..4] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP5 : 1; /*!< [5..5] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP6 : 1; /*!< [6..6] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP7 : 1; /*!< [7..7] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP8 : 1; /*!< [8..8] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP9 : 1; /*!< [9..9] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP10 : 1; /*!< [10..10] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP11 : 1; /*!< [11..11] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP12 : 1; /*!< [12..12] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP13 : 1; /*!< [13..13] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + uint32_t : 18; + } GTSTP_b; }; union { - __IOM uint8_t ICSR1; /*!< (@ 0x00000008) I2C Bus Status Register 1 */ + __OM uint32_t GTCLR; /*!< (@ 0x0000000C) General PWM Timer Software Clear Register */ struct { - __IOM uint8_t AAS0 : 1; /*!< [0..0] Slave Address 0 Detection Flag */ - __IOM uint8_t AAS1 : 1; /*!< [1..1] Slave Address 1 Detection Flag */ - __IOM uint8_t AAS2 : 1; /*!< [2..2] Slave Address 2 Detection Flag */ - __IOM uint8_t GCA : 1; /*!< [3..3] General Call Address Detection Flag */ - uint8_t : 1; - __IOM uint8_t DID : 1; /*!< [5..5] Device-ID Address Detection Flag */ - uint8_t : 1; - __IOM uint8_t HOA : 1; /*!< [7..7] Host Address Detection Flag */ - } ICSR1_b; + __OM uint32_t CCLR0 : 1; /*!< [0..0] Channel GTCNT Count Clear */ + __OM uint32_t CCLR1 : 1; /*!< [1..1] Channel GTCNT Count Clear */ + __OM uint32_t CCLR2 : 1; /*!< [2..2] Channel GTCNT Count Clear */ + __OM uint32_t CCLR3 : 1; /*!< [3..3] Channel GTCNT Count Clear */ + __OM uint32_t CCLR4 : 1; /*!< [4..4] Channel GTCNT Count Clear */ + __OM uint32_t CCLR5 : 1; /*!< [5..5] Channel GTCNT Count Clear */ + __OM uint32_t CCLR6 : 1; /*!< [6..6] Channel GTCNT Count Clear */ + __OM uint32_t CCLR7 : 1; /*!< [7..7] Channel GTCNT Count Clear */ + __OM uint32_t CCLR8 : 1; /*!< [8..8] Channel GTCNT Count Clear */ + __OM uint32_t CCLR9 : 1; /*!< [9..9] Channel GTCNT Count Clear */ + __OM uint32_t CCLR10 : 1; /*!< [10..10] Channel GTCNT Count Clear */ + __OM uint32_t CCLR11 : 1; /*!< [11..11] Channel GTCNT Count Clear */ + __OM uint32_t CCLR12 : 1; /*!< [12..12] Channel GTCNT Count Clear */ + __OM uint32_t CCLR13 : 1; /*!< [13..13] Channel GTCNT Count Clear */ + uint32_t : 18; + } GTCLR_b; }; union { - __IOM uint8_t ICSR2; /*!< (@ 0x00000009) I2C Bus Status Register 2 */ + __IOM uint32_t GTSSR; /*!< (@ 0x00000010) General PWM Timer Start Source Select Register */ struct { - __IOM uint8_t TMOF : 1; /*!< [0..0] Timeout Detection Flag */ - __IOM uint8_t AL : 1; /*!< [1..1] Arbitration-Lost Flag */ - __IOM uint8_t START : 1; /*!< [2..2] Start Condition Detection Flag */ - __IOM uint8_t STOP : 1; /*!< [3..3] Stop Condition Detection Flag */ - __IOM uint8_t NACKF : 1; /*!< [4..4] NACK Detection Flag */ - __IOM uint8_t RDRF : 1; /*!< [5..5] Receive Data Full Flag */ - __IOM uint8_t TEND : 1; /*!< [6..6] Transmit End Flag */ - __IM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ - } ICSR2_b; + __IOM uint32_t SSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Start Enable */ + __IOM uint32_t SSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Start Enable */ + __IOM uint32_t SSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Start Enable */ + __IOM uint32_t SSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Start Enable */ + __IOM uint32_t SSELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Start Enable */ + uint32_t : 7; + __IOM uint32_t CSTRT : 1; /*!< [31..31] Software Source Counter Start Enable */ + } GTSSR_b; }; - __IOM R_IIC0_SAR_Type SAR[3]; /*!< (@ 0x0000000A) Slave Address Registers */ union { - __IOM uint8_t ICBRL; /*!< (@ 0x00000010) I2C Bus Bit Rate Low-Level Register */ + __IOM uint32_t GTPSR; /*!< (@ 0x00000014) General PWM Timer Stop Source Select Register */ struct { - __IOM uint8_t BRL : 5; /*!< [4..0] Bit Rate Low-Level Period(Low-level period of SCL clock) */ - uint8_t : 3; - } ICBRL_b; + __IOM uint32_t PSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSELCA : 1; /*!< [16..16] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCB : 1; /*!< [17..17] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCC : 1; /*!< [18..18] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCD : 1; /*!< [19..19] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCE : 1; /*!< [20..20] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCF : 1; /*!< [21..21] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCG : 1; /*!< [22..22] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCH : 1; /*!< [23..23] ELC_GPTA Event Source Counter Stop Enable */ + uint32_t : 7; + __IOM uint32_t CSTOP : 1; /*!< [31..31] Software Source Counter Stop Enable */ + } GTPSR_b; }; union { - __IOM uint8_t ICBRH; /*!< (@ 0x00000011) I2C Bus Bit Rate High-Level Register */ + __IOM uint32_t GTCSR; /*!< (@ 0x00000018) General PWM Timer Clear Source Select Register */ struct { - __IOM uint8_t BRH : 5; /*!< [4..0] Bit Rate High-Level Period(High-level period of SCL clock) */ - uint8_t : 3; - } ICBRH_b; + __IOM uint32_t CSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSELCA : 1; /*!< [16..16] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCB : 1; /*!< [17..17] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCC : 1; /*!< [18..18] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCD : 1; /*!< [19..19] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCE : 1; /*!< [20..20] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCF : 1; /*!< [21..21] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCG : 1; /*!< [22..22] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCH : 1; /*!< [23..23] ELC_GPTA Event Source Counter Clear Enable */ + uint32_t : 7; + __IOM uint32_t CCLR : 1; /*!< [31..31] Software Source Counter Clear Enable */ + } GTCSR_b; }; union { - __IOM uint8_t ICDRT; /*!< (@ 0x00000012) I2C Bus Transmit Data Register */ + __IOM uint32_t GTUPSR; /*!< (@ 0x0000001C) General PWM Timer Up Count Source Select Register */ struct { - __IOM uint8_t ICDRT : 8; /*!< [7..0] 8-bit read-write register that stores transmit data. */ - } ICDRT_b; + __IOM uint32_t USGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Count Up Enable */ + uint32_t : 8; + } GTUPSR_b; }; union { - __IM uint8_t ICDRR; /*!< (@ 0x00000013) I2C Bus Receive Data Register */ + __IOM uint32_t GTDNSR; /*!< (@ 0x00000020) General PWM Timer Down Count Source Select Register */ struct { - __IM uint8_t ICDRR : 8; /*!< [7..0] 8-bit register that stores the received data */ - } ICDRR_b; - }; + __IOM uint32_t DSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Count Down Enable */ + uint32_t : 8; + } GTDNSR_b; + }; + + union + { + __IOM uint32_t GTICASR; /*!< (@ 0x00000024) General PWM Timer Input Capture Source Select + * Register A */ + + struct + { + __IOM uint32_t ASGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCA : 1; /*!< [16..16] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCB : 1; /*!< [17..17] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCC : 1; /*!< [18..18] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCD : 1; /*!< [19..19] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCE : 1; /*!< [20..20] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCF : 1; /*!< [21..21] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCG : 1; /*!< [22..22] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCH : 1; /*!< [23..23] ELC_GPT Event Source GTCCRA Input Capture Enable */ + uint32_t : 8; + } GTICASR_b; + }; + + union + { + __IOM uint32_t GTICBSR; /*!< (@ 0x00000028) General PWM Timer Input Capture Source Select + * Register B */ + + struct + { + __IOM uint32_t BSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCA : 1; /*!< [16..16] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCB : 1; /*!< [17..17] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCC : 1; /*!< [18..18] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCD : 1; /*!< [19..19] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCE : 1; /*!< [20..20] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCF : 1; /*!< [21..21] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCG : 1; /*!< [22..22] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCH : 1; /*!< [23..23] ELC_GPT Event Source GTCCRB Input Capture Enable */ + uint32_t : 8; + } GTICBSR_b; + }; + + union + { + __IOM uint32_t GTCR; /*!< (@ 0x0000002C) General PWM Timer Control Register */ + + struct + { + __IOM uint32_t CST : 1; /*!< [0..0] Count Start */ + uint32_t : 15; + __IOM uint32_t MD : 3; /*!< [18..16] Mode Select */ + uint32_t : 4; + __IOM uint32_t TPCS : 4; /*!< [26..23] Timer Prescaler Select */ + uint32_t : 5; + } GTCR_b; + }; + + union + { + __IOM uint32_t GTUDDTYC; /*!< (@ 0x00000030) General PWM Timer Count Direction and Duty Setting + * Register */ + + struct + { + __IOM uint32_t UD : 1; /*!< [0..0] Count Direction Setting */ + __IOM uint32_t UDF : 1; /*!< [1..1] Forcible Count Direction Setting */ + uint32_t : 14; + __IOM uint32_t OADTY : 2; /*!< [17..16] GTIOCA Output Duty Setting */ + __IOM uint32_t OADTYF : 1; /*!< [18..18] Forcible GTIOCA Output Duty Setting */ + __IOM uint32_t OADTYR : 1; /*!< [19..19] GTIOCA Output Value Selecting after Releasing 0 percent/100 + * percent Duty Setting */ + uint32_t : 4; + __IOM uint32_t OBDTY : 2; /*!< [25..24] GTIOCB Output Duty Setting */ + __IOM uint32_t OBDTYF : 1; /*!< [26..26] Forcible GTIOCB Output Duty Setting */ + __IOM uint32_t OBDTYR : 1; /*!< [27..27] GTIOCB Output Value Selecting after Releasing 0 percent/100 + * percent Duty Setting */ + uint32_t : 4; + } GTUDDTYC_b; + }; + + union + { + __IOM uint32_t GTIOR; /*!< (@ 0x00000034) General PWM Timer I/O Control Register */ + + struct + { + __IOM uint32_t GTIOA : 5; /*!< [4..0] GTIOCA Pin Function Select */ + uint32_t : 1; + __IOM uint32_t OADFLT : 1; /*!< [6..6] GTIOCA Pin Output Value Setting at the Count Stop */ + __IOM uint32_t OAHLD : 1; /*!< [7..7] GTIOCA Pin Output Setting at the Start/Stop Count */ + __IOM uint32_t OAE : 1; /*!< [8..8] GTIOCA Pin Output Enable */ + __IOM uint32_t OADF : 2; /*!< [10..9] GTIOCA Pin Disable Value Setting */ + uint32_t : 2; + __IOM uint32_t NFAEN : 1; /*!< [13..13] Noise Filter A Enable */ + __IOM uint32_t NFCSA : 2; /*!< [15..14] Noise Filter A Sampling Clock Select */ + __IOM uint32_t GTIOB : 5; /*!< [20..16] GTIOCB Pin Function Select */ + uint32_t : 1; + __IOM uint32_t OBDFLT : 1; /*!< [22..22] GTIOCB Pin Output Value Setting at the Count Stop */ + __IOM uint32_t OBHLD : 1; /*!< [23..23] GTIOCB Pin Output Setting at the Start/Stop Count */ + __IOM uint32_t OBE : 1; /*!< [24..24] GTIOCB Pin Output Enable */ + __IOM uint32_t OBDF : 2; /*!< [26..25] GTIOCB Pin Disable Value Setting */ + uint32_t : 2; + __IOM uint32_t NFBEN : 1; /*!< [29..29] Noise Filter B Enable */ + __IOM uint32_t NFCSB : 2; /*!< [31..30] Noise Filter B Sampling Clock Select */ + } GTIOR_b; + }; + + union + { + __IOM uint32_t GTINTAD; /*!< (@ 0x00000038) General PWM Timer Interrupt Output Setting Register */ + + struct + { + uint32_t : 24; + __IOM uint32_t GRP : 2; /*!< [25..24] Output Disable Source Select */ + uint32_t : 2; + __IOM uint32_t GRPDTE : 1; /*!< [28..28] Dead Time Error Output Disable Request Enable */ + __IOM uint32_t GRPABH : 1; /*!< [29..29] Same Time Output Level High Disable Request Enable */ + __IOM uint32_t GRPABL : 1; /*!< [30..30] Same Time Output Level Low Disable Request Enable */ + __IOM uint32_t GTINTPC : 1; /*!< [31..31] Period Count Function Finish Interrupt Enable */ + } GTINTAD_b; + }; + + union + { + __IOM uint32_t GTST; /*!< (@ 0x0000003C) General PWM Timer Status Register */ + + struct + { + __IOM uint32_t TCFA : 1; /*!< [0..0] Input Capture/Compare Match Flag A */ + __IOM uint32_t TCFB : 1; /*!< [1..1] Input Capture/Compare Match Flag B */ + __IOM uint32_t TCFC : 1; /*!< [2..2] Input Compare Match Flag C */ + __IOM uint32_t TCFD : 1; /*!< [3..3] Input Compare Match Flag D */ + __IOM uint32_t TCFE : 1; /*!< [4..4] Input Compare Match Flag E */ + __IOM uint32_t TCFF : 1; /*!< [5..5] Input Compare Match Flag F */ + __IOM uint32_t TCFPO : 1; /*!< [6..6] Overflow Flag */ + __IOM uint32_t TCFPU : 1; /*!< [7..7] Underflow Flag */ + __IM uint32_t ITCNT : 3; /*!< [10..8] GTCIV/GTCIU Interrupt Skipping Count Counter(Counter + * for counting the number of times a timer interrupt has + * been skipped.) */ + uint32_t : 4; + __IM uint32_t TUCF : 1; /*!< [15..15] Count Direction Flag */ + __IOM uint32_t ADTRAUF : 1; /*!< [16..16] GTADTRA Compare Match (Up-Counting) A/D Converter Start + * Request Interrupt Enable */ + __IOM uint32_t ADTRADF : 1; /*!< [17..17] GTADTRA Compare Match(Down-Counting) A/D Convertor + * Start Request Flag */ + __IOM uint32_t ADTRBUF : 1; /*!< [18..18] GTADTRB Compare Match(Up-Counting) A/D Convertor Start + * Request Flag */ + __IOM uint32_t ADTRBDF : 1; /*!< [19..19] GTADTRB Compare Match(Down-Counting) A/D Convertor + * Start Request Flag */ + uint32_t : 4; + __IM uint32_t ODF : 1; /*!< [24..24] Output Disable Flag */ + uint32_t : 3; + __IM uint32_t DTEF : 1; /*!< [28..28] Dead Time Error Flag */ + __IM uint32_t OABHF : 1; /*!< [29..29] Same Time Output Level High Disable Request Enable */ + __IM uint32_t OABLF : 1; /*!< [30..30] Same Time Output Level Low Disable Request Enable */ + __IOM uint32_t PCF : 1; /*!< [31..31] Period Count Function Finish Flag */ + } GTST_b; + }; + + union + { + __IOM uint32_t GTBER; /*!< (@ 0x00000040) General PWM Timer Buffer Enable Register */ + + struct + { + __IOM uint32_t BD0 : 1; /*!< [0..0] BD[0]: GTCCR Buffer Operation Disable */ + __IOM uint32_t BD1 : 1; /*!< [1..1] BD[1]: GTPR Buffer Operation Disable */ + __IOM uint32_t BD2 : 1; /*!< [2..2] BD[2]: GTADTR Buffer Operation DisableBD */ + __IOM uint32_t BD3 : 1; /*!< [3..3] BD[3]: GTDV Buffer Operation DisableBD[2] */ + uint32_t : 12; + __IOM uint32_t CCRA : 2; /*!< [17..16] GTCCRA Buffer Operation */ + __IOM uint32_t CCRB : 2; /*!< [19..18] GTCCRB Buffer Operation */ + __IOM uint32_t PR : 2; /*!< [21..20] GTPR Buffer Operation */ + __OM uint32_t CCRSWT : 1; /*!< [22..22] GTCCRA and GTCCRB Forcible Buffer OperationThis bit + * is read as 0. */ + uint32_t : 1; + __IOM uint32_t ADTTA : 2; /*!< [25..24] GTADTRA Buffer Transfer Timing Select in the Triangle + * wavesNOTE: In the Saw waves, values other than 0 0: Transfer + * at an underflow (in down-counting) or overflow (in up-counting) + * is performed. */ + __IOM uint32_t ADTDA : 1; /*!< [26..26] GTADTRA Double Buffer Operation */ + uint32_t : 1; + __IOM uint32_t ADTTB : 2; /*!< [29..28] GTADTRB Buffer Transfer Timing Select in the Triangle + * wavesNOTE: In the Saw waves, values other than 0 0: Transfer + * at an underflow (in down-counting) or overflow (in up-counting) + * is performed. */ + __IOM uint32_t ADTDB : 1; /*!< [30..30] GTADTRB Double Buffer Operation */ + uint32_t : 1; + } GTBER_b; + }; + + union + { + __IOM uint32_t GTITC; /*!< (@ 0x00000044) General PWM Timer Interrupt and A/D Converter + * Start Request Skipping Setting Register */ + + struct + { + __IOM uint32_t ITLA : 1; /*!< [0..0] GTCCRA Compare Match/Input Capture Interrupt Link */ + __IOM uint32_t ITLB : 1; /*!< [1..1] GTCCRB Compare Match/Input Capture Interrupt Link */ + __IOM uint32_t ITLC : 1; /*!< [2..2] GTCCRC Compare Match Interrupt Link */ + __IOM uint32_t ITLD : 1; /*!< [3..3] GTCCRD Compare Match Interrupt Link */ + __IOM uint32_t ITLE : 1; /*!< [4..4] GTCCRE Compare Match Interrupt Link */ + __IOM uint32_t ITLF : 1; /*!< [5..5] GTCCRF Compare Match Interrupt Link */ + __IOM uint32_t IVTC : 2; /*!< [7..6] GPT_OVF/GPT_UDF Interrupt Skipping Function Select */ + __IOM uint32_t IVTT : 3; /*!< [10..8] GPT_OVF/GPT_UDF Interrupt Skipping Count Select */ + uint32_t : 1; + __IOM uint32_t ADTAL : 1; /*!< [12..12] GTADTRA A/D Converter Start Request Link */ + uint32_t : 1; + __IOM uint32_t ADTBL : 1; /*!< [14..14] GTADTRB A/D Converter Start Request Link */ + uint32_t : 17; + } GTITC_b; + }; + + union + { + __IOM uint32_t GTCNT; /*!< (@ 0x00000048) General PWM Timer Counter */ + + struct + { + __IOM uint32_t GTCNT : 32; /*!< [31..0] Counter */ + } GTCNT_b; + }; + + union + { + __IOM uint32_t GTCCR[6]; /*!< (@ 0x0000004C) General PWM Timer Compare Capture Register */ + + struct + { + __IOM uint32_t GTCCR : 32; /*!< [31..0] Compare Capture Register A */ + } GTCCR_b[6]; + }; + + union + { + __IOM uint32_t GTPR; /*!< (@ 0x00000064) General PWM Timer Cycle Setting Register */ + + struct + { + __IOM uint32_t GTPR : 32; /*!< [31..0] Cycle Setting Register */ + } GTPR_b; + }; + + union + { + __IOM uint32_t GTPBR; /*!< (@ 0x00000068) General PWM Timer Cycle Setting Buffer Register */ + + struct + { + __IOM uint32_t GTPBR : 32; /*!< [31..0] Cycle Setting Buffer Register */ + } GTPBR_b; + }; + + union + { + __IOM uint32_t GTPDBR; /*!< (@ 0x0000006C) General PWM Timer Cycle Setting Double-Buffer + * Register */ + + struct + { + __IOM uint32_t GTPDBR : 32; /*!< [31..0] Cycle Setting Double-Buffer Register */ + } GTPDBR_b; + }; + + union + { + __IOM uint32_t GTADTRA; /*!< (@ 0x00000070) A/D Converter Start Request Timing Register A */ + + struct + { + __IOM uint32_t GTADTRA : 32; /*!< [31..0] A/D Converter Start Request Timing Register A */ + } GTADTRA_b; + }; + + union + { + __IOM uint32_t GTADTBRA; /*!< (@ 0x00000074) A/D Converter Start Request Timing Buffer Register + * A */ + + struct + { + __IOM uint32_t GTADTBRA : 32; /*!< [31..0] A/D Converter Start Request Timing Buffer Register A */ + } GTADTBRA_b; + }; + + union + { + __IOM uint32_t GTADTDBRA; /*!< (@ 0x00000078) A/D Converter Start Request Timing Double-Buffer + * Register A */ + + struct + { + __IOM uint32_t GTADTDBRA : 32; /*!< [31..0] A/D Converter Start Request Timing Double-Buffer Register + * A */ + } GTADTDBRA_b; + }; + + union + { + __IOM uint32_t GTADTRB; /*!< (@ 0x0000007C) A/D Converter Start Request Timing Register B */ + + struct + { + __IOM uint32_t GTADTRB : 32; /*!< [31..0] A/D Converter Start Request Timing Register B */ + } GTADTRB_b; + }; + + union + { + __IOM uint32_t GTADTBRB; /*!< (@ 0x00000080) A/D Converter Start Request Timing Buffer Register + * B */ + + struct + { + __IOM uint32_t GTADTBRB : 32; /*!< [31..0] A/D Converter Start Request Timing Buffer Register B */ + } GTADTBRB_b; + }; + + union + { + __IOM uint32_t GTADTDBRB; /*!< (@ 0x00000084) A/D Converter Start Request Timing Double-Buffer + * Register B */ + + struct + { + __IOM uint32_t GTADTDBRB : 32; /*!< [31..0] A/D Converter Start Request Timing Double-Buffer Register + * B */ + } GTADTDBRB_b; + }; + + union + { + __IOM uint32_t GTDTCR; /*!< (@ 0x00000088) General PWM Timer Dead Time Control Register */ + + struct + { + __IOM uint32_t TDE : 1; /*!< [0..0] Negative-Phase Waveform Setting */ + uint32_t : 3; + __IOM uint32_t TDBUE : 1; /*!< [4..4] GTDVU Buffer Operation Enable */ + __IOM uint32_t TDBDE : 1; /*!< [5..5] GTDVD Buffer Operation Enable */ + uint32_t : 2; + __IOM uint32_t TDFER : 1; /*!< [8..8] GTDVD Setting */ + uint32_t : 23; + } GTDTCR_b; + }; + + union + { + __IOM uint32_t GTDVU; /*!< (@ 0x0000008C) General PWM Timer Dead Time Value Register U */ + + struct + { + __IOM uint32_t GTDVU : 32; /*!< [31..0] Dead Time Value Register U */ + } GTDVU_b; + }; + + union + { + __IOM uint32_t GTDVD; /*!< (@ 0x00000090) General PWM Timer Dead Time Value Register D */ + + struct + { + __IOM uint32_t GTDVD : 32; /*!< [31..0] Dead Time Value Register D */ + } GTDVD_b; + }; + + union + { + __IOM uint32_t GTDBU; /*!< (@ 0x00000094) General PWM Timer Dead Time Buffer Register U */ + + struct + { + __IOM uint32_t GTDVU : 32; /*!< [31..0] Dead Time Buffer Register U */ + } GTDBU_b; + }; + + union + { + __IOM uint32_t GTDBD; /*!< (@ 0x00000098) General PWM Timer Dead Time Buffer Register D */ + + struct + { + __IOM uint32_t GTDBD : 32; /*!< [31..0] Dead Time Buffer Register D */ + } GTDBD_b; + }; + + union + { + __IM uint32_t GTSOS; /*!< (@ 0x0000009C) General PWM Timer Output Protection Function + * Status Register */ + + struct + { + __IM uint32_t SOS : 2; /*!< [1..0] Output Protection Function Status */ + uint32_t : 30; + } GTSOS_b; + }; + + union + { + __IOM uint32_t GTSOTR; /*!< (@ 0x000000A0) General PWM Timer Output Protection Function + * Temporary Release Register */ + + struct + { + __IOM uint32_t SOTR : 1; /*!< [0..0] Output Protection Function Temporary Release */ + uint32_t : 31; + } GTSOTR_b; + }; + __IM uint32_t RESERVED[5]; + + union + { + __IOM uint32_t GTICLF; /*!< (@ 0x000000B8) General PWM Timer Inter Channel Logical Operation + * Function Setting Register */ + + struct + { + __IOM uint32_t ICLFA : 3; /*!< [2..0] GTIOCnA Output Logical Operation Function Select */ + uint32_t : 1; + __IOM uint32_t ICLFSELC : 6; /*!< [9..4] Inter Channel Signal C Select */ + uint32_t : 6; + __IOM uint32_t ICLFB : 3; /*!< [18..16] GTIOCnB Output Logical Operation Function Select */ + uint32_t : 1; + __IOM uint32_t ICLFSELD : 6; /*!< [25..20] Inter Channel Signal D Select */ + uint32_t : 6; + } GTICLF_b; + }; + + union + { + __IOM uint32_t GTPC; /*!< (@ 0x000000BC) General PWM Timer Period Count Register */ + + struct + { + __IOM uint32_t PCEN : 1; /*!< [0..0] Period Count Function Enable */ + uint32_t : 7; + __IOM uint32_t ASTP : 1; /*!< [8..8] Automatic Stop Function Enable */ + uint32_t : 7; + __IOM uint32_t PCNT : 12; /*!< [27..16] Period Counter */ + uint32_t : 4; + } GTPC_b; + }; + __IM uint32_t RESERVED1[4]; + + union + { + __IOM uint32_t GTSECSR; /*!< (@ 0x000000D0) General PWM Timer Operation Enable Bit Simultaneous + * Control Channel Select Register */ + + struct + { + __IOM uint32_t SECSEL0 : 1; /*!< [0..0] Channel 0 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL1 : 1; /*!< [1..1] Channel 1 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL2 : 1; /*!< [2..2] Channel 2 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL3 : 1; /*!< [3..3] Channel 3 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL4 : 1; /*!< [4..4] Channel 4 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL5 : 1; /*!< [5..5] Channel 5 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL6 : 1; /*!< [6..6] Channel 6 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL7 : 1; /*!< [7..7] Channel 7 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL8 : 1; /*!< [8..8] Channel 8 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL9 : 1; /*!< [9..9] Channel 9 Operation Enable Bit Simultaneous Control Channel + * Select */ + uint32_t : 22; + } GTSECSR_b; + }; + + union + { + __IOM uint32_t GTSECR; /*!< (@ 0x000000D4) General PWM Timer Operation Enable Bit Simultaneous + * Control Register */ + + struct + { + __IOM uint32_t SBDCE : 1; /*!< [0..0] GTCCR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDPE : 1; /*!< [1..1] GTPR Register Buffer Operation Simultaneous Enable */ + uint32_t : 6; + __IOM uint32_t SBDCD : 1; /*!< [8..8] GTCCR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDPD : 1; /*!< [9..9] GTPR Register Buffer Operation Simultaneous Disable */ + uint32_t : 6; + __IOM uint32_t SPCE : 1; /*!< [16..16] Period Count Function Simultaneous Enable */ + uint32_t : 7; + __IOM uint32_t SPCD : 1; /*!< [24..24] Period Count Function Simultaneous Disable */ + uint32_t : 7; + } GTSECR_b; + }; +} R_GPT0_Type; /*!< Size = 216 (0xd8) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_ODC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief PWM Delay Generation Circuit (R_GPT_ODC) + */ + +typedef struct /*!< (@ 0x4007B000) R_GPT_ODC Structure */ +{ + union + { + __IOM uint16_t GTDLYCR1; /*!< (@ 0x00000000) PWM Output Delay Control Register1 */ + + struct + { + __IOM uint16_t DLLEN : 1; /*!< [0..0] DLL Operation Enable */ + __IOM uint16_t DLYRST : 1; /*!< [1..1] PWM Delay Generation Circuit Reset */ + uint16_t : 6; + __IOM uint16_t DLLMOD : 1; /*!< [8..8] DLL Mode Select */ + uint16_t : 7; + } GTDLYCR1_b; + }; + + union + { + __IOM uint16_t GTDLYCR2; /*!< (@ 0x00000002) PWM Output Delay Control Register2 */ + + struct + { + __IOM uint16_t DLYBS0 : 1; /*!< [0..0] PWM Delay Generation Circuit bypass */ + __IOM uint16_t DLYBS1 : 1; /*!< [1..1] PWM Delay Generation Circuit bypass */ + __IOM uint16_t DLYBS2 : 1; /*!< [2..2] PWM Delay Generation Circuit bypass */ + __IOM uint16_t DLYBS3 : 1; /*!< [3..3] PWM Delay Generation Circuit bypass */ + uint16_t : 4; + __IOM uint16_t DLYEN0 : 1; /*!< [8..8] PWM Delay Generation Circuit enable */ + uint16_t : 3; + __IOM uint16_t DLYDENB0 : 1; /*!< [12..12] PWM Delay Generation Circuit Disenable for GTIOCB */ + uint16_t : 3; + } GTDLYCR2_b; + }; + __IM uint16_t RESERVED[10]; + __IOM R_GPT_ODC_GTDLYR_Type GTDLYR[4]; /*!< (@ 0x00000018) PWM DELAY RISING */ + __IOM R_GPT_ODC_GTDLYR_Type GTDLYF[4]; /*!< (@ 0x00000028) PWM DELAY FALLING */ +} R_GPT_ODC_Type; /*!< Size = 56 (0x38) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_OPS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Output Phase Switching for GPT (R_GPT_OPS) + */ + +typedef struct /*!< (@ 0x40078FF0) R_GPT_OPS Structure */ +{ + union + { + __IOM uint32_t OPSCR; /*!< (@ 0x00000000) Output Phase Switching Control Register */ + + struct + { + __IOM uint32_t UF : 1; /*!< [0..0] Input Phase Soft Setting WFThis bit sets the input phase + * by the software settings.This bit setting is valid when + * the OPSCR.FB bit = 1. */ + __IOM uint32_t VF : 1; /*!< [1..1] Input Phase Soft Setting VFThis bit sets the input phase + * by the software settings.This bit setting is valid when + * the OPSCR.FB bit = 1. */ + __IOM uint32_t WF : 1; /*!< [2..2] Input Phase Soft Setting UFThis bit sets the input phase + * by the software settings.This bit setting is valid when + * the OPSCR.FB bit = 1. */ + uint32_t : 1; + __IM uint32_t U : 1; /*!< [4..4] Input U-Phase MonitorThis bit monitors the state of the + * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa + * e settings (UF/VF/WF) */ + __IM uint32_t V : 1; /*!< [5..5] Input V-Phase MonitorThis bit monitors the state of the + * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa + * e settings (UF/VF/WF) */ + __IM uint32_t W : 1; /*!< [6..6] Input W-Phase MonitorThis bit monitors the state of the + * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa + * e settings (UF/VF/WF) */ + uint32_t : 1; + __IOM uint32_t EN : 1; /*!< [8..8] Enable-Phase Output Control */ + uint32_t : 7; + __IOM uint32_t FB : 1; /*!< [16..16] External Feedback Signal EnableThis bit selects the + * input phase from the software settings and external input. */ + __IOM uint32_t P : 1; /*!< [17..17] Positive-Phase Output (P) Control */ + __IOM uint32_t N : 1; /*!< [18..18] Negative-Phase Output (N) Control */ + __IOM uint32_t INV : 1; /*!< [19..19] Invert-Phase Output Control */ + __IOM uint32_t RV : 1; /*!< [20..20] Output phase rotation direction reversal */ + __IOM uint32_t ALIGN : 1; /*!< [21..21] Input phase alignment */ + uint32_t : 2; + __IOM uint32_t GRP : 2; /*!< [25..24] Output disabled source selection */ + __IOM uint32_t GODF : 1; /*!< [26..26] Group output disable function */ + uint32_t : 2; + __IOM uint32_t NFEN : 1; /*!< [29..29] External Input Noise Filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] External Input Noise Filter Clock selectionNoise filter + * sampling clock setting of the external input. */ + } OPSCR_b; + }; +} R_GPT_OPS_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_POEG0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Port Output Enable for GPT (R_GPT_POEG0) + */ + +typedef struct /*!< (@ 0x40042000) R_GPT_POEG0 Structure */ +{ + union + { + __IOM uint32_t POEGG; /*!< (@ 0x00000000) POEG Group Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] Real Time Overcurrent Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection EnableNote: Can be modified only + * once after a reset. */ + __IOM uint32_t IOCE : 1; /*!< [5..5] Enable for GPT Output-Disable RequestNote: Can be modified + * only once after a reset. */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Oscillation Stop Detection EnableNote: Can be modified + * only once after a reset. */ + uint32_t : 1; + __IOM uint32_t CDRE0 : 1; /*!< [8..8] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE1 : 1; /*!< [9..9] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE2 : 1; /*!< [10..10] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE3 : 1; /*!< [11..11] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE4 : 1; /*!< [12..12] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE5 : 1; /*!< [13..13] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + uint32_t : 2; + __IM uint32_t ST : 1; /*!< [16..16] GTETRG Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRG Input Reverse */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise Filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise Filter Clock Select */ + } POEGG_b; + }; +} R_GPT_POEG0_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_ICU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Interrupt Controller Unit (R_ICU) + */ + +typedef struct /*!< (@ 0x40006000) R_ICU Structure */ +{ + union + { + __IOM uint8_t IRQCR[16]; /*!< (@ 0x00000000) IRQ Control Register [0..15] */ + + struct + { + __IOM uint8_t IRQMD : 2; /*!< [1..0] IRQ Detection Sense Select */ + uint8_t : 2; + __IOM uint8_t FCLKSEL : 2; /*!< [5..4] IRQ Digital Filter Sampling Clock Select */ + uint8_t : 1; + __IOM uint8_t FLTEN : 1; /*!< [7..7] IRQ Digital Filter Enable */ + } IRQCR_b[16]; + }; + __IM uint32_t RESERVED[60]; + + union + { + __IOM uint8_t NMICR; /*!< (@ 0x00000100) NMI Pin Interrupt Control Register */ + + struct + { + __IOM uint8_t NMIMD : 1; /*!< [0..0] NMI Detection Set */ + uint8_t : 3; + __IOM uint8_t NFCLKSEL : 2; /*!< [5..4] NMI Digital Filter Sampling Clock Select */ + uint8_t : 1; + __IOM uint8_t NFLTEN : 1; /*!< [7..7] NMI Digital Filter Enable */ + } NMICR_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3[7]; + + union + { + __IOM uint16_t NMIER; /*!< (@ 0x00000120) Non-Maskable Interrupt Enable Register */ + + struct + { + __IOM uint16_t IWDTEN : 1; /*!< [0..0] IWDT Underflow/Refresh Error Interrupt Enable */ + __IOM uint16_t WDTEN : 1; /*!< [1..1] WDT Underflow/Refresh Error Interrupt Enable */ + __IOM uint16_t LVD1EN : 1; /*!< [2..2] Voltage-Monitoring 1 Interrupt Enable */ + __IOM uint16_t LVD2EN : 1; /*!< [3..3] Voltage-Monitoring 2 Interrupt Enable */ + __IOM uint16_t VBATTEN : 1; /*!< [4..4] VBATT monitor Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t OSTEN : 1; /*!< [6..6] Oscillation Stop Detection Interrupt Enable */ + __IOM uint16_t NMIEN : 1; /*!< [7..7] NMI Pin Interrupt Enable */ + __IOM uint16_t RPEEN : 1; /*!< [8..8] RAM Parity Error Interrupt Enable */ + __IOM uint16_t RECCEN : 1; /*!< [9..9] RAM ECC Error Interrupt Enable */ + __IOM uint16_t BUSSEN : 1; /*!< [10..10] MPU Bus Slave Error Interrupt Enable */ + __IOM uint16_t BUSMEN : 1; /*!< [11..11] MPU Bus Master Error Interrupt Enable */ + __IOM uint16_t SPEEN : 1; /*!< [12..12] CPU Stack pointer monitor Interrupt Enable */ + __IOM uint16_t TZFEN : 1; /*!< [13..13] TZFEN */ + uint16_t : 1; + __IOM uint16_t CPEEN : 1; /*!< [15..15] CPEEN */ + } NMIER_b; + }; + __IM uint16_t RESERVED4; + __IM uint32_t RESERVED5[3]; + + union + { + __IOM uint16_t NMICLR; /*!< (@ 0x00000130) Non-Maskable Interrupt Status Clear Register */ + + struct + { + __OM uint16_t IWDTCLR : 1; /*!< [0..0] IWDT Clear */ + __OM uint16_t WDTCLR : 1; /*!< [1..1] WDT Clear */ + __OM uint16_t LVD1CLR : 1; /*!< [2..2] LVD1 Clear */ + __OM uint16_t LVD2CLR : 1; /*!< [3..3] LVD2 Clear */ + __OM uint16_t VBATTCLR : 1; /*!< [4..4] VBATT Clear */ + uint16_t : 1; + __OM uint16_t OSTCLR : 1; /*!< [6..6] OST Clear */ + __OM uint16_t NMICLR : 1; /*!< [7..7] NMI Clear */ + __OM uint16_t RPECLR : 1; /*!< [8..8] SRAM Parity Error Clear */ + __OM uint16_t RECCCLR : 1; /*!< [9..9] SRAM ECC Error Clear */ + __OM uint16_t BUSSCLR : 1; /*!< [10..10] Bus Slave Error Clear */ + __OM uint16_t BUSMCLR : 1; /*!< [11..11] Bus Master Error Clear */ + __OM uint16_t SPECLR : 1; /*!< [12..12] CPU Stack Pointer Monitor Interrupt Clear */ + __IOM uint16_t TZFCLR : 1; /*!< [13..13] TZFCLR */ + uint16_t : 1; + __IOM uint16_t CPECLR : 1; /*!< [15..15] CPECLR */ + } NMICLR_b; + }; + __IM uint16_t RESERVED6; + __IM uint32_t RESERVED7[3]; + + union + { + __IM uint16_t NMISR; /*!< (@ 0x00000140) Non-Maskable Interrupt Status Register */ + + struct + { + __IM uint16_t IWDTST : 1; /*!< [0..0] IWDT Underflow/Refresh Error Status Flag */ + __IM uint16_t WDTST : 1; /*!< [1..1] WDT Underflow/Refresh Error Status Flag */ + __IM uint16_t LVD1ST : 1; /*!< [2..2] Voltage-Monitoring 1 Interrupt Status Flag */ + __IM uint16_t LVD2ST : 1; /*!< [3..3] Voltage-Monitoring 2 Interrupt Status Flag */ + __IM uint16_t VBATTST : 1; /*!< [4..4] VBATT monitor Interrupt Status Flag */ + uint16_t : 1; + __IM uint16_t OSTST : 1; /*!< [6..6] Oscillation Stop Detection Interrupt Status Flag */ + __IM uint16_t NMIST : 1; /*!< [7..7] NMI Status Flag */ + __IM uint16_t RPEST : 1; /*!< [8..8] RAM Parity Error Interrupt Status Flag */ + __IM uint16_t RECCST : 1; /*!< [9..9] RAM ECC Error Interrupt Status Flag */ + __IM uint16_t BUSSST : 1; /*!< [10..10] MPU Bus Slave Error Interrupt Status Flag */ + __IM uint16_t BUSMST : 1; /*!< [11..11] MPU Bus Master Error Interrupt Status Flag */ + __IM uint16_t SPEST : 1; /*!< [12..12] CPU Stack pointer monitor Interrupt Status Flag */ + __IM uint16_t TZFST : 1; /*!< [13..13] TZFST */ + uint16_t : 1; + __IM uint16_t CPEST : 1; /*!< [15..15] CPEST */ + } NMISR_b; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9[23]; + + union + { + __IOM uint32_t WUPEN; /*!< (@ 0x000001A0) Wake Up Interrupt Enable Register */ + + struct + { + __IOM uint32_t IRQWUPEN0 : 1; /*!< [0..0] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN1 : 1; /*!< [1..1] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN2 : 1; /*!< [2..2] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN3 : 1; /*!< [3..3] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN4 : 1; /*!< [4..4] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN5 : 1; /*!< [5..5] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN6 : 1; /*!< [6..6] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN7 : 1; /*!< [7..7] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN8 : 1; /*!< [8..8] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN9 : 1; /*!< [9..9] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN10 : 1; /*!< [10..10] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN11 : 1; /*!< [11..11] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN12 : 1; /*!< [12..12] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN13 : 1; /*!< [13..13] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN14 : 1; /*!< [14..14] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN15 : 1; /*!< [15..15] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IWDTWUPEN : 1; /*!< [16..16] IWDT interrupt S/W standby returns enable */ + __IOM uint32_t KEYWUPEN : 1; /*!< [17..17] Key interrupt S/W standby returns enable */ + __IOM uint32_t LVD1WUPEN : 1; /*!< [18..18] LVD1 interrupt S/W standby returns enable */ + __IOM uint32_t LVD2WUPEN : 1; /*!< [19..19] LVD2 interrupt S/W standby returns enable */ + __IOM uint32_t VBATTWUPEN : 1; /*!< [20..20] VBATT monitor interrupt S/W standby returns enable */ + uint32_t : 1; + __IOM uint32_t ACMPHS0WUPEN : 1; /*!< [22..22] ACMPHS0 interrupt S/W standby returns enable bit */ + __IOM uint32_t ACMPLP0WUPEN : 1; /*!< [23..23] ACMPLP0 interrupt S/W standby returns enable */ + __IOM uint32_t RTCALMWUPEN : 1; /*!< [24..24] RTC alarm interrupt S/W standby returns enable */ + __IOM uint32_t RTCPRDWUPEN : 1; /*!< [25..25] RCT period interrupt S/W standby returns enable */ + __IOM uint32_t USBHSWUPEN : 1; /*!< [26..26] USBHS interrupt S/W standby returns enable bit */ + __IOM uint32_t USBFSWUPEN : 1; /*!< [27..27] USBFS interrupt S/W standby returns enable */ + __IOM uint32_t AGT1UDWUPEN : 1; /*!< [28..28] AGT1 underflow interrupt S/W standby returns enable */ + __IOM uint32_t AGT1CAWUPEN : 1; /*!< [29..29] AGT1 compare match A interrupt S/W standby returns + * enable */ + __IOM uint32_t AGT1CBWUPEN : 1; /*!< [30..30] AGT1 compare match B interrupt S/W standby returns + * enable */ + __IOM uint32_t IIC0WUPEN : 1; /*!< [31..31] IIC0 address match interrupt S/W standby returns enable */ + } WUPEN_b; + }; + + union + { + __IOM uint32_t WUPEN1; /*!< (@ 0x000001A4) Wake Up interrupt enable register 1 */ + + struct + { + __IOM uint32_t AGT3UDWUPEN : 1; /*!< [0..0] AGT3 underflow interrupt S/W standby returns enable bit */ + __IOM uint32_t AGT3CAWUPEN : 1; /*!< [1..1] AGT3 compare match A interrupt S/W standby returns enable + * bit */ + __IOM uint32_t AGT3CBWUPEN : 1; /*!< [2..2] AGT3 compare match B interrupt S/W standby returns enable + * bit */ + uint32_t : 29; + } WUPEN1_b; + }; + __IM uint32_t RESERVED10[22]; + + union + { + __IOM uint16_t SELSR0; /*!< (@ 0x00000200) Snooze Event Link Setting Register */ + + struct + { + __IOM uint16_t SELS : 9; /*!< [8..0] SYS Event Link Select */ + uint16_t : 7; + } SELSR0_b; + }; + __IM uint16_t RESERVED11; + __IM uint32_t RESERVED12[31]; + + union + { + __IOM uint32_t DELSR[8]; /*!< (@ 0x00000280) DMAC Event Link Setting Register */ + + struct + { + __IOM uint32_t DELS : 9; /*!< [8..0] Event selection to DMAC Start request */ + uint32_t : 7; + __IOM uint32_t IR : 1; /*!< [16..16] Interrupt Status Flag for DMAC NOTE: Writing 1 to the + * IR flag is prohibited. */ + uint32_t : 15; + } DELSR_b[8]; + }; + __IM uint32_t RESERVED13[24]; + + union + { + __IOM uint32_t IELSR[96]; /*!< (@ 0x00000300) ICU Event Link Setting Register [0..95] */ + + struct + { + __IOM uint32_t IELS : 9; /*!< [8..0] ICU Event selection to NVICSet the number for the event + * signal to be linked . */ + uint32_t : 7; + __IOM uint32_t IR : 1; /*!< [16..16] Interrupt Status Flag */ + uint32_t : 7; + __IOM uint32_t DTCE : 1; /*!< [24..24] DTC Activation Enable */ + uint32_t : 7; + } IELSR_b[96]; + }; +} R_ICU_Type; /*!< Size = 1152 (0x480) */ + +/* =========================================================================================================================== */ +/* ================ R_IIC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I2C Bus Interface (R_IIC0) + */ + +typedef struct /*!< (@ 0x40053000) R_IIC0 Structure */ +{ + union + { + __IOM uint8_t ICCR1; /*!< (@ 0x00000000) I2C Bus Control Register 1 */ + + struct + { + __IM uint8_t SDAI : 1; /*!< [0..0] SDA Line Monitor */ + __IM uint8_t SCLI : 1; /*!< [1..1] SCL Line Monitor */ + __IOM uint8_t SDAO : 1; /*!< [2..2] SDA Output Control/Monitor */ + __IOM uint8_t SCLO : 1; /*!< [3..3] SCL Output Control/Monitor */ + __IOM uint8_t SOWP : 1; /*!< [4..4] SCLO/SDAO Write Protect */ + __IOM uint8_t CLO : 1; /*!< [5..5] Extra SCL Clock Cycle Output */ + __IOM uint8_t IICRST : 1; /*!< [6..6] I2C Bus Interface Internal ResetNote:If an internal reset + * is initiated using the IICRST bit for a bus hang-up occurred + * during communication with the master device in slave mode, + * the states may become different between the slave device + * and the master device (due to the difference in the bit + * counter information). */ + __IOM uint8_t ICE : 1; /*!< [7..7] I2C Bus Interface Enable */ + } ICCR1_b; + }; + + union + { + __IOM uint8_t ICCR2; /*!< (@ 0x00000001) I2C Bus Control Register 2 */ + + struct + { + uint8_t : 1; + __IOM uint8_t ST : 1; /*!< [1..1] Start Condition Issuance RequestSet the ST bit to 1 (start + * condition issuance request) when the BBSY flag is set to + * 0 (bus free state). */ + __IOM uint8_t RS : 1; /*!< [2..2] Restart Condition Issuance RequestNote: Do not set the + * RS bit to 1 while issuing a stop condition. */ + __IOM uint8_t SP : 1; /*!< [3..3] Stop Condition Issuance RequestNote: Writing to the SP + * bit is not possible while the setting of the BBSY flag + * is 0 (bus free state).Note: Do not set the SP bit to 1 + * while a restart condition is being issued. */ + uint8_t : 1; + __IOM uint8_t TRS : 1; /*!< [5..5] Transmit/Receive Mode */ + __IOM uint8_t MST : 1; /*!< [6..6] Master/Slave Mode */ + __IM uint8_t BBSY : 1; /*!< [7..7] Bus Busy Detection Flag */ + } ICCR2_b; + }; + + union + { + __IOM uint8_t ICMR1; /*!< (@ 0x00000002) I2C Bus Mode Register 1 */ + + struct + { + __IOM uint8_t BC : 3; /*!< [2..0] Bit Counter */ + __OM uint8_t BCWP : 1; /*!< [3..3] BC Write Protect(This bit is read as 1.) */ + __IOM uint8_t CKS : 3; /*!< [6..4] Internal Reference Clock (fIIC) Selection ( fIIC = PCLKB + * / 2^CKS ) */ + __IOM uint8_t MTWP : 1; /*!< [7..7] MST/TRS Write Protect */ + } ICMR1_b; + }; + + union + { + __IOM uint8_t ICMR2; /*!< (@ 0x00000003) I2C Bus Mode Register 2 */ + + struct + { + __IOM uint8_t TMOS : 1; /*!< [0..0] Timeout Detection Time Select */ + __IOM uint8_t TMOL : 1; /*!< [1..1] Timeout L Count Control */ + __IOM uint8_t TMOH : 1; /*!< [2..2] Timeout H Count Control */ + uint8_t : 1; + __IOM uint8_t SDDL : 3; /*!< [6..4] SDA Output Delay Counter */ + __IOM uint8_t DLCS : 1; /*!< [7..7] SDA Output Delay Clock Source Select */ + } ICMR2_b; + }; + + union + { + __IOM uint8_t ICMR3; /*!< (@ 0x00000004) I2C Bus Mode Register 3 */ + + struct + { + __IOM uint8_t NF : 2; /*!< [1..0] Noise Filter Stage Selection */ + __IM uint8_t ACKBR : 1; /*!< [2..2] Receive Acknowledge */ + __IOM uint8_t ACKBT : 1; /*!< [3..3] Transmit Acknowledge */ + __IOM uint8_t ACKWP : 1; /*!< [4..4] ACKBT Write Protect */ + __IOM uint8_t RDRFS : 1; /*!< [5..5] RDRF Flag Set Timing Selection */ + __IOM uint8_t WAIT : 1; /*!< [6..6] WAITNote: When the value of the WAIT bit is to be read, + * be sure to read the ICDRR beforehand. */ + __IOM uint8_t SMBS : 1; /*!< [7..7] SMBus/I2C Bus Selection */ + } ICMR3_b; + }; + + union + { + __IOM uint8_t ICFER; /*!< (@ 0x00000005) I2C Bus Function Enable Register */ + + struct + { + __IOM uint8_t TMOE : 1; /*!< [0..0] Timeout Function Enable */ + __IOM uint8_t MALE : 1; /*!< [1..1] Master Arbitration-Lost Detection Enable */ + __IOM uint8_t NALE : 1; /*!< [2..2] NACK Transmission Arbitration-Lost Detection Enable */ + __IOM uint8_t SALE : 1; /*!< [3..3] Slave Arbitration-Lost Detection Enable */ + __IOM uint8_t NACKE : 1; /*!< [4..4] NACK Reception Transfer Suspension Enable */ + __IOM uint8_t NFE : 1; /*!< [5..5] Digital Noise Filter Circuit Enable */ + __IOM uint8_t SCLE : 1; /*!< [6..6] SCL Synchronous Circuit Enable */ + __IOM uint8_t FMPE : 1; /*!< [7..7] Fast-mode Plus Enable */ + } ICFER_b; + }; + + union + { + __IOM uint8_t ICSER; /*!< (@ 0x00000006) I2C Bus Status Enable Register */ + + struct + { + __IOM uint8_t SAR0E : 1; /*!< [0..0] Slave Address Register 0 Enable */ + __IOM uint8_t SAR1E : 1; /*!< [1..1] Slave Address Register 1 Enable */ + __IOM uint8_t SAR2E : 1; /*!< [2..2] Slave Address Register 2 Enable */ + __IOM uint8_t GCAE : 1; /*!< [3..3] General Call Address Enable */ + uint8_t : 1; + __IOM uint8_t DIDE : 1; /*!< [5..5] Device-ID Address Detection Enable */ + uint8_t : 1; + __IOM uint8_t HOAE : 1; /*!< [7..7] Host Address Enable */ + } ICSER_b; + }; + + union + { + __IOM uint8_t ICIER; /*!< (@ 0x00000007) I2C Bus Interrupt Enable Register */ + + struct + { + __IOM uint8_t TMOIE : 1; /*!< [0..0] Timeout Interrupt Request Enable */ + __IOM uint8_t ALIE : 1; /*!< [1..1] Arbitration-Lost Interrupt Request Enable */ + __IOM uint8_t STIE : 1; /*!< [2..2] Start Condition Detection Interrupt Request Enable */ + __IOM uint8_t SPIE : 1; /*!< [3..3] Stop Condition Detection Interrupt Request Enable */ + __IOM uint8_t NAKIE : 1; /*!< [4..4] NACK Reception Interrupt Request Enable */ + __IOM uint8_t RIE : 1; /*!< [5..5] Receive Data Full Interrupt Request Enable */ + __IOM uint8_t TEIE : 1; /*!< [6..6] Transmit End Interrupt Request Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Data Empty Interrupt Request Enable */ + } ICIER_b; + }; + + union + { + __IOM uint8_t ICSR1; /*!< (@ 0x00000008) I2C Bus Status Register 1 */ + + struct + { + __IOM uint8_t AAS0 : 1; /*!< [0..0] Slave Address 0 Detection Flag */ + __IOM uint8_t AAS1 : 1; /*!< [1..1] Slave Address 1 Detection Flag */ + __IOM uint8_t AAS2 : 1; /*!< [2..2] Slave Address 2 Detection Flag */ + __IOM uint8_t GCA : 1; /*!< [3..3] General Call Address Detection Flag */ + uint8_t : 1; + __IOM uint8_t DID : 1; /*!< [5..5] Device-ID Address Detection Flag */ + uint8_t : 1; + __IOM uint8_t HOA : 1; /*!< [7..7] Host Address Detection Flag */ + } ICSR1_b; + }; + + union + { + __IOM uint8_t ICSR2; /*!< (@ 0x00000009) I2C Bus Status Register 2 */ + + struct + { + __IOM uint8_t TMOF : 1; /*!< [0..0] Timeout Detection Flag */ + __IOM uint8_t AL : 1; /*!< [1..1] Arbitration-Lost Flag */ + __IOM uint8_t START : 1; /*!< [2..2] Start Condition Detection Flag */ + __IOM uint8_t STOP : 1; /*!< [3..3] Stop Condition Detection Flag */ + __IOM uint8_t NACKF : 1; /*!< [4..4] NACK Detection Flag */ + __IOM uint8_t RDRF : 1; /*!< [5..5] Receive Data Full Flag */ + __IOM uint8_t TEND : 1; /*!< [6..6] Transmit End Flag */ + __IM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } ICSR2_b; + }; + __IOM R_IIC0_SAR_Type SAR[3]; /*!< (@ 0x0000000A) Slave Address Registers */ + + union + { + __IOM uint8_t ICBRL; /*!< (@ 0x00000010) I2C Bus Bit Rate Low-Level Register */ + + struct + { + __IOM uint8_t BRL : 5; /*!< [4..0] Bit Rate Low-Level Period(Low-level period of SCL clock) */ + uint8_t : 3; + } ICBRL_b; + }; + + union + { + __IOM uint8_t ICBRH; /*!< (@ 0x00000011) I2C Bus Bit Rate High-Level Register */ + + struct + { + __IOM uint8_t BRH : 5; /*!< [4..0] Bit Rate High-Level Period(High-level period of SCL clock) */ + uint8_t : 3; + } ICBRH_b; + }; + + union + { + __IOM uint8_t ICDRT; /*!< (@ 0x00000012) I2C Bus Transmit Data Register */ + + struct + { + __IOM uint8_t ICDRT : 8; /*!< [7..0] 8-bit read-write register that stores transmit data. */ + } ICDRT_b; + }; + + union + { + __IM uint8_t ICDRR; /*!< (@ 0x00000013) I2C Bus Receive Data Register */ + + struct + { + __IM uint8_t ICDRR : 8; /*!< [7..0] 8-bit register that stores the received data */ + } ICDRR_b; + }; __IM uint8_t RESERVED[2]; union { - __IOM uint8_t ICWUR; /*!< (@ 0x00000016) I2C Bus Wake Up Unit Register */ + __IOM uint8_t ICWUR; /*!< (@ 0x00000016) I2C Bus Wake Up Unit Register */ + + struct + { + __IOM uint8_t WUAFA : 1; /*!< [0..0] Wakeup Analog Filter Additional Selection */ + uint8_t : 3; + __IOM uint8_t WUACK : 1; /*!< [4..4] ACK bit for Wakeup Mode */ + __IOM uint8_t WUF : 1; /*!< [5..5] Wakeup Event Occurrence Flag */ + __IOM uint8_t WUIE : 1; /*!< [6..6] Wakeup Interrupt Request Enable */ + __IOM uint8_t WUE : 1; /*!< [7..7] Wakeup Function Enable */ + } ICWUR_b; + }; + + union + { + __IOM uint8_t ICWUR2; /*!< (@ 0x00000017) I2C Bus Wake up Unit Register 2 */ + + struct + { + __IM uint8_t WUSEN : 1; /*!< [0..0] Wake-up Function Synchronous Enable */ + __IM uint8_t WUASYF : 1; /*!< [1..1] Wake-up Function Asynchronous Operation Status Flag */ + __IM uint8_t WUSYF : 1; /*!< [2..2] Wake-up Function Synchronous Operation Status Flag */ + uint8_t : 5; + } ICWUR2_b; + }; +} R_IIC0_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ R_IRDA ================ */ +/* =========================================================================================================================== */ + +/** + * @brief IrDA Interface (R_IRDA) + */ + +typedef struct /*!< (@ 0x40070F00) R_IRDA Structure */ +{ + union + { + __IOM uint8_t IRCR; /*!< (@ 0x00000000) IrDA Control Register */ + + struct + { + uint8_t : 2; + __IOM uint8_t IRRXINV : 1; /*!< [2..2] IRRXD Polarity Switching */ + __IOM uint8_t IRTXINV : 1; /*!< [3..3] IRTXD Polarity Switching */ + uint8_t : 3; + __IOM uint8_t IRE : 1; /*!< [7..7] IrDA Enable */ + } IRCR_b; + }; +} R_IRDA_Type; /*!< Size = 1 (0x1) */ + +/* =========================================================================================================================== */ +/* ================ R_IWDT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Independent Watchdog Timer (R_IWDT) + */ + +typedef struct /*!< (@ 0x40044400) R_IWDT Structure */ +{ + union + { + __IOM uint8_t IWDTRR; /*!< (@ 0x00000000) IWDT Refresh Register */ + + struct + { + __IOM uint8_t IWDTRR : 8; /*!< [7..0] The counter is refreshed by writing 0x00 and then writing + * 0xFF to this register. */ + } IWDTRR_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t IWDTSR; /*!< (@ 0x00000004) IWDT Status Register */ + + struct + { + __IM uint16_t CNTVAL : 14; /*!< [13..0] Counter ValueValue counted by the counter */ + __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ + __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ + } IWDTSR_b; + }; +} R_IWDT_Type; /*!< Size = 6 (0x6) */ + +/* =========================================================================================================================== */ +/* ================ R_JPEG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief JPEG Codec (R_JPEG) + */ + +typedef struct /*!< (@ 0x400E6000) R_JPEG Structure */ +{ + union + { + __IOM uint8_t JCMOD; /*!< (@ 0x00000000) JPEG Code Mode Register */ + + struct + { + __IOM uint8_t REDU : 3; /*!< [2..0] Pixel FormatNOTE: Read-only in Decompression. */ + __IOM uint8_t DSP : 1; /*!< [3..3] Compression/Decompression Set Note: When changing between + * processing for compression and for decompression, be sure + * to reset this module in advance by setting the JCUSRST + * bit in the software reset control register 2 (SWRSTCR2) + * of the power-downmodes. */ + uint8_t : 4; + } JCMOD_b; + }; + + union + { + __OM uint8_t JCCMD; /*!< (@ 0x00000001) JPEG Code Command Register */ + + struct + { + __OM uint8_t JSRT : 1; /*!< [0..0] JPEG Core Process Start CommandTo start JPEG core processing, + * set this bit to 1. Do not write this bit to 1 again while + * this module is in operation. */ + __OM uint8_t JRST : 1; /*!< [1..1] JPEG Core Process Stop Clear CommandTo clear the process-stopped + * state caused by requests to read the image size and pixel + * format (enabled by the INT3 bit in JINTE0), set this bit + * to 1. */ + __OM uint8_t JEND : 1; /*!< [2..2] Interrupt Request Clear Command This bit is valid only + * for the interrupt sources corresponding to bits INS6, INS5, + * and INS3 in JINTS0. To clear an interrupt request, set + * this bit to 1 */ + uint8_t : 4; + __OM uint8_t BRST : 1; /*!< [7..7] Bus Reset. NOTE: When this module is in operation, the + * bus reset command should not be issued. */ + } JCCMD_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t JCQTN; /*!< (@ 0x00000003) JPEG Code Quantization Table Number Register */ + + struct + { + __IOM uint8_t QT1 : 2; /*!< [1..0] Quantization table number for the first color componentNOTE: + * Read-only in Decompression. */ + __IOM uint8_t QT2 : 2; /*!< [3..2] Quantization table number for the second color component + * NOTE: Read-only in Decompression. */ + __IOM uint8_t QT3 : 2; /*!< [5..4] Quantization table number for the third color component + * NOTE: Read-only in Decompression. */ + uint8_t : 2; + } JCQTN_b; + }; + + union + { + __IOM uint8_t JCHTN; /*!< (@ 0x00000004) JPEG Code Huffman Table Number Register */ + + struct + { + __IOM uint8_t HTD1 : 1; /*!< [0..0] Huffman table number (DC) for the first color component + * NOTE: Read-only in Decompression. */ + __IOM uint8_t HTA1 : 1; /*!< [1..1] Huffman table number (AC) for the first color componentNOTE: + * Read-only in Decompression. */ + __IOM uint8_t HTD2 : 1; /*!< [2..2] Huffman table number (DC) for the second color component + * NOTE: Read-only in Decompression. */ + __IOM uint8_t HTA2 : 1; /*!< [3..3] Huffman table number (AC) for the second color componentNOTE: + * Read-only in Decompression. */ + __IOM uint8_t HTD3 : 1; /*!< [4..4] Huffman table number (DC) for the third color component + * NOTE: Read-only in Decompression. */ + __IOM uint8_t HTA3 : 1; /*!< [5..5] Huffman table number (AC) for the third color componentNOTE: + * Read-only in Decompression. */ + uint8_t : 2; + } JCHTN_b; + }; + + union + { + __IOM uint8_t JCDRIU; /*!< (@ 0x00000005) JPEG Code DRI Upper Register */ + + struct + { + __IOM uint8_t DRIU : 8; /*!< [7..0] Upper Bytes of MCUs Preceding RST MarkerWhen both upper + * and lower bytes are set to 00h, neither a DRI nor an RST + * marker is placed.NOTE: Read-only in Decompression. */ + } JCDRIU_b; + }; + + union + { + __IOM uint8_t JCDRID; /*!< (@ 0x00000006) JPEG Code DRI Lower Register */ + + struct + { + __IOM uint8_t DRID : 8; /*!< [7..0] Lower Bytes of MCUs Preceding RST MarkerWhen both upper + * and lower bytes are set to 00h, neither a DRI nor an RST + * marker is placed.NOTE: Read-only in Decompression. */ + } JCDRID_b; + }; + + union + { + __IOM uint8_t JCVSZU; /*!< (@ 0x00000007) JPEG Code Vertical Size Upper Register */ + + struct + { + __IOM uint8_t VSZU : 8; /*!< [7..0] Upper Bytes of Vertical Image SizeIn decompression process, + * a downloaded value from the JPEG coded data is set. NOTE: + * Read-only in Decompression. */ + } JCVSZU_b; + }; + + union + { + __IOM uint8_t JCVSZD; /*!< (@ 0x00000008) JPEG Code Vertical Size Lower Register */ + + struct + { + __IOM uint8_t VSZD : 8; /*!< [7..0] Lower Bytes of Vertical Image SizeIn decompression process, + * a downloaded value from the JPEG coded data is set. NOTE: + * Read-only in Decompression. */ + } JCVSZD_b; + }; + + union + { + __IOM uint8_t JCHSZU; /*!< (@ 0x00000009) JPEG Code Horizontal Size Upper Register */ + + struct + { + __IOM uint8_t HSZU : 8; /*!< [7..0] Upper Bytes of Horizontal Image SizeIn decompression + * process, a downloaded value from the JPEG coded data is + * set. NOTE: Read-only in Decompression. */ + } JCHSZU_b; + }; + + union + { + __IOM uint8_t JCHSZD; /*!< (@ 0x0000000A) JPEG Coded Horizontal Size Lower Register */ + + struct + { + __IOM uint8_t HSZD : 8; /*!< [7..0] Lower Bytes of Horizontal Image SizeIn decompression + * process, a downloaded value from the JPEG coded data is + * set. NOTE: Read-only in Decompression. */ + } JCHSZD_b; + }; + + union + { + __IM uint8_t JCDTCU; /*!< (@ 0x0000000B) JPEG Code Data Count Upper Register */ + + struct + { + __IM uint8_t DCU : 8; /*!< [7..0] Upper bytes of the counted amount of data to be compressed + * The values of this register are reset before compression + * starts.NOTE: Read-only in Decompression. */ + } JCDTCU_b; + }; + + union + { + __IM uint8_t JCDTCM; /*!< (@ 0x0000000C) JPEG Code Data Count Middle Register */ + + struct + { + __IM uint8_t DCM : 8; /*!< [7..0] Middle bytes of the counted amount of data to be compressedThe + * values of this register are reset before compression starts. + * NOTE: Read-only in Decompression. */ + } JCDTCM_b; + }; + + union + { + __IM uint8_t JCDTCD; /*!< (@ 0x0000000D) JPEG Code Data Count Lower Register */ + + struct + { + __IM uint8_t DCD : 8; /*!< [7..0] Lower bytes of the counted amount of data to be compressedThe + * values of this register are reset before compression starts.NOTE: + * Read-only in Decompression. */ + } JCDTCD_b; + }; + + union + { + __IOM uint8_t JINTE0; /*!< (@ 0x0000000E) JPEG Interrupt Enable Register 0 */ + + struct + { + uint8_t : 3; + __IOM uint8_t INT3 : 1; /*!< [3..3] This bit enables an interrupt to be generated when it + * has been determined that the image size and the subsampling + * setting of the compressed data can be read through analyzing + * the data. */ + uint8_t : 1; + __IOM uint8_t INT5 : 1; /*!< [5..5] This bit enables an interrupt to be generated when the + * final number of MCU data in the Huffman-coding segment + * is not correct in decompression. When this bit is not set + * to enable interrupt generation, an error code is not returned. */ + __IOM uint8_t INT6 : 1; /*!< [6..6] This bit enables an interrupt to be generated when the + * total number of data in the Huffman-coding segment is not + * correct in decompression. When this bit is not set to enable + * interrupt generation, an error code is not returned. */ + __IOM uint8_t INT7 : 1; /*!< [7..7] This bit enables an interrupt to be generated when the + * number of data in the restart interval of the Huffman-coding + * segment is not correct in decompression.When this bit is + * not set to enable interrupt generation, an error code is + * not returned. */ + } JINTE0_b; + }; + + union + { + __IOM uint8_t JINTS0; /*!< (@ 0x0000000F) JPEG Interrupt Status Register 0 */ + + struct + { + uint8_t : 3; + __IOM uint8_t INS3 : 1; /*!< [3..3] This bit is set to 1 when the image size and pixel format + * can be read. When an interrupt occurs, this module stops + * processing and the state is indicated by the JCRST register. + * To make this module resume processing, set the JPEG core + * process stop clear command bit (JRST) in JCCMD. */ + uint8_t : 1; + __IOM uint8_t INS5 : 1; /*!< [5..5] This bit is set to 1 when a compressed data error occurs. */ + __IOM uint8_t INS6 : 1; /*!< [6..6] This bit is set to 1 when this module completes compression + * process normally. */ + uint8_t : 1; + } JINTS0_b; + }; + + union + { + __IOM uint8_t JCDERR; /*!< (@ 0x00000010) JPEG Code Decode Error Register */ + + struct + { + __IOM uint8_t ERR : 4; /*!< [3..0] Error Code (See tables )Identify the type of the error + * which has occurred in the compressed data analysis for + * decompression. */ + uint8_t : 4; + } JCDERR_b; + }; + + union + { + __IM uint8_t JCRST; /*!< (@ 0x00000011) JPEG Code Reset Register */ + + struct + { + __IM uint8_t RST : 1; /*!< [0..0] Operating State */ + uint8_t : 7; + } JCRST_b; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[11]; + + union + { + __IOM uint32_t JIFECNT; /*!< (@ 0x00000040) JPEG Interface Compression Control Register */ + + struct + { + __IOM uint32_t DINSWAP : 3; /*!< [2..0] Byte/Halfword Swap */ + uint32_t : 1; + __IOM uint32_t DINLC : 1; /*!< [4..4] Count Mode Setting for Stopping Input Image Data Lines */ + __OM uint32_t DINRCMD : 1; /*!< [5..5] Input Image Data Lines Resume Command This bit is valid + * only when the count mode for stopping the input of image + * data lines is on. Setting this bit to 1 resumes reading + * input image data. This bit is always read as 0. */ + __IOM uint32_t DINRINI : 1; /*!< [6..6] Address Initialization when Resuming Input of Image Data + * Lines This bit is only valid when the count mode for stopping + * the input of image data lines is on. Set this bit before + * writing 1 to the data-line resume command bit. */ + uint32_t : 1; + __IOM uint32_t JOUTSWAP : 3; /*!< [10..8] Byte/Halfword/Word Swap Output coded data in compression + * is swapped. */ + uint32_t : 21; + } JIFECNT_b; + }; + + union + { + __IOM uint32_t JIFESA; /*!< (@ 0x00000044) JPEG Interface Compression Source Address Register */ + + struct + { + __IOM uint32_t ESA : 32; /*!< [31..0] Input Image Data Source Address (in 8-byte units) The + * lower three bits should be set to 0. */ + } JIFESA_b; + }; + + union + { + __IOM uint32_t JIFESOFST; /*!< (@ 0x00000048) JPEG Interface Compression Line Offset Register */ + + struct + { + __IOM uint32_t ESMW : 15; /*!< [14..0] Input Image Data Lines Offset(in 8-byte units)The lower + * three bits should be set to 0. */ + uint32_t : 17; + } JIFESOFST_b; + }; + + union + { + __IOM uint32_t JIFEDA; /*!< (@ 0x0000004C) JPEG Interface Compression Destination Address + * Register */ + + struct + { + __IOM uint32_t EDA : 32; /*!< [31..0] Input Image Data Lines Offset (in 8-byte units) The + * lower three bits should be set to 0. */ + } JIFEDA_b; + }; + + union + { + __IOM uint32_t JIFESLC; /*!< (@ 0x00000050) JPEG Interface Compression Source Line Count + * Register */ + + struct + { + __IOM uint32_t LINES : 16; /*!< [15..0] Number of Input Image Data Lines to be Read (in 8-line + * units) The lower three bits should be set to 0. */ + uint32_t : 16; + } JIFESLC_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IOM uint32_t JIFDCNT; /*!< (@ 0x00000058) JPEG Interface Decompression Control Register */ + + struct + { + __IOM uint32_t DOUTSWAP : 3; /*!< [2..0] Byte/Word Swap Output image data in decompression is + * swapped. */ + uint32_t : 1; + __IOM uint32_t DOUTLC : 1; /*!< [4..4] Count Mode for Stopping Output Image Data Lines */ + __OM uint32_t DOUTRCMD : 1; /*!< [5..5] Output Image Data Lines Resume Command This bit is valid + * only when the count mode for stopping the output of image + * data lines is on. Setting this bit to 1 resumes writing + * image data. This bit is always read as 0. */ + __IOM uint32_t DOUTRINI : 1; /*!< [6..6] Address Initialization when Resuming Output of Image + * Data Lines This bit is only valid when the count mode for + * stopping the output of image data lines is on. Set this + * bit before writing 1 to the data-line resume command bit. */ + uint32_t : 1; + __IOM uint32_t JINSWAP : 3; /*!< [10..8] Byte/Word/Longword Swap Input coded data in decompression + * is swapped. */ + uint32_t : 1; + __IOM uint32_t JINC : 1; /*!< [12..12] Count Mode Setting for Stopping Input Coded Data */ + __OM uint32_t JINRCMD : 1; /*!< [13..13] Input Coded Data Resume CommandThis bit is valid only + * when the count mode for stopping the input of coded data + * is on. Setting this bit to 1 resumes reading input coded + * data. This bit is always read as 0. */ + __IOM uint32_t JINRINI : 1; /*!< [14..14] Address Initialization when Input Coded Data is Resumed + * This bit is only valid when the count mode for stopping + * the input of coded data is on. Set this bit before writing + * 1 to the data resume command bit. */ + uint32_t : 9; + __IOM uint32_t OPF : 2; /*!< [25..24] Specifies output image data pixel format. */ + __IOM uint32_t HINTER : 2; /*!< [27..26] Horizontal Subsampling Subsamples horizontal output + * image data. */ + __IOM uint32_t VINTER : 2; /*!< [29..28] Vertical SubsamplingSubsamples vertical output image + * data. */ + uint32_t : 2; + } JIFDCNT_b; + }; + + union + { + __IOM uint32_t JIFDSA; /*!< (@ 0x0000005C) JPEG Interface Decompression Source Address Register */ + + struct + { + __IOM uint32_t DSA : 32; /*!< [31..0] Input Coded Data Source AddressInput Coded Data Source + * Address (in 8-byte units) The lower three bits should be + * set to 0. */ + } JIFDSA_b; + }; + + union + { + __IOM uint32_t JIFDDOFST; /*!< (@ 0x00000060) JPEG Interface Decompression Line Offset Register */ + + struct + { + __IOM uint32_t DDMW : 15; /*!< [14..0] Output Image Data Lines Offset (in 8-byte units) The + * lower three bits should be set to 0. */ + uint32_t : 17; + } JIFDDOFST_b; + }; + + union + { + __IOM uint32_t JIFDDA; /*!< (@ 0x00000064) JPEG Interface Decompression Destination Address + * Register */ + + struct + { + __IOM uint32_t DDA : 32; /*!< [31..0] Output Image Data Destination Address (in 8-byte units) + * The lower three bits should be set to 0. */ + } JIFDDA_b; + }; + + union + { + __IOM uint32_t JIFDSDC; /*!< (@ 0x00000068) JPEG Interface Decompression Source Data Count + * Register */ + + struct + { + __IOM uint32_t JDATAS : 16; /*!< [15..0] Amount of Input Coded Data to be Read (in 8-byte units) + * The lower three bits should be set to 0. */ + uint32_t : 16; + } JIFDSDC_b; + }; + + union + { + __IOM uint32_t JIFDDLC; /*!< (@ 0x0000006C) JPEG Interface Decompression Destination Line + * Count Register */ + + struct + { + __IOM uint32_t LINES : 16; /*!< [15..0] Number of Input Image Lines to Be ReadThe lower three + * bits should be set to 0. These bits are read as0.Number + * of input image data lines to be read, in 8-line units. */ + uint32_t : 16; + } JIFDDLC_b; + }; + + union + { + __IOM uint32_t JIFDADT; /*!< (@ 0x00000070) JPEG Interface Decompression alpha Set Register */ + + struct + { + __IOM uint32_t ALPHA : 8; /*!< [7..0] Setting of the alpha value for output in ARGB8888 format. */ + uint32_t : 24; + } JIFDADT_b; + }; + __IM uint32_t RESERVED4[6]; + + union + { + __IOM uint32_t JINTE1; /*!< (@ 0x0000008C) JPEG Interrupt Enable Register 1 */ + + struct + { + __IOM uint32_t DOUTLEN : 1; /*!< [0..0] Enables or disables a data transfer processing interrupt + * request (JDTI) when the DOUTLF bit in JINTS1 is set to + * 1 */ + __IOM uint32_t JINEN : 1; /*!< [1..1] Enables or disables a data transfer processing interrupt + * request (JDTI) when the JINF bit in JINTS1 is set to 1. */ + __IOM uint32_t DBTEN : 1; /*!< [2..2] Enables or disables a data transfer processing interrupt + * request (JDTI) when the DBTF bit in JINTS1 is set to 1. */ + uint32_t : 2; + __IOM uint32_t DINLEN : 1; /*!< [5..5] Enables or disables a data transfer processing interrupt + * request (JDTI) when the DINLF bit in JINTS1 is set to 1. */ + __IOM uint32_t CBTEN : 1; /*!< [6..6] Enables or disables a data transfer processing interrupt + * request (JDTI) when the CBTF bit in JINTS1 is set to 1. */ + uint32_t : 25; + } JINTE1_b; + }; + + union + { + __IOM uint32_t JINTS1; /*!< (@ 0x00000090) JPEG Interrupt Status Register 1 */ + + struct + { + __IOM uint32_t DOUTLF : 1; /*!< [0..0] In decompression, this bit is set to 1 when the number + * of lines of output image data indicated by JIFDDLC have + * been written. This bit is only valid when the DOUTLC bit + * in JIFDCNT is set to 1. */ + __IOM uint32_t JINF : 1; /*!< [1..1] This bit is set to 1 when the amount of input coded data + * indicated by JIFDSDC is read in decompression. This bit + * is valid only when the JINC bit in JIFDCNT is set to 1. */ + __IOM uint32_t DBTF : 1; /*!< [2..2] This bit is set to 1 when the last output image data + * is written in decompression. */ + uint32_t : 2; + __IOM uint32_t DINLF : 1; /*!< [5..5] This bit is set to 1 when the number of input image data + * lines indicated by JIFESLC is read in compression. This + * bit is valid only when the DINLC bit in JIFECNT is set + * to 1. */ + __IOM uint32_t CBTF : 1; /*!< [6..6] This bit is set to 1 when the last output coded data + * is written in compression. */ + uint32_t : 25; + } JINTS1_b; + }; + __IM uint32_t RESERVED5[27]; + __OM uint8_t JCQTBL0[64]; /*!< (@ 0x00000100) Quantization Table 0 */ + __OM uint8_t JCQTBL1[64]; /*!< (@ 0x00000140) Quantization Table 1 */ + __OM uint8_t JCQTBL2[64]; /*!< (@ 0x00000180) Quantization Table 2 */ + __OM uint8_t JCQTBL3[64]; /*!< (@ 0x000001C0) Quantization Table 3 */ + __IOM uint8_t JCHTBD0[28]; /*!< (@ 0x00000200) DC Huffman Table 0 */ + __IM uint32_t RESERVED6; + __IOM uint8_t JCHTBA0[178]; /*!< (@ 0x00000220) AC Huffman Table 0 */ + __IM uint16_t RESERVED7; + __IM uint32_t RESERVED8[11]; + __IOM uint8_t JCHTBD1[28]; /*!< (@ 0x00000300) DC Huffman Table 1 */ + __IM uint32_t RESERVED9; + __IOM uint8_t JCHTBA1[178]; /*!< (@ 0x00000320) DC Huffman Table 1 */ + __IM uint16_t RESERVED10; +} R_JPEG_Type; /*!< Size = 980 (0x3d4) */ + +/* =========================================================================================================================== */ +/* ================ R_KINT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Key Interrupt Function (R_KINT) + */ + +typedef struct /*!< (@ 0x40080000) R_KINT Structure */ +{ + union + { + __IOM uint8_t KRCTL; /*!< (@ 0x00000000) KEY Return Control Register */ + + struct + { + __IOM uint8_t KREG : 1; /*!< [0..0] Detection Edge Selection (KRF0 to KRF7) */ + uint8_t : 6; + __IOM uint8_t KRMD : 1; /*!< [7..7] Usage of Key Interrupt Flags(KR0 to KR7) */ + } KRCTL_b; + }; + __IM uint8_t RESERVED[3]; + + union + { + __IOM uint8_t KRF; /*!< (@ 0x00000004) KEY Return Flag Register */ + + struct + { + __IOM uint8_t KRF0 : 1; /*!< [0..0] Key interrupt flag 0 */ + __IOM uint8_t KRF1 : 1; /*!< [1..1] Key interrupt flag 1 */ + __IOM uint8_t KRF2 : 1; /*!< [2..2] Key interrupt flag 2 */ + __IOM uint8_t KRF3 : 1; /*!< [3..3] Key interrupt flag 3 */ + __IOM uint8_t KRF4 : 1; /*!< [4..4] Key interrupt flag 4 */ + __IOM uint8_t KRF5 : 1; /*!< [5..5] Key interrupt flag 5 */ + __IOM uint8_t KRF6 : 1; /*!< [6..6] Key interrupt flag 6 */ + __IOM uint8_t KRF7 : 1; /*!< [7..7] Key interrupt flag 7 */ + } KRF_b; + }; + __IM uint8_t RESERVED1[3]; + + union + { + __IOM uint8_t KRM; /*!< (@ 0x00000008) KEY Return Mode Register */ + + struct + { + __IOM uint8_t KRM0 : 1; /*!< [0..0] Key interrupt mode control 0 */ + __IOM uint8_t KRM1 : 1; /*!< [1..1] Key interrupt mode control 1 */ + __IOM uint8_t KRM2 : 1; /*!< [2..2] Key interrupt mode control 2 */ + __IOM uint8_t KRM3 : 1; /*!< [3..3] Key interrupt mode control 3 */ + __IOM uint8_t KRM4 : 1; /*!< [4..4] Key interrupt mode control 4 */ + __IOM uint8_t KRM5 : 1; /*!< [5..5] Key interrupt mode control 5 */ + __IOM uint8_t KRM6 : 1; /*!< [6..6] Key interrupt mode control 6 */ + __IOM uint8_t KRM7 : 1; /*!< [7..7] Key interrupt mode control 7 */ + } KRM_b; + }; +} R_KINT_Type; /*!< Size = 9 (0x9) */ + +/* =========================================================================================================================== */ +/* ================ R_MMF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Memory Mirror Function (R_MMF) + */ + +typedef struct /*!< (@ 0x40001000) R_MMF Structure */ +{ + union + { + __IOM uint32_t MMSFR; /*!< (@ 0x00000000) MemMirror Special Function Register */ + + struct + { + uint32_t : 7; + __IOM uint32_t MEMMIRADDR : 16; /*!< [22..7] Specifies the memory mirror address.NOTE: A value cannot + * be set in the low-order 7 bits. These bits are fixed to + * 0. */ + uint32_t : 1; + __OM uint32_t KEY : 8; /*!< [31..24] MMSFR Key Code */ + } MMSFR_b; + }; + + union + { + __IOM uint32_t MMEN; /*!< (@ 0x00000004) MemMirror Enable Register */ + + struct + { + __IOM uint32_t EN : 1; /*!< [0..0] Memory Mirror Function Enable */ + uint32_t : 23; + __OM uint32_t KEY : 8; /*!< [31..24] MMEN Key Code */ + } MMEN_b; + }; +} R_MMF_Type; /*!< Size = 8 (0x8) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_MMPU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus Master MPU (R_MPU_MMPU) + */ + +typedef struct /*!< (@ 0x40000000) R_MPU_MMPU Structure */ +{ + __IOM R_MPU_MMPU_MMPU_Type MMPU[3]; /*!< (@ 0x00000000) Bus Master MPU Registers */ +} R_MPU_MMPU_Type; /*!< Size = 3072 (0xc00) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_SMPU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus Slave MPU (R_MPU_SMPU) + */ + +typedef struct /*!< (@ 0x40000C00) R_MPU_SMPU Structure */ +{ + union + { + __IOM uint16_t SMPUCTL; /*!< (@ 0x00000000) Slave MPU Control Register */ + + struct + { + __IOM uint16_t OAD : 1; /*!< [0..0] Master Group enable */ + __IOM uint16_t PROTECT : 1; /*!< [1..1] Protection of register */ + uint16_t : 6; + __OM uint16_t KEY : 8; /*!< [15..8] Key Code This bit is used to enable or disable rewriting + * of the PROTECT and OAD bit. */ + } SMPUCTL_b; + }; + __IM uint16_t RESERVED[7]; + __IOM R_MPU_SMPU_SMPU_Type SMPU[10]; /*!< (@ 0x00000010) Access Control Structure for MBIU */ +} R_MPU_SMPU_Type; /*!< Size = 56 (0x38) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_SPMON ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CPU Stack Pointer Monitor (R_MPU_SPMON) + */ + +typedef struct /*!< (@ 0x40000D00) R_MPU_SPMON Structure */ +{ + __IOM R_MPU_SPMON_SP_Type SP[2]; /*!< (@ 0x00000000) Stack Pointer Monitor */ +} R_MPU_SPMON_Type; /*!< Size = 32 (0x20) */ + +/* =========================================================================================================================== */ +/* ================ R_MSTP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System-Module Stop (R_MSTP) + */ + +typedef struct /*!< (@ 0x40047000) R_MSTP Structure */ +{ + union + { + __IOM uint32_t MSTPCRB; /*!< (@ 0x00000000) Module Stop Control Register B */ + + struct + { + uint32_t : 1; + __IOM uint32_t MSTPB1 : 1; /*!< [1..1] RCAN1 Module Stop */ + __IOM uint32_t MSTPB2 : 1; /*!< [2..2] RCAN0 Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPB5 : 1; /*!< [5..5] IrDA Module Stop */ + __IOM uint32_t MSTPB6 : 1; /*!< [6..6] Queued Serial Peripheral Interface Module Stop */ + __IOM uint32_t MSTPB7 : 1; /*!< [7..7] I2C Bus Interface 2 Module Stop */ + __IOM uint32_t MSTPB8 : 1; /*!< [8..8] I2C Bus Interface 1 Module Stop */ + __IOM uint32_t MSTPB9 : 1; /*!< [9..9] I2C Bus Interface 0 Module Stop */ + uint32_t : 1; + __IOM uint32_t MSTPB11 : 1; /*!< [11..11] Universal Serial Bus 2.0 FS Interface Module Stop */ + __IOM uint32_t MSTPB12 : 1; /*!< [12..12] Universal Serial Bus 2.0 HS Interface Module Stop */ + __IOM uint32_t MSTPB13 : 1; /*!< [13..13] EPTPC and PTPEDMAC Module Stop */ + __IOM uint32_t MSTPB14 : 1; /*!< [14..14] ETHERC1 and EDMAC1 Module Stop */ + __IOM uint32_t MSTPB15 : 1; /*!< [15..15] ETHERC0 and EDMAC0 Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPB18 : 1; /*!< [18..18] Serial Peripheral Interface Module Stop */ + __IOM uint32_t MSTPB19 : 1; /*!< [19..19] Serial Peripheral Interface 0 Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPB22 : 1; /*!< [22..22] Serial Communication Interface 9 Module Stop */ + __IOM uint32_t MSTPB23 : 1; /*!< [23..23] Serial Communication Interface 8 Module Stop */ + __IOM uint32_t MSTPB24 : 1; /*!< [24..24] Serial Communication Interface 7 Module Stop */ + __IOM uint32_t MSTPB25 : 1; /*!< [25..25] Serial Communication Interface 6 Module Stop */ + __IOM uint32_t MSTPB26 : 1; /*!< [26..26] Serial Communication Interface 5 Module Stop */ + __IOM uint32_t MSTPB27 : 1; /*!< [27..27] Serial Communication Interface 4 Module Stop */ + __IOM uint32_t MSTPB28 : 1; /*!< [28..28] Serial Communication Interface 3 Module Stop */ + __IOM uint32_t MSTPB29 : 1; /*!< [29..29] Serial Communication Interface 2 Module Stop */ + __IOM uint32_t MSTPB30 : 1; /*!< [30..30] Serial Communication Interface 1 Module Stop */ + __IOM uint32_t MSTPB31 : 1; /*!< [31..31] Serial Communication Interface 0 Module Stop */ + } MSTPCRB_b; + }; + + union + { + __IOM uint32_t MSTPCRC; /*!< (@ 0x00000004) Module Stop Control Register C */ + + struct + { + __IOM uint32_t MSTPC0 : 1; /*!< [0..0] CAC Module Stop */ + __IOM uint32_t MSTPC1 : 1; /*!< [1..1] CRC Calculator Module Stop */ + __IOM uint32_t MSTPC2 : 1; /*!< [2..2] Parallel Data Capture Module Stop */ + __IOM uint32_t MSTPC3 : 1; /*!< [3..3] Capacitive Touch Sensing Unit Module Stop */ + __IOM uint32_t MSTPC4 : 1; /*!< [4..4] Segment LCD Controller Module Stop */ + __IOM uint32_t MSTPC5 : 1; /*!< [5..5] JPEG codec engine Module Stop */ + __IOM uint32_t MSTPC6 : 1; /*!< [6..6] 2DG engine Module Stop */ + __IOM uint32_t MSTPC7 : 1; /*!< [7..7] Synchronous Serial Interface 1 Module Stop */ + __IOM uint32_t MSTPC8 : 1; /*!< [8..8] Synchronous Serial Interface 0 Module Stop */ + __IOM uint32_t MSTPC9 : 1; /*!< [9..9] Sampling Rate Converter Module Stop */ + uint32_t : 1; + __IOM uint32_t MSTPC11 : 1; /*!< [11..11] Secure Digital Host IF/ Multi Media Card 1 Module Stop */ + __IOM uint32_t MSTPC12 : 1; /*!< [12..12] Secure Digital Host IF/ Multi Media Card 0 Module Stop */ + __IOM uint32_t MSTPC13 : 1; /*!< [13..13] Data Operation Circuit Module Stop */ + __IOM uint32_t MSTPC14 : 1; /*!< [14..14] Event Link Controller Module Stop */ + uint32_t : 13; + __IOM uint32_t MSTPC28 : 1; /*!< [28..28] Random Number Generator Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPC31 : 1; /*!< [31..31] AES Module Stop */ + } MSTPCRC_b; + }; + + union + { + __IOM uint32_t MSTPCRD; /*!< (@ 0x00000008) Module Stop Control Register D */ + + struct + { + __IOM uint32_t MSTPD0 : 1; /*!< [0..0] Low Power Asynchronous General Purpose Timer 3 Module + * Stop */ + __IOM uint32_t MSTPD1 : 1; /*!< [1..1] Low Power Asynchronous General Purpose Timer 2 Module + * Stop */ + __IOM uint32_t MSTPD2 : 1; /*!< [2..2] AGT1 Module StopNote: AGT1 is in the module stop state + * when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. + * In case the count source is sub-clock or LOCO, this bit + * should be set to 1 except when accessing the registers + * of AGT1. */ + __IOM uint32_t MSTPD3 : 1; /*!< [3..3] AGT0 Module StopNote: AGT0 is in the module stop state + * when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. + * In case the count source is sub-clock or LOCO, this bit + * should be set to 1 except when accessing the registers + * of AGT0. */ + uint32_t : 1; + __IOM uint32_t MSTPD5 : 1; /*!< [5..5] GPT Lower Module Stop */ + __IOM uint32_t MSTPD6 : 1; /*!< [6..6] GPT Higher Module Stop */ + uint32_t : 4; + __IOM uint32_t MSTPD11 : 1; /*!< [11..11] Port Output Enable for GPT 3 Module Stop */ + __IOM uint32_t MSTPD12 : 1; /*!< [12..12] Port Output Enable for GPT 2 Module Stop */ + __IOM uint32_t MSTPD13 : 1; /*!< [13..13] Port Output Enable for GPT 1 Module Stop */ + __IOM uint32_t MSTPD14 : 1; /*!< [14..14] POEG Module Stop */ + __IOM uint32_t MSTPD15 : 1; /*!< [15..15] 12-Bit A/D Converter 1 Module Stop */ + __IOM uint32_t MSTPD16 : 1; /*!< [16..16] 16-Bit A/D Converter Module Stop */ + __IOM uint32_t MSTPD17 : 1; /*!< [17..17] 24-bit Sigma-Delta A/DConverter Module Stop */ + uint32_t : 1; + __IOM uint32_t MSTPD19 : 1; /*!< [19..19] 8-Bit D/A Converter Module Stop */ + __IOM uint32_t MSTPD20 : 1; /*!< [20..20] 12-bit D/A Converter Module Stop */ + uint32_t : 1; + __IOM uint32_t MSTPD22 : 1; /*!< [22..22] Temperature Sensor Module Stop */ + __IOM uint32_t MSTPD23 : 1; /*!< [23..23] ACMPHS5 Module Stop */ + __IOM uint32_t MSTPD24 : 1; /*!< [24..24] ACMPHS4 Module Stop */ + __IOM uint32_t MSTPD25 : 1; /*!< [25..25] ACMPHS3 Module Stop */ + __IOM uint32_t MSTPD26 : 1; /*!< [26..26] ACMPHS2 Module Stop */ + __IOM uint32_t MSTPD27 : 1; /*!< [27..27] ACMPHS1 Module Stop */ + __IOM uint32_t MSTPD28 : 1; /*!< [28..28] ACMPHS0 Module Stop */ + __IOM uint32_t MSTPD29 : 1; /*!< [29..29] Comparator-LP Module Stop */ + uint32_t : 1; + __IOM uint32_t MSTPD31 : 1; /*!< [31..31] Operational Amplifier Module Stop */ + } MSTPCRD_b; + }; + + union + { + __IOM uint32_t MSTPCRE; /*!< (@ 0x0000000C) Module Stop Control Register E */ + + struct + { + uint32_t : 14; + __IOM uint32_t MSTPE14 : 1; /*!< [14..14] Low Power Asynchronous General Purpose Timer 5 Module + * Stop */ + __IOM uint32_t MSTPE15 : 1; /*!< [15..15] Low Power Asynchronous General Purpose Timer 4 Module + * Stop */ + uint32_t : 6; + __IOM uint32_t MSTPE22 : 1; /*!< [22..22] GPT9 Module Stop */ + __IOM uint32_t MSTPE23 : 1; /*!< [23..23] GPT8 Module Stop */ + __IOM uint32_t MSTPE24 : 1; /*!< [24..24] GPT7 Module Stop */ + __IOM uint32_t MSTPE25 : 1; /*!< [25..25] GPT6 Module Stop */ + __IOM uint32_t MSTPE26 : 1; /*!< [26..26] GPT5 Module Stop */ + __IOM uint32_t MSTPE27 : 1; /*!< [27..27] GPT4 Module Stop */ + __IOM uint32_t MSTPE28 : 1; /*!< [28..28] GPT3 Module Stop */ + __IOM uint32_t MSTPE29 : 1; /*!< [29..29] GPT2 Module Stop */ + __IOM uint32_t MSTPE30 : 1; /*!< [30..30] GPT1 Module Stop */ + __IOM uint32_t MSTPE31 : 1; /*!< [31..31] GPT0 Module Stop */ + } MSTPCRE_b; + }; +} R_MSTP_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_OPAMP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Operational Amplifier (R_OPAMP) + */ + +typedef struct /*!< (@ 0x40086000) R_OPAMP Structure */ +{ + __IM uint8_t RESERVED[8]; + + union + { + __IOM uint8_t AMPMC; /*!< (@ 0x00000008) Operational amplifier mode control register */ + + struct + { + __IOM uint8_t AMPPC0 : 1; /*!< [0..0] Operational amplifier precharge control status */ + __IOM uint8_t AMPPC1 : 1; /*!< [1..1] Operational amplifier precharge control status */ + __IOM uint8_t AMPPC2 : 1; /*!< [2..2] Operational amplifier precharge control status */ + uint8_t : 4; + __IOM uint8_t AMPSP : 1; /*!< [7..7] Operation mode selection */ + } AMPMC_b; + }; + + union + { + __IOM uint8_t AMPTRM; /*!< (@ 0x00000009) Operational amplifier trigger mode control register */ + + struct + { + __IOM uint8_t AMPTRM0 : 2; /*!< [1..0] Operational amplifier function activation/stop trigger + * control */ + __IOM uint8_t AMPTRM1 : 2; /*!< [3..2] Operational amplifier function activation/stop trigger + * control */ + __IOM uint8_t AMPTRM2 : 2; /*!< [5..4] Operational amplifier function activation/stop trigger + * control */ + __IOM uint8_t AMPTRM3 : 2; /*!< [7..6] Operational amplifier function activation/stop trigger + * control */ + } AMPTRM_b; + }; + + union + { + __IOM uint8_t AMPTRS; /*!< (@ 0x0000000A) Operational Amplifier Activation Trigger Select + * Register */ + + struct + { + __IOM uint8_t AMPTRS : 2; /*!< [1..0] ELC trigger selection Do not change the value of the + * AMPTRS register after setting the AMPTRM register. */ + uint8_t : 6; + } AMPTRS_b; + }; + + union + { + __IOM uint8_t AMPC; /*!< (@ 0x0000000B) Operational amplifier control register */ + + struct + { + __IOM uint8_t AMPE0 : 1; /*!< [0..0] Operation control of operational amplifier */ + __IOM uint8_t AMPE1 : 1; /*!< [1..1] Operation control of operational amplifier */ + __IOM uint8_t AMPE2 : 1; /*!< [2..2] Operation control of operational amplifier */ + __IOM uint8_t AMPE3 : 1; /*!< [3..3] Operation control of operational amplifier */ + uint8_t : 3; + __IOM uint8_t IREFE : 1; /*!< [7..7] Operation control of operational amplifier reference + * current circuit */ + } AMPC_b; + }; + + union + { + __IM uint8_t AMPMON; /*!< (@ 0x0000000C) Operational amplifier monitor register */ + + struct + { + __IM uint8_t AMPMON0 : 1; /*!< [0..0] Operational amplifier status */ + __IM uint8_t AMPMON1 : 1; /*!< [1..1] Operational amplifier status */ + __IM uint8_t AMPMON2 : 1; /*!< [2..2] Operational amplifier status */ + __IM uint8_t AMPMON3 : 1; /*!< [3..3] Operational amplifier status */ + uint8_t : 4; + } AMPMON_b; + }; + __IM uint8_t RESERVED1; + __IOM R_OPAMP_AMP_Type AMP[4]; /*!< (@ 0x0000000E) Input and Output Selectors for Operational Amplifier + * [0..3] */ + + union + { + __IOM uint8_t AMPCPC; /*!< (@ 0x0000001A) Operational amplifier switch charge pump control + * register */ + + struct + { + __IOM uint8_t PUMP0EN : 1; /*!< [0..0] charge pump for AMP0 enable/disable */ + __IOM uint8_t PUMP1EN : 1; /*!< [1..1] charge pump for AMP1 enable/disable */ + __IOM uint8_t PUMP2EN : 1; /*!< [2..2] charge pump for AMP2 enable/disable */ + uint8_t : 5; + } AMPCPC_b; + }; + __IM uint8_t RESERVED2[4]; + + union + { + __IOM uint8_t AMPUOTE; /*!< (@ 0x0000001F) Operational Amplifier User Offset Trimming Enable + * Register */ + + struct + { + __IOM uint8_t AMP0TE : 1; /*!< [0..0] AMP0OT write enable */ + __IOM uint8_t AMP1TE : 1; /*!< [1..1] AMP1OT write enable */ + __IOM uint8_t AMP2TE : 1; /*!< [2..2] AMP2OT write enable */ + uint8_t : 5; + } AMPUOTE_b; + }; + __IOM R_OPAMP_AMPOT_Type AMPOT[3]; /*!< (@ 0x00000020) Operational Amplifier n Offset Trimming Registers */ +} R_OPAMP_Type; /*!< Size = 38 (0x26) */ + +/* =========================================================================================================================== */ +/* ================ R_PDC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Parallel Data Capture Unit (R_PDC) + */ + +typedef struct /*!< (@ 0x40094000) R_PDC Structure */ +{ + union + { + __IOM uint32_t PCCR0; /*!< (@ 0x00000000) PDC Control Register 0 */ + + struct + { + __IOM uint32_t PCKE : 1; /*!< [0..0] Channel 0 GTCNT Count Clear */ + __IOM uint32_t VPS : 1; /*!< [1..1] VSYNC Signal Polarity Select */ + __IOM uint32_t HPS : 1; /*!< [2..2] HSYNC Signal Polarity Select */ + __OM uint32_t PRST : 1; /*!< [3..3] PDC Reset */ + __IOM uint32_t DFIE : 1; /*!< [4..4] Receive Data Ready Interrupt Enable */ + __IOM uint32_t FEIE : 1; /*!< [5..5] Frame End Interrupt Enable */ + __IOM uint32_t OVIE : 1; /*!< [6..6] Overrun Interrupt Enable */ + __IOM uint32_t UDRIE : 1; /*!< [7..7] Underrun Interrupt Enable */ + __IOM uint32_t VERIE : 1; /*!< [8..8] Vertical Line Number Setting Error Interrupt Enable */ + __IOM uint32_t HERIE : 1; /*!< [9..9] Horizontal Byte Number Setting Error Interrupt Enable */ + __IOM uint32_t PCKOE : 1; /*!< [10..10] PCKO Output Enable */ + __IOM uint32_t PCKDIV : 3; /*!< [13..11] PCKO Frequency Division Ratio Select */ + __IOM uint32_t EDS : 1; /*!< [14..14] Endian Select */ + uint32_t : 17; + } PCCR0_b; + }; + + union + { + __IOM uint32_t PCCR1; /*!< (@ 0x00000004) PDC Control Register 1 */ + + struct + { + __IOM uint32_t PCE : 1; /*!< [0..0] PDC Operation Enable */ + uint32_t : 31; + } PCCR1_b; + }; + + union + { + __IOM uint32_t PCSR; /*!< (@ 0x00000008) PDC Status Register */ + + struct + { + __IM uint32_t FBSY : 1; /*!< [0..0] Frame Busy Flag */ + __IM uint32_t FEMPF : 1; /*!< [1..1] FIFO Empty Flag */ + __IOM uint32_t FEF : 1; /*!< [2..2] Frame End Flag */ + __IOM uint32_t OVRF : 1; /*!< [3..3] Overrun Flag */ + __IOM uint32_t UDRF : 1; /*!< [4..4] Underrun Flag */ + __IOM uint32_t VERF : 1; /*!< [5..5] Vertical Line Number Setting Error Flag */ + __IOM uint32_t HERF : 1; /*!< [6..6] Horizontal Byte Number Setting Error Flag */ + uint32_t : 25; + } PCSR_b; + }; + + union + { + __IM uint32_t PCMONR; /*!< (@ 0x0000000C) PDC Pin Monitor Register */ + + struct + { + __IM uint32_t VSYNC : 1; /*!< [0..0] VSYNC Signal Status Flag */ + __IM uint32_t HSYNC : 1; /*!< [1..1] HSYNC Signal Status Flag */ + uint32_t : 30; + } PCMONR_b; + }; + + union + { + __IM uint32_t PCDR; /*!< (@ 0x00000010) PDC Receive Data Register */ + + struct + { + __IM uint32_t PCDR : 32; /*!< [31..0] The PDC includes a 32-bit-wide, 22-stage FIFO for the + * storage of captured data. The PCDR register is a 4-byte + * space to which the FIFO is mapped, and four bytes of data + * are read from the PCDR register at a time. */ + } PCDR_b; + }; + + union + { + __IOM uint32_t VCR; /*!< (@ 0x00000014) Vertical Capture Register */ + + struct + { + __IOM uint32_t VST : 12; /*!< [11..0] Vertical Capture Start Line PositionNumber of the line + * where capture is to start. */ + uint32_t : 4; + __IOM uint32_t VSZ : 12; /*!< [27..16] Vertical Capture Size Number of lines to be captured. */ + uint32_t : 4; + } VCR_b; + }; + + union + { + __IOM uint32_t HCR; /*!< (@ 0x00000018) Horizontal Capture Register */ + + struct + { + __IOM uint32_t HST : 12; /*!< [11..0] Horizontal Capture Start Byte Position Horizontal position + * in bytes where capture is to start. */ + uint32_t : 4; + __IOM uint32_t HSZ : 12; /*!< [27..16] Horizontal Capture Size Number of bytes to capture + * horizontally. */ + uint32_t : 4; + } HCR_b; + }; +} R_PDC_Type; /*!< Size = 28 (0x1c) */ + +/* =========================================================================================================================== */ +/* ================ R_PORT0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports (R_PORT0) + */ + +typedef struct /*!< (@ 0x40040000) R_PORT0 Structure */ +{ + union + { + union + { + __IOM uint32_t PCNTR1; /*!< (@ 0x00000000) Port Control Register 1 */ + + struct + { + __IOM uint32_t PDR : 16; /*!< [15..0] Pmn Direction */ + __IOM uint32_t PODR : 16; /*!< [31..16] Pmn Output Data */ + } PCNTR1_b; + }; struct { - __IOM uint8_t WUAFA : 1; /*!< [0..0] Wakeup Analog Filter Additional Selection */ - uint8_t : 3; - __IOM uint8_t WUACK : 1; /*!< [4..4] ACK bit for Wakeup Mode */ - __IOM uint8_t WUF : 1; /*!< [5..5] Wakeup Event Occurrence Flag */ - __IOM uint8_t WUIE : 1; /*!< [6..6] Wakeup Interrupt Request Enable */ - __IOM uint8_t WUE : 1; /*!< [7..7] Wakeup Function Enable */ - } ICWUR_b; + union + { + __IOM uint16_t PODR; /*!< (@ 0x00000000) Output data register */ + + struct + { + __IOM uint16_t PODR0 : 1; /*!< [0..0] Pmn Output Data */ + __IOM uint16_t PODR1 : 1; /*!< [1..1] Pmn Output Data */ + __IOM uint16_t PODR2 : 1; /*!< [2..2] Pmn Output Data */ + __IOM uint16_t PODR3 : 1; /*!< [3..3] Pmn Output Data */ + __IOM uint16_t PODR4 : 1; /*!< [4..4] Pmn Output Data */ + __IOM uint16_t PODR5 : 1; /*!< [5..5] Pmn Output Data */ + __IOM uint16_t PODR6 : 1; /*!< [6..6] Pmn Output Data */ + __IOM uint16_t PODR7 : 1; /*!< [7..7] Pmn Output Data */ + __IOM uint16_t PODR8 : 1; /*!< [8..8] Pmn Output Data */ + __IOM uint16_t PODR9 : 1; /*!< [9..9] Pmn Output Data */ + __IOM uint16_t PODR10 : 1; /*!< [10..10] Pmn Output Data */ + __IOM uint16_t PODR11 : 1; /*!< [11..11] Pmn Output Data */ + __IOM uint16_t PODR12 : 1; /*!< [12..12] Pmn Output Data */ + __IOM uint16_t PODR13 : 1; /*!< [13..13] Pmn Output Data */ + __IOM uint16_t PODR14 : 1; /*!< [14..14] Pmn Output Data */ + __IOM uint16_t PODR15 : 1; /*!< [15..15] Pmn Output Data */ + } PODR_b; + }; + + union + { + __IOM uint16_t PDR; /*!< (@ 0x00000002) Data direction register */ + + struct + { + __IOM uint16_t PDR0 : 1; /*!< [0..0] Pmn Direction */ + __IOM uint16_t PDR1 : 1; /*!< [1..1] Pmn Direction */ + __IOM uint16_t PDR2 : 1; /*!< [2..2] Pmn Direction */ + __IOM uint16_t PDR3 : 1; /*!< [3..3] Pmn Direction */ + __IOM uint16_t PDR4 : 1; /*!< [4..4] Pmn Direction */ + __IOM uint16_t PDR5 : 1; /*!< [5..5] Pmn Direction */ + __IOM uint16_t PDR6 : 1; /*!< [6..6] Pmn Direction */ + __IOM uint16_t PDR7 : 1; /*!< [7..7] Pmn Direction */ + __IOM uint16_t PDR8 : 1; /*!< [8..8] Pmn Direction */ + __IOM uint16_t PDR9 : 1; /*!< [9..9] Pmn Direction */ + __IOM uint16_t PDR10 : 1; /*!< [10..10] Pmn Direction */ + __IOM uint16_t PDR11 : 1; /*!< [11..11] Pmn Direction */ + __IOM uint16_t PDR12 : 1; /*!< [12..12] Pmn Direction */ + __IOM uint16_t PDR13 : 1; /*!< [13..13] Pmn Direction */ + __IOM uint16_t PDR14 : 1; /*!< [14..14] Pmn Direction */ + __IOM uint16_t PDR15 : 1; /*!< [15..15] Pmn Direction */ + } PDR_b; + }; + }; }; union { - __IOM uint8_t ICWUR2; /*!< (@ 0x00000017) I2C Bus Wake up Unit Register 2 */ + union + { + __IM uint32_t PCNTR2; /*!< (@ 0x00000004) Port Control Register 2 */ + + struct + { + __IM uint32_t PIDR : 16; /*!< [15..0] Pmn Input Data */ + __IM uint32_t EIDR : 16; /*!< [31..16] Pmn Event Input Data */ + } PCNTR2_b; + }; struct { - __IM uint8_t WUSEN : 1; /*!< [0..0] Wake-up Function Synchronous Enable */ - __IM uint8_t WUASYF : 1; /*!< [1..1] Wake-up Function Asynchronous Operation Status Flag */ - __IM uint8_t WUSYF : 1; /*!< [2..2] Wake-up Function Synchronous Operation Status Flag */ - uint8_t : 5; - } ICWUR2_b; + union + { + __IM uint16_t EIDR; /*!< (@ 0x00000004) Event input data register */ + + struct + { + __IM uint16_t EIDR0 : 1; /*!< [0..0] Pmn Event Input Data */ + __IM uint16_t EIDR1 : 1; /*!< [1..1] Pmn Event Input Data */ + __IM uint16_t EIDR2 : 1; /*!< [2..2] Pmn Event Input Data */ + __IM uint16_t EIDR3 : 1; /*!< [3..3] Pmn Event Input Data */ + __IM uint16_t EIDR4 : 1; /*!< [4..4] Pmn Event Input Data */ + __IM uint16_t EIDR5 : 1; /*!< [5..5] Pmn Event Input Data */ + __IM uint16_t EIDR6 : 1; /*!< [6..6] Pmn Event Input Data */ + __IM uint16_t EIDR7 : 1; /*!< [7..7] Pmn Event Input Data */ + __IM uint16_t EIDR8 : 1; /*!< [8..8] Pmn Event Input Data */ + __IM uint16_t EIDR9 : 1; /*!< [9..9] Pmn Event Input Data */ + __IM uint16_t EIDR10 : 1; /*!< [10..10] Pmn Event Input Data */ + __IM uint16_t EIDR11 : 1; /*!< [11..11] Pmn Event Input Data */ + __IM uint16_t EIDR12 : 1; /*!< [12..12] Pmn Event Input Data */ + __IM uint16_t EIDR13 : 1; /*!< [13..13] Pmn Event Input Data */ + __IM uint16_t EIDR14 : 1; /*!< [14..14] Pmn Event Input Data */ + __IM uint16_t EIDR15 : 1; /*!< [15..15] Pmn Event Input Data */ + } EIDR_b; + }; + + union + { + __IM uint16_t PIDR; /*!< (@ 0x00000006) Input data register */ + + struct + { + __IM uint16_t PIDR0 : 1; /*!< [0..0] Pmn Input Data */ + __IM uint16_t PIDR1 : 1; /*!< [1..1] Pmn Input Data */ + __IM uint16_t PIDR2 : 1; /*!< [2..2] Pmn Input Data */ + __IM uint16_t PIDR3 : 1; /*!< [3..3] Pmn Input Data */ + __IM uint16_t PIDR4 : 1; /*!< [4..4] Pmn Input Data */ + __IM uint16_t PIDR5 : 1; /*!< [5..5] Pmn Input Data */ + __IM uint16_t PIDR6 : 1; /*!< [6..6] Pmn Input Data */ + __IM uint16_t PIDR7 : 1; /*!< [7..7] Pmn Input Data */ + __IM uint16_t PIDR8 : 1; /*!< [8..8] Pmn Input Data */ + __IM uint16_t PIDR9 : 1; /*!< [9..9] Pmn Input Data */ + __IM uint16_t PIDR10 : 1; /*!< [10..10] Pmn Input Data */ + __IM uint16_t PIDR11 : 1; /*!< [11..11] Pmn Input Data */ + __IM uint16_t PIDR12 : 1; /*!< [12..12] Pmn Input Data */ + __IM uint16_t PIDR13 : 1; /*!< [13..13] Pmn Input Data */ + __IM uint16_t PIDR14 : 1; /*!< [14..14] Pmn Input Data */ + __IM uint16_t PIDR15 : 1; /*!< [15..15] Pmn Input Data */ + } PIDR_b; + }; + }; }; -} R_IIC0_Type; /*!< Size = 24 (0x18) */ -/* =========================================================================================================================== */ -/* ================ R_IRDA ================ */ -/* =========================================================================================================================== */ + union + { + union + { + __OM uint32_t PCNTR3; /*!< (@ 0x00000008) Port Control Register 3 */ -/** - * @brief IrDA Interface (R_IRDA) - */ + struct + { + __OM uint32_t POSR : 16; /*!< [15..0] Pmn Output Set */ + __OM uint32_t PORR : 16; /*!< [31..16] Pmn Output Reset */ + } PCNTR3_b; + }; + + struct + { + union + { + __OM uint16_t PORR; /*!< (@ 0x00000008) Output set register */ + + struct + { + __OM uint16_t PORR0 : 1; /*!< [0..0] Pmn Output Reset */ + __OM uint16_t PORR1 : 1; /*!< [1..1] Pmn Output Reset */ + __OM uint16_t PORR2 : 1; /*!< [2..2] Pmn Output Reset */ + __OM uint16_t PORR3 : 1; /*!< [3..3] Pmn Output Reset */ + __OM uint16_t PORR4 : 1; /*!< [4..4] Pmn Output Reset */ + __OM uint16_t PORR5 : 1; /*!< [5..5] Pmn Output Reset */ + __OM uint16_t PORR6 : 1; /*!< [6..6] Pmn Output Reset */ + __OM uint16_t PORR7 : 1; /*!< [7..7] Pmn Output Reset */ + __OM uint16_t PORR8 : 1; /*!< [8..8] Pmn Output Reset */ + __OM uint16_t PORR9 : 1; /*!< [9..9] Pmn Output Reset */ + __OM uint16_t PORR10 : 1; /*!< [10..10] Pmn Output Reset */ + __OM uint16_t PORR11 : 1; /*!< [11..11] Pmn Output Reset */ + __OM uint16_t PORR12 : 1; /*!< [12..12] Pmn Output Reset */ + __OM uint16_t PORR13 : 1; /*!< [13..13] Pmn Output Reset */ + __OM uint16_t PORR14 : 1; /*!< [14..14] Pmn Output Reset */ + __OM uint16_t PORR15 : 1; /*!< [15..15] Pmn Output Reset */ + } PORR_b; + }; + + union + { + __OM uint16_t POSR; /*!< (@ 0x0000000A) Output reset register */ + + struct + { + __OM uint16_t POSR0 : 1; /*!< [0..0] Pmn Output Set */ + __OM uint16_t POSR1 : 1; /*!< [1..1] Pmn Output Set */ + __OM uint16_t POSR2 : 1; /*!< [2..2] Pmn Output Set */ + __OM uint16_t POSR3 : 1; /*!< [3..3] Pmn Output Set */ + __OM uint16_t POSR4 : 1; /*!< [4..4] Pmn Output Set */ + __OM uint16_t POSR5 : 1; /*!< [5..5] Pmn Output Set */ + __OM uint16_t POSR6 : 1; /*!< [6..6] Pmn Output Set */ + __OM uint16_t POSR7 : 1; /*!< [7..7] Pmn Output Set */ + __OM uint16_t POSR8 : 1; /*!< [8..8] Pmn Output Set */ + __OM uint16_t POSR9 : 1; /*!< [9..9] Pmn Output Set */ + __OM uint16_t POSR10 : 1; /*!< [10..10] Pmn Output Set */ + __OM uint16_t POSR11 : 1; /*!< [11..11] Pmn Output Set */ + __OM uint16_t POSR12 : 1; /*!< [12..12] Pmn Output Set */ + __OM uint16_t POSR13 : 1; /*!< [13..13] Pmn Output Set */ + __OM uint16_t POSR14 : 1; /*!< [14..14] Pmn Output Set */ + __OM uint16_t POSR15 : 1; /*!< [15..15] Pmn Output Set */ + } POSR_b; + }; + }; + }; + + union + { + union + { + __IOM uint32_t PCNTR4; /*!< (@ 0x0000000C) Port Control Register 4 */ + + struct + { + __IOM uint32_t EOSR : 16; /*!< [15..0] Pmn Event Output Set */ + __IOM uint32_t EORR : 16; /*!< [31..16] Pmn Event Output Reset */ + } PCNTR4_b; + }; + + struct + { + union + { + __IOM uint16_t EORR; /*!< (@ 0x0000000C) Event output set register */ + + struct + { + __IOM uint16_t EORR0 : 1; /*!< [0..0] Pmn Event Output Reset */ + __IOM uint16_t EORR1 : 1; /*!< [1..1] Pmn Event Output Reset */ + __IOM uint16_t EORR2 : 1; /*!< [2..2] Pmn Event Output Reset */ + __IOM uint16_t EORR3 : 1; /*!< [3..3] Pmn Event Output Reset */ + __IOM uint16_t EORR4 : 1; /*!< [4..4] Pmn Event Output Reset */ + __IOM uint16_t EORR5 : 1; /*!< [5..5] Pmn Event Output Reset */ + __IOM uint16_t EORR6 : 1; /*!< [6..6] Pmn Event Output Reset */ + __IOM uint16_t EORR7 : 1; /*!< [7..7] Pmn Event Output Reset */ + __IOM uint16_t EORR8 : 1; /*!< [8..8] Pmn Event Output Reset */ + __IOM uint16_t EORR9 : 1; /*!< [9..9] Pmn Event Output Reset */ + __IOM uint16_t EORR10 : 1; /*!< [10..10] Pmn Event Output Reset */ + __IOM uint16_t EORR11 : 1; /*!< [11..11] Pmn Event Output Reset */ + __IOM uint16_t EORR12 : 1; /*!< [12..12] Pmn Event Output Reset */ + __IOM uint16_t EORR13 : 1; /*!< [13..13] Pmn Event Output Reset */ + __IOM uint16_t EORR14 : 1; /*!< [14..14] Pmn Event Output Reset */ + __IOM uint16_t EORR15 : 1; /*!< [15..15] Pmn Event Output Reset */ + } EORR_b; + }; -typedef struct /*!< (@ 0x40070F00) R_IRDA Structure */ -{ - union - { - __IOM uint8_t IRCR; /*!< (@ 0x00000000) IrDA Control Register */ + union + { + __IOM uint16_t EOSR; /*!< (@ 0x0000000E) Event output reset register */ - struct - { - uint8_t : 2; - __IOM uint8_t IRRXINV : 1; /*!< [2..2] IRRXD Polarity Switching */ - __IOM uint8_t IRTXINV : 1; /*!< [3..3] IRTXD Polarity Switching */ - uint8_t : 3; - __IOM uint8_t IRE : 1; /*!< [7..7] IrDA Enable */ - } IRCR_b; + struct + { + __IOM uint16_t EOSR0 : 1; /*!< [0..0] Pmn Event Output Set */ + __IOM uint16_t EOSR1 : 1; /*!< [1..1] Pmn Event Output Set */ + __IOM uint16_t EOSR2 : 1; /*!< [2..2] Pmn Event Output Set */ + __IOM uint16_t EOSR3 : 1; /*!< [3..3] Pmn Event Output Set */ + __IOM uint16_t EOSR4 : 1; /*!< [4..4] Pmn Event Output Set */ + __IOM uint16_t EOSR5 : 1; /*!< [5..5] Pmn Event Output Set */ + __IOM uint16_t EOSR6 : 1; /*!< [6..6] Pmn Event Output Set */ + __IOM uint16_t EOSR7 : 1; /*!< [7..7] Pmn Event Output Set */ + __IOM uint16_t EOSR8 : 1; /*!< [8..8] Pmn Event Output Set */ + __IOM uint16_t EOSR9 : 1; /*!< [9..9] Pmn Event Output Set */ + __IOM uint16_t EOSR10 : 1; /*!< [10..10] Pmn Event Output Set */ + __IOM uint16_t EOSR11 : 1; /*!< [11..11] Pmn Event Output Set */ + __IOM uint16_t EOSR12 : 1; /*!< [12..12] Pmn Event Output Set */ + __IOM uint16_t EOSR13 : 1; /*!< [13..13] Pmn Event Output Set */ + __IOM uint16_t EOSR14 : 1; /*!< [14..14] Pmn Event Output Set */ + __IOM uint16_t EOSR15 : 1; /*!< [15..15] Pmn Event Output Set */ + } EOSR_b; + }; + }; }; -} R_IRDA_Type; /*!< Size = 1 (0x1) */ +} R_PORT0_Type; /*!< Size = 16 (0x10) */ /* =========================================================================================================================== */ -/* ================ R_IWDT ================ */ +/* ================ R_PFS ================ */ /* =========================================================================================================================== */ /** - * @brief Independent Watchdog Timer (R_IWDT) + * @brief I/O Ports-PFS (R_PFS) */ -typedef struct /*!< (@ 0x40044400) R_IWDT Structure */ +typedef struct /*!< (@ 0x40040800) R_PFS Structure */ { - union - { - __IOM uint8_t IWDTRR; /*!< (@ 0x00000000) IWDT Refresh Register */ - - struct - { - __IOM uint8_t IWDTRR : 8; /*!< [7..0] The counter is refreshed by writing 0x00 and then writing - * 0xFF to this register. */ - } IWDTRR_b; - }; - __IM uint8_t RESERVED; - __IM uint16_t RESERVED1; - - union - { - __IOM uint16_t IWDTSR; /*!< (@ 0x00000004) IWDT Status Register */ - - struct - { - __IM uint16_t CNTVAL : 14; /*!< [13..0] Counter ValueValue counted by the counter */ - __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ - __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ - } IWDTSR_b; - }; -} R_IWDT_Type; /*!< Size = 6 (0x6) */ + __IOM R_PFS_PORT_Type PORT[12]; /*!< (@ 0x00000000) Port [0..11] */ +} R_PFS_Type; /*!< Size = 768 (0x300) */ /* =========================================================================================================================== */ -/* ================ R_JPEG ================ */ +/* ================ R_PMISC ================ */ /* =========================================================================================================================== */ /** - * @brief JPEG Codec (R_JPEG) + * @brief I/O Ports-MISC (R_PMISC) */ -typedef struct /*!< (@ 0x400E6000) R_JPEG Structure */ +typedef struct /*!< (@ 0x40040D00) R_PMISC Structure */ { union { - __IOM uint8_t JCMOD; /*!< (@ 0x00000000) JPEG Code Mode Register */ - - struct - { - __IOM uint8_t REDU : 3; /*!< [2..0] Pixel FormatNOTE: Read-only in Decompression. */ - __IOM uint8_t DSP : 1; /*!< [3..3] Compression/Decompression Set Note: When changing between - * processing for compression and for decompression, be sure - * to reset this module in advance by setting the JCUSRST - * bit in the software reset control register 2 (SWRSTCR2) - * of the power-downmodes. */ - uint8_t : 4; - } JCMOD_b; - }; - - union - { - __OM uint8_t JCCMD; /*!< (@ 0x00000001) JPEG Code Command Register */ - - struct - { - __OM uint8_t JSRT : 1; /*!< [0..0] JPEG Core Process Start CommandTo start JPEG core processing, - * set this bit to 1. Do not write this bit to 1 again while - * this module is in operation. */ - __OM uint8_t JRST : 1; /*!< [1..1] JPEG Core Process Stop Clear CommandTo clear the process-stopped - * state caused by requests to read the image size and pixel - * format (enabled by the INT3 bit in JINTE0), set this bit - * to 1. */ - __OM uint8_t JEND : 1; /*!< [2..2] Interrupt Request Clear Command This bit is valid only - * for the interrupt sources corresponding to bits INS6, INS5, - * and INS3 in JINTS0. To clear an interrupt request, set - * this bit to 1 */ - uint8_t : 4; - __OM uint8_t BRST : 1; /*!< [7..7] Bus Reset. NOTE: When this module is in operation, the - * bus reset command should not be issued. */ - } JCCMD_b; - }; - __IM uint8_t RESERVED; - - union - { - __IOM uint8_t JCQTN; /*!< (@ 0x00000003) JPEG Code Quantization Table Number Register */ + __IOM uint8_t PFENET; /*!< (@ 0x00000000) Ethernet Control Register */ struct { - __IOM uint8_t QT1 : 2; /*!< [1..0] Quantization table number for the first color componentNOTE: - * Read-only in Decompression. */ - __IOM uint8_t QT2 : 2; /*!< [3..2] Quantization table number for the second color component - * NOTE: Read-only in Decompression. */ - __IOM uint8_t QT3 : 2; /*!< [5..4] Quantization table number for the third color component - * NOTE: Read-only in Decompression. */ - uint8_t : 2; - } JCQTN_b; + uint8_t : 4; + __IOM uint8_t PHYMODE0 : 1; /*!< [4..4] Ethernet Mode Setting ch0 */ + __IOM uint8_t PHYMODE1 : 1; /*!< [5..5] Ethernet Mode Setting ch1 */ + uint8_t : 2; + } PFENET_b; }; + __IM uint8_t RESERVED[2]; union { - __IOM uint8_t JCHTN; /*!< (@ 0x00000004) JPEG Code Huffman Table Number Register */ + __IOM uint8_t PWPR; /*!< (@ 0x00000003) Write-Protect Register */ struct { - __IOM uint8_t HTD1 : 1; /*!< [0..0] Huffman table number (DC) for the first color component - * NOTE: Read-only in Decompression. */ - __IOM uint8_t HTA1 : 1; /*!< [1..1] Huffman table number (AC) for the first color componentNOTE: - * Read-only in Decompression. */ - __IOM uint8_t HTD2 : 1; /*!< [2..2] Huffman table number (DC) for the second color component - * NOTE: Read-only in Decompression. */ - __IOM uint8_t HTA2 : 1; /*!< [3..3] Huffman table number (AC) for the second color componentNOTE: - * Read-only in Decompression. */ - __IOM uint8_t HTD3 : 1; /*!< [4..4] Huffman table number (DC) for the third color component - * NOTE: Read-only in Decompression. */ - __IOM uint8_t HTA3 : 1; /*!< [5..5] Huffman table number (AC) for the third color componentNOTE: - * Read-only in Decompression. */ - uint8_t : 2; - } JCHTN_b; + uint8_t : 6; + __IOM uint8_t PFSWE : 1; /*!< [6..6] PmnPFS Register Write */ + __IOM uint8_t B0WI : 1; /*!< [7..7] PFSWE Bit Write Disable */ + } PWPR_b; }; + __IM uint8_t RESERVED1; union { - __IOM uint8_t JCDRIU; /*!< (@ 0x00000005) JPEG Code DRI Upper Register */ + __IOM uint8_t PWPRS; /*!< (@ 0x00000005) Write-Protect Register for Secure */ struct { - __IOM uint8_t DRIU : 8; /*!< [7..0] Upper Bytes of MCUs Preceding RST MarkerWhen both upper - * and lower bytes are set to 00h, neither a DRI nor an RST - * marker is placed.NOTE: Read-only in Decompression. */ - } JCDRIU_b; + uint8_t : 6; + __IOM uint8_t PFSWE : 1; /*!< [6..6] PmnPFS Register Write */ + __IOM uint8_t B0WI : 1; /*!< [7..7] PFSWE Bit Write Disable */ + } PWPRS_b; }; + __IM uint16_t RESERVED2[5]; + __IOM R_PMISC_PMSAR_Type PMSAR[9]; /*!< (@ 0x00000010) Port Security Attribution Register */ +} R_PMISC_Type; /*!< Size = 34 (0x22) */ - union - { - __IOM uint8_t JCDRID; /*!< (@ 0x00000006) JPEG Code DRI Lower Register */ +/* =========================================================================================================================== */ +/* ================ R_QSPI ================ */ +/* =========================================================================================================================== */ - struct - { - __IOM uint8_t DRID : 8; /*!< [7..0] Lower Bytes of MCUs Preceding RST MarkerWhen both upper - * and lower bytes are set to 00h, neither a DRI nor an RST - * marker is placed.NOTE: Read-only in Decompression. */ - } JCDRID_b; - }; +/** + * @brief Quad Serial Peripheral Interface (R_QSPI) + */ +typedef struct /*!< (@ 0x64000000) R_QSPI Structure */ +{ union { - __IOM uint8_t JCVSZU; /*!< (@ 0x00000007) JPEG Code Vertical Size Upper Register */ + __IOM uint32_t SFMSMD; /*!< (@ 0x00000000) Transfer Mode Control Register */ struct { - __IOM uint8_t VSZU : 8; /*!< [7..0] Upper Bytes of Vertical Image SizeIn decompression process, - * a downloaded value from the JPEG coded data is set. NOTE: - * Read-only in Decompression. */ - } JCVSZU_b; + __IOM uint32_t SFMRM : 3; /*!< [2..0] Serial interface read mode selection */ + uint32_t : 1; + __IOM uint32_t SFMSE : 2; /*!< [5..4] Selection of the prefetch function */ + __IOM uint32_t SFMPFE : 1; /*!< [6..6] Selection of the prefetch function */ + __IOM uint32_t SFMPAE : 1; /*!< [7..7] Selection of the function for stopping prefetch at locations + * other than on byte boundaries */ + __IOM uint32_t SFMMD3 : 1; /*!< [8..8] SPI mode selection. An initial value is determined by + * input to CFGMD3. */ + __IOM uint32_t SFMOEX : 1; /*!< [9..9] Extension of the I/O buffer output enable signal for + * the serial interface */ + __IOM uint32_t SFMOHW : 1; /*!< [10..10] Hold time adjustment for serial transmission */ + __IOM uint32_t SFMOSW : 1; /*!< [11..11] Setup time adjustment for serial transmission */ + uint32_t : 3; + __IOM uint32_t SFMCCE : 1; /*!< [15..15] Read instruction code selection. */ + uint32_t : 16; + } SFMSMD_b; }; union { - __IOM uint8_t JCVSZD; /*!< (@ 0x00000008) JPEG Code Vertical Size Lower Register */ + __IOM uint32_t SFMSSC; /*!< (@ 0x00000004) Chip Selection Control Register */ struct { - __IOM uint8_t VSZD : 8; /*!< [7..0] Lower Bytes of Vertical Image SizeIn decompression process, - * a downloaded value from the JPEG coded data is set. NOTE: - * Read-only in Decompression. */ - } JCVSZD_b; + __IOM uint32_t SFMSW : 4; /*!< [3..0] Selection of a minimum high-level width of the QSSL signal */ + __IOM uint32_t SFMSHD : 1; /*!< [4..4] QSSL signal release timing selection */ + __IOM uint32_t SFMSLD : 1; /*!< [5..5] QSSL signal output timing selection */ + uint32_t : 26; + } SFMSSC_b; }; union { - __IOM uint8_t JCHSZU; /*!< (@ 0x00000009) JPEG Code Horizontal Size Upper Register */ + __IOM uint32_t SFMSKC; /*!< (@ 0x00000008) Clock Control Register */ struct { - __IOM uint8_t HSZU : 8; /*!< [7..0] Upper Bytes of Horizontal Image SizeIn decompression - * process, a downloaded value from the JPEG coded data is - * set. NOTE: Read-only in Decompression. */ - } JCHSZU_b; + __IOM uint32_t SFMDV : 5; /*!< [4..0] Serial interface reference cycle selection (* Pay attention + * to the irregularity.)NOTE: When PCLKA multiplied by an + * odd number is selected, the high-level width of the SCK + * signal is longer than the low-level width by 1 x PCLKA + * before duty ratio correction. */ + __IOM uint32_t SFMDTY : 1; /*!< [5..5] Selection of a duty ratio correction function for the + * SCK signal */ + uint32_t : 26; + } SFMSKC_b; }; union { - __IOM uint8_t JCHSZD; /*!< (@ 0x0000000A) JPEG Coded Horizontal Size Lower Register */ + __IM uint32_t SFMSST; /*!< (@ 0x0000000C) Status Register */ struct { - __IOM uint8_t HSZD : 8; /*!< [7..0] Lower Bytes of Horizontal Image SizeIn decompression - * process, a downloaded value from the JPEG coded data is - * set. NOTE: Read-only in Decompression. */ - } JCHSZD_b; + __IM uint32_t PFCNT : 5; /*!< [4..0] Number of bytes of prefetched dataRange: 00000 - 10010 + * (No combination other than the above is available.) */ + uint32_t : 1; + __IM uint32_t PFFUL : 1; /*!< [6..6] Prefetch buffer state */ + __IM uint32_t PFOFF : 1; /*!< [7..7] Prefetch function operation state */ + uint32_t : 24; + } SFMSST_b; }; union { - __IM uint8_t JCDTCU; /*!< (@ 0x0000000B) JPEG Code Data Count Upper Register */ + __IOM uint32_t SFMCOM; /*!< (@ 0x00000010) Communication Port Register */ struct { - __IM uint8_t DCU : 8; /*!< [7..0] Upper bytes of the counted amount of data to be compressed - * The values of this register are reset before compression - * starts.NOTE: Read-only in Decompression. */ - } JCDTCU_b; + __IOM uint32_t SFMD : 8; /*!< [7..0] Port for direct communication with the SPI bus.Input/output + * to and from this port is converted to a SPIbus cycle. This + * port is accessible in the direct communication mode (DCOM=1) + * only.Access to this port is ignored in the ROM access mode. */ + uint32_t : 24; + } SFMCOM_b; }; union { - __IM uint8_t JCDTCM; /*!< (@ 0x0000000C) JPEG Code Data Count Middle Register */ + __IOM uint32_t SFMCMD; /*!< (@ 0x00000014) Communication Mode Control Register */ struct { - __IM uint8_t DCM : 8; /*!< [7..0] Middle bytes of the counted amount of data to be compressedThe - * values of this register are reset before compression starts. - * NOTE: Read-only in Decompression. */ - } JCDTCM_b; + __IOM uint32_t DCOM : 1; /*!< [0..0] Selection of a mode of communication with the SPI bus */ + uint32_t : 31; + } SFMCMD_b; }; union { - __IM uint8_t JCDTCD; /*!< (@ 0x0000000D) JPEG Code Data Count Lower Register */ + __IOM uint32_t SFMCST; /*!< (@ 0x00000018) Communication Status Register */ struct { - __IM uint8_t DCD : 8; /*!< [7..0] Lower bytes of the counted amount of data to be compressedThe - * values of this register are reset before compression starts.NOTE: - * Read-only in Decompression. */ - } JCDTCD_b; + __IM uint32_t COMBSY : 1; /*!< [0..0] SPI bus cycle completion state in direct communication */ + uint32_t : 6; + __IM uint32_t EROMR : 1; /*!< [7..7] Status of ROM access detection in the direct communication + * modeNOTE: Writing of 0 only is possible. Writing of 1 is + * ignored. */ + uint32_t : 24; + } SFMCST_b; }; + __IM uint32_t RESERVED; union { - __IOM uint8_t JINTE0; /*!< (@ 0x0000000E) JPEG Interrupt Enable Register 0 */ + __IOM uint32_t SFMSIC; /*!< (@ 0x00000020) Instruction Code Register */ struct { - uint8_t : 3; - __IOM uint8_t INT3 : 1; /*!< [3..3] This bit enables an interrupt to be generated when it - * has been determined that the image size and the subsampling - * setting of the compressed data can be read through analyzing - * the data. */ - uint8_t : 1; - __IOM uint8_t INT5 : 1; /*!< [5..5] This bit enables an interrupt to be generated when the - * final number of MCU data in the Huffman-coding segment - * is not correct in decompression. When this bit is not set - * to enable interrupt generation, an error code is not returned. */ - __IOM uint8_t INT6 : 1; /*!< [6..6] This bit enables an interrupt to be generated when the - * total number of data in the Huffman-coding segment is not - * correct in decompression. When this bit is not set to enable - * interrupt generation, an error code is not returned. */ - __IOM uint8_t INT7 : 1; /*!< [7..7] This bit enables an interrupt to be generated when the - * number of data in the restart interval of the Huffman-coding - * segment is not correct in decompression.When this bit is - * not set to enable interrupt generation, an error code is - * not returned. */ - } JINTE0_b; + __IOM uint32_t SFMCIC : 8; /*!< [7..0] Serial ROM instruction code to substitute */ + uint32_t : 24; + } SFMSIC_b; }; union { - __IOM uint8_t JINTS0; /*!< (@ 0x0000000F) JPEG Interrupt Status Register 0 */ + __IOM uint32_t SFMSAC; /*!< (@ 0x00000024) Address Mode Control Register */ struct { - uint8_t : 3; - __IOM uint8_t INS3 : 1; /*!< [3..3] This bit is set to 1 when the image size and pixel format - * can be read. When an interrupt occurs, this module stops - * processing and the state is indicated by the JCRST register. - * To make this module resume processing, set the JPEG core - * process stop clear command bit (JRST) in JCCMD. */ - uint8_t : 1; - __IOM uint8_t INS5 : 1; /*!< [5..5] This bit is set to 1 when a compressed data error occurs. */ - __IOM uint8_t INS6 : 1; /*!< [6..6] This bit is set to 1 when this module completes compression - * process normally. */ - uint8_t : 1; - } JINTS0_b; + __IOM uint32_t SFMAS : 2; /*!< [1..0] Selection the number of address bits of the serial interface */ + uint32_t : 2; + __IOM uint32_t SFM4BC : 1; /*!< [4..4] Selection of a default instruction code, when Serial + * Interface address width is selected 4 bytes. */ + uint32_t : 27; + } SFMSAC_b; }; union { - __IOM uint8_t JCDERR; /*!< (@ 0x00000010) JPEG Code Decode Error Register */ + __IOM uint32_t SFMSDC; /*!< (@ 0x00000028) Dummy Cycle Control Register */ struct { - __IOM uint8_t ERR : 4; /*!< [3..0] Error Code (See tables )Identify the type of the error - * which has occurred in the compressed data analysis for - * decompression. */ - uint8_t : 4; - } JCDERR_b; + __IOM uint32_t SFMDN : 4; /*!< [3..0] Selection of the number of dummy cycles of Fast Read + * instructions */ + uint32_t : 2; + __IM uint32_t SFMXST : 1; /*!< [6..6] XIP mode status */ + __IOM uint32_t SFMXEN : 1; /*!< [7..7] XIP mode permission */ + __IOM uint32_t SFMXD : 8; /*!< [15..8] Mode data for serial ROM. (Control XIP mode) */ + uint32_t : 16; + } SFMSDC_b; }; + __IM uint32_t RESERVED1; union { - __IM uint8_t JCRST; /*!< (@ 0x00000011) JPEG Code Reset Register */ + __IOM uint32_t SFMSPC; /*!< (@ 0x00000030) SPI Protocol Control Register */ struct { - __IM uint8_t RST : 1; /*!< [0..0] Operating State */ - uint8_t : 7; - } JCRST_b; + __IOM uint32_t SFMSPI : 2; /*!< [1..0] Selection of SPI protocolNOTE: Serial ROM's SPI protocol + * is required to be set by software separately. */ + uint32_t : 2; + __IOM uint32_t SFMSDE : 1; /*!< [4..4] Selection of the minimum time of input output switch, + * when Dual SPI protocol or Quad SPI protocol is selected. */ + uint32_t : 27; + } SFMSPC_b; }; - __IM uint16_t RESERVED1; - __IM uint32_t RESERVED2[11]; union { - __IOM uint32_t JIFECNT; /*!< (@ 0x00000040) JPEG Interface Compression Control Register */ + __IOM uint32_t SFMPMD; /*!< (@ 0x00000034) Port Control Register */ struct { - __IOM uint32_t DINSWAP : 3; /*!< [2..0] Byte/Halfword Swap */ - uint32_t : 1; - __IOM uint32_t DINLC : 1; /*!< [4..4] Count Mode Setting for Stopping Input Image Data Lines */ - __OM uint32_t DINRCMD : 1; /*!< [5..5] Input Image Data Lines Resume Command This bit is valid - * only when the count mode for stopping the input of image - * data lines is on. Setting this bit to 1 resumes reading - * input image data. This bit is always read as 0. */ - __IOM uint32_t DINRINI : 1; /*!< [6..6] Address Initialization when Resuming Input of Image Data - * Lines This bit is only valid when the count mode for stopping - * the input of image data lines is on. Set this bit before - * writing 1 to the data-line resume command bit. */ - uint32_t : 1; - __IOM uint32_t JOUTSWAP : 3; /*!< [10..8] Byte/Halfword/Word Swap Output coded data in compression - * is swapped. */ - uint32_t : 21; - } JIFECNT_b; + uint32_t : 2; + __IOM uint32_t SFMWPL : 1; /*!< [2..2] Specify level of WP pin */ + uint32_t : 29; + } SFMPMD_b; }; + __IM uint32_t RESERVED2[499]; union { - __IOM uint32_t JIFESA; /*!< (@ 0x00000044) JPEG Interface Compression Source Address Register */ + __IOM uint32_t SFMCNT1; /*!< (@ 0x00000804) External QSPI Address Register 1 */ struct { - __IOM uint32_t ESA : 32; /*!< [31..0] Input Image Data Source Address (in 8-byte units) The - * lower three bits should be set to 0. */ - } JIFESA_b; + uint32_t : 26; + __IOM uint32_t QSPI_EXT : 6; /*!< [31..26] BANK Switching AddressWhen accessing from 0x6000_0000 + * to 0x63FF_FFFF, Addres bus is Set QSPI_EXT[5:0] to high-order + * 6bits of SHADDR[31:0]NOTE: Setting 6'h3F is prihibited. */ + } SFMCNT1_b; }; +} R_QSPI_Type; /*!< Size = 2056 (0x808) */ + +/* =========================================================================================================================== */ +/* ================ R_RTC ================ */ +/* =========================================================================================================================== */ +/** + * @brief Realtime Clock (R_RTC) + */ + +typedef struct /*!< (@ 0x40044000) R_RTC Structure */ +{ union { - __IOM uint32_t JIFESOFST; /*!< (@ 0x00000048) JPEG Interface Compression Line Offset Register */ + __IM uint8_t R64CNT; /*!< (@ 0x00000000) 64-Hz Counter */ struct { - __IOM uint32_t ESMW : 15; /*!< [14..0] Input Image Data Lines Offset(in 8-byte units)The lower - * three bits should be set to 0. */ - uint32_t : 17; - } JIFESOFST_b; + __IM uint8_t F64HZ : 1; /*!< [0..0] 64Hz */ + __IM uint8_t F32HZ : 1; /*!< [1..1] 32Hz */ + __IM uint8_t F16HZ : 1; /*!< [2..2] 16Hz */ + __IM uint8_t F8HZ : 1; /*!< [3..3] 8Hz */ + __IM uint8_t F4HZ : 1; /*!< [4..4] 4Hz */ + __IM uint8_t F2HZ : 1; /*!< [5..5] 2Hz */ + __IM uint8_t F1HZ : 1; /*!< [6..6] 1Hz */ + uint8_t : 1; + } R64CNT_b; }; + __IM uint8_t RESERVED; union { - __IOM uint32_t JIFEDA; /*!< (@ 0x0000004C) JPEG Interface Compression Destination Address - * Register */ + union + { + __IOM uint8_t RSECCNT; /*!< (@ 0x00000002) Second Counter */ - struct + struct + { + __IOM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Count Counts from 0 to 9 every second. When + * a carry is generated, 1 is added to the tens place. */ + __IOM uint8_t SEC10 : 3; /*!< [6..4] 10-Second Count Counts from 0 to 5 for 60-second counting. */ + uint8_t : 1; + } RSECCNT_b; + }; + + union { - __IOM uint32_t EDA : 32; /*!< [31..0] Input Image Data Lines Offset (in 8-byte units) The - * lower three bits should be set to 0. */ - } JIFEDA_b; + __IOM uint8_t BCNT0; /*!< (@ 0x00000002) Binary Counter 0 */ + + struct + { + __IOM uint8_t BCNT0 : 8; /*!< [7..0] The BCNT0 counter is a readable/writable 32-bit binary + * counter b7 to b0. */ + } BCNT0_b; + }; }; + __IM uint8_t RESERVED1; union { - __IOM uint32_t JIFESLC; /*!< (@ 0x00000050) JPEG Interface Compression Source Line Count - * Register */ + union + { + __IOM uint8_t RMINCNT; /*!< (@ 0x00000004) Minute Counter */ - struct + struct + { + __IOM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Count Counts from 0 to 9 every minute. When + * a carry is generated, 1 is added to the tens place. */ + __IOM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Count Counts from 0 to 5 for 60-minute counting. */ + uint8_t : 1; + } RMINCNT_b; + }; + + union { - __IOM uint32_t LINES : 16; /*!< [15..0] Number of Input Image Data Lines to be Read (in 8-line - * units) The lower three bits should be set to 0. */ - uint32_t : 16; - } JIFESLC_b; + __IOM uint8_t BCNT1; /*!< (@ 0x00000004) Binary Counter 1 */ + + struct + { + __IOM uint8_t BCNT1 : 8; /*!< [7..0] The BCNT1 counter is a readable/writable 32-bit binary + * counter b15 to b8. */ + } BCNT1_b; + }; }; - __IM uint32_t RESERVED3; + __IM uint8_t RESERVED2; union { - __IOM uint32_t JIFDCNT; /*!< (@ 0x00000058) JPEG Interface Decompression Control Register */ - - struct + union { - __IOM uint32_t DOUTSWAP : 3; /*!< [2..0] Byte/Word Swap Output image data in decompression is - * swapped. */ - uint32_t : 1; - __IOM uint32_t DOUTLC : 1; /*!< [4..4] Count Mode for Stopping Output Image Data Lines */ - __OM uint32_t DOUTRCMD : 1; /*!< [5..5] Output Image Data Lines Resume Command This bit is valid - * only when the count mode for stopping the output of image - * data lines is on. Setting this bit to 1 resumes writing - * image data. This bit is always read as 0. */ - __IOM uint32_t DOUTRINI : 1; /*!< [6..6] Address Initialization when Resuming Output of Image - * Data Lines This bit is only valid when the count mode for - * stopping the output of image data lines is on. Set this - * bit before writing 1 to the data-line resume command bit. */ - uint32_t : 1; - __IOM uint32_t JINSWAP : 3; /*!< [10..8] Byte/Word/Longword Swap Input coded data in decompression - * is swapped. */ - uint32_t : 1; - __IOM uint32_t JINC : 1; /*!< [12..12] Count Mode Setting for Stopping Input Coded Data */ - __OM uint32_t JINRCMD : 1; /*!< [13..13] Input Coded Data Resume CommandThis bit is valid only - * when the count mode for stopping the input of coded data - * is on. Setting this bit to 1 resumes reading input coded - * data. This bit is always read as 0. */ - __IOM uint32_t JINRINI : 1; /*!< [14..14] Address Initialization when Input Coded Data is Resumed - * This bit is only valid when the count mode for stopping - * the input of coded data is on. Set this bit before writing - * 1 to the data resume command bit. */ - uint32_t : 9; - __IOM uint32_t OPF : 2; /*!< [25..24] Specifies output image data pixel format. */ - __IOM uint32_t HINTER : 2; /*!< [27..26] Horizontal Subsampling Subsamples horizontal output - * image data. */ - __IOM uint32_t VINTER : 2; /*!< [29..28] Vertical SubsamplingSubsamples vertical output image - * data. */ - uint32_t : 2; - } JIFDCNT_b; + __IOM uint8_t RHRCNT; /*!< (@ 0x00000006) Hour Counter */ + + struct + { + __IOM uint8_t HR1 : 4; /*!< [3..0] 1-Hour Count Counts from 0 to 9 once per hour. When a + * carry is generated, 1 is added to the tens place. */ + __IOM uint8_t HR10 : 2; /*!< [5..4] 10-Hour Count Counts from 0 to 2 once per carry from + * the ones place. */ + __IOM uint8_t PM : 1; /*!< [6..6] Time Counter Setting for a.m./p.m. */ + uint8_t : 1; + } RHRCNT_b; + }; + + union + { + __IOM uint8_t BCNT2; /*!< (@ 0x00000006) Binary Counter 2 */ + + struct + { + __IOM uint8_t BCNT2 : 8; /*!< [7..0] The BCNT2 counter is a readable/writable 32-bit binary + * counter b23 to b16. */ + } BCNT2_b; + }; }; + __IM uint8_t RESERVED3; union { - __IOM uint32_t JIFDSA; /*!< (@ 0x0000005C) JPEG Interface Decompression Source Address Register */ + union + { + __IOM uint8_t RWKCNT; /*!< (@ 0x00000008) Day-of-Week Counter */ - struct + struct + { + __IOM uint8_t DAYW : 3; /*!< [2..0] Day-of-Week Counting */ + uint8_t : 5; + } RWKCNT_b; + }; + + union { - __IOM uint32_t DSA : 32; /*!< [31..0] Input Coded Data Source AddressInput Coded Data Source - * Address (in 8-byte units) The lower three bits should be - * set to 0. */ - } JIFDSA_b; + __IOM uint8_t BCNT3; /*!< (@ 0x00000008) Binary Counter 3 */ + + struct + { + __IOM uint8_t BCNT3 : 8; /*!< [7..0] The BCNT3 counter is a readable/writable 32-bit binary + * counter b31 to b24. */ + } BCNT3_b; + }; }; + __IM uint8_t RESERVED4; union { - __IOM uint32_t JIFDDOFST; /*!< (@ 0x00000060) JPEG Interface Decompression Line Offset Register */ + __IOM uint8_t RDAYCNT; /*!< (@ 0x0000000A) Day Counter */ struct { - __IOM uint32_t DDMW : 15; /*!< [14..0] Output Image Data Lines Offset (in 8-byte units) The - * lower three bits should be set to 0. */ - uint32_t : 17; - } JIFDDOFST_b; + __IOM uint8_t DATE1 : 4; /*!< [3..0] 1-Day Count Counts from 0 to 9 once per day. When a carry + * is generated, 1 is added to the tens place. */ + __IOM uint8_t DATE10 : 2; /*!< [5..4] 10-Day Count Counts from 0 to 3 once per carry from the + * ones place. */ + uint8_t : 2; + } RDAYCNT_b; }; + __IM uint8_t RESERVED5; union { - __IOM uint32_t JIFDDA; /*!< (@ 0x00000064) JPEG Interface Decompression Destination Address - * Register */ + __IOM uint8_t RMONCNT; /*!< (@ 0x0000000C) Month Counter */ struct { - __IOM uint32_t DDA : 32; /*!< [31..0] Output Image Data Destination Address (in 8-byte units) - * The lower three bits should be set to 0. */ - } JIFDDA_b; + __IOM uint8_t MON1 : 4; /*!< [3..0] 1-Month Count Counts from 0 to 9 once per month. When + * a carry is generated, 1 is added to the tens place. */ + __IOM uint8_t MON10 : 1; /*!< [4..4] 10-Month Count Counts from 0 to 1 once per carry from + * the ones place. */ + uint8_t : 3; + } RMONCNT_b; }; + __IM uint8_t RESERVED6; union { - __IOM uint32_t JIFDSDC; /*!< (@ 0x00000068) JPEG Interface Decompression Source Data Count - * Register */ + __IOM uint16_t RYRCNT; /*!< (@ 0x0000000E) Year Counter */ struct { - __IOM uint32_t JDATAS : 16; /*!< [15..0] Amount of Input Coded Data to be Read (in 8-byte units) - * The lower three bits should be set to 0. */ - uint32_t : 16; - } JIFDSDC_b; + __IOM uint16_t YR1 : 4; /*!< [3..0] 1-Year Count Counts from 0 to 9 once per year. When a + * carry is generated, 1 is added to the tens place. */ + __IOM uint16_t YR10 : 4; /*!< [7..4] 10-Year Count Counts from 0 to 9 once per carry from + * ones place. When a carry is generated in the tens place, + * 1 is added to the hundreds place. */ + uint16_t : 8; + } RYRCNT_b; }; union { - __IOM uint32_t JIFDDLC; /*!< (@ 0x0000006C) JPEG Interface Decompression Destination Line - * Count Register */ + union + { + __IOM uint8_t RSECAR; /*!< (@ 0x00000010) Second Alarm Register */ - struct + struct + { + __OM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Value for the ones place of seconds */ + __IOM uint8_t SEC10 : 3; /*!< [6..4] 10-Seconds Value for the tens place of seconds */ + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RSECAR_b; + }; + + union { - __IOM uint32_t LINES : 16; /*!< [15..0] Number of Input Image Lines to Be ReadThe lower three - * bits should be set to 0. These bits are read as0.Number - * of input image data lines to be read, in 8-line units. */ - uint32_t : 16; - } JIFDDLC_b; + __IOM uint8_t BCNT0AR; /*!< (@ 0x00000010) Binary Counter 0 Alarm Register */ + + struct + { + __IOM uint8_t BCNT0AR : 8; /*!< [7..0] he BCNT0AR counter is a readable/writable alarm register + * corresponding to 32-bit binary counter b7 to b0. */ + } BCNT0AR_b; + }; }; + __IM uint8_t RESERVED7; union { - __IOM uint32_t JIFDADT; /*!< (@ 0x00000070) JPEG Interface Decompression alpha Set Register */ + union + { + __IOM uint8_t RMINAR; /*!< (@ 0x00000012) Minute Alarm Register */ - struct + struct + { + __IOM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Count Value for the ones place of minutes */ + __IOM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Count Value for the tens place of minutes */ + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RMINAR_b; + }; + + union { - __IOM uint32_t ALPHA : 8; /*!< [7..0] Setting of the alpha value for output in ARGB8888 format. */ - uint32_t : 24; - } JIFDADT_b; + __IOM uint8_t BCNT1AR; /*!< (@ 0x00000012) Binary Counter 1 Alarm Register */ + + struct + { + __IOM uint8_t BCNT1AR : 8; /*!< [7..0] he BCNT1AR counter is a readable/writable alarm register + * corresponding to 32-bit binary counter b15 to b8. */ + } BCNT1AR_b; + }; }; - __IM uint32_t RESERVED4[6]; + __IM uint8_t RESERVED8; union { - __IOM uint32_t JINTE1; /*!< (@ 0x0000008C) JPEG Interrupt Enable Register 1 */ + union + { + __IOM uint8_t RHRAR; /*!< (@ 0x00000014) Hour Alarm Register */ - struct + struct + { + __IOM uint8_t HR1 : 4; /*!< [3..0] 1-Hour Count Value for the ones place of hours */ + __IOM uint8_t HR10 : 2; /*!< [5..4] 10-Hour Count Value for the tens place of hours */ + __IOM uint8_t PM : 1; /*!< [6..6] Time Counter Setting for a.m./p.m. */ + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RHRAR_b; + }; + + union { - __IOM uint32_t DOUTLEN : 1; /*!< [0..0] Enables or disables a data transfer processing interrupt - * request (JDTI) when the DOUTLF bit in JINTS1 is set to - * 1 */ - __IOM uint32_t JINEN : 1; /*!< [1..1] Enables or disables a data transfer processing interrupt - * request (JDTI) when the JINF bit in JINTS1 is set to 1. */ - __IOM uint32_t DBTEN : 1; /*!< [2..2] Enables or disables a data transfer processing interrupt - * request (JDTI) when the DBTF bit in JINTS1 is set to 1. */ - uint32_t : 2; - __IOM uint32_t DINLEN : 1; /*!< [5..5] Enables or disables a data transfer processing interrupt - * request (JDTI) when the DINLF bit in JINTS1 is set to 1. */ - __IOM uint32_t CBTEN : 1; /*!< [6..6] Enables or disables a data transfer processing interrupt - * request (JDTI) when the CBTF bit in JINTS1 is set to 1. */ - uint32_t : 25; - } JINTE1_b; + __IOM uint8_t BCNT2AR; /*!< (@ 0x00000014) Binary Counter 2 Alarm Register */ + + struct + { + __IOM uint8_t BCNT2AR : 8; /*!< [7..0] The BCNT2AR counter is a readable/writable 32-bit binary + * counter b23 to b16. */ + } BCNT2AR_b; + }; }; + __IM uint8_t RESERVED9; union { - __IOM uint32_t JINTS1; /*!< (@ 0x00000090) JPEG Interrupt Status Register 1 */ + union + { + __IOM uint8_t RWKAR; /*!< (@ 0x00000016) Day-of-Week Alarm Register */ - struct + struct + { + __IOM uint8_t DAYW : 3; /*!< [2..0] Day-of-Week Counting */ + uint8_t : 4; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RWKAR_b; + }; + + union { - __IOM uint32_t DOUTLF : 1; /*!< [0..0] In decompression, this bit is set to 1 when the number - * of lines of output image data indicated by JIFDDLC have - * been written. This bit is only valid when the DOUTLC bit - * in JIFDCNT is set to 1. */ - __IOM uint32_t JINF : 1; /*!< [1..1] This bit is set to 1 when the amount of input coded data - * indicated by JIFDSDC is read in decompression. This bit - * is valid only when the JINC bit in JIFDCNT is set to 1. */ - __IOM uint32_t DBTF : 1; /*!< [2..2] This bit is set to 1 when the last output image data - * is written in decompression. */ - uint32_t : 2; - __IOM uint32_t DINLF : 1; /*!< [5..5] This bit is set to 1 when the number of input image data - * lines indicated by JIFESLC is read in compression. This - * bit is valid only when the DINLC bit in JIFECNT is set - * to 1. */ - __IOM uint32_t CBTF : 1; /*!< [6..6] This bit is set to 1 when the last output coded data - * is written in compression. */ - uint32_t : 25; - } JINTS1_b; + __IOM uint8_t BCNT3AR; /*!< (@ 0x00000016) Binary Counter 3 Alarm Register */ + + struct + { + __IOM uint8_t BCNT3AR : 8; /*!< [7..0] The BCNT3AR counter is a readable/writable 32-bit binary + * counter b31 to b24. */ + } BCNT3AR_b; + }; }; - __IM uint32_t RESERVED5[27]; - __OM uint8_t JCQTBL0[64]; /*!< (@ 0x00000100) Quantization Table 0 */ - __OM uint8_t JCQTBL1[64]; /*!< (@ 0x00000140) Quantization Table 1 */ - __OM uint8_t JCQTBL2[64]; /*!< (@ 0x00000180) Quantization Table 2 */ - __OM uint8_t JCQTBL3[64]; /*!< (@ 0x000001C0) Quantization Table 3 */ - __IOM uint8_t JCHTBD0[28]; /*!< (@ 0x00000200) DC Huffman Table 0 */ - __IM uint32_t RESERVED6; - __IOM uint8_t JCHTBA0[178]; /*!< (@ 0x00000220) AC Huffman Table 0 */ - __IM uint16_t RESERVED7; - __IM uint32_t RESERVED8[11]; - __IOM uint8_t JCHTBD1[28]; /*!< (@ 0x00000300) DC Huffman Table 1 */ - __IM uint32_t RESERVED9; - __IOM uint8_t JCHTBA1[178]; /*!< (@ 0x00000320) DC Huffman Table 1 */ - __IM uint16_t RESERVED10; -} R_JPEG_Type; /*!< Size = 980 (0x3d4) */ + __IM uint8_t RESERVED10; -/* =========================================================================================================================== */ -/* ================ R_KINT ================ */ -/* =========================================================================================================================== */ + union + { + union + { + __IOM uint8_t RDAYAR; /*!< (@ 0x00000018) Date Alarm Register */ + + struct + { + __IOM uint8_t DATE1 : 4; /*!< [3..0] 1 Day Value for the ones place of days */ + __IOM uint8_t DATE10 : 2; /*!< [5..4] 10 Days Value for the tens place of days */ + uint8_t : 1; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RDAYAR_b; + }; + + union + { + __IOM uint8_t BCNT0AER; /*!< (@ 0x00000018) Binary Counter 0 Alarm Enable Register */ -/** - * @brief Key Interrupt Function (R_KINT) - */ + struct + { + __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT0AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b7 to b0. */ + } BCNT0AER_b; + }; + }; + __IM uint8_t RESERVED11; -typedef struct /*!< (@ 0x40080000) R_KINT Structure */ -{ union { - __IOM uint8_t KRCTL; /*!< (@ 0x00000000) KEY Return Control Register */ + union + { + __IOM uint8_t RMONAR; /*!< (@ 0x0000001A) Month Alarm Register */ - struct + struct + { + __IOM uint8_t MON1 : 4; /*!< [3..0] 1 Month Value for the ones place of months */ + __IOM uint8_t MON10 : 1; /*!< [4..4] 10 Months Value for the tens place of months */ + uint8_t : 2; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RMONAR_b; + }; + + union { - __IOM uint8_t KREG : 1; /*!< [0..0] Detection Edge Selection (KRF0 to KRF7) */ - uint8_t : 6; - __IOM uint8_t KRMD : 1; /*!< [7..7] Usage of Key Interrupt Flags(KR0 to KR7) */ - } KRCTL_b; + __IOM uint8_t BCNT1AER; /*!< (@ 0x0000001A) Binary Counter 1 Alarm Enable Register */ + + struct + { + __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT1AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b15 to b8. */ + } BCNT1AER_b; + }; }; - __IM uint8_t RESERVED[3]; + __IM uint8_t RESERVED12; union { - __IOM uint8_t KRF; /*!< (@ 0x00000004) KEY Return Flag Register */ + union + { + __IOM uint16_t RYRAR; /*!< (@ 0x0000001C) Year Alarm Register */ - struct + struct + { + __IOM uint16_t YR1 : 4; /*!< [3..0] 1 Year Value for the ones place of years */ + __IOM uint16_t YR10 : 4; /*!< [7..4] 10 Years Value for the tens place of years */ + uint16_t : 8; + } RYRAR_b; + }; + + union { - __IOM uint8_t KRF0 : 1; /*!< [0..0] Key interrupt flag 0 */ - __IOM uint8_t KRF1 : 1; /*!< [1..1] Key interrupt flag 1 */ - __IOM uint8_t KRF2 : 1; /*!< [2..2] Key interrupt flag 2 */ - __IOM uint8_t KRF3 : 1; /*!< [3..3] Key interrupt flag 3 */ - __IOM uint8_t KRF4 : 1; /*!< [4..4] Key interrupt flag 4 */ - __IOM uint8_t KRF5 : 1; /*!< [5..5] Key interrupt flag 5 */ - __IOM uint8_t KRF6 : 1; /*!< [6..6] Key interrupt flag 6 */ - __IOM uint8_t KRF7 : 1; /*!< [7..7] Key interrupt flag 7 */ - } KRF_b; + __IOM uint16_t BCNT2AER; /*!< (@ 0x0000001C) Binary Counter 2 Alarm Enable Register */ + + struct + { + __IOM uint16_t ENB : 8; /*!< [7..0] The BCNT2AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b23 to b16. */ + uint16_t : 8; + } BCNT2AER_b; + }; }; - __IM uint8_t RESERVED1[3]; union { - __IOM uint8_t KRM; /*!< (@ 0x00000008) KEY Return Mode Register */ - - struct + union { - __IOM uint8_t KRM0 : 1; /*!< [0..0] Key interrupt mode control 0 */ - __IOM uint8_t KRM1 : 1; /*!< [1..1] Key interrupt mode control 1 */ - __IOM uint8_t KRM2 : 1; /*!< [2..2] Key interrupt mode control 2 */ - __IOM uint8_t KRM3 : 1; /*!< [3..3] Key interrupt mode control 3 */ - __IOM uint8_t KRM4 : 1; /*!< [4..4] Key interrupt mode control 4 */ - __IOM uint8_t KRM5 : 1; /*!< [5..5] Key interrupt mode control 5 */ - __IOM uint8_t KRM6 : 1; /*!< [6..6] Key interrupt mode control 6 */ - __IOM uint8_t KRM7 : 1; /*!< [7..7] Key interrupt mode control 7 */ - } KRM_b; - }; -} R_KINT_Type; /*!< Size = 9 (0x9) */ + __IOM uint8_t RYRAREN; /*!< (@ 0x0000001E) Year Alarm Enable Register */ -/* =========================================================================================================================== */ -/* ================ R_MMF ================ */ -/* =========================================================================================================================== */ + struct + { + uint8_t : 7; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RYRAREN_b; + }; -/** - * @brief Memory Mirror Function (R_MMF) - */ + union + { + __IOM uint8_t BCNT3AER; /*!< (@ 0x0000001E) Binary Counter 3 Alarm Enable Register */ + + struct + { + __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT3AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b31 to b24. */ + } BCNT3AER_b; + }; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14; -typedef struct /*!< (@ 0x40001000) R_MMF Structure */ -{ union { - __IOM uint32_t MMSFR; /*!< (@ 0x00000000) MemMirror Special Function Register */ + __IOM uint8_t RCR1; /*!< (@ 0x00000022) RTC Control Register 1 */ struct { - uint32_t : 7; - __IOM uint32_t MEMMIRADDR : 16; /*!< [22..7] Specifies the memory mirror address.NOTE: A value cannot - * be set in the low-order 7 bits. These bits are fixed to - * 0. */ - uint32_t : 1; - __OM uint32_t KEY : 8; /*!< [31..24] MMSFR Key Code */ - } MMSFR_b; + __IOM uint8_t AIE : 1; /*!< [0..0] Alarm Interrupt Enable */ + __IOM uint8_t CIE : 1; /*!< [1..1] Carry Interrupt Enable */ + __IOM uint8_t PIE : 1; /*!< [2..2] Periodic Interrupt Enable */ + __IOM uint8_t RTCOS : 1; /*!< [3..3] RTCOUT Output Select */ + __IOM uint8_t PES : 4; /*!< [7..4] Periodic Interrupt Select */ + } RCR1_b; }; + __IM uint8_t RESERVED15; union { - __IOM uint32_t MMEN; /*!< (@ 0x00000004) MemMirror Enable Register */ + __IOM uint8_t RCR2; /*!< (@ 0x00000024) RTC Control Register 2 */ struct { - __IOM uint32_t EN : 1; /*!< [0..0] Memory Mirror Function Enable */ - uint32_t : 23; - __OM uint32_t KEY : 8; /*!< [31..24] MMEN Key Code */ - } MMEN_b; + __IOM uint8_t START : 1; /*!< [0..0] Start */ + __IOM uint8_t RESET : 1; /*!< [1..1] RTC Software Reset */ + __IOM uint8_t ADJ30 : 1; /*!< [2..2] 30-Second Adjustment */ + __IOM uint8_t RTCOE : 1; /*!< [3..3] RTCOUT Output Enable */ + __IOM uint8_t AADJE : 1; /*!< [4..4] Automatic Adjustment Enable (When the LOCO clock is selected, + * the setting of this bit is disabled.) */ + __IOM uint8_t AADJP : 1; /*!< [5..5] Automatic Adjustment Period Select (When the LOCO clock + * is selected, the setting of this bit is disabled.) */ + __IOM uint8_t HR24 : 1; /*!< [6..6] Hours Mode */ + __IOM uint8_t CNTMD : 1; /*!< [7..7] Count Mode Select */ + } RCR2_b; }; -} R_MMF_Type; /*!< Size = 8 (0x8) */ - -/* =========================================================================================================================== */ -/* ================ R_MPU_MMPU ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Bus Master MPU (R_MPU_MMPU) - */ - -typedef struct /*!< (@ 0x40000000) R_MPU_MMPU Structure */ -{ - __IOM R_MPU_MMPU_MMPU_Type MMPU[3]; /*!< (@ 0x00000000) Bus Master MPU Registers */ -} R_MPU_MMPU_Type; /*!< Size = 3072 (0xc00) */ - -/* =========================================================================================================================== */ -/* ================ R_MPU_SMPU ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Bus Slave MPU (R_MPU_SMPU) - */ + __IM uint8_t RESERVED16; + __IM uint16_t RESERVED17; -typedef struct /*!< (@ 0x40000C00) R_MPU_SMPU Structure */ -{ union { - __IOM uint16_t SMPUCTL; /*!< (@ 0x00000000) Slave MPU Control Register */ + __IOM uint8_t RCR4; /*!< (@ 0x00000028) RTC Control Register 4 */ struct { - __IOM uint16_t OAD : 1; /*!< [0..0] Master Group enable */ - __IOM uint16_t PROTECT : 1; /*!< [1..1] Protection of register */ - uint16_t : 6; - __OM uint16_t KEY : 8; /*!< [15..8] Key Code This bit is used to enable or disable rewriting - * of the PROTECT and OAD bit. */ - } SMPUCTL_b; + __IOM uint8_t RCKSEL : 1; /*!< [0..0] Count Source Select */ + uint8_t : 6; + __IOM uint8_t ROPSEL : 1; /*!< [7..7] RTC Operation Mode Select */ + } RCR4_b; }; - __IM uint16_t RESERVED[7]; - __IOM R_MPU_SMPU_SMPU_Type SMPU[10]; /*!< (@ 0x00000010) Access Control Structure for MBIU */ -} R_MPU_SMPU_Type; /*!< Size = 56 (0x38) */ - -/* =========================================================================================================================== */ -/* ================ R_MPU_SPMON ================ */ -/* =========================================================================================================================== */ - -/** - * @brief CPU Stack Pointer Monitor (R_MPU_SPMON) - */ - -typedef struct /*!< (@ 0x40000D00) R_MPU_SPMON Structure */ -{ - __IOM R_MPU_SPMON_SP_Type SP[2]; /*!< (@ 0x00000000) Stack Pointer Monitor */ -} R_MPU_SPMON_Type; /*!< Size = 32 (0x20) */ - -/* =========================================================================================================================== */ -/* ================ R_MSTP ================ */ -/* =========================================================================================================================== */ - -/** - * @brief System-Module Stop (R_MSTP) - */ + __IM uint8_t RESERVED18; -typedef struct /*!< (@ 0x40047000) R_MSTP Structure */ -{ union { - __IOM uint32_t MSTPCRB; /*!< (@ 0x00000000) Module Stop Control Register B */ + __IOM uint16_t RFRH; /*!< (@ 0x0000002A) Frequency Register H */ struct { - uint32_t : 1; - __IOM uint32_t MSTPB1 : 1; /*!< [1..1] RCAN1 Module Stop */ - __IOM uint32_t MSTPB2 : 1; /*!< [2..2] RCAN0 Module Stop */ - uint32_t : 2; - __IOM uint32_t MSTPB5 : 1; /*!< [5..5] IrDA Module Stop */ - __IOM uint32_t MSTPB6 : 1; /*!< [6..6] Queued Serial Peripheral Interface Module Stop */ - __IOM uint32_t MSTPB7 : 1; /*!< [7..7] I2C Bus Interface 2 Module Stop */ - __IOM uint32_t MSTPB8 : 1; /*!< [8..8] I2C Bus Interface 1 Module Stop */ - __IOM uint32_t MSTPB9 : 1; /*!< [9..9] I2C Bus Interface 0 Module Stop */ - uint32_t : 1; - __IOM uint32_t MSTPB11 : 1; /*!< [11..11] Universal Serial Bus 2.0 FS Interface Module Stop */ - __IOM uint32_t MSTPB12 : 1; /*!< [12..12] Universal Serial Bus 2.0 HS Interface Module Stop */ - __IOM uint32_t MSTPB13 : 1; /*!< [13..13] EPTPC and PTPEDMAC Module Stop */ - __IOM uint32_t MSTPB14 : 1; /*!< [14..14] ETHERC1 and EDMAC1 Module Stop */ - __IOM uint32_t MSTPB15 : 1; /*!< [15..15] ETHERC0 and EDMAC0 Module Stop */ - uint32_t : 2; - __IOM uint32_t MSTPB18 : 1; /*!< [18..18] Serial Peripheral Interface Module Stop */ - __IOM uint32_t MSTPB19 : 1; /*!< [19..19] Serial Peripheral Interface 0 Module Stop */ - uint32_t : 2; - __IOM uint32_t MSTPB22 : 1; /*!< [22..22] Serial Communication Interface 9 Module Stop */ - __IOM uint32_t MSTPB23 : 1; /*!< [23..23] Serial Communication Interface 8 Module Stop */ - __IOM uint32_t MSTPB24 : 1; /*!< [24..24] Serial Communication Interface 7 Module Stop */ - __IOM uint32_t MSTPB25 : 1; /*!< [25..25] Serial Communication Interface 6 Module Stop */ - __IOM uint32_t MSTPB26 : 1; /*!< [26..26] Serial Communication Interface 5 Module Stop */ - __IOM uint32_t MSTPB27 : 1; /*!< [27..27] Serial Communication Interface 4 Module Stop */ - __IOM uint32_t MSTPB28 : 1; /*!< [28..28] Serial Communication Interface 3 Module Stop */ - __IOM uint32_t MSTPB29 : 1; /*!< [29..29] Serial Communication Interface 2 Module Stop */ - __IOM uint32_t MSTPB30 : 1; /*!< [30..30] Serial Communication Interface 1 Module Stop */ - __IOM uint32_t MSTPB31 : 1; /*!< [31..31] Serial Communication Interface 0 Module Stop */ - } MSTPCRB_b; + __IOM uint16_t RFC16 : 1; /*!< [0..0] Frequency Comparison Value (b16) To generate the operating + * clock from the LOCOclock, this bit sets the comparison + * value of the 128-Hz clock cycle. */ + uint16_t : 15; + } RFRH_b; }; union { - __IOM uint32_t MSTPCRC; /*!< (@ 0x00000004) Module Stop Control Register C */ + __IOM uint16_t RFRL; /*!< (@ 0x0000002C) Frequency Register L */ struct { - __IOM uint32_t MSTPC0 : 1; /*!< [0..0] CAC Module Stop */ - __IOM uint32_t MSTPC1 : 1; /*!< [1..1] CRC Calculator Module Stop */ - __IOM uint32_t MSTPC2 : 1; /*!< [2..2] Parallel Data Capture Module Stop */ - __IOM uint32_t MSTPC3 : 1; /*!< [3..3] Capacitive Touch Sensing Unit Module Stop */ - __IOM uint32_t MSTPC4 : 1; /*!< [4..4] Segment LCD Controller Module Stop */ - uint32_t : 8; - __IOM uint32_t MSTPC13 : 1; /*!< [13..13] Data Operation Circuit Module Stop */ - __IOM uint32_t MSTPC14 : 1; /*!< [14..14] Event Link Controller Module Stop */ - uint32_t : 13; - __IOM uint32_t MSTPC28 : 1; /*!< [28..28] Random Number Generator Module Stop */ - uint32_t : 2; - __IOM uint32_t MSTPC31 : 1; /*!< [31..31] AES Module Stop */ - } MSTPCRC_b; + __IOM uint16_t RFC : 16; /*!< [15..0] Frequency Comparison Value(b15-b0) To generate the operating + * clock from the main clock, this bit sets the comparison + * value of the 128-Hz clock cycle. */ + } RFRL_b; }; union { - __IOM uint32_t MSTPCRD; /*!< (@ 0x00000008) Module Stop Control Register D */ + __IOM uint8_t RADJ; /*!< (@ 0x0000002E) Time Error Adjustment Register */ struct { - uint32_t : 2; - __IOM uint32_t MSTPD2 : 1; /*!< [2..2] AGT1 Module StopNote: AGT1 is in the module stop state - * when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. - * In case the count source is sub-clock or LOCO, this bit - * should be set to 1 except when accessing the registers - * of AGT1. */ - __IOM uint32_t MSTPD3 : 1; /*!< [3..3] AGT0 Module StopNote: AGT0 is in the module stop state - * when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. - * In case the count source is sub-clock or LOCO, this bit - * should be set to 1 except when accessing the registers - * of AGT0. */ - uint32_t : 1; - __IOM uint32_t MSTPD5 : 1; /*!< [5..5] GPT ch0 Module Stop */ - __IOM uint32_t MSTPD6 : 1; /*!< [6..6] GPT ch6 - ch1 Module Stop */ - uint32_t : 7; - __IOM uint32_t MSTPD14 : 1; /*!< [14..14] POEG Module Stop */ - uint32_t : 1; - __IOM uint32_t MSTPD16 : 1; /*!< [16..16] 16-Bit A/D Converter Module Stop */ - __IOM uint32_t MSTPD17 : 1; /*!< [17..17] 24-bit Sigma-Delta A/DConverter Module Stop */ - uint32_t : 1; - __IOM uint32_t MSTPD19 : 1; /*!< [19..19] 8-Bit D/A Converter Module Stop */ - __IOM uint32_t MSTPD20 : 1; /*!< [20..20] 12-bit D/A Converter Module Stop */ - uint32_t : 7; - __IOM uint32_t MSTPD28 : 1; /*!< [28..28] ACMPHS0 Module Stop */ - __IOM uint32_t MSTPD29 : 1; /*!< [29..29] Comparator-LP Module Stop */ - uint32_t : 1; - __IOM uint32_t MSTPD31 : 1; /*!< [31..31] Operational Amplifier Module Stop */ - } MSTPCRD_b; + __IOM uint8_t ADJ : 6; /*!< [5..0] Adjustment Value These bits specify the adjustment value + * from the prescaler. */ + __IOM uint8_t PMADJ : 2; /*!< [7..6] Plus-Minus */ + } RADJ_b; }; -} R_MSTP_Type; /*!< Size = 12 (0xc) */ + __IM uint8_t RESERVED19; + __IM uint16_t RESERVED20[8]; + __IOM R_RTC_RTCCR_Type RTCCR[3]; /*!< (@ 0x00000040) Time Capture Control Register */ + __IM uint16_t RESERVED21[5]; + __IOM R_RTC_CP_Type CP[3]; /*!< (@ 0x00000050) Capture registers */ +} R_RTC_Type; /*!< Size = 128 (0x80) */ /* =========================================================================================================================== */ -/* ================ R_OPAMP ================ */ +/* ================ R_SCI0 ================ */ /* =========================================================================================================================== */ /** - * @brief Operational Amplifier (R_OPAMP) + * @brief Serial Communications Interface (R_SCI0) */ -typedef struct /*!< (@ 0x40086000) R_OPAMP Structure */ +typedef struct /*!< (@ 0x40070000) R_SCI0 Structure */ { - __IM uint8_t RESERVED[8]; - union { - __IOM uint8_t AMPMC; /*!< (@ 0x00000008) Operational amplifier mode control register */ - - struct + union { - __IOM uint8_t AMPPC0 : 1; /*!< [0..0] Operational amplifier precharge control status */ - __IOM uint8_t AMPPC1 : 1; /*!< [1..1] Operational amplifier precharge control status */ - __IOM uint8_t AMPPC2 : 1; /*!< [2..2] Operational amplifier precharge control status */ - uint8_t : 4; - __IOM uint8_t AMPSP : 1; /*!< [7..7] Operation mode selection */ - } AMPMC_b; - }; + __IOM uint8_t SMR; /*!< (@ 0x00000000) Serial Mode Register (SCMR.SMIF = 0) */ - union - { - __IOM uint8_t AMPTRM; /*!< (@ 0x00000009) Operational amplifier trigger mode control register */ + struct + { + __IOM uint8_t CKS : 2; /*!< [1..0] Clock Select */ + __IOM uint8_t MP : 1; /*!< [2..2] Multi-Processor Mode(Valid only in asynchronous mode) */ + __IOM uint8_t STOP : 1; /*!< [3..3] Stop Bit Length(Valid only in asynchronous mode) */ + __IOM uint8_t PM : 1; /*!< [4..4] Parity Mode (Valid only when the PE bit is 1) */ + __IOM uint8_t PE : 1; /*!< [5..5] Parity Enable(Valid only in asynchronous mode) */ + __IOM uint8_t CHR : 1; /*!< [6..6] Character Length(Valid only in asynchronous mode) */ + __IOM uint8_t CM : 1; /*!< [7..7] Communication Mode */ + } SMR_b; + }; - struct + union { - __IOM uint8_t AMPTRM0 : 2; /*!< [1..0] Operational amplifier function activation/stop trigger - * control */ - __IOM uint8_t AMPTRM1 : 2; /*!< [3..2] Operational amplifier function activation/stop trigger - * control */ - __IOM uint8_t AMPTRM2 : 2; /*!< [5..4] Operational amplifier function activation/stop trigger - * control */ - __IOM uint8_t AMPTRM3 : 2; /*!< [7..6] Operational amplifier function activation/stop trigger - * control */ - } AMPTRM_b; + __IOM uint8_t SMR_SMCI; /*!< (@ 0x00000000) Serial mode register (SCMR.SMIF = 1) */ + + struct + { + __IOM uint8_t CKS : 2; /*!< [1..0] Clock Select */ + __IOM uint8_t BCP : 2; /*!< [3..2] Base Clock Pulse(Valid only in asynchronous mode) */ + __IOM uint8_t PM : 1; /*!< [4..4] Parity Mode (Valid only when the PE bit is 1) */ + __IOM uint8_t PE : 1; /*!< [5..5] Parity Enable(Valid only in asynchronous mode) */ + __IOM uint8_t BLK : 1; /*!< [6..6] Block Transfer Mode */ + __IOM uint8_t GM : 1; /*!< [7..7] GSM Mode */ + } SMR_SMCI_b; + }; }; union { - __IOM uint8_t AMPTRS; /*!< (@ 0x0000000A) Operational Amplifier Activation Trigger Select - * Register */ + __IOM uint8_t BRR; /*!< (@ 0x00000001) Bit Rate Register */ struct { - __IOM uint8_t AMPTRS : 2; /*!< [1..0] ELC trigger selection Do not change the value of the - * AMPTRS register after setting the AMPTRM register. */ - uint8_t : 6; - } AMPTRS_b; + __IOM uint8_t BRR : 8; /*!< [7..0] BRR is an 8-bit register that adjusts the bit rate. */ + } BRR_b; }; union { - __IOM uint8_t AMPC; /*!< (@ 0x0000000B) Operational amplifier control register */ - - struct + union { - __IOM uint8_t AMPE0 : 1; /*!< [0..0] Operation control of operational amplifier */ - __IOM uint8_t AMPE1 : 1; /*!< [1..1] Operation control of operational amplifier */ - __IOM uint8_t AMPE2 : 1; /*!< [2..2] Operation control of operational amplifier */ - __IOM uint8_t AMPE3 : 1; /*!< [3..3] Operation control of operational amplifier */ - uint8_t : 3; - __IOM uint8_t IREFE : 1; /*!< [7..7] Operation control of operational amplifier reference - * current circuit */ - } AMPC_b; - }; + __IOM uint8_t SCR; /*!< (@ 0x00000002) Serial Control Register (SCMR.SMIF = 0) */ - union - { - __IM uint8_t AMPMON; /*!< (@ 0x0000000C) Operational amplifier monitor register */ + struct + { + __IOM uint8_t CKE : 2; /*!< [1..0] Clock Enable */ + __IOM uint8_t TEIE : 1; /*!< [2..2] Transmit End Interrupt Enable */ + __IOM uint8_t MPIE : 1; /*!< [3..3] Multi-Processor Interrupt Enable(Valid in asynchronous + * mode when SMR.MP = 1) */ + __IOM uint8_t RE : 1; /*!< [4..4] Receive Enable */ + __IOM uint8_t TE : 1; /*!< [5..5] Transmit Enable */ + __IOM uint8_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Interrupt Enable */ + } SCR_b; + }; - struct + union { - __IM uint8_t AMPMON0 : 1; /*!< [0..0] Operational amplifier status */ - __IM uint8_t AMPMON1 : 1; /*!< [1..1] Operational amplifier status */ - __IM uint8_t AMPMON2 : 1; /*!< [2..2] Operational amplifier status */ - __IM uint8_t AMPMON3 : 1; /*!< [3..3] Operational amplifier status */ - uint8_t : 4; - } AMPMON_b; + __IOM uint8_t SCR_SMCI; /*!< (@ 0x00000002) Serial Control Register (SCMR.SMIF =1) */ + + struct + { + __IOM uint8_t CKE : 2; /*!< [1..0] Clock Enable */ + __IOM uint8_t TEIE : 1; /*!< [2..2] Transmit End Interrupt Enable */ + __IOM uint8_t MPIE : 1; /*!< [3..3] Multi-Processor Interrupt Enable */ + __IOM uint8_t RE : 1; /*!< [4..4] Receive Enable */ + __IOM uint8_t TE : 1; /*!< [5..5] Transmit Enable */ + __IOM uint8_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Interrupt Enable */ + } SCR_SMCI_b; + }; }; - __IM uint8_t RESERVED1; - __IOM R_OPAMP_AMP_Type AMP[4]; /*!< (@ 0x0000000E) Input and Output Selectors for Operational Amplifier - * [0..3] */ union { - __IOM uint8_t AMPCPC; /*!< (@ 0x0000001A) Operational amplifier switch charge pump control - * register */ + __IOM uint8_t TDR; /*!< (@ 0x00000003) Transmit Data Register */ struct { - __IOM uint8_t PUMP0EN : 1; /*!< [0..0] charge pump for AMP0 enable/disable */ - __IOM uint8_t PUMP1EN : 1; /*!< [1..1] charge pump for AMP1 enable/disable */ - __IOM uint8_t PUMP2EN : 1; /*!< [2..2] charge pump for AMP2 enable/disable */ - uint8_t : 5; - } AMPCPC_b; + __IOM uint8_t TDR : 8; /*!< [7..0] TDR is an 8-bit register that stores transmit data. */ + } TDR_b; }; - __IM uint8_t RESERVED2[4]; union { - __IOM uint8_t AMPUOTE; /*!< (@ 0x0000001F) Operational Amplifier User Offset Trimming Enable - * Register */ + union + { + __IOM uint8_t SSR; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 0 and FCR.FM=0) */ - struct + struct + { + __IOM uint8_t MPBT : 1; /*!< [0..0] Multi-Processor Bit Transfer */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-Processor */ + __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ + __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } SSR_b; + }; + + union { - __IOM uint8_t AMP0TE : 1; /*!< [0..0] AMP0OT write enable */ - __IOM uint8_t AMP1TE : 1; /*!< [1..1] AMP1OT write enable */ - __IOM uint8_t AMP2TE : 1; /*!< [2..2] AMP2OT write enable */ - uint8_t : 5; - } AMPUOTE_b; - }; - __IOM R_OPAMP_AMPOT_Type AMPOT[3]; /*!< (@ 0x00000020) Operational Amplifier n Offset Trimming Registers */ -} R_OPAMP_Type; /*!< Size = 38 (0x26) */ + __IOM uint8_t SSR_FIFO; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 0 and FCR.FM=1) */ -/* =========================================================================================================================== */ -/* ================ R_PDC ================ */ -/* =========================================================================================================================== */ + struct + { + __IOM uint8_t DR : 1; /*!< [0..0] Receive Data Ready flag(Valid only in asynchronous mode(including + * multi-processor) and FIFO selected) */ + uint8_t : 1; + __IOM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDF : 1; /*!< [6..6] Receive FIFO data full flag */ + __IOM uint8_t TDFE : 1; /*!< [7..7] Transmit FIFO data empty flag */ + } SSR_FIFO_b; + }; -/** - * @brief Parallel Data Capture Unit (R_PDC) - */ + union + { + __IOM uint8_t SSR_SMCI; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 1) */ + + struct + { + __IOM uint8_t MPBT : 1; /*!< [0..0] Multi-Processor Bit TransferThis bit should be 0 in smart + * card interface mode. */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-ProcessorThis bit should be 0 in smart card interface + * mode. */ + __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t ERS : 1; /*!< [4..4] Error Signal Status Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ + __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } SSR_SMCI_b; + }; + }; -typedef struct /*!< (@ 0x40094000) R_PDC Structure */ -{ union { - __IOM uint32_t PCCR0; /*!< (@ 0x00000000) PDC Control Register 0 */ + __IM uint8_t RDR; /*!< (@ 0x00000005) Receive Data Register */ struct { - __IOM uint32_t PCKE : 1; /*!< [0..0] Channel 0 GTCNT Count Clear */ - __IOM uint32_t VPS : 1; /*!< [1..1] VSYNC Signal Polarity Select */ - __IOM uint32_t HPS : 1; /*!< [2..2] HSYNC Signal Polarity Select */ - __OM uint32_t PRST : 1; /*!< [3..3] PDC Reset */ - __IOM uint32_t DFIE : 1; /*!< [4..4] Receive Data Ready Interrupt Enable */ - __IOM uint32_t FEIE : 1; /*!< [5..5] Frame End Interrupt Enable */ - __IOM uint32_t OVIE : 1; /*!< [6..6] Overrun Interrupt Enable */ - __IOM uint32_t UDRIE : 1; /*!< [7..7] Underrun Interrupt Enable */ - __IOM uint32_t VERIE : 1; /*!< [8..8] Vertical Line Number Setting Error Interrupt Enable */ - __IOM uint32_t HERIE : 1; /*!< [9..9] Horizontal Byte Number Setting Error Interrupt Enable */ - __IOM uint32_t PCKOE : 1; /*!< [10..10] PCKO Output Enable */ - __IOM uint32_t PCKDIV : 3; /*!< [13..11] PCKO Frequency Division Ratio Select */ - __IOM uint32_t EDS : 1; /*!< [14..14] Endian Select */ - uint32_t : 17; - } PCCR0_b; + __IM uint8_t RDR : 8; /*!< [7..0] RDR is an 8-bit register that stores receive data. */ + } RDR_b; }; union { - __IOM uint32_t PCCR1; /*!< (@ 0x00000004) PDC Control Register 1 */ + __IOM uint8_t SCMR; /*!< (@ 0x00000006) Smart Card Mode Register */ struct { - __IOM uint32_t PCE : 1; /*!< [0..0] PDC Operation Enable */ - uint32_t : 31; - } PCCR1_b; + __IOM uint8_t SMIF : 1; /*!< [0..0] Smart Card Interface Mode Select */ + uint8_t : 1; + __IOM uint8_t SINV : 1; /*!< [2..2] Transmitted/Received Data InvertSet this bit to 0 if + * operation is to be in simple I2C mode. */ + __IOM uint8_t SDIR : 1; /*!< [3..3] Transmitted/Received Data Transfer DirectionNOTE: The + * setting is invalid and a fixed data length of 8 bits is + * used in modes other than asynchronous mode.Set this bit + * to 1 if operation is to be in simple I2C mode. */ + __IOM uint8_t CHR1 : 1; /*!< [4..4] Character Length 1(Only valid in asynchronous mode) */ + uint8_t : 2; + __IOM uint8_t BCP2 : 1; /*!< [7..7] Base Clock Pulse 2Selects the number of base clock cycles + * in combination with the SMR.BCP[1:0] bits */ + } SCMR_b; }; union { - __IOM uint32_t PCSR; /*!< (@ 0x00000008) PDC Status Register */ + __IOM uint8_t SEMR; /*!< (@ 0x00000007) Serial Extended Mode Register */ struct { - __IM uint32_t FBSY : 1; /*!< [0..0] Frame Busy Flag */ - __IM uint32_t FEMPF : 1; /*!< [1..1] FIFO Empty Flag */ - __IOM uint32_t FEF : 1; /*!< [2..2] Frame End Flag */ - __IOM uint32_t OVRF : 1; /*!< [3..3] Overrun Flag */ - __IOM uint32_t UDRF : 1; /*!< [4..4] Underrun Flag */ - __IOM uint32_t VERF : 1; /*!< [5..5] Vertical Line Number Setting Error Flag */ - __IOM uint32_t HERF : 1; /*!< [6..6] Horizontal Byte Number Setting Error Flag */ - uint32_t : 25; - } PCSR_b; + uint8_t : 2; + __IOM uint8_t BRME : 1; /*!< [2..2] Bit Rate Modulation Enable */ + __IOM uint8_t ABCSE : 1; /*!< [3..3] Asynchronous Mode Extended Base Clock Select 1(Valid + * only in asynchronous mode and SCR.CKE[1]=0) */ + __IOM uint8_t ABCS : 1; /*!< [4..4] Asynchronous Mode Base Clock Select(Valid only in asynchronous + * mode) */ + __IOM uint8_t NFEN : 1; /*!< [5..5] Digital Noise Filter Function Enable(The NFEN bit should + * be 0 without simple I2C mode and asynchronous mode.)In + * asynchronous mode, for RXDn input only. In simple I2C mode, + * for RXDn/TxDn input. */ + __IOM uint8_t BGDM : 1; /*!< [6..6] Baud Rate Generator Double-Speed Mode Select(Only valid + * the CKE[1] bit in SCR is 0 in asynchronous mode). */ + __IOM uint8_t RXDESEL : 1; /*!< [7..7] Asynchronous Start Bit Edge Detection Select(Valid only + * in asynchronous mode) */ + } SEMR_b; }; union { - __IM uint32_t PCMONR; /*!< (@ 0x0000000C) PDC Pin Monitor Register */ + __IOM uint8_t SNFR; /*!< (@ 0x00000008) Noise Filter Setting Register */ struct { - __IM uint32_t VSYNC : 1; /*!< [0..0] VSYNC Signal Status Flag */ - __IM uint32_t HSYNC : 1; /*!< [1..1] HSYNC Signal Status Flag */ - uint32_t : 30; - } PCMONR_b; + __IOM uint8_t NFCS : 3; /*!< [2..0] Noise Filter Clock Select */ + uint8_t : 5; + } SNFR_b; }; union { - __IM uint32_t PCDR; /*!< (@ 0x00000010) PDC Receive Data Register */ + __IOM uint8_t SIMR1; /*!< (@ 0x00000009) I2C Mode Register 1 */ struct { - __IM uint32_t PCDR : 32; /*!< [31..0] The PDC includes a 32-bit-wide, 22-stage FIFO for the - * storage of captured data. The PCDR register is a 4-byte - * space to which the FIFO is mapped, and four bytes of data - * are read from the PCDR register at a time. */ - } PCDR_b; + __IOM uint8_t IICM : 1; /*!< [0..0] Simple I2C Mode Select */ + uint8_t : 2; + __IOM uint8_t IICDL : 5; /*!< [7..3] SDA Delay Output SelectCycles below are of the clock + * signal from the on-chip baud rate generator. */ + } SIMR1_b; }; union { - __IOM uint32_t VCR; /*!< (@ 0x00000014) Vertical Capture Register */ + __IOM uint8_t SIMR2; /*!< (@ 0x0000000A) I2C Mode Register 2 */ struct { - __IOM uint32_t VST : 12; /*!< [11..0] Vertical Capture Start Line PositionNumber of the line - * where capture is to start. */ - uint32_t : 4; - __IOM uint32_t VSZ : 12; /*!< [27..16] Vertical Capture Size Number of lines to be captured. */ - uint32_t : 4; - } VCR_b; + __IOM uint8_t IICINTM : 1; /*!< [0..0] I2C Interrupt Mode Select */ + __IOM uint8_t IICCSC : 1; /*!< [1..1] Clock Synchronization */ + uint8_t : 3; + __IOM uint8_t IICACKT : 1; /*!< [5..5] ACK Transmission Data */ + uint8_t : 2; + } SIMR2_b; }; union { - __IOM uint32_t HCR; /*!< (@ 0x00000018) Horizontal Capture Register */ + __IOM uint8_t SIMR3; /*!< (@ 0x0000000B) I2C Mode Register 3 */ struct { - __IOM uint32_t HST : 12; /*!< [11..0] Horizontal Capture Start Byte Position Horizontal position - * in bytes where capture is to start. */ - uint32_t : 4; - __IOM uint32_t HSZ : 12; /*!< [27..16] Horizontal Capture Size Number of bytes to capture - * horizontally. */ - uint32_t : 4; - } HCR_b; + __IOM uint8_t IICSTAREQ : 1; /*!< [0..0] Start Condition Generation */ + __IOM uint8_t IICRSTAREQ : 1; /*!< [1..1] Restart Condition Generation */ + __IOM uint8_t IICSTPREQ : 1; /*!< [2..2] Stop Condition Generation */ + __IOM uint8_t IICSTIF : 1; /*!< [3..3] Issuing of Start, Restart, or Stop Condition Completed + * Flag(When 0 is written to IICSTIF, it is cleared to 0.) */ + __IOM uint8_t IICSDAS : 2; /*!< [5..4] SDA Output Select */ + __IOM uint8_t IICSCLS : 2; /*!< [7..6] SCL Output Select */ + } SIMR3_b; }; -} R_PDC_Type; /*!< Size = 28 (0x1c) */ - -/* =========================================================================================================================== */ -/* ================ R_PORT0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief I/O Ports (R_PORT0) - */ -typedef struct /*!< (@ 0x40040000) R_PORT0 Structure */ -{ union { - union - { - __IOM uint32_t PCNTR1; /*!< (@ 0x00000000) Port Control Register 1 */ - - struct - { - __IOM uint32_t PDR : 16; /*!< [15..0] Pmn Direction */ - __IOM uint32_t PODR : 16; /*!< [31..16] Pmn Output Data */ - } PCNTR1_b; - }; + __IM uint8_t SISR; /*!< (@ 0x0000000C) I2C Status Register */ struct { - union - { - __IOM uint16_t PODR; /*!< (@ 0x00000000) Output data register */ - - struct - { - __IOM uint16_t PODR0 : 1; /*!< [0..0] Pmn Output Data */ - __IOM uint16_t PODR1 : 1; /*!< [1..1] Pmn Output Data */ - __IOM uint16_t PODR2 : 1; /*!< [2..2] Pmn Output Data */ - __IOM uint16_t PODR3 : 1; /*!< [3..3] Pmn Output Data */ - __IOM uint16_t PODR4 : 1; /*!< [4..4] Pmn Output Data */ - __IOM uint16_t PODR5 : 1; /*!< [5..5] Pmn Output Data */ - __IOM uint16_t PODR6 : 1; /*!< [6..6] Pmn Output Data */ - __IOM uint16_t PODR7 : 1; /*!< [7..7] Pmn Output Data */ - __IOM uint16_t PODR8 : 1; /*!< [8..8] Pmn Output Data */ - __IOM uint16_t PODR9 : 1; /*!< [9..9] Pmn Output Data */ - __IOM uint16_t PODR10 : 1; /*!< [10..10] Pmn Output Data */ - __IOM uint16_t PODR11 : 1; /*!< [11..11] Pmn Output Data */ - __IOM uint16_t PODR12 : 1; /*!< [12..12] Pmn Output Data */ - __IOM uint16_t PODR13 : 1; /*!< [13..13] Pmn Output Data */ - __IOM uint16_t PODR14 : 1; /*!< [14..14] Pmn Output Data */ - __IOM uint16_t PODR15 : 1; /*!< [15..15] Pmn Output Data */ - } PODR_b; - }; - - union - { - __IOM uint16_t PDR; /*!< (@ 0x00000002) Data direction register */ - - struct - { - __IOM uint16_t PDR0 : 1; /*!< [0..0] Pmn Direction */ - __IOM uint16_t PDR1 : 1; /*!< [1..1] Pmn Direction */ - __IOM uint16_t PDR2 : 1; /*!< [2..2] Pmn Direction */ - __IOM uint16_t PDR3 : 1; /*!< [3..3] Pmn Direction */ - __IOM uint16_t PDR4 : 1; /*!< [4..4] Pmn Direction */ - __IOM uint16_t PDR5 : 1; /*!< [5..5] Pmn Direction */ - __IOM uint16_t PDR6 : 1; /*!< [6..6] Pmn Direction */ - __IOM uint16_t PDR7 : 1; /*!< [7..7] Pmn Direction */ - __IOM uint16_t PDR8 : 1; /*!< [8..8] Pmn Direction */ - __IOM uint16_t PDR9 : 1; /*!< [9..9] Pmn Direction */ - __IOM uint16_t PDR10 : 1; /*!< [10..10] Pmn Direction */ - __IOM uint16_t PDR11 : 1; /*!< [11..11] Pmn Direction */ - __IOM uint16_t PDR12 : 1; /*!< [12..12] Pmn Direction */ - __IOM uint16_t PDR13 : 1; /*!< [13..13] Pmn Direction */ - __IOM uint16_t PDR14 : 1; /*!< [14..14] Pmn Direction */ - __IOM uint16_t PDR15 : 1; /*!< [15..15] Pmn Direction */ - } PDR_b; - }; - }; + __IM uint8_t IICACKR : 1; /*!< [0..0] ACK Reception Data Flag */ + uint8_t : 7; + } SISR_b; }; union - { - union - { - __IM uint32_t PCNTR2; /*!< (@ 0x00000004) Port Control Register 2 */ - - struct - { - __IM uint32_t PIDR : 16; /*!< [15..0] Pmn Input Data */ - __IM uint32_t EIDR : 16; /*!< [31..16] Pmn Event Input Data */ - } PCNTR2_b; - }; - - struct - { - union - { - __IM uint16_t EIDR; /*!< (@ 0x00000004) Event input data register */ - - struct - { - __IM uint16_t EIDR0 : 1; /*!< [0..0] Pmn Event Input Data */ - __IM uint16_t EIDR1 : 1; /*!< [1..1] Pmn Event Input Data */ - __IM uint16_t EIDR2 : 1; /*!< [2..2] Pmn Event Input Data */ - __IM uint16_t EIDR3 : 1; /*!< [3..3] Pmn Event Input Data */ - __IM uint16_t EIDR4 : 1; /*!< [4..4] Pmn Event Input Data */ - __IM uint16_t EIDR5 : 1; /*!< [5..5] Pmn Event Input Data */ - __IM uint16_t EIDR6 : 1; /*!< [6..6] Pmn Event Input Data */ - __IM uint16_t EIDR7 : 1; /*!< [7..7] Pmn Event Input Data */ - __IM uint16_t EIDR8 : 1; /*!< [8..8] Pmn Event Input Data */ - __IM uint16_t EIDR9 : 1; /*!< [9..9] Pmn Event Input Data */ - __IM uint16_t EIDR10 : 1; /*!< [10..10] Pmn Event Input Data */ - __IM uint16_t EIDR11 : 1; /*!< [11..11] Pmn Event Input Data */ - __IM uint16_t EIDR12 : 1; /*!< [12..12] Pmn Event Input Data */ - __IM uint16_t EIDR13 : 1; /*!< [13..13] Pmn Event Input Data */ - __IM uint16_t EIDR14 : 1; /*!< [14..14] Pmn Event Input Data */ - __IM uint16_t EIDR15 : 1; /*!< [15..15] Pmn Event Input Data */ - } EIDR_b; - }; - - union - { - __IM uint16_t PIDR; /*!< (@ 0x00000006) Input data register */ - - struct - { - __IM uint16_t PIDR0 : 1; /*!< [0..0] Pmn Input Data */ - __IM uint16_t PIDR1 : 1; /*!< [1..1] Pmn Input Data */ - __IM uint16_t PIDR2 : 1; /*!< [2..2] Pmn Input Data */ - __IM uint16_t PIDR3 : 1; /*!< [3..3] Pmn Input Data */ - __IM uint16_t PIDR4 : 1; /*!< [4..4] Pmn Input Data */ - __IM uint16_t PIDR5 : 1; /*!< [5..5] Pmn Input Data */ - __IM uint16_t PIDR6 : 1; /*!< [6..6] Pmn Input Data */ - __IM uint16_t PIDR7 : 1; /*!< [7..7] Pmn Input Data */ - __IM uint16_t PIDR8 : 1; /*!< [8..8] Pmn Input Data */ - __IM uint16_t PIDR9 : 1; /*!< [9..9] Pmn Input Data */ - __IM uint16_t PIDR10 : 1; /*!< [10..10] Pmn Input Data */ - __IM uint16_t PIDR11 : 1; /*!< [11..11] Pmn Input Data */ - __IM uint16_t PIDR12 : 1; /*!< [12..12] Pmn Input Data */ - __IM uint16_t PIDR13 : 1; /*!< [13..13] Pmn Input Data */ - __IM uint16_t PIDR14 : 1; /*!< [14..14] Pmn Input Data */ - __IM uint16_t PIDR15 : 1; /*!< [15..15] Pmn Input Data */ - } PIDR_b; - }; - }; + { + __IOM uint8_t SPMR; /*!< (@ 0x0000000D) SPI Mode Register */ + + struct + { + __IOM uint8_t SSE : 1; /*!< [0..0] SSn Pin Function Enable */ + __IOM uint8_t CTSE : 1; /*!< [1..1] CTS Enable */ + __IOM uint8_t MSS : 1; /*!< [2..2] Master Slave Select */ + uint8_t : 1; + __IOM uint8_t MFF : 1; /*!< [4..4] Mode Fault Flag */ + uint8_t : 1; + __IOM uint8_t CKPOL : 1; /*!< [6..6] Clock Polarity Select */ + __IOM uint8_t CKPH : 1; /*!< [7..7] Clock Phase Select */ + } SPMR_b; }; union { union { - __OM uint32_t PCNTR3; /*!< (@ 0x00000008) Port Control Register 3 */ + __IOM uint16_t TDRHL; /*!< (@ 0x0000000E) Transmit 9-bit Data Register */ struct { - __OM uint32_t POSR : 16; /*!< [15..0] Pmn Output Set */ - __OM uint32_t PORR : 16; /*!< [31..16] Pmn Output Reset */ - } PCNTR3_b; + __OM uint16_t TDRHL : 16; /*!< [15..0] TDRHL is a 16-bit register that stores transmit data. */ + } TDRHL_b; + }; + + union + { + __OM uint16_t FTDRHL; /*!< (@ 0x0000000E) Transmit FIFO Data Register HL */ + + struct + { + __OM uint16_t TDAT : 9; /*!< [8..0] Serial transmit data (Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + __OM uint16_t MPBT : 1; /*!< [9..9] Multi-processor transfer bit flag(Valid only in asynchronous + * mode and SMR.MP=1 and FIFO selected) */ + uint16_t : 6; + } FTDRHL_b; }; struct { union { - __OM uint16_t PORR; /*!< (@ 0x00000008) Output set register */ + __OM uint8_t FTDRH; /*!< (@ 0x0000000E) Transmit FIFO Data Register H */ struct { - __OM uint16_t PORR0 : 1; /*!< [0..0] Pmn Output Reset */ - __OM uint16_t PORR1 : 1; /*!< [1..1] Pmn Output Reset */ - __OM uint16_t PORR2 : 1; /*!< [2..2] Pmn Output Reset */ - __OM uint16_t PORR3 : 1; /*!< [3..3] Pmn Output Reset */ - __OM uint16_t PORR4 : 1; /*!< [4..4] Pmn Output Reset */ - __OM uint16_t PORR5 : 1; /*!< [5..5] Pmn Output Reset */ - __OM uint16_t PORR6 : 1; /*!< [6..6] Pmn Output Reset */ - __OM uint16_t PORR7 : 1; /*!< [7..7] Pmn Output Reset */ - __OM uint16_t PORR8 : 1; /*!< [8..8] Pmn Output Reset */ - __OM uint16_t PORR9 : 1; /*!< [9..9] Pmn Output Reset */ - __OM uint16_t PORR10 : 1; /*!< [10..10] Pmn Output Reset */ - __OM uint16_t PORR11 : 1; /*!< [11..11] Pmn Output Reset */ - __OM uint16_t PORR12 : 1; /*!< [12..12] Pmn Output Reset */ - __OM uint16_t PORR13 : 1; /*!< [13..13] Pmn Output Reset */ - __OM uint16_t PORR14 : 1; /*!< [14..14] Pmn Output Reset */ - __OM uint16_t PORR15 : 1; /*!< [15..15] Pmn Output Reset */ - } PORR_b; + __OM uint8_t TDATH : 1; /*!< [0..0] Serial transmit data (b8) (Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * and FIFO selected) */ + __OM uint8_t MPBT : 1; /*!< [1..1] Multi-processor transfer bit flag(Valid only in asynchronous + * mode and SMR.MP=1 and FIFO selected) */ + uint8_t : 6; + } FTDRH_b; }; union { - __OM uint16_t POSR; /*!< (@ 0x0000000A) Output reset register */ + __OM uint8_t FTDRL; /*!< (@ 0x0000000F) Transmit FIFO Data Register L */ struct { - __OM uint16_t POSR0 : 1; /*!< [0..0] Pmn Output Set */ - __OM uint16_t POSR1 : 1; /*!< [1..1] Pmn Output Set */ - __OM uint16_t POSR2 : 1; /*!< [2..2] Pmn Output Set */ - __OM uint16_t POSR3 : 1; /*!< [3..3] Pmn Output Set */ - __OM uint16_t POSR4 : 1; /*!< [4..4] Pmn Output Set */ - __OM uint16_t POSR5 : 1; /*!< [5..5] Pmn Output Set */ - __OM uint16_t POSR6 : 1; /*!< [6..6] Pmn Output Set */ - __OM uint16_t POSR7 : 1; /*!< [7..7] Pmn Output Set */ - __OM uint16_t POSR8 : 1; /*!< [8..8] Pmn Output Set */ - __OM uint16_t POSR9 : 1; /*!< [9..9] Pmn Output Set */ - __OM uint16_t POSR10 : 1; /*!< [10..10] Pmn Output Set */ - __OM uint16_t POSR11 : 1; /*!< [11..11] Pmn Output Set */ - __OM uint16_t POSR12 : 1; /*!< [12..12] Pmn Output Set */ - __OM uint16_t POSR13 : 1; /*!< [13..13] Pmn Output Set */ - __OM uint16_t POSR14 : 1; /*!< [14..14] Pmn Output Set */ - __OM uint16_t POSR15 : 1; /*!< [15..15] Pmn Output Set */ - } POSR_b; + __OM uint8_t TDATL : 8; /*!< [7..0] Serial transmit data(b7-b0) (Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * and FIFO selected) */ + } FTDRL_b; }; }; }; @@ -12153,6487 +14466,6258 @@ typedef struct /*!< (@ 0x40040000) R_PORT0 Structure { union { - __IOM uint32_t PCNTR4; /*!< (@ 0x0000000C) Port Control Register 4 */ + __IM uint16_t RDRHL; /*!< (@ 0x00000010) Receive 9-bit Data Register */ struct { - __IOM uint32_t EOSR : 16; /*!< [15..0] Pmn Event Output Set */ - __IOM uint32_t EORR : 16; /*!< [31..16] Pmn Event Output Reset */ - } PCNTR4_b; + __IM uint16_t RDRHL : 16; /*!< [15..0] RDRHL is an 16-bit register that stores receive data. */ + } RDRHL_b; + }; + + union + { + __IM uint16_t FRDRHL; /*!< (@ 0x00000010) Receive FIFO Data Register HL */ + + struct + { + __IM uint16_t RDAT : 9; /*!< [8..0] Serial receive data(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + __IM uint16_t MPB : 1; /*!< [9..9] Multi-processor bit flag(Valid only in asynchronous mode + * with SMR.MP=1 and FIFO selected) It can read multi-processor + * bit corresponded to serial receive data(RDATA[8:0]) */ + __IM uint16_t DR : 1; /*!< [10..10] Receive data ready flag(It is same as SSR.DR) */ + __IM uint16_t PER : 1; /*!< [11..11] Parity error flag */ + __IM uint16_t FER : 1; /*!< [12..12] Framing error flag */ + __IM uint16_t ORER : 1; /*!< [13..13] Overrun error flag(It is same as SSR.ORER) */ + __IM uint16_t RDF : 1; /*!< [14..14] Receive FIFO data full flag(It is same as SSR.RDF) */ + uint16_t : 1; + } FRDRHL_b; }; struct { union { - __IOM uint16_t EORR; /*!< (@ 0x0000000C) Event output set register */ + __IM uint8_t FRDRH; /*!< (@ 0x00000010) Receive FIFO Data Register H */ struct { - __IOM uint16_t EORR0 : 1; /*!< [0..0] Pmn Event Output Reset */ - __IOM uint16_t EORR1 : 1; /*!< [1..1] Pmn Event Output Reset */ - __IOM uint16_t EORR2 : 1; /*!< [2..2] Pmn Event Output Reset */ - __IOM uint16_t EORR3 : 1; /*!< [3..3] Pmn Event Output Reset */ - __IOM uint16_t EORR4 : 1; /*!< [4..4] Pmn Event Output Reset */ - __IOM uint16_t EORR5 : 1; /*!< [5..5] Pmn Event Output Reset */ - __IOM uint16_t EORR6 : 1; /*!< [6..6] Pmn Event Output Reset */ - __IOM uint16_t EORR7 : 1; /*!< [7..7] Pmn Event Output Reset */ - __IOM uint16_t EORR8 : 1; /*!< [8..8] Pmn Event Output Reset */ - __IOM uint16_t EORR9 : 1; /*!< [9..9] Pmn Event Output Reset */ - __IOM uint16_t EORR10 : 1; /*!< [10..10] Pmn Event Output Reset */ - __IOM uint16_t EORR11 : 1; /*!< [11..11] Pmn Event Output Reset */ - __IOM uint16_t EORR12 : 1; /*!< [12..12] Pmn Event Output Reset */ - __IOM uint16_t EORR13 : 1; /*!< [13..13] Pmn Event Output Reset */ - __IOM uint16_t EORR14 : 1; /*!< [14..14] Pmn Event Output Reset */ - __IOM uint16_t EORR15 : 1; /*!< [15..15] Pmn Event Output Reset */ - } EORR_b; + __IM uint8_t RDATH : 1; /*!< [0..0] Serial receive data(b8)(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-processor bit flag(Valid only in asynchronous mode + * with SMR.MP=1 and FIFO selected) It can read multi-processor + * bit corresponded to serial receive data(RDATA[8:0]) */ + __IM uint8_t DR : 1; /*!< [2..2] Receive data ready flag(It is same as SSR.DR) */ + __IM uint8_t PER : 1; /*!< [3..3] Parity error flag */ + __IM uint8_t FER : 1; /*!< [4..4] Framing error flag */ + __IM uint8_t ORER : 1; /*!< [5..5] Overrun error flag(It is same as SSR.ORER) */ + __IM uint8_t RDF : 1; /*!< [6..6] Receive FIFO data full flag(It is same as SSR.RDF) */ + uint8_t : 1; + } FRDRH_b; }; union { - __IOM uint16_t EOSR; /*!< (@ 0x0000000E) Event output reset register */ + __IM uint8_t FRDRL; /*!< (@ 0x00000011) Receive FIFO Data Register L */ struct { - __IOM uint16_t EOSR0 : 1; /*!< [0..0] Pmn Event Output Set */ - __IOM uint16_t EOSR1 : 1; /*!< [1..1] Pmn Event Output Set */ - __IOM uint16_t EOSR2 : 1; /*!< [2..2] Pmn Event Output Set */ - __IOM uint16_t EOSR3 : 1; /*!< [3..3] Pmn Event Output Set */ - __IOM uint16_t EOSR4 : 1; /*!< [4..4] Pmn Event Output Set */ - __IOM uint16_t EOSR5 : 1; /*!< [5..5] Pmn Event Output Set */ - __IOM uint16_t EOSR6 : 1; /*!< [6..6] Pmn Event Output Set */ - __IOM uint16_t EOSR7 : 1; /*!< [7..7] Pmn Event Output Set */ - __IOM uint16_t EOSR8 : 1; /*!< [8..8] Pmn Event Output Set */ - __IOM uint16_t EOSR9 : 1; /*!< [9..9] Pmn Event Output Set */ - __IOM uint16_t EOSR10 : 1; /*!< [10..10] Pmn Event Output Set */ - __IOM uint16_t EOSR11 : 1; /*!< [11..11] Pmn Event Output Set */ - __IOM uint16_t EOSR12 : 1; /*!< [12..12] Pmn Event Output Set */ - __IOM uint16_t EOSR13 : 1; /*!< [13..13] Pmn Event Output Set */ - __IOM uint16_t EOSR14 : 1; /*!< [14..14] Pmn Event Output Set */ - __IOM uint16_t EOSR15 : 1; /*!< [15..15] Pmn Event Output Set */ - } EOSR_b; + __IM uint8_t RDATL : 8; /*!< [7..0] Serial receive data(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected)NOTE: + * When reading both of FRDRH register and FRDRL register, + * please read by an order of the FRDRH register and the FRDRL + * register. */ + } FRDRL_b; }; }; }; -} R_PORT0_Type; /*!< Size = 16 (0x10) */ -/* =========================================================================================================================== */ -/* ================ R_PFS ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint8_t MDDR; /*!< (@ 0x00000012) Modulation Duty Register */ -/** - * @brief I/O Ports-PFS (R_PFS) - */ + struct + { + __IOM uint8_t MDDR : 8; /*!< [7..0] MDDR corrects the bit rate adjusted by the BRR register. */ + } MDDR_b; + }; -typedef struct /*!< (@ 0x40040800) R_PFS Structure */ -{ - __IOM R_PFS_PORT_Type PORT[12]; /*!< (@ 0x00000000) Port [0..11] */ -} R_PFS_Type; /*!< Size = 768 (0x300) */ + union + { + __IOM uint8_t DCCR; /*!< (@ 0x00000013) Data Compare Match Control Register */ -/* =========================================================================================================================== */ -/* ================ R_PMISC ================ */ -/* =========================================================================================================================== */ + struct + { + __IOM uint8_t DCMF : 1; /*!< [0..0] Data Compare Match Flag */ + uint8_t : 2; + __IOM uint8_t DPER : 1; /*!< [3..3] Data Compare Match Parity Error Flag */ + __IOM uint8_t DFER : 1; /*!< [4..4] Data Compare Match Framing Error Flag */ + uint8_t : 1; + __IOM uint8_t IDSEL : 1; /*!< [6..6] ID frame select(Valid only in asynchronous mode(including + * multi-processor) */ + __IOM uint8_t DCME : 1; /*!< [7..7] Data Compare Match Enable(Valid only in asynchronous + * mode(including multi-processor) */ + } DCCR_b; + }; -/** - * @brief I/O Ports-MISC (R_PMISC) - */ + union + { + __IOM uint16_t FCR; /*!< (@ 0x00000014) FIFO Control Register */ + + struct + { + __IOM uint16_t FM : 1; /*!< [0..0] FIFO Mode Select(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode) */ + __IOM uint16_t RFRST : 1; /*!< [1..1] Receive FIFO Data Register Reset(Valid only in FCR.FM=1) */ + __IOM uint16_t TFRST : 1; /*!< [2..2] Transmit FIFO Data Register Reset(Valid only in FCR.FM=1) */ + __IOM uint16_t DRES : 1; /*!< [3..3] Receive data ready error select bit(When detecting a + * reception data ready, the interrupt request is selected.) */ + __IOM uint16_t TTRG : 4; /*!< [7..4] Transmit FIFO data trigger number(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode) */ + __IOM uint16_t RTRG : 4; /*!< [11..8] Receive FIFO data trigger number(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode) */ + __IOM uint16_t RSTRG : 4; /*!< [15..12] RTS Output Active Trigger Number Select(Valid only + * in asynchronous mode(including multi-processor) or clock + * synchronous mode) */ + } FCR_b; + }; + + union + { + __IM uint16_t FDR; /*!< (@ 0x00000016) FIFO Data Count Register */ + + struct + { + __IM uint16_t R : 5; /*!< [4..0] Receive FIFO Data CountIndicate the quantity of receive + * data stored in FRDRH and FRDRL(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * while FCR.FM=1) */ + uint16_t : 3; + __IM uint16_t T : 5; /*!< [12..8] Transmit FIFO Data CountIndicate the quantity of non-transmit + * data stored in FTDRH and FTDRL(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * while FCR.FM=1) */ + uint16_t : 3; + } FDR_b; + }; + + union + { + __IM uint16_t LSR; /*!< (@ 0x00000018) Line Status Register */ + + struct + { + __IM uint16_t ORER : 1; /*!< [0..0] Overrun Error Flag (Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + uint16_t : 1; + __IM uint16_t FNUM : 5; /*!< [6..2] Framing Error CountIndicates the quantity of data with + * a framing error among the receive data stored in the receive + * FIFO data register (FRDRH and FRDRL). */ + uint16_t : 1; + __IM uint16_t PNUM : 5; /*!< [12..8] Parity Error CountIndicates the quantity of data with + * a parity error among the receive data stored in the receive + * FIFO data register (FRDRH and FRDRL). */ + uint16_t : 3; + } LSR_b; + }; -typedef struct /*!< (@ 0x40040D00) R_PMISC Structure */ -{ union { - __IOM uint8_t PFENET; /*!< (@ 0x00000000) Ethernet Control Register */ + __IOM uint16_t CDR; /*!< (@ 0x0000001A) Compare Match Data Register */ struct { - uint8_t : 4; - __IOM uint8_t PHYMODE0 : 1; /*!< [4..4] Ethernet Mode Setting ch0 */ - __IOM uint8_t PHYMODE1 : 1; /*!< [5..5] Ethernet Mode Setting ch1 */ - uint8_t : 2; - } PFENET_b; + __IOM uint16_t CMPD : 9; /*!< [8..0] Compare Match DataCompare data pattern for address match + * wake-up function */ + uint16_t : 7; + } CDR_b; }; - __IM uint8_t RESERVED[2]; union { - __IOM uint8_t PWPR; /*!< (@ 0x00000003) Write-Protect Register */ + __IOM uint8_t SPTR; /*!< (@ 0x0000001C) Serial Port Register */ struct { - uint8_t : 6; - __IOM uint8_t PFSWE : 1; /*!< [6..6] PmnPFS Register Write */ - __IOM uint8_t B0WI : 1; /*!< [7..7] PFSWE Bit Write Disable */ - } PWPR_b; + __IM uint8_t RXDMON : 1; /*!< [0..0] Serial input data monitor bit(The state of the RXD terminal + * is shown.) */ + __IOM uint8_t SPB2DT : 1; /*!< [1..1] Serial port break data select bit(The output level of + * TxD terminal is selected when SCR.TE = 0.) */ + __IOM uint8_t SPB2IO : 1; /*!< [2..2] Serial port break I/O bit(It's selected whether the value + * of SPB2DT is output to TxD terminal.) */ + uint8_t : 1; + __IOM uint8_t RINV : 1; /*!< [4..4] RXD invert bit */ + __IOM uint8_t TINV : 1; /*!< [5..5] TXD invert bit */ + __IOM uint8_t ASEN : 1; /*!< [6..6] Adjust receive sampling timing enable */ + __IOM uint8_t ATEN : 1; /*!< [7..7] Adjust transmit timing enable */ + } SPTR_b; }; -} R_PMISC_Type; /*!< Size = 4 (0x4) */ -/* =========================================================================================================================== */ -/* ================ R_QSPI ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint8_t ACTR; /*!< (@ 0x0000001D) Adjustment Communication Timing Register */ -/** - * @brief Quad Serial Peripheral Interface (R_QSPI) - */ + struct + { + __IOM uint8_t AST : 3; /*!< [2..0] Adjustment value for receive Sampling Timing */ + __IOM uint8_t AJD : 1; /*!< [3..3] Adjustment Direction for receive sampling timing */ + __IOM uint8_t ATT : 3; /*!< [6..4] Adjustment value for Transmit timing */ + __IOM uint8_t AET : 1; /*!< [7..7] Adjustment edge for transmit timing */ + } ACTR_b; + }; + __IM uint16_t RESERVED; -typedef struct /*!< (@ 0x64000000) R_QSPI Structure */ -{ union { - __IOM uint32_t SFMSMD; /*!< (@ 0x00000000) Transfer Mode Control Register */ + __IOM uint8_t ESMER; /*!< (@ 0x00000020) Extended Serial Module Enable Register */ struct { - __IOM uint32_t SFMRM : 3; /*!< [2..0] Serial interface read mode selection */ - uint32_t : 1; - __IOM uint32_t SFMSE : 2; /*!< [5..4] Selection of the prefetch function */ - __IOM uint32_t SFMPFE : 1; /*!< [6..6] Selection of the prefetch function */ - __IOM uint32_t SFMPAE : 1; /*!< [7..7] Selection of the function for stopping prefetch at locations - * other than on byte boundaries */ - __IOM uint32_t SFMMD3 : 1; /*!< [8..8] SPI mode selection. An initial value is determined by - * input to CFGMD3. */ - __IOM uint32_t SFMOEX : 1; /*!< [9..9] Extension of the I/O buffer output enable signal for - * the serial interface */ - __IOM uint32_t SFMOHW : 1; /*!< [10..10] Hold time adjustment for serial transmission */ - __IOM uint32_t SFMOSW : 1; /*!< [11..11] Setup time adjustment for serial transmission */ - uint32_t : 3; - __IOM uint32_t SFMCCE : 1; /*!< [15..15] Read instruction code selection. */ - uint32_t : 16; - } SFMSMD_b; + __IOM uint8_t ESME : 1; /*!< [0..0] Extended Serial Mode Enable */ + uint8_t : 7; + } ESMER_b; }; union { - __IOM uint32_t SFMSSC; /*!< (@ 0x00000004) Chip Selection Control Register */ + __IOM uint8_t CR0; /*!< (@ 0x00000021) Control Register 0 */ struct { - __IOM uint32_t SFMSW : 4; /*!< [3..0] Selection of a minimum high-level width of the QSSL signal */ - __IOM uint32_t SFMSHD : 1; /*!< [4..4] QSSL signal release timing selection */ - __IOM uint32_t SFMSLD : 1; /*!< [5..5] QSSL signal output timing selection */ - uint32_t : 26; - } SFMSSC_b; + uint8_t : 1; + __IM uint8_t SFSF : 1; /*!< [1..1] Start Frame Status Flag */ + __IM uint8_t RXDSF : 1; /*!< [2..2] RXDXn Input Status Flag */ + __IOM uint8_t BRME : 1; /*!< [3..3] Bit Rate Measurement Enable */ + uint8_t : 4; + } CR0_b; }; union { - __IOM uint32_t SFMSKC; /*!< (@ 0x00000008) Clock Control Register */ + __IOM uint8_t CR1; /*!< (@ 0x00000022) Control Register 1 */ struct { - __IOM uint32_t SFMDV : 5; /*!< [4..0] Serial interface reference cycle selection (* Pay attention - * to the irregularity.)NOTE: When PCLKA multiplied by an - * odd number is selected, the high-level width of the SCK - * signal is longer than the low-level width by 1 x PCLKA - * before duty ratio correction. */ - __IOM uint32_t SFMDTY : 1; /*!< [5..5] Selection of a duty ratio correction function for the - * SCK signal */ - uint32_t : 26; - } SFMSKC_b; + __IOM uint8_t BFE : 1; /*!< [0..0] Break Field Enable */ + __IOM uint8_t CF0RE : 1; /*!< [1..1] Control Field 0 Reception Enable */ + __IOM uint8_t CF1DS : 2; /*!< [3..2] Control Field 1 Data Register Select */ + __IOM uint8_t PIBE : 1; /*!< [4..4] Priority Interrupt Bit Enable */ + __IOM uint8_t PIBS : 3; /*!< [7..5] Priority Interrupt Bit Select */ + } CR1_b; }; union { - __IM uint32_t SFMSST; /*!< (@ 0x0000000C) Status Register */ + __IOM uint8_t CR2; /*!< (@ 0x00000023) Control Register 2 */ struct { - __IM uint32_t PFCNT : 5; /*!< [4..0] Number of bytes of prefetched dataRange: 00000 - 10010 - * (No combination other than the above is available.) */ - uint32_t : 1; - __IM uint32_t PFFUL : 1; /*!< [6..6] Prefetch buffer state */ - __IM uint32_t PFOFF : 1; /*!< [7..7] Prefetch function operation state */ - uint32_t : 24; - } SFMSST_b; + __IOM uint8_t DFCS : 3; /*!< [2..0] RXDXn Signal Digital Filter Clock Select */ + uint8_t : 1; + __IOM uint8_t BCCS : 2; /*!< [5..4] Bus Collision Detection Clock Select */ + __IOM uint8_t RTS : 2; /*!< [7..6] RXDXn Reception Sampling Timing Select */ + } CR2_b; }; union { - __IOM uint32_t SFMCOM; /*!< (@ 0x00000010) Communication Port Register */ + __IOM uint8_t CR3; /*!< (@ 0x00000024) Control Register 3 */ struct { - __IOM uint32_t SFMD : 8; /*!< [7..0] Port for direct communication with the SPI bus.Input/output - * to and from this port is converted to a SPIbus cycle. This - * port is accessible in the direct communication mode (DCOM=1) - * only.Access to this port is ignored in the ROM access mode. */ - uint32_t : 24; - } SFMCOM_b; + __IOM uint8_t SDST : 1; /*!< [0..0] Start Frame Detection Start */ + uint8_t : 7; + } CR3_b; }; union { - __IOM uint32_t SFMCMD; /*!< (@ 0x00000014) Communication Mode Control Register */ + __IOM uint8_t PCR; /*!< (@ 0x00000025) Port Control Register */ struct { - __IOM uint32_t DCOM : 1; /*!< [0..0] Selection of a mode of communication with the SPI bus */ - uint32_t : 31; - } SFMCMD_b; + __IOM uint8_t TXDXPS : 1; /*!< [0..0] TXDXn Signal Polarity Select */ + __IOM uint8_t RXDXPS : 1; /*!< [1..1] RXDXn Signal Polarity Select */ + uint8_t : 2; + __IOM uint8_t SHARPS : 1; /*!< [4..4] TXDXn/RXDXn Pin Multiplexing Select */ + uint8_t : 3; + } PCR_b; }; union { - __IOM uint32_t SFMCST; /*!< (@ 0x00000018) Communication Status Register */ + __IOM uint8_t ICR; /*!< (@ 0x00000026) Interrupt Control Register */ struct { - __IM uint32_t COMBSY : 1; /*!< [0..0] SPI bus cycle completion state in direct communication */ - uint32_t : 6; - __IM uint32_t EROMR : 1; /*!< [7..7] Status of ROM access detection in the direct communication - * modeNOTE: Writing of 0 only is possible. Writing of 1 is - * ignored. */ - uint32_t : 24; - } SFMCST_b; + __IOM uint8_t BFDIE : 1; /*!< [0..0] Break Field Low Width Detected Interrupt Enable */ + __IOM uint8_t CF0MIE : 1; /*!< [1..1] Control Field 0 Match Detected Interrupt Enable */ + __IOM uint8_t CF1MIE : 1; /*!< [2..2] Control Field 1 Match Detected Interrupt Enable */ + __IOM uint8_t PIBDIE : 1; /*!< [3..3] Priority Interrupt Bit Detected Interrupt Enable */ + __IOM uint8_t BCDIE : 1; /*!< [4..4] Bus Collision Detected Interrupt Enable */ + __IOM uint8_t AEDIE : 1; /*!< [5..5] Valid Edge Detected Interrupt Enable */ + uint8_t : 2; + } ICR_b; }; - __IM uint32_t RESERVED; union { - __IOM uint32_t SFMSIC; /*!< (@ 0x00000020) Instruction Code Register */ + __IM uint8_t STR; /*!< (@ 0x00000027) Status Register */ struct { - __IOM uint32_t SFMCIC : 8; /*!< [7..0] Serial ROM instruction code to substitute */ - uint32_t : 24; - } SFMSIC_b; + __IM uint8_t BFDF : 1; /*!< [0..0] Break Field Low Width Detection Flag */ + __IM uint8_t CF0MF : 1; /*!< [1..1] Control Field 0 Match Flag */ + __IM uint8_t CF1MF : 1; /*!< [2..2] Control Field 1 Match Flag */ + __IM uint8_t PIBDF : 1; /*!< [3..3] Priority Interrupt Bit Detection Flag */ + __IM uint8_t BCDF : 1; /*!< [4..4] Bus Collision Detected Flag */ + __IM uint8_t AEDF : 1; /*!< [5..5] Valid Edge Detection Flag */ + uint8_t : 2; + } STR_b; }; union { - __IOM uint32_t SFMSAC; /*!< (@ 0x00000024) Address Mode Control Register */ + __IOM uint8_t STCR; /*!< (@ 0x00000028) Status Clear Register */ struct { - __IOM uint32_t SFMAS : 2; /*!< [1..0] Selection the number of address bits of the serial interface */ - uint32_t : 2; - __IOM uint32_t SFM4BC : 1; /*!< [4..4] Selection of a default instruction code, when Serial - * Interface address width is selected 4 bytes. */ - uint32_t : 27; - } SFMSAC_b; + __IOM uint8_t BFDCL : 1; /*!< [0..0] BFDF Clear */ + __IOM uint8_t CF0MCL : 1; /*!< [1..1] CF0MF Clear */ + __IOM uint8_t CF1MCL : 1; /*!< [2..2] CF1MF Clear */ + __IOM uint8_t PIBDCL : 1; /*!< [3..3] PIBDF Clear */ + __IOM uint8_t BCDCL : 1; /*!< [4..4] BCDF Clear */ + __IOM uint8_t AEDCL : 1; /*!< [5..5] AEDF Clear */ + uint8_t : 2; + } STCR_b; }; + __IOM uint8_t CF0DR; /*!< (@ 0x00000029) Control Field 0 Data Register */ union { - __IOM uint32_t SFMSDC; /*!< (@ 0x00000028) Dummy Cycle Control Register */ + __IOM uint8_t CF0CR; /*!< (@ 0x0000002A) Control Field 0 Compare Enable Register */ struct { - __IOM uint32_t SFMDN : 4; /*!< [3..0] Selection of the number of dummy cycles of Fast Read - * instructions */ - uint32_t : 2; - __IM uint32_t SFMXST : 1; /*!< [6..6] XIP mode status */ - __IOM uint32_t SFMXEN : 1; /*!< [7..7] XIP mode permission */ - __IOM uint32_t SFMXD : 8; /*!< [15..8] Mode data for serial ROM. (Control XIP mode) */ - uint32_t : 16; - } SFMSDC_b; + __IOM uint8_t CF0CE0 : 1; /*!< [0..0] Control Field 0 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE1 : 1; /*!< [1..1] Control Field 1 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE2 : 1; /*!< [2..2] Control Field 2 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE3 : 1; /*!< [3..3] Control Field 3 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE4 : 1; /*!< [4..4] Control Field 4 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE5 : 1; /*!< [5..5] Control Field 5 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE6 : 1; /*!< [6..6] Control Field 6 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE7 : 1; /*!< [7..7] Control Field 7 Bit 0 Compare Enable */ + } CF0CR_b; }; - __IM uint32_t RESERVED1; + __IOM uint8_t CF0RR; /*!< (@ 0x0000002B) Control Field 0 Receive Data Register */ + __IOM uint8_t PCF1DR; /*!< (@ 0x0000002C) Primary Control Field 1 Data Register */ + __IOM uint8_t SCF1DR; /*!< (@ 0x0000002D) Secondary Control Field 1 Data Register */ union { - __IOM uint32_t SFMSPC; /*!< (@ 0x00000030) SPI Protocol Control Register */ + __IOM uint8_t CF1CR; /*!< (@ 0x0000002E) Control Field 1 Compare Enable Register */ struct { - __IOM uint32_t SFMSPI : 2; /*!< [1..0] Selection of SPI protocolNOTE: Serial ROM's SPI protocol - * is required to be set by software separately. */ - uint32_t : 2; - __IOM uint32_t SFMSDE : 1; /*!< [4..4] Selection of the minimum time of input output switch, - * when Dual SPI protocol or Quad SPI protocol is selected. */ - uint32_t : 27; - } SFMSPC_b; + __IOM uint8_t CF1CE0 : 1; /*!< [0..0] Control Field 1 Bit 0 Compare Enable */ + __IOM uint8_t CF1CE1 : 1; /*!< [1..1] Control Field 1 Bit 1 Compare Enable */ + __IOM uint8_t CF1CE2 : 1; /*!< [2..2] Control Field 1 Bit 2 Compare Enable */ + __IOM uint8_t CF1CE3 : 1; /*!< [3..3] Control Field 1 Bit 3 Compare Enable */ + __IOM uint8_t CF1CE4 : 1; /*!< [4..4] Control Field 1 Bit 4 Compare Enable */ + __IOM uint8_t CF1CE5 : 1; /*!< [5..5] Control Field 1 Bit 5 Compare Enable */ + __IOM uint8_t CF1CE6 : 1; /*!< [6..6] Control Field 1 Bit 6 Compare Enable */ + __IOM uint8_t CF1CE7 : 1; /*!< [7..7] Control Field 1 Bit 7 Compare Enable */ + } CF1CR_b; }; + __IOM uint8_t CF1RR; /*!< (@ 0x0000002F) Control Field 1 Receive Data Register */ union { - __IOM uint32_t SFMPMD; /*!< (@ 0x00000034) Port Control Register */ + __IOM uint8_t TCR; /*!< (@ 0x00000030) Timer Control Register */ struct { - uint32_t : 2; - __IOM uint32_t SFMWPL : 1; /*!< [2..2] Specify level of WP pin */ - uint32_t : 29; - } SFMPMD_b; + __IOM uint8_t TCST : 1; /*!< [0..0] Timer Count Start */ + uint8_t : 7; + } TCR_b; }; - __IM uint32_t RESERVED2[499]; union { - __IOM uint32_t SFMCNT1; /*!< (@ 0x00000804) External QSPI Address Register 1 */ + __IOM uint8_t TMR; /*!< (@ 0x00000031) Timer Mode Register */ struct { - uint32_t : 26; - __IOM uint32_t QSPI_EXT : 6; /*!< [31..26] BANK Switching AddressWhen accessing from 0x6000_0000 - * to 0x63FF_FFFF, Addres bus is Set QSPI_EXT[5:0] to high-order - * 6bits of SHADDR[31:0]NOTE: Setting 6'h3F is prihibited. */ - } SFMCNT1_b; + __IOM uint8_t TOMS : 2; /*!< [1..0] Timer Operating Mode Select */ + uint8_t : 1; + __IOM uint8_t TWRC : 1; /*!< [3..3] Counter Write Control */ + __IOM uint8_t TCSS : 3; /*!< [6..4] Timer Count Clock Source Select */ + uint8_t : 1; + } TMR_b; }; -} R_QSPI_Type; /*!< Size = 2056 (0x808) */ + __IOM uint8_t TPRE; /*!< (@ 0x00000032) Timer Prescaler Register */ + __IOM uint8_t TCNT; /*!< (@ 0x00000033) Timer Count Register */ +} R_SCI0_Type; /*!< Size = 52 (0x34) */ /* =========================================================================================================================== */ -/* ================ R_RTC ================ */ +/* ================ R_SDADC0 ================ */ /* =========================================================================================================================== */ /** - * @brief Realtime Clock (R_RTC) + * @brief R_SDADC0 (R_SDADC0) */ -typedef struct /*!< (@ 0x40044000) R_RTC Structure */ +typedef struct /*!< (@ 0x4009C000) R_SDADC0 Structure */ { union { - __IM uint8_t R64CNT; /*!< (@ 0x00000000) 64-Hz Counter */ + __IOM uint16_t STC1; /*!< (@ 0x00000000) Startup Control Register 1 */ + + struct + { + __IOM uint16_t CLKDIV : 4; /*!< [3..0] SDADC24 Reference Clock Division */ + uint16_t : 3; + __IOM uint16_t SDADLPM : 1; /*!< [7..7] A/D conversion operation model select */ + __IOM uint16_t VSBIAS : 4; /*!< [11..8] Reference voltage select */ + uint16_t : 3; + __IOM uint16_t VREFSEL : 1; /*!< [15..15] VREF mode select */ + } STC1_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint8_t STC2; /*!< (@ 0x00000004) Startup Control Register 2 */ + + struct + { + __IOM uint8_t BGRPON : 1; /*!< [0..0] BGR part power control */ + __IOM uint8_t ADCPON : 1; /*!< [1..1] ADREG forced power-down */ + __IOM uint8_t ADFPWDS : 1; /*!< [2..2] ADC reference supply part */ + uint8_t : 5; + } STC2_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + + union + { + __IOM uint32_t PGAC[5]; /*!< (@ 0x00000008) Input Multiplexer [0..4] Setting Register */ + + struct + { + __IOM uint32_t PGAGC : 5; /*!< [4..0] Gain selection of a programmable gain instrumentation + * amplifier ( Gset1, Gset2, Gtotal ) */ + __IOM uint32_t PGAOSR : 3; /*!< [7..5] Oversampling ratio select */ + __IOM uint32_t PGAOFS : 5; /*!< [12..8] Offset voltage select */ + uint32_t : 1; + __IOM uint32_t PGAPOL : 1; /*!< [14..14] Polarity select */ + __IOM uint32_t PGASEL : 1; /*!< [15..15] Analog Channel Input Mode Select */ + __IOM uint32_t PGACTM : 5; /*!< [20..16] Coefficient (m) selection of the A/D conversion count + * (N) in AUTOSCAN */ + __IOM uint32_t PGACTN : 3; /*!< [23..21] Coefficient (n) selection of the A/D conversion count + * (N) in AUTOSCAN */ + __IOM uint32_t PGAAVN : 2; /*!< [25..24] Selection of the number of data to be averaged */ + __IOM uint32_t PGAAVE : 2; /*!< [27..26] Selection of averaging processing */ + __IOM uint32_t PGAREV : 1; /*!< [28..28] Single-End Input A/D Converted Data Inversion Select */ + uint32_t : 1; + __IOM uint32_t PGACVE : 1; /*!< [30..30] Calibration enable */ + __IOM uint32_t PGAASN : 1; /*!< [31..31] Selection of the mode for specifying the number of + * A/D conversions in ADSCAN */ + } PGAC_b[5]; + }; + + union + { + __IOM uint32_t ADC1; /*!< (@ 0x0000001C) Sigma-Delta A/D Converter Control Register 1 */ + + struct + { + __IOM uint32_t SDADSCM : 1; /*!< [0..0] Selection of autoscan mode */ + uint32_t : 3; + __IOM uint32_t SDADTMD : 1; /*!< [4..4] Selection of A/D conversion trigger signal */ + uint32_t : 3; + __IOM uint32_t SDADBMP : 5; /*!< [12..8] A/D conversion control of the signal from input multiplexer */ + uint32_t : 3; + __IOM uint32_t PGADISA : 1; /*!< [16..16] Control of disconnection detection */ + __IOM uint32_t PGADISC : 1; /*!< [17..17] Disconnection Detection Assist Setting */ + uint32_t : 2; + __IOM uint32_t PGASLFT : 1; /*!< [20..20] PGA offset self-diagnosis enable */ + uint32_t : 11; + } ADC1_b; + }; + + union + { + __IOM uint8_t ADC2; /*!< (@ 0x00000020) Sigma-Delta A/D Converter Control Register 2 */ struct { - __IM uint8_t F64HZ : 1; /*!< [0..0] 64Hz */ - __IM uint8_t F32HZ : 1; /*!< [1..1] 32Hz */ - __IM uint8_t F16HZ : 1; /*!< [2..2] 16Hz */ - __IM uint8_t F8HZ : 1; /*!< [3..3] 8Hz */ - __IM uint8_t F4HZ : 1; /*!< [4..4] 4Hz */ - __IM uint8_t F2HZ : 1; /*!< [5..5] 2Hz */ - __IM uint8_t F1HZ : 1; /*!< [6..6] 1Hz */ - uint8_t : 1; - } R64CNT_b; + __IOM uint8_t SDADST : 1; /*!< [0..0] Control of A/D conversion */ + uint8_t : 7; + } ADC2_b; }; - __IM uint8_t RESERVED; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; union { - union - { - __IOM uint8_t RSECCNT; /*!< (@ 0x00000002) Second Counter */ - - struct - { - __IOM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Count Counts from 0 to 9 every second. When - * a carry is generated, 1 is added to the tens place. */ - __IOM uint8_t SEC10 : 3; /*!< [6..4] 10-Second Count Counts from 0 to 5 for 60-second counting. */ - uint8_t : 1; - } RSECCNT_b; - }; + __IOM uint32_t ADCR; /*!< (@ 0x00000024) Sigma-delta A/D Converter Conversion Result Register */ - union + struct { - __IOM uint8_t BCNT0; /*!< (@ 0x00000002) Binary Counter 0 */ - - struct - { - __IOM uint8_t BCNT0 : 8; /*!< [7..0] The BCNT0 counter is a readable/writable 32-bit binary - * counter b7 to b0. */ - } BCNT0_b; - }; + __IM uint32_t SDADCRD : 24; /*!< [23..0] The 24-bit A/D conversion result */ + __IM uint32_t SDADCRS : 1; /*!< [24..24] Status of an A/D conversion result */ + __IM uint32_t SDADCRC : 3; /*!< [27..25] Channel number for an A/D conversion result */ + uint32_t : 4; + } ADCR_b; }; - __IM uint8_t RESERVED1; union { - union - { - __IOM uint8_t RMINCNT; /*!< (@ 0x00000004) Minute Counter */ - - struct - { - __IOM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Count Counts from 0 to 9 every minute. When - * a carry is generated, 1 is added to the tens place. */ - __IOM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Count Counts from 0 to 5 for 60-minute counting. */ - uint8_t : 1; - } RMINCNT_b; - }; + __IM uint32_t ADAR; /*!< (@ 0x00000028) Sigma-delta A/D Converter Average Value Register */ - union + struct { - __IOM uint8_t BCNT1; /*!< (@ 0x00000004) Binary Counter 1 */ - - struct - { - __IOM uint8_t BCNT1 : 8; /*!< [7..0] The BCNT1 counter is a readable/writable 32-bit binary - * counter b15 to b8. */ - } BCNT1_b; - }; + __IM uint32_t SDADMVD : 24; /*!< [23..0] The 24-bit A/D average value */ + __IM uint32_t SDADMVS : 1; /*!< [24..24] Status of an A/D conversion result */ + __IM uint32_t SDADMVC : 3; /*!< [27..25] Channel number for an A/D conversion result */ + uint32_t : 4; + } ADAR_b; }; - __IM uint8_t RESERVED2; + __IM uint32_t RESERVED5; union { - union - { - __IOM uint8_t RHRCNT; /*!< (@ 0x00000006) Hour Counter */ - - struct - { - __IOM uint8_t HR1 : 4; /*!< [3..0] 1-Hour Count Counts from 0 to 9 once per hour. When a - * carry is generated, 1 is added to the tens place. */ - __IOM uint8_t HR10 : 2; /*!< [5..4] 10-Hour Count Counts from 0 to 2 once per carry from - * the ones place. */ - __IOM uint8_t PM : 1; /*!< [6..6] Time Counter Setting for a.m./p.m. */ - uint8_t : 1; - } RHRCNT_b; - }; + __IOM uint8_t CLBC; /*!< (@ 0x00000030) Calibration Control Register */ - union + struct { - __IOM uint8_t BCNT2; /*!< (@ 0x00000006) Binary Counter 2 */ - - struct - { - __IOM uint8_t BCNT2 : 8; /*!< [7..0] The BCNT2 counter is a readable/writable 32-bit binary - * counter b23 to b16. */ - } BCNT2_b; - }; + __IOM uint8_t CLBMD : 2; /*!< [1..0] These bits are read as 0. The write value should be 0. */ + uint8_t : 6; + } CLBC_b; }; - __IM uint8_t RESERVED3; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; union { - union - { - __IOM uint8_t RWKCNT; /*!< (@ 0x00000008) Day-of-Week Counter */ - - struct - { - __IOM uint8_t DAYW : 3; /*!< [2..0] Day-of-Week Counting */ - uint8_t : 5; - } RWKCNT_b; - }; + __IOM uint8_t CLBSTR; /*!< (@ 0x00000034) Calibration Start Control Register */ - union + struct { - __IOM uint8_t BCNT3; /*!< (@ 0x00000008) Binary Counter 3 */ - - struct - { - __IOM uint8_t BCNT3 : 8; /*!< [7..0] The BCNT3 counter is a readable/writable 32-bit binary - * counter b31 to b24. */ - } BCNT3_b; - }; + __IOM uint8_t CLBST : 1; /*!< [0..0] Calibration start control */ + uint8_t : 7; + } CLBSTR_b; }; - __IM uint8_t RESERVED4; + __IM uint8_t RESERVED8; + __IM uint16_t RESERVED9; + __IM uint32_t RESERVED10; union { - __IOM uint8_t RDAYCNT; /*!< (@ 0x0000000A) Day Counter */ + __IM uint8_t CLBSSR; /*!< (@ 0x0000003C) Calibration Status Register */ struct { - __IOM uint8_t DATE1 : 4; /*!< [3..0] 1-Day Count Counts from 0 to 9 once per day. When a carry - * is generated, 1 is added to the tens place. */ - __IOM uint8_t DATE10 : 2; /*!< [5..4] 10-Day Count Counts from 0 to 3 once per carry from the - * ones place. */ - uint8_t : 2; - } RDAYCNT_b; + __IM uint8_t CLBSS : 1; /*!< [0..0] Calibration status */ + uint8_t : 7; + } CLBSSR_b; }; - __IM uint8_t RESERVED5; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12; +} R_SDADC0_Type; /*!< Size = 64 (0x40) */ + +/* =========================================================================================================================== */ +/* ================ R_SDHI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SD/MMC Host Interface (R_SDHI0) + */ +typedef struct /*!< (@ 0x40062000) R_SDHI0 Structure */ +{ union { - __IOM uint8_t RMONCNT; /*!< (@ 0x0000000C) Month Counter */ + __IOM uint32_t SD_CMD; /*!< (@ 0x00000000) Command Type Register */ struct { - __IOM uint8_t MON1 : 4; /*!< [3..0] 1-Month Count Counts from 0 to 9 once per month. When - * a carry is generated, 1 is added to the tens place. */ - __IOM uint8_t MON10 : 1; /*!< [4..4] 10-Month Count Counts from 0 to 1 once per carry from - * the ones place. */ - uint8_t : 3; - } RMONCNT_b; + __IOM uint32_t CMDIDX : 6; /*!< [5..0] Command IndexThese bits specify Command Format[45:40] + * (command index).[Examples]CMD6: SD_CMD[7:0] = 8'b00_000110CMD18: + * SD_CMD[7:0] = 8'b00_010010ACMD13: SD_CMD[7:0] = 8'b01_001101 */ + __IOM uint32_t ACMD : 2; /*!< [7..6] Command Type Select */ + __IOM uint32_t RSPTP : 3; /*!< [10..8] Mode/Response TypeNOTE: As some commands cannot be used + * in normal mode, see section 1.4.10, Example of SD_CMD Register + * Setting to select mode/response type. */ + __IOM uint32_t CMDTP : 1; /*!< [11..11] Data Mode (Command Type) */ + __IOM uint32_t CMDRW : 1; /*!< [12..12] Write/Read Mode (enabled when the command with data + * is handled) */ + __IOM uint32_t TRSTP : 1; /*!< [13..13] Single/Multiple Block Transfer (enabled when the command + * with data is handled) */ + __IOM uint32_t CMD12AT : 2; /*!< [15..14] Multiple Block Transfer Mode (enabled at multiple block + * transfer) */ + uint32_t : 16; + } SD_CMD_b; }; - __IM uint8_t RESERVED6; + __IM uint32_t RESERVED; union { - __IOM uint16_t RYRCNT; /*!< (@ 0x0000000E) Year Counter */ + __IOM uint32_t SD_ARG; /*!< (@ 0x00000008) SD Command Argument Register */ struct { - __IOM uint16_t YR1 : 4; /*!< [3..0] 1-Year Count Counts from 0 to 9 once per year. When a - * carry is generated, 1 is added to the tens place. */ - __IOM uint16_t YR10 : 4; /*!< [7..4] 10-Year Count Counts from 0 to 9 once per carry from - * ones place. When a carry is generated in the tens place, - * 1 is added to the hundreds place. */ - uint16_t : 8; - } RYRCNT_b; + __IOM uint32_t SD_ARG : 32; /*!< [31..0] Argument RegisterSet command format[39:8] (argument) */ + } SD_ARG_b; }; union { - union - { - __IOM uint8_t RSECAR; /*!< (@ 0x00000010) Second Alarm Register */ - - struct - { - __OM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Value for the ones place of seconds */ - __IOM uint8_t SEC10 : 3; /*!< [6..4] 10-Seconds Value for the tens place of seconds */ - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RSECAR_b; - }; + __IOM uint32_t SD_ARG1; /*!< (@ 0x0000000C) SD Command Argument Register 1 */ - union + struct { - __IOM uint8_t BCNT0AR; /*!< (@ 0x00000010) Binary Counter 0 Alarm Register */ - - struct - { - __IOM uint8_t BCNT0AR : 8; /*!< [7..0] he BCNT0AR counter is a readable/writable alarm register - * corresponding to 32-bit binary counter b7 to b0. */ - } BCNT0AR_b; - }; + __IOM uint32_t SD_ARG1 : 16; /*!< [15..0] Argument Register 1Set command format[39:24] (argument) */ + uint32_t : 16; + } SD_ARG1_b; }; - __IM uint8_t RESERVED7; union { - union - { - __IOM uint8_t RMINAR; /*!< (@ 0x00000012) Minute Alarm Register */ - - struct - { - __IOM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Count Value for the ones place of minutes */ - __IOM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Count Value for the tens place of minutes */ - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RMINAR_b; - }; + __IOM uint32_t SD_STOP; /*!< (@ 0x00000010) Data Stop Register */ - union + struct { - __IOM uint8_t BCNT1AR; /*!< (@ 0x00000012) Binary Counter 1 Alarm Register */ - - struct - { - __IOM uint8_t BCNT1AR : 8; /*!< [7..0] he BCNT1AR counter is a readable/writable alarm register - * corresponding to 32-bit binary counter b15 to b8. */ - } BCNT1AR_b; - }; + __IOM uint32_t STP : 1; /*!< [0..0] Stop- When STP is set to 1 during multiple block transfer, + * CMD12 is issued to halt the transfer through the SD host + * interface.However, if a command sequence is halted because + * of a communications error or timeout, CMD12 is not issued. + * Although continued buffer access is possible even after + * STP has been set to 1, the buffer access error bit (ERR5 + * or ERR4) in SD_INFO2 will be set accordingly.- When STP + * has been set to 1 during transfer for single block write, + * the access end flag is set when SD_BUF becomes emp */ + uint32_t : 7; + __IOM uint32_t SEC : 1; /*!< [8..8] Block Count EnableSet SEC to 1 at multiple block transfer.When + * SD_CMD is set as follows to start the command sequence + * while SEC is set to 1, CMD12 is automatically issued to + * stop multi-block transfer with the number of blocks which + * is set to SD_SECCNT.1. CMD18 or CMD25 in normal mode (SD_CMD[10:8] + * = 000)2. SD_CMD[15:13] = 001 in extended mode (CMD12 is + * automatically issued, multiple block transfer)When the + * command sequence is halted because of a communications + * error or timeout, CMD12 is not automatically i */ + uint32_t : 23; + } SD_STOP_b; }; - __IM uint8_t RESERVED8; union { - union - { - __IOM uint8_t RHRAR; /*!< (@ 0x00000014) Hour Alarm Register */ - - struct - { - __IOM uint8_t HR1 : 4; /*!< [3..0] 1-Hour Count Value for the ones place of hours */ - __IOM uint8_t HR10 : 2; /*!< [5..4] 10-Hour Count Value for the tens place of hours */ - __IOM uint8_t PM : 1; /*!< [6..6] Time Counter Setting for a.m./p.m. */ - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RHRAR_b; - }; + __IOM uint32_t SD_SECCNT; /*!< (@ 0x00000014) Block Count Register */ - union + struct { - __IOM uint8_t BCNT2AR; /*!< (@ 0x00000014) Binary Counter 2 Alarm Register */ - - struct - { - __IOM uint8_t BCNT2AR : 8; /*!< [7..0] The BCNT2AR counter is a readable/writable 32-bit binary - * counter b23 to b16. */ - } BCNT2AR_b; - }; + __IOM uint32_t SD_SECCNT : 32; /*!< [31..0] Number of Transfer BlocksNOTE: Do not change the value + * of this bit when the CBSY bit in SD_INFO2 is set to 1. */ + } SD_SECCNT_b; }; - __IM uint8_t RESERVED9; union { - union - { - __IOM uint8_t RWKAR; /*!< (@ 0x00000016) Day-of-Week Alarm Register */ - - struct - { - __IOM uint8_t DAYW : 3; /*!< [2..0] Day-of-Week Counting */ - uint8_t : 4; - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RWKAR_b; - }; + __IM uint32_t SD_RSP10; /*!< (@ 0x00000018) SD Card Response Register 10 */ - union + struct { - __IOM uint8_t BCNT3AR; /*!< (@ 0x00000016) Binary Counter 3 Alarm Register */ - - struct - { - __IOM uint8_t BCNT3AR : 8; /*!< [7..0] The BCNT3AR counter is a readable/writable 32-bit binary - * counter b31 to b24. */ - } BCNT3AR_b; - }; + __IM uint32_t SD_RSP10 : 32; /*!< [31..0] Store the response from the SD card/MMC */ + } SD_RSP10_b; }; - __IM uint8_t RESERVED10; union { - union - { - __IOM uint8_t RDAYAR; /*!< (@ 0x00000018) Date Alarm Register */ - - struct - { - __IOM uint8_t DATE1 : 4; /*!< [3..0] 1 Day Value for the ones place of days */ - __IOM uint8_t DATE10 : 2; /*!< [5..4] 10 Days Value for the tens place of days */ - uint8_t : 1; - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RDAYAR_b; - }; + __IM uint32_t SD_RSP1; /*!< (@ 0x0000001C) SD Card Response Register 1 */ - union + struct { - __IOM uint8_t BCNT0AER; /*!< (@ 0x00000018) Binary Counter 0 Alarm Enable Register */ - - struct - { - __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT0AER register is a readable/writable register - * for setting the alarm enable corresponding to 32-bit binary - * counter b7 to b0. */ - } BCNT0AER_b; - }; + __IM uint32_t SD_RSP1 : 16; /*!< [15..0] Store the response from the SD card/MMC */ + uint32_t : 16; + } SD_RSP1_b; }; - __IM uint8_t RESERVED11; union { - union + __IM uint32_t SD_RSP32; /*!< (@ 0x00000020) SD Card Response Register 32 */ + + struct { - __IOM uint8_t RMONAR; /*!< (@ 0x0000001A) Month Alarm Register */ + __IM uint32_t SD_RSP32 : 32; /*!< [31..0] Store the response from the SD card/MMC */ + } SD_RSP32_b; + }; - struct - { - __IOM uint8_t MON1 : 4; /*!< [3..0] 1 Month Value for the ones place of months */ - __IOM uint8_t MON10 : 1; /*!< [4..4] 10 Months Value for the tens place of months */ - uint8_t : 2; - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RMONAR_b; - }; + union + { + __IM uint32_t SD_RSP3; /*!< (@ 0x00000024) SD Card Response Register 3 */ - union + struct { - __IOM uint8_t BCNT1AER; /*!< (@ 0x0000001A) Binary Counter 1 Alarm Enable Register */ - - struct - { - __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT1AER register is a readable/writable register - * for setting the alarm enable corresponding to 32-bit binary - * counter b15 to b8. */ - } BCNT1AER_b; - }; + __IM uint32_t SD_RSP3 : 16; /*!< [15..0] Store the response from the SD card/MMC */ + uint32_t : 16; + } SD_RSP3_b; }; - __IM uint8_t RESERVED12; union { - union + __IM uint32_t SD_RSP54; /*!< (@ 0x00000028) SD Card Response Register 54 */ + + struct { - __IOM uint16_t RYRAR; /*!< (@ 0x0000001C) Year Alarm Register */ + __IM uint32_t SD_RSP54 : 32; /*!< [31..0] Store the response from the SD card/MMC */ + } SD_RSP54_b; + }; - struct - { - __IOM uint16_t YR1 : 4; /*!< [3..0] 1 Year Value for the ones place of years */ - __IOM uint16_t YR10 : 4; /*!< [7..4] 10 Years Value for the tens place of years */ - uint16_t : 8; - } RYRAR_b; - }; + union + { + __IM uint32_t SD_RSP5; /*!< (@ 0x0000002C) SD Card Response Register 5 */ - union + struct { - __IOM uint16_t BCNT2AER; /*!< (@ 0x0000001C) Binary Counter 2 Alarm Enable Register */ - - struct - { - __IOM uint16_t ENB : 8; /*!< [7..0] The BCNT2AER register is a readable/writable register - * for setting the alarm enable corresponding to 32-bit binary - * counter b23 to b16. */ - uint16_t : 8; - } BCNT2AER_b; - }; + __IM uint32_t SD_RSP5 : 16; /*!< [15..0] Store the response from the SD card/MMC */ + uint32_t : 16; + } SD_RSP5_b; }; union { - union + __IM uint32_t SD_RSP76; /*!< (@ 0x00000030) SD Card Response Register 76 */ + + struct { - __IOM uint8_t RYRAREN; /*!< (@ 0x0000001E) Year Alarm Enable Register */ + __IM uint32_t SD_RSP76 : 24; /*!< [23..0] Store the response from the SD card/MMC */ + uint32_t : 8; + } SD_RSP76_b; + }; - struct - { - uint8_t : 7; - __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ - } RYRAREN_b; - }; + union + { + __IM uint32_t SD_RSP7; /*!< (@ 0x00000034) SD Card Response Register 7 */ - union + struct { - __IOM uint8_t BCNT3AER; /*!< (@ 0x0000001E) Binary Counter 3 Alarm Enable Register */ - - struct - { - __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT3AER register is a readable/writable register - * for setting the alarm enable corresponding to 32-bit binary - * counter b31 to b24. */ - } BCNT3AER_b; - }; + __IM uint32_t SD_RSP7 : 8; /*!< [7..0] Store the response from the SD card/MMC */ + uint32_t : 24; + } SD_RSP7_b; }; - __IM uint8_t RESERVED13; - __IM uint16_t RESERVED14; union { - __IOM uint8_t RCR1; /*!< (@ 0x00000022) RTC Control Register 1 */ + __IOM uint32_t SD_INFO1; /*!< (@ 0x00000038) SD Card Interrupt Flag Register 1 */ struct { - __IOM uint8_t AIE : 1; /*!< [0..0] Alarm Interrupt Enable */ - __IOM uint8_t CIE : 1; /*!< [1..1] Carry Interrupt Enable */ - __IOM uint8_t PIE : 1; /*!< [2..2] Periodic Interrupt Enable */ - __IOM uint8_t RTCOS : 1; /*!< [3..3] RTCOUT Output Select */ - __IOM uint8_t PES : 4; /*!< [7..4] Periodic Interrupt Select */ - } RCR1_b; + __IOM uint32_t RSPEND : 1; /*!< [0..0] Response End Detection */ + uint32_t : 1; + __IOM uint32_t ACEND : 1; /*!< [2..2] Access End */ + __IOM uint32_t SDCDRM : 1; /*!< [3..3] SDnCD Card Removal */ + __IOM uint32_t SDCDIN : 1; /*!< [4..4] SDnCD Card Insertion */ + __IM uint32_t SDCDMON : 1; /*!< [5..5] Indicates the SDnCD state */ + uint32_t : 1; + __IM uint32_t SDWPMON : 1; /*!< [7..7] Indicates the SDnWP state */ + __IOM uint32_t SDD3RM : 1; /*!< [8..8] SDnDAT3 Card Removal */ + __IOM uint32_t SDD3IN : 1; /*!< [9..9] SDnDAT3 Card Insertion */ + __IM uint32_t SDD3MON : 1; /*!< [10..10] Inticates the SDnDAT3 State */ + uint32_t : 21; + } SD_INFO1_b; }; - __IM uint8_t RESERVED15; union { - __IOM uint8_t RCR2; /*!< (@ 0x00000024) RTC Control Register 2 */ + __IOM uint32_t SD_INFO2; /*!< (@ 0x0000003C) SD Card Interrupt Flag Register 2 */ struct { - __IOM uint8_t START : 1; /*!< [0..0] Start */ - __IOM uint8_t RESET : 1; /*!< [1..1] RTC Software Reset */ - __IOM uint8_t ADJ30 : 1; /*!< [2..2] 30-Second Adjustment */ - __IOM uint8_t RTCOE : 1; /*!< [3..3] RTCOUT Output Enable */ - __IOM uint8_t AADJE : 1; /*!< [4..4] Automatic Adjustment Enable (When the LOCO clock is selected, - * the setting of this bit is disabled.) */ - __IOM uint8_t AADJP : 1; /*!< [5..5] Automatic Adjustment Period Select (When the LOCO clock - * is selected, the setting of this bit is disabled.) */ - __IOM uint8_t HR24 : 1; /*!< [6..6] Hours Mode */ - __IOM uint8_t CNTMD : 1; /*!< [7..7] Count Mode Select */ - } RCR2_b; + __IOM uint32_t CMDE : 1; /*!< [0..0] Command Error */ + __IOM uint32_t CRCE : 1; /*!< [1..1] CRC Error */ + __IOM uint32_t ENDE : 1; /*!< [2..2] END Error */ + __IOM uint32_t DTO : 1; /*!< [3..3] Data Timeout */ + __IOM uint32_t ILW : 1; /*!< [4..4] SD_BUF Illegal Write Access */ + __IOM uint32_t ILR : 1; /*!< [5..5] SD_BUF Illegal Read Access */ + __IOM uint32_t RSPTO : 1; /*!< [6..6] Response Timeout */ + __IM uint32_t SDD0MON : 1; /*!< [7..7] SDDAT0Indicates the SDDAT0 state of the port specified + * by SD_PORTSEL. */ + __IOM uint32_t BRE : 1; /*!< [8..8] SD_BUF Read Enable */ + __IOM uint32_t BWE : 1; /*!< [9..9] SD_BUF Write Enable */ + uint32_t : 3; + __IM uint32_t SD_CLK_CTRLEN : 1; /*!< [13..13] When a command sequence is started by writing to SD_CMD, + * the CBSY bit is set to 1 and, at the same time, the SCLKDIVEN + * bit is set to 0. The SCLKDIVEN bit is set to 1 after 8 + * cycles of SDCLK have elapsed after setting of the CBSY + * bit to 0 due to completion of the command sequence. */ + __IM uint32_t CBSY : 1; /*!< [14..14] Command Type Register Busy */ + __IOM uint32_t ILA : 1; /*!< [15..15] Illegal Access Error */ + uint32_t : 16; + } SD_INFO2_b; }; - __IM uint8_t RESERVED16; - __IM uint16_t RESERVED17; union { - __IOM uint8_t RCR4; /*!< (@ 0x00000028) RTC Control Register 4 */ + __IOM uint32_t SD_INFO1_MASK; /*!< (@ 0x00000040) SD_INFO1 Interrupt Mask Register */ struct { - __IOM uint8_t RCKSEL : 1; /*!< [0..0] Count Source Select */ - uint8_t : 6; - __IOM uint8_t ROPSEL : 1; /*!< [7..7] RTC Operation Mode Select */ - } RCR4_b; + __IOM uint32_t RSPENDM : 1; /*!< [0..0] Response End Interrupt Request Mask */ + uint32_t : 1; + __IOM uint32_t ACENDM : 1; /*!< [2..2] Access End Interrupt Request Mask */ + __IOM uint32_t SDCDRMM : 1; /*!< [3..3] SDnCD card Removal Interrupt Request Mask */ + __IOM uint32_t SDCDINM : 1; /*!< [4..4] SDnCD card Insertion Interrupt Request Mask */ + uint32_t : 3; + __IOM uint32_t SDD3RMM : 1; /*!< [8..8] SDnDAT3 Card Removal Interrupt Request Mask */ + __IOM uint32_t SDD3INM : 1; /*!< [9..9] SDnDAT3 Card Insertion Interrupt Request Mask */ + uint32_t : 22; + } SD_INFO1_MASK_b; }; - __IM uint8_t RESERVED18; union { - __IOM uint16_t RFRH; /*!< (@ 0x0000002A) Frequency Register H */ + __IOM uint32_t SD_INFO2_MASK; /*!< (@ 0x00000044) SD_INFO2 Interrupt Mask Register */ struct { - __IOM uint16_t RFC16 : 1; /*!< [0..0] Frequency Comparison Value (b16) To generate the operating - * clock from the LOCOclock, this bit sets the comparison - * value of the 128-Hz clock cycle. */ - uint16_t : 15; - } RFRH_b; + __IOM uint32_t CMDEM : 1; /*!< [0..0] Command Error Interrupt Request Mask */ + __IOM uint32_t CRCEM : 1; /*!< [1..1] CRC Error Interrupt Request Mask */ + __IOM uint32_t ENDEM : 1; /*!< [2..2] End Bit Error Interrupt Request Mask */ + __IOM uint32_t DTOM : 1; /*!< [3..3] Data Timeout Interrupt Request Mask */ + __IOM uint32_t ILWM : 1; /*!< [4..4] SD_BUF Register Illegal Write Interrupt Request Mask */ + __IOM uint32_t ILRM : 1; /*!< [5..5] SD_BUF Register Illegal Read Interrupt Request Mask */ + __IOM uint32_t RSPTOM : 1; /*!< [6..6] Response Timeout Interrupt Request Mask */ + uint32_t : 1; + __IOM uint32_t BREM : 1; /*!< [8..8] BRE Interrupt Request Mask */ + __IOM uint32_t BWEM : 1; /*!< [9..9] BWE Interrupt Request Mask */ + uint32_t : 5; + __IOM uint32_t ILAM : 1; /*!< [15..15] Illegal Access Error Interrupt Request Mask */ + uint32_t : 16; + } SD_INFO2_MASK_b; }; union { - __IOM uint16_t RFRL; /*!< (@ 0x0000002C) Frequency Register L */ + __IOM uint32_t SD_CLK_CTRL; /*!< (@ 0x00000048) SD Clock Control Register */ struct { - __IOM uint16_t RFC : 16; /*!< [15..0] Frequency Comparison Value(b15-b0) To generate the operating - * clock from the main clock, this bit sets the comparison - * value of the 128-Hz clock cycle. */ - } RFRL_b; + __IOM uint32_t CLKSEL : 8; /*!< [7..0] SDHI Clock Frequency Select */ + __IOM uint32_t CLKEN : 1; /*!< [8..8] SD/MMC Clock Output Control Enable */ + __IOM uint32_t CLKCTRLEN : 1; /*!< [9..9] SD/MMC Clock Output Automatic Control Enable */ + uint32_t : 22; + } SD_CLK_CTRL_b; }; union { - __IOM uint8_t RADJ; /*!< (@ 0x0000002E) Time Error Adjustment Register */ + __IOM uint32_t SD_SIZE; /*!< (@ 0x0000004C) Transfer Data Length Register */ struct { - __IOM uint8_t ADJ : 6; /*!< [5..0] Adjustment Value These bits specify the adjustment value - * from the prescaler. */ - __IOM uint8_t PMADJ : 2; /*!< [7..6] Plus-Minus */ - } RADJ_b; + __IOM uint32_t LEN : 10; /*!< [9..0] Transfer Data SizeThese bits specify a size between 1 + * and 512 bytes for the transfer of single blocks.In cases + * of multiple block transfer with automatic issuing of CMD12 + * (CMD18 and CMD25), the only specifiable transfer data size + * is 512 bytes. Furthermore, in cases of multiple block transfer + * without automatic issuing of CMD12, as well as 512 bytes, + * 32, 64, 128, and 256 bytes are specifiable. However, in + * the reading of 32, 64, 128, and 256 bytes for the transfer + * of multiple blocks, this is restricted to mult */ + uint32_t : 22; + } SD_SIZE_b; }; - __IM uint8_t RESERVED19; - __IM uint16_t RESERVED20[8]; - __IOM R_RTC_RTCCR_Type RTCCR[3]; /*!< (@ 0x00000040) Time Capture Control Register */ - __IM uint16_t RESERVED21[5]; - __IOM R_RTC_CP_Type CP[3]; /*!< (@ 0x00000050) Capture registers */ -} R_RTC_Type; /*!< Size = 128 (0x80) */ - -/* =========================================================================================================================== */ -/* ================ R_SCI0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Serial Communications Interface (R_SCI0) - */ -typedef struct /*!< (@ 0x40070000) R_SCI0 Structure */ -{ union { - union - { - __IOM uint8_t SMR; /*!< (@ 0x00000000) Serial Mode Register (SCMR.SMIF = 0) */ - - struct - { - __IOM uint8_t CKS : 2; /*!< [1..0] Clock Select */ - __IOM uint8_t MP : 1; /*!< [2..2] Multi-Processor Mode(Valid only in asynchronous mode) */ - __IOM uint8_t STOP : 1; /*!< [3..3] Stop Bit Length(Valid only in asynchronous mode) */ - __IOM uint8_t PM : 1; /*!< [4..4] Parity Mode (Valid only when the PE bit is 1) */ - __IOM uint8_t PE : 1; /*!< [5..5] Parity Enable(Valid only in asynchronous mode) */ - __IOM uint8_t CHR : 1; /*!< [6..6] Character Length(Valid only in asynchronous mode) */ - __IOM uint8_t CM : 1; /*!< [7..7] Communication Mode */ - } SMR_b; - }; + __IOM uint32_t SD_OPTION; /*!< (@ 0x00000050) SD Card Access Control Option Register */ - union + struct { - __IOM uint8_t SMR_SMCI; /*!< (@ 0x00000000) Serial mode register (SCMR.SMIF = 1) */ - - struct - { - __IOM uint8_t CKS : 2; /*!< [1..0] Clock Select */ - __IOM uint8_t BCP : 2; /*!< [3..2] Base Clock Pulse(Valid only in asynchronous mode) */ - __IOM uint8_t PM : 1; /*!< [4..4] Parity Mode (Valid only when the PE bit is 1) */ - __IOM uint8_t PE : 1; /*!< [5..5] Parity Enable(Valid only in asynchronous mode) */ - __IOM uint8_t BLK : 1; /*!< [6..6] Block Transfer Mode */ - __IOM uint8_t GM : 1; /*!< [7..7] GSM Mode */ - } SMR_SMCI_b; - }; + __IOM uint32_t CTOP : 4; /*!< [3..0] Card Detect Time Counter */ + __IOM uint32_t TOP : 4; /*!< [7..4] Timeout Counter */ + __IOM uint32_t TOUTMASK : 1; /*!< [8..8] Timeout MASKWhen timeout occurs in case of inactivating + * timeout, software reset should be executed to terminate + * command sequence. */ + uint32_t : 4; + __IOM uint32_t WIDTH8 : 1; /*!< [13..13] Bus Widthsee b15, WIDTH bit */ + uint32_t : 1; + __IOM uint32_t WIDTH : 1; /*!< [15..15] Bus WidthNOTE: The initial value is applied at a reset + * and when the SOFT_RST.SDRST flag is 0. */ + uint32_t : 16; + } SD_OPTION_b; }; + __IM uint32_t RESERVED1; union { - __IOM uint8_t BRR; /*!< (@ 0x00000001) Bit Rate Register */ + __IM uint32_t SD_ERR_STS1; /*!< (@ 0x00000058) SD Error Status Register 1 */ struct { - __IOM uint8_t BRR : 8; /*!< [7..0] BRR is an 8-bit register that adjusts the bit rate. */ - } BRR_b; + __IM uint32_t CMDE0 : 1; /*!< [0..0] Command Error 0NOTE: other than a response to a command + * issued within a command sequence */ + __IM uint32_t CMDE1 : 1; /*!< [1..1] Command Error 1NOTE: In cases where CMD12 is issued by + * setting a command index in SD_CMD, this is Indicated in + * CMDE0. */ + __IM uint32_t RSPLENE0 : 1; /*!< [2..2] Response Length Error 0NOTE: other than a response to + * a command issued within a command sequence */ + __IM uint32_t RSPLENE1 : 1; /*!< [3..3] Response Length Error 1NOTE: In cases where CMD12 is + * issued by setting a command index in SD_CMD, this is indicated + * in RSPLENE0. */ + __IM uint32_t RDLENE : 1; /*!< [4..4] Read Data Length Error */ + __IM uint32_t CRCLENE : 1; /*!< [5..5] CRC Status Token Length Error */ + uint32_t : 2; + __IM uint32_t RSPCRCE0 : 1; /*!< [8..8] Response CRC Error 0NOTE: other than a response to a + * command issued within a command sequence */ + __IM uint32_t RSPCRCE1 : 1; /*!< [9..9] Response CRC Error 1NOTE: In cases where CMD12 is issued + * by setting a command index in SD_CMD, this is indicated + * in RSPCRCE0. */ + __IM uint32_t RDCRCE : 1; /*!< [10..10] Read Data CRC Error */ + __IM uint32_t CRCTKE : 1; /*!< [11..11] CRC Status Token Error */ + __IM uint32_t CRCTK : 3; /*!< [14..12] CRC Status TokenStore the CRC status token value (normal + * value is 010b) */ + uint32_t : 17; + } SD_ERR_STS1_b; }; union { - union - { - __IOM uint8_t SCR; /*!< (@ 0x00000002) Serial Control Register (SCMR.SMIF = 0) */ - - struct - { - __IOM uint8_t CKE : 2; /*!< [1..0] Clock Enable */ - __IOM uint8_t TEIE : 1; /*!< [2..2] Transmit End Interrupt Enable */ - __IOM uint8_t MPIE : 1; /*!< [3..3] Multi-Processor Interrupt Enable(Valid in asynchronous - * mode when SMR.MP = 1) */ - __IOM uint8_t RE : 1; /*!< [4..4] Receive Enable */ - __IOM uint8_t TE : 1; /*!< [5..5] Transmit Enable */ - __IOM uint8_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ - __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Interrupt Enable */ - } SCR_b; - }; + __IM uint32_t SD_ERR_STS2; /*!< (@ 0x0000005C) SD Error Status Register 2 */ - union + struct { - __IOM uint8_t SCR_SMCI; /*!< (@ 0x00000002) Serial Control Register (SCMR.SMIF =1) */ - - struct - { - __IOM uint8_t CKE : 2; /*!< [1..0] Clock Enable */ - __IOM uint8_t TEIE : 1; /*!< [2..2] Transmit End Interrupt Enable */ - __IOM uint8_t MPIE : 1; /*!< [3..3] Multi-Processor Interrupt Enable */ - __IOM uint8_t RE : 1; /*!< [4..4] Receive Enable */ - __IOM uint8_t TE : 1; /*!< [5..5] Transmit Enable */ - __IOM uint8_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ - __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Interrupt Enable */ - } SCR_SMCI_b; - }; + __IM uint32_t RSPTO0 : 1; /*!< [0..0] Response Timeout 0 */ + __IM uint32_t RSPTO1 : 1; /*!< [1..1] Response Timeout 1 */ + __IM uint32_t BSYTO0 : 1; /*!< [2..2] Busy Timeout 0 */ + __IM uint32_t BSYTO1 : 1; /*!< [3..3] Busy Timeout 1 */ + __IM uint32_t RDTO : 1; /*!< [4..4] Read Data Timeout */ + __IM uint32_t CRCTO : 1; /*!< [5..5] CRC Status Token Timeout */ + __IM uint32_t CRCBSYTO : 1; /*!< [6..6] CRC Status Token Busy Timeout */ + uint32_t : 25; + } SD_ERR_STS2_b; }; union { - __IOM uint8_t TDR; /*!< (@ 0x00000003) Transmit Data Register */ + __IOM uint32_t SD_BUF0; /*!< (@ 0x00000060) SD Buffer Register */ struct { - __IOM uint8_t TDR : 8; /*!< [7..0] TDR is an 8-bit register that stores transmit data. */ - } TDR_b; + __IOM uint32_t SD_BUF : 32; /*!< [31..0] SD Buffer RegisterWhen writing to the SD card, the write + * data is written to this register. When reading from the + * SD card, the read data is read from this register. This + * register is internally connected to two 512-byte buffers.If + * both buffers are not empty when executing multiple block + * read, SD/MMC clock is stopped to suspend receiving data. + * When one of buffers is empty, SD/MMC clock is supplied + * to resume receiving data. */ + } SD_BUF0_b; }; + __IM uint32_t RESERVED2; union { - union - { - __IOM uint8_t SSR; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 0 and FCR.FM=0) */ - - struct - { - __IOM uint8_t MPBT : 1; /*!< [0..0] Multi-Processor Bit Transfer */ - __IM uint8_t MPB : 1; /*!< [1..1] Multi-Processor */ - __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ - __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ - __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ - __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ - __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ - __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ - } SSR_b; - }; - - union - { - __IOM uint8_t SSR_FIFO; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 0 and FCR.FM=1) */ - - struct - { - __IOM uint8_t DR : 1; /*!< [0..0] Receive Data Ready flag(Valid only in asynchronous mode(including - * multi-processor) and FIFO selected) */ - uint8_t : 1; - __IOM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ - __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ - __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ - __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ - __IOM uint8_t RDF : 1; /*!< [6..6] Receive FIFO data full flag */ - __IOM uint8_t TDFE : 1; /*!< [7..7] Transmit FIFO data empty flag */ - } SSR_FIFO_b; - }; - - union - { - __IOM uint8_t SSR_SMCI; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 1) */ + __IOM uint32_t SDIO_MODE; /*!< (@ 0x00000068) SDIO Mode Control Register */ - struct - { - __IOM uint8_t MPBT : 1; /*!< [0..0] Multi-Processor Bit TransferThis bit should be 0 in smart - * card interface mode. */ - __IM uint8_t MPB : 1; /*!< [1..1] Multi-ProcessorThis bit should be 0 in smart card interface - * mode. */ - __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ - __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ - __IOM uint8_t ERS : 1; /*!< [4..4] Error Signal Status Flag */ - __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ - __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ - __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ - } SSR_SMCI_b; - }; + struct + { + __IOM uint32_t INTEN : 1; /*!< [0..0] SDIO Mode */ + uint32_t : 1; + __IOM uint32_t RWREQ : 1; /*!< [2..2] Read Wait Request */ + uint32_t : 5; + __IOM uint32_t IOABT : 1; /*!< [8..8] SDIO AbortNOTE: See manual */ + __IOM uint32_t C52PUB : 1; /*!< [9..9] SDIO None AbortNOTE: See manual */ + uint32_t : 22; + } SDIO_MODE_b; }; union { - __IM uint8_t RDR; /*!< (@ 0x00000005) Receive Data Register */ + __IOM uint32_t SDIO_INFO1; /*!< (@ 0x0000006C) SDIO Interrupt Flag Register 1 */ struct { - __IM uint8_t RDR : 8; /*!< [7..0] RDR is an 8-bit register that stores receive data. */ - } RDR_b; + __IOM uint32_t IOIRQ : 1; /*!< [0..0] SDIO Interrupt Status */ + uint32_t : 13; + __IOM uint32_t EXPUB52 : 1; /*!< [14..14] EXPUB52 Status FlagNOTE: See manual */ + __IOM uint32_t EXWT : 1; /*!< [15..15] EXWT Status FlagNOTE: See manual */ + uint32_t : 16; + } SDIO_INFO1_b; }; union { - __IOM uint8_t SCMR; /*!< (@ 0x00000006) Smart Card Mode Register */ + __IOM uint32_t SDIO_INFO1_MASK; /*!< (@ 0x00000070) SDIO_INFO1 Interrupt Mask Register */ struct { - __IOM uint8_t SMIF : 1; /*!< [0..0] Smart Card Interface Mode Select */ - uint8_t : 1; - __IOM uint8_t SINV : 1; /*!< [2..2] Transmitted/Received Data InvertSet this bit to 0 if - * operation is to be in simple I2C mode. */ - __IOM uint8_t SDIR : 1; /*!< [3..3] Transmitted/Received Data Transfer DirectionNOTE: The - * setting is invalid and a fixed data length of 8 bits is - * used in modes other than asynchronous mode.Set this bit - * to 1 if operation is to be in simple I2C mode. */ - __IOM uint8_t CHR1 : 1; /*!< [4..4] Character Length 1(Only valid in asynchronous mode) */ - uint8_t : 2; - __IOM uint8_t BCP2 : 1; /*!< [7..7] Base Clock Pulse 2Selects the number of base clock cycles - * in combination with the SMR.BCP[1:0] bits */ - } SCMR_b; + __IOM uint32_t IOIRQM : 1; /*!< [0..0] IOIRQ Interrupt Mask Control */ + uint32_t : 13; + __IOM uint32_t EXPUB52M : 1; /*!< [14..14] EXPUB52 Interrupt Request Mask Control */ + __IOM uint32_t EXWTM : 1; /*!< [15..15] EXWT Interrupt Request Mask Control */ + uint32_t : 16; + } SDIO_INFO1_MASK_b; }; + __IM uint32_t RESERVED3[79]; union { - __IOM uint8_t SEMR; /*!< (@ 0x00000007) Serial Extended Mode Register */ + __IOM uint32_t SD_DMAEN; /*!< (@ 0x000001B0) DMA Mode Enable Register */ struct { - uint8_t : 2; - __IOM uint8_t BRME : 1; /*!< [2..2] Bit Rate Modulation Enable */ - __IOM uint8_t ABCSE : 1; /*!< [3..3] Asynchronous Mode Extended Base Clock Select 1(Valid - * only in asynchronous mode and SCR.CKE[1]=0) */ - __IOM uint8_t ABCS : 1; /*!< [4..4] Asynchronous Mode Base Clock Select(Valid only in asynchronous - * mode) */ - __IOM uint8_t NFEN : 1; /*!< [5..5] Digital Noise Filter Function Enable(The NFEN bit should - * be 0 without simple I2C mode and asynchronous mode.)In - * asynchronous mode, for RXDn input only. In simple I2C mode, - * for RXDn/TxDn input. */ - __IOM uint8_t BGDM : 1; /*!< [6..6] Baud Rate Generator Double-Speed Mode Select(Only valid - * the CKE[1] bit in SCR is 0 in asynchronous mode). */ - __IOM uint8_t RXDESEL : 1; /*!< [7..7] Asynchronous Start Bit Edge Detection Select(Valid only - * in asynchronous mode) */ - } SEMR_b; + uint32_t : 1; + __IOM uint32_t DMAEN : 1; /*!< [1..1] SD_BUF Read/Write DMA Transfer */ + uint32_t : 30; + } SD_DMAEN_b; }; + __IM uint32_t RESERVED4[3]; union { - __IOM uint8_t SNFR; /*!< (@ 0x00000008) Noise Filter Setting Register */ + __IOM uint32_t SOFT_RST; /*!< (@ 0x000001C0) Software Reset Register */ struct { - __IOM uint8_t NFCS : 3; /*!< [2..0] Noise Filter Clock Select */ - uint8_t : 5; - } SNFR_b; + __IOM uint32_t SDRST : 1; /*!< [0..0] Software Reset of SD I/F Unit */ + uint32_t : 31; + } SOFT_RST_b; }; + __IM uint32_t RESERVED5[2]; union { - __IOM uint8_t SIMR1; /*!< (@ 0x00000009) I2C Mode Register 1 */ + __IOM uint32_t SDIF_MODE; /*!< (@ 0x000001CC) SD Interface Mode Setting Register */ struct { - __IOM uint8_t IICM : 1; /*!< [0..0] Simple I2C Mode Select */ - uint8_t : 2; - __IOM uint8_t IICDL : 5; /*!< [7..3] SDA Delay Output SelectCycles below are of the clock - * signal from the on-chip baud rate generator. */ - } SIMR1_b; + uint32_t : 8; + __IOM uint32_t NOCHKCR : 1; /*!< [8..8] CRC Check Mask (for MMC test commands) */ + uint32_t : 23; + } SDIF_MODE_b; }; + __IM uint32_t RESERVED6[4]; union { - __IOM uint8_t SIMR2; /*!< (@ 0x0000000A) I2C Mode Register 2 */ + __IOM uint32_t EXT_SWAP; /*!< (@ 0x000001E0) Swap Control Register */ struct { - __IOM uint8_t IICINTM : 1; /*!< [0..0] I2C Interrupt Mode Select */ - __IOM uint8_t IICCSC : 1; /*!< [1..1] Clock Synchronization */ - uint8_t : 3; - __IOM uint8_t IICACKT : 1; /*!< [5..5] ACK Transmission Data */ - uint8_t : 2; - } SIMR2_b; + uint32_t : 6; + __IOM uint32_t BWSWP : 1; /*!< [6..6] SD_BUF0 Swap Write */ + __IOM uint32_t BRSWP : 1; /*!< [7..7] SD_BUF0 Swap Read */ + uint32_t : 24; + } EXT_SWAP_b; }; +} R_SDHI0_Type; /*!< Size = 484 (0x1e4) */ + +/* =========================================================================================================================== */ +/* ================ R_SLCDC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Segment LCD Controller/Driver (R_SLCDC) + */ +typedef struct /*!< (@ 0x40082000) R_SLCDC Structure */ +{ union { - __IOM uint8_t SIMR3; /*!< (@ 0x0000000B) I2C Mode Register 3 */ + __IOM uint8_t LCDM0; /*!< (@ 0x00000000) LCD Mode Register 0 */ struct { - __IOM uint8_t IICSTAREQ : 1; /*!< [0..0] Start Condition Generation */ - __IOM uint8_t IICRSTAREQ : 1; /*!< [1..1] Restart Condition Generation */ - __IOM uint8_t IICSTPREQ : 1; /*!< [2..2] Stop Condition Generation */ - __IOM uint8_t IICSTIF : 1; /*!< [3..3] Issuing of Start, Restart, or Stop Condition Completed - * Flag(When 0 is written to IICSTIF, it is cleared to 0.) */ - __IOM uint8_t IICSDAS : 2; /*!< [5..4] SDA Output Select */ - __IOM uint8_t IICSCLS : 2; /*!< [7..6] SCL Output Select */ - } SIMR3_b; + __IOM uint8_t LBAS : 2; /*!< [1..0] LCD Display Bias Method Select */ + __IOM uint8_t LDTY : 3; /*!< [4..2] Time Slice of LCD Display Select */ + __IOM uint8_t LWAVE : 1; /*!< [5..5] LCD display waveform selection */ + __IOM uint8_t MDSET : 2; /*!< [7..6] LCD drive voltage generator selection */ + } LCDM0_b; }; union { - __IM uint8_t SISR; /*!< (@ 0x0000000C) I2C Status Register */ + __IOM uint8_t LCDM1; /*!< (@ 0x00000001) LCD Mode Register 1 */ struct { - __IM uint8_t IICACKR : 1; /*!< [0..0] ACK Reception Data Flag */ - uint8_t : 7; - } SISR_b; + __IOM uint8_t LCDVLM : 1; /*!< [0..0] Voltage Boosting Pin Initial Value Switching Control */ + uint8_t : 2; + __IOM uint8_t LCDSEL : 1; /*!< [3..3] Display data area control */ + __IOM uint8_t BLON : 1; /*!< [4..4] Display data area control */ + __IOM uint8_t VLCON : 1; /*!< [5..5] Voltage boost circuit or capacitor split circuit operation + * enable/disable */ + __IOM uint8_t SCOC : 1; /*!< [6..6] LCD Display Enable/Disable */ + __IOM uint8_t LCDON : 1; /*!< [7..7] LCD Display Enable/Disable */ + } LCDM1_b; }; union { - __IOM uint8_t SPMR; /*!< (@ 0x0000000D) SPI Mode Register */ + __IOM uint8_t LCDC0; /*!< (@ 0x00000002) LCD Clock Control Register 0 */ struct { - __IOM uint8_t SSE : 1; /*!< [0..0] SSn Pin Function Enable */ - __IOM uint8_t CTSE : 1; /*!< [1..1] CTS Enable */ - __IOM uint8_t MSS : 1; /*!< [2..2] Master Slave Select */ - uint8_t : 1; - __IOM uint8_t MFF : 1; /*!< [4..4] Mode Fault Flag */ - uint8_t : 1; - __IOM uint8_t CKPOL : 1; /*!< [6..6] Clock Polarity Select */ - __IOM uint8_t CKPH : 1; /*!< [7..7] Clock Phase Select */ - } SPMR_b; + __IOM uint8_t LCDC : 6; /*!< [5..0] LCD clock (LCDCL) */ + uint8_t : 2; + } LCDC0_b; }; union { - union + __IOM uint8_t VLCD; /*!< (@ 0x00000003) LCD Boost Level Control Register */ + + struct { - __IOM uint16_t TDRHL; /*!< (@ 0x0000000E) Transmit 9-bit Data Register */ + __IOM uint8_t VLCD : 5; /*!< [4..0] Reference Voltage(Contrast Adjustment) Select */ + uint8_t : 3; + } VLCD_b; + }; + __IM uint8_t RESERVED[252]; - struct - { - __OM uint16_t TDRHL : 16; /*!< [15..0] TDRHL is a 16-bit register that stores transmit data. */ - } TDRHL_b; - }; + union + { + __IOM uint8_t SEG[64]; /*!< (@ 0x00000100) LCD Display Data Array */ - union + struct { - __OM uint16_t FTDRHL; /*!< (@ 0x0000000E) Transmit FIFO Data Register HL */ + __IOM uint8_t A : 4; /*!< [3..0] A-Pattern Area */ + __IOM uint8_t B : 4; /*!< [7..4] B-Pattern Area */ + } SEG_b[64]; + }; +} R_SLCDC_Type; /*!< Size = 320 (0x140) */ - struct - { - __OM uint16_t TDAT : 9; /*!< [8..0] Serial transmit data (Valid only in asynchronous mode(including - * multi-processor) or clock synchronous mode, and FIFO selected) */ - __OM uint16_t MPBT : 1; /*!< [9..9] Multi-processor transfer bit flag(Valid only in asynchronous - * mode and SMR.MP=1 and FIFO selected) */ - uint16_t : 6; - } FTDRHL_b; - }; +/* =========================================================================================================================== */ +/* ================ R_SPI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Peripheral Interface (R_SPI0) + */ + +typedef struct /*!< (@ 0x40072000) R_SPI0 Structure */ +{ + union + { + __IOM uint8_t SPCR; /*!< (@ 0x00000000) SPI Control Register */ struct { - union - { - __OM uint8_t FTDRH; /*!< (@ 0x0000000E) Transmit FIFO Data Register H */ + __IOM uint8_t SPMS : 1; /*!< [0..0] SPI Mode Select */ + __IOM uint8_t TXMD : 1; /*!< [1..1] Communications Operating Mode Select */ + __IOM uint8_t MODFEN : 1; /*!< [2..2] Mode Fault Error Detection Enable */ + __IOM uint8_t MSTR : 1; /*!< [3..3] SPI Master/Slave Mode Select */ + __IOM uint8_t SPEIE : 1; /*!< [4..4] SPI Error Interrupt Enable */ + __IOM uint8_t SPTIE : 1; /*!< [5..5] Transmit Buffer Empty Interrupt Enable */ + __IOM uint8_t SPE : 1; /*!< [6..6] SPI Function Enable */ + __IOM uint8_t SPRIE : 1; /*!< [7..7] SPI Receive Buffer Full Interrupt Enable */ + } SPCR_b; + }; - struct - { - __OM uint8_t TDATH : 1; /*!< [0..0] Serial transmit data (b8) (Valid only in asynchronous - * mode(including multi-processor) or clock synchronous mode, - * and FIFO selected) */ - __OM uint8_t MPBT : 1; /*!< [1..1] Multi-processor transfer bit flag(Valid only in asynchronous - * mode and SMR.MP=1 and FIFO selected) */ - uint8_t : 6; - } FTDRH_b; - }; + union + { + __IOM uint8_t SSLP; /*!< (@ 0x00000001) SPI Slave Select Polarity Register */ - union - { - __OM uint8_t FTDRL; /*!< (@ 0x0000000F) Transmit FIFO Data Register L */ + struct + { + __IOM uint8_t SSL0P : 1; /*!< [0..0] SSL0 Signal Polarity Setting */ + __IOM uint8_t SSL1P : 1; /*!< [1..1] SSL1 Signal Polarity Setting */ + __IOM uint8_t SSL2P : 1; /*!< [2..2] SSL2 Signal Polarity Setting */ + __IOM uint8_t SSL3P : 1; /*!< [3..3] SSL3 Signal Polarity Setting */ + __IOM uint8_t SSL4P : 1; /*!< [4..4] SSL4 Signal Polarity Setting */ + __IOM uint8_t SSL5P : 1; /*!< [5..5] SSL5 Signal Polarity Setting */ + __IOM uint8_t SSL6P : 1; /*!< [6..6] SSL6 Signal Polarity Setting */ + __IOM uint8_t SSL7P : 1; /*!< [7..7] SSL7 Signal Polarity Setting */ + } SSLP_b; + }; - struct - { - __OM uint8_t TDATL : 8; /*!< [7..0] Serial transmit data(b7-b0) (Valid only in asynchronous - * mode(including multi-processor) or clock synchronous mode, - * and FIFO selected) */ - } FTDRL_b; - }; - }; + union + { + __IOM uint8_t SPPCR; /*!< (@ 0x00000002) SPI Pin Control Register */ + + struct + { + __IOM uint8_t SPLP : 1; /*!< [0..0] SPI Loopback */ + __IOM uint8_t SPLP2 : 1; /*!< [1..1] SPI Loopback 2 */ + uint8_t : 2; + __IOM uint8_t MOIFV : 1; /*!< [4..4] MOSI Idle Fixed Value */ + __IOM uint8_t MOIFE : 1; /*!< [5..5] MOSI Idle Value Fixing Enable */ + uint8_t : 2; + } SPPCR_b; }; union { - union - { - __IM uint16_t RDRHL; /*!< (@ 0x00000010) Receive 9-bit Data Register */ - - struct - { - __IM uint16_t RDRHL : 16; /*!< [15..0] RDRHL is an 16-bit register that stores receive data. */ - } RDRHL_b; - }; + __IOM uint8_t SPSR; /*!< (@ 0x00000003) SPI Status Register */ - union + struct { - __IM uint16_t FRDRHL; /*!< (@ 0x00000010) Receive FIFO Data Register HL */ + __IOM uint8_t OVRF : 1; /*!< [0..0] Overrun Error Flag */ + __IM uint8_t IDLNF : 1; /*!< [1..1] SPI Idle Flag */ + __IOM uint8_t MODF : 1; /*!< [2..2] Mode Fault Error Flag */ + __IOM uint8_t PERF : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t UDRF : 1; /*!< [4..4] Underrun Error Flag(When MODF is 0, This bit is invalid.) */ + __IOM uint8_t SPTEF : 1; /*!< [5..5] SPI Transmit Buffer Empty Flag */ + __IOM uint8_t CENDF : 1; /*!< [6..6] Communication End Flag */ + __IOM uint8_t SPRF : 1; /*!< [7..7] SPI Receive Buffer Full Flag */ + } SPSR_b; + }; - struct - { - __IM uint16_t RDAT : 9; /*!< [8..0] Serial receive data(Valid only in asynchronous mode(including - * multi-processor) or clock synchronous mode, and FIFO selected) */ - __IM uint16_t MPB : 1; /*!< [9..9] Multi-processor bit flag(Valid only in asynchronous mode - * with SMR.MP=1 and FIFO selected) It can read multi-processor - * bit corresponded to serial receive data(RDATA[8:0]) */ - __IM uint16_t DR : 1; /*!< [10..10] Receive data ready flag(It is same as SSR.DR) */ - __IM uint16_t PER : 1; /*!< [11..11] Parity error flag */ - __IM uint16_t FER : 1; /*!< [12..12] Framing error flag */ - __IM uint16_t ORER : 1; /*!< [13..13] Overrun error flag(It is same as SSR.ORER) */ - __IM uint16_t RDF : 1; /*!< [14..14] Receive FIFO data full flag(It is same as SSR.RDF) */ - uint16_t : 1; - } FRDRHL_b; - }; + union + { + __IOM uint32_t SPDR; /*!< (@ 0x00000004) SPI Data Register */ + __IOM uint16_t SPDR_HA; /*!< (@ 0x00000004) SPI Data Register ( halfword access ) */ + __IOM uint8_t SPDR_BY; /*!< (@ 0x00000004) SPI Data Register ( byte access ) */ + }; + + union + { + __IOM uint8_t SPSCR; /*!< (@ 0x00000008) SPI Sequence Control Register */ struct { - union - { - __IM uint8_t FRDRH; /*!< (@ 0x00000010) Receive FIFO Data Register H */ - - struct - { - __IM uint8_t RDATH : 1; /*!< [0..0] Serial receive data(b8)(Valid only in asynchronous mode(including - * multi-processor) or clock synchronous mode, and FIFO selected) */ - __IM uint8_t MPB : 1; /*!< [1..1] Multi-processor bit flag(Valid only in asynchronous mode - * with SMR.MP=1 and FIFO selected) It can read multi-processor - * bit corresponded to serial receive data(RDATA[8:0]) */ - __IM uint8_t DR : 1; /*!< [2..2] Receive data ready flag(It is same as SSR.DR) */ - __IM uint8_t PER : 1; /*!< [3..3] Parity error flag */ - __IM uint8_t FER : 1; /*!< [4..4] Framing error flag */ - __IM uint8_t ORER : 1; /*!< [5..5] Overrun error flag(It is same as SSR.ORER) */ - __IM uint8_t RDF : 1; /*!< [6..6] Receive FIFO data full flag(It is same as SSR.RDF) */ - uint8_t : 1; - } FRDRH_b; - }; + __IOM uint8_t SPSLN : 3; /*!< [2..0] RSPI Sequence Length SpecificationThe order in which + * the SPCMD0 to SPCMD07 registers are to be referenced is + * changed in accordance with the sequence length that is + * set in these bits. The relationship among the setting of + * these bits, sequence length, and SPCMD0 to SPCMD7 registers + * referenced by the RSPI is shown above. However, the RSPI + * in slave mode always references SPCMD0. */ + uint8_t : 5; + } SPSCR_b; + }; - union - { - __IM uint8_t FRDRL; /*!< (@ 0x00000011) Receive FIFO Data Register L */ + union + { + __IM uint8_t SPSSR; /*!< (@ 0x00000009) SPI Sequence Status Register */ - struct - { - __IM uint8_t RDATL : 8; /*!< [7..0] Serial receive data(Valid only in asynchronous mode(including - * multi-processor) or clock synchronous mode, and FIFO selected)NOTE: - * When reading both of FRDRH register and FRDRL register, - * please read by an order of the FRDRH register and the FRDRL - * register. */ - } FRDRL_b; - }; - }; + struct + { + __IM uint8_t SPCP : 3; /*!< [2..0] RSPI Command Pointer */ + uint8_t : 1; + __IM uint8_t SPECM : 3; /*!< [6..4] RSPI Error Command */ + uint8_t : 1; + } SPSSR_b; }; union { - __IOM uint8_t MDDR; /*!< (@ 0x00000012) Modulation Duty Register */ + __IOM uint8_t SPBR; /*!< (@ 0x0000000A) SPI Bit Rate Register */ struct { - __IOM uint8_t MDDR : 8; /*!< [7..0] MDDR corrects the bit rate adjusted by the BRR register. */ - } MDDR_b; + __IOM uint8_t SPR : 8; /*!< [7..0] SPBR sets the bit rate in master mode. */ + } SPBR_b; }; union { - __IOM uint8_t DCCR; /*!< (@ 0x00000013) Data Compare Match Control Register */ + __IOM uint8_t SPDCR; /*!< (@ 0x0000000B) SPI Data Control Register */ struct { - __IOM uint8_t DCMF : 1; /*!< [0..0] Data Compare Match Flag */ - uint8_t : 2; - __IOM uint8_t DPER : 1; /*!< [3..3] Data Compare Match Parity Error Flag */ - __IOM uint8_t DFER : 1; /*!< [4..4] Data Compare Match Framing Error Flag */ - uint8_t : 1; - __IOM uint8_t IDSEL : 1; /*!< [6..6] ID frame select(Valid only in asynchronous mode(including - * multi-processor) */ - __IOM uint8_t DCME : 1; /*!< [7..7] Data Compare Match Enable(Valid only in asynchronous - * mode(including multi-processor) */ - } DCCR_b; + __IOM uint8_t SPFC : 2; /*!< [1..0] Number of Frames Specification */ + __IOM uint8_t SLSEL : 2; /*!< [3..2] SSL Pin Output Select */ + __IOM uint8_t SPRDTD : 1; /*!< [4..4] SPI Receive/Transmit Data Selection */ + __IOM uint8_t SPLW : 1; /*!< [5..5] SPI Word Access/Halfword Access Specification */ + __IOM uint8_t SPBYT : 1; /*!< [6..6] SPI Byte Access Specification */ + uint8_t : 1; + } SPDCR_b; }; union { - __IOM uint16_t FCR; /*!< (@ 0x00000014) FIFO Control Register */ + __IOM uint8_t SPCKD; /*!< (@ 0x0000000C) SPI Clock Delay Register */ struct { - __IOM uint16_t FM : 1; /*!< [0..0] FIFO Mode Select(Valid only in asynchronous mode(including - * multi-processor) or clock synchronous mode) */ - __IOM uint16_t RFRST : 1; /*!< [1..1] Receive FIFO Data Register Reset(Valid only in FCR.FM=1) */ - __IOM uint16_t TFRST : 1; /*!< [2..2] Transmit FIFO Data Register Reset(Valid only in FCR.FM=1) */ - __IOM uint16_t DRES : 1; /*!< [3..3] Receive data ready error select bit(When detecting a - * reception data ready, the interrupt request is selected.) */ - __IOM uint16_t TTRG : 4; /*!< [7..4] Transmit FIFO data trigger number(Valid only in asynchronous - * mode(including multi-processor) or clock synchronous mode) */ - __IOM uint16_t RTRG : 4; /*!< [11..8] Receive FIFO data trigger number(Valid only in asynchronous - * mode(including multi-processor) or clock synchronous mode) */ - __IOM uint16_t RSTRG : 4; /*!< [15..12] RTS Output Active Trigger Number Select(Valid only - * in asynchronous mode(including multi-processor) or clock - * synchronous mode) */ - } FCR_b; + __IOM uint8_t SCKDL : 3; /*!< [2..0] RSPCK Delay Setting */ + uint8_t : 5; + } SPCKD_b; }; union { - __IM uint16_t FDR; /*!< (@ 0x00000016) FIFO Data Count Register */ + __IOM uint8_t SSLND; /*!< (@ 0x0000000D) SPI Slave Select Negation Delay Register */ struct { - __IM uint16_t R : 5; /*!< [4..0] Receive FIFO Data CountIndicate the quantity of receive - * data stored in FRDRH and FRDRL(Valid only in asynchronous - * mode(including multi-processor) or clock synchronous mode, - * while FCR.FM=1) */ - uint16_t : 3; - __IM uint16_t T : 5; /*!< [12..8] Transmit FIFO Data CountIndicate the quantity of non-transmit - * data stored in FTDRH and FTDRL(Valid only in asynchronous - * mode(including multi-processor) or clock synchronous mode, - * while FCR.FM=1) */ - uint16_t : 3; - } FDR_b; + __IOM uint8_t SLNDL : 3; /*!< [2..0] SSL Negation Delay Setting */ + uint8_t : 5; + } SSLND_b; }; union { - __IM uint16_t LSR; /*!< (@ 0x00000018) Line Status Register */ + __IOM uint8_t SPND; /*!< (@ 0x0000000E) SPI Next-Access Delay Register */ struct { - __IM uint16_t ORER : 1; /*!< [0..0] Overrun Error Flag (Valid only in asynchronous mode(including - * multi-processor) or clock synchronous mode, and FIFO selected) */ - uint16_t : 1; - __IM uint16_t FNUM : 5; /*!< [6..2] Framing Error CountIndicates the quantity of data with - * a framing error among the receive data stored in the receive - * FIFO data register (FRDRH and FRDRL). */ - uint16_t : 1; - __IM uint16_t PNUM : 5; /*!< [12..8] Parity Error CountIndicates the quantity of data with - * a parity error among the receive data stored in the receive - * FIFO data register (FRDRH and FRDRL). */ - uint16_t : 3; - } LSR_b; + __IOM uint8_t SPNDL : 3; /*!< [2..0] SPI Next-Access Delay Setting */ + uint8_t : 5; + } SPND_b; }; union { - __IOM uint16_t CDR; /*!< (@ 0x0000001A) Compare Match Data Register */ + __IOM uint8_t SPCR2; /*!< (@ 0x0000000F) SPI Control Register 2 */ struct { - __IOM uint16_t CMPD : 9; /*!< [8..0] Compare Match DataCompare data pattern for address match - * wake-up function */ - uint16_t : 7; - } CDR_b; + __IOM uint8_t SPPE : 1; /*!< [0..0] Parity Enable */ + __IOM uint8_t SPOE : 1; /*!< [1..1] Parity Mode */ + __IOM uint8_t SPIIE : 1; /*!< [2..2] SPI Idle Interrupt Enable */ + __IOM uint8_t PTE : 1; /*!< [3..3] Parity Self-Testing */ + __IOM uint8_t SCKASE : 1; /*!< [4..4] RSPCK Auto-Stop Function Enable */ + __IOM uint8_t SPTDDL : 3; /*!< [7..5] RSPI Transmit Data Delay */ + } SPCR2_b; }; union { - __IOM uint8_t SPTR; /*!< (@ 0x0000001C) Serial Port Register */ + __IOM uint16_t SPCMD[8]; /*!< (@ 0x00000010) SPI Command Register [0..7] */ struct { - __IM uint8_t RXDMON : 1; /*!< [0..0] Serial input data monitor bit(The state of the RXD terminal - * is shown.) */ - __IOM uint8_t SPB2DT : 1; /*!< [1..1] Serial port break data select bit(The output level of - * TxD terminal is selected when SCR.TE = 0.) */ - __IOM uint8_t SPB2IO : 1; /*!< [2..2] Serial port break I/O bit(It's selected whether the value - * of SPB2DT is output to TxD terminal.) */ - uint8_t : 5; - } SPTR_b; + __IOM uint16_t CPHA : 1; /*!< [0..0] RSPCK Phase Setting */ + __IOM uint16_t CPOL : 1; /*!< [1..1] RSPCK Polarity Setting */ + __IOM uint16_t BRDV : 2; /*!< [3..2] Bit Rate Division Setting */ + __IOM uint16_t SSLA : 3; /*!< [6..4] SSL Signal Assertion Setting */ + __IOM uint16_t SSLKP : 1; /*!< [7..7] SSL Signal Level Keeping */ + __IOM uint16_t SPB : 4; /*!< [11..8] SPI Data Length Setting */ + __IOM uint16_t LSBF : 1; /*!< [12..12] SPI LSB First */ + __IOM uint16_t SPNDEN : 1; /*!< [13..13] SPI Next-Access Delay Enable */ + __IOM uint16_t SLNDEN : 1; /*!< [14..14] SSL Negation Delay Setting Enable */ + __IOM uint16_t SCKDEN : 1; /*!< [15..15] RSPCK Delay Setting Enable */ + } SPCMD_b[8]; }; - __IM uint8_t RESERVED; - __IM uint16_t RESERVED1; -} R_SCI0_Type; /*!< Size = 32 (0x20) */ -/* =========================================================================================================================== */ -/* ================ R_SDADC0 ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint8_t SPDCR2; /*!< (@ 0x00000020) SPI Data Control Register 2 */ -/** - * @brief R_SDADC0 (R_SDADC0) - */ + struct + { + __IOM uint8_t BYSW : 1; /*!< [0..0] Byte Swap Operating Mode Select */ + __IOM uint8_t SINV : 1; /*!< [1..1] Serial data invert bit */ + uint8_t : 6; + } SPDCR2_b; + }; -typedef struct /*!< (@ 0x4009C000) R_SDADC0 Structure */ -{ union { - __IOM uint16_t STC1; /*!< (@ 0x00000000) Startup Control Register 1 */ + __IOM uint8_t SPCR3; /*!< (@ 0x00000021) RSPI Control Register 3 */ struct { - __IOM uint16_t CLKDIV : 4; /*!< [3..0] SDADC24 Reference Clock Division */ - uint16_t : 3; - __IOM uint16_t SDADLPM : 1; /*!< [7..7] A/D conversion operation model select */ - __IOM uint16_t VSBIAS : 4; /*!< [11..8] Reference voltage select */ - uint16_t : 3; - __IOM uint16_t VREFSEL : 1; /*!< [15..15] VREF mode select */ - } STC1_b; + __IOM uint8_t ETXMD : 1; /*!< [0..0] Extended Communication Mode Select */ + __IOM uint8_t BFDS : 1; /*!< [1..1] Between Burst Transfer Frames Delay Select */ + uint8_t : 2; + __IOM uint8_t CENDIE : 1; /*!< [4..4] RSPI Communication End Interrupt Enable */ + uint8_t : 3; + } SPCR3_b; }; __IM uint16_t RESERVED; + __IM uint32_t RESERVED1[6]; + __IM uint16_t RESERVED2; union { - __IOM uint8_t STC2; /*!< (@ 0x00000004) Startup Control Register 2 */ + __IOM uint16_t SPPR; /*!< (@ 0x0000003E) RSPI Parameter Read Register */ struct { - __IOM uint8_t BGRPON : 1; /*!< [0..0] BGR part power control */ - __IOM uint8_t ADCPON : 1; /*!< [1..1] ADREG forced power-down */ - __IOM uint8_t ADFPWDS : 1; /*!< [2..2] ADC reference supply part */ - uint8_t : 5; - } STC2_b; + uint16_t : 4; + __IOM uint16_t BUFWID : 1; /*!< [4..4] Buffer Width check */ + uint16_t : 3; + __IOM uint16_t BUFNUM : 3; /*!< [10..8] Buffer Number check */ + uint16_t : 1; + __IOM uint16_t CMDNUM : 4; /*!< [15..12] Command Number check */ + } SPPR_b; }; - __IM uint8_t RESERVED1; - __IM uint16_t RESERVED2; +} R_SPI0_Type; /*!< Size = 64 (0x40) */ + +/* =========================================================================================================================== */ +/* ================ R_SRAM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SRAM (R_SRAM) + */ +typedef struct /*!< (@ 0x40002000) R_SRAM Structure */ +{ union { - __IOM uint32_t PGAC[5]; /*!< (@ 0x00000008) Input Multiplexer [0..4] Setting Register */ + __IOM uint8_t PARIOAD; /*!< (@ 0x00000000) SRAM Parity Error Operation After Detection Register */ struct { - __IOM uint32_t PGAGC : 5; /*!< [4..0] Gain selection of a programmable gain instrumentation - * amplifier ( Gset1, Gset2, Gtotal ) */ - __IOM uint32_t PGAOSR : 3; /*!< [7..5] Oversampling ratio select */ - __IOM uint32_t PGAOFS : 5; /*!< [12..8] Offset voltage select */ - uint32_t : 1; - __IOM uint32_t PGAPOL : 1; /*!< [14..14] Polarity select */ - __IOM uint32_t PGASEL : 1; /*!< [15..15] Analog Channel Input Mode Select */ - __IOM uint32_t PGACTM : 5; /*!< [20..16] Coefficient (m) selection of the A/D conversion count - * (N) in AUTOSCAN */ - __IOM uint32_t PGACTN : 3; /*!< [23..21] Coefficient (n) selection of the A/D conversion count - * (N) in AUTOSCAN */ - __IOM uint32_t PGAAVN : 2; /*!< [25..24] Selection of the number of data to be averaged */ - __IOM uint32_t PGAAVE : 2; /*!< [27..26] Selection of averaging processing */ - __IOM uint32_t PGAREV : 1; /*!< [28..28] Single-End Input A/D Converted Data Inversion Select */ - uint32_t : 1; - __IOM uint32_t PGACVE : 1; /*!< [30..30] Calibration enable */ - __IOM uint32_t PGAASN : 1; /*!< [31..31] Selection of the mode for specifying the number of - * A/D conversions in ADSCAN */ - } PGAC_b[5]; + __IOM uint8_t OAD : 1; /*!< [0..0] Operation after Detection */ + uint8_t : 7; + } PARIOAD_b; }; + __IM uint8_t RESERVED[3]; union { - __IOM uint32_t ADC1; /*!< (@ 0x0000001C) Sigma-Delta A/D Converter Control Register 1 */ + __IOM uint8_t SRAMPRCR; /*!< (@ 0x00000004) SRAM Protection Register */ struct { - __IOM uint32_t SDADSCM : 1; /*!< [0..0] Selection of autoscan mode */ - uint32_t : 3; - __IOM uint32_t SDADTMD : 1; /*!< [4..4] Selection of A/D conversion trigger signal */ - uint32_t : 3; - __IOM uint32_t SDADBMP : 5; /*!< [12..8] A/D conversion control of the signal from input multiplexer */ - uint32_t : 3; - __IOM uint32_t PGADISA : 1; /*!< [16..16] Control of disconnection detection */ - __IOM uint32_t PGADISC : 1; /*!< [17..17] Disconnection Detection Assist Setting */ - uint32_t : 2; - __IOM uint32_t PGASLFT : 1; /*!< [20..20] PGA offset self-diagnosis enable */ - uint32_t : 11; - } ADC1_b; + __IOM uint8_t SRAMPRCR : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ + } SRAMPRCR_b; }; + __IM uint8_t RESERVED1[3]; union { - __IOM uint8_t ADC2; /*!< (@ 0x00000020) Sigma-Delta A/D Converter Control Register 2 */ + __IOM uint8_t SRAMWTSC; /*!< (@ 0x00000008) RAM Wait State Control Register */ struct { - __IOM uint8_t SDADST : 1; /*!< [0..0] Control of A/D conversion */ - uint8_t : 7; - } ADC2_b; + __IOM uint8_t ECCRAMWRWTEN : 1; /*!< [0..0] ECCRAM Write Wait Enable */ + __IOM uint8_t ECCRAMRDWTEN : 1; /*!< [1..1] ECCRAM Read wait enable */ + __IOM uint8_t SRAM0WTEN : 1; /*!< [2..2] SRAM0 Wait Enable */ + __IOM uint8_t SRAM1WTEN : 1; /*!< [3..3] SRAM1 Wait Enable */ + __IOM uint8_t SRAMHSWTEN : 1; /*!< [4..4] SRAMHS Wait Enable */ + uint8_t : 3; + } SRAMWTSC_b; }; - __IM uint8_t RESERVED3; - __IM uint16_t RESERVED4; + __IM uint8_t RESERVED2[3]; union { - __IOM uint32_t ADCR; /*!< (@ 0x00000024) Sigma-delta A/D Converter Conversion Result Register */ + __IOM uint8_t SRAMPRCR2; /*!< (@ 0x0000000C) SRAM Protection Register 2 */ struct { - __IM uint32_t SDADCRD : 24; /*!< [23..0] The 24-bit A/D conversion result */ - __IM uint32_t SDADCRS : 1; /*!< [24..24] Status of an A/D conversion result */ - __IM uint32_t SDADCRC : 3; /*!< [27..25] Channel number for an A/D conversion result */ - uint32_t : 4; - } ADCR_b; + __IOM uint8_t SRAMPRCR2 : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ + } SRAMPRCR2_b; }; + __IM uint8_t RESERVED3[179]; union { - __IM uint32_t ADAR; /*!< (@ 0x00000028) Sigma-delta A/D Converter Average Value Register */ + __IOM uint8_t ECCMODE; /*!< (@ 0x000000C0) ECC Operating Mode Control Register */ struct { - __IM uint32_t SDADMVD : 24; /*!< [23..0] The 24-bit A/D average value */ - __IM uint32_t SDADMVS : 1; /*!< [24..24] Status of an A/D conversion result */ - __IM uint32_t SDADMVC : 3; /*!< [27..25] Channel number for an A/D conversion result */ - uint32_t : 4; - } ADAR_b; + __IOM uint8_t ECCMOD : 2; /*!< [1..0] ECC Operating Mode Select */ + uint8_t : 6; + } ECCMODE_b; }; - __IM uint32_t RESERVED5; union { - __IOM uint8_t CLBC; /*!< (@ 0x00000030) Calibration Control Register */ + __IOM uint8_t ECC2STS; /*!< (@ 0x000000C1) ECC 2-Bit Error Status Register */ struct { - __IOM uint8_t CLBMD : 2; /*!< [1..0] These bits are read as 0. The write value should be 0. */ - uint8_t : 6; - } CLBC_b; + __IOM uint8_t ECC2ERR : 1; /*!< [0..0] ECC 2-Bit Error Status */ + uint8_t : 7; + } ECC2STS_b; }; - __IM uint8_t RESERVED6; - __IM uint16_t RESERVED7; union { - __IOM uint8_t CLBSTR; /*!< (@ 0x00000034) Calibration Start Control Register */ + __IOM uint8_t ECC1STSEN; /*!< (@ 0x000000C2) ECC 1-Bit Error Information Update Enable Register */ struct { - __IOM uint8_t CLBST : 1; /*!< [0..0] Calibration start control */ - uint8_t : 7; - } CLBSTR_b; + __IOM uint8_t E1STSEN : 1; /*!< [0..0] ECC 1-Bit Error Information Update Enable */ + uint8_t : 7; + } ECC1STSEN_b; }; - __IM uint8_t RESERVED8; - __IM uint16_t RESERVED9; - __IM uint32_t RESERVED10; union { - __IM uint8_t CLBSSR; /*!< (@ 0x0000003C) Calibration Status Register */ + __IOM uint8_t ECC1STS; /*!< (@ 0x000000C3) ECC 1-Bit Error Status Register */ struct { - __IM uint8_t CLBSS : 1; /*!< [0..0] Calibration status */ - uint8_t : 7; - } CLBSSR_b; + __IOM uint8_t ECC1ERR : 1; /*!< [0..0] ECC 1-Bit Error Status */ + uint8_t : 7; + } ECC1STS_b; }; - __IM uint8_t RESERVED11; - __IM uint16_t RESERVED12; -} R_SDADC0_Type; /*!< Size = 64 (0x40) */ - -/* =========================================================================================================================== */ -/* ================ R_SDHI0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief SD/MMC Host Interface (R_SDHI0) - */ -typedef struct /*!< (@ 0x40062000) R_SDHI0 Structure */ -{ union { - __IOM uint32_t SD_CMD; /*!< (@ 0x00000000) Command Type Register */ + __IOM uint8_t ECCPRCR; /*!< (@ 0x000000C4) ECC Protection Register */ struct { - __IOM uint32_t CMDIDX : 6; /*!< [5..0] Command IndexThese bits specify Command Format[45:40] - * (command index).[Examples]CMD6: SD_CMD[7:0] = 8'b00_000110CMD18: - * SD_CMD[7:0] = 8'b00_010010ACMD13: SD_CMD[7:0] = 8'b01_001101 */ - __IOM uint32_t ACMD : 2; /*!< [7..6] Command Type Select */ - __IOM uint32_t RSPTP : 3; /*!< [10..8] Mode/Response TypeNOTE: As some commands cannot be used - * in normal mode, see section 1.4.10, Example of SD_CMD Register - * Setting to select mode/response type. */ - __IOM uint32_t CMDTP : 1; /*!< [11..11] Data Mode (Command Type) */ - __IOM uint32_t CMDRW : 1; /*!< [12..12] Write/Read Mode (enabled when the command with data - * is handled) */ - __IOM uint32_t TRSTP : 1; /*!< [13..13] Single/Multiple Block Transfer (enabled when the command - * with data is handled) */ - __IOM uint32_t CMD12AT : 2; /*!< [15..14] Multiple Block Transfer Mode (enabled at multiple block - * transfer) */ - uint32_t : 16; - } SD_CMD_b; + __IOM uint8_t ECCPRCR : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ + } ECCPRCR_b; }; - __IM uint32_t RESERVED; + __IM uint8_t RESERVED4[11]; union { - __IOM uint32_t SD_ARG; /*!< (@ 0x00000008) SD Command Argument Register */ + __IOM uint8_t ECCPRCR2; /*!< (@ 0x000000D0) ECC Protection Register 2 */ struct { - __IOM uint32_t SD_ARG : 32; /*!< [31..0] Argument RegisterSet command format[39:8] (argument) */ - } SD_ARG_b; + __IOM uint8_t ECCPRCR2 : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW2 : 7; /*!< [7..1] Write Key Code */ + } ECCPRCR2_b; }; + __IM uint8_t RESERVED5[3]; union { - __IOM uint32_t SD_ARG1; /*!< (@ 0x0000000C) SD Command Argument Register 1 */ + __IOM uint8_t ECCETST; /*!< (@ 0x000000D4) ECC Test Control Register */ struct { - __IOM uint32_t SD_ARG1 : 16; /*!< [15..0] Argument Register 1Set command format[39:24] (argument) */ - uint32_t : 16; - } SD_ARG1_b; + __IOM uint8_t TSTBYP : 1; /*!< [0..0] ECC Bypass Select */ + uint8_t : 7; + } ECCETST_b; }; + __IM uint8_t RESERVED6[3]; union { - __IOM uint32_t SD_STOP; /*!< (@ 0x00000010) Data Stop Register */ + __IOM uint8_t ECCOAD; /*!< (@ 0x000000D8) SRAM ECC Error Operation After Detection Register */ struct { - __IOM uint32_t STP : 1; /*!< [0..0] Stop- When STP is set to 1 during multiple block transfer, - * CMD12 is issued to halt the transfer through the SD host - * interface.However, if a command sequence is halted because - * of a communications error or timeout, CMD12 is not issued. - * Although continued buffer access is possible even after - * STP has been set to 1, the buffer access error bit (ERR5 - * or ERR4) in SD_INFO2 will be set accordingly.- When STP - * has been set to 1 during transfer for single block write, - * the access end flag is set when SD_BUF becomes emp */ - uint32_t : 7; - __IOM uint32_t SEC : 1; /*!< [8..8] Block Count EnableSet SEC to 1 at multiple block transfer.When - * SD_CMD is set as follows to start the command sequence - * while SEC is set to 1, CMD12 is automatically issued to - * stop multi-block transfer with the number of blocks which - * is set to SD_SECCNT.1. CMD18 or CMD25 in normal mode (SD_CMD[10:8] - * = 000)2. SD_CMD[15:13] = 001 in extended mode (CMD12 is - * automatically issued, multiple block transfer)When the - * command sequence is halted because of a communications - * error or timeout, CMD12 is not automatically i */ - uint32_t : 23; - } SD_STOP_b; + __IOM uint8_t OAD : 1; /*!< [0..0] Operation after Detection */ + uint8_t : 7; + } ECCOAD_b; }; +} R_SRAM_Type; /*!< Size = 217 (0xd9) */ + +/* =========================================================================================================================== */ +/* ================ R_SRC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Sampling Rate Converter (R_SRC) + */ +typedef struct /*!< (@ 0x40048000) R_SRC Structure */ +{ union { - __IOM uint32_t SD_SECCNT; /*!< (@ 0x00000014) Block Count Register */ + __IOM uint32_t SRCFCTR[5552]; /*!< (@ 0x00000000) Filter Coefficient Table [0..5551] */ struct { - __IOM uint32_t SD_SECCNT : 32; /*!< [31..0] Number of Transfer BlocksNOTE: Do not change the value - * of this bit when the CBSY bit in SD_INFO2 is set to 1. */ - } SD_SECCNT_b; + __IOM uint32_t SRCFCOE : 22; /*!< [21..0] Stores a filter coefficient value. */ + uint32_t : 10; + } SRCFCTR_b[5552]; }; + __IM uint32_t RESERVED[588]; union { - __IM uint32_t SD_RSP10; /*!< (@ 0x00000018) SD Card Response Register 10 */ + __OM uint32_t SRCID; /*!< (@ 0x00005FF0) Input Data Register */ struct { - __IM uint32_t SD_RSP10 : 32; /*!< [31..0] Store the response from the SD card/MMC */ - } SD_RSP10_b; + __OM uint32_t SRCID : 32; /*!< [31..0] SRCID is a 32-bit writ-only register that is used to + * input the data before sampling rate conversion. All the + * bits are read as 0. */ + } SRCID_b; }; union { - __IM uint32_t SD_RSP1; /*!< (@ 0x0000001C) SD Card Response Register 1 */ + __IM uint32_t SRCOD; /*!< (@ 0x00005FF4) Output Data Register */ struct { - __IM uint32_t SD_RSP1 : 16; /*!< [15..0] Store the response from the SD card/MMC */ - uint32_t : 16; - } SD_RSP1_b; + __IM uint32_t SRCOD : 32; /*!< [31..0] SRCOD is a 32-bit read-only register used to output + * the data after sampling rate conversion. The data in the + * 16-stage output data FIFO is read through SRCOD. When the + * number of data in the output data FIFO is zero after the + * start of conversion, the value previously read is read + * again. */ + } SRCOD_b; }; union { - __IM uint32_t SD_RSP32; /*!< (@ 0x00000020) SD Card Response Register 32 */ + __IOM uint16_t SRCIDCTRL; /*!< (@ 0x00005FF8) Input Data Control Register */ struct { - __IM uint32_t SD_RSP32 : 32; /*!< [31..0] Store the response from the SD card/MMC */ - } SD_RSP32_b; + __IOM uint16_t IFTRG : 2; /*!< [1..0] Input FIFO Data Triggering Number */ + uint16_t : 6; + __IOM uint16_t IEN : 1; /*!< [8..8] Input FIFO Empty Interrupt Enable */ + __IOM uint16_t IED : 1; /*!< [9..9] Input Data Endian */ + uint16_t : 6; + } SRCIDCTRL_b; }; union { - __IM uint32_t SD_RSP3; /*!< (@ 0x00000024) SD Card Response Register 3 */ + __IOM uint16_t SRCODCTRL; /*!< (@ 0x00005FFA) Output Data Control Register */ struct { - __IM uint32_t SD_RSP3 : 16; /*!< [15..0] Store the response from the SD card/MMC */ - uint32_t : 16; - } SD_RSP3_b; + __IOM uint16_t OFTRG : 2; /*!< [1..0] Output FIFO Data Trigger Number */ + uint16_t : 6; + __IOM uint16_t OEN : 1; /*!< [8..8] Output Data FIFO Full Interrupt Enable */ + __IOM uint16_t OED : 1; /*!< [9..9] Output Data Endian */ + __IOM uint16_t OCH : 1; /*!< [10..10] Output Data Channel Exchange */ + uint16_t : 5; + } SRCODCTRL_b; }; union { - __IM uint32_t SD_RSP54; /*!< (@ 0x00000028) SD Card Response Register 54 */ + __IOM uint16_t SRCCTRL; /*!< (@ 0x00005FFC) Control Register */ struct { - __IM uint32_t SD_RSP54 : 32; /*!< [31..0] Store the response from the SD card/MMC */ - } SD_RSP54_b; + __IOM uint16_t OFS : 3; /*!< [2..0] Output Sampling Rate */ + uint16_t : 1; + __IOM uint16_t IFS : 4; /*!< [7..4] Input Sampling Rate */ + __IOM uint16_t CL : 1; /*!< [8..8] Internal Work Memory Clear */ + __IOM uint16_t FL : 1; /*!< [9..9] Internal Work Memory Flush */ + __IOM uint16_t OVEN : 1; /*!< [10..10] Output Data FIFO Overwrite Interrupt Enable */ + __IOM uint16_t UDEN : 1; /*!< [11..11] Output Data FIFO Underflow Interrupt Enable */ + __IOM uint16_t SRCEN : 1; /*!< [12..12] Module Enable */ + __IOM uint16_t CEEN : 1; /*!< [13..13] Conversion End Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t FICRAE : 1; /*!< [15..15] Filter Coefficient Table Access Enable */ + } SRCCTRL_b; }; union { - __IM uint32_t SD_RSP5; /*!< (@ 0x0000002C) SD Card Response Register 5 */ + __IOM uint16_t SRCSTAT; /*!< (@ 0x00005FFE) Status Register */ struct { - __IM uint32_t SD_RSP5 : 16; /*!< [15..0] Store the response from the SD card/MMC */ - uint32_t : 16; - } SD_RSP5_b; + __IOM uint16_t OINT : 1; /*!< [0..0] Output Data FIFO Full Interrupt Request Flag */ + __IOM uint16_t IINT : 1; /*!< [1..1] Input Data FIFO Empty Interrupt Request Flag */ + __IOM uint16_t OVF : 1; /*!< [2..2] Output Data FIFO Overwrite Interrupt Request Flag */ + __IOM uint16_t UDF : 1; /*!< [3..3] Output FIFO Underflow Interrupt Request Flag */ + __IM uint16_t FLF : 1; /*!< [4..4] Flush Processing Status Flag */ + __IOM uint16_t CEF : 1; /*!< [5..5] Conversion End Flag */ + uint16_t : 1; + __IOM uint16_t IFDN : 4; /*!< [10..7] Input FIFO Data CountIndicates the number of data units + * in the input FIFO. */ + __IOM uint16_t OFDN : 5; /*!< [15..11] Output FIFO Data CountIndicates the number of data + * units in the output FIFO. */ + } SRCSTAT_b; }; +} R_SRC_Type; /*!< Size = 24576 (0x6000) */ - union - { - __IM uint32_t SD_RSP76; /*!< (@ 0x00000030) SD Card Response Register 76 */ +/* =========================================================================================================================== */ +/* ================ R_SSI0 ================ */ +/* =========================================================================================================================== */ - struct - { - __IM uint32_t SD_RSP76 : 24; /*!< [23..0] Store the response from the SD card/MMC */ - uint32_t : 8; - } SD_RSP76_b; - }; +/** + * @brief Serial Sound Interface Enhanced (SSIE) (R_SSI0) + */ +typedef struct /*!< (@ 0x4004E000) R_SSI0 Structure */ +{ union { - __IM uint32_t SD_RSP7; /*!< (@ 0x00000034) SD Card Response Register 7 */ + __IOM uint32_t SSICR; /*!< (@ 0x00000000) Control Register */ struct { - __IM uint32_t SD_RSP7 : 8; /*!< [7..0] Store the response from the SD card/MMC */ - uint32_t : 24; - } SD_RSP7_b; + __IOM uint32_t REN : 1; /*!< [0..0] Receive Enable */ + __IOM uint32_t TEN : 1; /*!< [1..1] Transmit Enable */ + uint32_t : 1; + __IOM uint32_t MUEN : 1; /*!< [3..3] Mute EnableNOTE: When this module is muted, the value + * of outputting serial data is rewritten to 0 but data transmission + * is not stopped. Write dummy data to the SSIFTDR not to + * generate a transmit underflow because the number of data + * in the transmit FIFO is decreasing. */ + __IOM uint32_t CKDV : 4; /*!< [7..4] Serial Oversampling Clock Division Ratio */ + __IOM uint32_t DEL : 1; /*!< [8..8] Serial Data Delay */ + __IOM uint32_t PDTA : 1; /*!< [9..9] Parallel Data Alignment */ + __IOM uint32_t SDTA : 1; /*!< [10..10] Serial Data Alignment */ + __IOM uint32_t SPDP : 1; /*!< [11..11] Serial Padding Polarity */ + __IOM uint32_t LRCKP : 1; /*!< [12..12] Serial WS Polarity */ + __IOM uint32_t BCKP : 1; /*!< [13..13] Serial Bit Clock Polarity */ + __IOM uint32_t MST : 1; /*!< [14..14] Serial WS Direction NOTE: Only the following settings + * are allowed: (SCKD, SWSD) = (0, 0) and (1, 1). Other settings + * are prohibited. */ + uint32_t : 1; + __IOM uint32_t SWL : 3; /*!< [18..16] System Word LengthSet the system word length to the + * bit clock frequency/2 fs. */ + __IOM uint32_t DWL : 3; /*!< [21..19] Data Word Length */ + __IOM uint32_t FRM : 2; /*!< [23..22] Channels */ + uint32_t : 1; + __IOM uint32_t IIEN : 1; /*!< [25..25] Idle Mode Interrupt Enable */ + __IOM uint32_t ROIEN : 1; /*!< [26..26] Receive Overflow Interrupt Enable */ + __IOM uint32_t RUIEN : 1; /*!< [27..27] Receive Underflow Interrupt Enable */ + __IOM uint32_t TOIEN : 1; /*!< [28..28] Transmit Overflow Interrupt Enable */ + __IOM uint32_t TUIEN : 1; /*!< [29..29] Transmit Underflow Interrupt Enable */ + __IOM uint32_t CKS : 1; /*!< [30..30] Oversampling Clock Select */ + uint32_t : 1; + } SSICR_b; }; union { - __IOM uint32_t SD_INFO1; /*!< (@ 0x00000038) SD Card Interrupt Flag Register 1 */ + __IOM uint32_t SSISR; /*!< (@ 0x00000004) Status Register */ struct { - __IOM uint32_t RSPEND : 1; /*!< [0..0] Response End Detection */ - uint32_t : 1; - __IOM uint32_t ACEND : 1; /*!< [2..2] Access End */ - __IOM uint32_t SDCDRM : 1; /*!< [3..3] SDnCD Card Removal */ - __IOM uint32_t SDCDIN : 1; /*!< [4..4] SDnCD Card Insertion */ - __IM uint32_t SDCDMON : 1; /*!< [5..5] Indicates the SDnCD state */ - uint32_t : 1; - __IM uint32_t SDWPMON : 1; /*!< [7..7] Indicates the SDnWP state */ - __IOM uint32_t SDD3RM : 1; /*!< [8..8] SDnDAT3 Card Removal */ - __IOM uint32_t SDD3IN : 1; /*!< [9..9] SDnDAT3 Card Insertion */ - __IM uint32_t SDD3MON : 1; /*!< [10..10] Inticates the SDnDAT3 State */ - uint32_t : 21; - } SD_INFO1_b; + __IM uint32_t IDST : 1; /*!< [0..0] Idle Mode Status Flag */ + __IM uint32_t RSWNO : 1; /*!< [1..1] Receive Serial Word Number */ + __IM uint32_t RCHNO : 2; /*!< [3..2] Receive Channel Number.These bits are read as 00b. */ + __IM uint32_t TSWNO : 1; /*!< [4..4] Transmit Serial Word Number */ + __IM uint32_t TCHNO : 2; /*!< [6..5] Transmit Channel Number */ + uint32_t : 18; + __IM uint32_t IIRQ : 1; /*!< [25..25] Idle Mode Interrupt Status Flag */ + __IOM uint32_t ROIRQ : 1; /*!< [26..26] Receive Overflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + __IOM uint32_t RUIRQ : 1; /*!< [27..27] Receive Underflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + __IOM uint32_t TOIRQ : 1; /*!< [28..28] Transmit Overflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + __IOM uint32_t TUIRQ : 1; /*!< [29..29] Transmit Underflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + uint32_t : 2; + } SSISR_b; }; + __IM uint32_t RESERVED[2]; union { - __IOM uint32_t SD_INFO2; /*!< (@ 0x0000003C) SD Card Interrupt Flag Register 2 */ + __IOM uint32_t SSIFCR; /*!< (@ 0x00000010) FIFO Control Register */ struct { - __IOM uint32_t CMDE : 1; /*!< [0..0] Command Error */ - __IOM uint32_t CRCE : 1; /*!< [1..1] CRC Error */ - __IOM uint32_t ENDE : 1; /*!< [2..2] END Error */ - __IOM uint32_t DTO : 1; /*!< [3..3] Data Timeout */ - __IOM uint32_t ILW : 1; /*!< [4..4] SD_BUF Illegal Write Access */ - __IOM uint32_t ILR : 1; /*!< [5..5] SD_BUF Illegal Read Access */ - __IOM uint32_t RSPTO : 1; /*!< [6..6] Response Timeout */ - __IM uint32_t SDD0MON : 1; /*!< [7..7] SDDAT0Indicates the SDDAT0 state of the port specified - * by SD_PORTSEL. */ - __IOM uint32_t BRE : 1; /*!< [8..8] SD_BUF Read Enable */ - __IOM uint32_t BWE : 1; /*!< [9..9] SD_BUF Write Enable */ - uint32_t : 3; - __IM uint32_t SD_CLK_CTRLEN : 1; /*!< [13..13] When a command sequence is started by writing to SD_CMD, - * the CBSY bit is set to 1 and, at the same time, the SCLKDIVEN - * bit is set to 0. The SCLKDIVEN bit is set to 1 after 8 - * cycles of SDCLK have elapsed after setting of the CBSY - * bit to 0 due to completion of the command sequence. */ - __IM uint32_t CBSY : 1; /*!< [14..14] Command Type Register Busy */ - __IOM uint32_t ILA : 1; /*!< [15..15] Illegal Access Error */ - uint32_t : 16; - } SD_INFO2_b; + __IOM uint32_t RFRST : 1; /*!< [0..0] Receive FIFO Data Register Reset */ + __IOM uint32_t TFRST : 1; /*!< [1..1] Transmit FIFO Data Register Reset */ + __IOM uint32_t RIE : 1; /*!< [2..2] Receive Interrupt Enable NOTE: RXI can be cleared by + * clearing either the RDF flag (see the description of the + * RDF bit for details) or RIE bit. */ + __IOM uint32_t TIE : 1; /*!< [3..3] Transmit Interrupt Enable NOTE: TXI can be cleared by + * clearing either the TDE flag (see the description of the + * TDE bit for details) or TIE bit. */ + __IOM uint32_t RTRG : 2; /*!< [5..4] Receive Data Trigger Number */ + __IOM uint32_t TTRG : 2; /*!< [7..6] Transmit Data Trigger Number NOTE: The values in parenthesis + * are the number of empty stages in SSIFTDR at which the + * TDE flag is set. */ + uint32_t : 3; + __IOM uint32_t BSW : 1; /*!< [11..11] Byte Swap Enable */ + uint32_t : 4; + __IOM uint32_t SSIRST : 1; /*!< [16..16] SSI soft ware reset */ + uint32_t : 14; + __IOM uint32_t AUCKE : 1; /*!< [31..31] Oversampling Clock Enable */ + } SSIFCR_b; }; union { - __IOM uint32_t SD_INFO1_MASK; /*!< (@ 0x00000040) SD_INFO1 Interrupt Mask Register */ + __IOM uint32_t SSIFSR; /*!< (@ 0x00000014) FIFO Status Register */ struct { - __IOM uint32_t RSPENDM : 1; /*!< [0..0] Response End Interrupt Request Mask */ - uint32_t : 1; - __IOM uint32_t ACENDM : 1; /*!< [2..2] Access End Interrupt Request Mask */ - __IOM uint32_t SDCDRMM : 1; /*!< [3..3] SDnCD card Removal Interrupt Request Mask */ - __IOM uint32_t SDCDINM : 1; /*!< [4..4] SDnCD card Insertion Interrupt Request Mask */ - uint32_t : 3; - __IOM uint32_t SDD3RMM : 1; /*!< [8..8] SDnDAT3 Card Removal Interrupt Request Mask */ - __IOM uint32_t SDD3INM : 1; /*!< [9..9] SDnDAT3 Card Insertion Interrupt Request Mask */ - uint32_t : 22; - } SD_INFO1_MASK_b; + __IOM uint32_t RDF : 1; /*!< [0..0] Receive Data Full Flag NOTE: Since the SSIFRDR register + * is a 32-byte FIFO register, the maximum number of data + * bytes that can be read from it while the RDF flag is 1 + * is indicated in the RDC[3:0] flags. If reading data from + * the SSIFRDR register is continued after all the data is + * read, undefined values will be read. */ + uint32_t : 7; + __IM uint32_t RDC : 6; /*!< [13..8] Receive Data Indicate Flag(Indicates the number of data + * units stored in SSIFRDR) */ + uint32_t : 2; + __IOM uint32_t TDE : 1; /*!< [16..16] Transmit Data Empty Flag NOTE: Since the SSIFTDR register + * is a 32-byte FIFO register, the maximum number of bytes + * that can be written to it while the TDE flag is 1 is 8 + * - TDC[3:0]. If writing data to the SSIFTDR register is + * continued after all the data is written, writing will be + * invalid and an overflow occurs. */ + uint32_t : 7; + __IM uint32_t TDC : 6; /*!< [29..24] Transmit Data Indicate Flag(Indicates the number of + * data units stored in SSIFTDR) */ + uint32_t : 2; + } SSIFSR_b; }; union { - __IOM uint32_t SD_INFO2_MASK; /*!< (@ 0x00000044) SD_INFO2 Interrupt Mask Register */ - - struct + union { - __IOM uint32_t CMDEM : 1; /*!< [0..0] Command Error Interrupt Request Mask */ - __IOM uint32_t CRCEM : 1; /*!< [1..1] CRC Error Interrupt Request Mask */ - __IOM uint32_t ENDEM : 1; /*!< [2..2] End Bit Error Interrupt Request Mask */ - __IOM uint32_t DTOM : 1; /*!< [3..3] Data Timeout Interrupt Request Mask */ - __IOM uint32_t ILWM : 1; /*!< [4..4] SD_BUF Register Illegal Write Interrupt Request Mask */ - __IOM uint32_t ILRM : 1; /*!< [5..5] SD_BUF Register Illegal Read Interrupt Request Mask */ - __IOM uint32_t RSPTOM : 1; /*!< [6..6] Response Timeout Interrupt Request Mask */ - uint32_t : 1; - __IOM uint32_t BREM : 1; /*!< [8..8] BRE Interrupt Request Mask */ - __IOM uint32_t BWEM : 1; /*!< [9..9] BWE Interrupt Request Mask */ - uint32_t : 5; - __IOM uint32_t ILAM : 1; /*!< [15..15] Illegal Access Error Interrupt Request Mask */ - uint32_t : 16; - } SD_INFO2_MASK_b; + __OM uint32_t SSIFTDR; /*!< (@ 0x00000018) Transmit FIFO Data Register */ + + struct + { + __OM uint32_t SSIFTDR : 32; /*!< [31..0] SSIFTDR is a write-only FIFO register consisting of + * eight stages of 32-bit registers for storing data to be + * serially transmitted. NOTE: that when the SSIFTDR register + * is full of data (32 bytes), the next data cannot be written + * to it. If writing is attempted, it will be ignored and + * an overflow occurs. */ + } SSIFTDR_b; + }; + __OM uint16_t SSIFTDR16; /*!< (@ 0x00000018) Transmit FIFO Data Register */ + __OM uint8_t SSIFTDR8; /*!< (@ 0x00000018) Transmit FIFO Data Register */ }; union { - __IOM uint32_t SD_CLK_CTRL; /*!< (@ 0x00000048) SD Clock Control Register */ - - struct + union { - __IOM uint32_t CLKSEL : 8; /*!< [7..0] SDHI Clock Frequency Select */ - __IOM uint32_t CLKEN : 1; /*!< [8..8] SD/MMC Clock Output Control Enable */ - __IOM uint32_t CLKCTRLEN : 1; /*!< [9..9] SD/MMC Clock Output Automatic Control Enable */ - uint32_t : 22; - } SD_CLK_CTRL_b; + __IM uint32_t SSIFRDR; /*!< (@ 0x0000001C) Receive FIFO Data Register */ + + struct + { + __IM uint32_t SSIFRDR : 32; /*!< [31..0] SSIFRDR is a read-only FIFO register consisting of eight + * stages of 32-bit registers for storing serially received + * data. */ + } SSIFRDR_b; + }; + __IM uint16_t SSIFRDR16; /*!< (@ 0x0000001C) Receive FIFO Data Register */ + __IM uint8_t SSIFRDR8; /*!< (@ 0x0000001C) Receive FIFO Data Register */ }; union { - __IOM uint32_t SD_SIZE; /*!< (@ 0x0000004C) Transfer Data Length Register */ + __IOM uint32_t SSIOFR; /*!< (@ 0x00000020) Audio Format Register */ struct { - __IOM uint32_t LEN : 10; /*!< [9..0] Transfer Data SizeThese bits specify a size between 1 - * and 512 bytes for the transfer of single blocks.In cases - * of multiple block transfer with automatic issuing of CMD12 - * (CMD18 and CMD25), the only specifiable transfer data size - * is 512 bytes. Furthermore, in cases of multiple block transfer - * without automatic issuing of CMD12, as well as 512 bytes, - * 32, 64, 128, and 256 bytes are specifiable. However, in - * the reading of 32, 64, 128, and 256 bytes for the transfer - * of multiple blocks, this is restricted to mult */ + __IOM uint32_t OMOD : 2; /*!< [1..0] Audio Format Select */ + uint32_t : 6; + __IOM uint32_t LRCONT : 1; /*!< [8..8] Whether to Enable LRCK/FS Continuation */ + __IOM uint32_t BCKASTP : 1; /*!< [9..9] Whether to Enable Stopping BCK Output When SSIE is in + * Idle Status */ uint32_t : 22; - } SD_SIZE_b; + } SSIOFR_b; }; union { - __IOM uint32_t SD_OPTION; /*!< (@ 0x00000050) SD Card Access Control Option Register */ + __IOM uint32_t SSISCR; /*!< (@ 0x00000024) Status Control Register */ struct { - __IOM uint32_t CTOP : 4; /*!< [3..0] Card Detect Time Counter */ - __IOM uint32_t TOP : 4; /*!< [7..4] Timeout Counter */ - __IOM uint32_t TOUTMASK : 1; /*!< [8..8] Timeout MASKWhen timeout occurs in case of inactivating - * timeout, software reset should be executed to terminate - * command sequence. */ - uint32_t : 4; - __IOM uint32_t WIDTH8 : 1; /*!< [13..13] Bus Widthsee b15, WIDTH bit */ - uint32_t : 1; - __IOM uint32_t WIDTH : 1; /*!< [15..15] Bus WidthNOTE: The initial value is applied at a reset - * and when the SOFT_RST.SDRST flag is 0. */ - uint32_t : 16; - } SD_OPTION_b; + __IOM uint32_t RDFS : 5; /*!< [4..0] RDF Setting Condition Select */ + uint32_t : 3; + __IOM uint32_t TDES : 5; /*!< [12..8] TDE Setting Condition Select */ + uint32_t : 19; + } SSISCR_b; }; - __IM uint32_t RESERVED1; +} R_SSI0_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSTEM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System Pins (R_SYSTEM) + */ + +typedef struct /*!< (@ 0x4001E000) R_SYSTEM Structure */ +{ + __IM uint32_t RESERVED[3]; union { - __IM uint32_t SD_ERR_STS1; /*!< (@ 0x00000058) SD Error Status Register 1 */ + __IOM uint16_t SBYCR; /*!< (@ 0x0000000C) Standby Control Register */ struct { - __IM uint32_t CMDE0 : 1; /*!< [0..0] Command Error 0NOTE: other than a response to a command - * issued within a command sequence */ - __IM uint32_t CMDE1 : 1; /*!< [1..1] Command Error 1NOTE: In cases where CMD12 is issued by - * setting a command index in SD_CMD, this is Indicated in - * CMDE0. */ - __IM uint32_t RSPLENE0 : 1; /*!< [2..2] Response Length Error 0NOTE: other than a response to - * a command issued within a command sequence */ - __IM uint32_t RSPLENE1 : 1; /*!< [3..3] Response Length Error 1NOTE: In cases where CMD12 is - * issued by setting a command index in SD_CMD, this is indicated - * in RSPLENE0. */ - __IM uint32_t RDLENE : 1; /*!< [4..4] Read Data Length Error */ - __IM uint32_t CRCLENE : 1; /*!< [5..5] CRC Status Token Length Error */ - uint32_t : 2; - __IM uint32_t RSPCRCE0 : 1; /*!< [8..8] Response CRC Error 0NOTE: other than a response to a - * command issued within a command sequence */ - __IM uint32_t RSPCRCE1 : 1; /*!< [9..9] Response CRC Error 1NOTE: In cases where CMD12 is issued - * by setting a command index in SD_CMD, this is indicated - * in RSPCRCE0. */ - __IM uint32_t RDCRCE : 1; /*!< [10..10] Read Data CRC Error */ - __IM uint32_t CRCTKE : 1; /*!< [11..11] CRC Status Token Error */ - __IM uint32_t CRCTK : 3; /*!< [14..12] CRC Status TokenStore the CRC status token value (normal - * value is 010b) */ - uint32_t : 17; - } SD_ERR_STS1_b; + uint16_t : 14; + __IOM uint16_t OPE : 1; /*!< [14..14] Output Port Enable */ + __IOM uint16_t SSBY : 1; /*!< [15..15] Software Standby */ + } SBYCR_b; }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[3]; union { - __IM uint32_t SD_ERR_STS2; /*!< (@ 0x0000005C) SD Error Status Register 2 */ + __IOM uint32_t MSTPCRA; /*!< (@ 0x0000001C) Module Stop Control Register A */ struct { - __IM uint32_t RSPTO0 : 1; /*!< [0..0] Response Timeout 0 */ - __IM uint32_t RSPTO1 : 1; /*!< [1..1] Response Timeout 1 */ - __IM uint32_t BSYTO0 : 1; /*!< [2..2] Busy Timeout 0 */ - __IM uint32_t BSYTO1 : 1; /*!< [3..3] Busy Timeout 1 */ - __IM uint32_t RDTO : 1; /*!< [4..4] Read Data Timeout */ - __IM uint32_t CRCTO : 1; /*!< [5..5] CRC Status Token Timeout */ - __IM uint32_t CRCBSYTO : 1; /*!< [6..6] CRC Status Token Busy Timeout */ - uint32_t : 25; - } SD_ERR_STS2_b; + __IOM uint32_t MSTPA0 : 1; /*!< [0..0] RAM0 Module Stop */ + __IOM uint32_t MSTPA1 : 1; /*!< [1..1] RAM1 Module Stop */ + uint32_t : 3; + __IOM uint32_t MSTPA5 : 1; /*!< [5..5] High-Speed RAM Module Stop */ + __IOM uint32_t MSTPA6 : 1; /*!< [6..6] ECCRAM Module Stop */ + __IOM uint32_t MSTPA7 : 1; /*!< [7..7] Standby RAM Module Stop */ + uint32_t : 14; + __IOM uint32_t MSTPA22 : 1; /*!< [22..22] DMA Controller/Data Transfer Controller Module Stop */ + uint32_t : 9; + } MSTPCRA_b; }; union { - __IOM uint32_t SD_BUF0; /*!< (@ 0x00000060) SD Buffer Register */ + __IOM uint32_t SCKDIVCR; /*!< (@ 0x00000020) System Clock Division Control Register */ struct { - __IOM uint32_t SD_BUF : 32; /*!< [31..0] SD Buffer RegisterWhen writing to the SD card, the write - * data is written to this register. When reading from the - * SD card, the read data is read from this register. This - * register is internally connected to two 512-byte buffers.If - * both buffers are not empty when executing multiple block - * read, SD/MMC clock is stopped to suspend receiving data. - * When one of buffers is empty, SD/MMC clock is supplied - * to resume receiving data. */ - } SD_BUF0_b; + __IOM uint32_t PCKD : 3; /*!< [2..0] Peripheral Module Clock D (PCLKD) Select */ + uint32_t : 1; + __IOM uint32_t PCKC : 3; /*!< [6..4] Peripheral Module Clock C (PCLKC) Select */ + uint32_t : 1; + __IOM uint32_t PCKB : 3; /*!< [10..8] Peripheral Module Clock B (PCLKB) Select */ + uint32_t : 1; + __IOM uint32_t PCKA : 3; /*!< [14..12] Peripheral Module Clock A (PCLKA) Select */ + uint32_t : 1; + __IOM uint32_t BCK : 3; /*!< [18..16] External Bus Clock (BCLK) Select */ + uint32_t : 5; + __IOM uint32_t ICK : 3; /*!< [26..24] System Clock (ICLK) Select */ + uint32_t : 1; + __IOM uint32_t FCK : 3; /*!< [30..28] Flash IF Clock (FCLK) Select */ + uint32_t : 1; + } SCKDIVCR_b; }; - __IM uint32_t RESERVED2; union { - __IOM uint32_t SDIO_MODE; /*!< (@ 0x00000068) SDIO Mode Control Register */ + __IOM uint8_t SCKDIVCR2; /*!< (@ 0x00000024) System Clock Division Control Register 2 */ struct { - __IOM uint32_t INTEN : 1; /*!< [0..0] SDIO Mode */ - uint32_t : 1; - __IOM uint32_t RWREQ : 1; /*!< [2..2] Read Wait Request */ - uint32_t : 5; - __IOM uint32_t IOABT : 1; /*!< [8..8] SDIO AbortNOTE: See manual */ - __IOM uint32_t C52PUB : 1; /*!< [9..9] SDIO None AbortNOTE: See manual */ - uint32_t : 22; - } SDIO_MODE_b; + uint8_t : 4; + __IOM uint8_t UCK : 3; /*!< [6..4] USB Clock (UCLK) Select */ + uint8_t : 1; + } SCKDIVCR2_b; }; + __IM uint8_t RESERVED3; union { - __IOM uint32_t SDIO_INFO1; /*!< (@ 0x0000006C) SDIO Interrupt Flag Register 1 */ + __IOM uint8_t SCKSCR; /*!< (@ 0x00000026) System Clock Source Control Register */ struct { - __IOM uint32_t IOIRQ : 1; /*!< [0..0] SDIO Interrupt Status */ - uint32_t : 13; - __IOM uint32_t EXPUB52 : 1; /*!< [14..14] EXPUB52 Status FlagNOTE: See manual */ - __IOM uint32_t EXWT : 1; /*!< [15..15] EXWT Status FlagNOTE: See manual */ - uint32_t : 16; - } SDIO_INFO1_b; + __IOM uint8_t CKSEL : 3; /*!< [2..0] Clock Source Select */ + uint8_t : 5; + } SCKSCR_b; }; + __IM uint8_t RESERVED4; union { - __IOM uint32_t SDIO_INFO1_MASK; /*!< (@ 0x00000070) SDIO_INFO1 Interrupt Mask Register */ + __IOM uint16_t PLLCCR; /*!< (@ 0x00000028) PLL Clock Control Register */ struct { - __IOM uint32_t IOIRQM : 1; /*!< [0..0] IOIRQ Interrupt Mask Control */ - uint32_t : 13; - __IOM uint32_t EXPUB52M : 1; /*!< [14..14] EXPUB52 Interrupt Request Mask Control */ - __IOM uint32_t EXWTM : 1; /*!< [15..15] EXWT Interrupt Request Mask Control */ - uint32_t : 16; - } SDIO_INFO1_MASK_b; + __IOM uint16_t PLIDIV : 2; /*!< [1..0] PLL Input Frequency Division Ratio Select */ + uint16_t : 2; + __IOM uint16_t PLSRCSEL : 1; /*!< [4..4] PLL Clock Source Select */ + uint16_t : 3; + __IOM uint16_t PLLMUL : 6; /*!< [13..8] PLL Frequency Multiplication Factor Select [PLL Frequency + * Multiplication Factor] = (PLLUMUL+1) / 2 Range: 0x23 - + * 0x3B for example 010011: x10.0 010100: x10.5 010101: x11.0 + * : 011100: x14.5 011101: x15.0 011110: x15.5 : 111010: x29.5 + * 111011: x30.0 */ + uint16_t : 2; + } PLLCCR_b; }; - __IM uint32_t RESERVED3[79]; union { - __IOM uint32_t SD_DMAEN; /*!< (@ 0x000001B0) DMA Mode Enable Register */ + __IOM uint8_t PLLCR; /*!< (@ 0x0000002A) PLL Control Register */ struct { - uint32_t : 1; - __IOM uint32_t DMAEN : 1; /*!< [1..1] SD_BUF Read/Write DMA Transfer */ - uint32_t : 30; - } SD_DMAEN_b; + __IOM uint8_t PLLSTP : 1; /*!< [0..0] PLL Stop Control */ + uint8_t : 7; + } PLLCR_b; }; - __IM uint32_t RESERVED4[3]; union { - __IOM uint32_t SOFT_RST; /*!< (@ 0x000001C0) Software Reset Register */ + __IOM uint8_t PLLCCR2; /*!< (@ 0x0000002B) PLL Clock Control Register2 */ struct { - __IOM uint32_t SDRST : 1; /*!< [0..0] Software Reset of SD I/F Unit */ - uint32_t : 31; - } SOFT_RST_b; + __IOM uint8_t PLLMUL : 5; /*!< [4..0] PLL Frequency Multiplication Factor Select */ + uint8_t : 1; + __IOM uint8_t PLODIV : 2; /*!< [7..6] PLL Output Frequency Division Ratio Select */ + } PLLCCR2_b; }; - __IM uint32_t RESERVED5[2]; + __IM uint32_t RESERVED5; union { - __IOM uint32_t SDIF_MODE; /*!< (@ 0x000001CC) SD Interface Mode Setting Register */ + __IOM uint8_t BCKCR; /*!< (@ 0x00000030) External Bus Clock Control Register */ struct { - uint32_t : 8; - __IOM uint32_t NOCHKCR : 1; /*!< [8..8] CRC Check Mask (for MMC test commands) */ - uint32_t : 23; - } SDIF_MODE_b; + __IOM uint8_t BCLKDIV : 1; /*!< [0..0] BCLK Pin Output Select */ + uint8_t : 7; + } BCKCR_b; }; - __IM uint32_t RESERVED6[4]; union { - __IOM uint32_t EXT_SWAP; /*!< (@ 0x000001E0) Swap Control Register */ + __IOM uint8_t MEMWAIT; /*!< (@ 0x00000031) Memory Wait Cycle Control Register */ struct { - uint32_t : 6; - __IOM uint32_t BWSWP : 1; /*!< [6..6] SD_BUF0 Swap Write */ - __IOM uint32_t BRSWP : 1; /*!< [7..7] SD_BUF0 Swap Read */ - uint32_t : 24; - } EXT_SWAP_b; + __IOM uint8_t MEMWAIT : 1; /*!< [0..0] Memory Wait Cycle SelectNote: Writing 0 to the MEMWAIT + * is prohibited when SCKDIVCR.ICK selects division by 1 and + * SCKSCR.CKSEL[2:0] bits select thesystem clock source that + * is faster than 32 MHz (ICLK > 32 MHz). */ + uint8_t : 7; + } MEMWAIT_b; }; -} R_SDHI0_Type; /*!< Size = 484 (0x1e4) */ - -/* =========================================================================================================================== */ -/* ================ R_SLCDC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Segment LCD Controller/Driver (R_SLCDC) - */ -typedef struct /*!< (@ 0x40082000) R_SLCDC Structure */ -{ union { - __IOM uint8_t LCDM0; /*!< (@ 0x00000000) LCD Mode Register 0 */ + __IOM uint8_t MOSCCR; /*!< (@ 0x00000032) Main Clock Oscillator Control Register */ struct { - __IOM uint8_t LBAS : 2; /*!< [1..0] LCD Display Bias Method Select */ - __IOM uint8_t LDTY : 3; /*!< [4..2] Time Slice of LCD Display Select */ - __IOM uint8_t LWAVE : 1; /*!< [5..5] LCD display waveform selection */ - __IOM uint8_t MDSET : 2; /*!< [7..6] LCD drive voltage generator selection */ - } LCDM0_b; + __IOM uint8_t MOSTP : 1; /*!< [0..0] Main Clock Oscillator Stop */ + uint8_t : 7; + } MOSCCR_b; }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; union { - __IOM uint8_t LCDM1; /*!< (@ 0x00000001) LCD Mode Register 1 */ + __IOM uint8_t HOCOCR; /*!< (@ 0x00000036) High-Speed On-Chip Oscillator Control Register */ struct { - __IOM uint8_t LCDVLM : 1; /*!< [0..0] Voltage Boosting Pin Initial Value Switching Control */ - uint8_t : 2; - __IOM uint8_t LCDSEL : 1; /*!< [3..3] Display data area control */ - __IOM uint8_t BLON : 1; /*!< [4..4] Display data area control */ - __IOM uint8_t VLCON : 1; /*!< [5..5] Voltage boost circuit or capacitor split circuit operation - * enable/disable */ - __IOM uint8_t SCOC : 1; /*!< [6..6] LCD Display Enable/Disable */ - __IOM uint8_t LCDON : 1; /*!< [7..7] LCD Display Enable/Disable */ - } LCDM1_b; + __IOM uint8_t HCSTP : 1; /*!< [0..0] HOCO Stop */ + uint8_t : 7; + } HOCOCR_b; }; + __IM uint8_t RESERVED8; union { - __IOM uint8_t LCDC0; /*!< (@ 0x00000002) LCD Clock Control Register 0 */ + __IOM uint8_t MOCOCR; /*!< (@ 0x00000038) Middle-Speed On-Chip Oscillator Control Register */ struct { - __IOM uint8_t LCDC : 6; /*!< [5..0] LCD clock (LCDCL) */ - uint8_t : 2; - } LCDC0_b; + __IOM uint8_t MCSTP : 1; /*!< [0..0] MOCO Stop */ + uint8_t : 7; + } MOCOCR_b; }; union { - __IOM uint8_t VLCD; /*!< (@ 0x00000003) LCD Boost Level Control Register */ + __IOM uint8_t FLLCR1; /*!< (@ 0x00000039) FLL Control Register 1 */ struct - { - __IOM uint8_t VLCD : 5; /*!< [4..0] Reference Voltage(Contrast Adjustment) Select */ - uint8_t : 3; - } VLCD_b; + { + __IOM uint8_t FLLEN : 1; /*!< [0..0] FLL Enable */ + uint8_t : 7; + } FLLCR1_b; }; - __IM uint8_t RESERVED[252]; union { - __IOM uint8_t SEG[64]; /*!< (@ 0x00000100) LCD Display Data Array */ + __IOM uint16_t FLLCR2; /*!< (@ 0x0000003A) FLL Control Register 2 */ struct { - __IOM uint8_t A : 4; /*!< [3..0] A-Pattern Area */ - __IOM uint8_t B : 4; /*!< [7..4] B-Pattern Area */ - } SEG_b[64]; + __IOM uint16_t FLLCNTL : 11; /*!< [10..0] FLL Multiplication ControlMultiplication ratio of the + * FLL reference clock select */ + uint16_t : 5; + } FLLCR2_b; }; -} R_SLCDC_Type; /*!< Size = 320 (0x140) */ - -/* =========================================================================================================================== */ -/* ================ R_SPI0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Serial Peripheral Interface (R_SPI0) - */ -typedef struct /*!< (@ 0x40072000) R_SPI0 Structure */ -{ union { - __IOM uint8_t SPCR; /*!< (@ 0x00000000) SPI Control Register */ + __IM uint8_t OSCSF; /*!< (@ 0x0000003C) Oscillation Stabilization Flag Register */ struct { - __IOM uint8_t SPMS : 1; /*!< [0..0] SPI Mode Select */ - __IOM uint8_t TXMD : 1; /*!< [1..1] Communications Operating Mode Select */ - __IOM uint8_t MODFEN : 1; /*!< [2..2] Mode Fault Error Detection Enable */ - __IOM uint8_t MSTR : 1; /*!< [3..3] SPI Master/Slave Mode Select */ - __IOM uint8_t SPEIE : 1; /*!< [4..4] SPI Error Interrupt Enable */ - __IOM uint8_t SPTIE : 1; /*!< [5..5] Transmit Buffer Empty Interrupt Enable */ - __IOM uint8_t SPE : 1; /*!< [6..6] SPI Function Enable */ - __IOM uint8_t SPRIE : 1; /*!< [7..7] SPI Receive Buffer Full Interrupt Enable */ - } SPCR_b; + __IM uint8_t HOCOSF : 1; /*!< [0..0] HOCO Clock Oscillation Stabilization FlagNOTE: The HOCOSF + * bit value after a reset is 1 when the OFS1.HOCOEN bit is + * 0. It is 0 when the OFS1.HOCOEN bit is 1. */ + uint8_t : 2; + __IM uint8_t MOSCSF : 1; /*!< [3..3] Main Clock Oscillation Stabilization Flag */ + uint8_t : 1; + __IM uint8_t PLLSF : 1; /*!< [5..5] PLL Clock Oscillation Stabilization Flag */ + __IM uint8_t PLL2SF : 1; /*!< [6..6] PLL2 Clock Oscillation Stabilization Flag */ + uint8_t : 1; + } OSCSF_b; }; + __IM uint8_t RESERVED9; union { - __IOM uint8_t SSLP; /*!< (@ 0x00000001) SPI Slave Select Polarity Register */ + __IOM uint8_t CKOCR; /*!< (@ 0x0000003E) Clock Out Control Register */ struct { - __IOM uint8_t SSL0P : 1; /*!< [0..0] SSL0 Signal Polarity Setting */ - __IOM uint8_t SSL1P : 1; /*!< [1..1] SSL1 Signal Polarity Setting */ - __IOM uint8_t SSL2P : 1; /*!< [2..2] SSL2 Signal Polarity Setting */ - __IOM uint8_t SSL3P : 1; /*!< [3..3] SSL3 Signal Polarity Setting */ - uint8_t : 4; - } SSLP_b; + __IOM uint8_t CKOSEL : 3; /*!< [2..0] Clock out source select */ + uint8_t : 1; + __IOM uint8_t CKODIV : 3; /*!< [6..4] Clock out input frequency Division Select */ + __IOM uint8_t CKOEN : 1; /*!< [7..7] Clock out enable */ + } CKOCR_b; }; union { - __IOM uint8_t SPPCR; /*!< (@ 0x00000002) SPI Pin Control Register */ + __IOM uint8_t TRCKCR; /*!< (@ 0x0000003F) Trace Clock Control Register */ struct { - __IOM uint8_t SPLP : 1; /*!< [0..0] SPI Loopback */ - __IOM uint8_t SPLP2 : 1; /*!< [1..1] SPI Loopback 2 */ - uint8_t : 2; - __IOM uint8_t MOIFV : 1; /*!< [4..4] MOSI Idle Fixed Value */ - __IOM uint8_t MOIFE : 1; /*!< [5..5] MOSI Idle Value Fixing Enable */ - uint8_t : 2; - } SPPCR_b; + __IOM uint8_t TRCK : 4; /*!< [3..0] Trace Clock operating frequency select */ + uint8_t : 3; + __IOM uint8_t TRCKEN : 1; /*!< [7..7] Trace Clock operating Enable */ + } TRCKCR_b; }; union { - __IOM uint8_t SPSR; /*!< (@ 0x00000003) SPI Status Register */ + __IOM uint8_t OSTDCR; /*!< (@ 0x00000040) Oscillation Stop Detection Control Register */ struct { - __IOM uint8_t OVRF : 1; /*!< [0..0] Overrun Error Flag */ - __IM uint8_t IDLNF : 1; /*!< [1..1] SPI Idle Flag */ - __IOM uint8_t MODF : 1; /*!< [2..2] Mode Fault Error Flag */ - __IOM uint8_t PERF : 1; /*!< [3..3] Parity Error Flag */ - __IOM uint8_t UDRF : 1; /*!< [4..4] Underrun Error Flag(When MODF is 0, This bit is invalid.) */ - __IOM uint8_t SPTEF : 1; /*!< [5..5] SPI Transmit Buffer Empty Flag */ - uint8_t : 1; - __IOM uint8_t SPRF : 1; /*!< [7..7] SPI Receive Buffer Full Flag */ - } SPSR_b; + __IOM uint8_t OSTDIE : 1; /*!< [0..0] Oscillation Stop Detection Interrupt Enable */ + uint8_t : 6; + __IOM uint8_t OSTDE : 1; /*!< [7..7] Oscillation Stop Detection Function Enable */ + } OSTDCR_b; }; union { - __IOM uint32_t SPDR; /*!< (@ 0x00000004) SPI Data Register */ - __IOM uint16_t SPDR_HA; /*!< (@ 0x00000004) SPI Data Register ( halfword access ) */ - __IOM uint8_t SPDR_BY; /*!< (@ 0x00000004) SPI Data Register ( byte access ) */ + __IOM uint8_t OSTDSR; /*!< (@ 0x00000041) Oscillation Stop Detection Status Register */ + + struct + { + __IOM uint8_t OSTDF : 1; /*!< [0..0] Oscillation Stop Detection Flag */ + uint8_t : 7; + } OSTDSR_b; }; + __IM uint16_t RESERVED10; + __IM uint32_t RESERVED11; union { - __IOM uint8_t SPSCR; /*!< (@ 0x00000008) SPI Sequence Control Register */ + __IOM uint16_t PLL2CCR; /*!< (@ 0x00000048) PLL2 Clock Control Register */ struct { - __IOM uint8_t SPSLN : 3; /*!< [2..0] RSPI Sequence Length SpecificationThe order in which - * the SPCMD0 to SPCMD07 registers are to be referenced is - * changed in accordance with the sequence length that is - * set in these bits. The relationship among the setting of - * these bits, sequence length, and SPCMD0 to SPCMD7 registers - * referenced by the RSPI is shown above. However, the RSPI - * in slave mode always references SPCMD0. */ - uint8_t : 5; - } SPSCR_b; + __IOM uint16_t PL2IDIV : 2; /*!< [1..0] PLL2 Input Frequency Division Ratio Select */ + uint16_t : 2; + __IOM uint16_t PL2SRCSEL : 1; /*!< [4..4] PLL2 Clock Source Select */ + uint16_t : 3; + __IOM uint16_t PLL2MUL : 6; /*!< [13..8] PLL2 Frequency Multiplication Factor Select */ + uint16_t : 2; + } PLL2CCR_b; }; - __IM uint8_t RESERVED; union { - __IOM uint8_t SPBR; /*!< (@ 0x0000000A) SPI Bit Rate Register */ + __IOM uint8_t PLL2CR; /*!< (@ 0x0000004A) PLL2 Control Register */ struct { - __IOM uint8_t SPR : 8; /*!< [7..0] SPBR sets the bit rate in master mode. */ - } SPBR_b; + __IOM uint8_t PLL2STP : 1; /*!< [0..0] PLL2 Stop Control */ + uint8_t : 7; + } PLL2CR_b; }; + __IM uint8_t RESERVED12; + __IM uint32_t RESERVED13; union { - __IOM uint8_t SPDCR; /*!< (@ 0x0000000B) SPI Data Control Register */ + __IOM uint8_t SLCDSCKCR; /*!< (@ 0x00000050) Segment LCD Source Clock Control Register */ struct { - __IOM uint8_t SPFC : 2; /*!< [1..0] Number of Frames Specification */ - uint8_t : 2; - __IOM uint8_t SPRDTD : 1; /*!< [4..4] SPI Receive/Transmit Data Selection */ - __IOM uint8_t SPLW : 1; /*!< [5..5] SPI Word Access/Halfword Access Specification */ - __IOM uint8_t SPBYT : 1; /*!< [6..6] SPI Byte Access Specification */ - uint8_t : 1; - } SPDCR_b; + __IOM uint8_t LCDSCKSEL : 3; /*!< [2..0] LCD Source Clock (LCDSRCCLK) Select */ + uint8_t : 4; + __IOM uint8_t LCDSCKEN : 1; /*!< [7..7] LCD Source Clock Out Enable */ + } SLCDSCKCR_b; }; + __IM uint8_t RESERVED14; union { - __IOM uint8_t SPCKD; /*!< (@ 0x0000000C) SPI Clock Delay Register */ + __IOM uint8_t EBCKOCR; /*!< (@ 0x00000052) External Bus Clock Output Control Register */ struct { - __IOM uint8_t SCKDL : 3; /*!< [2..0] RSPCK Delay Setting */ - uint8_t : 5; - } SPCKD_b; + __IOM uint8_t EBCKOEN : 1; /*!< [0..0] BCLK Pin Output Control */ + uint8_t : 7; + } EBCKOCR_b; }; union { - __IOM uint8_t SSLND; /*!< (@ 0x0000000D) SPI Slave Select Negation Delay Register */ + __IOM uint8_t SDCKOCR; /*!< (@ 0x00000053) SDRAM Clock Output Control Register */ struct { - __IOM uint8_t SLNDL : 3; /*!< [2..0] SSL Negation Delay Setting */ - uint8_t : 5; - } SSLND_b; + __IOM uint8_t SDCKOEN : 1; /*!< [0..0] SDCLK Pin Output Control */ + uint8_t : 7; + } SDCKOCR_b; }; + __IM uint32_t RESERVED15[3]; + __IM uint8_t RESERVED16; union { - __IOM uint8_t SPND; /*!< (@ 0x0000000E) SPI Next-Access Delay Register */ + __IOM uint8_t MOCOUTCR; /*!< (@ 0x00000061) MOCO User Trimming Control Register */ struct { - __IOM uint8_t SPNDL : 3; /*!< [2..0] SPI Next-Access Delay Setting */ - uint8_t : 5; - } SPND_b; + __IOM uint8_t MOCOUTRM : 8; /*!< [7..0] MOCO User Trimming 1000_0000 : -128 1000_0001 : -127 + * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center + * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : + +126 0111_1111 : +127These bits are added to original MOCO + * trimming bits */ + } MOCOUTCR_b; }; union { - __IOM uint8_t SPCR2; /*!< (@ 0x0000000F) SPI Control Register 2 */ + __IOM uint8_t HOCOUTCR; /*!< (@ 0x00000062) HOCO User Trimming Control Register */ struct { - __IOM uint8_t SPPE : 1; /*!< [0..0] Parity Enable */ - __IOM uint8_t SPOE : 1; /*!< [1..1] Parity Mode */ - __IOM uint8_t SPIIE : 1; /*!< [2..2] SPI Idle Interrupt Enable */ - __IOM uint8_t PTE : 1; /*!< [3..3] Parity Self-Testing */ - __IOM uint8_t SCKASE : 1; /*!< [4..4] RSPCK Auto-Stop Function Enable */ - uint8_t : 3; - } SPCR2_b; + __IOM uint8_t HOCOUTRM : 8; /*!< [7..0] HOCO User Trimming 1000_0000 : -128 1000_0001 : -127 + * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center + * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : + +126 0111_1111 : +127These bits are added to original HOCO + * trimming bits */ + } HOCOUTCR_b; }; + __IM uint8_t RESERVED17; + __IM uint32_t RESERVED18[2]; union { - __IOM uint16_t SPCMD[8]; /*!< (@ 0x00000010) SPI Command Register [0..7] */ + __IOM uint8_t USBCKDIVCR; /*!< (@ 0x0000006C) USB Clock Division Control Register */ struct { - __IOM uint16_t CPHA : 1; /*!< [0..0] RSPCK Phase Setting */ - __IOM uint16_t CPOL : 1; /*!< [1..1] RSPCK Polarity Setting */ - __IOM uint16_t BRDV : 2; /*!< [3..2] Bit Rate Division Setting */ - __IOM uint16_t SSLA : 3; /*!< [6..4] SSL Signal Assertion Setting */ - __IOM uint16_t SSLKP : 1; /*!< [7..7] SSL Signal Level Keeping */ - __IOM uint16_t SPB : 4; /*!< [11..8] SPI Data Length Setting */ - __IOM uint16_t LSBF : 1; /*!< [12..12] SPI LSB First */ - __IOM uint16_t SPNDEN : 1; /*!< [13..13] SPI Next-Access Delay Enable */ - __IOM uint16_t SLNDEN : 1; /*!< [14..14] SSL Negation Delay Setting Enable */ - __IOM uint16_t SCKDEN : 1; /*!< [15..15] RSPCK Delay Setting Enable */ - } SPCMD_b[8]; + __IOM uint8_t USBCKDIV : 3; /*!< [2..0] USB Clock (USBCLK) Division Select */ + uint8_t : 5; + } USBCKDIVCR_b; }; union { - __IOM uint8_t SPDCR2; /*!< (@ 0x00000020) SPI Data Control Register 2 */ + __IOM uint8_t OCTACKDIVCR; /*!< (@ 0x0000006D) Octal-SPI Clock Division Control Register */ struct { - __IOM uint8_t BYSW : 1; /*!< [0..0] Byte Swap Operating Mode Select */ - uint8_t : 7; - } SPDCR2_b; + __IOM uint8_t OCTACKDIV : 3; /*!< [2..0] Octal-SPI Clock (OCTACLK) Division Select */ + uint8_t : 5; + } OCTACKDIVCR_b; }; - __IM uint8_t RESERVED1; - __IM uint16_t RESERVED2; -} R_SPI0_Type; /*!< Size = 36 (0x24) */ - -/* =========================================================================================================================== */ -/* ================ R_SRAM ================ */ -/* =========================================================================================================================== */ - -/** - * @brief SRAM (R_SRAM) - */ + __IM uint16_t RESERVED19; + __IM uint32_t RESERVED20; -typedef struct /*!< (@ 0x40002000) R_SRAM Structure */ -{ union { - __IOM uint8_t PARIOAD; /*!< (@ 0x00000000) SRAM Parity Error Operation After Detection Register */ + __IOM uint8_t USBCKCR; /*!< (@ 0x00000074) USB Clock Control Register */ struct { - __IOM uint8_t OAD : 1; /*!< [0..0] Operation after Detection */ - uint8_t : 7; - } PARIOAD_b; + __IOM uint8_t USBCKSEL : 3; /*!< [2..0] USB Clock (USBCLK) Source Select */ + uint8_t : 3; + __IOM uint8_t USBCKSREQ : 1; /*!< [6..6] USB Clock (USBCLK) Switching Request */ + __IM uint8_t USBCKSRDY : 1; /*!< [7..7] USB Clock (USBCLK) Switching Ready state flag */ + } USBCKCR_b; }; - __IM uint8_t RESERVED[3]; union { - __IOM uint8_t SRAMPRCR; /*!< (@ 0x00000004) SRAM Protection Register */ + __IOM uint8_t OCTACKCR; /*!< (@ 0x00000075) Octal-SPI Clock Control Register */ struct { - __IOM uint8_t SRAMPRCR : 1; /*!< [0..0] Register Write Control */ - __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ - } SRAMPRCR_b; + __IOM uint8_t OCTACKSEL : 3; /*!< [2..0] Octal-SPI Clock (OCTACLK) Source Select */ + uint8_t : 3; + __IOM uint8_t OCTACKSREQ : 1; /*!< [6..6] Octal-SPI Clock (OCTACLK) Switching Request */ + __IM uint8_t OCTACKSRDY : 1; /*!< [7..7] Octal-SPI Clock (OCTACLK) Switching Ready state flag */ + } OCTACKCR_b; }; - __IM uint8_t RESERVED1[3]; + __IM uint16_t RESERVED21; + __IM uint32_t RESERVED22[4]; union { - __IOM uint8_t SRAMWTSC; /*!< (@ 0x00000008) RAM Wait State Control Register */ + __IOM uint32_t SNZREQCR1; /*!< (@ 0x00000088) Snooze Request Control Register 1 */ struct { - __IOM uint8_t ECCRAMWRWTEN : 1; /*!< [0..0] ECCRAM Write Wait Enable */ - __IOM uint8_t ECCRAMRDWTEN : 1; /*!< [1..1] ECCRAM Read wait enable */ - __IOM uint8_t SRAM0WTEN : 1; /*!< [2..2] SRAM0 Wait Enable */ - __IOM uint8_t SRAM1WTEN : 1; /*!< [3..3] SRAM1 Wait Enable */ - __IOM uint8_t SRAMHSWTEN : 1; /*!< [4..4] SRAMHS Wait Enable */ - uint8_t : 3; - } SRAMWTSC_b; + __IOM uint32_t SNZREQEN0 : 1; /*!< [0..0] Enable AGT3 underflow snooze request */ + __IOM uint32_t SNZREQEN1 : 1; /*!< [1..1] Enable AGT3 underflow snooze request */ + __IOM uint32_t SNZREQEN2 : 1; /*!< [2..2] Enable AGT3 underflow snooze request */ + uint32_t : 29; + } SNZREQCR1_b; }; - __IM uint8_t RESERVED2[183]; + __IM uint32_t RESERVED23; + __IM uint16_t RESERVED24; union { - __IOM uint8_t ECCMODE; /*!< (@ 0x000000C0) ECC Operating Mode Control Register */ + __IOM uint8_t SNZCR; /*!< (@ 0x00000092) Snooze Control Register */ struct { - __IOM uint8_t ECCMOD : 2; /*!< [1..0] ECC Operating Mode Select */ - uint8_t : 6; - } ECCMODE_b; + __IOM uint8_t RXDREQEN : 1; /*!< [0..0] RXD0 Snooze Request Enable NOTE: Do not set to 1 other + * than in asynchronous mode. */ + __IOM uint8_t SNZDTCEN : 1; /*!< [1..1] DTC Enable in Snooze Mode */ + uint8_t : 5; + __IOM uint8_t SNZE : 1; /*!< [7..7] Snooze Mode Enable */ + } SNZCR_b; }; + __IM uint8_t RESERVED25; union { - __IOM uint8_t ECC2STS; /*!< (@ 0x000000C1) ECC 2-Bit Error Status Register */ + __IOM uint8_t SNZEDCR; /*!< (@ 0x00000094) Snooze End Control Register */ struct { - __IOM uint8_t ECC2ERR : 1; /*!< [0..0] ECC 2-Bit Error Status */ - uint8_t : 7; - } ECC2STS_b; + __IOM uint8_t AGT1UNFED : 1; /*!< [0..0] AGT1 underflow Snooze End Enable */ + __IOM uint8_t DTCZRED : 1; /*!< [1..1] Last DTC transmission completion Snooze End Enable */ + __IOM uint8_t DTCNZRED : 1; /*!< [2..2] Not Last DTC transmission completion Snooze End Enable */ + __IOM uint8_t AD0MATED : 1; /*!< [3..3] AD compare match 0 Snooze End Enable */ + __IOM uint8_t AD0UMTED : 1; /*!< [4..4] AD compare mismatch 0 Snooze End Enable */ + __IOM uint8_t AD1MATED : 1; /*!< [5..5] AD compare match 1 Snooze End Enable */ + __IOM uint8_t AD1UMTED : 1; /*!< [6..6] AD compare mismatch 1 Snooze End Enable */ + __IOM uint8_t SCI0UMTED : 1; /*!< [7..7] SCI0 address unmatch Snooze End EnableNote: Do not set + * to 1 other than in asynchronous mode. */ + } SNZEDCR_b; }; union { - __IOM uint8_t ECC1STSEN; /*!< (@ 0x000000C2) ECC 1-Bit Error Information Update Enable Register */ + __IOM uint8_t SNZEDCR1; /*!< (@ 0x00000095) Snooze End Control Register 1 */ struct { - __IOM uint8_t E1STSEN : 1; /*!< [0..0] ECC 1-Bit Error Information Update Enable */ - uint8_t : 7; - } ECC1STSEN_b; + __IOM uint8_t AGT3UNFED : 1; /*!< [0..0] AGT3 underflow Snooze End Enable */ + uint8_t : 7; + } SNZEDCR1_b; }; + __IM uint16_t RESERVED26; union { - __IOM uint8_t ECC1STS; /*!< (@ 0x000000C3) ECC 1-Bit Error Status Register */ + __IOM uint32_t SNZREQCR; /*!< (@ 0x00000098) Snooze Request Control Register */ struct { - __IOM uint8_t ECC1ERR : 1; /*!< [0..0] ECC 1-Bit Error Status */ - uint8_t : 7; - } ECC1STS_b; + __IOM uint32_t SNZREQEN0 : 1; /*!< [0..0] Snooze Request Enable 0Enable IRQ 0 pin snooze request */ + __IOM uint32_t SNZREQEN1 : 1; /*!< [1..1] Snooze Request Enable 0Enable IRQ 1 pin snooze request */ + __IOM uint32_t SNZREQEN2 : 1; /*!< [2..2] Snooze Request Enable 0Enable IRQ 2 pin snooze request */ + __IOM uint32_t SNZREQEN3 : 1; /*!< [3..3] Snooze Request Enable 0Enable IRQ 3 pin snooze request */ + __IOM uint32_t SNZREQEN4 : 1; /*!< [4..4] Snooze Request Enable 0Enable IRQ 4 pin snooze request */ + __IOM uint32_t SNZREQEN5 : 1; /*!< [5..5] Snooze Request Enable 0Enable IRQ 5 pin snooze request */ + __IOM uint32_t SNZREQEN6 : 1; /*!< [6..6] Snooze Request Enable 0Enable IRQ 6 pin snooze request */ + __IOM uint32_t SNZREQEN7 : 1; /*!< [7..7] Snooze Request Enable 0Enable IRQ 7 pin snooze request */ + __IOM uint32_t SNZREQEN8 : 1; /*!< [8..8] Snooze Request Enable 0Enable IRQ 8 pin snooze request */ + __IOM uint32_t SNZREQEN9 : 1; /*!< [9..9] Snooze Request Enable 0Enable IRQ 9 pin snooze request */ + __IOM uint32_t SNZREQEN10 : 1; /*!< [10..10] Snooze Request Enable 0Enable IRQ 10 pin snooze request */ + __IOM uint32_t SNZREQEN11 : 1; /*!< [11..11] Snooze Request Enable 0Enable IRQ 11 pin snooze request */ + __IOM uint32_t SNZREQEN12 : 1; /*!< [12..12] Snooze Request Enable 0Enable IRQ 12 pin snooze request */ + __IOM uint32_t SNZREQEN13 : 1; /*!< [13..13] Snooze Request Enable 0Enable IRQ 13 pin snooze request */ + __IOM uint32_t SNZREQEN14 : 1; /*!< [14..14] Snooze Request Enable 0Enable IRQ 14 pin snooze request */ + __IOM uint32_t SNZREQEN15 : 1; /*!< [15..15] Snooze Request Enable 0Enable IRQ 15 pin snooze request */ + uint32_t : 1; + __IOM uint32_t SNZREQEN17 : 1; /*!< [17..17] Snooze Request Enable 17Enable KR snooze request */ + uint32_t : 4; + __IOM uint32_t SNZREQEN22 : 1; /*!< [22..22] Snooze Request Enable 22Enable Comparator-HS0 snooze + * request */ + __IOM uint32_t SNZREQEN23 : 1; /*!< [23..23] Snooze Request Enable 23Enable Comparator-LP0 snooze + * request */ + __IOM uint32_t SNZREQEN24 : 1; /*!< [24..24] Snooze Request Enable 24Enable RTC alarm snooze request */ + __IOM uint32_t SNZREQEN25 : 1; /*!< [25..25] Snooze Request Enable 25Enable RTC period snooze request */ + uint32_t : 2; + __IOM uint32_t SNZREQEN28 : 1; /*!< [28..28] Snooze Request Enable 28Enable AGT1 underflow snooze + * request */ + __IOM uint32_t SNZREQEN29 : 1; /*!< [29..29] Snooze Request Enable 29Enable AGT1 compare match A + * snooze request */ + __IOM uint32_t SNZREQEN30 : 1; /*!< [30..30] Snooze Request Enable 30Enable AGT1 compare match B + * snooze request */ + uint32_t : 1; + } SNZREQCR_b; }; + __IM uint16_t RESERVED27; union { - __IOM uint8_t ECCPRCR; /*!< (@ 0x000000C4) ECC Protection Register */ + __IOM uint8_t FLSTOP; /*!< (@ 0x0000009E) Flash Operation Control Register */ struct { - __IOM uint8_t ECCPRCR : 1; /*!< [0..0] Register Write Control */ - __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ - } ECCPRCR_b; + __IOM uint8_t FLSTOP : 1; /*!< [0..0] Selecting ON/OFF of the Flash Memory Operation */ + uint8_t : 3; + __IOM uint8_t FLSTPF : 1; /*!< [4..4] Flash Memory Operation Status Flag */ + uint8_t : 3; + } FLSTOP_b; }; - __IM uint8_t RESERVED3[11]; union { - __IOM uint8_t ECCPRCR2; /*!< (@ 0x000000D0) ECC Protection Register 2 */ + __IOM uint8_t PSMCR; /*!< (@ 0x0000009F) Power Save Memory Control Register */ struct { - __IOM uint8_t ECCPRCR2 : 1; /*!< [0..0] Register Write Control */ - __OM uint8_t KW2 : 7; /*!< [7..1] Write Key Code */ - } ECCPRCR2_b; + __IOM uint8_t PSMC : 2; /*!< [1..0] Power save memory control. */ + uint8_t : 6; + } PSMCR_b; }; - __IM uint8_t RESERVED4[3]; union { - __IOM uint8_t ECCETST; /*!< (@ 0x000000D4) ECC Test Control Register */ + __IOM uint8_t OPCCR; /*!< (@ 0x000000A0) Operating Power Control Register */ struct { - __IOM uint8_t TSTBYP : 1; /*!< [0..0] ECC Bypass Select */ - uint8_t : 7; - } ECCETST_b; + __IOM uint8_t OPCM : 2; /*!< [1..0] Operating Power Control Mode Select */ + uint8_t : 2; + __IM uint8_t OPCMTSF : 1; /*!< [4..4] Operating Power Control Mode Transition Status Flag */ + uint8_t : 3; + } OPCCR_b; }; - __IM uint8_t RESERVED5[3]; + __IM uint8_t RESERVED28; union { - __IOM uint8_t ECCOAD; /*!< (@ 0x000000D8) SRAM ECC Error Operation After Detection Register */ + __IOM uint8_t MOSCWTCR; /*!< (@ 0x000000A2) Main Clock Oscillator Wait Control Register */ struct { - __IOM uint8_t OAD : 1; /*!< [0..0] Operation after Detection */ - uint8_t : 7; - } ECCOAD_b; + __IOM uint8_t MSTS : 4; /*!< [3..0] Main clock oscillator wait time setting */ + uint8_t : 4; + } MOSCWTCR_b; }; -} R_SRAM_Type; /*!< Size = 217 (0xd9) */ - -/* =========================================================================================================================== */ -/* ================ R_SRC ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Sampling Rate Converter (R_SRC) - */ + __IM uint8_t RESERVED29[2]; -typedef struct /*!< (@ 0x40048000) R_SRC Structure */ -{ union { - __IOM uint32_t SRCFCTR[5552]; /*!< (@ 0x00000000) Filter Coefficient Table [0..5551] */ + __IOM uint8_t HOCOWTCR; /*!< (@ 0x000000A5) High-speed on-chip oscillator wait control register */ struct { - __IOM uint32_t SRCFCOE : 22; /*!< [21..0] Stores a filter coefficient value. */ - uint32_t : 10; - } SRCFCTR_b[5552]; + __IOM uint8_t HSTS : 3; /*!< [2..0] HOCO wait time settingWaiting time (sec) = setting of + * the HSTS[2:0] bits/fLOCO(Trimmed) + 3/fLOC(Untrimmed) */ + uint8_t : 5; + } HOCOWTCR_b; }; - __IM uint32_t RESERVED[588]; + __IM uint16_t RESERVED30[2]; union { - __OM uint32_t SRCID; /*!< (@ 0x00005FF0) Input Data Register */ + __IOM uint8_t SOPCCR; /*!< (@ 0x000000AA) Sub Operating Power Control Register */ struct { - __OM uint32_t SRCID : 32; /*!< [31..0] SRCID is a 32-bit writ-only register that is used to - * input the data before sampling rate conversion. All the - * bits are read as 0. */ - } SRCID_b; + __IOM uint8_t SOPCM : 1; /*!< [0..0] Sub Operating Power Control Mode Select */ + uint8_t : 3; + __IM uint8_t SOPCMTSF : 1; /*!< [4..4] Sub Operating Power Control Mode Transition Status Flag */ + uint8_t : 3; + } SOPCCR_b; }; + __IM uint8_t RESERVED31; + __IM uint32_t RESERVED32[5]; union { - __IM uint32_t SRCOD; /*!< (@ 0x00005FF4) Output Data Register */ + __IOM uint16_t RSTSR1; /*!< (@ 0x000000C0) Reset Status Register 1 */ struct { - __IM uint32_t SRCOD : 32; /*!< [31..0] SRCOD is a 32-bit read-only register used to output - * the data after sampling rate conversion. The data in the - * 16-stage output data FIFO is read through SRCOD. When the - * number of data in the output data FIFO is zero after the - * start of conversion, the value previously read is read - * again. */ - } SRCOD_b; + __IOM uint16_t IWDTRF : 1; /*!< [0..0] Independent Watchdog Timer Reset Detect FlagNOTE: Writable + * only to clear the flag. Confirm the value is 1 and then + * write 0. */ + __IOM uint16_t WDTRF : 1; /*!< [1..1] Watchdog Timer Reset Detect FlagNOTE: Writable only to + * clear the flag. Confirm the value is 1 and then write 0. */ + __IOM uint16_t SWRF : 1; /*!< [2..2] Software Reset Detect FlagNOTE: Writable only to clear + * the flag. Confirm the value is 1 and then write 0. */ + uint16_t : 5; + __IOM uint16_t RPERF : 1; /*!< [8..8] RAM Parity Error Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint16_t REERF : 1; /*!< [9..9] RAM ECC Error Reset Detect FlagNOTE: Writable only to + * clear the flag. Confirm the value is 1 and then write 0. */ + __IOM uint16_t BUSSRF : 1; /*!< [10..10] Bus Slave MPU Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint16_t BUSMRF : 1; /*!< [11..11] Bus Master MPU Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint16_t SPERF : 1; /*!< [12..12] SP Error Reset Detect FlagNOTE: Writable only to clear + * the flag. Confirm the value is 1 and then write 0. */ + __IOM uint16_t TZERF : 1; /*!< [13..13] Trust Zone Error Reset Detect Flag */ + uint16_t : 1; + __IOM uint16_t CPERF : 1; /*!< [15..15] Cache Parity Error Reset Detect Flag */ + } RSTSR1_b; }; + __IM uint16_t RESERVED33; + __IM uint32_t RESERVED34[3]; union { - __IOM uint16_t SRCIDCTRL; /*!< (@ 0x00005FF8) Input Data Control Register */ + __IOM uint8_t USBCKCR_ALT; /*!< (@ 0x000000D0) USB Clock Control Register */ struct { - __IOM uint16_t IFTRG : 2; /*!< [1..0] Input FIFO Data Triggering Number */ - uint16_t : 6; - __IOM uint16_t IEN : 1; /*!< [8..8] Input FIFO Empty Interrupt Enable */ - __IOM uint16_t IED : 1; /*!< [9..9] Input Data Endian */ - uint16_t : 6; - } SRCIDCTRL_b; + __IOM uint8_t USBCLKSEL : 1; /*!< [0..0] The USBCLKSEL bit selects the source of the USB clock + * (UCLK). */ + uint8_t : 7; + } USBCKCR_ALT_b; }; union { - __IOM uint16_t SRCODCTRL; /*!< (@ 0x00005FFA) Output Data Control Register */ + __IOM uint8_t SDADCCKCR; /*!< (@ 0x000000D1) 24-bit Sigma-Delta A/D Converter Clock Control + * Register */ struct { - __IOM uint16_t OFTRG : 2; /*!< [1..0] Output FIFO Data Trigger Number */ - uint16_t : 6; - __IOM uint16_t OEN : 1; /*!< [8..8] Output Data FIFO Full Interrupt Enable */ - __IOM uint16_t OED : 1; /*!< [9..9] Output Data Endian */ - __IOM uint16_t OCH : 1; /*!< [10..10] Output Data Channel Exchange */ - uint16_t : 5; - } SRCODCTRL_b; + __IOM uint8_t SDADCCKSEL : 1; /*!< [0..0] 24-bit Sigma-Delta A/D Converter Clock Select */ + uint8_t : 6; + __IOM uint8_t SDADCCKEN : 1; /*!< [7..7] 24-bit Sigma-Delta A/D Converter Clock Enable */ + } SDADCCKCR_b; }; + __IM uint16_t RESERVED35; + __IM uint32_t RESERVED36[3]; union { - __IOM uint16_t SRCCTRL; /*!< (@ 0x00005FFC) Control Register */ + __IOM uint8_t LVD1CR1; /*!< (@ 0x000000E0) Voltage Monitor 1 Circuit Control Register 1 */ struct { - __IOM uint16_t OFS : 3; /*!< [2..0] Output Sampling Rate */ - uint16_t : 1; - __IOM uint16_t IFS : 4; /*!< [7..4] Input Sampling Rate */ - __IOM uint16_t CL : 1; /*!< [8..8] Internal Work Memory Clear */ - __IOM uint16_t FL : 1; /*!< [9..9] Internal Work Memory Flush */ - __IOM uint16_t OVEN : 1; /*!< [10..10] Output Data FIFO Overwrite Interrupt Enable */ - __IOM uint16_t UDEN : 1; /*!< [11..11] Output Data FIFO Underflow Interrupt Enable */ - __IOM uint16_t SRCEN : 1; /*!< [12..12] Module Enable */ - __IOM uint16_t CEEN : 1; /*!< [13..13] Conversion End Interrupt Enable */ - uint16_t : 1; - __IOM uint16_t FICRAE : 1; /*!< [15..15] Filter Coefficient Table Access Enable */ - } SRCCTRL_b; + __IOM uint8_t IDTSEL : 2; /*!< [1..0] Voltage Monitor Interrupt Generation Condition Select */ + __IOM uint8_t IRQSEL : 1; /*!< [2..2] Voltage Monitor Interrupt Type Select */ + uint8_t : 5; + } LVD1CR1_b; }; union { - __IOM uint16_t SRCSTAT; /*!< (@ 0x00005FFE) Status Register */ + __IOM uint8_t LVD1SR; /*!< (@ 0x000000E1) Voltage Monitor 1 Circuit Status Register */ struct { - __IOM uint16_t OINT : 1; /*!< [0..0] Output Data FIFO Full Interrupt Request Flag */ - __IOM uint16_t IINT : 1; /*!< [1..1] Input Data FIFO Empty Interrupt Request Flag */ - __IOM uint16_t OVF : 1; /*!< [2..2] Output Data FIFO Overwrite Interrupt Request Flag */ - __IOM uint16_t UDF : 1; /*!< [3..3] Output FIFO Underflow Interrupt Request Flag */ - __IM uint16_t FLF : 1; /*!< [4..4] Flush Processing Status Flag */ - __IOM uint16_t CEF : 1; /*!< [5..5] Conversion End Flag */ - uint16_t : 1; - __IOM uint16_t IFDN : 4; /*!< [10..7] Input FIFO Data CountIndicates the number of data units - * in the input FIFO. */ - __IOM uint16_t OFDN : 5; /*!< [15..11] Output FIFO Data CountIndicates the number of data - * units in the output FIFO. */ - } SRCSTAT_b; + __IOM uint8_t DET : 1; /*!< [0..0] Voltage Monitor Voltage Change Detection Flag NOTE: Only + * 0 can be written to this bit. After writing 0 to this bit, + * it takes 2 system clock cycles for the bit to be read as + * 0. */ + __IM uint8_t MON : 1; /*!< [1..1] Voltage Monitor 1 Signal Monitor Flag */ + uint8_t : 6; + } LVD1SR_b; }; -} R_SRC_Type; /*!< Size = 24576 (0x6000) */ -/* =========================================================================================================================== */ -/* ================ R_SSI0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Serial Sound Interface Enhanced (SSIE) (R_SSI0) - */ - -typedef struct /*!< (@ 0x4004E000) R_SSI0 Structure */ -{ union { - __IOM uint32_t SSICR; /*!< (@ 0x00000000) Control Register */ + __IOM uint8_t LVD2CR1; /*!< (@ 0x000000E2) Voltage Monitor 2 Circuit Control Register 1 */ struct { - __IOM uint32_t REN : 1; /*!< [0..0] Receive Enable */ - __IOM uint32_t TEN : 1; /*!< [1..1] Transmit Enable */ - uint32_t : 1; - __IOM uint32_t MUEN : 1; /*!< [3..3] Mute EnableNOTE: When this module is muted, the value - * of outputting serial data is rewritten to 0 but data transmission - * is not stopped. Write dummy data to the SSIFTDR not to - * generate a transmit underflow because the number of data - * in the transmit FIFO is decreasing. */ - __IOM uint32_t CKDV : 4; /*!< [7..4] Serial Oversampling Clock Division Ratio */ - __IOM uint32_t DEL : 1; /*!< [8..8] Serial Data Delay */ - __IOM uint32_t PDTA : 1; /*!< [9..9] Parallel Data Alignment */ - __IOM uint32_t SDTA : 1; /*!< [10..10] Serial Data Alignment */ - __IOM uint32_t SPDP : 1; /*!< [11..11] Serial Padding Polarity */ - __IOM uint32_t LRCKP : 1; /*!< [12..12] Serial WS Polarity */ - __IOM uint32_t BCKP : 1; /*!< [13..13] Serial Bit Clock Polarity */ - __IOM uint32_t MST : 1; /*!< [14..14] Serial WS Direction NOTE: Only the following settings - * are allowed: (SCKD, SWSD) = (0, 0) and (1, 1). Other settings - * are prohibited. */ - uint32_t : 1; - __IOM uint32_t SWL : 3; /*!< [18..16] System Word LengthSet the system word length to the - * bit clock frequency/2 fs. */ - __IOM uint32_t DWL : 3; /*!< [21..19] Data Word Length */ - __IOM uint32_t FRM : 2; /*!< [23..22] Channels */ - uint32_t : 1; - __IOM uint32_t IIEN : 1; /*!< [25..25] Idle Mode Interrupt Enable */ - __IOM uint32_t ROIEN : 1; /*!< [26..26] Receive Overflow Interrupt Enable */ - __IOM uint32_t RUIEN : 1; /*!< [27..27] Receive Underflow Interrupt Enable */ - __IOM uint32_t TOIEN : 1; /*!< [28..28] Transmit Overflow Interrupt Enable */ - __IOM uint32_t TUIEN : 1; /*!< [29..29] Transmit Underflow Interrupt Enable */ - __IOM uint32_t CKS : 1; /*!< [30..30] Oversampling Clock Select */ - uint32_t : 1; - } SSICR_b; + __IOM uint8_t IDTSEL : 2; /*!< [1..0] Voltage Monitor Interrupt Generation Condition Select */ + __IOM uint8_t IRQSEL : 1; /*!< [2..2] Voltage Monitor Interrupt Type Select */ + uint8_t : 5; + } LVD2CR1_b; }; union { - __IOM uint32_t SSISR; /*!< (@ 0x00000004) Status Register */ + __IOM uint8_t LVD2SR; /*!< (@ 0x000000E3) Voltage Monitor 2 Circuit Status Register */ struct { - __IM uint32_t IDST : 1; /*!< [0..0] Idle Mode Status Flag */ - __IM uint32_t RSWNO : 1; /*!< [1..1] Receive Serial Word Number */ - __IM uint32_t RCHNO : 2; /*!< [3..2] Receive Channel Number.These bits are read as 00b. */ - __IM uint32_t TSWNO : 1; /*!< [4..4] Transmit Serial Word Number */ - __IM uint32_t TCHNO : 2; /*!< [6..5] Transmit Channel Number */ - uint32_t : 18; - __IM uint32_t IIRQ : 1; /*!< [25..25] Idle Mode Interrupt Status Flag */ - __IOM uint32_t ROIRQ : 1; /*!< [26..26] Receive Overflow Error Interrupt Status Flag NOTE: - * Writable only to clear the flag. Confirm the value is 1 - * and then write 0. */ - __IOM uint32_t RUIRQ : 1; /*!< [27..27] Receive Underflow Error Interrupt Status Flag NOTE: - * Writable only to clear the flag. Confirm the value is 1 - * and then write 0. */ - __IOM uint32_t TOIRQ : 1; /*!< [28..28] Transmit Overflow Error Interrupt Status Flag NOTE: - * Writable only to clear the flag. Confirm the value is 1 - * and then write 0. */ - __IOM uint32_t TUIRQ : 1; /*!< [29..29] Transmit Underflow Error Interrupt Status Flag NOTE: - * Writable only to clear the flag. Confirm the value is 1 - * and then write 0. */ - uint32_t : 2; - } SSISR_b; + __IOM uint8_t DET : 1; /*!< [0..0] Voltage Monitor Voltage Change Detection Flag NOTE: Only + * 0 can be written to this bit. After writing 0 to this bit, + * it takes 2 system clock cycles for the bit to be read as + * 0. */ + __IM uint8_t MON : 1; /*!< [1..1] Voltage Monitor 1 Signal Monitor Flag */ + uint8_t : 6; + } LVD2SR_b; }; - __IM uint32_t RESERVED[2]; + __IM uint32_t RESERVED37[183]; union { - __IOM uint32_t SSIFCR; /*!< (@ 0x00000010) FIFO Control Register */ + __IOM uint32_t CGFSAR; /*!< (@ 0x000003C0) Clock Generation Function Security Attribute + * Register */ struct { - __IOM uint32_t RFRST : 1; /*!< [0..0] Receive FIFO Data Register Reset */ - __IOM uint32_t TFRST : 1; /*!< [1..1] Transmit FIFO Data Register Reset */ - __IOM uint32_t RIE : 1; /*!< [2..2] Receive Interrupt Enable NOTE: RXI can be cleared by - * clearing either the RDF flag (see the description of the - * RDF bit for details) or RIE bit. */ - __IOM uint32_t TIE : 1; /*!< [3..3] Transmit Interrupt Enable NOTE: TXI can be cleared by - * clearing either the TDE flag (see the description of the - * TDE bit for details) or TIE bit. */ - __IOM uint32_t RTRG : 2; /*!< [5..4] Receive Data Trigger Number */ - __IOM uint32_t TTRG : 2; /*!< [7..6] Transmit Data Trigger Number NOTE: The values in parenthesis - * are the number of empty stages in SSIFTDR at which the - * TDE flag is set. */ - uint32_t : 8; - __IOM uint32_t SSIRST : 1; /*!< [16..16] SSI soft ware reset */ - uint32_t : 14; - __IOM uint32_t AUCKE : 1; /*!< [31..31] Oversampling Clock Enable */ - } SSIFCR_b; + __IOM uint32_t NONSEC00 : 1; /*!< [0..0] Non Secure Attribute bit 00 */ + uint32_t : 1; + __IOM uint32_t NONSEC02 : 1; /*!< [2..2] Non Secure Attribute bit 02 */ + __IOM uint32_t NONSEC03 : 1; /*!< [3..3] Non Secure Attribute bit 03 */ + __IOM uint32_t NONSEC04 : 1; /*!< [4..4] Non Secure Attribute bit 04 */ + __IOM uint32_t NONSEC05 : 1; /*!< [5..5] Non Secure Attribute bit 05 */ + __IOM uint32_t NONSEC06 : 1; /*!< [6..6] Non Secure Attribute bit 06 */ + __IOM uint32_t NONSEC07 : 1; /*!< [7..7] Non Secure Attribute bit 07 */ + __IOM uint32_t NONSEC08 : 1; /*!< [8..8] Non Secure Attribute bit 08 */ + __IOM uint32_t NONSEC09 : 1; /*!< [9..9] Non Secure Attribute bit 09 */ + uint32_t : 1; + __IOM uint32_t NONSEC11 : 1; /*!< [11..11] Non Secure Attribute bit 11 */ + __IOM uint32_t NONSEC12 : 1; /*!< [12..12] Non Secure Attribute bit 12 */ + uint32_t : 3; + __IOM uint32_t NONSEC16 : 1; /*!< [16..16] Non Secure Attribute bit 16 */ + __IOM uint32_t NONSEC17 : 1; /*!< [17..17] Non Secure Attribute bit 17 */ + uint32_t : 14; + } CGFSAR_b; }; + __IM uint32_t RESERVED38; union { - __IOM uint32_t SSIFSR; /*!< (@ 0x00000014) FIFO Status Register */ + __IOM uint32_t LPMSAR; /*!< (@ 0x000003C8) Low Power Mode Security Attribution Register */ struct { - __IOM uint32_t RDF : 1; /*!< [0..0] Receive Data Full Flag NOTE: Since the SSIFRDR register - * is a 32-byte FIFO register, the maximum number of data - * bytes that can be read from it while the RDF flag is 1 - * is indicated in the RDC[3:0] flags. If reading data from - * the SSIFRDR register is continued after all the data is - * read, undefined values will be read. */ - uint32_t : 7; - __IM uint32_t RDC : 6; /*!< [13..8] Receive Data Indicate Flag(Indicates the number of data - * units stored in SSIFRDR) */ - uint32_t : 2; - __IOM uint32_t TDE : 1; /*!< [16..16] Transmit Data Empty Flag NOTE: Since the SSIFTDR register - * is a 32-byte FIFO register, the maximum number of bytes - * that can be written to it while the TDE flag is 1 is 8 - * - TDC[3:0]. If writing data to the SSIFTDR register is - * continued after all the data is written, writing will be - * invalid and an overflow occurs. */ - uint32_t : 7; - __IM uint32_t TDC : 6; /*!< [29..24] Transmit Data Indicate Flag(Indicates the number of - * data units stored in SSIFTDR) */ - uint32_t : 2; - } SSIFSR_b; + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + uint32_t : 1; + __IOM uint32_t NONSEC2 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + uint32_t : 1; + __IOM uint32_t NONSEC4 : 1; /*!< [4..4] Non Secure Attribute bit 4 */ + uint32_t : 3; + __IOM uint32_t NONSEC8 : 1; /*!< [8..8] Non Secure Attribute bit 8 */ + __IOM uint32_t NONSEC9 : 1; /*!< [9..9] Non Secure Attribute bit 9 */ + uint32_t : 22; + } LPMSAR_b; }; union { union { - __OM uint32_t SSIFTDR; /*!< (@ 0x00000018) Transmit FIFO Data Register */ + __IOM uint32_t LVDSAR; /*!< (@ 0x000003CC) Low Voltage Detection Security Attribution Register */ struct { - __OM uint32_t SSIFTDR : 32; /*!< [31..0] SSIFTDR is a write-only FIFO register consisting of - * eight stages of 32-bit registers for storing data to be - * serially transmitted. NOTE: that when the SSIFTDR register - * is full of data (32 bytes), the next data cannot be written - * to it. If writing is attempted, it will be ignored and - * an overflow occurs. */ - } SSIFTDR_b; + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC1 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + uint32_t : 30; + } LVDSAR_b; }; - __OM uint16_t SSIFTDR16; /*!< (@ 0x00000018) Transmit FIFO Data Register */ - __OM uint8_t SSIFTDR8; /*!< (@ 0x00000018) Transmit FIFO Data Register */ - }; - union - { union { - __IM uint32_t SSIFRDR; /*!< (@ 0x0000001C) Receive FIFO Data Register */ + __IOM uint32_t RSTSAR; /*!< (@ 0x000003CC) Reset Security Attribution Register */ struct { - __IM uint32_t SSIFRDR : 32; /*!< [31..0] SSIFRDR is a read-only FIFO register consisting of eight - * stages of 32-bit registers for storing serially received - * data. */ - } SSIFRDR_b; + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC1 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + __IOM uint32_t NONSEC2 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + uint32_t : 29; + } RSTSAR_b; }; - __IM uint16_t SSIFRDR16; /*!< (@ 0x0000001C) Receive FIFO Data Register */ - __IM uint8_t SSIFRDR8; /*!< (@ 0x0000001C) Receive FIFO Data Register */ }; union { - __IOM uint32_t SSIOFR; /*!< (@ 0x00000020) Audio Format Register */ + __IOM uint32_t BBFSAR; /*!< (@ 0x000003D0) Battery Backup Function Security Attribute Register */ struct { - __IOM uint32_t OMOD : 2; /*!< [1..0] Audio Format Select */ - uint32_t : 6; - __IOM uint32_t LRCONT : 1; /*!< [8..8] Whether to Enable LRCK/FS Continuation */ - __IOM uint32_t BCKASTP : 1; /*!< [9..9] Whether to Enable Stopping BCK Output When SSIE is in - * Idle Status */ - uint32_t : 22; - } SSIOFR_b; + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC1 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + __IOM uint32_t NONSEC2 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + uint32_t : 13; + __IOM uint32_t NONSEC16 : 1; /*!< [16..16] Non Secure Attribute bit 16 */ + __IOM uint32_t NONSEC17 : 1; /*!< [17..17] Non Secure Attribute bit 17 */ + __IOM uint32_t NONSEC18 : 1; /*!< [18..18] Non Secure Attribute bit 18 */ + __IOM uint32_t NONSEC19 : 1; /*!< [19..19] Non Secure Attribute bit 19 */ + __IOM uint32_t NONSEC20 : 1; /*!< [20..20] Non Secure Attribute bit 20 */ + __IOM uint32_t NONSEC21 : 1; /*!< [21..21] Non Secure Attribute bit 21 */ + __IOM uint32_t NONSEC22 : 1; /*!< [22..22] Non Secure Attribute bit 22 */ + __IOM uint32_t NONSEC23 : 1; /*!< [23..23] Non Secure Attribute bit 23 */ + uint32_t : 8; + } BBFSAR_b; }; + __IM uint32_t RESERVED39[3]; union { - __IOM uint32_t SSISCR; /*!< (@ 0x00000024) Status Control Register */ + __IOM uint32_t DPFSAR; /*!< (@ 0x000003E0) Deep Standby Interrupt Factor Security Attribution + * Register */ struct { - __IOM uint32_t RDFS : 5; /*!< [4..0] RDF Setting Condition Select */ - uint32_t : 3; - __IOM uint32_t TDES : 5; /*!< [12..8] TDE Setting Condition Select */ - uint32_t : 19; - } SSISCR_b; + __IOM uint32_t DPFSA0 : 1; /*!< [0..0] Deep Standby Interrupt Factor Security Attribute bit + * 0 */ + __IOM uint32_t DPFSA1 : 1; /*!< [1..1] Deep Standby Interrupt Factor Security Attribute bit + * 1 */ + __IOM uint32_t DPFSA2 : 1; /*!< [2..2] Deep Standby Interrupt Factor Security Attribute bit + * 2 */ + __IOM uint32_t DPFSA3 : 1; /*!< [3..3] Deep Standby Interrupt Factor Security Attribute bit + * 3 */ + __IOM uint32_t DPFSA4 : 1; /*!< [4..4] Deep Standby Interrupt Factor Security Attribute bit + * 4 */ + __IOM uint32_t DPFSA5 : 1; /*!< [5..5] Deep Standby Interrupt Factor Security Attribute bit + * 5 */ + __IOM uint32_t DPFSA6 : 1; /*!< [6..6] Deep Standby Interrupt Factor Security Attribute bit + * 6 */ + __IOM uint32_t DPFSA7 : 1; /*!< [7..7] Deep Standby Interrupt Factor Security Attribute bit + * 7 */ + __IOM uint32_t DPFSA8 : 1; /*!< [8..8] Deep Standby Interrupt Factor Security Attribute bit + * 8 */ + __IOM uint32_t DPFSA9 : 1; /*!< [9..9] Deep Standby Interrupt Factor Security Attribute bit + * 9 */ + __IOM uint32_t DPFSA10 : 1; /*!< [10..10] Deep Standby Interrupt Factor Security Attribute bit + * 10 */ + __IOM uint32_t DPFSA11 : 1; /*!< [11..11] Deep Standby Interrupt Factor Security Attribute bit + * 11 */ + __IOM uint32_t DPFSA12 : 1; /*!< [12..12] Deep Standby Interrupt Factor Security Attribute bit + * 12 */ + __IOM uint32_t DPFSA13 : 1; /*!< [13..13] Deep Standby Interrupt Factor Security Attribute bit + * 13 */ + __IOM uint32_t DPFSA14 : 1; /*!< [14..14] Deep Standby Interrupt Factor Security Attribute bit + * 14 */ + __IOM uint32_t DPFSA15 : 1; /*!< [15..15] Deep Standby Interrupt Factor Security Attribute bit + * 15 */ + __IOM uint32_t DPFSA16 : 1; /*!< [16..16] Deep Standby Interrupt Factor Security Attribute bit + * 16 */ + __IOM uint32_t DPFSA17 : 1; /*!< [17..17] Deep Standby Interrupt Factor Security Attribute bit + * 17 */ + __IOM uint32_t DPFSA18 : 1; /*!< [18..18] Deep Standby Interrupt Factor Security Attribute bit + * 18 */ + __IOM uint32_t DPFSA19 : 1; /*!< [19..19] Deep Standby Interrupt Factor Security Attribute bit + * 19 */ + __IOM uint32_t DPFSA20 : 1; /*!< [20..20] Deep Standby Interrupt Factor Security Attribute bit + * 20 */ + uint32_t : 3; + __IOM uint32_t DPFSA24 : 1; /*!< [24..24] Deep Standby Interrupt Factor Security Attribute bit + * 24 */ + uint32_t : 1; + __IOM uint32_t DPFSA26 : 1; /*!< [26..26] Deep Standby Interrupt Factor Security Attribute bit + * 26 */ + __IOM uint32_t DPFSA27 : 1; /*!< [27..27] Deep Standby Interrupt Factor Security Attribute bit + * 27 */ + uint32_t : 4; + } DPFSAR_b; }; -} R_SSI0_Type; /*!< Size = 40 (0x28) */ + __IM uint32_t RESERVED40[6]; + __IM uint16_t RESERVED41; -/* =========================================================================================================================== */ -/* ================ R_SYSTEM ================ */ -/* =========================================================================================================================== */ + union + { + __IOM uint16_t PRCR; /*!< (@ 0x000003FE) Protect Register */ -/** - * @brief System Pins (R_SYSTEM) - */ + struct + { + __IOM uint16_t PRC0 : 1; /*!< [0..0] Enables writing to the registers related to the clock + * generation circuit. */ + __IOM uint16_t PRC1 : 1; /*!< [1..1] Enables writing to the registers related to the operating + * modes, the low power consumption modes and the battery + * backup function. */ + uint16_t : 1; + __IOM uint16_t PRC3 : 1; /*!< [3..3] Enables writing to the registers related to the LVD. */ + __IOM uint16_t PRC4 : 1; /*!< [4..4] PRC4 */ + uint16_t : 3; + __OM uint16_t PRKEY : 8; /*!< [15..8] PRKEY Key Code */ + } PRCR_b; + }; -typedef struct /*!< (@ 0x4001E000) R_SYSTEM Structure */ -{ - __IM uint32_t RESERVED[3]; + union + { + __IOM uint8_t DPSBYCR; /*!< (@ 0x00000400) Deep Standby Control Register */ + + struct + { + __IOM uint8_t DEEPCUT : 2; /*!< [1..0] Power-Supply Control */ + uint8_t : 4; + __IOM uint8_t IOKEEP : 1; /*!< [6..6] I/O Port Retention */ + __IOM uint8_t DPSBY : 1; /*!< [7..7] Deep Software Standby */ + } DPSBYCR_b; + }; union { - __IOM uint16_t SBYCR; /*!< (@ 0x0000000C) Standby Control Register */ + __IOM uint8_t DPSWCR; /*!< (@ 0x00000401) Deep Standby Wait Control Register */ struct { - uint16_t : 14; - __IOM uint16_t OPE : 1; /*!< [14..14] Output Port Enable */ - __IOM uint16_t SSBY : 1; /*!< [15..15] Software Standby */ - } SBYCR_b; + __IOM uint8_t WTSTS : 6; /*!< [5..0] Deep Software Wait Standby Time Setting Bit */ + uint8_t : 2; + } DPSWCR_b; }; - __IM uint16_t RESERVED1; - __IM uint32_t RESERVED2[3]; union { - __IOM uint32_t MSTPCRA; /*!< (@ 0x0000001C) Module Stop Control Register A */ + __IOM uint8_t DPSIER0; /*!< (@ 0x00000402) Deep Standby Interrupt Enable Register 0 */ struct { - __IOM uint32_t MSTPA0 : 1; /*!< [0..0] RAM0 Module Stop */ - __IOM uint32_t MSTPA1 : 1; /*!< [1..1] RAM1 Module Stop */ - uint32_t : 3; - __IOM uint32_t MSTPA5 : 1; /*!< [5..5] High-Speed RAM Module Stop */ - __IOM uint32_t MSTPA6 : 1; /*!< [6..6] ECCRAM Module Stop */ - __IOM uint32_t MSTPA7 : 1; /*!< [7..7] Standby RAM Module Stop */ - uint32_t : 14; - __IOM uint32_t MSTPA22 : 1; /*!< [22..22] DMA Controller/Data Transfer Controller Module Stop */ - uint32_t : 9; - } MSTPCRA_b; + __IOM uint8_t DIRQ0E : 1; /*!< [0..0] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ1E : 1; /*!< [1..1] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ2E : 1; /*!< [2..2] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ3E : 1; /*!< [3..3] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ4E : 1; /*!< [4..4] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ5E : 1; /*!< [5..5] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ6E : 1; /*!< [6..6] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ7E : 1; /*!< [7..7] IRQ-DS Pin Enable */ + } DPSIER0_b; + }; + + union + { + __IOM uint8_t DPSIER1; /*!< (@ 0x00000403) Deep Standby Interrupt Enable Register 1 */ + + struct + { + __IOM uint8_t DIRQ8E : 1; /*!< [0..0] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ9E : 1; /*!< [1..1] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ10E : 1; /*!< [2..2] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ11E : 1; /*!< [3..3] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ12E : 1; /*!< [4..4] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ13E : 1; /*!< [5..5] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ14E : 1; /*!< [6..6] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ15E : 1; /*!< [7..7] IRQ-DS Pin Enable */ + } DPSIER1_b; + }; + + union + { + __IOM uint8_t DPSIER2; /*!< (@ 0x00000404) Deep Standby Interrupt Enable Register 2 */ + + struct + { + __IOM uint8_t DLVD1IE : 1; /*!< [0..0] LVD1 Deep Standby Cancel Signal Enable */ + __IOM uint8_t DLVD2IE : 1; /*!< [1..1] LVD2 Deep Standby Cancel Signal Enable */ + __IOM uint8_t DTRTCIIE : 1; /*!< [2..2] RTC Interval interrupt Deep Standby Cancel Signal Enable */ + __IOM uint8_t DRTCAIE : 1; /*!< [3..3] RTC Alarm interrupt Deep Standby Cancel Signal Enable */ + __IOM uint8_t DNMIE : 1; /*!< [4..4] NMI Pin Enable */ + uint8_t : 3; + } DPSIER2_b; + }; + + union + { + __IOM uint8_t DPSIER3; /*!< (@ 0x00000405) Deep Standby Interrupt Enable Register 3 */ + + struct + { + __IOM uint8_t DUSBFSIE : 1; /*!< [0..0] USBFS Suspend/Resume Deep Standby Cancel Signal Enable */ + __IOM uint8_t DUSBHSIE : 1; /*!< [1..1] USBHS Suspend/Resume Deep Standby Cancel Signal Enable */ + __IOM uint8_t DAGT1IE : 1; /*!< [2..2] AGT1 Underflow Deep Standby Cancel Signal Enable */ + __IOM uint8_t DAGT3IE : 1; /*!< [3..3] AGT3 Underflow Deep Standby Cancel Signal Enable */ + uint8_t : 4; + } DPSIER3_b; + }; + + union + { + __IOM uint8_t DPSIFR0; /*!< (@ 0x00000406) Deep Standby Interrupt Flag Register 0 */ + + struct + { + __IOM uint8_t DIRQ0F : 1; /*!< [0..0] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ1F : 1; /*!< [1..1] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ2F : 1; /*!< [2..2] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ3F : 1; /*!< [3..3] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ4F : 1; /*!< [4..4] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ5F : 1; /*!< [5..5] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ6F : 1; /*!< [6..6] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ7F : 1; /*!< [7..7] IRQ-DS Pin Deep Standby Cancel Flag */ + } DPSIFR0_b; + }; + + union + { + __IOM uint8_t DPSIFR1; /*!< (@ 0x00000407) Deep Standby Interrupt Flag Register 1 */ + + struct + { + __IOM uint8_t DIRQ8F : 1; /*!< [0..0] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ9F : 1; /*!< [1..1] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ10F : 1; /*!< [2..2] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ11F : 1; /*!< [3..3] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ12F : 1; /*!< [4..4] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ13F : 1; /*!< [5..5] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ14F : 1; /*!< [6..6] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ15F : 1; /*!< [7..7] IRQ-DS Pin Deep Standby Cancel Flag */ + } DPSIFR1_b; }; union { - __IOM uint32_t SCKDIVCR; /*!< (@ 0x00000020) System Clock Division Control Register */ + __IOM uint8_t DPSIFR2; /*!< (@ 0x00000408) Deep Standby Interrupt Flag Register 2 */ struct { - __IOM uint32_t PCKD : 3; /*!< [2..0] Peripheral Module Clock D (PCLKD) Select */ - uint32_t : 1; - __IOM uint32_t PCKC : 3; /*!< [6..4] Peripheral Module Clock C (PCLKC) Select */ - uint32_t : 1; - __IOM uint32_t PCKB : 3; /*!< [10..8] Peripheral Module Clock B (PCLKB) Select */ - uint32_t : 1; - __IOM uint32_t PCKA : 3; /*!< [14..12] Peripheral Module Clock A (PCLKA) Select */ - uint32_t : 1; - __IOM uint32_t BCK : 3; /*!< [18..16] External Bus Clock (BCLK) Select */ - uint32_t : 5; - __IOM uint32_t ICK : 3; /*!< [26..24] System Clock (ICLK) Select */ - uint32_t : 1; - __IOM uint32_t FCK : 3; /*!< [30..28] Flash IF Clock (FCLK) Select */ - uint32_t : 1; - } SCKDIVCR_b; + __IOM uint8_t DLVD1IF : 1; /*!< [0..0] LVD1 Deep Standby Cancel Flag */ + __IOM uint8_t DLVD2IF : 1; /*!< [1..1] LVD2 Deep Standby Cancel Flag */ + __IOM uint8_t DTRTCIIF : 1; /*!< [2..2] RTC Interval interrupt Deep Standby Cancel Flag */ + __IOM uint8_t DRTCAIF : 1; /*!< [3..3] RTC Alarm interrupt Deep Standby Cancel Flag */ + __IOM uint8_t DNMIF : 1; /*!< [4..4] NMI Pin Deep Standby Cancel Flag */ + uint8_t : 3; + } DPSIFR2_b; }; union { - __IOM uint8_t SCKDIVCR2; /*!< (@ 0x00000024) System Clock Division Control Register 2 */ + __IOM uint8_t DPSIFR3; /*!< (@ 0x00000409) Deep Standby Interrupt Flag Register 3 */ struct { - uint8_t : 4; - __IOM uint8_t UCK : 3; /*!< [6..4] USB Clock (UCLK) Select */ - uint8_t : 1; - } SCKDIVCR2_b; + __IOM uint8_t DUSBFSIF : 1; /*!< [0..0] USBFS Suspend/Resume Deep Standby Cancel Flag */ + __IOM uint8_t DUSBHSIF : 1; /*!< [1..1] USBHS Suspend/Resume Deep Standby Cancel Flag */ + __IOM uint8_t DAGT1IF : 1; /*!< [2..2] AGT1 Underflow Deep Standby Cancel Flag */ + __IOM uint8_t DAGT3IF : 1; /*!< [3..3] AGT3 Underflow Deep Standby Cancel Flag */ + uint8_t : 4; + } DPSIFR3_b; }; - __IM uint8_t RESERVED3; union { - __IOM uint8_t SCKSCR; /*!< (@ 0x00000026) System Clock Source Control Register */ + __IOM uint8_t DPSIEGR0; /*!< (@ 0x0000040A) Deep Standby Interrupt Edge Register 0 */ struct { - __IOM uint8_t CKSEL : 3; /*!< [2..0] Clock Source Select */ - uint8_t : 5; - } SCKSCR_b; + __IOM uint8_t DIRQ0EG : 1; /*!< [0..0] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ1EG : 1; /*!< [1..1] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ2EG : 1; /*!< [2..2] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ3EG : 1; /*!< [3..3] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ4EG : 1; /*!< [4..4] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ5EG : 1; /*!< [5..5] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ6EG : 1; /*!< [6..6] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ7EG : 1; /*!< [7..7] IRQ-DS Pin Edge Select */ + } DPSIEGR0_b; }; - __IM uint8_t RESERVED4; union { - __IOM uint16_t PLLCCR; /*!< (@ 0x00000028) PLL Clock Control Register */ + __IOM uint8_t DPSIEGR1; /*!< (@ 0x0000040B) Deep Standby Interrupt Edge Register 1 */ struct { - __IOM uint16_t PLIDIV : 2; /*!< [1..0] PLL Input Frequency Division Ratio Select */ - uint16_t : 2; - __IOM uint16_t PLSRCSEL : 1; /*!< [4..4] PLL Clock Source Select */ - uint16_t : 3; - __IOM uint16_t PLLMUL : 6; /*!< [13..8] PLL Frequency Multiplication Factor Select [PLL Frequency - * Multiplication Factor] = (PLLUMUL+1) / 2 Range: 0x23 - - * 0x3B for example 010011: x10.0 010100: x10.5 010101: x11.0 - * : 011100: x14.5 011101: x15.0 011110: x15.5 : 111010: x29.5 - * 111011: x30.0 */ - uint16_t : 2; - } PLLCCR_b; + __IOM uint8_t DIRQ0EG : 1; /*!< [0..0] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ1EG : 1; /*!< [1..1] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ2EG : 1; /*!< [2..2] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ3EG : 1; /*!< [3..3] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ4EG : 1; /*!< [4..4] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ5EG : 1; /*!< [5..5] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ6EG : 1; /*!< [6..6] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ7EG : 1; /*!< [7..7] IRQ-DS Pin Edge Select */ + } DPSIEGR1_b; }; union { - __IOM uint8_t PLLCR; /*!< (@ 0x0000002A) PLL Control Register */ + __IOM uint8_t DPSIEGR2; /*!< (@ 0x0000040C) Deep Standby Interrupt Edge Register 2 */ struct { - __IOM uint8_t PLLSTP : 1; /*!< [0..0] PLL Stop Control */ - uint8_t : 7; - } PLLCR_b; + __IOM uint8_t DLVD1IEG : 1; /*!< [0..0] LVD1 Edge Select */ + __IOM uint8_t DLVD2IEG : 1; /*!< [1..1] LVD2 Edge Select */ + uint8_t : 2; + __IOM uint8_t DNMIEG : 1; /*!< [4..4] NMI Pin Edge Select */ + uint8_t : 3; + } DPSIEGR2_b; }; + __IM uint8_t RESERVED42; union { - __IOM uint8_t PLLCCR2; /*!< (@ 0x0000002B) PLL Clock Control Register2 */ + __IOM uint8_t SYOCDCR; /*!< (@ 0x0000040E) System Control OCD Control Register */ struct { - __IOM uint8_t PLLMUL : 5; /*!< [4..0] PLL Frequency Multiplication Factor Select */ - uint8_t : 1; - __IOM uint8_t PLODIV : 2; /*!< [7..6] PLL Output Frequency Division Ratio Select */ - } PLLCCR2_b; + __IOM uint8_t DOCDF : 1; /*!< [0..0] Deep Standby OCD flag */ + uint8_t : 6; + __IOM uint8_t DBGEN : 1; /*!< [7..7] Debugger Enable bit */ + } SYOCDCR_b; }; - __IM uint32_t RESERVED5; union { - __IOM uint8_t BCKCR; /*!< (@ 0x00000030) External Bus Clock Control Register */ + __IOM uint8_t STCONR; /*!< (@ 0x0000040F) Standby Condition Register */ struct { - __IOM uint8_t BCLKDIV : 1; /*!< [0..0] BCLK Pin Output Select */ - uint8_t : 7; - } BCKCR_b; + __IOM uint8_t STCON : 2; /*!< [1..0] SSTBY condition bit */ + uint8_t : 6; + } STCONR_b; }; union { - __IOM uint8_t MEMWAIT; /*!< (@ 0x00000031) Memory Wait Cycle Control Register */ + __IOM uint8_t RSTSR0; /*!< (@ 0x00000410) Reset Status Register 0 */ struct { - __IOM uint8_t MEMWAIT : 1; /*!< [0..0] Memory Wait Cycle SelectNote: Writing 0 to the MEMWAIT - * is prohibited when SCKDIVCR.ICK selects division by 1 and - * SCKSCR.CKSEL[2:0] bits select thesystem clock source that - * is faster than 32 MHz (ICLK > 32 MHz). */ - uint8_t : 7; - } MEMWAIT_b; + __IOM uint8_t PORF : 1; /*!< [0..0] Power-On Reset Detect FlagNOTE: Writable only to clear + * the flag. Confirm the value is 1 and then write 0. */ + __IOM uint8_t LVD0RF : 1; /*!< [1..1] Voltage Monitor 0 Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint8_t LVD1RF : 1; /*!< [2..2] Voltage Monitor 1 Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint8_t LVD2RF : 1; /*!< [3..3] Voltage Monitor 2 Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + uint8_t : 3; + __IOM uint8_t DPSRSTF : 1; /*!< [7..7] Deep Software Standby Reset FlagNOTE: Writable only to + * clear the flag. Confirm the value is 1 and then write 0. */ + } RSTSR0_b; }; union { - __IOM uint8_t MOSCCR; /*!< (@ 0x00000032) Main Clock Oscillator Control Register */ + __IOM uint8_t RSTSR2; /*!< (@ 0x00000411) Reset Status Register 2 */ struct { - __IOM uint8_t MOSTP : 1; /*!< [0..0] Main Clock Oscillator Stop */ - uint8_t : 7; - } MOSCCR_b; + __IOM uint8_t CWSF : 1; /*!< [0..0] Cold/Warm Start Determination Flag */ + uint8_t : 7; + } RSTSR2_b; }; - __IM uint8_t RESERVED6; - __IM uint16_t RESERVED7; + __IM uint8_t RESERVED43; union { - __IOM uint8_t HOCOCR; /*!< (@ 0x00000036) High-Speed On-Chip Oscillator Control Register */ + __IOM uint8_t MOMCR; /*!< (@ 0x00000413) Main Clock Oscillator Mode Oscillation Control + * Register */ struct { - __IOM uint8_t HCSTP : 1; /*!< [0..0] HOCO Stop */ - uint8_t : 7; - } HOCOCR_b; + uint8_t : 3; + __IOM uint8_t MODRV1 : 1; /*!< [3..3] Main Clock Oscillator Drive Capability 1 Switching */ + __IOM uint8_t MODRV0 : 2; /*!< [5..4] Main Clock Oscillator Drive Capability 0 Switching */ + __IOM uint8_t MOSEL : 1; /*!< [6..6] Main Clock Oscillator Switching */ + __IOM uint8_t AUTODRVEN : 1; /*!< [7..7] Main Clock Oscillator Drive Capability Auto Switching + * Enable */ + } MOMCR_b; }; - __IM uint8_t RESERVED8; + __IM uint16_t RESERVED44; union { - __IOM uint8_t MOCOCR; /*!< (@ 0x00000038) Middle-Speed On-Chip Oscillator Control Register */ + __IOM uint8_t FWEPROR; /*!< (@ 0x00000416) Flash P/E Protect Register */ struct { - __IOM uint8_t MCSTP : 1; /*!< [0..0] MOCO Stop */ - uint8_t : 7; - } MOCOCR_b; + __IOM uint8_t FLWE : 2; /*!< [1..0] Flash Programming and Erasure */ + uint8_t : 6; + } FWEPROR_b; }; union { - __IOM uint8_t FLLCR1; /*!< (@ 0x00000039) FLL Control Register 1 */ + union + { + __IOM uint8_t LVCMPCR; /*!< (@ 0x00000417) Voltage Monitor Circuit Control Register */ - struct + struct + { + uint8_t : 5; + __IOM uint8_t LVD1E : 1; /*!< [5..5] Voltage Detection 1 Enable */ + __IOM uint8_t LVD2E : 1; /*!< [6..6] Voltage Detection 2 Enable */ + uint8_t : 1; + } LVCMPCR_b; + }; + + union { - __IOM uint8_t FLLEN : 1; /*!< [0..0] FLL Enable */ - uint8_t : 7; - } FLLCR1_b; + __IOM uint8_t LVD1CMPCR; /*!< (@ 0x00000417) Voltage Monitoring 1 Comparator Control Register */ + + struct + { + __IOM uint8_t LVD1LVL : 5; /*!< [4..0] Voltage Detection 1 Level Select (Standard voltage during + * drop in voltage) */ + uint8_t : 2; + __IOM uint8_t LVD1E : 1; /*!< [7..7] Voltage Detection 1 Enable */ + } LVD1CMPCR_b; + }; }; union { - __IOM uint16_t FLLCR2; /*!< (@ 0x0000003A) FLL Control Register 2 */ + union + { + __IOM uint8_t LVDLVLR; /*!< (@ 0x00000418) Voltage Detection Level Select Register */ - struct + struct + { + __IOM uint8_t LVD1LVL : 5; /*!< [4..0] Voltage Detection 1 Level Select (Standard voltage during + * fall in voltage) */ + __IOM uint8_t LVD2LVL : 3; /*!< [7..5] Voltage Detection 2 Level Select (Standard voltage during + * fall in voltage) */ + } LVDLVLR_b; + }; + + union { - __IOM uint16_t FLLCNTL : 11; /*!< [10..0] FLL Multiplication ControlMultiplication ratio of the - * FLL reference clock select */ - uint16_t : 5; - } FLLCR2_b; + __IOM uint8_t LVD2CMPCR; /*!< (@ 0x00000418) Voltage Monitoring 2 Comparator Control Register */ + + struct + { + __IOM uint8_t LVD2LVL : 3; /*!< [2..0] Voltage Detection 2 Level Select (Standard voltage during + * drop in voltage) */ + uint8_t : 4; + __IOM uint8_t LVD2E : 1; /*!< [7..7] Voltage Detection 2 Enable */ + } LVD2CMPCR_b; + }; }; + __IM uint8_t RESERVED45; union { - __IM uint8_t OSCSF; /*!< (@ 0x0000003C) Oscillation Stabilization Flag Register */ + __IOM uint8_t LVD1CR0; /*!< (@ 0x0000041A) Voltage Monitor 1 Circuit Control Register 0 */ struct { - __IM uint8_t HOCOSF : 1; /*!< [0..0] HOCO Clock Oscillation Stabilization FlagNOTE: The HOCOSF - * bit value after a reset is 1 when the OFS1.HOCOEN bit is - * 0. It is 0 when the OFS1.HOCOEN bit is 1. */ - uint8_t : 2; - __IM uint8_t MOSCSF : 1; /*!< [3..3] Main Clock Oscillation Stabilization Flag */ + __IOM uint8_t RIE : 1; /*!< [0..0] Voltage Monitor Interrupt/Reset Enable */ + __IOM uint8_t DFDIS : 1; /*!< [1..1] Voltage Monitor Digital Filter Disable Mode Select */ + __IOM uint8_t CMPE : 1; /*!< [2..2] Voltage Monitor Circuit Comparison Result Output Enable */ uint8_t : 1; - __IM uint8_t PLLSF : 1; /*!< [5..5] PLL Clock Oscillation Stabilization Flag */ - uint8_t : 2; - } OSCSF_b; + __IOM uint8_t FSAMP : 2; /*!< [5..4] Sampling Clock Select */ + __IOM uint8_t RI : 1; /*!< [6..6] Voltage Monitor Circuit Mode Select */ + __IOM uint8_t RN : 1; /*!< [7..7] Voltage Monitor Reset Negate Select */ + } LVD1CR0_b; }; - __IM uint8_t RESERVED9; union { - __IOM uint8_t CKOCR; /*!< (@ 0x0000003E) Clock Out Control Register */ + __IOM uint8_t LVD2CR0; /*!< (@ 0x0000041B) Voltage Monitor 2 Circuit Control Register 0 */ struct { - __IOM uint8_t CKOSEL : 3; /*!< [2..0] Clock out source select */ - uint8_t : 1; - __IOM uint8_t CKODIV : 3; /*!< [6..4] Clock out input frequency Division Select */ - __IOM uint8_t CKOEN : 1; /*!< [7..7] Clock out enable */ - } CKOCR_b; + __IOM uint8_t RIE : 1; /*!< [0..0] Voltage Monitor Interrupt/Reset Enable */ + __IOM uint8_t DFDIS : 1; /*!< [1..1] Voltage Monitor Digital Filter Disable Mode Select */ + __IOM uint8_t CMPE : 1; /*!< [2..2] Voltage Monitor Circuit Comparison Result Output Enable */ + uint8_t : 1; + __IOM uint8_t FSAMP : 2; /*!< [5..4] Sampling Clock Select */ + __IOM uint8_t RI : 1; /*!< [6..6] Voltage Monitor Circuit Mode Select */ + __IOM uint8_t RN : 1; /*!< [7..7] Voltage Monitor Reset Negate Select */ + } LVD2CR0_b; }; + __IM uint8_t RESERVED46; union { - __IOM uint8_t TRCKCR; /*!< (@ 0x0000003F) Trace Clock Control Register */ + __IOM uint8_t VBATTMNSELR; /*!< (@ 0x0000041D) Battery Backup Voltage Monitor Function Select + * Register */ struct { - __IOM uint8_t TRCK : 4; /*!< [3..0] Trace Clock operating frequency select */ - uint8_t : 3; - __IOM uint8_t TRCKEN : 1; /*!< [7..7] Trace Clock operating Enable */ - } TRCKCR_b; + __IOM uint8_t VBATTMNSEL : 1; /*!< [0..0] VBATT Low Voltage Detect Function Select Bit */ + uint8_t : 7; + } VBATTMNSELR_b; }; union { - __IOM uint8_t OSTDCR; /*!< (@ 0x00000040) Oscillation Stop Detection Control Register */ + __IM uint8_t VBATTMONR; /*!< (@ 0x0000041E) Battery Backup Voltage Monitor Register */ struct { - __IOM uint8_t OSTDIE : 1; /*!< [0..0] Oscillation Stop Detection Interrupt Enable */ - uint8_t : 6; - __IOM uint8_t OSTDE : 1; /*!< [7..7] Oscillation Stop Detection Function Enable */ - } OSTDCR_b; + __IM uint8_t VBATTMON : 1; /*!< [0..0] VBATT Voltage Monitor Bit */ + uint8_t : 7; + } VBATTMONR_b; }; union { - __IOM uint8_t OSTDSR; /*!< (@ 0x00000041) Oscillation Stop Detection Status Register */ + __IOM uint8_t VBTCR1; /*!< (@ 0x0000041F) VBATT Control Register1 */ struct { - __IOM uint8_t OSTDF : 1; /*!< [0..0] Oscillation Stop Detection Flag */ - uint8_t : 7; - } OSTDSR_b; + __IOM uint8_t BPWSWSTP : 1; /*!< [0..0] Battery Power supply Switch Stop */ + uint8_t : 7; + } VBTCR1_b; }; - __IM uint16_t RESERVED10; - __IM uint32_t RESERVED11[3]; + __IM uint32_t RESERVED47[24]; union { - __IOM uint8_t SLCDSCKCR; /*!< (@ 0x00000050) Segment LCD Source Clock Control Register */ + __IOM uint8_t SOSCCR; /*!< (@ 0x00000480) Sub-Clock Oscillator Control Register */ struct { - __IOM uint8_t LCDSCKSEL : 3; /*!< [2..0] LCD Source Clock (LCDSRCCLK) Select */ - uint8_t : 4; - __IOM uint8_t LCDSCKEN : 1; /*!< [7..7] LCD Source Clock Out Enable */ - } SLCDSCKCR_b; + __IOM uint8_t SOSTP : 1; /*!< [0..0] Sub-Clock Oscillator Stop */ + uint8_t : 7; + } SOSCCR_b; }; - __IM uint8_t RESERVED12; union { - __IOM uint8_t EBCKOCR; /*!< (@ 0x00000052) External Bus Clock Output Control Register */ + __IOM uint8_t SOMCR; /*!< (@ 0x00000481) Sub Clock Oscillator Mode Control Register */ struct { - __IOM uint8_t EBCKOEN : 1; /*!< [0..0] BCLK Pin Output Control */ - uint8_t : 7; - } EBCKOCR_b; + __IOM uint8_t SODRV : 2; /*!< [1..0] Sub-Clock Oscillator Drive Capability Switching */ + uint8_t : 6; + } SOMCR_b; }; + __IM uint16_t RESERVED48; + __IM uint32_t RESERVED49[3]; union { - __IOM uint8_t SDCKOCR; /*!< (@ 0x00000053) SDRAM Clock Output Control Register */ + __IOM uint8_t LOCOCR; /*!< (@ 0x00000490) Low-Speed On-Chip Oscillator Control Register */ struct { - __IOM uint8_t SDCKOEN : 1; /*!< [0..0] SDCLK Pin Output Control */ - uint8_t : 7; - } SDCKOCR_b; + __IOM uint8_t LCSTP : 1; /*!< [0..0] LOCO Stop */ + uint8_t : 7; + } LOCOCR_b; }; - __IM uint32_t RESERVED13[3]; - __IM uint8_t RESERVED14; + __IM uint8_t RESERVED50; union { - __IOM uint8_t MOCOUTCR; /*!< (@ 0x00000061) MOCO User Trimming Control Register */ + __IOM uint8_t LOCOUTCR; /*!< (@ 0x00000492) LOCO User Trimming Control Register */ struct { - __IOM uint8_t MOCOUTRM : 8; /*!< [7..0] MOCO User Trimming 1000_0000 : -128 1000_0001 : -127 + __IOM uint8_t LOCOUTRM : 8; /*!< [7..0] LOCO User Trimming 1000_0000 : -128 1000_0001 : -127 * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : - +126 0111_1111 : +127These bits are added to original MOCO + +126 0111_1111 : +127These bits are added to original LOCO * trimming bits */ - } MOCOUTCR_b; + } LOCOUTCR_b; }; + __IM uint8_t RESERVED51; + __IM uint32_t RESERVED52[7]; union { - __IOM uint8_t HOCOUTCR; /*!< (@ 0x00000062) HOCO User Trimming Control Register */ + __IOM uint8_t VBTCR2; /*!< (@ 0x000004B0) VBATT Control Register2 */ struct { - __IOM uint8_t HOCOUTRM : 8; /*!< [7..0] HOCO User Trimming 1000_0000 : -128 1000_0001 : -127 - * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center - * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : - +126 0111_1111 : +127These bits are added to original HOCO - * trimming bits */ - } HOCOUTCR_b; + uint8_t : 4; + __IOM uint8_t VBTLVDEN : 1; /*!< [4..4] VBATT Pin Low Voltage Detect Enable Bit */ + uint8_t : 1; + __IOM uint8_t VBTLVDLVL : 2; /*!< [7..6] VBATT Pin Voltage Low Voltage Detect Level Select Bit */ + } VBTCR2_b; }; - __IM uint8_t RESERVED15; - __IM uint32_t RESERVED16[11]; - __IM uint16_t RESERVED17; union { - __IOM uint8_t SNZCR; /*!< (@ 0x00000092) Snooze Control Register */ + __IOM uint8_t VBTSR; /*!< (@ 0x000004B1) VBATT Status Register */ struct { - __IOM uint8_t RXDREQEN : 1; /*!< [0..0] RXD0 Snooze Request Enable NOTE: Do not set to 1 other - * than in asynchronous mode. */ - __IOM uint8_t SNZDTCEN : 1; /*!< [1..1] DTC Enable in Snooze Mode */ - uint8_t : 5; - __IOM uint8_t SNZE : 1; /*!< [7..7] Snooze Mode Enable */ - } SNZCR_b; + __IOM uint8_t VBTRDF : 1; /*!< [0..0] VBAT_R Reset Detect Flag */ + __IOM uint8_t VBTBLDF : 1; /*!< [1..1] VBATT Battery Low voltage Detect Flag */ + uint8_t : 2; + __IM uint8_t VBTRVLD : 1; /*!< [4..4] VBATT_R Valid */ + uint8_t : 3; + } VBTSR_b; }; - __IM uint8_t RESERVED18; union { - __IOM uint8_t SNZEDCR; /*!< (@ 0x00000094) Snooze End Control Register */ + __IOM uint8_t VBTCMPCR; /*!< (@ 0x000004B2) VBATT Comparator Control Register */ struct { - __IOM uint8_t AGT1UNFED : 1; /*!< [0..0] AGT1 underflow Snooze End Enable */ - __IOM uint8_t DTCZRED : 1; /*!< [1..1] Last DTC transmission completion Snooze End Enable */ - __IOM uint8_t DTCNZRED : 1; /*!< [2..2] Not Last DTC transmission completion Snooze End Enable */ - __IOM uint8_t AD0MATED : 1; /*!< [3..3] AD compare match 0 Snooze End Enable */ - __IOM uint8_t AD0UMTED : 1; /*!< [4..4] AD compare mismatch 0 Snooze End Enable */ - __IOM uint8_t AD1MATED : 1; /*!< [5..5] AD compare match 1 Snooze End Enable */ - __IOM uint8_t AD1UMTED : 1; /*!< [6..6] AD compare mismatch 1 Snooze End Enable */ - __IOM uint8_t SCI0UMTED : 1; /*!< [7..7] SCI0 address unmatch Snooze End EnableNote: Do not set - * to 1 other than in asynchronous mode. */ - } SNZEDCR_b; + __IOM uint8_t VBTCMPE : 1; /*!< [0..0] VBATT pin low voltage detect circuit output enable */ + uint8_t : 7; + } VBTCMPCR_b; }; - __IM uint8_t RESERVED19; - __IM uint16_t RESERVED20; + __IM uint8_t RESERVED53; union { - __IOM uint32_t SNZREQCR; /*!< (@ 0x00000098) Snooze Request Control Register */ + __IOM uint8_t VBTLVDICR; /*!< (@ 0x000004B4) VBATT Pin Low Voltage Detect Interrupt Control + * Register */ struct { - __IOM uint32_t SNZREQEN0 : 1; /*!< [0..0] Snooze Request Enable 0Enable IRQ 0 pin snooze request */ - __IOM uint32_t SNZREQEN1 : 1; /*!< [1..1] Snooze Request Enable 0Enable IRQ 1 pin snooze request */ - __IOM uint32_t SNZREQEN2 : 1; /*!< [2..2] Snooze Request Enable 0Enable IRQ 2 pin snooze request */ - __IOM uint32_t SNZREQEN3 : 1; /*!< [3..3] Snooze Request Enable 0Enable IRQ 3 pin snooze request */ - __IOM uint32_t SNZREQEN4 : 1; /*!< [4..4] Snooze Request Enable 0Enable IRQ 4 pin snooze request */ - __IOM uint32_t SNZREQEN5 : 1; /*!< [5..5] Snooze Request Enable 0Enable IRQ 5 pin snooze request */ - __IOM uint32_t SNZREQEN6 : 1; /*!< [6..6] Snooze Request Enable 0Enable IRQ 6 pin snooze request */ - __IOM uint32_t SNZREQEN7 : 1; /*!< [7..7] Snooze Request Enable 0Enable IRQ 7 pin snooze request */ - __IOM uint32_t SNZREQEN8 : 1; /*!< [8..8] Snooze Request Enable 0Enable IRQ 8 pin snooze request */ - __IOM uint32_t SNZREQEN9 : 1; /*!< [9..9] Snooze Request Enable 0Enable IRQ 9 pin snooze request */ - __IOM uint32_t SNZREQEN10 : 1; /*!< [10..10] Snooze Request Enable 0Enable IRQ 10 pin snooze request */ - __IOM uint32_t SNZREQEN11 : 1; /*!< [11..11] Snooze Request Enable 0Enable IRQ 11 pin snooze request */ - __IOM uint32_t SNZREQEN12 : 1; /*!< [12..12] Snooze Request Enable 0Enable IRQ 12 pin snooze request */ - __IOM uint32_t SNZREQEN13 : 1; /*!< [13..13] Snooze Request Enable 0Enable IRQ 13 pin snooze request */ - __IOM uint32_t SNZREQEN14 : 1; /*!< [14..14] Snooze Request Enable 0Enable IRQ 14 pin snooze request */ - __IOM uint32_t SNZREQEN15 : 1; /*!< [15..15] Snooze Request Enable 0Enable IRQ 15 pin snooze request */ - uint32_t : 1; - __IOM uint32_t SNZREQEN17 : 1; /*!< [17..17] Snooze Request Enable 17Enable KR snooze request */ - uint32_t : 4; - __IOM uint32_t SNZREQEN22 : 1; /*!< [22..22] Snooze Request Enable 22Enable Comparator-HS0 snooze - * request */ - __IOM uint32_t SNZREQEN23 : 1; /*!< [23..23] Snooze Request Enable 23Enable Comparator-LP0 snooze - * request */ - __IOM uint32_t SNZREQEN24 : 1; /*!< [24..24] Snooze Request Enable 24Enable RTC alarm snooze request */ - __IOM uint32_t SNZREQEN25 : 1; /*!< [25..25] Snooze Request Enable 25Enable RTC period snooze request */ - uint32_t : 2; - __IOM uint32_t SNZREQEN28 : 1; /*!< [28..28] Snooze Request Enable 28Enable AGT1 underflow snooze - * request */ - __IOM uint32_t SNZREQEN29 : 1; /*!< [29..29] Snooze Request Enable 29Enable AGT1 compare match A - * snooze request */ - __IOM uint32_t SNZREQEN30 : 1; /*!< [30..30] Snooze Request Enable 30Enable AGT1 compare match B - * snooze request */ - uint32_t : 1; - } SNZREQCR_b; + __IOM uint8_t VBTLVDIE : 1; /*!< [0..0] VBATT Pin Low Voltage Detect Interrupt Enable bit */ + __IOM uint8_t VBTLVDISEL : 1; /*!< [1..1] Pin Low Voltage Detect Interrupt Select bit */ + uint8_t : 6; + } VBTLVDICR_b; }; - __IM uint16_t RESERVED21; + __IM uint8_t RESERVED54; union { - __IOM uint8_t FLSTOP; /*!< (@ 0x0000009E) Flash Operation Control Register */ + __IOM uint8_t VBTWCTLR; /*!< (@ 0x000004B6) VBATT Wakeup function Control Register */ struct { - __IOM uint8_t FLSTOP : 1; /*!< [0..0] Selecting ON/OFF of the Flash Memory Operation */ - uint8_t : 3; - __IOM uint8_t FLSTPF : 1; /*!< [4..4] Flash Memory Operation Status Flag */ - uint8_t : 3; - } FLSTOP_b; + __IOM uint8_t VWEN : 1; /*!< [0..0] VBATT wakeup enable */ + uint8_t : 7; + } VBTWCTLR_b; }; + __IM uint8_t RESERVED55; union { - __IOM uint8_t PSMCR; /*!< (@ 0x0000009F) Power Save Memory Control Register */ + __IOM uint8_t VBTWCH0OTSR; /*!< (@ 0x000004B8) VBATT Wakeup I/O 0 Output Trigger Select Register */ struct { - __IOM uint8_t PSMC : 2; /*!< [1..0] Power save memory control. */ - uint8_t : 6; - } PSMCR_b; + uint8_t : 1; + __IOM uint8_t CH0VCH1TE : 1; /*!< [1..1] VBATWIO0 Output VBATWIO1 Trigger Enable */ + __IOM uint8_t CH0VCH2TE : 1; /*!< [2..2] VBATWIO0 Output VBATWIO2 Trigger Enable */ + __IOM uint8_t CH0VRTCTE : 1; /*!< [3..3] VBATWIO0 Output RTC Periodic Signal Enable */ + __IOM uint8_t CH0VRTCATE : 1; /*!< [4..4] VBATWIO0 Output RTC Alarm Signal Enable */ + __IOM uint8_t CH0VAGTUTE : 1; /*!< [5..5] CH0 Output AGT(ch1) underflow Signal Enable */ + uint8_t : 2; + } VBTWCH0OTSR_b; }; union { - __IOM uint8_t OPCCR; /*!< (@ 0x000000A0) Operating Power Control Register */ + __IOM uint8_t VBTWCH1OTSR; /*!< (@ 0x000004B9) VBATT Wakeup I/O 1 Output Trigger Select Register */ struct { - __IOM uint8_t OPCM : 2; /*!< [1..0] Operating Power Control Mode Select */ - uint8_t : 2; - __IM uint8_t OPCMTSF : 1; /*!< [4..4] Operating Power Control Mode Transition Status Flag */ - uint8_t : 3; - } OPCCR_b; + __IOM uint8_t CH1VCH0TE : 1; /*!< [0..0] VBATWIO1 Output VBATWIO0 Trigger Enable */ + uint8_t : 1; + __IOM uint8_t CH1VCH2TE : 1; /*!< [2..2] VBATWIO1 Output VBATWIO2 Trigger Enable */ + __IOM uint8_t CH1VRTCTE : 1; /*!< [3..3] VBATWIO1 Output RTC Periodic Signal Enable */ + __IOM uint8_t CH1VRTCATE : 1; /*!< [4..4] VBATWIO1 Output RTC Alarm Signal Enable */ + __IOM uint8_t CH1VAGTUTE : 1; /*!< [5..5] CH1 Output AGT(ch1) underflow Signal Enable */ + uint8_t : 2; + } VBTWCH1OTSR_b; }; - __IM uint8_t RESERVED22; union { - __IOM uint8_t MOSCWTCR; /*!< (@ 0x000000A2) Main Clock Oscillator Wait Control Register */ + __IOM uint8_t VBTWCH2OTSR; /*!< (@ 0x000004BA) VBATT Wakeup I/O 2 Output Trigger Select Register */ struct { - __IOM uint8_t MSTS : 4; /*!< [3..0] Main clock oscillator wait time setting */ - uint8_t : 4; - } MOSCWTCR_b; + __IOM uint8_t CH2VCH0TE : 1; /*!< [0..0] VBATWIO2 Output VBATWIO0 Trigger Enable */ + __IOM uint8_t CH2VCH1TE : 1; /*!< [1..1] VBATWIO2 Output VBATWIO1 Trigger Enable */ + uint8_t : 1; + __IOM uint8_t CH2VRTCTE : 1; /*!< [3..3] VBATWIO2 Output RTC Periodic Signal Enable */ + __IOM uint8_t CH2VRTCATE : 1; /*!< [4..4] VBATWIO2 Output RTC Alarm Signal Enable */ + __IOM uint8_t CH2VAGTUTE : 1; /*!< [5..5] CH2 Output AGT(CH2) underflow Signal Enable */ + uint8_t : 2; + } VBTWCH2OTSR_b; }; - __IM uint8_t RESERVED23[2]; union { - __IOM uint8_t HOCOWTCR; /*!< (@ 0x000000A5) High-speed on-chip oscillator wait control register */ + __IOM uint8_t VBTICTLR; /*!< (@ 0x000004BB) VBATT Input Control Register */ struct { - __IOM uint8_t HSTS : 3; /*!< [2..0] HOCO wait time settingWaiting time (sec) = setting of - * the HSTS[2:0] bits/fLOCO(Trimmed) + 3/fLOC(Untrimmed) */ - uint8_t : 5; - } HOCOWTCR_b; + __IOM uint8_t VCH0INEN : 1; /*!< [0..0] RTCIC0 Input Enable */ + __IOM uint8_t VCH1INEN : 1; /*!< [1..1] RTCIC1 Input Enable */ + __IOM uint8_t VCH2INEN : 1; /*!< [2..2] RTCIC2 Input Enable */ + uint8_t : 5; + } VBTICTLR_b; }; - __IM uint16_t RESERVED24[2]; union { - __IOM uint8_t SOPCCR; /*!< (@ 0x000000AA) Sub Operating Power Control Register */ + __IOM uint8_t VBTOCTLR; /*!< (@ 0x000004BC) VBATT Output Control Register */ struct { - __IOM uint8_t SOPCM : 1; /*!< [0..0] Sub Operating Power Control Mode Select */ - uint8_t : 3; - __IM uint8_t SOPCMTSF : 1; /*!< [4..4] Sub Operating Power Control Mode Transition Status Flag */ - uint8_t : 3; - } SOPCCR_b; + __IOM uint8_t VCH0OEN : 1; /*!< [0..0] VBATT Wakeup I/O 0 Output Enable */ + __IOM uint8_t VCH1OEN : 1; /*!< [1..1] VBATT Wakeup I/O 1 Output Enable */ + __IOM uint8_t VCH2OEN : 1; /*!< [2..2] VBATT Wakeup I/O 2 Output Enable */ + __IOM uint8_t VOUT0LSEL : 1; /*!< [3..3] VBATT Wakeup I/O 0 Output Level Selection */ + __IOM uint8_t VCOU1LSEL : 1; /*!< [4..4] VBATT Wakeup I/O 1 Output Level Selection */ + __IOM uint8_t VOUT2LSEL : 1; /*!< [5..5] VBATT Wakeup I/O 2 Output Level Selection */ + uint8_t : 2; + } VBTOCTLR_b; }; - __IM uint8_t RESERVED25; - __IM uint32_t RESERVED26[5]; union { - __IOM uint16_t RSTSR1; /*!< (@ 0x000000C0) Reset Status Register 1 */ + __IOM uint8_t VBTWTER; /*!< (@ 0x000004BD) VBATT Wakeup Trigger source Enable Register */ struct { - __IOM uint16_t IWDTRF : 1; /*!< [0..0] Independent Watchdog Timer Reset Detect FlagNOTE: Writable - * only to clear the flag. Confirm the value is 1 and then - * write 0. */ - __IOM uint16_t WDTRF : 1; /*!< [1..1] Watchdog Timer Reset Detect FlagNOTE: Writable only to - * clear the flag. Confirm the value is 1 and then write 0. */ - __IOM uint16_t SWRF : 1; /*!< [2..2] Software Reset Detect FlagNOTE: Writable only to clear - * the flag. Confirm the value is 1 and then write 0. */ - uint16_t : 5; - __IOM uint16_t RPERF : 1; /*!< [8..8] RAM Parity Error Reset Detect FlagNOTE: Writable only - * to clear the flag. Confirm the value is 1 and then write - * 0. */ - __IOM uint16_t REERF : 1; /*!< [9..9] RAM ECC Error Reset Detect FlagNOTE: Writable only to - * clear the flag. Confirm the value is 1 and then write 0. */ - __IOM uint16_t BUSSRF : 1; /*!< [10..10] Bus Slave MPU Reset Detect FlagNOTE: Writable only - * to clear the flag. Confirm the value is 1 and then write - * 0. */ - __IOM uint16_t BUSMRF : 1; /*!< [11..11] Bus Master MPU Reset Detect FlagNOTE: Writable only - * to clear the flag. Confirm the value is 1 and then write - * 0. */ - __IOM uint16_t SPERF : 1; /*!< [12..12] SP Error Reset Detect FlagNOTE: Writable only to clear - * the flag. Confirm the value is 1 and then write 0. */ - uint16_t : 3; - } RSTSR1_b; + __IOM uint8_t VCH0E : 1; /*!< [0..0] VBATWIO0 Pin Enable */ + __IOM uint8_t VCH1E : 1; /*!< [1..1] VBATWIO1 Pin Enable */ + __IOM uint8_t VCH2E : 1; /*!< [2..2] VBATWIO2 Pin Enable */ + __IOM uint8_t VRTCIE : 1; /*!< [3..3] RTC Periodic Signal Enable */ + __IOM uint8_t VRTCAE : 1; /*!< [4..4] RTC Alarm Signal Enable */ + __IOM uint8_t VAGTUE : 1; /*!< [5..5] AGT(ch1) underflow Signal Enable */ + uint8_t : 2; + } VBTWTER_b; }; - __IM uint16_t RESERVED27; - __IM uint32_t RESERVED28[3]; union { - __IOM uint8_t USBCKCR; /*!< (@ 0x000000D0) USB Clock Control Register */ + __IOM uint8_t VBTWEGR; /*!< (@ 0x000004BE) VBATT Wakeup Trigger source Edge Register */ struct { - __IOM uint8_t USBCLKSEL : 1; /*!< [0..0] The USBCLKSEL bit selects the source of the USB clock - * (UCLK). */ - uint8_t : 7; - } USBCKCR_b; + __IOM uint8_t VCH0EG : 1; /*!< [0..0] VBATWIO0 Wakeup Trigger Source Edge Select */ + __IOM uint8_t VCH1EG : 1; /*!< [1..1] VBATWIO1 Wakeup Trigger Source Edge Select */ + __IOM uint8_t VCH2EG : 1; /*!< [2..2] VBATWIO2 Wakeup Trigger Source Edge Select */ + uint8_t : 5; + } VBTWEGR_b; }; union { - __IOM uint8_t SDADCCKCR; /*!< (@ 0x000000D1) 24-bit Sigma-Delta A/D Converter Clock Control - * Register */ + __IOM uint8_t VBTWFR; /*!< (@ 0x000004BF) VBATT Wakeup trigger source Flag Register */ struct { - __IOM uint8_t SDADCCKSEL : 1; /*!< [0..0] 24-bit Sigma-Delta A/D Converter Clock Select */ - uint8_t : 6; - __IOM uint8_t SDADCCKEN : 1; /*!< [7..7] 24-bit Sigma-Delta A/D Converter Clock Enable */ - } SDADCCKCR_b; + __IOM uint8_t VCH0F : 1; /*!< [0..0] VBATWIO0 Wakeup Trigger Flag */ + __IOM uint8_t VCH1F : 1; /*!< [1..1] VBATWIO1 Wakeup Trigger Flag */ + __IOM uint8_t VCH2F : 1; /*!< [2..2] VBATWIO2 Wakeup Trigger Flag */ + __IOM uint8_t VRTCIF : 1; /*!< [3..3] VBATT RTC-Interval Wakeup Trigger Flag */ + __IOM uint8_t VRTCAF : 1; /*!< [4..4] VBATT RTC-Alarm Wakeup Trigger Flag */ + __IOM uint8_t VAGTUF : 1; /*!< [5..5] AGT(ch1) underflow VBATT Wakeup Trigger Flag */ + uint8_t : 2; + } VBTWFR_b; }; - __IM uint16_t RESERVED29; - __IM uint32_t RESERVED30[3]; union { - __IOM uint8_t LVD1CR1; /*!< (@ 0x000000E0) Voltage Monitor 1 Circuit Control Register 1 */ + __IOM uint8_t VBTBER; /*!< (@ 0x000004C0) VBATT Backup Enable Register */ struct { - __IOM uint8_t IDTSEL : 2; /*!< [1..0] Voltage Monitor Interrupt Generation Condition Select */ - __IOM uint8_t IRQSEL : 1; /*!< [2..2] Voltage Monitor Interrupt Type Select */ - uint8_t : 5; - } LVD1CR1_b; + uint8_t : 3; + __IOM uint8_t VBAE : 1; /*!< [3..3] VBATT backup register access enable bit */ + uint8_t : 4; + } VBTBER_b; }; + __IM uint8_t RESERVED56; + __IM uint16_t RESERVED57; + __IM uint32_t RESERVED58[15]; union { - __IOM uint8_t LVD1SR; /*!< (@ 0x000000E1) Voltage Monitor 1 Circuit Status Register */ + __IOM uint8_t VBTBKR[512]; /*!< (@ 0x00000500) VBATT Backup Register [0..511] */ struct { - __IOM uint8_t DET : 1; /*!< [0..0] Voltage Monitor Voltage Change Detection Flag NOTE: Only - * 0 can be written to this bit. After writing 0 to this bit, - * it takes 2 system clock cycles for the bit to be read as - * 0. */ - __IM uint8_t MON : 1; /*!< [1..1] Voltage Monitor 1 Signal Monitor Flag */ - uint8_t : 6; - } LVD1SR_b; + __IOM uint8_t VBTBKR : 8; /*!< [7..0] VBTBKR is a 512-byte readable/writable register to store + * data powered by VBATT.The value of this register is retained + * even when VCC is not powered but VBATT is powered.VBTBKR + * is initialized by VBATT selected voltage power-on-reset. */ + } VBTBKR_b[512]; }; +} R_SYSTEM_Type; /*!< Size = 1792 (0x700) */ + +/* =========================================================================================================================== */ +/* ================ R_TSN ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor (R_TSN) + */ + +typedef struct /*!< (@ 0x407EC000) R_TSN Structure */ +{ + __IM uint8_t RESERVED[552]; union { - __IOM uint8_t LVD2CR1; /*!< (@ 0x000000E2) Voltage Monitor 2 Circuit Control Register 1 */ + __IM uint8_t TSCDRL; /*!< (@ 0x00000228) Temperature Sensor Calibration Data Register + * L */ struct { - __IOM uint8_t IDTSEL : 2; /*!< [1..0] Voltage Monitor Interrupt Generation Condition Select */ - __IOM uint8_t IRQSEL : 1; /*!< [2..2] Voltage Monitor Interrupt Type Select */ - uint8_t : 5; - } LVD2CR1_b; + __IM uint8_t TSCDRL : 8; /*!< [7..0] The calibration data stores the lower 8 bits of the convertedvalue. */ + } TSCDRL_b; }; union { - __IOM uint8_t LVD2SR; /*!< (@ 0x000000E3) Voltage Monitor 2 Circuit Status Register */ + __IM uint8_t TSCDRH; /*!< (@ 0x00000229) Temperature Sensor Calibration Data Register + * H */ struct { - __IOM uint8_t DET : 1; /*!< [0..0] Voltage Monitor Voltage Change Detection Flag NOTE: Only - * 0 can be written to this bit. After writing 0 to this bit, - * it takes 2 system clock cycles for the bit to be read as - * 0. */ - __IM uint8_t MON : 1; /*!< [1..1] Voltage Monitor 1 Signal Monitor Flag */ - uint8_t : 6; - } LVD2SR_b; + __IM uint8_t TSCDRH : 8; /*!< [7..0] The calibration data stores the higher 8 bits of the + * convertedvalue. */ + } TSCDRH_b; }; - __IM uint32_t RESERVED31[198]; - __IM uint16_t RESERVED32; +} R_TSN_Type; /*!< Size = 554 (0x22a) */ +/* =========================================================================================================================== */ +/* ================ R_TSN_CAL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor (R_TSN_CAL) + */ + +typedef struct /*!< (@ 0x407FB17C) R_TSN_CAL Structure */ +{ union { - __IOM uint16_t PRCR; /*!< (@ 0x000003FE) Protect Register */ + __IM uint32_t TSCDR; /*!< (@ 0x00000000) Temperature Sensor 32 bit Calibration Data Register */ struct { - __IOM uint16_t PRC0 : 1; /*!< [0..0] Enables writing to the registers related to the clock - * generation circuit. */ - __IOM uint16_t PRC1 : 1; /*!< [1..1] Enables writing to the registers related to the operating - * modes, the low power consumption modes and the battery - * backup function. */ - uint16_t : 1; - __IOM uint16_t PRC3 : 1; /*!< [3..3] Enables writing to the registers related to the LVD. */ - uint16_t : 4; - __OM uint16_t PRKEY : 8; /*!< [15..8] PRKEY Key Code */ - } PRCR_b; + __IM uint32_t TSCDR : 32; /*!< [31..0] The 32 bit TSCDR register stores temperature sensor + * calibration converted value. */ + } TSCDR_b; }; +} R_TSN_CAL_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_TSN_CTRL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor (R_TSN_CTRL) + */ +typedef struct /*!< (@ 0x4005D000) R_TSN_CTRL Structure */ +{ union { - __IOM uint8_t DPSBYCR; /*!< (@ 0x00000400) Deep Standby Control Register */ + __IOM uint8_t TSCR; /*!< (@ 0x00000000) Temperature Sensor Control Register */ struct { - __IOM uint8_t DEEPCUT : 2; /*!< [1..0] Power-Supply Control */ - uint8_t : 4; - __IOM uint8_t IOKEEP : 1; /*!< [6..6] I/O Port Retention */ - __IOM uint8_t DPSBY : 1; /*!< [7..7] Deep Software Standby */ - } DPSBYCR_b; + uint8_t : 4; + __IOM uint8_t TSOE : 1; /*!< [4..4] Temperature Sensor Enable */ + uint8_t : 2; + __IOM uint8_t TSEN : 1; /*!< [7..7] Temperature Sensor Output Enable */ + } TSCR_b; }; - __IM uint8_t RESERVED33; +} R_TSN_CTRL_Type; /*!< Size = 1 (0x1) */ + +/* =========================================================================================================================== */ +/* ================ R_USB_FS0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief USB 2.0 Module (R_USB_FS0) + */ +typedef struct /*!< (@ 0x40090000) R_USB_FS0 Structure */ +{ union { - __IOM uint8_t DPSIER0; /*!< (@ 0x00000402) Deep Standby Interrupt Enable Register 0 */ + __IOM uint16_t SYSCFG; /*!< (@ 0x00000000) System Configuration Control Register */ struct { - __IOM uint8_t DIRQ0E : 1; /*!< [0..0] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ1E : 1; /*!< [1..1] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ2E : 1; /*!< [2..2] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ3E : 1; /*!< [3..3] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ4E : 1; /*!< [4..4] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ5E : 1; /*!< [5..5] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ6E : 1; /*!< [6..6] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ7E : 1; /*!< [7..7] IRQ-DS Pin Enable */ - } DPSIER0_b; + __IOM uint16_t USBE : 1; /*!< [0..0] USB Operation Enable */ + uint16_t : 2; + __IOM uint16_t DMRPU : 1; /*!< [3..3] D- Line Resistor Control */ + __IOM uint16_t DPRPU : 1; /*!< [4..4] D+ Line Resistor Control */ + __IOM uint16_t DRPD : 1; /*!< [5..5] D+/D- Line Resistor Control */ + __IOM uint16_t DCFM : 1; /*!< [6..6] Controller Function Select */ + uint16_t : 1; + __IOM uint16_t CNEN : 1; /*!< [8..8] CNEN Single End Receiver Enable */ + uint16_t : 1; + __IOM uint16_t SCKE : 1; /*!< [10..10] USB Clock Enable */ + uint16_t : 5; + } SYSCFG_b; }; union { - __IOM uint8_t DPSIER1; /*!< (@ 0x00000403) Deep Standby Interrupt Enable Register 1 */ + __IOM uint16_t BUSWAIT; /*!< (@ 0x00000002) CPU Bus Wait Register */ struct { - __IOM uint8_t DIRQ8E : 1; /*!< [0..0] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ9E : 1; /*!< [1..1] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ10E : 1; /*!< [2..2] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ11E : 1; /*!< [3..3] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ12E : 1; /*!< [4..4] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ13E : 1; /*!< [5..5] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ14E : 1; /*!< [6..6] IRQ-DS Pin Enable */ - __IOM uint8_t DIRQ15E : 1; /*!< [7..7] IRQ-DS Pin Enable */ - } DPSIER1_b; + __IOM uint16_t BWAIT : 4; /*!< [3..0] CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 + * access cycles) */ + uint16_t : 12; + } BUSWAIT_b; }; union { - __IOM uint8_t DPSIER2; /*!< (@ 0x00000404) Deep Standby Interrupt Enable Register 2 */ + __IM uint16_t SYSSTS0; /*!< (@ 0x00000004) System Configuration Status Register 0 */ struct { - __IOM uint8_t DLVD1IE : 1; /*!< [0..0] LVD1 Deep Standby Cancel Signal Enable */ - __IOM uint8_t DLVD2IE : 1; /*!< [1..1] LVD2 Deep Standby Cancel Signal Enable */ - __IOM uint8_t DTRTCIIE : 1; /*!< [2..2] RTC Interval interrupt Deep Standby Cancel Signal Enable */ - __IOM uint8_t DRTCAIE : 1; /*!< [3..3] RTC Alarm interrupt Deep Standby Cancel Signal Enable */ - __IOM uint8_t DNMIE : 1; /*!< [4..4] NMI Pin Enable */ - uint8_t : 3; - } DPSIER2_b; + __IM uint16_t LNST : 2; /*!< [1..0] USB Data Line Status Monitor */ + __IM uint16_t IDMON : 1; /*!< [2..2] External ID0 Input Pin Monitor */ + uint16_t : 2; + __IM uint16_t SOFEA : 1; /*!< [5..5] SOF Active Monitor While Host Controller Function is + * Selected. */ + __IM uint16_t HTACT : 1; /*!< [6..6] USB Host Sequencer Status Monitor */ + uint16_t : 7; + __IM uint16_t OVCMON : 2; /*!< [15..14] External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe + * OCVMON[1] bit indicates the status of the USBHS_OVRCURA + * pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB + * pin. */ + } SYSSTS0_b; }; union { - __IOM uint8_t DPSIER3; /*!< (@ 0x00000405) Deep Standby Interrupt Enable Register 3 */ + __IM uint16_t PLLSTA; /*!< (@ 0x00000006) PLL Status Register */ struct { - __IOM uint8_t DUSBFSIE : 1; /*!< [0..0] USBFS Suspend/Resume Deep Standby Cancel Signal Enable */ - __IOM uint8_t DUSBHSIE : 1; /*!< [1..1] USBHS Suspend/Resume Deep Standby Cancel Signal Enable */ - __IOM uint8_t DAGT1IE : 1; /*!< [2..2] AGT1 Underflow Deep Standby Cancel Signal Enable */ - uint8_t : 5; - } DPSIER3_b; + __IM uint16_t PLLLOCK : 1; /*!< [0..0] PLL Lock Flag */ + uint16_t : 15; + } PLLSTA_b; }; union { - __IOM uint8_t DPSIFR0; /*!< (@ 0x00000406) Deep Standby Interrupt Flag Register 0 */ + __IOM uint16_t DVSTCTR0; /*!< (@ 0x00000008) Device State Control Register 0 */ struct { - __IOM uint8_t DIRQ0F : 1; /*!< [0..0] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ1F : 1; /*!< [1..1] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ2F : 1; /*!< [2..2] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ3F : 1; /*!< [3..3] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ4F : 1; /*!< [4..4] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ5F : 1; /*!< [5..5] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ6F : 1; /*!< [6..6] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ7F : 1; /*!< [7..7] IRQ-DS Pin Deep Standby Cancel Flag */ - } DPSIFR0_b; + __IM uint16_t RHST : 3; /*!< [2..0] USB Bus Reset Status */ + uint16_t : 1; + __IOM uint16_t UACT : 1; /*!< [4..4] USB Bus Enable */ + __IOM uint16_t RESUME : 1; /*!< [5..5] Resume Output */ + __IOM uint16_t USBRST : 1; /*!< [6..6] USB Bus Reset Output */ + __IOM uint16_t RWUPE : 1; /*!< [7..7] Wakeup Detection Enable */ + __IOM uint16_t WKUP : 1; /*!< [8..8] Wakeup Output */ + __IOM uint16_t VBUSEN : 1; /*!< [9..9] USB_VBUSEN Output Pin Control */ + __IOM uint16_t EXICEN : 1; /*!< [10..10] USB_EXICEN Output Pin Control */ + __IOM uint16_t HNPBTOA : 1; /*!< [11..11] Host Negotiation Protocol (HNP) Control This bit is + * used when switching from device B to device A while in + * OTG mode. If the HNPBTOA bit is 1, the internal function + * control keeps the suspended state until the HNP processing + * ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is + * set. */ + uint16_t : 4; + } DVSTCTR0_b; }; + __IM uint16_t RESERVED; union { - __IOM uint8_t DPSIFR1; /*!< (@ 0x00000407) Deep Standby Interrupt Flag Register 1 */ + __IOM uint16_t TESTMODE; /*!< (@ 0x0000000C) USB Test Mode Register */ struct { - __IOM uint8_t DIRQ8F : 1; /*!< [0..0] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ9F : 1; /*!< [1..1] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ10F : 1; /*!< [2..2] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ11F : 1; /*!< [3..3] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ12F : 1; /*!< [4..4] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ13F : 1; /*!< [5..5] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ14F : 1; /*!< [6..6] IRQ-DS Pin Deep Standby Cancel Flag */ - __IOM uint8_t DIRQ15F : 1; /*!< [7..7] IRQ-DS Pin Deep Standby Cancel Flag */ - } DPSIFR1_b; + __IOM uint16_t UTST : 4; /*!< [3..0] Test Mode */ + uint16_t : 12; + } TESTMODE_b; }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2; union { - __IOM uint8_t DPSIFR2; /*!< (@ 0x00000408) Deep Standby Interrupt Flag Register 2 */ + __IOM uint32_t CFIFO; /*!< (@ 0x00000014) CFIFO Port Register */ struct { - __IOM uint8_t DLVD1IF : 1; /*!< [0..0] LVD1 Deep Standby Cancel Flag */ - __IOM uint8_t DLVD2IF : 1; /*!< [1..1] LVD2 Deep Standby Cancel Flag */ - __IOM uint8_t DTRTCIIF : 1; /*!< [2..2] RTC Interval interrupt Deep Standby Cancel Flag */ - __IOM uint8_t DRTCAIF : 1; /*!< [3..3] RTC Alarm interrupt Deep Standby Cancel Flag */ - __IOM uint8_t DNMIF : 1; /*!< [4..4] NMI Pin Deep Standby Cancel Flag */ - uint8_t : 3; - } DPSIFR2_b; + union + { + __IOM uint16_t CFIFOL; /*!< (@ 0x00000014) CFIFO Port Register L */ + __IOM uint8_t CFIFOLL; /*!< (@ 0x00000014) CFIFO Port Register LL */ + }; + + union + { + __IOM uint16_t CFIFOH; /*!< (@ 0x00000016) CFIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED3; + __IOM uint8_t CFIFOHH; /*!< (@ 0x00000017) CFIFO Port Register HH */ + }; + }; + }; }; union { - __IOM uint8_t DPSIFR3; /*!< (@ 0x00000409) Deep Standby Interrupt Flag Register 3 */ + __IOM uint32_t D0FIFO; /*!< (@ 0x00000018) D0FIFO Port Register */ struct { - __IOM uint8_t DUSBFSIF : 1; /*!< [0..0] USBFS Suspend/Resume Deep Standby Cancel Flag */ - __IOM uint8_t DUSBHSIF : 1; /*!< [1..1] USBHS Suspend/Resume Deep Standby Cancel Flag */ - __IOM uint8_t DAGT1IF : 1; /*!< [2..2] AGT1 Underflow Deep Standby Cancel Flag */ - uint8_t : 5; - } DPSIFR3_b; - }; + union + { + __IOM uint16_t D0FIFOL; /*!< (@ 0x00000018) D0FIFO Port Register L */ + __IOM uint8_t D0FIFOLL; /*!< (@ 0x00000018) D0FIFO Port Register LL */ + }; - union - { - __IOM uint8_t DPSIEGR0; /*!< (@ 0x0000040A) Deep Standby Interrupt Edge Register 0 */ + union + { + __IOM uint16_t D0FIFOH; /*!< (@ 0x0000001A) D0FIFO Port Register H */ - struct - { - __IOM uint8_t DIRQ0EG : 1; /*!< [0..0] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ1EG : 1; /*!< [1..1] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ2EG : 1; /*!< [2..2] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ3EG : 1; /*!< [3..3] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ4EG : 1; /*!< [4..4] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ5EG : 1; /*!< [5..5] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ6EG : 1; /*!< [6..6] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ7EG : 1; /*!< [7..7] IRQ-DS Pin Edge Select */ - } DPSIEGR0_b; + struct + { + __IM uint8_t RESERVED4; + __IOM uint8_t D0FIFOHH; /*!< (@ 0x0000001B) D0FIFO Port Register HH */ + }; + }; + }; }; union { - __IOM uint8_t DPSIEGR1; /*!< (@ 0x0000040B) Deep Standby Interrupt Edge Register 1 */ + __IOM uint32_t D1FIFO; /*!< (@ 0x0000001C) D1FIFO Port Register */ struct { - __IOM uint8_t DIRQ0EG : 1; /*!< [0..0] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ1EG : 1; /*!< [1..1] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ2EG : 1; /*!< [2..2] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ3EG : 1; /*!< [3..3] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ4EG : 1; /*!< [4..4] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ5EG : 1; /*!< [5..5] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ6EG : 1; /*!< [6..6] IRQ-DS Pin Edge Select */ - __IOM uint8_t DIRQ7EG : 1; /*!< [7..7] IRQ-DS Pin Edge Select */ - } DPSIEGR1_b; + union + { + __IOM uint16_t D1FIFOL; /*!< (@ 0x0000001C) D1FIFO Port Register L */ + __IOM uint8_t D1FIFOLL; /*!< (@ 0x0000001C) D1FIFO Port Register LL */ + }; + + union + { + __IOM uint16_t D1FIFOH; /*!< (@ 0x0000001E) D1FIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED5; + __IOM uint8_t D1FIFOHH; /*!< (@ 0x0000001F) D1FIFO Port Register HH */ + }; + }; + }; }; union { - __IOM uint8_t DPSIEGR2; /*!< (@ 0x0000040C) Deep Standby Interrupt Edge Register 2 */ + __IOM uint16_t CFIFOSEL; /*!< (@ 0x00000020) CFIFO Port Select Register */ struct { - __IOM uint8_t DLVD1IEG : 1; /*!< [0..0] LVD1 Edge Select */ - __IOM uint8_t DLVD2IEG : 1; /*!< [1..1] LVD2 Edge Select */ - uint8_t : 2; - __IOM uint8_t DNMIEG : 1; /*!< [4..4] NMI Pin Edge Select */ - uint8_t : 3; - } DPSIEGR2_b; + __IOM uint16_t CURPIPE : 4; /*!< [3..0] CFIFO Port Access Pipe Specification */ + uint16_t : 1; + __IOM uint16_t ISEL : 1; /*!< [5..5] CFIFO Port Access Direction When DCP is Selected */ + uint16_t : 2; + __IOM uint16_t BIGEND : 1; /*!< [8..8] CFIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] CFIFO Port Access Bit Width */ + uint16_t : 2; + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } CFIFOSEL_b; }; - __IM uint8_t RESERVED34; union { - __IOM uint8_t SYOCDCR; /*!< (@ 0x0000040E) System Control OCD Control Register */ + __IOM uint16_t CFIFOCTR; /*!< (@ 0x00000022) CFIFO Port Control Register */ struct { - __IOM uint8_t DOCDF : 1; /*!< [0..0] Deep Standby OCD flag */ - uint8_t : 6; - __IOM uint8_t DBGEN : 1; /*!< [7..7] Debugger Enable bit */ - } SYOCDCR_b; + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } CFIFOCTR_b; }; + __IM uint32_t RESERVED6; union { - __IOM uint8_t STCONR; /*!< (@ 0x0000040F) Standby Condition Register */ + __IOM uint16_t D0FIFOSEL; /*!< (@ 0x00000028) D0FIFO Port Select Register */ struct { - __IOM uint8_t STCON : 2; /*!< [1..0] SSTBY condition bit */ - uint8_t : 6; - } STCONR_b; + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified + * Pipe Data is Read */ + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer RewindNote: Only 0 can be read. */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D0FIFOSEL_b; }; union { - __IOM uint8_t RSTSR0; /*!< (@ 0x00000410) Reset Status Register 0 */ + __IOM uint16_t D0FIFOCTR; /*!< (@ 0x0000002A) D0FIFO Port Control Register */ struct { - __IOM uint8_t PORF : 1; /*!< [0..0] Power-On Reset Detect FlagNOTE: Writable only to clear - * the flag. Confirm the value is 1 and then write 0. */ - __IOM uint8_t LVD0RF : 1; /*!< [1..1] Voltage Monitor 0 Reset Detect FlagNOTE: Writable only - * to clear the flag. Confirm the value is 1 and then write - * 0. */ - __IOM uint8_t LVD1RF : 1; /*!< [2..2] Voltage Monitor 1 Reset Detect FlagNOTE: Writable only - * to clear the flag. Confirm the value is 1 and then write - * 0. */ - __IOM uint8_t LVD2RF : 1; /*!< [3..3] Voltage Monitor 2 Reset Detect FlagNOTE: Writable only - * to clear the flag. Confirm the value is 1 and then write - * 0. */ - uint8_t : 3; - __IOM uint8_t DPSRSTF : 1; /*!< [7..7] Deep Software Standby Reset FlagNOTE: Writable only to - * clear the flag. Confirm the value is 1 and then write 0. */ - } RSTSR0_b; + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D0FIFOCTR_b; }; union { - __IOM uint8_t RSTSR2; /*!< (@ 0x00000411) Reset Status Register 2 */ + __IOM uint16_t D1FIFOSEL; /*!< (@ 0x0000002C) D1FIFO Port Select Register */ struct { - __IOM uint8_t CWSF : 1; /*!< [0..0] Cold/Warm Start Determination Flag */ - uint8_t : 7; - } RSTSR2_b; + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified + * Pipe Data is Read */ + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D1FIFOSEL_b; }; - __IM uint8_t RESERVED35; union { - __IOM uint8_t MOMCR; /*!< (@ 0x00000413) Main Clock Oscillator Mode Oscillation Control - * Register */ + __IOM uint16_t D1FIFOCTR; /*!< (@ 0x0000002E) D1FIFO Port Control Register */ struct { - uint8_t : 3; - __IOM uint8_t MODRV1 : 1; /*!< [3..3] Main Clock Oscillator Drive Capability 1 Switching */ - __IOM uint8_t MODRV0 : 2; /*!< [5..4] Main Clock Oscillator Drive Capability 0 Switching */ - __IOM uint8_t MOSEL : 1; /*!< [6..6] Main Clock Oscillator Switching */ - __IOM uint8_t AUTODRVEN : 1; /*!< [7..7] Main Clock Oscillator Drive Capability Auto Switching - * Enable */ - } MOMCR_b; + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D1FIFOCTR_b; }; - __IM uint16_t RESERVED36; union { - __IOM uint8_t FWEPROR; /*!< (@ 0x00000416) Flash P/E Protect Register */ + __IOM uint16_t INTENB0; /*!< (@ 0x00000030) Interrupt Enable Register 0 */ struct { - __IOM uint8_t FLWE : 2; /*!< [1..0] Flash Programming and Erasure */ - uint8_t : 6; - } FWEPROR_b; + uint16_t : 8; + __IOM uint16_t BRDYE : 1; /*!< [8..8] Buffer Ready Interrupt Enable */ + __IOM uint16_t NRDYE : 1; /*!< [9..9] Buffer Not Ready Response Interrupt Enable */ + __IOM uint16_t BEMPE : 1; /*!< [10..10] Buffer Empty Interrupt Enable */ + __IOM uint16_t CTRE : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Enable */ + __IOM uint16_t DVSE : 1; /*!< [12..12] Device State Transition Interrupt Enable */ + __IOM uint16_t SOFE : 1; /*!< [13..13] Frame Number Update Interrupt Enable */ + __IOM uint16_t RSME : 1; /*!< [14..14] Resume Interrupt Enable */ + __IOM uint16_t VBSE : 1; /*!< [15..15] VBUS Interrupt Enable */ + } INTENB0_b; }; union { - __IOM uint8_t LVCMPCR; /*!< (@ 0x00000417) Voltage Monitor Circuit Control Register */ + __IOM uint16_t INTENB1; /*!< (@ 0x00000032) Interrupt Enable Register 1 */ struct { - uint8_t : 5; - __IOM uint8_t LVD1E : 1; /*!< [5..5] Voltage Detection 1 Enable */ - __IOM uint8_t LVD2E : 1; /*!< [6..6] Voltage Detection 2 Enable */ - uint8_t : 1; - } LVCMPCR_b; + __IOM uint16_t PDDETINTE0 : 1; /*!< [0..0] PDDETINT0 Detection Interrupt Enable */ + uint16_t : 3; + __IOM uint16_t SACKE : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Enable */ + __IOM uint16_t SIGNE : 1; /*!< [5..5] Setup Transaction Error Interrupt Enable */ + __IOM uint16_t EOFERRE : 1; /*!< [6..6] EOF Error Detection Interrupt Enable */ + uint16_t : 4; + __IOM uint16_t ATTCHE : 1; /*!< [11..11] Connection Detection Interrupt Enable */ + __IOM uint16_t DTCHE : 1; /*!< [12..12] Disconnection Detection Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t BCHGE : 1; /*!< [14..14] USB Bus Change Interrupt Enable */ + __IOM uint16_t OVRCRE : 1; /*!< [15..15] Overcurrent Input Change Interrupt Enable */ + } INTENB1_b; }; + __IM uint16_t RESERVED7; union { - __IOM uint8_t LVDLVLR; /*!< (@ 0x00000418) Voltage Detection Level Select Register */ + __IOM uint16_t BRDYENB; /*!< (@ 0x00000036) BRDY Interrupt Enable Register */ struct { - __IOM uint8_t LVD1LVL : 5; /*!< [4..0] Voltage Detection 1 Level Select (Standard voltage during - * fall in voltage) */ - __IOM uint8_t LVD2LVL : 3; /*!< [7..5] Voltage Detection 2 Level Select (Standard voltage during - * fall in voltage) */ - } LVDLVLR_b; + __IOM uint16_t PIPE0BRDYE : 1; /*!< [0..0] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1BRDYE : 1; /*!< [1..1] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2BRDYE : 1; /*!< [2..2] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3BRDYE : 1; /*!< [3..3] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4BRDYE : 1; /*!< [4..4] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5BRDYE : 1; /*!< [5..5] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6BRDYE : 1; /*!< [6..6] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7BRDYE : 1; /*!< [7..7] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8BRDYE : 1; /*!< [8..8] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9BRDYE : 1; /*!< [9..9] BRDY Interrupt Enable for PIPE */ + uint16_t : 6; + } BRDYENB_b; }; - __IM uint8_t RESERVED37; union { - __IOM uint8_t LVD1CR0; /*!< (@ 0x0000041A) Voltage Monitor 1 Circuit Control Register 0 */ + __IOM uint16_t NRDYENB; /*!< (@ 0x00000038) NRDY Interrupt Enable Register */ struct { - __IOM uint8_t RIE : 1; /*!< [0..0] Voltage Monitor Interrupt/Reset Enable */ - __IOM uint8_t DFDIS : 1; /*!< [1..1] Voltage Monitor Digital Filter Disable Mode Select */ - __IOM uint8_t CMPE : 1; /*!< [2..2] Voltage Monitor Circuit Comparison Result Output Enable */ - uint8_t : 1; - __IOM uint8_t FSAMP : 2; /*!< [5..4] Sampling Clock Select */ - __IOM uint8_t RI : 1; /*!< [6..6] Voltage Monitor Circuit Mode Select */ - __IOM uint8_t RN : 1; /*!< [7..7] Voltage Monitor Reset Negate Select */ - } LVD1CR0_b; + __IOM uint16_t PIPE0NRDYE : 1; /*!< [0..0] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1NRDYE : 1; /*!< [1..1] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2NRDYE : 1; /*!< [2..2] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3NRDYE : 1; /*!< [3..3] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4NRDYE : 1; /*!< [4..4] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5NRDYE : 1; /*!< [5..5] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6NRDYE : 1; /*!< [6..6] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7NRDYE : 1; /*!< [7..7] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8NRDYE : 1; /*!< [8..8] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9NRDYE : 1; /*!< [9..9] NRDY Interrupt Enable for PIPE */ + uint16_t : 6; + } NRDYENB_b; }; union { - __IOM uint8_t LVD2CR0; /*!< (@ 0x0000041B) Voltage Monitor 2 Circuit Control Register 0 */ + __IOM uint16_t BEMPENB; /*!< (@ 0x0000003A) BEMP Interrupt Enable Register */ - struct - { - __IOM uint8_t RIE : 1; /*!< [0..0] Voltage Monitor Interrupt/Reset Enable */ - __IOM uint8_t DFDIS : 1; /*!< [1..1] Voltage Monitor Digital Filter Disable Mode Select */ - __IOM uint8_t CMPE : 1; /*!< [2..2] Voltage Monitor Circuit Comparison Result Output Enable */ - uint8_t : 1; - __IOM uint8_t FSAMP : 2; /*!< [5..4] Sampling Clock Select */ - __IOM uint8_t RI : 1; /*!< [6..6] Voltage Monitor Circuit Mode Select */ - __IOM uint8_t RN : 1; /*!< [7..7] Voltage Monitor Reset Negate Select */ - } LVD2CR0_b; + struct + { + __IOM uint16_t PIPE0BEMPE : 1; /*!< [0..0] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1BEMPE : 1; /*!< [1..1] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2BEMPE : 1; /*!< [2..2] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3BEMPE : 1; /*!< [3..3] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4BEMPE : 1; /*!< [4..4] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5BEMPE : 1; /*!< [5..5] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6BEMPE : 1; /*!< [6..6] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7BEMPE : 1; /*!< [7..7] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8BEMPE : 1; /*!< [8..8] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9BEMPE : 1; /*!< [9..9] BEMP Interrupt Enable for PIPE */ + uint16_t : 6; + } BEMPENB_b; }; - __IM uint16_t RESERVED38; - __IM uint8_t RESERVED39; union { - __IOM uint8_t VBTCR1; /*!< (@ 0x0000041F) VBATT Control Register1 */ + __IOM uint16_t SOFCFG; /*!< (@ 0x0000003C) SOF Output Configuration Register */ struct { - __IOM uint8_t BPWSWSTP : 1; /*!< [0..0] Battery Power supply Switch Stop */ - uint8_t : 7; - } VBTCR1_b; + uint16_t : 4; + __IM uint16_t EDGESTS : 1; /*!< [4..4] Edge Interrupt Output Status Monitor */ + __IOM uint16_t INTL : 1; /*!< [5..5] Interrupt Output Sense Select */ + __IOM uint16_t BRDYM : 1; /*!< [6..6] BRDY Interrupt Status Clear Timing */ + uint16_t : 1; + __IOM uint16_t TRNENSEL : 1; /*!< [8..8] Transaction-Enabled Time Select */ + uint16_t : 7; + } SOFCFG_b; }; - __IM uint32_t RESERVED40[24]; union { - __IOM uint8_t SOSCCR; /*!< (@ 0x00000480) Sub-Clock Oscillator Control Register */ + __IOM uint16_t PHYSET; /*!< (@ 0x0000003E) PHY Setting Register */ struct { - __IOM uint8_t SOSTP : 1; /*!< [0..0] Sub-Clock Oscillator Stop */ - uint8_t : 7; - } SOSCCR_b; + __IOM uint16_t DIRPD : 1; /*!< [0..0] Power-Down Control */ + __IOM uint16_t PLLRESET : 1; /*!< [1..1] PLL Reset Control */ + uint16_t : 1; + __IOM uint16_t CDPEN : 1; /*!< [3..3] Charging Downstream Port Enable */ + __IOM uint16_t CLKSEL : 2; /*!< [5..4] Input System Clock Frequency */ + uint16_t : 2; + __IOM uint16_t REPSEL : 2; /*!< [9..8] Terminating Resistance Adjustment Cycle */ + uint16_t : 1; + __IOM uint16_t REPSTART : 1; /*!< [11..11] Forcibly Start Terminating Resistance Adjustment */ + uint16_t : 3; + __IOM uint16_t HSEB : 1; /*!< [15..15] CL-Only Mode */ + } PHYSET_b; }; union { - __IOM uint8_t SOMCR; /*!< (@ 0x00000481) Sub Clock Oscillator Mode Control Register */ + __IOM uint16_t INTSTS0; /*!< (@ 0x00000040) Interrupt Status Register 0 */ struct { - __IOM uint8_t SODRV : 2; /*!< [1..0] Sub-Clock Oscillator Drive Capability Switching */ - uint8_t : 6; - } SOMCR_b; + __IM uint16_t CTSQ : 3; /*!< [2..0] Control Transfer Stage */ + __IOM uint16_t VALID : 1; /*!< [3..3] USB Request Reception */ + __IM uint16_t DVSQ : 3; /*!< [6..4] Device State */ + __IM uint16_t VBSTS : 1; /*!< [7..7] VBUS Input Status */ + __IM uint16_t BRDY : 1; /*!< [8..8] Buffer Ready Interrupt Status */ + __IM uint16_t NRDY : 1; /*!< [9..9] Buffer Not Ready Interrupt Status */ + __IM uint16_t BEMP : 1; /*!< [10..10] Buffer Empty Interrupt Status */ + __IOM uint16_t CTRT : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Status */ + __IOM uint16_t DVST : 1; /*!< [12..12] Device State Transition Interrupt Status */ + __IOM uint16_t SOFR : 1; /*!< [13..13] Frame Number Refresh Interrupt Status */ + __IOM uint16_t RESM : 1; /*!< [14..14] Resume Interrupt Status */ + __IOM uint16_t VBINT : 1; /*!< [15..15] VBUS Interrupt Status */ + } INTSTS0_b; }; - __IM uint16_t RESERVED41; - __IM uint32_t RESERVED42[3]; union { - __IOM uint8_t LOCOCR; /*!< (@ 0x00000490) Low-Speed On-Chip Oscillator Control Register */ + __IOM uint16_t INTSTS1; /*!< (@ 0x00000042) Interrupt Status Register 1 */ struct { - __IOM uint8_t LCSTP : 1; /*!< [0..0] LOCO Stop */ - uint8_t : 7; - } LOCOCR_b; + __IOM uint16_t PDDETINT0 : 1; /*!< [0..0] PDDET0 Detection Interrupt Status */ + uint16_t : 3; + __IOM uint16_t SACK : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Status */ + __IOM uint16_t SIGN : 1; /*!< [5..5] Setup Transaction Error Interrupt Status */ + __IOM uint16_t EOFERR : 1; /*!< [6..6] EOF Error Detection Interrupt Status */ + uint16_t : 1; + __IOM uint16_t LPMEND : 1; /*!< [8..8] LPM Transaction End Interrupt Status */ + __IOM uint16_t L1RSMEND : 1; /*!< [9..9] L1 Resume End Interrupt Status */ + uint16_t : 1; + __IOM uint16_t ATTCH : 1; /*!< [11..11] ATTCH Interrupt Status */ + __IOM uint16_t DTCH : 1; /*!< [12..12] USB Disconnection Detection Interrupt Status */ + uint16_t : 1; + __IOM uint16_t BCHG : 1; /*!< [14..14] USB Bus Change Interrupt Status */ + __IOM uint16_t OVRCR : 1; /*!< [15..15] Overcurrent Input Change Interrupt Status */ + } INTSTS1_b; }; - __IM uint8_t RESERVED43; + __IM uint16_t RESERVED8; union { - __IOM uint8_t LOCOUTCR; /*!< (@ 0x00000492) LOCO User Trimming Control Register */ + __IOM uint16_t BRDYSTS; /*!< (@ 0x00000046) BRDY Interrupt Status Register */ struct { - __IOM uint8_t LOCOUTRM : 8; /*!< [7..0] LOCO User Trimming 1000_0000 : -128 1000_0001 : -127 - * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center - * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : - +126 0111_1111 : +127These bits are added to original LOCO - * trimming bits */ - } LOCOUTCR_b; + __IOM uint16_t PIPE0BRDY : 1; /*!< [0..0] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE1BRDY : 1; /*!< [1..1] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE2BRDY : 1; /*!< [2..2] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE3BRDY : 1; /*!< [3..3] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE4BRDY : 1; /*!< [4..4] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE5BRDY : 1; /*!< [5..5] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE6BRDY : 1; /*!< [6..6] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE7BRDY : 1; /*!< [7..7] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE8BRDY : 1; /*!< [8..8] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE9BRDY : 1; /*!< [9..9] BRDY Interrupt Status for PIPE */ + uint16_t : 6; + } BRDYSTS_b; }; - __IM uint8_t RESERVED44; - __IM uint32_t RESERVED45[7]; union { - __IOM uint8_t VBTCR2; /*!< (@ 0x000004B0) VBATT Control Register2 */ + __IOM uint16_t NRDYSTS; /*!< (@ 0x00000048) NRDY Interrupt Status Register */ struct { - uint8_t : 4; - __IOM uint8_t VBTLVDEN : 1; /*!< [4..4] VBATT Pin Low Voltage Detect Enable Bit */ - uint8_t : 1; - __IOM uint8_t VBTLVDLVL : 2; /*!< [7..6] VBATT Pin Voltage Low Voltage Detect Level Select Bit */ - } VBTCR2_b; + __IOM uint16_t PIPE0NRDY : 1; /*!< [0..0] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE1NRDY : 1; /*!< [1..1] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE2NRDY : 1; /*!< [2..2] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE3NRDY : 1; /*!< [3..3] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE4NRDY : 1; /*!< [4..4] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE5NRDY : 1; /*!< [5..5] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE6NRDY : 1; /*!< [6..6] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE7NRDY : 1; /*!< [7..7] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE8NRDY : 1; /*!< [8..8] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE9NRDY : 1; /*!< [9..9] NRDY Interrupt Status for PIPE */ + uint16_t : 6; + } NRDYSTS_b; }; union { - __IOM uint8_t VBTSR; /*!< (@ 0x000004B1) VBATT Status Register */ + __IOM uint16_t BEMPSTS; /*!< (@ 0x0000004A) BEMP Interrupt Status Register */ struct { - __IOM uint8_t VBTRDF : 1; /*!< [0..0] VBAT_R Reset Detect Flag */ - __IOM uint8_t VBTBLDF : 1; /*!< [1..1] VBATT Battery Low voltage Detect Flag */ - uint8_t : 2; - __IM uint8_t VBTRVLD : 1; /*!< [4..4] VBATT_R Valid */ - uint8_t : 3; - } VBTSR_b; + __IOM uint16_t PIPE0BEMP : 1; /*!< [0..0] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE1BEMP : 1; /*!< [1..1] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE2BEMP : 1; /*!< [2..2] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE3BEMP : 1; /*!< [3..3] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE4BEMP : 1; /*!< [4..4] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE5BEMP : 1; /*!< [5..5] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE6BEMP : 1; /*!< [6..6] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE7BEMP : 1; /*!< [7..7] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE8BEMP : 1; /*!< [8..8] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE9BEMP : 1; /*!< [9..9] BEMP Interrupt Status for PIPE */ + uint16_t : 6; + } BEMPSTS_b; }; union { - __IOM uint8_t VBTCMPCR; /*!< (@ 0x000004B2) VBATT Comparator Control Register */ + __IOM uint16_t FRMNUM; /*!< (@ 0x0000004C) Frame Number Register */ struct { - __IOM uint8_t VBTCMPE : 1; /*!< [0..0] VBATT pin low voltage detect circuit output enable */ - uint8_t : 7; - } VBTCMPCR_b; + __IM uint16_t FRNM : 11; /*!< [10..0] Frame NumberLatest frame number */ + uint16_t : 3; + __IOM uint16_t CRCE : 1; /*!< [14..14] Receive Data Error */ + __IOM uint16_t OVRN : 1; /*!< [15..15] Overrun/Underrun Detection Status */ + } FRMNUM_b; }; - __IM uint8_t RESERVED46; union { - __IOM uint8_t VBTLVDICR; /*!< (@ 0x000004B4) VBATT Pin Low Voltage Detect Interrupt Control - * Register */ + __IOM uint16_t UFRMNUM; /*!< (@ 0x0000004E) uFrame Number Register */ struct { - __IOM uint8_t VBTLVDIE : 1; /*!< [0..0] VBATT Pin Low Voltage Detect Interrupt Enable bit */ - __IOM uint8_t VBTLVDISEL : 1; /*!< [1..1] Pin Low Voltage Detect Interrupt Select bit */ - uint8_t : 6; - } VBTLVDICR_b; + __IM uint16_t UFRNM : 3; /*!< [2..0] MicroframeIndicate the microframe number. */ + uint16_t : 12; + __IOM uint16_t DVCHG : 1; /*!< [15..15] Device State Change */ + } UFRMNUM_b; }; - __IM uint8_t RESERVED47; union { - __IOM uint8_t VBTWCTLR; /*!< (@ 0x000004B6) VBATT Wakeup function Control Register */ + __IOM uint16_t USBADDR; /*!< (@ 0x00000050) USB Address Register */ struct { - __IOM uint8_t VWEN : 1; /*!< [0..0] VBATT wakeup enable */ - uint8_t : 7; - } VBTWCTLR_b; + __IM uint16_t USBADDR : 7; /*!< [6..0] USB Address In device controller mode, these flags indicate + * the USB address assigned by the host when the USBHS processed + * the SET_ADDRESS request successfully. */ + uint16_t : 1; + __IOM uint16_t STSRECOV0 : 3; /*!< [10..8] Status Recovery */ + uint16_t : 5; + } USBADDR_b; }; - __IM uint8_t RESERVED48; + __IM uint16_t RESERVED9; union { - __IOM uint8_t VBTWCH0OTSR; /*!< (@ 0x000004B8) VBATT Wakeup I/O 0 Output Trigger Select Register */ + __IOM uint16_t USBREQ; /*!< (@ 0x00000054) USB Request Type Register */ struct { - uint8_t : 1; - __IOM uint8_t CH0VCH1TE : 1; /*!< [1..1] VBATWIO0 Output VBATWIO1 Trigger Enable */ - __IOM uint8_t CH0VCH2TE : 1; /*!< [2..2] VBATWIO0 Output VBATWIO2 Trigger Enable */ - __IOM uint8_t CH0VRTCTE : 1; /*!< [3..3] VBATWIO0 Output RTC Periodic Signal Enable */ - __IOM uint8_t CH0VRTCATE : 1; /*!< [4..4] VBATWIO0 Output RTC Alarm Signal Enable */ - __IOM uint8_t CH0VAGTUTE : 1; /*!< [5..5] CH0 Output AGT(ch1) underflow Signal Enable */ - uint8_t : 2; - } VBTWCH0OTSR_b; + __IOM uint16_t BMREQUESTTYPE : 8; /*!< [7..0] Request TypeThese bits store the USB request bmRequestType + * value. */ + __IOM uint16_t BREQUEST : 8; /*!< [15..8] RequestThese bits store the USB request bRequest value. */ + } USBREQ_b; }; union { - __IOM uint8_t VBTWCH1OTSR; /*!< (@ 0x000004B9) VBATT Wakeup I/O 1 Output Trigger Select Register */ + __IOM uint16_t USBVAL; /*!< (@ 0x00000056) USB Request Value Register */ struct { - __IOM uint8_t CH1VCH0TE : 1; /*!< [0..0] VBATWIO1 Output VBATWIO0 Trigger Enable */ - uint8_t : 1; - __IOM uint8_t CH1VCH2TE : 1; /*!< [2..2] VBATWIO1 Output VBATWIO2 Trigger Enable */ - __IOM uint8_t CH1VRTCTE : 1; /*!< [3..3] VBATWIO1 Output RTC Periodic Signal Enable */ - __IOM uint8_t CH1VRTCATE : 1; /*!< [4..4] VBATWIO1 Output RTC Alarm Signal Enable */ - __IOM uint8_t CH1VAGTUTE : 1; /*!< [5..5] CH1 Output AGT(ch1) underflow Signal Enable */ - uint8_t : 2; - } VBTWCH1OTSR_b; + __IOM uint16_t WVALUE : 16; /*!< [15..0] ValueThese bits store the USB request Value value. */ + } USBVAL_b; }; union { - __IOM uint8_t VBTWCH2OTSR; /*!< (@ 0x000004BA) VBATT Wakeup I/O 2 Output Trigger Select Register */ + __IOM uint16_t USBINDX; /*!< (@ 0x00000058) USB Request Index Register */ struct { - __IOM uint8_t CH2VCH0TE : 1; /*!< [0..0] VBATWIO2 Output VBATWIO0 Trigger Enable */ - __IOM uint8_t CH2VCH1TE : 1; /*!< [1..1] VBATWIO2 Output VBATWIO1 Trigger Enable */ - uint8_t : 1; - __IOM uint8_t CH2VRTCTE : 1; /*!< [3..3] VBATWIO2 Output RTC Periodic Signal Enable */ - __IOM uint8_t CH2VRTCATE : 1; /*!< [4..4] VBATWIO2 Output RTC Alarm Signal Enable */ - __IOM uint8_t CH2VAGTUTE : 1; /*!< [5..5] CH2 Output AGT(CH2) underflow Signal Enable */ - uint8_t : 2; - } VBTWCH2OTSR_b; + __IOM uint16_t WINDEX : 16; /*!< [15..0] IndexThese bits store the USB request wIndex value. */ + } USBINDX_b; }; union { - __IOM uint8_t VBTICTLR; /*!< (@ 0x000004BB) VBATT Input Control Register */ + __IOM uint16_t USBLENG; /*!< (@ 0x0000005A) USB Request Length Register */ struct { - __IOM uint8_t VCH0INEN : 1; /*!< [0..0] RTCIC0 Input Enable */ - __IOM uint8_t VCH1INEN : 1; /*!< [1..1] RTCIC1 Input Enable */ - __IOM uint8_t VCH2INEN : 1; /*!< [2..2] RTCIC2 Input Enable */ - uint8_t : 5; - } VBTICTLR_b; + __IOM uint16_t WLENGTH : 16; /*!< [15..0] LengthThese bits store the USB request wLength value. */ + } USBLENG_b; }; union { - __IOM uint8_t VBTOCTLR; /*!< (@ 0x000004BC) VBATT Output Control Register */ + __IOM uint16_t DCPCFG; /*!< (@ 0x0000005C) DCP Configuration Register */ struct { - __IOM uint8_t VCH0OEN : 1; /*!< [0..0] VBATT Wakeup I/O 0 Output Enable */ - __IOM uint8_t VCH1OEN : 1; /*!< [1..1] VBATT Wakeup I/O 1 Output Enable */ - __IOM uint8_t VCH2OEN : 1; /*!< [2..2] VBATT Wakeup I/O 2 Output Enable */ - __IOM uint8_t VOUT0LSEL : 1; /*!< [3..3] VBATT Wakeup I/O 0 Output Level Selection */ - __IOM uint8_t VCOU1LSEL : 1; /*!< [4..4] VBATT Wakeup I/O 1 Output Level Selection */ - __IOM uint8_t VOUT2LSEL : 1; /*!< [5..5] VBATT Wakeup I/O 2 Output Level Selection */ - uint8_t : 2; - } VBTOCTLR_b; + uint16_t : 4; + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ + uint16_t : 2; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ + __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ + uint16_t : 7; + } DCPCFG_b; }; union { - __IOM uint8_t VBTWTER; /*!< (@ 0x000004BD) VBATT Wakeup Trigger source Enable Register */ + __IOM uint16_t DCPMAXP; /*!< (@ 0x0000005E) DCP Maximum Packet Size Register */ struct { - __IOM uint8_t VCH0E : 1; /*!< [0..0] VBATWIO0 Pin Enable */ - __IOM uint8_t VCH1E : 1; /*!< [1..1] VBATWIO1 Pin Enable */ - __IOM uint8_t VCH2E : 1; /*!< [2..2] VBATWIO2 Pin Enable */ - __IOM uint8_t VRTCIE : 1; /*!< [3..3] RTC Periodic Signal Enable */ - __IOM uint8_t VRTCAE : 1; /*!< [4..4] RTC Alarm Signal Enable */ - __IOM uint8_t VAGTUE : 1; /*!< [5..5] AGT(ch1) underflow Signal Enable */ - uint8_t : 2; - } VBTWTER_b; + __IOM uint16_t MXPS : 7; /*!< [6..0] Maximum Packet SizeThese bits set the maximum amount + * of data (maximum packet size) in payloads for the DCP. */ + uint16_t : 5; + __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ + } DCPMAXP_b; }; union { - __IOM uint8_t VBTWEGR; /*!< (@ 0x000004BE) VBATT Wakeup Trigger source Edge Register */ + __IOM uint16_t DCPCTR; /*!< (@ 0x00000060) DCP Control Register */ struct { - __IOM uint8_t VCH0EG : 1; /*!< [0..0] VBATWIO0 Wakeup Trigger Source Edge Select */ - __IOM uint8_t VCH1EG : 1; /*!< [1..1] VBATWIO1 Wakeup Trigger Source Edge Select */ - __IOM uint8_t VCH2EG : 1; /*!< [2..2] VBATWIO2 Wakeup Trigger Source Edge Select */ - uint8_t : 5; - } VBTWEGR_b; + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + __IOM uint16_t CCPL : 1; /*!< [2..2] Control Transfer End Enable */ + uint16_t : 2; + __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Monitor */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ + uint16_t : 2; + __IOM uint16_t SUREQCLR : 1; /*!< [11..11] SUREQ Bit Clear */ + uint16_t : 2; + __IOM uint16_t SUREQ : 1; /*!< [14..14] Setup Token Transmission */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } DCPCTR_b; }; + __IM uint16_t RESERVED10; union { - __IOM uint8_t VBTWFR; /*!< (@ 0x000004BF) VBATT Wakeup trigger source Flag Register */ + __IOM uint16_t PIPESEL; /*!< (@ 0x00000064) Pipe Window Select Register */ struct { - __IOM uint8_t VCH0F : 1; /*!< [0..0] VBATWIO0 Wakeup Trigger Flag */ - __IOM uint8_t VCH1F : 1; /*!< [1..1] VBATWIO1 Wakeup Trigger Flag */ - __IOM uint8_t VCH2F : 1; /*!< [2..2] VBATWIO2 Wakeup Trigger Flag */ - __IOM uint8_t VRTCIF : 1; /*!< [3..3] VBATT RTC-Interval Wakeup Trigger Flag */ - __IOM uint8_t VRTCAF : 1; /*!< [4..4] VBATT RTC-Alarm Wakeup Trigger Flag */ - __IOM uint8_t VAGTUF : 1; /*!< [5..5] AGT(ch1) underflow VBATT Wakeup Trigger Flag */ - uint8_t : 2; - } VBTWFR_b; + __IOM uint16_t PIPESEL : 4; /*!< [3..0] Pipe Window Select */ + uint16_t : 12; + } PIPESEL_b; }; - __IM uint32_t RESERVED49[16]; + __IM uint16_t RESERVED11; union { - __IOM uint8_t VBTBKR[512]; /*!< (@ 0x00000500) VBATT Backup Register [0..511] */ + __IOM uint16_t PIPECFG; /*!< (@ 0x00000068) Pipe Configuration Register */ struct { - __IOM uint8_t VBTBKR : 8; /*!< [7..0] VBTBKR is a 512-byte readable/writable register to store - * data powered by VBATT.The value of this register is retained - * even when VCC is not powered but VBATT is powered.VBTBKR - * is initialized by VBATT selected voltage power-on-reset. */ - } VBTBKR_b[512]; + __IOM uint16_t EPNUM : 4; /*!< [3..0] Endpoint NumberThese bits specify the endpoint number + * for the selected pipe.Setting 0000b means unused pipe. */ + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ + uint16_t : 2; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ + uint16_t : 1; + __IOM uint16_t DBLB : 1; /*!< [9..9] Double Buffer Mode */ + __IOM uint16_t BFRE : 1; /*!< [10..10] BRDY Interrupt Operation Specification */ + uint16_t : 3; + __IOM uint16_t TYPE : 2; /*!< [15..14] Transfer Type */ + } PIPECFG_b; }; -} R_SYSTEM_Type; /*!< Size = 1792 (0x700) */ - -/* =========================================================================================================================== */ -/* ================ R_TSN ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Temperature Sensor (R_TSN) - */ - -typedef struct /*!< (@ 0x407EC000) R_TSN Structure */ -{ - __IM uint8_t RESERVED[552]; + __IM uint16_t RESERVED12; union { - __IM uint8_t TSCDRL; /*!< (@ 0x00000228) Temperature Sensor Calibration Data Register - * L */ + __IOM uint16_t PIPEMAXP; /*!< (@ 0x0000006C) Pipe Maximum Packet Size Register */ struct { - __IM uint8_t TSCDRL : 8; /*!< [7..0] The calibration data stores the lower 8 bits of the converted - * value. */ - } TSCDRL_b; + __IOM uint16_t MXPS : 9; /*!< [8..0] Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to + * 256 bytes (100h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes + * (010h), 32 bytes (020h), 64 bytes (040h) (Bits [8:7] and + * [2:0] are not provided.)PIPE6 to PIPE9: 1 byte (001h) to + * 64 bytes (040h) (Bits [8:7] are not provided.) */ + uint16_t : 3; + __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ + } PIPEMAXP_b; }; union { - __IM uint8_t TSCDRH; /*!< (@ 0x00000229) Temperature Sensor Calibration Data Register - * H */ + __IOM uint16_t PIPEPERI; /*!< (@ 0x0000006E) Pipe Cycle Control Register */ struct { - __IM uint8_t TSCDRH : 8; /*!< [7..0] The calibration data stores the higher 8 bits of the - * convertedvalue. */ - } TSCDRH_b; + __IOM uint16_t IITV : 3; /*!< [2..0] Interval Error Detection IntervalSpecifies the interval + * error detection timing for the selected pipe in terms of + * frames, which is expressed as nth power of 2. */ + uint16_t : 9; + __IOM uint16_t IFIS : 1; /*!< [12..12] Isochronous IN Buffer Flush */ + uint16_t : 3; + } PIPEPERI_b; }; -} R_TSN_Type; /*!< Size = 554 (0x22a) */ - -/* =========================================================================================================================== */ -/* ================ R_TSN_CAL ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Temperature Sensor (R_TSN_CAL) - */ -typedef struct /*!< (@ 0x407FB17C) R_TSN_CAL Structure */ -{ union { - __IM uint32_t TSCDR; /*!< (@ 0x00000000) Temperature Sensor 32 bit Calibration Data Register */ + __IOM uint16_t PIPE_CTR[9]; /*!< (@ 0x00000070) Pipe [0..8] Control Register */ struct { - __IM uint32_t TSCDR : 32; /*!< [31..0] The 32 bit TSCDR register stores temperature sensor - * calibration converted value. */ - } TSCDR_b; + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + uint16_t : 3; + __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Confirmation */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ + __IOM uint16_t ACLRM : 1; /*!< [9..9] Auto Buffer Clear Mode */ + __IOM uint16_t ATREPM : 1; /*!< [10..10] Auto Response Mode */ + uint16_t : 1; + __IM uint16_t CSSTS : 1; /*!< [12..12] CSSTS StatusThis bit indicates the CSPLIT status of + * Split Transaction of the relevant pipe */ + __IOM uint16_t CSCLR : 1; /*!< [13..13] CSPLIT Status ClearSet this bit to 1 when clearing + * the CSSTS bit of the relevant pipe */ + __IM uint16_t INBUFM : 1; /*!< [14..14] Transmit Buffer Monitor */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } PIPE_CTR_b[9]; }; -} R_TSN_CAL_Type; /*!< Size = 4 (0x4) */ - -/* =========================================================================================================================== */ -/* ================ R_TSN_CTRL ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Temperature Sensor (R_TSN_CTRL) - */ + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14[3]; + __IOM R_USB_FS0_PIPE_TR_Type PIPE_TR[5]; /*!< (@ 0x00000090) Pipe Transaction Counter Registers */ + __IM uint32_t RESERVED15[3]; -typedef struct /*!< (@ 0x4005D000) R_TSN_CTRL Structure */ -{ union { - __IOM uint8_t TSCR; /*!< (@ 0x00000000) Temperature Sensor Control Register */ + __IOM uint16_t USBBCCTRL0; /*!< (@ 0x000000B0) BC Control Register 0 */ struct { - uint8_t : 4; - __IOM uint8_t TSOE : 1; /*!< [4..4] Temperature Sensor Enable */ - uint8_t : 2; - __IOM uint8_t TSEN : 1; /*!< [7..7] Temperature Sensor Output Enable */ - } TSCR_b; + __IOM uint16_t RPDME0 : 1; /*!< [0..0] D- Pin Pull-Down Control */ + __IOM uint16_t IDPSRCE0 : 1; /*!< [1..1] D+ Pin IDPSRC Output Control */ + __IOM uint16_t IDMSINKE0 : 1; /*!< [2..2] D- Pin 0.6 V Input Detection (Comparator and Sink) Control */ + __IOM uint16_t VDPSRCE0 : 1; /*!< [3..3] D+ Pin VDPSRC (0.6 V) Output Control */ + __IOM uint16_t IDPSINKE0 : 1; /*!< [4..4] D+ Pin 0.6 V Input Detection (Comparator and Sink) Control */ + __IOM uint16_t VDMSRCE0 : 1; /*!< [5..5] D- Pin VDMSRC (0.6 V) Output Control */ + uint16_t : 1; + __IOM uint16_t BATCHGE0 : 1; /*!< [7..7] BC (Battery Charger) Function Ch0 General Enable Control */ + __IM uint16_t CHGDETSTS0 : 1; /*!< [8..8] D- Pin 0.6 V Input Detection Status */ + __IM uint16_t PDDETSTS0 : 1; /*!< [9..9] D+ Pin 0.6 V Input Detection Status */ + uint16_t : 6; + } USBBCCTRL0_b; }; -} R_TSN_CTRL_Type; /*!< Size = 1 (0x1) */ - -/* =========================================================================================================================== */ -/* ================ R_USB_FS0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief USB 2.0 Module (R_USB_FS0) - */ + __IM uint16_t RESERVED16; + __IM uint32_t RESERVED17[4]; -typedef struct /*!< (@ 0x40090000) R_USB_FS0 Structure */ -{ union { - __IOM uint16_t SYSCFG; /*!< (@ 0x00000000) System Configuration Control Register */ + __IOM uint16_t UCKSEL; /*!< (@ 0x000000C4) USB Clock Selection Register */ struct { - __IOM uint16_t USBE : 1; /*!< [0..0] USB Operation Enable */ - uint16_t : 2; - __IOM uint16_t DMRPU : 1; /*!< [3..3] D- Line Resistor Control */ - __IOM uint16_t DPRPU : 1; /*!< [4..4] D+ Line Resistor Control */ - __IOM uint16_t DRPD : 1; /*!< [5..5] D+/D- Line Resistor Control */ - __IOM uint16_t DCFM : 1; /*!< [6..6] Controller Function Select */ - uint16_t : 1; - __IOM uint16_t CNEN : 1; /*!< [8..8] CNEN Single End Receiver Enable */ - uint16_t : 1; - __IOM uint16_t SCKE : 1; /*!< [10..10] USB Clock Enable */ - uint16_t : 5; - } SYSCFG_b; + __IOM uint16_t UCKSELC : 1; /*!< [0..0] USB Clock Selection */ + uint16_t : 15; + } UCKSEL_b; }; + __IM uint16_t RESERVED18; + __IM uint32_t RESERVED19; union { - __IOM uint16_t BUSWAIT; /*!< (@ 0x00000002) CPU Bus Wait Register */ + __IOM uint16_t USBMC; /*!< (@ 0x000000CC) USB Module Control Register */ struct { - __IOM uint16_t BWAIT : 4; /*!< [3..0] CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 - * access cycles) */ - uint16_t : 12; - } BUSWAIT_b; + __IOM uint16_t VDDUSBE : 1; /*!< [0..0] USB Reference Power Supply Circuit On/Off Control */ + uint16_t : 6; + __IOM uint16_t VDCEN : 1; /*!< [7..7] USB Regulator On/Off Control */ + uint16_t : 8; + } USBMC_b; }; + __IM uint16_t RESERVED20; union { - __IM uint16_t SYSSTS0; /*!< (@ 0x00000004) System Configuration Status Register 0 */ + __IOM uint16_t DEVADD[10]; /*!< (@ 0x000000D0) Device Address Configuration Register */ struct { - __IM uint16_t LNST : 2; /*!< [1..0] USB Data Line Status Monitor */ - __IM uint16_t IDMON : 1; /*!< [2..2] External ID0 Input Pin Monitor */ - uint16_t : 2; - __IM uint16_t SOFEA : 1; /*!< [5..5] SOF Active Monitor While Host Controller Function is - * Selected. */ - __IM uint16_t HTACT : 1; /*!< [6..6] USB Host Sequencer Status Monitor */ - uint16_t : 7; - __IM uint16_t OVCMON : 2; /*!< [15..14] External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe - * OCVMON[1] bit indicates the status of the USBHS_OVRCURA - * pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB - * pin. */ - } SYSSTS0_b; + uint16_t : 6; + __IOM uint16_t USBSPD : 2; /*!< [7..6] Transfer Speed of Communication Target Device */ + __IOM uint16_t HUBPORT : 3; /*!< [10..8] Communication Target Connecting Hub Port */ + __IOM uint16_t UPPHUB : 4; /*!< [14..11] Communication Target Connecting Hub Register */ + uint16_t : 1; + } DEVADD_b[10]; }; + __IM uint32_t RESERVED21[3]; union { - __IM uint16_t PLLSTA; /*!< (@ 0x00000006) PLL Status Register */ + __IOM uint32_t PHYSLEW; /*!< (@ 0x000000F0) PHY Cross Point Adjustment Register */ struct { - __IM uint16_t PLLLOCK : 1; /*!< [0..0] PLL Lock Flag */ - uint16_t : 15; - } PLLSTA_b; + __IOM uint32_t SLEWR00 : 1; /*!< [0..0] Receiver Cross Point Adjustment 00 */ + __IOM uint32_t SLEWR01 : 1; /*!< [1..1] Receiver Cross Point Adjustment 01 */ + __IOM uint32_t SLEWF00 : 1; /*!< [2..2] Receiver Cross Point Adjustment 00 */ + __IOM uint32_t SLEWF01 : 1; /*!< [3..3] Receiver Cross Point Adjustment 01 */ + uint32_t : 28; + } PHYSLEW_b; }; + __IM uint32_t RESERVED22[3]; union { - __IOM uint16_t DVSTCTR0; /*!< (@ 0x00000008) Device State Control Register 0 */ + __IOM uint16_t LPCTRL; /*!< (@ 0x00000100) Low Power Control Register */ struct { - __IM uint16_t RHST : 3; /*!< [2..0] USB Bus Reset Status */ - uint16_t : 1; - __IOM uint16_t UACT : 1; /*!< [4..4] USB Bus Enable */ - __IOM uint16_t RESUME : 1; /*!< [5..5] Resume Output */ - __IOM uint16_t USBRST : 1; /*!< [6..6] USB Bus Reset Output */ - __IOM uint16_t RWUPE : 1; /*!< [7..7] Wakeup Detection Enable */ - __IOM uint16_t WKUP : 1; /*!< [8..8] Wakeup Output */ - __IOM uint16_t VBUSEN : 1; /*!< [9..9] USB_VBUSEN Output Pin Control */ - __IOM uint16_t EXICEN : 1; /*!< [10..10] USB_EXICEN Output Pin Control */ - __IOM uint16_t HNPBTOA : 1; /*!< [11..11] Host Negotiation Protocol (HNP) Control This bit is - * used when switching from device B to device A while in - * OTG mode. If the HNPBTOA bit is 1, the internal function - * control keeps the suspended state until the HNP processing - * ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is - * set. */ - uint16_t : 4; - } DVSTCTR0_b; + uint16_t : 7; + __IOM uint16_t HWUPM : 1; /*!< [7..7] Resume Return Mode Setting */ + uint16_t : 8; + } LPCTRL_b; }; - __IM uint16_t RESERVED; union { - __IOM uint16_t TESTMODE; /*!< (@ 0x0000000C) USB Test Mode Register */ + __IOM uint16_t LPSTS; /*!< (@ 0x00000102) Low Power Status Register */ struct { - __IOM uint16_t UTST : 4; /*!< [3..0] Test Mode */ - uint16_t : 12; - } TESTMODE_b; + uint16_t : 14; + __IOM uint16_t SUSPENDM : 1; /*!< [14..14] UTMI SuspendM Control */ + uint16_t : 1; + } LPSTS_b; }; - __IM uint16_t RESERVED1; - __IM uint32_t RESERVED2; + __IM uint32_t RESERVED23[15]; union { - __IOM uint32_t CFIFO; /*!< (@ 0x00000014) CFIFO Port Register */ + __IOM uint16_t BCCTRL; /*!< (@ 0x00000140) Battery Charging Control Register */ struct { - union - { - __IOM uint16_t CFIFOL; /*!< (@ 0x00000014) CFIFO Port Register L */ - __IOM uint8_t CFIFOLL; /*!< (@ 0x00000014) CFIFO Port Register LL */ - }; - - union - { - __IOM uint16_t CFIFOH; /*!< (@ 0x00000016) CFIFO Port Register H */ - - struct - { - __IM uint8_t RESERVED3; - __IOM uint8_t CFIFOHH; /*!< (@ 0x00000017) CFIFO Port Register HH */ - }; - }; - }; + __IOM uint16_t IDPSRCE : 1; /*!< [0..0] IDPSRC Control */ + __IOM uint16_t IDMSINKE : 1; /*!< [1..1] IDMSINK Control */ + __IOM uint16_t VDPSRCE : 1; /*!< [2..2] VDPSRC Control */ + __IOM uint16_t IDPSINKE : 1; /*!< [3..3] IDPSINK Control */ + __IOM uint16_t VDMSRCE : 1; /*!< [4..4] VDMSRC Control */ + __IOM uint16_t DCPMODE : 1; /*!< [5..5] DCP Mode Control */ + uint16_t : 2; + __IM uint16_t CHGDETSTS : 1; /*!< [8..8] CHGDET Status */ + __IM uint16_t PDDETSTS : 1; /*!< [9..9] PDDET Status */ + uint16_t : 6; + } BCCTRL_b; }; + __IM uint16_t RESERVED24; union { - __IOM uint32_t D0FIFO; /*!< (@ 0x00000018) D0FIFO Port Register */ + __IOM uint16_t PL1CTRL1; /*!< (@ 0x00000144) Function L1 Control Register 1 */ struct { - union - { - __IOM uint16_t D0FIFOL; /*!< (@ 0x00000018) D0FIFO Port Register L */ - __IOM uint8_t D0FIFOLL; /*!< (@ 0x00000018) D0FIFO Port Register LL */ - }; - - union - { - __IOM uint16_t D0FIFOH; /*!< (@ 0x0000001A) D0FIFO Port Register H */ - - struct - { - __IM uint8_t RESERVED4; - __IOM uint8_t D0FIFOHH; /*!< (@ 0x0000001B) D0FIFO Port Register HH */ - }; - }; - }; + __IOM uint16_t L1RESPEN : 1; /*!< [0..0] L1 Response Enable */ + __IOM uint16_t L1RESPMD : 2; /*!< [2..1] L1 Response Mode */ + __IOM uint16_t L1NEGOMD : 1; /*!< [3..3] L1 Response Negotiation Control.NOTE: This bit is valid + * only when the L1RESPMD[1:0] value is 2'b11. */ + __IM uint16_t DVSQ : 4; /*!< [7..4] DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates + * the L1 state together with the device state bits DVSQ[2:0]. */ + __IOM uint16_t HIRDTHR : 4; /*!< [11..8] L1 Response Negotiation Threshold ValueHIRD threshold + * value used for L1NEGOMD.The format is the same as the HIRD + * field in HL1CTRL. */ + uint16_t : 2; + __IOM uint16_t L1EXTMD : 1; /*!< [14..14] PHY Control Mode at L1 Return */ + uint16_t : 1; + } PL1CTRL1_b; }; union { - __IOM uint32_t D1FIFO; /*!< (@ 0x0000001C) D1FIFO Port Register */ + __IOM uint16_t PL1CTRL2; /*!< (@ 0x00000146) Function L1 Control Register 2 */ struct { - union - { - __IOM uint16_t D1FIFOL; /*!< (@ 0x0000001C) D1FIFO Port Register L */ - __IOM uint8_t D1FIFOLL; /*!< (@ 0x0000001C) D1FIFO Port Register LL */ - }; - - union - { - __IOM uint16_t D1FIFOH; /*!< (@ 0x0000001E) D1FIFO Port Register H */ - - struct - { - __IM uint8_t RESERVED5; - __IOM uint8_t D1FIFOHH; /*!< (@ 0x0000001F) D1FIFO Port Register HH */ - }; - }; - }; + uint16_t : 8; + __IOM uint16_t HIRDMON : 4; /*!< [11..8] HIRD Value Monitor */ + __IOM uint16_t RWEMON : 1; /*!< [12..12] RWE Value Monitor */ + uint16_t : 3; + } PL1CTRL2_b; }; union { - __IOM uint16_t CFIFOSEL; /*!< (@ 0x00000020) CFIFO Port Select Register */ + __IOM uint16_t HL1CTRL1; /*!< (@ 0x00000148) Host L1 Control Register 1 */ struct { - __IOM uint16_t CURPIPE : 4; /*!< [3..0] CFIFO Port Access Pipe Specification */ - uint16_t : 1; - __IOM uint16_t ISEL : 1; /*!< [5..5] CFIFO Port Access Direction When DCP is Selected */ - uint16_t : 2; - __IOM uint16_t BIGEND : 1; /*!< [8..8] CFIFO Port Endian Control */ - uint16_t : 1; - __IOM uint16_t MBW : 2; /*!< [11..10] CFIFO Port Access Bit Width */ - uint16_t : 2; - __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ - __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ - } CFIFOSEL_b; + __IOM uint16_t L1REQ : 1; /*!< [0..0] L1 Transition Request */ + __IM uint16_t L1STATUS : 2; /*!< [2..1] L1 Request Completion Status */ + uint16_t : 13; + } HL1CTRL1_b; }; union { - __IOM uint16_t CFIFOCTR; /*!< (@ 0x00000022) CFIFO Port Control Register */ + __IOM uint16_t HL1CTRL2; /*!< (@ 0x0000014A) Host L1 Control Register 2 */ struct { - __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive - * data. */ - uint16_t : 1; - __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ - __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ - __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ - } CFIFOCTR_b; + __IOM uint16_t L1ADDR : 4; /*!< [3..0] LPM Token DeviceAddressThese bits specify the value to + * be set in the ADDR field of LPM token. */ + uint16_t : 4; + __IOM uint16_t HIRD : 4; /*!< [11..8] LPM Token HIRD */ + __IOM uint16_t L1RWE : 1; /*!< [12..12] LPM Token L1 RemoteWake EnableThese bits specify the + * value to be set in the RWE field of LPM token. */ + uint16_t : 2; + __IOM uint16_t BESL : 1; /*!< [15..15] BESL & Alternate HIRDThis bit selects the K-State drive + * period at the time of L1 Resume. */ + } HL1CTRL2_b; }; - __IM uint32_t RESERVED6; + __IM uint32_t RESERVED25[5]; union { - __IOM uint16_t D0FIFOSEL; /*!< (@ 0x00000028) D0FIFO Port Select Register */ + __IM uint32_t DPUSR0R; /*!< (@ 0x00000160) Deep Standby USB Transceiver Control/Pin Monitor + * Register */ struct { - __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ - uint16_t : 4; - __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ - uint16_t : 1; - __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ - __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ - __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified - * Pipe Data is Read */ - __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer RewindNote: Only 0 can be read. */ - __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ - } D0FIFOSEL_b; + uint32_t : 20; + __IM uint32_t DOVCAHM : 1; /*!< [20..20] OVRCURA InputIndicates OVRCURA input signal on the + * HS side of USB port. */ + __IM uint32_t DOVCBHM : 1; /*!< [21..21] OVRCURB InputIndicates OVRCURB input signal on the + * HS side of USB port. */ + uint32_t : 1; + __IM uint32_t DVBSTSHM : 1; /*!< [23..23] VBUS InputIndicates VBUS input signal on the HS side + * of USB port. */ + uint32_t : 8; + } DPUSR0R_b; }; union { - __IOM uint16_t D0FIFOCTR; /*!< (@ 0x0000002A) D0FIFO Port Control Register */ + __IOM uint32_t DPUSR1R; /*!< (@ 0x00000164) Deep Standby USB Suspend/Resume Interrupt Register */ struct { - __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive - * data. */ - uint16_t : 1; - __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ - __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ - __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ - } D0FIFOCTR_b; + uint32_t : 4; + __IOM uint32_t DOVCAHE : 1; /*!< [4..4] OVRCURA Interrupt Enable Clear */ + __IOM uint32_t DOVCBHE : 1; /*!< [5..5] OVRCURB Interrupt Enable Clear */ + uint32_t : 1; + __IOM uint32_t DVBSTSHE : 1; /*!< [7..7] VBUS Interrupt Enable/Clear */ + uint32_t : 12; + __IM uint32_t DOVCAH : 1; /*!< [20..20] Indication of Return from OVRCURA Interrupt Source */ + __IM uint32_t DOVCBH : 1; /*!< [21..21] Indication of Return from OVRCURB Interrupt Source */ + uint32_t : 1; + __IM uint32_t DVBSTSH : 1; /*!< [23..23] Indication of Return from VBUS Interrupt Source */ + uint32_t : 8; + } DPUSR1R_b; }; union { - __IOM uint16_t D1FIFOSEL; /*!< (@ 0x0000002C) D1FIFO Port Select Register */ + __IOM uint16_t DPUSR2R; /*!< (@ 0x00000168) Deep Standby USB Suspend/Resume Interrupt Register */ struct { - __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ - uint16_t : 4; - __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ - uint16_t : 1; - __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ - __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ - __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified - * Pipe Data is Read */ - __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ - __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ - } D1FIFOSEL_b; + __IM uint16_t DPINT : 1; /*!< [0..0] Indication of Return from DP Interrupt Source */ + __IM uint16_t DMINT : 1; /*!< [1..1] Indication of Return from DM Interrupt Source */ + uint16_t : 2; + __IM uint16_t DPVAL : 1; /*!< [4..4] DP InputIndicates DP input signal on the HS side of USB + * port. */ + __IM uint16_t DMVAL : 1; /*!< [5..5] DM InputIndicates DM input signal on the HS side of USB + * port. */ + uint16_t : 2; + __IOM uint16_t DPINTE : 1; /*!< [8..8] DP Interrupt Enable Clear */ + __IOM uint16_t DMINTE : 1; /*!< [9..9] DM Interrupt Enable Clear */ + uint16_t : 6; + } DPUSR2R_b; }; union { - __IOM uint16_t D1FIFOCTR; /*!< (@ 0x0000002E) D1FIFO Port Control Register */ + __IOM uint16_t DPUSRCR; /*!< (@ 0x0000016A) Deep Standby USB Suspend/Resume Command Register */ struct { - __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive - * data. */ - uint16_t : 1; - __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ - __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ - __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ - } D1FIFOCTR_b; + __IOM uint16_t FIXPHY : 1; /*!< [0..0] USB Transceiver Control Fix */ + __IOM uint16_t FIXPHYPD : 1; /*!< [1..1] USB Transceiver Control Fix for PLL */ + uint16_t : 14; + } DPUSRCR_b; }; + __IM uint32_t RESERVED26[165]; union { - __IOM uint16_t INTENB0; /*!< (@ 0x00000030) Interrupt Enable Register 0 */ + __IOM uint32_t DPUSR0R_FS; /*!< (@ 0x00000400) Deep Software Standby USB Transceiver Control/Pin + * Monitor Register */ struct { - uint16_t : 8; - __IOM uint16_t BRDYE : 1; /*!< [8..8] Buffer Ready Interrupt Enable */ - __IOM uint16_t NRDYE : 1; /*!< [9..9] Buffer Not Ready Response Interrupt Enable */ - __IOM uint16_t BEMPE : 1; /*!< [10..10] Buffer Empty Interrupt Enable */ - __IOM uint16_t CTRE : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Enable */ - __IOM uint16_t DVSE : 1; /*!< [12..12] Device State Transition Interrupt Enable */ - __IOM uint16_t SOFE : 1; /*!< [13..13] Frame Number Update Interrupt Enable */ - __IOM uint16_t RSME : 1; /*!< [14..14] Resume Interrupt Enable */ - __IOM uint16_t VBSE : 1; /*!< [15..15] VBUS Interrupt Enable */ - } INTENB0_b; + __IOM uint32_t SRPC0 : 1; /*!< [0..0] USB Single End Receiver Control */ + __IOM uint32_t RPUE0 : 1; /*!< [1..1] DP Pull-Up Resistor Control */ + uint32_t : 1; + __IOM uint32_t DRPD0 : 1; /*!< [3..3] D+/D- Pull-Down Resistor Control */ + __IOM uint32_t FIXPHY0 : 1; /*!< [4..4] USB Transceiver Output Fix */ + uint32_t : 11; + __IM uint32_t DP0 : 1; /*!< [16..16] USB0 D+ InputIndicates the D+ input signal of the USB. */ + __IM uint32_t DM0 : 1; /*!< [17..17] USB D-InputIndicates the D- input signal of the USB. */ + uint32_t : 2; + __IM uint32_t DOVCA0 : 1; /*!< [20..20] USB OVRCURA InputIndicates the OVRCURA input signal + * of the USB. */ + __IM uint32_t DOVCB0 : 1; /*!< [21..21] USB OVRCURB InputIndicates the OVRCURB input signal + * of the USB. */ + uint32_t : 1; + __IM uint32_t DVBSTS0 : 1; /*!< [23..23] USB VBUS InputIndicates the VBUS input signal of the + * USB. */ + uint32_t : 8; + } DPUSR0R_FS_b; }; union { - __IOM uint16_t INTENB1; /*!< (@ 0x00000032) Interrupt Enable Register 1 */ + __IOM uint32_t DPUSR1R_FS; /*!< (@ 0x00000404) Deep Software Standby USB Suspend/Resume Interrupt + * Register */ struct { - __IOM uint16_t PDDETINTE0 : 1; /*!< [0..0] PDDETINT0 Detection Interrupt Enable */ - uint16_t : 3; - __IOM uint16_t SACKE : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Enable */ - __IOM uint16_t SIGNE : 1; /*!< [5..5] Setup Transaction Error Interrupt Enable */ - __IOM uint16_t EOFERRE : 1; /*!< [6..6] EOF Error Detection Interrupt Enable */ - uint16_t : 4; - __IOM uint16_t ATTCHE : 1; /*!< [11..11] Connection Detection Interrupt Enable */ - __IOM uint16_t DTCHE : 1; /*!< [12..12] Disconnection Detection Interrupt Enable */ - uint16_t : 1; - __IOM uint16_t BCHGE : 1; /*!< [14..14] USB Bus Change Interrupt Enable */ - __IOM uint16_t OVRCRE : 1; /*!< [15..15] Overcurrent Input Change Interrupt Enable */ - } INTENB1_b; + __IOM uint32_t DPINTE0 : 1; /*!< [0..0] USB DP Interrupt Enable/Clear */ + __IOM uint32_t DMINTE0 : 1; /*!< [1..1] USB DM Interrupt Enable/Clear */ + uint32_t : 2; + __IOM uint32_t DOVRCRAE0 : 1; /*!< [4..4] USB OVRCURA Interrupt Enable/Clear */ + __IOM uint32_t DOVRCRBE0 : 1; /*!< [5..5] USB OVRCURB Interrupt Enable/Clear */ + uint32_t : 1; + __IOM uint32_t DVBSE0 : 1; /*!< [7..7] USB VBUS Interrupt Enable/Clear */ + uint32_t : 8; + __IM uint32_t DPINT0 : 1; /*!< [16..16] USB DP Interrupt Source Recovery */ + __IM uint32_t DMINT0 : 1; /*!< [17..17] USB DM Interrupt Source Recovery */ + uint32_t : 2; + __IM uint32_t DOVRCRA0 : 1; /*!< [20..20] USB OVRCURA Interrupt Source Recovery */ + __IM uint32_t DOVRCRB0 : 1; /*!< [21..21] USB OVRCURB Interrupt Source Recovery */ + uint32_t : 1; + __IM uint32_t DVBINT0 : 1; /*!< [23..23] USB VBUS Interrupt Source Recovery */ + uint32_t : 8; + } DPUSR1R_FS_b; }; - __IM uint16_t RESERVED7; +} R_USB_FS0_Type; /*!< Size = 1032 (0x408) */ - union - { - __IOM uint16_t BRDYENB; /*!< (@ 0x00000036) BRDY Interrupt Enable Register */ +/* =========================================================================================================================== */ +/* ================ R_USB_HS0 ================ */ +/* =========================================================================================================================== */ - struct - { - __IOM uint16_t PIPE0BRDYE : 1; /*!< [0..0] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE1BRDYE : 1; /*!< [1..1] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE2BRDYE : 1; /*!< [2..2] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE3BRDYE : 1; /*!< [3..3] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE4BRDYE : 1; /*!< [4..4] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE5BRDYE : 1; /*!< [5..5] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE6BRDYE : 1; /*!< [6..6] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE7BRDYE : 1; /*!< [7..7] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE8BRDYE : 1; /*!< [8..8] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE9BRDYE : 1; /*!< [9..9] BRDY Interrupt Enable for PIPE */ - uint16_t : 6; - } BRDYENB_b; - }; +/** + * @brief USB 2.0 Module (R_USB_HS0) + */ +typedef struct /*!< (@ 0x40090000) R_USB_HS0 Structure */ +{ union { - __IOM uint16_t NRDYENB; /*!< (@ 0x00000038) NRDY Interrupt Enable Register */ + __IOM uint16_t SYSCFG; /*!< (@ 0x00000000) System Configuration Control Register */ struct { - __IOM uint16_t PIPE0NRDYE : 1; /*!< [0..0] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE1NRDYE : 1; /*!< [1..1] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE2NRDYE : 1; /*!< [2..2] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE3NRDYE : 1; /*!< [3..3] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE4NRDYE : 1; /*!< [4..4] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE5NRDYE : 1; /*!< [5..5] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE6NRDYE : 1; /*!< [6..6] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE7NRDYE : 1; /*!< [7..7] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE8NRDYE : 1; /*!< [8..8] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE9NRDYE : 1; /*!< [9..9] NRDY Interrupt Enable for PIPE */ - uint16_t : 6; - } NRDYENB_b; + __IOM uint16_t USBE : 1; /*!< [0..0] USB Operation Enable */ + uint16_t : 3; + __IOM uint16_t DPRPU : 1; /*!< [4..4] D+ Line Resistor Control */ + __IOM uint16_t DRPD : 1; /*!< [5..5] D+/D- Line Resistor Control */ + __IOM uint16_t DCFM : 1; /*!< [6..6] Controller Function Select */ + __IOM uint16_t HSE : 1; /*!< [7..7] High-Speed Operation Enable */ + __IOM uint16_t CNEN : 1; /*!< [8..8] CNEN Single End Receiver Enable */ + uint16_t : 1; + __IOM uint16_t SCKE : 1; /*!< [10..10] USB Clock Enable */ + } SYSCFG_b; }; union { - __IOM uint16_t BEMPENB; /*!< (@ 0x0000003A) BEMP Interrupt Enable Register */ + __IOM uint16_t BUSWAIT; /*!< (@ 0x00000002) CPU Bus Wait Register */ struct { - __IOM uint16_t PIPE0BEMPE : 1; /*!< [0..0] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE1BEMPE : 1; /*!< [1..1] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE2BEMPE : 1; /*!< [2..2] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE3BEMPE : 1; /*!< [3..3] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE4BEMPE : 1; /*!< [4..4] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE5BEMPE : 1; /*!< [5..5] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE6BEMPE : 1; /*!< [6..6] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE7BEMPE : 1; /*!< [7..7] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE8BEMPE : 1; /*!< [8..8] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE9BEMPE : 1; /*!< [9..9] BEMP Interrupt Enable for PIPE */ - uint16_t : 6; - } BEMPENB_b; + __IOM uint16_t BWAIT : 4; /*!< [3..0] CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 + * access cycles) */ + } BUSWAIT_b; }; union { - __IOM uint16_t SOFCFG; /*!< (@ 0x0000003C) SOF Output Configuration Register */ + __IM uint16_t SYSSTS0; /*!< (@ 0x00000004) System Configuration Status Register 0 */ struct { - uint16_t : 4; - __IM uint16_t EDGESTS : 1; /*!< [4..4] Edge Interrupt Output Status Monitor */ - __IOM uint16_t INTL : 1; /*!< [5..5] Interrupt Output Sense Select */ - __IOM uint16_t BRDYM : 1; /*!< [6..6] BRDY Interrupt Status Clear Timing */ - uint16_t : 1; - __IOM uint16_t TRNENSEL : 1; /*!< [8..8] Transaction-Enabled Time Select */ - uint16_t : 7; - } SOFCFG_b; + __IM uint16_t LNST : 2; /*!< [1..0] USB Data Line Status Monitor */ + __IM uint16_t IDMON : 1; /*!< [2..2] External ID0 Input Pin Monitor */ + uint16_t : 2; + __IM uint16_t SOFEA : 1; /*!< [5..5] SOF Active Monitor While Host Controller Function is + * Selected. */ + __IM uint16_t HTACT : 1; /*!< [6..6] USB Host Sequencer Status Monitor */ + uint16_t : 7; + __IM uint16_t OVCMON : 2; /*!< [15..14] External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe + * OCVMON[1] bit indicates the status of the USBHS_OVRCURA + * pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB + * pin. */ + } SYSSTS0_b; }; union { - __IOM uint16_t PHYSET; /*!< (@ 0x0000003E) PHY Setting Register */ + __IM uint16_t PLLSTA; /*!< (@ 0x00000006) PLL Status Register */ struct { - __IOM uint16_t DIRPD : 1; /*!< [0..0] Power-Down Control */ - __IOM uint16_t PLLRESET : 1; /*!< [1..1] PLL Reset Control */ - uint16_t : 1; - __IOM uint16_t CDPEN : 1; /*!< [3..3] Charging Downstream Port Enable */ - __IOM uint16_t CLKSEL : 2; /*!< [5..4] Input System Clock Frequency */ - uint16_t : 2; - __IOM uint16_t REPSEL : 2; /*!< [9..8] Terminating Resistance Adjustment Cycle */ - uint16_t : 1; - __IOM uint16_t REPSTART : 1; /*!< [11..11] Forcibly Start Terminating Resistance Adjustment */ - uint16_t : 3; - __IOM uint16_t HSEB : 1; /*!< [15..15] CL-Only Mode */ - } PHYSET_b; + __IM uint16_t PLLLOCK : 1; /*!< [0..0] PLL Lock Flag */ + } PLLSTA_b; }; union { - __IOM uint16_t INTSTS0; /*!< (@ 0x00000040) Interrupt Status Register 0 */ + __IOM uint16_t DVSTCTR0; /*!< (@ 0x00000008) Device State Control Register 0 */ struct { - __IM uint16_t CTSQ : 3; /*!< [2..0] Control Transfer Stage */ - __IOM uint16_t VALID : 1; /*!< [3..3] USB Request Reception */ - __IM uint16_t DVSQ : 3; /*!< [6..4] Device State */ - __IM uint16_t VBSTS : 1; /*!< [7..7] VBUS Input Status */ - __IM uint16_t BRDY : 1; /*!< [8..8] Buffer Ready Interrupt Status */ - __IM uint16_t NRDY : 1; /*!< [9..9] Buffer Not Ready Interrupt Status */ - __IM uint16_t BEMP : 1; /*!< [10..10] Buffer Empty Interrupt Status */ - __IOM uint16_t CTRT : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Status */ - __IOM uint16_t DVST : 1; /*!< [12..12] Device State Transition Interrupt Status */ - __IOM uint16_t SOFR : 1; /*!< [13..13] Frame Number Refresh Interrupt Status */ - __IOM uint16_t RESM : 1; /*!< [14..14] Resume Interrupt Status */ - __IOM uint16_t VBINT : 1; /*!< [15..15] VBUS Interrupt Status */ - } INTSTS0_b; + __IM uint16_t RHST : 3; /*!< [2..0] USB Bus Reset Status */ + uint16_t : 1; + __IOM uint16_t UACT : 1; /*!< [4..4] USB Bus Enable */ + __IOM uint16_t RESUME : 1; /*!< [5..5] Resume Output */ + __IOM uint16_t USBRST : 1; /*!< [6..6] USB Bus Reset Output */ + __IOM uint16_t RWUPE : 1; /*!< [7..7] Wakeup Detection Enable */ + __IOM uint16_t WKUP : 1; /*!< [8..8] Wakeup Output */ + __IOM uint16_t VBUSEN : 1; /*!< [9..9] USB_VBUSEN Output Pin Control */ + __IOM uint16_t EXICEN : 1; /*!< [10..10] USB_EXICEN Output Pin Control */ + __IOM uint16_t HNPBTOA : 1; /*!< [11..11] Host Negotiation Protocol (HNP) Control This bit is + * used when switching from device B to device A while in + * OTG mode. If the HNPBTOA bit is 1, the internal function + * control keeps the suspended state until the HNP processing + * ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is + * set. */ + } DVSTCTR0_b; }; + __IM uint16_t RESERVED; union { - __IOM uint16_t INTSTS1; /*!< (@ 0x00000042) Interrupt Status Register 1 */ + __IOM uint16_t TESTMODE; /*!< (@ 0x0000000C) USB Test Mode Register */ struct { - __IOM uint16_t PDDETINT0 : 1; /*!< [0..0] PDDET0 Detection Interrupt Status */ - uint16_t : 3; - __IOM uint16_t SACK : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Status */ - __IOM uint16_t SIGN : 1; /*!< [5..5] Setup Transaction Error Interrupt Status */ - __IOM uint16_t EOFERR : 1; /*!< [6..6] EOF Error Detection Interrupt Status */ - uint16_t : 1; - __IOM uint16_t LPMEND : 1; /*!< [8..8] LPM Transaction End Interrupt Status */ - __IOM uint16_t L1RSMEND : 1; /*!< [9..9] L1 Resume End Interrupt Status */ - uint16_t : 1; - __IOM uint16_t ATTCH : 1; /*!< [11..11] ATTCH Interrupt Status */ - __IOM uint16_t DTCH : 1; /*!< [12..12] USB Disconnection Detection Interrupt Status */ - uint16_t : 1; - __IOM uint16_t BCHG : 1; /*!< [14..14] USB Bus Change Interrupt Status */ - __IOM uint16_t OVRCR : 1; /*!< [15..15] Overcurrent Input Change Interrupt Status */ - } INTSTS1_b; + __IOM uint16_t UTST : 4; /*!< [3..0] Test Mode */ + } TESTMODE_b; }; - __IM uint16_t RESERVED8; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2; union { - __IOM uint16_t BRDYSTS; /*!< (@ 0x00000046) BRDY Interrupt Status Register */ + __IOM uint32_t CFIFO; /*!< (@ 0x00000014) CFIFO Port Register */ struct { - __IOM uint16_t PIPE0BRDY : 1; /*!< [0..0] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE1BRDY : 1; /*!< [1..1] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE2BRDY : 1; /*!< [2..2] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE3BRDY : 1; /*!< [3..3] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE4BRDY : 1; /*!< [4..4] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE5BRDY : 1; /*!< [5..5] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE6BRDY : 1; /*!< [6..6] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE7BRDY : 1; /*!< [7..7] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE8BRDY : 1; /*!< [8..8] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE9BRDY : 1; /*!< [9..9] BRDY Interrupt Status for PIPE */ - uint16_t : 6; - } BRDYSTS_b; + union + { + __IOM uint16_t CFIFOL; /*!< (@ 0x00000014) CFIFO Port Register L */ + __IOM uint8_t CFIFOLL; /*!< (@ 0x00000014) CFIFO Port Register LL */ + }; + + union + { + __IOM uint16_t CFIFOH; /*!< (@ 0x00000016) CFIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED3; + __IOM uint8_t CFIFOHH; /*!< (@ 0x00000017) CFIFO Port Register HH */ + }; + }; + }; }; union { - __IOM uint16_t NRDYSTS; /*!< (@ 0x00000048) NRDY Interrupt Status Register */ + __IOM uint32_t D0FIFO; /*!< (@ 0x00000018) D0FIFO Port Register */ struct { - __IOM uint16_t PIPE0NRDY : 1; /*!< [0..0] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE1NRDY : 1; /*!< [1..1] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE2NRDY : 1; /*!< [2..2] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE3NRDY : 1; /*!< [3..3] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE4NRDY : 1; /*!< [4..4] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE5NRDY : 1; /*!< [5..5] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE6NRDY : 1; /*!< [6..6] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE7NRDY : 1; /*!< [7..7] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE8NRDY : 1; /*!< [8..8] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE9NRDY : 1; /*!< [9..9] NRDY Interrupt Status for PIPE */ - uint16_t : 6; - } NRDYSTS_b; + union + { + __IOM uint16_t D0FIFOL; /*!< (@ 0x00000018) D0FIFO Port Register L */ + __IOM uint8_t D0FIFOLL; /*!< (@ 0x00000018) D0FIFO Port Register LL */ + }; + + union + { + __IOM uint16_t D0FIFOH; /*!< (@ 0x0000001A) D0FIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED4; + __IOM uint8_t D0FIFOHH; /*!< (@ 0x0000001B) D0FIFO Port Register HH */ + }; + }; + }; }; union { - __IOM uint16_t BEMPSTS; /*!< (@ 0x0000004A) BEMP Interrupt Status Register */ + __IOM uint32_t D1FIFO; /*!< (@ 0x0000001C) D1FIFO Port Register */ struct { - __IOM uint16_t PIPE0BEMP : 1; /*!< [0..0] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE1BEMP : 1; /*!< [1..1] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE2BEMP : 1; /*!< [2..2] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE3BEMP : 1; /*!< [3..3] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE4BEMP : 1; /*!< [4..4] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE5BEMP : 1; /*!< [5..5] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE6BEMP : 1; /*!< [6..6] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE7BEMP : 1; /*!< [7..7] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE8BEMP : 1; /*!< [8..8] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE9BEMP : 1; /*!< [9..9] BEMP Interrupt Status for PIPE */ - uint16_t : 6; - } BEMPSTS_b; + union + { + __IOM uint16_t D1FIFOL; /*!< (@ 0x0000001C) D1FIFO Port Register L */ + __IOM uint8_t D1FIFOLL; /*!< (@ 0x0000001C) D1FIFO Port Register LL */ + }; + + union + { + __IOM uint16_t D1FIFOH; /*!< (@ 0x0000001E) D1FIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED5; + __IOM uint8_t D1FIFOHH; /*!< (@ 0x0000001F) D1FIFO Port Register HH */ + }; + }; + }; }; union { - __IOM uint16_t FRMNUM; /*!< (@ 0x0000004C) Frame Number Register */ + __IOM uint16_t CFIFOSEL; /*!< (@ 0x00000020) CFIFO Port Select Register */ struct { - __IM uint16_t FRNM : 11; /*!< [10..0] Frame NumberLatest frame number */ - uint16_t : 3; - __IOM uint16_t CRCE : 1; /*!< [14..14] Receive Data Error */ - __IOM uint16_t OVRN : 1; /*!< [15..15] Overrun/Underrun Detection Status */ - } FRMNUM_b; + __IOM uint16_t CURPIPE : 4; /*!< [3..0] CFIFO Port Access Pipe Specification */ + uint16_t : 1; + __IOM uint16_t ISEL : 1; /*!< [5..5] CFIFO Port Access Direction When DCP is Selected */ + uint16_t : 2; + __IOM uint16_t BIGEND : 1; /*!< [8..8] CFIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] CFIFO Port Access Bit Width */ + uint16_t : 2; + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } CFIFOSEL_b; }; union { - __IOM uint16_t UFRMNUM; /*!< (@ 0x0000004E) uFrame Number Register */ + __IOM uint16_t CFIFOCTR; /*!< (@ 0x00000022) CFIFO Port Control Register */ struct { - __IM uint16_t UFRNM : 3; /*!< [2..0] MicroframeIndicate the microframe number. */ - uint16_t : 12; - __IOM uint16_t DVCHG : 1; /*!< [15..15] Device State Change */ - } UFRMNUM_b; + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } CFIFOCTR_b; }; + __IM uint32_t RESERVED6; union { - __IOM uint16_t USBADDR; /*!< (@ 0x00000050) USB Address Register */ + __IOM uint16_t D0FIFOSEL; /*!< (@ 0x00000028) D0FIFO Port Select Register */ struct { - __IM uint16_t USBADDR : 7; /*!< [6..0] USB Address In device controller mode, these flags indicate - * the USB address assigned by the host when the USBHS processed - * the SET_ADDRESS request successfully. */ - uint16_t : 1; - __IOM uint16_t STSRECOV0 : 3; /*!< [10..8] Status Recovery */ - uint16_t : 5; - } USBADDR_b; + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified + * Pipe Data is Read */ + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer RewindNote: Only 0 can be read. */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D0FIFOSEL_b; }; - __IM uint16_t RESERVED9; union { - __IOM uint16_t USBREQ; /*!< (@ 0x00000054) USB Request Type Register */ + __IOM uint16_t D0FIFOCTR; /*!< (@ 0x0000002A) D0FIFO Port Control Register */ struct { - __IOM uint16_t BMREQUESTTYPE : 8; /*!< [7..0] Request TypeThese bits store the USB request bmRequestType - * value. */ - __IOM uint16_t BREQUEST : 8; /*!< [15..8] RequestThese bits store the USB request bRequest value. */ - } USBREQ_b; + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D0FIFOCTR_b; }; union { - __IOM uint16_t USBVAL; /*!< (@ 0x00000056) USB Request Value Register */ + __IOM uint16_t D1FIFOSEL; /*!< (@ 0x0000002C) D1FIFO Port Select Register */ struct { - __IOM uint16_t WVALUE : 16; /*!< [15..0] ValueThese bits store the USB request Value value. */ - } USBVAL_b; + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified + * Pipe Data is Read */ + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D1FIFOSEL_b; }; union { - __IOM uint16_t USBINDX; /*!< (@ 0x00000058) USB Request Index Register */ + __IOM uint16_t D1FIFOCTR; /*!< (@ 0x0000002E) D1FIFO Port Control Register */ struct { - __IOM uint16_t WINDEX : 16; /*!< [15..0] IndexThese bits store the USB request wIndex value. */ - } USBINDX_b; + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D1FIFOCTR_b; }; union { - __IOM uint16_t USBLENG; /*!< (@ 0x0000005A) USB Request Length Register */ + __IOM uint16_t INTENB0; /*!< (@ 0x00000030) Interrupt Enable Register 0 */ struct { - __IOM uint16_t WLENGTH : 16; /*!< [15..0] LengthThese bits store the USB request wLength value. */ - } USBLENG_b; + uint16_t : 8; + __IOM uint16_t BRDYE : 1; /*!< [8..8] Buffer Ready Interrupt Enable */ + __IOM uint16_t NRDYE : 1; /*!< [9..9] Buffer Not Ready Response Interrupt Enable */ + __IOM uint16_t BEMPE : 1; /*!< [10..10] Buffer Empty Interrupt Enable */ + __IOM uint16_t CTRE : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Enable */ + __IOM uint16_t DVSE : 1; /*!< [12..12] Device State Transition Interrupt Enable */ + __IOM uint16_t SOFE : 1; /*!< [13..13] Frame Number Update Interrupt Enable */ + __IOM uint16_t RSME : 1; /*!< [14..14] Resume Interrupt Enable */ + __IOM uint16_t VBSE : 1; /*!< [15..15] VBUS Interrupt Enable */ + } INTENB0_b; }; union { - __IOM uint16_t DCPCFG; /*!< (@ 0x0000005C) DCP Configuration Register */ + __IOM uint16_t INTENB1; /*!< (@ 0x00000032) Interrupt Enable Register 1 */ struct { - uint16_t : 4; - __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ - uint16_t : 2; - __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ - __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ - uint16_t : 7; - } DCPCFG_b; + __IOM uint16_t PDDETINTE0 : 1; /*!< [0..0] PDDETINT0 Detection Interrupt Enable */ + uint16_t : 3; + __IOM uint16_t SACKE : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Enable */ + __IOM uint16_t SIGNE : 1; /*!< [5..5] Setup Transaction Error Interrupt Enable */ + __IOM uint16_t EOFERRE : 1; /*!< [6..6] EOF Error Detection Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t LPMENDE : 1; /*!< [8..8] LPM Transaction End Interrupt Enable */ + __IOM uint16_t L1RSMENDE : 1; /*!< [9..9] L1 Resume End Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t ATTCHE : 1; /*!< [11..11] Connection Detection Interrupt Enable */ + __IOM uint16_t DTCHE : 1; /*!< [12..12] Disconnection Detection Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t BCHGE : 1; /*!< [14..14] USB Bus Change Interrupt Enable */ + __IOM uint16_t OVRCRE : 1; /*!< [15..15] Overcurrent Input Change Interrupt Enable */ + } INTENB1_b; }; + __IM uint16_t RESERVED7; union { - __IOM uint16_t DCPMAXP; /*!< (@ 0x0000005E) DCP Maximum Packet Size Register */ + __IOM uint16_t BRDYENB; /*!< (@ 0x00000036) BRDY Interrupt Enable Register */ struct { - __IOM uint16_t MXPS : 7; /*!< [6..0] Maximum Packet SizeThese bits set the maximum amount - * of data (maximum packet size) in payloads for the DCP. */ - uint16_t : 5; - __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ - } DCPMAXP_b; + __IOM uint16_t PIPE0BRDYE : 1; /*!< [0..0] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1BRDYE : 1; /*!< [1..1] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2BRDYE : 1; /*!< [2..2] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3BRDYE : 1; /*!< [3..3] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4BRDYE : 1; /*!< [4..4] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5BRDYE : 1; /*!< [5..5] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6BRDYE : 1; /*!< [6..6] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7BRDYE : 1; /*!< [7..7] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8BRDYE : 1; /*!< [8..8] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9BRDYE : 1; /*!< [9..9] BRDY Interrupt Enable for PIPE */ + } BRDYENB_b; }; union { - __IOM uint16_t DCPCTR; /*!< (@ 0x00000060) DCP Control Register */ + __IOM uint16_t NRDYENB; /*!< (@ 0x00000038) NRDY Interrupt Enable Register */ struct { - __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ - __IOM uint16_t CCPL : 1; /*!< [2..2] Control Transfer End Enable */ - uint16_t : 2; - __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ - __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Monitor */ - __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ - __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ - uint16_t : 2; - __IOM uint16_t SUREQCLR : 1; /*!< [11..11] SUREQ Bit Clear */ - uint16_t : 2; - __IOM uint16_t SUREQ : 1; /*!< [14..14] Setup Token Transmission */ - __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ - } DCPCTR_b; + __IOM uint16_t PIPE0NRDYE : 1; /*!< [0..0] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1NRDYE : 1; /*!< [1..1] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2NRDYE : 1; /*!< [2..2] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3NRDYE : 1; /*!< [3..3] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4NRDYE : 1; /*!< [4..4] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5NRDYE : 1; /*!< [5..5] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6NRDYE : 1; /*!< [6..6] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7NRDYE : 1; /*!< [7..7] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8NRDYE : 1; /*!< [8..8] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9NRDYE : 1; /*!< [9..9] NRDY Interrupt Enable for PIPE */ + } NRDYENB_b; }; - __IM uint16_t RESERVED10; union { - __IOM uint16_t PIPESEL; /*!< (@ 0x00000064) Pipe Window Select Register */ + __IOM uint16_t BEMPENB; /*!< (@ 0x0000003A) BEMP Interrupt Enable Register */ struct { - __IOM uint16_t PIPESEL : 4; /*!< [3..0] Pipe Window Select */ - uint16_t : 12; - } PIPESEL_b; + __IOM uint16_t PIPE0BEMPE : 1; /*!< [0..0] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1BEMPE : 1; /*!< [1..1] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2BEMPE : 1; /*!< [2..2] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3BEMPE : 1; /*!< [3..3] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4BEMPE : 1; /*!< [4..4] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5BEMPE : 1; /*!< [5..5] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6BEMPE : 1; /*!< [6..6] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7BEMPE : 1; /*!< [7..7] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8BEMPE : 1; /*!< [8..8] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9BEMPE : 1; /*!< [9..9] BEMP Interrupt Enable for PIPE */ + } BEMPENB_b; }; - __IM uint16_t RESERVED11; union { - __IOM uint16_t PIPECFG; /*!< (@ 0x00000068) Pipe Configuration Register */ + __IOM uint16_t SOFCFG; /*!< (@ 0x0000003C) SOF Output Configuration Register */ struct { - __IOM uint16_t EPNUM : 4; /*!< [3..0] Endpoint NumberThese bits specify the endpoint number - * for the selected pipe.Setting 0000b means unused pipe. */ - __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ - uint16_t : 2; - __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ - uint16_t : 1; - __IOM uint16_t DBLB : 1; /*!< [9..9] Double Buffer Mode */ - __IOM uint16_t BFRE : 1; /*!< [10..10] BRDY Interrupt Operation Specification */ - uint16_t : 3; - __IOM uint16_t TYPE : 2; /*!< [15..14] Transfer Type */ - } PIPECFG_b; + uint16_t : 4; + __IM uint16_t EDGESTS : 1; /*!< [4..4] Edge Interrupt Output Status Monitor */ + __IOM uint16_t INTL : 1; /*!< [5..5] Interrupt Output Sense Select */ + __IOM uint16_t BRDYM : 1; /*!< [6..6] BRDY Interrupt Status Clear Timing */ + uint16_t : 1; + __IOM uint16_t TRNENSEL : 1; /*!< [8..8] Transaction-Enabled Time Select */ + } SOFCFG_b; }; - __IM uint16_t RESERVED12; union { - __IOM uint16_t PIPEMAXP; /*!< (@ 0x0000006C) Pipe Maximum Packet Size Register */ + __IOM uint16_t PHYSET; /*!< (@ 0x0000003E) PHY Setting Register */ struct - { - __IOM uint16_t MXPS : 9; /*!< [8..0] Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to - * 256 bytes (100h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes - * (010h), 32 bytes (020h), 64 bytes (040h) (Bits [8:7] and - * [2:0] are not provided.)PIPE6 to PIPE9: 1 byte (001h) to - * 64 bytes (040h) (Bits [8:7] are not provided.) */ - uint16_t : 3; - __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ - } PIPEMAXP_b; + { + __IOM uint16_t DIRPD : 1; /*!< [0..0] Power-Down Control */ + __IOM uint16_t PLLRESET : 1; /*!< [1..1] PLL Reset Control */ + uint16_t : 1; + __IOM uint16_t CDPEN : 1; /*!< [3..3] Charging Downstream Port Enable */ + __IOM uint16_t CLKSEL : 2; /*!< [5..4] Input System Clock Frequency */ + uint16_t : 2; + __IOM uint16_t REPSEL : 2; /*!< [9..8] Terminating Resistance Adjustment Cycle */ + uint16_t : 1; + __IOM uint16_t REPSTART : 1; /*!< [11..11] Forcibly Start Terminating Resistance Adjustment */ + uint16_t : 3; + __IOM uint16_t HSEB : 1; /*!< [15..15] CL-Only Mode */ + } PHYSET_b; }; union { - __IOM uint16_t PIPEPERI; /*!< (@ 0x0000006E) Pipe Cycle Control Register */ + __IOM uint16_t INTSTS0; /*!< (@ 0x00000040) Interrupt Status Register 0 */ struct { - __IOM uint16_t IITV : 3; /*!< [2..0] Interval Error Detection IntervalSpecifies the interval - * error detection timing for the selected pipe in terms of - * frames, which is expressed as nth power of 2. */ - uint16_t : 9; - __IOM uint16_t IFIS : 1; /*!< [12..12] Isochronous IN Buffer Flush */ - uint16_t : 3; - } PIPEPERI_b; + __IM uint16_t CTSQ : 3; /*!< [2..0] Control Transfer Stage */ + __IOM uint16_t VALID : 1; /*!< [3..3] USB Request Reception */ + __IM uint16_t DVSQ : 3; /*!< [6..4] Device State */ + __IM uint16_t VBSTS : 1; /*!< [7..7] VBUS Input Status */ + __IM uint16_t BRDY : 1; /*!< [8..8] Buffer Ready Interrupt Status */ + __IM uint16_t NRDY : 1; /*!< [9..9] Buffer Not Ready Interrupt Status */ + __IM uint16_t BEMP : 1; /*!< [10..10] Buffer Empty Interrupt Status */ + __IOM uint16_t CTRT : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Status */ + __IOM uint16_t DVST : 1; /*!< [12..12] Device State Transition Interrupt Status */ + __IOM uint16_t SOFR : 1; /*!< [13..13] Frame Number Refresh Interrupt Status */ + __IOM uint16_t RESM : 1; /*!< [14..14] Resume Interrupt Status */ + __IOM uint16_t VBINT : 1; /*!< [15..15] VBUS Interrupt Status */ + } INTSTS0_b; }; union { - __IOM uint16_t PIPE_CTR[9]; /*!< (@ 0x00000070) Pipe [0..8] Control Register */ + __IOM uint16_t INTSTS1; /*!< (@ 0x00000042) Interrupt Status Register 1 */ struct { - __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ - uint16_t : 3; - __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ - __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Confirmation */ - __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ - __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ - __IOM uint16_t ACLRM : 1; /*!< [9..9] Auto Buffer Clear Mode */ - __IOM uint16_t ATREPM : 1; /*!< [10..10] Auto Response Mode */ - uint16_t : 1; - __IM uint16_t CSSTS : 1; /*!< [12..12] CSSTS StatusThis bit indicates the CSPLIT status of - * Split Transaction of the relevant pipe */ - __IOM uint16_t CSCLR : 1; /*!< [13..13] CSPLIT Status ClearSet this bit to 1 when clearing - * the CSSTS bit of the relevant pipe */ - __IM uint16_t INBUFM : 1; /*!< [14..14] Transmit Buffer Monitor */ - __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ - } PIPE_CTR_b[9]; + __IOM uint16_t PDDETINT0 : 1; /*!< [0..0] PDDET0 Detection Interrupt Status */ + uint16_t : 3; + __IOM uint16_t SACK : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Status */ + __IOM uint16_t SIGN : 1; /*!< [5..5] Setup Transaction Error Interrupt Status */ + __IOM uint16_t EOFERR : 1; /*!< [6..6] EOF Error Detection Interrupt Status */ + uint16_t : 1; + __IOM uint16_t LPMEND : 1; /*!< [8..8] LPM Transaction End Interrupt Status */ + __IOM uint16_t L1RSMEND : 1; /*!< [9..9] L1 Resume End Interrupt Status */ + uint16_t : 1; + __IOM uint16_t ATTCH : 1; /*!< [11..11] ATTCH Interrupt Status */ + __IOM uint16_t DTCH : 1; /*!< [12..12] USB Disconnection Detection Interrupt Status */ + uint16_t : 1; + __IOM uint16_t BCHG : 1; /*!< [14..14] USB Bus Change Interrupt Status */ + __IOM uint16_t OVRCR : 1; /*!< [15..15] Overcurrent Input Change Interrupt Status */ + } INTSTS1_b; }; - __IM uint16_t RESERVED13; - __IM uint32_t RESERVED14[3]; - __IOM R_USB_FS0_PIPE_TR_Type PIPE_TR[5]; /*!< (@ 0x00000090) Pipe Transaction Counter Registers */ - __IM uint32_t RESERVED15[3]; + __IM uint16_t RESERVED8; union { - __IOM uint16_t USBBCCTRL0; /*!< (@ 0x000000B0) BC Control Register 0 */ + __IOM uint16_t BRDYSTS; /*!< (@ 0x00000046) BRDY Interrupt Status Register */ struct { - __IOM uint16_t RPDME0 : 1; /*!< [0..0] D- Pin Pull-Down Control */ - __IOM uint16_t IDPSRCE0 : 1; /*!< [1..1] D+ Pin IDPSRC Output Control */ - __IOM uint16_t IDMSINKE0 : 1; /*!< [2..2] D- Pin 0.6 V Input Detection (Comparator and Sink) Control */ - __IOM uint16_t VDPSRCE0 : 1; /*!< [3..3] D+ Pin VDPSRC (0.6 V) Output Control */ - __IOM uint16_t IDPSINKE0 : 1; /*!< [4..4] D+ Pin 0.6 V Input Detection (Comparator and Sink) Control */ - __IOM uint16_t VDMSRCE0 : 1; /*!< [5..5] D- Pin VDMSRC (0.6 V) Output Control */ - uint16_t : 1; - __IOM uint16_t BATCHGE0 : 1; /*!< [7..7] BC (Battery Charger) Function Ch0 General Enable Control */ - __IM uint16_t CHGDETSTS0 : 1; /*!< [8..8] D- Pin 0.6 V Input Detection Status */ - __IM uint16_t PDDETSTS0 : 1; /*!< [9..9] D+ Pin 0.6 V Input Detection Status */ - uint16_t : 6; - } USBBCCTRL0_b; + __IOM uint16_t PIPE0BRDY : 1; /*!< [0..0] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE1BRDY : 1; /*!< [1..1] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE2BRDY : 1; /*!< [2..2] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE3BRDY : 1; /*!< [3..3] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE4BRDY : 1; /*!< [4..4] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE5BRDY : 1; /*!< [5..5] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE6BRDY : 1; /*!< [6..6] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE7BRDY : 1; /*!< [7..7] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE8BRDY : 1; /*!< [8..8] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE9BRDY : 1; /*!< [9..9] BRDY Interrupt Status for PIPE */ + } BRDYSTS_b; }; - __IM uint16_t RESERVED16; - __IM uint32_t RESERVED17[4]; union { - __IOM uint16_t UCKSEL; /*!< (@ 0x000000C4) USB Clock Selection Register */ + __IOM uint16_t NRDYSTS; /*!< (@ 0x00000048) NRDY Interrupt Status Register */ struct { - __IOM uint16_t UCKSELC : 1; /*!< [0..0] USB Clock Selection */ - uint16_t : 15; - } UCKSEL_b; + __IOM uint16_t PIPE0NRDY : 1; /*!< [0..0] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE1NRDY : 1; /*!< [1..1] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE2NRDY : 1; /*!< [2..2] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE3NRDY : 1; /*!< [3..3] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE4NRDY : 1; /*!< [4..4] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE5NRDY : 1; /*!< [5..5] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE6NRDY : 1; /*!< [6..6] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE7NRDY : 1; /*!< [7..7] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE8NRDY : 1; /*!< [8..8] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE9NRDY : 1; /*!< [9..9] NRDY Interrupt Status for PIPE */ + } NRDYSTS_b; }; - __IM uint16_t RESERVED18; - __IM uint32_t RESERVED19; union { - __IOM uint16_t USBMC; /*!< (@ 0x000000CC) USB Module Control Register */ + __IOM uint16_t BEMPSTS; /*!< (@ 0x0000004A) BEMP Interrupt Status Register */ struct { - __IOM uint16_t VDDUSBE : 1; /*!< [0..0] USB Reference Power Supply Circuit On/Off Control */ - uint16_t : 6; - __IOM uint16_t VDCEN : 1; /*!< [7..7] USB Regulator On/Off Control */ - uint16_t : 8; - } USBMC_b; + __IOM uint16_t PIPE0BEMP : 1; /*!< [0..0] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE1BEMP : 1; /*!< [1..1] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE2BEMP : 1; /*!< [2..2] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE3BEMP : 1; /*!< [3..3] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE4BEMP : 1; /*!< [4..4] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE5BEMP : 1; /*!< [5..5] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE6BEMP : 1; /*!< [6..6] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE7BEMP : 1; /*!< [7..7] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE8BEMP : 1; /*!< [8..8] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE9BEMP : 1; /*!< [9..9] BEMP Interrupt Status for PIPE */ + } BEMPSTS_b; }; - __IM uint16_t RESERVED20; union { - __IOM uint16_t DEVADD[10]; /*!< (@ 0x000000D0) Device Address Configuration Register */ + __IOM uint16_t FRMNUM; /*!< (@ 0x0000004C) Frame Number Register */ struct { - uint16_t : 6; - __IOM uint16_t USBSPD : 2; /*!< [7..6] Transfer Speed of Communication Target Device */ - __IOM uint16_t HUBPORT : 3; /*!< [10..8] Communication Target Connecting Hub Port */ - __IOM uint16_t UPPHUB : 4; /*!< [14..11] Communication Target Connecting Hub Register */ - uint16_t : 1; - } DEVADD_b[10]; + __IM uint16_t FRNM : 11; /*!< [10..0] Frame NumberLatest frame number */ + uint16_t : 3; + __IOM uint16_t CRCE : 1; /*!< [14..14] Receive Data Error */ + __IOM uint16_t OVRN : 1; /*!< [15..15] Overrun/Underrun Detection Status */ + } FRMNUM_b; }; - __IM uint32_t RESERVED21[3]; union { - __IOM uint32_t PHYSLEW; /*!< (@ 0x000000F0) PHY Cross Point Adjustment Register */ + __IOM uint16_t UFRMNUM; /*!< (@ 0x0000004E) uFrame Number Register */ struct { - __IOM uint32_t SLEWR00 : 1; /*!< [0..0] Receiver Cross Point Adjustment 00 */ - __IOM uint32_t SLEWR01 : 1; /*!< [1..1] Receiver Cross Point Adjustment 01 */ - __IOM uint32_t SLEWF00 : 1; /*!< [2..2] Receiver Cross Point Adjustment 00 */ - __IOM uint32_t SLEWF01 : 1; /*!< [3..3] Receiver Cross Point Adjustment 01 */ - uint32_t : 28; - } PHYSLEW_b; + __IM uint16_t UFRNM : 3; /*!< [2..0] MicroframeIndicate the microframe number. */ + uint16_t : 12; + __IOM uint16_t DVCHG : 1; /*!< [15..15] Device State Change */ + } UFRMNUM_b; }; - __IM uint32_t RESERVED22[3]; union { - __IOM uint16_t LPCTRL; /*!< (@ 0x00000100) Low Power Control Register */ + __IOM uint16_t USBADDR; /*!< (@ 0x00000050) USB Address Register */ struct { - uint16_t : 7; - __IOM uint16_t HWUPM : 1; /*!< [7..7] Resume Return Mode Setting */ - uint16_t : 8; - } LPCTRL_b; + __IM uint16_t USBADDR : 7; /*!< [6..0] USB Address In device controller mode, these flags indicate + * the USB address assigned by the host when the USBHS processed + * the SET_ADDRESS request successfully. */ + uint16_t : 1; + __IOM uint16_t STSRECOV0 : 3; /*!< [10..8] Status Recovery */ + } USBADDR_b; }; + __IM uint16_t RESERVED9; union { - __IOM uint16_t LPSTS; /*!< (@ 0x00000102) Low Power Status Register */ + __IOM uint16_t USBREQ; /*!< (@ 0x00000054) USB Request Type Register */ struct { - uint16_t : 14; - __IOM uint16_t SUSPENDM : 1; /*!< [14..14] UTMI SuspendM Control */ - uint16_t : 1; - } LPSTS_b; + __IOM uint16_t BMREQUESTTYPE : 8; /*!< [7..0] Request TypeThese bits store the USB request bmRequestType + * value. */ + __IOM uint16_t BREQUEST : 8; /*!< [15..8] RequestThese bits store the USB request bRequest value. */ + } USBREQ_b; }; - __IM uint32_t RESERVED23[15]; union { - __IOM uint16_t BCCTRL; /*!< (@ 0x00000140) Battery Charging Control Register */ + __IOM uint16_t USBVAL; /*!< (@ 0x00000056) USB Request Value Register */ struct { - __IOM uint16_t IDPSRCE : 1; /*!< [0..0] IDPSRC Control */ - __IOM uint16_t IDMSINKE : 1; /*!< [1..1] IDMSINK Control */ - __IOM uint16_t VDPSRCE : 1; /*!< [2..2] VDPSRC Control */ - __IOM uint16_t IDPSINKE : 1; /*!< [3..3] IDPSINK Control */ - __IOM uint16_t VDMSRCE : 1; /*!< [4..4] VDMSRC Control */ - __IOM uint16_t DCPMODE : 1; /*!< [5..5] DCP Mode Control */ - uint16_t : 2; - __IM uint16_t CHGDETSTS : 1; /*!< [8..8] CHGDET Status */ - __IM uint16_t PDDETSTS : 1; /*!< [9..9] PDDET Status */ - uint16_t : 6; - } BCCTRL_b; + __IOM uint16_t WVALUE : 16; /*!< [15..0] ValueThese bits store the USB request Value value. */ + } USBVAL_b; }; - __IM uint16_t RESERVED24; union { - __IOM uint16_t PL1CTRL1; /*!< (@ 0x00000144) Function L1 Control Register 1 */ + __IOM uint16_t USBINDX; /*!< (@ 0x00000058) USB Request Index Register */ struct { - __IOM uint16_t L1RESPEN : 1; /*!< [0..0] L1 Response Enable */ - __IOM uint16_t L1RESPMD : 2; /*!< [2..1] L1 Response Mode */ - __IOM uint16_t L1NEGOMD : 1; /*!< [3..3] L1 Response Negotiation Control.NOTE: This bit is valid - * only when the L1RESPMD[1:0] value is 2'b11. */ - __IM uint16_t DVSQ : 4; /*!< [7..4] DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates - * the L1 state together with the device state bits DVSQ[2:0]. */ - __IOM uint16_t HIRDTHR : 4; /*!< [11..8] L1 Response Negotiation Threshold ValueHIRD threshold - * value used for L1NEGOMD.The format is the same as the HIRD - * field in HL1CTRL. */ - uint16_t : 2; - __IOM uint16_t L1EXTMD : 1; /*!< [14..14] PHY Control Mode at L1 Return */ - uint16_t : 1; - } PL1CTRL1_b; + __IOM uint16_t WINDEX : 16; /*!< [15..0] IndexThese bits store the USB request wIndex value. */ + } USBINDX_b; }; union { - __IOM uint16_t PL1CTRL2; /*!< (@ 0x00000146) Function L1 Control Register 2 */ + __IOM uint16_t USBLENG; /*!< (@ 0x0000005A) USB Request Length Register */ struct { - uint16_t : 8; - __IOM uint16_t HIRDMON : 4; /*!< [11..8] HIRD Value Monitor */ - __IOM uint16_t RWEMON : 1; /*!< [12..12] RWE Value Monitor */ - uint16_t : 3; - } PL1CTRL2_b; + __IOM uint16_t WLENGTH : 16; /*!< [15..0] LengthThese bits store the USB request wLength value. */ + } USBLENG_b; }; union { - __IOM uint16_t HL1CTRL1; /*!< (@ 0x00000148) Host L1 Control Register 1 */ + __IOM uint16_t DCPCFG; /*!< (@ 0x0000005C) DCP Configuration Register */ struct { - __IOM uint16_t L1REQ : 1; /*!< [0..0] L1 Transition Request */ - __IM uint16_t L1STATUS : 2; /*!< [2..1] L1 Request Completion Status */ - uint16_t : 13; - } HL1CTRL1_b; + uint16_t : 4; + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ + uint16_t : 2; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ + __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ + } DCPCFG_b; }; union { - __IOM uint16_t HL1CTRL2; /*!< (@ 0x0000014A) Host L1 Control Register 2 */ - - struct - { - __IOM uint16_t L1ADDR : 4; /*!< [3..0] LPM Token DeviceAddressThese bits specify the value to - * be set in the ADDR field of LPM token. */ - uint16_t : 4; - __IOM uint16_t HIRD : 4; /*!< [11..8] LPM Token HIRD */ - __IOM uint16_t L1RWE : 1; /*!< [12..12] LPM Token L1 RemoteWake EnableThese bits specify the - * value to be set in the RWE field of LPM token. */ - uint16_t : 2; - __IOM uint16_t BESL : 1; /*!< [15..15] BESL & Alternate HIRDThis bit selects the K-State drive - * period at the time of L1 Resume. */ - } HL1CTRL2_b; + __IOM uint16_t DCPMAXP; /*!< (@ 0x0000005E) DCP Maximum Packet Size Register */ + + struct + { + __IOM uint16_t MXPS : 7; /*!< [6..0] Maximum Packet SizeThese bits set the maximum amount + * of data (maximum packet size) in payloads for the DCP. */ + uint16_t : 5; + __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ + } DCPMAXP_b; }; - __IM uint32_t RESERVED25[5]; union { - __IM uint32_t DPUSR0R; /*!< (@ 0x00000160) Deep Standby USB Transceiver Control/Pin Monitor - * Register */ + __IOM uint16_t DCPCTR; /*!< (@ 0x00000060) DCP Control Register */ struct { - uint32_t : 20; - __IM uint32_t DOVCAHM : 1; /*!< [20..20] OVRCURA InputIndicates OVRCURA input signal on the - * HS side of USB port. */ - __IM uint32_t DOVCBHM : 1; /*!< [21..21] OVRCURB InputIndicates OVRCURB input signal on the - * HS side of USB port. */ - uint32_t : 1; - __IM uint32_t DVBSTSHM : 1; /*!< [23..23] VBUS InputIndicates VBUS input signal on the HS side - * of USB port. */ - uint32_t : 8; - } DPUSR0R_b; + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + __IOM uint16_t CCPL : 1; /*!< [2..2] Control Transfer End Enable */ + uint16_t : 1; + __IOM uint16_t PINGE : 1; /*!< [4..4] PING Token Issue Enable */ + __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Monitor */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ + uint16_t : 2; + __IOM uint16_t SUREQCLR : 1; /*!< [11..11] SUREQ Bit Clear */ + __IM uint16_t CSSTS : 1; /*!< [12..12] Split Transaction COMPLETE SPLIT(CSPLIT) Status */ + __IOM uint16_t CSCLR : 1; /*!< [13..13] Split Transaction CSPLIT Status Clear */ + __IOM uint16_t SUREQ : 1; /*!< [14..14] Setup Token Transmission */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } DCPCTR_b; }; + __IM uint16_t RESERVED10; union { - __IOM uint32_t DPUSR1R; /*!< (@ 0x00000164) Deep Standby USB Suspend/Resume Interrupt Register */ + __IOM uint16_t PIPESEL; /*!< (@ 0x00000064) Pipe Window Select Register */ struct { - uint32_t : 4; - __IOM uint32_t DOVCAHE : 1; /*!< [4..4] OVRCURA Interrupt Enable Clear */ - __IOM uint32_t DOVCBHE : 1; /*!< [5..5] OVRCURB Interrupt Enable Clear */ - uint32_t : 1; - __IOM uint32_t DVBSTSHE : 1; /*!< [7..7] VBUS Interrupt Enable/Clear */ - uint32_t : 12; - __IM uint32_t DOVCAH : 1; /*!< [20..20] Indication of Return from OVRCURA Interrupt Source */ - __IM uint32_t DOVCBH : 1; /*!< [21..21] Indication of Return from OVRCURB Interrupt Source */ - uint32_t : 1; - __IM uint32_t DVBSTSH : 1; /*!< [23..23] Indication of Return from VBUS Interrupt Source */ - uint32_t : 8; - } DPUSR1R_b; + __IOM uint16_t PIPESEL : 4; /*!< [3..0] Pipe Window Select */ + } PIPESEL_b; }; + __IM uint16_t RESERVED11; union { - __IOM uint16_t DPUSR2R; /*!< (@ 0x00000168) Deep Standby USB Suspend/Resume Interrupt Register */ + __IOM uint16_t PIPECFG; /*!< (@ 0x00000068) Pipe Configuration Register */ struct { - __IM uint16_t DPINT : 1; /*!< [0..0] Indication of Return from DP Interrupt Source */ - __IM uint16_t DMINT : 1; /*!< [1..1] Indication of Return from DM Interrupt Source */ - uint16_t : 2; - __IM uint16_t DPVAL : 1; /*!< [4..4] DP InputIndicates DP input signal on the HS side of USB - * port. */ - __IM uint16_t DMVAL : 1; /*!< [5..5] DM InputIndicates DM input signal on the HS side of USB - * port. */ + __IOM uint16_t EPNUM : 4; /*!< [3..0] Endpoint NumberThese bits specify the endpoint number + * for the selected pipe.Setting 0000b means unused pipe. */ + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ uint16_t : 2; - __IOM uint16_t DPINTE : 1; /*!< [8..8] DP Interrupt Enable Clear */ - __IOM uint16_t DMINTE : 1; /*!< [9..9] DM Interrupt Enable Clear */ - uint16_t : 6; - } DPUSR2R_b; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ + __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ + __IOM uint16_t DBLB : 1; /*!< [9..9] Double Buffer Mode */ + __IOM uint16_t BFRE : 1; /*!< [10..10] BRDY Interrupt Operation Specification */ + uint16_t : 3; + __IOM uint16_t TYPE : 2; /*!< [15..14] Transfer Type */ + } PIPECFG_b; }; union { - __IOM uint16_t DPUSRCR; /*!< (@ 0x0000016A) Deep Standby USB Suspend/Resume Command Register */ + __IOM uint16_t PIPEBUF; /*!< (@ 0x0000006A)Pipe Buffer Register */ struct { - __IOM uint16_t FIXPHY : 1; /*!< [0..0] USB Transceiver Control Fix */ - __IOM uint16_t FIXPHYPD : 1; /*!< [1..1] USB Transceiver Control Fix for PLL */ - uint16_t : 14; - } DPUSRCR_b; + __IOM uint16_t BUFNMB : 8; /*!< [7..0] Buffer NumberThese bits specify the FIFO buffer number of the + * selected pipe (04h to 87h). */ + uint16_t : 2; + __IOM uint16_t BUFSIZE : 5; /*!< [14..10] Buffer Size 00h: 64 bytes 01h: 128 bytes : 1Fh: 2 Kbytes */ + } PIPEBUF_b; /*!< BitSize */ }; - __IM uint32_t RESERVED26[165]; union { - __IOM uint32_t DPUSR0R_FS; /*!< (@ 0x00000400) Deep Software Standby USB Transceiver Control/Pin - * Monitor Register */ + __IOM uint16_t PIPEMAXP; /*!< (@ 0x0000006C) Pipe Maximum Packet Size Register */ struct { - __IOM uint32_t SRPC0 : 1; /*!< [0..0] USB Single End Receiver Control */ - __IOM uint32_t RPUE0 : 1; /*!< [1..1] DP Pull-Up Resistor Control */ - uint32_t : 1; - __IOM uint32_t DRPD0 : 1; /*!< [3..3] D+/D- Pull-Down Resistor Control */ - __IOM uint32_t FIXPHY0 : 1; /*!< [4..4] USB Transceiver Output Fix */ - uint32_t : 11; - __IM uint32_t DP0 : 1; /*!< [16..16] USB0 D+ InputIndicates the D+ input signal of the USB. */ - __IM uint32_t DM0 : 1; /*!< [17..17] USB D-InputIndicates the D- input signal of the USB. */ - uint32_t : 2; - __IM uint32_t DOVCA0 : 1; /*!< [20..20] USB OVRCURA InputIndicates the OVRCURA input signal - * of the USB. */ - __IM uint32_t DOVCB0 : 1; /*!< [21..21] USB OVRCURB InputIndicates the OVRCURB input signal - * of the USB. */ - uint32_t : 1; - __IM uint32_t DVBSTS0 : 1; /*!< [23..23] USB VBUS InputIndicates the VBUS input signal of the - * USB. */ - uint32_t : 8; - } DPUSR0R_FS_b; + __IOM uint16_t MXPS : 11; /*!< [10..0] Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to + * 1024 bytes (400h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes + * (010h), 32 bytes (020h), 64 bytes (040h),512bytes(200h) ([2:0] are not + * provided.)PIPE6 to PIPE9: 1 byte (001h) to + * 64 bytes (040h) (Bits [10:7] are not provided.) */ + uint16_t : 1; + __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ + } PIPEMAXP_b; }; union { - __IOM uint32_t DPUSR1R_FS; /*!< (@ 0x00000404) Deep Software Standby USB Suspend/Resume Interrupt - * Register */ + __IOM uint16_t PIPEPERI; /*!< (@ 0x0000006E) Pipe Cycle Control Register */ struct { - __IOM uint32_t DPINTE0 : 1; /*!< [0..0] USB DP Interrupt Enable/Clear */ - __IOM uint32_t DMINTE0 : 1; /*!< [1..1] USB DM Interrupt Enable/Clear */ - uint32_t : 2; - __IOM uint32_t DOVRCRAE0 : 1; /*!< [4..4] USB OVRCURA Interrupt Enable/Clear */ - __IOM uint32_t DOVRCRBE0 : 1; /*!< [5..5] USB OVRCURB Interrupt Enable/Clear */ - uint32_t : 1; - __IOM uint32_t DVBSE0 : 1; /*!< [7..7] USB VBUS Interrupt Enable/Clear */ - uint32_t : 8; - __IM uint32_t DPINT0 : 1; /*!< [16..16] USB DP Interrupt Source Recovery */ - __IM uint32_t DMINT0 : 1; /*!< [17..17] USB DM Interrupt Source Recovery */ - uint32_t : 2; - __IM uint32_t DOVRCRA0 : 1; /*!< [20..20] USB OVRCURA Interrupt Source Recovery */ - __IM uint32_t DOVRCRB0 : 1; /*!< [21..21] USB OVRCURB Interrupt Source Recovery */ - uint32_t : 1; - __IM uint32_t DVBINT0 : 1; /*!< [23..23] USB VBUS Interrupt Source Recovery */ - uint32_t : 8; - } DPUSR1R_FS_b; + __IOM uint16_t IITV : 3; /*!< [2..0] Interval Error Detection IntervalSpecifies the interval + * error detection timing for the selected pipe in terms of + * frames, which is expressed as nth power of 2. */ + uint16_t : 9; + __IOM uint16_t IFIS : 1; /*!< [12..12] Isochronous IN Buffer Flush */ + } PIPEPERI_b; }; -} R_USB_FS0_Type; /*!< Size = 1032 (0x408) */ - -/* =========================================================================================================================== */ -/* ================ R_USB_HS0 ================ */ -/* =========================================================================================================================== */ - -/** - * @brief USB 2.0 Module (R_USB_HS0) - */ -typedef struct /*!< (@ 0x40090000) R_USB_HS0 Structure */ -{ union { - __IOM uint16_t SYSCFG; /*!< (@ 0x00000000) System Configuration Control Register */ + __IOM uint16_t PIPE_CTR[9]; /*!< (@ 0x00000070) Pipe [0..8] Control Register */ struct { - __IOM uint16_t USBE : 1; /*!< [0..0] USB Operation Enable */ - uint16_t : 3; - __IOM uint16_t DPRPU : 1; /*!< [4..4] D+ Line Resistor Control */ - __IOM uint16_t DRPD : 1; /*!< [5..5] D+/D- Line Resistor Control */ - __IOM uint16_t DCFM : 1; /*!< [6..6] Controller Function Select */ - __IOM uint16_t HSE : 1; /*!< [7..7] High-Speed Operation Enable */ - __IOM uint16_t CNEN : 1; /*!< [8..8] CNEN Single End Receiver Enable */ - uint16_t : 1; - __IOM uint16_t SCKE : 1; /*!< [10..10] USB Clock Enable */ - } SYSCFG_b; + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + uint16_t : 3; + __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Confirmation */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ + __IOM uint16_t ACLRM : 1; /*!< [9..9] Auto Buffer Clear Mode */ + __IOM uint16_t ATREPM : 1; /*!< [10..10] Auto Response Mode */ + uint16_t : 1; + __IM uint16_t CSSTS : 1; /*!< [12..12] CSSTS StatusThis bit indicates the CSPLIT status of + * Split Transaction of the relevant pipe */ + __IOM uint16_t CSCLR : 1; /*!< [13..13] CSPLIT Status ClearSet this bit to 1 when clearing + * the CSSTS bit of the relevant pipe */ + __IM uint16_t INBUFM : 1; /*!< [14..14] Transmit Buffer Monitor */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } PIPE_CTR_b[9]; }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14[3]; + __IOM R_USB_HS0_PIPE_TR_Type PIPE_TR[5]; /*!< (@ 0x00000090) Pipe Transaction Counter Registers */ + __IM uint32_t RESERVED15[11]; union { - __IOM uint16_t BUSWAIT; /*!< (@ 0x00000002) CPU Bus Wait Register */ + __IOM uint16_t DEVADD[10]; /*!< (@ 0x000000D0) Device Address Configuration Register */ struct { - __IOM uint16_t BWAIT : 4; /*!< [3..0] CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 - * access cycles) */ - } BUSWAIT_b; + uint16_t : 6; + __IOM uint16_t USBSPD : 2; /*!< [7..6] Transfer Speed of Communication Target Device */ + __IOM uint16_t HUBPORT : 3; /*!< [10..8] Communication Target Connecting Hub Port */ + __IOM uint16_t UPPHUB : 4; /*!< [14..11] Communication Target Connecting Hub Register */ + } DEVADD_b[10]; }; + __IM uint16_t RESERVED16; + __IM uint32_t RESERVED17[6]; union { - __IM uint16_t SYSSTS0; /*!< (@ 0x00000004) System Configuration Status Register 0 */ + __IOM uint16_t LPCTRL; /*!< (@ 0x00000100) Low Power Control Register */ struct { - __IM uint16_t LNST : 2; /*!< [1..0] USB Data Line Status Monitor */ - __IM uint16_t IDMON : 1; /*!< [2..2] External ID0 Input Pin Monitor */ - uint16_t : 2; - __IM uint16_t SOFEA : 1; /*!< [5..5] SOF Active Monitor While Host Controller Function is - * Selected. */ - __IM uint16_t HTACT : 1; /*!< [6..6] USB Host Sequencer Status Monitor */ uint16_t : 7; - __IM uint16_t OVCMON : 2; /*!< [15..14] External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe - * OCVMON[1] bit indicates the status of the USBHS_OVRCURA - * pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB - * pin. */ - } SYSSTS0_b; + __IOM uint16_t HWUPM : 1; /*!< [7..7] Resume Return Mode Setting */ + } LPCTRL_b; }; union { - __IM uint16_t PLLSTA; /*!< (@ 0x00000006) PLL Status Register */ + __IOM uint16_t LPSTS; /*!< (@ 0x00000102) Low Power Status Register */ struct { - __IM uint16_t PLLLOCK : 1; /*!< [0..0] PLL Lock Flag */ - } PLLSTA_b; + uint16_t : 14; + __IOM uint16_t SUSPENDM : 1; /*!< [14..14] UTMI SuspendM Control */ + } LPSTS_b; }; + __IM uint32_t RESERVED18[15]; union { - __IOM uint16_t DVSTCTR0; /*!< (@ 0x00000008) Device State Control Register 0 */ + __IOM uint16_t BCCTRL; /*!< (@ 0x00000140) Battery Charging Control Register */ struct { - __IM uint16_t RHST : 3; /*!< [2..0] USB Bus Reset Status */ - uint16_t : 1; - __IOM uint16_t UACT : 1; /*!< [4..4] USB Bus Enable */ - __IOM uint16_t RESUME : 1; /*!< [5..5] Resume Output */ - __IOM uint16_t USBRST : 1; /*!< [6..6] USB Bus Reset Output */ - __IOM uint16_t RWUPE : 1; /*!< [7..7] Wakeup Detection Enable */ - __IOM uint16_t WKUP : 1; /*!< [8..8] Wakeup Output */ - __IOM uint16_t VBUSEN : 1; /*!< [9..9] USB_VBUSEN Output Pin Control */ - __IOM uint16_t EXICEN : 1; /*!< [10..10] USB_EXICEN Output Pin Control */ - __IOM uint16_t HNPBTOA : 1; /*!< [11..11] Host Negotiation Protocol (HNP) Control This bit is - * used when switching from device B to device A while in - * OTG mode. If the HNPBTOA bit is 1, the internal function - * control keeps the suspended state until the HNP processing - * ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is - * set. */ - } DVSTCTR0_b; + __IOM uint16_t IDPSRCE : 1; /*!< [0..0] IDPSRC Control */ + __IOM uint16_t IDMSINKE : 1; /*!< [1..1] IDMSINK Control */ + __IOM uint16_t VDPSRCE : 1; /*!< [2..2] VDPSRC Control */ + __IOM uint16_t IDPSINKE : 1; /*!< [3..3] IDPSINK Control */ + __IOM uint16_t VDMSRCE : 1; /*!< [4..4] VDMSRC Control */ + __IOM uint16_t DCPMODE : 1; /*!< [5..5] DCP Mode Control */ + uint16_t : 2; + __IM uint16_t CHGDETSTS : 1; /*!< [8..8] CHGDET Status */ + __IM uint16_t PDDETSTS : 1; /*!< [9..9] PDDET Status */ + } BCCTRL_b; }; - __IM uint16_t RESERVED; + __IM uint16_t RESERVED19; union { - __IOM uint16_t TESTMODE; /*!< (@ 0x0000000C) USB Test Mode Register */ + __IOM uint16_t PL1CTRL1; /*!< (@ 0x00000144) Function L1 Control Register 1 */ struct { - __IOM uint16_t UTST : 4; /*!< [3..0] Test Mode */ - } TESTMODE_b; + __IOM uint16_t L1RESPEN : 1; /*!< [0..0] L1 Response Enable */ + __IOM uint16_t L1RESPMD : 2; /*!< [2..1] L1 Response Mode */ + __IOM uint16_t L1NEGOMD : 1; /*!< [3..3] L1 Response Negotiation Control.NOTE: This bit is valid + * only when the L1RESPMD[1:0] value is 2'b11. */ + __IM uint16_t DVSQ : 4; /*!< [7..4] DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates + * the L1 state together with the device state bits DVSQ[2:0]. */ + __IOM uint16_t HIRDTHR : 4; /*!< [11..8] L1 Response Negotiation Threshold ValueHIRD threshold + * value used for L1NEGOMD.The format is the same as the HIRD + * field in HL1CTRL. */ + uint16_t : 2; + __IOM uint16_t L1EXTMD : 1; /*!< [14..14] PHY Control Mode at L1 Return */ + } PL1CTRL1_b; }; - __IM uint16_t RESERVED1; - __IM uint32_t RESERVED2; union { - __IOM uint32_t CFIFO; /*!< (@ 0x00000014) CFIFO Port Register */ + __IOM uint16_t PL1CTRL2; /*!< (@ 0x00000146) Function L1 Control Register 2 */ struct { - union - { - __IOM uint16_t CFIFOL; /*!< (@ 0x00000014) CFIFO Port Register L */ - __IOM uint8_t CFIFOLL; /*!< (@ 0x00000014) CFIFO Port Register LL */ - }; - - union - { - __IOM uint16_t CFIFOH; /*!< (@ 0x00000016) CFIFO Port Register H */ - - struct - { - __IM uint8_t RESERVED3; - __IOM uint8_t CFIFOHH; /*!< (@ 0x00000017) CFIFO Port Register HH */ - }; - }; - }; + uint16_t : 8; + __IOM uint16_t HIRDMON : 4; /*!< [11..8] HIRD Value Monitor */ + __IOM uint16_t RWEMON : 1; /*!< [12..12] RWE Value Monitor */ + } PL1CTRL2_b; }; union { - __IOM uint32_t D0FIFO; /*!< (@ 0x00000018) D0FIFO Port Register */ + __IOM uint16_t HL1CTRL1; /*!< (@ 0x00000148) Host L1 Control Register 1 */ struct { - union - { - __IOM uint16_t D0FIFOL; /*!< (@ 0x00000018) D0FIFO Port Register L */ - __IOM uint8_t D0FIFOLL; /*!< (@ 0x00000018) D0FIFO Port Register LL */ - }; - - union - { - __IOM uint16_t D0FIFOH; /*!< (@ 0x0000001A) D0FIFO Port Register H */ - - struct - { - __IM uint8_t RESERVED4; - __IOM uint8_t D0FIFOHH; /*!< (@ 0x0000001B) D0FIFO Port Register HH */ - }; - }; - }; + __IOM uint16_t L1REQ : 1; /*!< [0..0] L1 Transition Request */ + __IM uint16_t L1STATUS : 2; /*!< [2..1] L1 Request Completion Status */ + } HL1CTRL1_b; }; union { - __IOM uint32_t D1FIFO; /*!< (@ 0x0000001C) D1FIFO Port Register */ + __IOM uint16_t HL1CTRL2; /*!< (@ 0x0000014A) Host L1 Control Register 2 */ struct { - union - { - __IOM uint16_t D1FIFOL; /*!< (@ 0x0000001C) D1FIFO Port Register L */ - __IOM uint8_t D1FIFOLL; /*!< (@ 0x0000001C) D1FIFO Port Register LL */ - }; - - union - { - __IOM uint16_t D1FIFOH; /*!< (@ 0x0000001E) D1FIFO Port Register H */ - - struct - { - __IM uint8_t RESERVED5; - __IOM uint8_t D1FIFOHH; /*!< (@ 0x0000001F) D1FIFO Port Register HH */ - }; - }; - }; + __IOM uint16_t L1ADDR : 4; /*!< [3..0] LPM Token DeviceAddressThese bits specify the value to + * be set in the ADDR field of LPM token. */ + uint16_t : 4; + __IOM uint16_t HIRD : 4; /*!< [11..8] LPM Token HIRD */ + __IOM uint16_t L1RWE : 1; /*!< [12..12] LPM Token L1 RemoteWake EnableThese bits specify the + * value to be set in the RWE field of LPM token. */ + uint16_t : 2; + __IOM uint16_t BESL : 1; /*!< [15..15] BESL & Alternate HIRDThis bit selects the K-State drive + * period at the time of L1 Resume. */ + } HL1CTRL2_b; }; + __IM uint32_t RESERVED20; union { - __IOM uint16_t CFIFOSEL; /*!< (@ 0x00000020) CFIFO Port Select Register */ + __IOM uint16_t PHYTRIM1; /*!< (@ 0x00000150)PHY Timing Register 1 */ struct { - __IOM uint16_t CURPIPE : 4; /*!< [3..0] CFIFO Port Access Pipe Specification */ - uint16_t : 1; - __IOM uint16_t ISEL : 1; /*!< [5..5] CFIFO Port Access Direction When DCP is Selected */ - uint16_t : 2; - __IOM uint16_t BIGEND : 1; /*!< [8..8] CFIFO Port Endian Control */ - uint16_t : 1; - __IOM uint16_t MBW : 2; /*!< [11..10] CFIFO Port Access Bit Width */ - uint16_t : 2; - __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ - __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ - } CFIFOSEL_b; + __IOM uint16_t DRISE : 2; /*!< [1..0]FS/LS Rising-Edge Output Waveform Adjustment Function */ + __IOM uint16_t DFALL : 2; /*!< [3..2]FS/LS Falling-Edge Output Waveform Adjustment Function */ + uint16_t : 3; + __IOM uint16_t PCOMPENB : 1; /*!< [7..7]PVDD Start-up Detection */ + __IOM uint16_t HSIUP : 4; /*!< [11..8]HS Output Level Setting */ + __IOM uint16_t IMPOFFSET : 3; /*!< [14..12]terminating resistance offset value setting.Offset value for + * adjusting the terminating resistance. */ + } PHYTRIM1_b; /*!< BitSize */ }; union { - __IOM uint16_t CFIFOCTR; /*!< (@ 0x00000022) CFIFO Port Control Register */ + __IOM uint16_t PHYTRIM2; /*!< (@ 0x00000152)PHY Timing Register 2 */ struct { - __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive - * data. */ - uint16_t : 1; - __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ - __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ - __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ - } CFIFOCTR_b; + __IOM uint16_t SQU : 4; /*!< [3..0]Squelch Detection Level */ + uint16_t : 3; + __IOM uint16_t HSRXENMO : 1; /*!< [7..7]HS Receive Enable Control Mode */ + __IOM uint16_t PDR : 2; /*!< [9..8]HS Output Adjustment Function */ + uint16_t : 2; + __IOM uint16_t DIS : 3; /*!< [14..12]Disconnect Detection Level */ + } PHYTRIM2_b; /*!< BitSize */ }; - __IM uint32_t RESERVED6; + __IM uint32_t RESERVED21[3]; union { - __IOM uint16_t D0FIFOSEL; /*!< (@ 0x00000028) D0FIFO Port Select Register */ + __IM uint32_t DPUSR0R; /*!< (@ 0x00000160) Deep Standby USB Transceiver Control/Pin Monitor + * Register */ struct { - __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ - uint16_t : 4; - __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ - uint16_t : 1; - __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ - __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ - __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified - * Pipe Data is Read */ - __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer RewindNote: Only 0 can be read. */ - __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ - } D0FIFOSEL_b; + uint32_t : 20; + __IM uint32_t DOVCAHM : 1; /*!< [20..20] OVRCURA InputIndicates OVRCURA input signal on the + * HS side of USB port. */ + __IM uint32_t DOVCBHM : 1; /*!< [21..21] OVRCURB InputIndicates OVRCURB input signal on the + * HS side of USB port. */ + uint32_t : 1; + __IM uint32_t DVBSTSHM : 1; /*!< [23..23] VBUS InputIndicates VBUS input signal on the HS side + * of USB port. */ + } DPUSR0R_b; }; union { - __IOM uint16_t D0FIFOCTR; /*!< (@ 0x0000002A) D0FIFO Port Control Register */ + __IOM uint32_t DPUSR1R; /*!< (@ 0x00000164) Deep Standby USB Suspend/Resume Interrupt Register */ struct { - __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive - * data. */ - uint16_t : 1; - __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ - __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ - __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ - } D0FIFOCTR_b; + uint32_t : 4; + __IOM uint32_t DOVCAHE : 1; /*!< [4..4] OVRCURA Interrupt Enable Clear */ + __IOM uint32_t DOVCBHE : 1; /*!< [5..5] OVRCURB Interrupt Enable Clear */ + uint32_t : 1; + __IOM uint32_t DVBSTSHE : 1; /*!< [7..7] VBUS Interrupt Enable/Clear */ + uint32_t : 12; + __IM uint32_t DOVCAH : 1; /*!< [20..20] Indication of Return from OVRCURA Interrupt Source */ + __IM uint32_t DOVCBH : 1; /*!< [21..21] Indication of Return from OVRCURB Interrupt Source */ + uint32_t : 1; + __IM uint32_t DVBSTSH : 1; /*!< [23..23] Indication of Return from VBUS Interrupt Source */ + } DPUSR1R_b; }; union { - __IOM uint16_t D1FIFOSEL; /*!< (@ 0x0000002C) D1FIFO Port Select Register */ + __IOM uint16_t DPUSR2R; /*!< (@ 0x00000168) Deep Standby USB Suspend/Resume Interrupt Register */ struct { - __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ - uint16_t : 4; - __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ - uint16_t : 1; - __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ - __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ - __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified - * Pipe Data is Read */ - __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ - __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ - } D1FIFOSEL_b; + __IM uint16_t DPINT : 1; /*!< [0..0] Indication of Return from DP Interrupt Source */ + __IM uint16_t DMINT : 1; /*!< [1..1] Indication of Return from DM Interrupt Source */ + uint16_t : 2; + __IM uint16_t DPVAL : 1; /*!< [4..4] DP InputIndicates DP input signal on the HS side of USB + * port. */ + __IM uint16_t DMVAL : 1; /*!< [5..5] DM InputIndicates DM input signal on the HS side of USB + * port. */ + uint16_t : 2; + __IOM uint16_t DPINTE : 1; /*!< [8..8] DP Interrupt Enable Clear */ + __IOM uint16_t DMINTE : 1; /*!< [9..9] DM Interrupt Enable Clear */ + } DPUSR2R_b; }; union { - __IOM uint16_t D1FIFOCTR; /*!< (@ 0x0000002E) D1FIFO Port Control Register */ + __IOM uint16_t DPUSRCR; /*!< (@ 0x0000016A) Deep Standby USB Suspend/Resume Command Register */ struct { - __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive - * data. */ - uint16_t : 1; - __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ - __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ - __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ - } D1FIFOCTR_b; + __IOM uint16_t FIXPHY : 1; /*!< [0..0] USB Transceiver Control Fix */ + __IOM uint16_t FIXPHYPD : 1; /*!< [1..1] USB Transceiver Control Fix for PLL */ + } DPUSRCR_b; }; +} R_USB_HS0_Type; /*!< Size = 1032 (0x408) */ + +/* =========================================================================================================================== */ +/* ================ R_WDT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Watchdog Timer (R_WDT) + */ +typedef struct /*!< (@ 0x40044200) R_WDT Structure */ +{ union { - __IOM uint16_t INTENB0; /*!< (@ 0x00000030) Interrupt Enable Register 0 */ + __IOM uint8_t WDTRR; /*!< (@ 0x00000000) WDT Refresh Register */ struct { - uint16_t : 8; - __IOM uint16_t BRDYE : 1; /*!< [8..8] Buffer Ready Interrupt Enable */ - __IOM uint16_t NRDYE : 1; /*!< [9..9] Buffer Not Ready Response Interrupt Enable */ - __IOM uint16_t BEMPE : 1; /*!< [10..10] Buffer Empty Interrupt Enable */ - __IOM uint16_t CTRE : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Enable */ - __IOM uint16_t DVSE : 1; /*!< [12..12] Device State Transition Interrupt Enable */ - __IOM uint16_t SOFE : 1; /*!< [13..13] Frame Number Update Interrupt Enable */ - __IOM uint16_t RSME : 1; /*!< [14..14] Resume Interrupt Enable */ - __IOM uint16_t VBSE : 1; /*!< [15..15] VBUS Interrupt Enable */ - } INTENB0_b; + __IOM uint8_t WDTRR : 8; /*!< [7..0] WDTRR is an 8-bit register that refreshes the down-counter + * of the WDT. */ + } WDTRR_b; }; + __IM uint8_t RESERVED; union { - __IOM uint16_t INTENB1; /*!< (@ 0x00000032) Interrupt Enable Register 1 */ + __IOM uint16_t WDTCR; /*!< (@ 0x00000002) WDT Control Register */ struct { - __IOM uint16_t PDDETINTE0 : 1; /*!< [0..0] PDDETINT0 Detection Interrupt Enable */ - uint16_t : 3; - __IOM uint16_t SACKE : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Enable */ - __IOM uint16_t SIGNE : 1; /*!< [5..5] Setup Transaction Error Interrupt Enable */ - __IOM uint16_t EOFERRE : 1; /*!< [6..6] EOF Error Detection Interrupt Enable */ - uint16_t : 1; - __IOM uint16_t LPMENDE : 1; /*!< [8..8] LPM Transaction End Interrupt Enable */ - __IOM uint16_t L1RSMENDE : 1; /*!< [9..9] L1 Resume End Interrupt Enable */ - uint16_t : 1; - __IOM uint16_t ATTCHE : 1; /*!< [11..11] Connection Detection Interrupt Enable */ - __IOM uint16_t DTCHE : 1; /*!< [12..12] Disconnection Detection Interrupt Enable */ - uint16_t : 1; - __IOM uint16_t BCHGE : 1; /*!< [14..14] USB Bus Change Interrupt Enable */ - __IOM uint16_t OVRCRE : 1; /*!< [15..15] Overcurrent Input Change Interrupt Enable */ - } INTENB1_b; + __IOM uint16_t TOPS : 2; /*!< [1..0] Timeout Period Selection */ + uint16_t : 2; + __IOM uint16_t CKS : 4; /*!< [7..4] Clock Division Ratio Selection */ + __IOM uint16_t RPES : 2; /*!< [9..8] Window End Position Selection */ + uint16_t : 2; + __IOM uint16_t RPSS : 2; /*!< [13..12] Window Start Position Selection */ + uint16_t : 2; + } WDTCR_b; }; - __IM uint16_t RESERVED7; union { - __IOM uint16_t BRDYENB; /*!< (@ 0x00000036) BRDY Interrupt Enable Register */ + __IOM uint16_t WDTSR; /*!< (@ 0x00000004) WDT Status Register */ struct { - __IOM uint16_t PIPE0BRDYE : 1; /*!< [0..0] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE1BRDYE : 1; /*!< [1..1] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE2BRDYE : 1; /*!< [2..2] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE3BRDYE : 1; /*!< [3..3] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE4BRDYE : 1; /*!< [4..4] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE5BRDYE : 1; /*!< [5..5] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE6BRDYE : 1; /*!< [6..6] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE7BRDYE : 1; /*!< [7..7] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE8BRDYE : 1; /*!< [8..8] BRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE9BRDYE : 1; /*!< [9..9] BRDY Interrupt Enable for PIPE */ - } BRDYENB_b; + __IM uint16_t CNTVAL : 14; /*!< [13..0] Down-Counter Value */ + __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ + __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ + } WDTSR_b; }; union { - __IOM uint16_t NRDYENB; /*!< (@ 0x00000038) NRDY Interrupt Enable Register */ + __IOM uint8_t WDTRCR; /*!< (@ 0x00000006) WDT Reset Control Register */ struct { - __IOM uint16_t PIPE0NRDYE : 1; /*!< [0..0] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE1NRDYE : 1; /*!< [1..1] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE2NRDYE : 1; /*!< [2..2] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE3NRDYE : 1; /*!< [3..3] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE4NRDYE : 1; /*!< [4..4] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE5NRDYE : 1; /*!< [5..5] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE6NRDYE : 1; /*!< [6..6] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE7NRDYE : 1; /*!< [7..7] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE8NRDYE : 1; /*!< [8..8] NRDY Interrupt Enable for PIPE */ - __IOM uint16_t PIPE9NRDYE : 1; /*!< [9..9] NRDY Interrupt Enable for PIPE */ - } NRDYENB_b; + uint8_t : 7; + __IOM uint8_t RSTIRQS : 1; /*!< [7..7] Reset Interrupt Request Selection */ + } WDTRCR_b; }; + __IM uint8_t RESERVED1; union { - __IOM uint16_t BEMPENB; /*!< (@ 0x0000003A) BEMP Interrupt Enable Register */ + __IOM uint8_t WDTCSTPR; /*!< (@ 0x00000008) WDT Count Stop Control Register */ struct { - __IOM uint16_t PIPE0BEMPE : 1; /*!< [0..0] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE1BEMPE : 1; /*!< [1..1] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE2BEMPE : 1; /*!< [2..2] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE3BEMPE : 1; /*!< [3..3] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE4BEMPE : 1; /*!< [4..4] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE5BEMPE : 1; /*!< [5..5] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE6BEMPE : 1; /*!< [6..6] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE7BEMPE : 1; /*!< [7..7] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE8BEMPE : 1; /*!< [8..8] BEMP Interrupt Enable for PIPE */ - __IOM uint16_t PIPE9BEMPE : 1; /*!< [9..9] BEMP Interrupt Enable for PIPE */ - } BEMPENB_b; + uint8_t : 7; + __IOM uint8_t SLCSTP : 1; /*!< [7..7] Sleep-Mode Count Stop Control */ + } WDTCSTPR_b; }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; +} R_WDT_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_TZF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TrustZone Filter (R_TZF) + */ +typedef struct /*!< (@ 0x40000E00) R_TZF Structure */ +{ union { - __IOM uint16_t SOFCFG; /*!< (@ 0x0000003C) SOF Output Configuration Register */ + __IOM uint16_t TZFOAD; /*!< (@ 0x00000000) TrustZone Filter Operation After Detection Register */ struct { - uint16_t : 4; - __IM uint16_t EDGESTS : 1; /*!< [4..4] Edge Interrupt Output Status Monitor */ - __IOM uint16_t INTL : 1; /*!< [5..5] Interrupt Output Sense Select */ - __IOM uint16_t BRDYM : 1; /*!< [6..6] BRDY Interrupt Status Clear Timing */ - uint16_t : 1; - __IOM uint16_t TRNENSEL : 1; /*!< [8..8] Transaction-Enabled Time Select */ - } SOFCFG_b; + __IOM uint16_t OAD : 1; /*!< [0..0] Operation after detection */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KeyCode */ + } TZFOAD_b; }; + __IM uint16_t RESERVED; union { - __IOM uint16_t PHYSET; /*!< (@ 0x0000003E) PHY Setting Register */ + __IOM uint16_t TZFPT; /*!< (@ 0x00000004) TrustZone Filter Protect Register */ struct { - __IOM uint16_t DIRPD : 1; /*!< [0..0] Power-Down Control */ - __IOM uint16_t PLLRESET : 1; /*!< [1..1] PLL Reset Control */ - uint16_t : 1; - __IOM uint16_t CDPEN : 1; /*!< [3..3] Charging Downstream Port Enable */ - __IOM uint16_t CLKSEL : 2; /*!< [5..4] Input System Clock Frequency */ - uint16_t : 2; - __IOM uint16_t REPSEL : 2; /*!< [9..8] Terminating Resistance Adjustment Cycle */ - uint16_t : 1; - __IOM uint16_t REPSTART : 1; /*!< [11..11] Forcibly Start Terminating Resistance Adjustment */ - uint16_t : 3; - __IOM uint16_t HSEB : 1; /*!< [15..15] CL-Only Mode */ - } PHYSET_b; + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KeyCode */ + } TZFPT_b; }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[94]; union { - __IOM uint16_t INTSTS0; /*!< (@ 0x00000040) Interrupt Status Register 0 */ + __IOM uint32_t TZFSAR; /*!< (@ 0x00000180) TrustZone Filter Security Attribution Register */ struct { - __IM uint16_t CTSQ : 3; /*!< [2..0] Control Transfer Stage */ - __IOM uint16_t VALID : 1; /*!< [3..3] USB Request Reception */ - __IM uint16_t DVSQ : 3; /*!< [6..4] Device State */ - __IM uint16_t VBSTS : 1; /*!< [7..7] VBUS Input Status */ - __IM uint16_t BRDY : 1; /*!< [8..8] Buffer Ready Interrupt Status */ - __IM uint16_t NRDY : 1; /*!< [9..9] Buffer Not Ready Interrupt Status */ - __IM uint16_t BEMP : 1; /*!< [10..10] Buffer Empty Interrupt Status */ - __IOM uint16_t CTRT : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Status */ - __IOM uint16_t DVST : 1; /*!< [12..12] Device State Transition Interrupt Status */ - __IOM uint16_t SOFR : 1; /*!< [13..13] Frame Number Refresh Interrupt Status */ - __IOM uint16_t RESM : 1; /*!< [14..14] Resume Interrupt Status */ - __IOM uint16_t VBINT : 1; /*!< [15..15] VBUS Interrupt Status */ - } INTSTS0_b; + __IOM uint32_t TZFSA0 : 1; /*!< [0..0] Security attributes of registers for TrustZone Filter */ + uint32_t : 31; + } TZFSAR_b; }; +} R_TZF_Type; /*!< Size = 388 (0x184) */ + +/* =========================================================================================================================== */ +/* ================ R_CPSCU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CPU System Security Control Unit (R_CPSCU) + */ + +typedef struct /*!< (@ 0x40008000) R_CPSCU Structure */ +{ + __IM uint32_t RESERVED[4]; union { - __IOM uint16_t INTSTS1; /*!< (@ 0x00000042) Interrupt Status Register 1 */ + __IOM uint32_t SRAMSAR; /*!< (@ 0x00000010) SRAM Security Attribution Register */ struct { - __IOM uint16_t PDDETINT0 : 1; /*!< [0..0] PDDET0 Detection Interrupt Status */ - uint16_t : 3; - __IOM uint16_t SACK : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Status */ - __IOM uint16_t SIGN : 1; /*!< [5..5] Setup Transaction Error Interrupt Status */ - __IOM uint16_t EOFERR : 1; /*!< [6..6] EOF Error Detection Interrupt Status */ - uint16_t : 1; - __IOM uint16_t LPMEND : 1; /*!< [8..8] LPM Transaction End Interrupt Status */ - __IOM uint16_t L1RSMEND : 1; /*!< [9..9] L1 Resume End Interrupt Status */ - uint16_t : 1; - __IOM uint16_t ATTCH : 1; /*!< [11..11] ATTCH Interrupt Status */ - __IOM uint16_t DTCH : 1; /*!< [12..12] USB Disconnection Detection Interrupt Status */ - uint16_t : 1; - __IOM uint16_t BCHG : 1; /*!< [14..14] USB Bus Change Interrupt Status */ - __IOM uint16_t OVRCR : 1; /*!< [15..15] Overcurrent Input Change Interrupt Status */ - } INTSTS1_b; + __IOM uint32_t SRAMSA0 : 1; /*!< [0..0] Security attributes of registers for SRAM Protection */ + __IOM uint32_t SRAMSA1 : 1; /*!< [1..1] Security attributes of registers for SRAM Protection + * 2 */ + __IOM uint32_t SRAMSA2 : 1; /*!< [2..2] Security attributes of registers for ECC Relation */ + uint32_t : 29; + } SRAMSAR_b; }; - __IM uint16_t RESERVED8; union { - __IOM uint16_t BRDYSTS; /*!< (@ 0x00000046) BRDY Interrupt Status Register */ + __IOM uint32_t STBRAMSAR; /*!< (@ 0x00000014) Standby RAM memory Security Attribution Register */ struct { - __IOM uint16_t PIPE0BRDY : 1; /*!< [0..0] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE1BRDY : 1; /*!< [1..1] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE2BRDY : 1; /*!< [2..2] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE3BRDY : 1; /*!< [3..3] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE4BRDY : 1; /*!< [4..4] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE5BRDY : 1; /*!< [5..5] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE6BRDY : 1; /*!< [6..6] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE7BRDY : 1; /*!< [7..7] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE8BRDY : 1; /*!< [8..8] BRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE9BRDY : 1; /*!< [9..9] BRDY Interrupt Status for PIPE */ - } BRDYSTS_b; + __IOM uint32_t NSBSTBR : 4; /*!< [3..0] Security attributes of each region for Standby RAM */ + uint32_t : 28; + } STBRAMSAR_b; }; + __IM uint32_t RESERVED1[6]; union { - __IOM uint16_t NRDYSTS; /*!< (@ 0x00000048) NRDY Interrupt Status Register */ + __IOM uint32_t DTCSAR; /*!< (@ 0x00000030) DTC Controller Security Attribution Register */ struct { - __IOM uint16_t PIPE0NRDY : 1; /*!< [0..0] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE1NRDY : 1; /*!< [1..1] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE2NRDY : 1; /*!< [2..2] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE3NRDY : 1; /*!< [3..3] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE4NRDY : 1; /*!< [4..4] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE5NRDY : 1; /*!< [5..5] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE6NRDY : 1; /*!< [6..6] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE7NRDY : 1; /*!< [7..7] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE8NRDY : 1; /*!< [8..8] NRDY Interrupt Status for PIPE */ - __IOM uint16_t PIPE9NRDY : 1; /*!< [9..9] NRDY Interrupt Status for PIPE */ - } NRDYSTS_b; + __IOM uint32_t DTCSTSA : 1; /*!< [0..0] DTC Security Attribution */ + uint32_t : 31; + } DTCSAR_b; }; union { - __IOM uint16_t BEMPSTS; /*!< (@ 0x0000004A) BEMP Interrupt Status Register */ + __IOM uint32_t DMACSAR; /*!< (@ 0x00000034) DMAC Controller Security Attribution Register */ struct { - __IOM uint16_t PIPE0BEMP : 1; /*!< [0..0] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE1BEMP : 1; /*!< [1..1] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE2BEMP : 1; /*!< [2..2] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE3BEMP : 1; /*!< [3..3] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE4BEMP : 1; /*!< [4..4] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE5BEMP : 1; /*!< [5..5] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE6BEMP : 1; /*!< [6..6] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE7BEMP : 1; /*!< [7..7] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE8BEMP : 1; /*!< [8..8] BEMP Interrupt Status for PIPE */ - __IOM uint16_t PIPE9BEMP : 1; /*!< [9..9] BEMP Interrupt Status for PIPE */ - } BEMPSTS_b; + __IOM uint32_t DMASTSA : 1; /*!< [0..0] DMAST Security Attribution */ + uint32_t : 31; + } DMACSAR_b; }; + __IM uint32_t RESERVED2[2]; union { - __IOM uint16_t FRMNUM; /*!< (@ 0x0000004C) Frame Number Register */ + __IOM uint32_t ICUSARA; /*!< (@ 0x00000040) ICU Security Attribution Register A */ struct { - __IM uint16_t FRNM : 11; /*!< [10..0] Frame NumberLatest frame number */ - uint16_t : 3; - __IOM uint16_t CRCE : 1; /*!< [14..14] Receive Data Error */ - __IOM uint16_t OVRN : 1; /*!< [15..15] Overrun/Underrun Detection Status */ - } FRMNUM_b; + __IOM uint32_t SAIRQCRn : 16; /*!< [15..0] Security Attributes of registers for the IRQCRn registers */ + uint32_t : 16; + } ICUSARA_b; }; union { - __IOM uint16_t UFRMNUM; /*!< (@ 0x0000004E) uFrame Number Register */ + __IOM uint32_t ICUSARB; /*!< (@ 0x00000044) ICU Security Attribution Register B */ struct { - __IM uint16_t UFRNM : 3; /*!< [2..0] MicroframeIndicate the microframe number. */ - uint16_t : 12; - __IOM uint16_t DVCHG : 1; /*!< [15..15] Device State Change */ - } UFRMNUM_b; + __IOM uint32_t SANMI : 1; /*!< [0..0] Security Attributes of nonmaskable interrupt */ + uint32_t : 31; + } ICUSARB_b; }; union { - __IOM uint16_t USBADDR; /*!< (@ 0x00000050) USB Address Register */ + __IOM uint32_t ICUSARC; /*!< (@ 0x00000048) ICU Security Attribution Register C */ struct { - __IM uint16_t USBADDR : 7; /*!< [6..0] USB Address In device controller mode, these flags indicate - * the USB address assigned by the host when the USBHS processed - * the SET_ADDRESS request successfully. */ - uint16_t : 1; - __IOM uint16_t STSRECOV0 : 3; /*!< [10..8] Status Recovery */ - } USBADDR_b; + __IOM uint32_t SADMACn : 8; /*!< [7..0] Security Attributes of registers for DMAC channel */ + uint32_t : 24; + } ICUSARC_b; }; - __IM uint16_t RESERVED9; union { - __IOM uint16_t USBREQ; /*!< (@ 0x00000054) USB Request Type Register */ + __IOM uint32_t ICUSARD; /*!< (@ 0x0000004C) ICU Security Attribution Register D */ struct { - __IOM uint16_t BMREQUESTTYPE : 8; /*!< [7..0] Request TypeThese bits store the USB request bmRequestType - * value. */ - __IOM uint16_t BREQUEST : 8; /*!< [15..8] RequestThese bits store the USB request bRequest value. */ - } USBREQ_b; + __IOM uint32_t SASELSR0 : 1; /*!< [0..0] Security Attributes of registers for SELSR0 */ + uint32_t : 31; + } ICUSARD_b; }; union { - __IOM uint16_t USBVAL; /*!< (@ 0x00000056) USB Request Value Register */ + __IOM uint32_t ICUSARE; /*!< (@ 0x00000050) ICU Security Attribution Register E */ struct { - __IOM uint16_t WVALUE : 16; /*!< [15..0] ValueThese bits store the USB request Value value. */ - } USBVAL_b; + uint32_t : 16; + __IOM uint32_t SAIWDTWUP : 1; /*!< [16..16] Security Attributes of registers for WUPEN0.b 16 */ + uint32_t : 1; + __IOM uint32_t SALVD1WUP : 1; /*!< [18..18] Security Attributes of registers for WUPEN0.b 18 */ + __IOM uint32_t SALVD2WUP : 1; /*!< [19..19] Security Attributes of registers for WUPEN0.b 19 */ + uint32_t : 4; + __IOM uint32_t SARTCALMWUP : 1; /*!< [24..24] Security Attributes of registers for WUPEN0.b 24 */ + __IOM uint32_t SARTCPRDWUP : 1; /*!< [25..25] Security Attributes of registers for WUPEN0.b 25 */ + uint32_t : 1; + __IOM uint32_t SAUSBFS0WUP : 1; /*!< [27..27] Security Attributes of registers for WUPEN0.b 27 */ + __IOM uint32_t SAAGT1UDWUP : 1; /*!< [28..28] Security Attributes of registers for WUPEN0.b 28 */ + __IOM uint32_t SAAGT1CAWUP : 1; /*!< [29..29] Security Attributes of registers for WUPEN0.b 29 */ + __IOM uint32_t SAAGT1CBWUP : 1; /*!< [30..30] Security Attributes of registers for WUPEN0.b 30 */ + __IOM uint32_t SAIIC0WUP : 1; /*!< [31..31] Security Attributes of registers for WUPEN0.b 31 */ + } ICUSARE_b; }; union { - __IOM uint16_t USBINDX; /*!< (@ 0x00000058) USB Request Index Register */ + __IOM uint32_t ICUSARF; /*!< (@ 0x00000054) ICU Security Attribution Register F */ struct { - __IOM uint16_t WINDEX : 16; /*!< [15..0] IndexThese bits store the USB request wIndex value. */ - } USBINDX_b; + __IOM uint32_t SAAGT3UDWUP : 1; /*!< [0..0] Security Attributes of registers for WUPEN1.b 0 */ + __IOM uint32_t SAAGT3CAWUP : 1; /*!< [1..1] Security Attributes of registers for WUPEN1.b 1 */ + __IOM uint32_t SAAGT3CBWUP : 1; /*!< [2..2] Security Attributes of registers for WUPEN1.b 2 */ + uint32_t : 29; + } ICUSARF_b; }; + __IM uint32_t RESERVED3[6]; union { - __IOM uint16_t USBLENG; /*!< (@ 0x0000005A) USB Request Length Register */ + __IOM uint32_t ICUSARG; /*!< (@ 0x00000070) ICU Security Attribution Register G */ struct { - __IOM uint16_t WLENGTH : 16; /*!< [15..0] LengthThese bits store the USB request wLength value. */ - } USBLENG_b; + __IOM uint32_t SAIELSRn : 32; /*!< [31..0] Security Attributes of registers for IELSR31 to IELSR0 */ + } ICUSARG_b; }; union { - __IOM uint16_t DCPCFG; /*!< (@ 0x0000005C) DCP Configuration Register */ + __IOM uint32_t ICUSARH; /*!< (@ 0x00000074) ICU Security Attribution Register H */ struct { - uint16_t : 4; - __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ - uint16_t : 2; - __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ - __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ - } DCPCFG_b; + __IOM uint32_t SAIELSRn : 32; /*!< [31..0] Security Attributes of registers for IELSR63 to IELSR32 */ + } ICUSARH_b; }; union { - __IOM uint16_t DCPMAXP; /*!< (@ 0x0000005E) DCP Maximum Packet Size Register */ + __IOM uint32_t ICUSARI; /*!< (@ 0x00000078) ICU Security Attribution Register I */ struct { - __IOM uint16_t MXPS : 7; /*!< [6..0] Maximum Packet SizeThese bits set the maximum amount - * of data (maximum packet size) in payloads for the DCP. */ - uint16_t : 5; - __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ - } DCPMAXP_b; + __IOM uint32_t SAIELSRn : 32; /*!< [31..0] Security Attributes of registers for IELSR95 to IELSR64 */ + } ICUSARI_b; }; + __IM uint32_t RESERVED4[33]; union { - __IOM uint16_t DCPCTR; /*!< (@ 0x00000060) DCP Control Register */ + __IOM uint32_t BUSSARA; /*!< (@ 0x00000100) Bus Security Attribution Register A */ struct { - __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ - __IOM uint16_t CCPL : 1; /*!< [2..2] Control Transfer End Enable */ - uint16_t : 1; - __IOM uint16_t PINGE : 1; /*!< [4..4] PING Token Issue Enable */ - __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ - __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Monitor */ - __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ - __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ - uint16_t : 2; - __IOM uint16_t SUREQCLR : 1; /*!< [11..11] SUREQ Bit Clear */ - __IM uint16_t CSSTS : 1; /*!< [12..12] Split Transaction COMPLETE SPLIT(CSPLIT) Status */ - __IOM uint16_t CSCLR : 1; /*!< [13..13] Split Transaction CSPLIT Status Clear */ - __IOM uint16_t SUREQ : 1; /*!< [14..14] Setup Token Transmission */ - __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ - } DCPCTR_b; + __IOM uint32_t BUSSA0 : 1; /*!< [0..0] BUS Security Attribution A0 */ + uint32_t : 31; + } BUSSARA_b; }; - __IM uint16_t RESERVED10; union { - __IOM uint16_t PIPESEL; /*!< (@ 0x00000064) Pipe Window Select Register */ + __IOM uint32_t BUSSARB; /*!< (@ 0x00000104) Bus Security Attribution Register B */ struct { - __IOM uint16_t PIPESEL : 4; /*!< [3..0] Pipe Window Select */ - } PIPESEL_b; + __IOM uint32_t BUSSB0 : 1; /*!< [0..0] BUS Security Attribution B0 */ + uint32_t : 31; + } BUSSARB_b; }; - __IM uint16_t RESERVED11; + __IM uint32_t RESERVED5[10]; union { - __IOM uint16_t PIPECFG; /*!< (@ 0x00000068) Pipe Configuration Register */ + __IOM uint32_t MMPUSARA; /*!< (@ 0x00000130) Master Memory Protection Unit Security Attribution + * Register A */ struct { - __IOM uint16_t EPNUM : 4; /*!< [3..0] Endpoint NumberThese bits specify the endpoint number - * for the selected pipe.Setting 0000b means unused pipe. */ - __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ - uint16_t : 2; - __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ - __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ - __IOM uint16_t DBLB : 1; /*!< [9..9] Double Buffer Mode */ - __IOM uint16_t BFRE : 1; /*!< [10..10] BRDY Interrupt Operation Specification */ - uint16_t : 3; - __IOM uint16_t TYPE : 2; /*!< [15..14] Transfer Type */ - } PIPECFG_b; + __IOM uint32_t MMPUAnSA : 8; /*!< [7..0] MMPUAn Security Attribution (n = 0 to 7) */ + uint32_t : 24; + } MMPUSARA_b; }; union { - __IOM uint16_t PIPEBUF; /*!< (@ 0x0000006A)Pipe Buffer Register */ + __IOM uint32_t MMPUSARB; /*!< (@ 0x00000134) Master Memory Protection Unit Security Attribution + * Register B */ struct { - __IOM uint16_t BUFNMB : 8; /*!< [7..0] Buffer NumberThese bits specify the FIFO buffer number of the - * selected pipe (04h to 87h). */ - uint16_t : 2; - __IOM uint16_t BUFSIZE : 5; /*!< [14..10] Buffer Size 00h: 64 bytes 01h: 128 bytes : 1Fh: 2 Kbytes */ - } PIPEBUF_b; /*!< BitSize */ + __IOM uint32_t MMPUB0SA : 1; /*!< [0..0] MMPUB0 Security Attribution */ + uint32_t : 31; + } MMPUSARB_b; }; + __IM uint32_t RESERVED6[30]; union { - __IOM uint16_t PIPEMAXP; /*!< (@ 0x0000006C) Pipe Maximum Packet Size Register */ + __IOM uint32_t CPUDSAR; /*!< (@ 0x000001B0) CPU Debug Security Attribution Register */ struct { - __IOM uint16_t MXPS : 11; /*!< [10..0] Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to - * 1024 bytes (400h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes - * (010h), 32 bytes (020h), 64 bytes (040h),512bytes(200h) ([2:0] are not - * provided.)PIPE6 to PIPE9: 1 byte (001h) to - * 64 bytes (040h) (Bits [10:7] are not provided.) */ - uint16_t : 1; - __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ - } PIPEMAXP_b; + __IOM uint32_t CPUDSA0 : 1; /*!< [0..0] CPU Debug Security Attribution 0 */ + uint32_t : 31; + } CPUDSAR_b; }; +} R_CPSCU_Type; /*!< Size = 436 (0x1b4) */ +/* =========================================================================================================================== */ +/* ================ R_OSPI ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Octa Serial Peripheral Interface (R_OSPI) + */ + +typedef struct /*!< (@ 0x400A6000) R_OSPI Structure */ +{ union { - __IOM uint16_t PIPEPERI; /*!< (@ 0x0000006E) Pipe Cycle Control Register */ + __IOM uint32_t DCR; /*!< (@ 0x00000000) Device Command Register */ struct { - __IOM uint16_t IITV : 3; /*!< [2..0] Interval Error Detection IntervalSpecifies the interval - * error detection timing for the selected pipe in terms of - * frames, which is expressed as nth power of 2. */ - uint16_t : 9; - __IOM uint16_t IFIS : 1; /*!< [12..12] Isochronous IN Buffer Flush */ - } PIPEPERI_b; + __IOM uint32_t DVCMD0 : 8; /*!< [7..0] Device Command data */ + __IOM uint32_t DVCMD1 : 8; /*!< [15..8] Device Command data */ + uint32_t : 16; + } DCR_b; }; union { - __IOM uint16_t PIPE_CTR[9]; /*!< (@ 0x00000070) Pipe [0..8] Control Register */ + __IOM uint32_t DAR; /*!< (@ 0x00000004) Device Address Register */ struct { - __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ - uint16_t : 3; - __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ - __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Confirmation */ - __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ - __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ - __IOM uint16_t ACLRM : 1; /*!< [9..9] Auto Buffer Clear Mode */ - __IOM uint16_t ATREPM : 1; /*!< [10..10] Auto Response Mode */ - uint16_t : 1; - __IM uint16_t CSSTS : 1; /*!< [12..12] CSSTS StatusThis bit indicates the CSPLIT status of - * Split Transaction of the relevant pipe */ - __IOM uint16_t CSCLR : 1; /*!< [13..13] CSPLIT Status ClearSet this bit to 1 when clearing - * the CSSTS bit of the relevant pipe */ - __IM uint16_t INBUFM : 1; /*!< [14..14] Transmit Buffer Monitor */ - __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ - } PIPE_CTR_b[9]; + __IOM uint32_t DVAD0 : 8; /*!< [7..0] Device Address data 0 */ + __IOM uint32_t DVAD1 : 8; /*!< [15..8] Device Address data 1 */ + __IOM uint32_t DVAD2 : 8; /*!< [23..16] Device Address data 2 */ + __IOM uint32_t DVAD3 : 8; /*!< [31..24] Device Address data 3 */ + } DAR_b; }; - __IM uint16_t RESERVED13; - __IM uint32_t RESERVED14[3]; - __IOM R_USB_HS0_PIPE_TR_Type PIPE_TR[5]; /*!< (@ 0x00000090) Pipe Transaction Counter Registers */ - __IM uint32_t RESERVED15[11]; union { - __IOM uint16_t DEVADD[10]; /*!< (@ 0x000000D0) Device Address Configuration Register */ + __IOM uint32_t DCSR; /*!< (@ 0x00000008) Device Command Setting Register */ struct { - uint16_t : 6; - __IOM uint16_t USBSPD : 2; /*!< [7..6] Transfer Speed of Communication Target Device */ - __IOM uint16_t HUBPORT : 3; /*!< [10..8] Communication Target Connecting Hub Port */ - __IOM uint16_t UPPHUB : 4; /*!< [14..11] Communication Target Connecting Hub Register */ - } DEVADD_b[10]; + __IOM uint32_t DALEN : 8; /*!< [7..0] Transfer data length setting */ + __IOM uint32_t DMLEN : 8; /*!< [15..8] Dummy cycle setting */ + uint32_t : 3; + __IOM uint32_t ACDV : 1; /*!< [19..19] Access Device setting */ + __IOM uint32_t CMDLEN : 3; /*!< [22..20] Transfer command length setting */ + __IOM uint32_t DAOR : 1; /*!< [23..23] Data order setting */ + __IOM uint32_t ADLEN : 3; /*!< [26..24] Transfer address length setting */ + __IOM uint32_t DOPI : 1; /*!< [27..27] DOPI single byte setting */ + __IOM uint32_t ACDA : 1; /*!< [28..28] Data Access Control */ + __IOM uint32_t PREN : 1; /*!< [29..29] Preamble bit enable for OctaRAM */ + uint32_t : 2; + } DCSR_b; }; - __IM uint16_t RESERVED16; - __IM uint32_t RESERVED17[6]; union { - __IOM uint16_t LPCTRL; /*!< (@ 0x00000100) Low Power Control Register */ + __IOM uint32_t DSR[2]; /*!< (@ 0x0000000C) Device Size Register 0 */ struct { - uint16_t : 7; - __IOM uint16_t HWUPM : 1; /*!< [7..7] Resume Return Mode Setting */ - } LPCTRL_b; + __IOM uint32_t DVSZ : 30; /*!< [29..0] Device size setting */ + __IOM uint32_t DVTYP : 2; /*!< [31..30] Device type setting */ + } DSR_b[2]; }; union { - __IOM uint16_t LPSTS; /*!< (@ 0x00000102) Low Power Status Register */ + __IOM uint32_t MDTR; /*!< (@ 0x00000014) Memory Delay Trim Register */ struct { - uint16_t : 14; - __IOM uint16_t SUSPENDM : 1; /*!< [14..14] UTMI SuspendM Control */ - } LPSTS_b; + __IOM uint32_t DV0DEL : 8; /*!< [7..0] Device 0 delay setting */ + __IOM uint32_t DQSERAM : 4; /*!< [11..8] OM_DQS enable counter */ + __IOM uint32_t DQSESOPI : 4; /*!< [15..12] OM_DQS enable counter */ + __IOM uint32_t DV1DEL : 8; /*!< [23..16] Device 1 delay setting */ + __IOM uint32_t DQSEDOPI : 4; /*!< [27..24] OM_DQS enable counter */ + uint32_t : 4; + } MDTR_b; }; - __IM uint32_t RESERVED18[15]; union { - __IOM uint16_t BCCTRL; /*!< (@ 0x00000140) Battery Charging Control Register */ + __IOM uint32_t ACTR; /*!< (@ 0x00000018) Auto-Calibration Timer Register */ struct { - __IOM uint16_t IDPSRCE : 1; /*!< [0..0] IDPSRC Control */ - __IOM uint16_t IDMSINKE : 1; /*!< [1..1] IDMSINK Control */ - __IOM uint16_t VDPSRCE : 1; /*!< [2..2] VDPSRC Control */ - __IOM uint16_t IDPSINKE : 1; /*!< [3..3] IDPSINK Control */ - __IOM uint16_t VDMSRCE : 1; /*!< [4..4] VDMSRC Control */ - __IOM uint16_t DCPMODE : 1; /*!< [5..5] DCP Mode Control */ - uint16_t : 2; - __IM uint16_t CHGDETSTS : 1; /*!< [8..8] CHGDET Status */ - __IM uint16_t PDDETSTS : 1; /*!< [9..9] PDDET Status */ - } BCCTRL_b; + __IOM uint32_t CTP : 32; /*!< [31..0] Automatic calibration cycle time setting */ + } ACTR_b; }; - __IM uint16_t RESERVED19; union { - __IOM uint16_t PL1CTRL1; /*!< (@ 0x00000144) Function L1 Control Register 1 */ + __IOM uint32_t ACAR[2]; /*!< (@ 0x0000001C) Auto-Calibration Address Register */ struct { - __IOM uint16_t L1RESPEN : 1; /*!< [0..0] L1 Response Enable */ - __IOM uint16_t L1RESPMD : 2; /*!< [2..1] L1 Response Mode */ - __IOM uint16_t L1NEGOMD : 1; /*!< [3..3] L1 Response Negotiation Control.NOTE: This bit is valid - * only when the L1RESPMD[1:0] value is 2'b11. */ - __IM uint16_t DVSQ : 4; /*!< [7..4] DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates - * the L1 state together with the device state bits DVSQ[2:0]. */ - __IOM uint16_t HIRDTHR : 4; /*!< [11..8] L1 Response Negotiation Threshold ValueHIRD threshold - * value used for L1NEGOMD.The format is the same as the HIRD - * field in HL1CTRL. */ - uint16_t : 2; - __IOM uint16_t L1EXTMD : 1; /*!< [14..14] PHY Control Mode at L1 Return */ - } PL1CTRL1_b; + __IOM uint32_t CAD : 32; /*!< [31..0] Automatic calibration address */ + } ACAR_b[2]; }; + __IM uint32_t RESERVED[4]; union { - __IOM uint16_t PL1CTRL2; /*!< (@ 0x00000146) Function L1 Control Register 2 */ + __IOM uint32_t DRCSTR; /*!< (@ 0x00000034) Device Memory Map Read Chip Select Timing Setting + * Register */ struct { - uint16_t : 8; - __IOM uint16_t HIRDMON : 4; /*!< [11..8] HIRD Value Monitor */ - __IOM uint16_t RWEMON : 1; /*!< [12..12] RWE Value Monitor */ - } PL1CTRL2_b; + __IOM uint32_t CTRW0 : 7; /*!< [6..0] Device 0 single continuous read waiting cycle setting + * in PCLKH units */ + __IOM uint32_t CTR0 : 1; /*!< [7..7] Device 0 single continuous read mode setting */ + __IOM uint32_t DVRDCMD0 : 3; /*!< [10..8] Device 0 Command execution interval setting */ + __IOM uint32_t DVRDHI0 : 3; /*!< [13..11] Device 0 select signal pull-up timing setting */ + __IOM uint32_t DVRDLO0 : 2; /*!< [15..14] Device 0 select signal pull-down timing setting */ + __IOM uint32_t CTRW1 : 7; /*!< [22..16] Device 1 single continuous read waiting cycle setting + * in PCLKH units */ + __IOM uint32_t CTR1 : 1; /*!< [23..23] Device 1 single continuous read mode setting */ + __IOM uint32_t DVRDCMD1 : 3; /*!< [26..24] Device 1 Command execution interval */ + __IOM uint32_t DVRDHI1 : 3; /*!< [29..27] Device 1 select signal High timing setting */ + __IOM uint32_t DVRDLO1 : 2; /*!< [31..30] Device 1 select signal pull-down timing setting */ + } DRCSTR_b; }; union { - __IOM uint16_t HL1CTRL1; /*!< (@ 0x00000148) Host L1 Control Register 1 */ + __IOM uint32_t DWCSTR; /*!< (@ 0x00000038) Device Memory Map Write Chip Select Timing Setting + * Register */ struct { - __IOM uint16_t L1REQ : 1; /*!< [0..0] L1 Transition Request */ - __IM uint16_t L1STATUS : 2; /*!< [2..1] L1 Request Completion Status */ - } HL1CTRL1_b; + __IOM uint32_t CTWW0 : 7; /*!< [6..0] Device 0 single continuous write waiting cycle setting + * in PCLKH units */ + __IOM uint32_t CTW0 : 1; /*!< [7..7] Device 0 single continuous write mode setting */ + __IOM uint32_t DVWCMD0 : 3; /*!< [10..8] Device 0 Command execution interval setting */ + __IOM uint32_t DVWHI0 : 3; /*!< [13..11] Device 0 select signal pull-up timing setting */ + __IOM uint32_t DVWLO0 : 2; /*!< [15..14] Device 0 select signal pull-down timing setting */ + __IOM uint32_t CTWW1 : 7; /*!< [22..16] Device 1 single continuous write waiting cycle setting + * in PCLKH units */ + __IOM uint32_t CTW1 : 1; /*!< [23..23] Device 1 single continuous write mode setting */ + __IOM uint32_t DVWCMD1 : 3; /*!< [26..24] Device 1 Command execution interval setting */ + __IOM uint32_t DVWHI1 : 3; /*!< [29..27] Device 1 select signal pull-up timing setting */ + __IOM uint32_t DVWLO1 : 2; /*!< [31..30] Device 1 select signal pull-down timing setting */ + } DWCSTR_b; }; union { - __IOM uint16_t HL1CTRL2; /*!< (@ 0x0000014A) Host L1 Control Register 2 */ + __IOM uint32_t DCSTR; /*!< (@ 0x0000003C) Device Chip Select Timing Setting Register */ struct { - __IOM uint16_t L1ADDR : 4; /*!< [3..0] LPM Token DeviceAddressThese bits specify the value to - * be set in the ADDR field of LPM token. */ - uint16_t : 4; - __IOM uint16_t HIRD : 4; /*!< [11..8] LPM Token HIRD */ - __IOM uint16_t L1RWE : 1; /*!< [12..12] LPM Token L1 RemoteWake EnableThese bits specify the - * value to be set in the RWE field of LPM token. */ - uint16_t : 2; - __IOM uint16_t BESL : 1; /*!< [15..15] BESL & Alternate HIRDThis bit selects the K-State drive - * period at the time of L1 Resume. */ - } HL1CTRL2_b; + uint32_t : 8; + __IOM uint32_t DVSELCMD : 3; /*!< [10..8] Device Command execution interval setting */ + __IOM uint32_t DVSELHI : 3; /*!< [13..11] Device select signal pull-up timing setting */ + __IOM uint32_t DVSELLO : 2; /*!< [15..14] Device select signal pull-down timing setting */ + uint32_t : 16; + } DCSTR_b; }; - __IM uint32_t RESERVED20; union { - __IOM uint16_t PHYTRIM1; /*!< (@ 0x00000150)PHY Timing Register 1 */ + __IOM uint32_t CDSR; /*!< (@ 0x00000040) Controller and Device Setting Register */ struct { - __IOM uint16_t DRISE : 2; /*!< [1..0]FS/LS Rising-Edge Output Waveform Adjustment Function */ - __IOM uint16_t DFALL : 2; /*!< [3..2]FS/LS Falling-Edge Output Waveform Adjustment Function */ - uint16_t : 3; - __IOM uint16_t PCOMPENB : 1; /*!< [7..7]PVDD Start-up Detection */ - __IOM uint16_t HSIUP : 4; /*!< [11..8]HS Output Level Setting */ - __IOM uint16_t IMPOFFSET : 3; /*!< [14..12]terminating resistance offset value setting.Offset value for - * adjusting the terminating resistance. */ - } PHYTRIM1_b; /*!< BitSize */ + __IOM uint32_t DV0TTYP : 2; /*!< [1..0] Device0_transfer_type setting */ + __IOM uint32_t DV1TTYP : 2; /*!< [3..2] Device1_transfer_type setting */ + __IOM uint32_t DV0PC : 1; /*!< [4..4] Device0_memory precycle setting */ + __IOM uint32_t DV1PC : 1; /*!< [5..5] Device1_memory precycle setting */ + uint32_t : 4; + __IOM uint32_t ACMEME0 : 1; /*!< [10..10] Automatic calibration memory enable setting for device + * 0 */ + __IOM uint32_t ACMEME1 : 1; /*!< [11..11] Automatic calibration memory enable setting for device + * 1 */ + __IOM uint32_t ACMODE : 2; /*!< [13..12] Automatic calibration mode */ + uint32_t : 17; + __IOM uint32_t DLFT : 1; /*!< [31..31] Deadlock Free Timer Enable */ + } CDSR_b; }; union { - __IOM uint16_t PHYTRIM2; /*!< (@ 0x00000152)PHY Timing Register 2 */ + __IOM uint32_t MDLR; /*!< (@ 0x00000044) Memory Map Dummy Length Register */ struct { - __IOM uint16_t SQU : 4; /*!< [3..0]Squelch Detection Level */ - uint16_t : 3; - __IOM uint16_t HSRXENMO : 1; /*!< [7..7]HS Receive Enable Control Mode */ - __IOM uint16_t PDR : 2; /*!< [9..8]HS Output Adjustment Function */ - uint16_t : 2; - __IOM uint16_t DIS : 3; /*!< [14..12]Disconnect Detection Level */ - } PHYTRIM2_b; /*!< BitSize */ + __IOM uint32_t DV0RDL : 8; /*!< [7..0] Device 0 Read dummy length setting */ + __IOM uint32_t DV0WDL : 8; /*!< [15..8] Device 0 Write dummy length setting */ + __IOM uint32_t DV1RDL : 8; /*!< [23..16] Device 1 Read dummy length setting */ + __IOM uint32_t DV1WDL : 8; /*!< [31..24] Device 1 Write dummy length setting */ + } MDLR_b; }; - __IM uint32_t RESERVED21[3]; union { - __IM uint32_t DPUSR0R; /*!< (@ 0x00000160) Deep Standby USB Transceiver Control/Pin Monitor - * Register */ + __IOM uint32_t MRWCR[2]; /*!< (@ 0x00000048) Memory Map Read/Write Command Register */ struct { - uint32_t : 20; - __IM uint32_t DOVCAHM : 1; /*!< [20..20] OVRCURA InputIndicates OVRCURA input signal on the - * HS side of USB port. */ - __IM uint32_t DOVCBHM : 1; /*!< [21..21] OVRCURB InputIndicates OVRCURB input signal on the - * HS side of USB port. */ - uint32_t : 1; - __IM uint32_t DVBSTSHM : 1; /*!< [23..23] VBUS InputIndicates VBUS input signal on the HS side - * of USB port. */ - } DPUSR0R_b; + __IOM uint32_t DMRCMD0 : 8; /*!< [7..0] Memory map read command 0 setting */ + __IOM uint32_t DMRCMD1 : 8; /*!< [15..8] Memory map read command 1 setting */ + __IOM uint32_t DMWCMD0 : 8; /*!< [23..16] Memory map write command 0 setting */ + __IOM uint32_t DMWCMD1 : 8; /*!< [31..24] Memory map write command 1 setting */ + } MRWCR_b[2]; }; union { - __IOM uint32_t DPUSR1R; /*!< (@ 0x00000164) Deep Standby USB Suspend/Resume Interrupt Register */ + __IOM uint32_t MRWCSR; /*!< (@ 0x00000050) Memory Map Read/Write Setting Register */ struct { - uint32_t : 4; - __IOM uint32_t DOVCAHE : 1; /*!< [4..4] OVRCURA Interrupt Enable Clear */ - __IOM uint32_t DOVCBHE : 1; /*!< [5..5] OVRCURB Interrupt Enable Clear */ - uint32_t : 1; - __IOM uint32_t DVBSTSHE : 1; /*!< [7..7] VBUS Interrupt Enable/Clear */ - uint32_t : 12; - __IM uint32_t DOVCAH : 1; /*!< [20..20] Indication of Return from OVRCURA Interrupt Source */ - __IM uint32_t DOVCBH : 1; /*!< [21..21] Indication of Return from OVRCURB Interrupt Source */ - uint32_t : 1; - __IM uint32_t DVBSTSH : 1; /*!< [23..23] Indication of Return from VBUS Interrupt Source */ - } DPUSR1R_b; + __IOM uint32_t MRAL0 : 3; /*!< [2..0] Device 0 read address length setting */ + __IOM uint32_t MRCL0 : 3; /*!< [5..3] Device 0 read command length setting */ + __IOM uint32_t MRO0 : 1; /*!< [6..6] Device 0 read order setting */ + __IOM uint32_t PREN0 : 1; /*!< [7..7] Preamble bit enable for mem0 memory-map read */ + __IOM uint32_t MWAL0 : 3; /*!< [10..8] Device 0 write address length setting */ + __IOM uint32_t MWCL0 : 3; /*!< [13..11] Device 0 write command length setting */ + __IOM uint32_t MWO0 : 1; /*!< [14..14] Device 0 write order setting */ + uint32_t : 1; + __IOM uint32_t MRAL1 : 3; /*!< [18..16] Device 1 read address length setting */ + __IOM uint32_t MRCL1 : 3; /*!< [21..19] Device 1 read command length setting */ + __IOM uint32_t MRO1 : 1; /*!< [22..22] Device 1 read order setting */ + __IOM uint32_t PREN1 : 1; /*!< [23..23] Preamble bit enable for mem1 memory-map read */ + __IOM uint32_t MWAL1 : 3; /*!< [26..24] Device 1 write address length setting */ + __IOM uint32_t MWCL1 : 3; /*!< [29..27] Device 1 write command length setting */ + __IOM uint32_t MWO1 : 1; /*!< [30..30] Device 1 write order setting */ + uint32_t : 1; + } MRWCSR_b; }; union { - __IOM uint16_t DPUSR2R; /*!< (@ 0x00000168) Deep Standby USB Suspend/Resume Interrupt Register */ + __IM uint32_t ESR; /*!< (@ 0x00000054) Error Status Register */ struct { - __IM uint16_t DPINT : 1; /*!< [0..0] Indication of Return from DP Interrupt Source */ - __IM uint16_t DMINT : 1; /*!< [1..1] Indication of Return from DM Interrupt Source */ - uint16_t : 2; - __IM uint16_t DPVAL : 1; /*!< [4..4] DP InputIndicates DP input signal on the HS side of USB - * port. */ - __IM uint16_t DMVAL : 1; /*!< [5..5] DM InputIndicates DM input signal on the HS side of USB - * port. */ - uint16_t : 2; - __IOM uint16_t DPINTE : 1; /*!< [8..8] DP Interrupt Enable Clear */ - __IOM uint16_t DMINTE : 1; /*!< [9..9] DM Interrupt Enable Clear */ - } DPUSR2R_b; + __IM uint32_t MRESR : 8; /*!< [7..0] Memory map read error status */ + __IM uint32_t MWESR : 8; /*!< [15..8] Memory map write error status */ + uint32_t : 16; + } ESR_b; }; union { - __IOM uint16_t DPUSRCR; /*!< (@ 0x0000016A) Deep Standby USB Suspend/Resume Command Register */ + __OM uint32_t CWNDR; /*!< (@ 0x00000058) Configure Write without Data Register */ struct { - __IOM uint16_t FIXPHY : 1; /*!< [0..0] USB Transceiver Control Fix */ - __IOM uint16_t FIXPHYPD : 1; /*!< [1..1] USB Transceiver Control Fix for PLL */ - } DPUSRCR_b; + __OM uint32_t WND : 32; /*!< [31..0] The write value should be 0. */ + } CWNDR_b; }; -} R_USB_HS0_Type; /*!< Size = 1032 (0x408) */ - -/* =========================================================================================================================== */ -/* ================ R_WDT ================ */ -/* =========================================================================================================================== */ - -/** - * @brief Watchdog Timer (R_WDT) - */ -typedef struct /*!< (@ 0x40044200) R_WDT Structure */ -{ union { - __IOM uint8_t WDTRR; /*!< (@ 0x00000000) WDT Refresh Register */ + __OM uint32_t CWDR; /*!< (@ 0x0000005C) Configure Write Data Register */ struct { - __IOM uint8_t WDTRR : 8; /*!< [7..0] WDTRR is an 8-bit register that refreshes the down-counter - * of the WDT. */ - } WDTRR_b; + __OM uint32_t WD0 : 8; /*!< [7..0] Write data 0 */ + __OM uint32_t WD1 : 8; /*!< [15..8] Write data 1 */ + __OM uint32_t WD2 : 8; /*!< [23..16] Write data 2 */ + __OM uint32_t WD3 : 8; /*!< [31..24] Write data 3 */ + } CWDR_b; }; - __IM uint8_t RESERVED; union { - __IOM uint16_t WDTCR; /*!< (@ 0x00000002) WDT Control Register */ + __IM uint32_t CRR; /*!< (@ 0x00000060) Configure Read Register */ struct { - __IOM uint16_t TOPS : 2; /*!< [1..0] Timeout Period Selection */ - uint16_t : 2; - __IOM uint16_t CKS : 4; /*!< [7..4] Clock Division Ratio Selection */ - __IOM uint16_t RPES : 2; /*!< [9..8] Window End Position Selection */ - uint16_t : 2; - __IOM uint16_t RPSS : 2; /*!< [13..12] Window Start Position Selection */ - uint16_t : 2; - } WDTCR_b; + __IM uint32_t RD0 : 8; /*!< [7..0] Read data 0 */ + __IM uint32_t RD1 : 8; /*!< [15..8] Read data 1 */ + __IM uint32_t RD2 : 8; /*!< [23..16] Read data 2 */ + __IM uint32_t RD3 : 8; /*!< [31..24] Read data 3 */ + } CRR_b; }; union { - __IOM uint16_t WDTSR; /*!< (@ 0x00000004) WDT Status Register */ + __IOM uint32_t ACSR; /*!< (@ 0x00000064) Auto-Calibration Status Register */ struct { - __IM uint16_t CNTVAL : 14; /*!< [13..0] Down-Counter Value */ - __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ - __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ - } WDTSR_b; + __IOM uint32_t ACSR0 : 3; /*!< [2..0] Auto-calibration status of device 0 */ + __IOM uint32_t ACSR1 : 3; /*!< [5..3] Auto-calibration status of device 1 */ + uint32_t : 26; + } ACSR_b; }; + __IM uint32_t RESERVED1[5]; union { - __IOM uint8_t WDTRCR; /*!< (@ 0x00000006) WDT Reset Control Register */ + __IOM uint32_t DCSMXR; /*!< (@ 0x0000007C) Device Chip Select Maximum Period Register */ struct { - uint8_t : 7; - __IOM uint8_t RSTIRQS : 1; /*!< [7..7] Reset Interrupt Request Selection */ - } WDTRCR_b; + __IOM uint32_t CTWMX0 : 9; /*!< [8..0] Indicates the maximum period that OM_CS0 and OM_CS1 are + * Low in single continuous write of OctaRAM. */ + uint32_t : 7; + __IOM uint32_t CTWMX1 : 9; /*!< [24..16] Indicates the maximum period that OM_CS0 and OM_CS1 + * are Low in single continuous read of OctaRAM. */ + uint32_t : 7; + } DCSMXR_b; }; - __IM uint8_t RESERVED1; union { - __IOM uint8_t WDTCSTPR; /*!< (@ 0x00000008) WDT Count Stop Control Register */ + __IOM uint32_t DWSCTSR; /*!< (@ 0x00000080) Device Memory Map Write single continuous translating + * size Register */ struct { - uint8_t : 7; - __IOM uint8_t SLCSTP : 1; /*!< [7..7] Sleep-Mode Count Stop Control */ - } WDTCSTPR_b; + __IOM uint32_t CTSN0 : 11; /*!< [10..0] Indicates the number of bytes to translate in single + * continuous write of device 0. */ + uint32_t : 5; + __IOM uint32_t CTSN1 : 11; /*!< [26..16] Indicates the number of bytes to translate in single + * continuous write of device 1. */ + uint32_t : 5; + } DWSCTSR_b; }; - __IM uint8_t RESERVED2; - __IM uint16_t RESERVED3; -} R_WDT_Type; /*!< Size = 12 (0xc) */ +} R_OSPI_Type; /*!< Size = 132 (0x84) */ /** @} */ /* End of group Device_Peripheral_peripherals */ -/* =========================================================================================================================== */ -/* ================ Device Specific Peripheral Address Map ================ */ -/* =========================================================================================================================== */ - -/** @addtogroup Device_Peripheral_peripheralAddr - * @{ - */ - - #define R_ACMPHS0_BASE 0x40085000UL - #define R_ACMPHS1_BASE 0x40085100UL - #define R_ACMPHS2_BASE 0x40085200UL - #define R_ACMPHS3_BASE 0x40085300UL - #define R_ACMPHS4_BASE 0x40085400UL - #define R_ACMPHS5_BASE 0x40085500UL - #define R_ACMPLP_BASE 0x40085E00UL - #define R_ADC0_BASE 0x4005C000UL - #define R_ADC1_BASE 0x4005C200UL - #define R_AGT0_BASE 0x40084000UL - #define R_AGT1_BASE 0x40084100UL - #define R_BUS_BASE 0x40003000UL - #define R_CAC_BASE 0x40044600UL - #define R_CAN0_BASE 0x40050000UL - #define R_CAN1_BASE 0x40051000UL - #define R_CRC_BASE 0x40074000UL - #define R_CTSU_BASE 0x40081000UL - #define R_CTSU2_BASE 0x40082000UL - #define R_DAC_BASE 0x4005E000UL - #define R_DAC8_BASE 0x4009E000UL - #define R_DALI0_BASE 0x4008F000UL - #define R_DEBUG_BASE 0x4001B000UL - #define R_DMA_BASE 0x40005200UL - #define R_DMAC0_BASE 0x40005000UL - #define R_DMAC1_BASE 0x40005040UL - #define R_DMAC2_BASE 0x40005080UL - #define R_DMAC3_BASE 0x400050C0UL - #define R_DMAC4_BASE 0x40005100UL - #define R_DMAC5_BASE 0x40005140UL - #define R_DMAC6_BASE 0x40005180UL - #define R_DMAC7_BASE 0x400051C0UL - #define R_DOC_BASE 0x40054100UL - #define R_DRW_BASE 0x400E4000UL - #define R_DTC_BASE 0x40005400UL - #define R_ELC_BASE 0x40041000UL - #define R_ETHERC0_BASE 0x40064100UL - #define R_ETHERC_EDMAC_BASE 0x40064000UL - #define R_ETHERC_EPTPC_BASE 0x40065800UL - #define R_ETHERC_EPTPC1_BASE 0x40065C00UL - #define R_ETHERC_EPTPC_CFG_BASE 0x40064500UL - #define R_ETHERC_EPTPC_COMMON_BASE 0x40065000UL - #define R_FACI_HP_CMD_BASE 0x407E0000UL - #define R_FACI_HP_BASE 0x407FE000UL - #define R_FACI_LP_BASE 0x407EC000UL - #define R_FCACHE_BASE 0x4001C000UL - #define R_GLCDC_BASE 0x400E0000UL - #define R_GPT0_BASE 0x40078000UL - #define R_GPT1_BASE 0x40078100UL - #define R_GPT2_BASE 0x40078200UL - #define R_GPT3_BASE 0x40078300UL - #define R_GPT4_BASE 0x40078400UL - #define R_GPT5_BASE 0x40078500UL - #define R_GPT6_BASE 0x40078600UL - #define R_GPT7_BASE 0x40078700UL - #define R_GPT8_BASE 0x40078800UL - #define R_GPT9_BASE 0x40078900UL - #define R_GPT10_BASE 0x40078A00UL - #define R_GPT11_BASE 0x40078B00UL - #define R_GPT12_BASE 0x40078C00UL - #define R_GPT13_BASE 0x40078D00UL - #define R_GPT_ODC_BASE 0x4007B000UL - #define R_GPT_OPS_BASE 0x40078FF0UL - #define R_GPT_POEG0_BASE 0x40042000UL - #define R_GPT_POEG1_BASE 0x40042100UL - #define R_GPT_POEG2_BASE 0x40042200UL - #define R_GPT_POEG3_BASE 0x40042300UL - #define R_ICU_BASE 0x40006000UL - #define R_IIC0_BASE 0x40053000UL - #define R_IIC1_BASE 0x40053100UL - #define R_IIC2_BASE 0x40053200UL - #define R_IRDA_BASE 0x40070F00UL - #define R_IWDT_BASE 0x40044400UL - #define R_JPEG_BASE 0x400E6000UL - #define R_KINT_BASE 0x40080000UL - #define R_MMF_BASE 0x40001000UL - #define R_MPU_MMPU_BASE 0x40000000UL - #define R_MPU_SMPU_BASE 0x40000C00UL - #define R_MPU_SPMON_BASE 0x40000D00UL - #define R_MSTP_BASE 0x40047000UL - #define R_OPAMP_BASE 0x40086000UL - #define R_OPAMP2_BASE 0x400867F8UL - #define R_PDC_BASE 0x40094000UL - #define R_PORT0_BASE 0x40040000UL - #define R_PORT1_BASE 0x40040020UL - #define R_PORT2_BASE 0x40040040UL - #define R_PORT3_BASE 0x40040060UL - #define R_PORT4_BASE 0x40040080UL - #define R_PORT5_BASE 0x400400A0UL - #define R_PORT6_BASE 0x400400C0UL - #define R_PORT7_BASE 0x400400E0UL - #define R_PORT8_BASE 0x40040100UL - #define R_PORT9_BASE 0x40040120UL - #define R_PORT10_BASE 0x40040140UL - #define R_PORT11_BASE 0x40040160UL - #define R_PFS_BASE 0x40040800UL - #define R_PMISC_BASE 0x40040D00UL - #define R_QSPI_BASE 0x64000000UL - #define R_RTC_BASE 0x40044000UL - #define R_SCI0_BASE 0x40070000UL - #define R_SCI1_BASE 0x40070020UL - #define R_SCI2_BASE 0x40070040UL - #define R_SCI3_BASE 0x40070060UL - #define R_SCI4_BASE 0x40070080UL - #define R_SCI5_BASE 0x400700A0UL - #define R_SCI6_BASE 0x400700C0UL - #define R_SCI7_BASE 0x400700E0UL - #define R_SCI8_BASE 0x40070100UL - #define R_SCI9_BASE 0x40070120UL - #define R_SDADC0_BASE 0x4009C000UL - #define R_SDHI0_BASE 0x40062000UL - #define R_SDHI1_BASE 0x40062400UL - #define R_SLCDC_BASE 0x40082000UL - #define R_SPI0_BASE 0x40072000UL - #define R_SPI1_BASE 0x40072100UL - #define R_SRAM_BASE 0x40002000UL - #define R_SRC_BASE 0x40048000UL - #define R_SSI0_BASE 0x4004E000UL - #define R_SSI1_BASE 0x4004E100UL - #define R_SYSTEM_BASE 0x4001E000UL - #define R_TSN_BASE 0x407EC000UL - #define R_TSN_CAL_BASE 0x407FB17CUL - #define R_TSN_CTRL_BASE 0x4005D000UL - #define R_USB_FS0_BASE 0x40090000UL - #define R_USB_HS0_BASE 0x40060000UL - #define R_WDT_BASE 0x40044200UL - -/** @} */ /* End of group Device_Peripheral_peripheralAddr */ - -/* =========================================================================================================================== */ -/* ================ Peripheral declaration ================ */ -/* =========================================================================================================================== */ - -/** @addtogroup Device_Peripheral_declaration - * @{ - */ - - #define R_ACMPHS0 ((R_ACMPHS0_Type *) R_ACMPHS0_BASE) - #define R_ACMPHS1 ((R_ACMPHS0_Type *) R_ACMPHS1_BASE) - #define R_ACMPHS2 ((R_ACMPHS0_Type *) R_ACMPHS2_BASE) - #define R_ACMPHS3 ((R_ACMPHS0_Type *) R_ACMPHS3_BASE) - #define R_ACMPHS4 ((R_ACMPHS0_Type *) R_ACMPHS4_BASE) - #define R_ACMPHS5 ((R_ACMPHS0_Type *) R_ACMPHS5_BASE) - #define R_ACMPLP ((R_ACMPLP_Type *) R_ACMPLP_BASE) - #define R_ADC0 ((R_ADC0_Type *) R_ADC0_BASE) - #define R_ADC1 ((R_ADC0_Type *) R_ADC1_BASE) - #define R_AGT0 ((R_AGT0_Type *) R_AGT0_BASE) - #define R_AGT1 ((R_AGT0_Type *) R_AGT1_BASE) - #define R_BUS ((R_BUS_Type *) R_BUS_BASE) - #define R_CAC ((R_CAC_Type *) R_CAC_BASE) - #define R_CAN0 ((R_CAN0_Type *) R_CAN0_BASE) - #define R_CAN1 ((R_CAN0_Type *) R_CAN1_BASE) - #define R_CRC ((R_CRC_Type *) R_CRC_BASE) - #if (BSP_FEATURE_CTSU_VERSION == 2) - #define R_CTSU ((R_CTSU2_Type *) R_CTSU2_BASE) - #else - #define R_CTSU ((R_CTSU_Type *) R_CTSU_BASE) - #endif - #define R_CTSU2 ((R_CTSU2_Type *) R_CTSU2_BASE) - #define R_DAC ((R_DAC_Type *) R_DAC_BASE) - #define R_DAC8 ((R_DAC8_Type *) R_DAC8_BASE) - #define R_DALI0 ((R_DALI0_Type *) R_DALI0_BASE) - #define R_DEBUG ((R_DEBUG_Type *) R_DEBUG_BASE) - #define R_DMA ((R_DMA_Type *) R_DMA_BASE) - #define R_DMAC0 ((R_DMAC0_Type *) R_DMAC0_BASE) - #define R_DMAC1 ((R_DMAC0_Type *) R_DMAC1_BASE) - #define R_DMAC2 ((R_DMAC0_Type *) R_DMAC2_BASE) - #define R_DMAC3 ((R_DMAC0_Type *) R_DMAC3_BASE) - #define R_DMAC4 ((R_DMAC0_Type *) R_DMAC4_BASE) - #define R_DMAC5 ((R_DMAC0_Type *) R_DMAC5_BASE) - #define R_DMAC6 ((R_DMAC0_Type *) R_DMAC6_BASE) - #define R_DMAC7 ((R_DMAC0_Type *) R_DMAC7_BASE) - #define R_DOC ((R_DOC_Type *) R_DOC_BASE) - #define R_DRW ((R_DRW_Type *) R_DRW_BASE) - #define R_DTC ((R_DTC_Type *) R_DTC_BASE) - #define R_ELC ((R_ELC_Type *) R_ELC_BASE) - #define R_ETHERC0 ((R_ETHERC0_Type *) R_ETHERC0_BASE) - #define R_ETHERC_EDMAC ((R_ETHERC_EDMAC_Type *) R_ETHERC_EDMAC_BASE) - #define R_ETHERC_EPTPC ((R_ETHERC_EPTPC_Type *) R_ETHERC_EPTPC_BASE) - #define R_ETHERC_EPTPC1 ((R_ETHERC_EPTPC_Type *) R_ETHERC_EPTPC1_BASE) - #define R_ETHERC_EPTPC_CFG ((R_ETHERC_EPTPC_CFG_Type *) R_ETHERC_EPTPC_CFG_BASE) - #define R_ETHERC_EPTPC_COMMON ((R_ETHERC_EPTPC_COMMON_Type *) R_ETHERC_EPTPC_COMMON_BASE) - #define R_FACI_HP_CMD ((R_FACI_HP_CMD_Type *) R_FACI_HP_CMD_BASE) - #define R_FACI_HP ((R_FACI_HP_Type *) R_FACI_HP_BASE) - #define R_FACI_LP ((R_FACI_LP_Type *) R_FACI_LP_BASE) - #define R_FCACHE ((R_FCACHE_Type *) R_FCACHE_BASE) - #define R_GLCDC ((R_GLCDC_Type *) R_GLCDC_BASE) - #define R_GPT0 ((R_GPT0_Type *) R_GPT0_BASE) - #define R_GPT1 ((R_GPT0_Type *) R_GPT1_BASE) - #define R_GPT2 ((R_GPT0_Type *) R_GPT2_BASE) - #define R_GPT3 ((R_GPT0_Type *) R_GPT3_BASE) - #define R_GPT4 ((R_GPT0_Type *) R_GPT4_BASE) - #define R_GPT5 ((R_GPT0_Type *) R_GPT5_BASE) - #define R_GPT6 ((R_GPT0_Type *) R_GPT6_BASE) - #define R_GPT7 ((R_GPT0_Type *) R_GPT7_BASE) - #define R_GPT8 ((R_GPT0_Type *) R_GPT8_BASE) - #define R_GPT9 ((R_GPT0_Type *) R_GPT9_BASE) - #define R_GPT10 ((R_GPT0_Type *) R_GPT10_BASE) - #define R_GPT11 ((R_GPT0_Type *) R_GPT11_BASE) - #define R_GPT12 ((R_GPT0_Type *) R_GPT12_BASE) - #define R_GPT13 ((R_GPT0_Type *) R_GPT13_BASE) - #define R_GPT_ODC ((R_GPT_ODC_Type *) R_GPT_ODC_BASE) - #define R_GPT_OPS ((R_GPT_OPS_Type *) R_GPT_OPS_BASE) - #define R_GPT_POEG0 ((R_GPT_POEG0_Type *) R_GPT_POEG0_BASE) - #define R_GPT_POEG1 ((R_GPT_POEG0_Type *) R_GPT_POEG1_BASE) - #define R_GPT_POEG2 ((R_GPT_POEG0_Type *) R_GPT_POEG2_BASE) - #define R_GPT_POEG3 ((R_GPT_POEG0_Type *) R_GPT_POEG3_BASE) - #define R_ICU ((R_ICU_Type *) R_ICU_BASE) - #define R_IIC0 ((R_IIC0_Type *) R_IIC0_BASE) - #define R_IIC1 ((R_IIC0_Type *) R_IIC1_BASE) - #define R_IIC2 ((R_IIC0_Type *) R_IIC2_BASE) - #define R_IRDA ((R_IRDA_Type *) R_IRDA_BASE) - #define R_IWDT ((R_IWDT_Type *) R_IWDT_BASE) - #define R_JPEG ((R_JPEG_Type *) R_JPEG_BASE) - #define R_KINT ((R_KINT_Type *) R_KINT_BASE) - #define R_MMF ((R_MMF_Type *) R_MMF_BASE) - #define R_MPU_MMPU ((R_MPU_MMPU_Type *) R_MPU_MMPU_BASE) - #define R_MPU_SMPU ((R_MPU_SMPU_Type *) R_MPU_SMPU_BASE) - #define R_MPU_SPMON ((R_MPU_SPMON_Type *) R_MPU_SPMON_BASE) - #define R_MSTP ((R_MSTP_Type *) R_MSTP_BASE) - #if (BSP_FEATURE_OPAMP_BASE_ADDRESS == 2U) - #define R_OPAMP ((R_OPAMP_Type *) R_OPAMP2_BASE) - #else - #define R_OPAMP ((R_OPAMP_Type *) R_OPAMP_BASE) - #endif - #define R_PDC ((R_PDC_Type *) R_PDC_BASE) - #define R_PORT0 ((R_PORT0_Type *) R_PORT0_BASE) - #define R_PORT1 ((R_PORT0_Type *) R_PORT1_BASE) - #define R_PORT2 ((R_PORT0_Type *) R_PORT2_BASE) - #define R_PORT3 ((R_PORT0_Type *) R_PORT3_BASE) - #define R_PORT4 ((R_PORT0_Type *) R_PORT4_BASE) - #define R_PORT5 ((R_PORT0_Type *) R_PORT5_BASE) - #define R_PORT6 ((R_PORT0_Type *) R_PORT6_BASE) - #define R_PORT7 ((R_PORT0_Type *) R_PORT7_BASE) - #define R_PORT8 ((R_PORT0_Type *) R_PORT8_BASE) - #define R_PORT9 ((R_PORT0_Type *) R_PORT9_BASE) - #define R_PORT10 ((R_PORT0_Type *) R_PORT10_BASE) - #define R_PORT11 ((R_PORT0_Type *) R_PORT11_BASE) - #define R_PFS ((R_PFS_Type *) R_PFS_BASE) - #define R_PMISC ((R_PMISC_Type *) R_PMISC_BASE) - #define R_QSPI ((R_QSPI_Type *) R_QSPI_BASE) - #define R_RTC ((R_RTC_Type *) R_RTC_BASE) - #define R_SCI0 ((R_SCI0_Type *) R_SCI0_BASE) - #define R_SCI1 ((R_SCI0_Type *) R_SCI1_BASE) - #define R_SCI2 ((R_SCI0_Type *) R_SCI2_BASE) - #define R_SCI3 ((R_SCI0_Type *) R_SCI3_BASE) - #define R_SCI4 ((R_SCI0_Type *) R_SCI4_BASE) - #define R_SCI5 ((R_SCI0_Type *) R_SCI5_BASE) - #define R_SCI6 ((R_SCI0_Type *) R_SCI6_BASE) - #define R_SCI7 ((R_SCI0_Type *) R_SCI7_BASE) - #define R_SCI8 ((R_SCI0_Type *) R_SCI8_BASE) - #define R_SCI9 ((R_SCI0_Type *) R_SCI9_BASE) - #define R_SDADC0 ((R_SDADC0_Type *) R_SDADC0_BASE) - #define R_SDHI0 ((R_SDHI0_Type *) R_SDHI0_BASE) - #define R_SDHI1 ((R_SDHI0_Type *) R_SDHI1_BASE) - #define R_SLCDC ((R_SLCDC_Type *) R_SLCDC_BASE) - #define R_SPI0 ((R_SPI0_Type *) R_SPI0_BASE) - #define R_SPI1 ((R_SPI0_Type *) R_SPI1_BASE) - #define R_SRAM ((R_SRAM_Type *) R_SRAM_BASE) - #define R_SRC ((R_SRC_Type *) R_SRC_BASE) - #define R_SSI0 ((R_SSI0_Type *) R_SSI0_BASE) - #define R_SSI1 ((R_SSI0_Type *) R_SSI1_BASE) - #define R_SYSTEM ((R_SYSTEM_Type *) R_SYSTEM_BASE) - #define R_TSN ((R_TSN_Type *) R_TSN_BASE) - #define R_TSN_CAL ((R_TSN_CAL_Type *) R_TSN_CAL_BASE) - #define R_TSN_CTRL ((R_TSN_CTRL_Type *) R_TSN_CTRL_BASE) - #define R_USB_FS0 ((R_USB_FS0_Type *) R_USB_FS0_BASE) - #define R_USB_HS0 ((R_USB_HS0_Type *) R_USB_HS0_BASE) - #define R_WDT ((R_WDT_Type *) R_WDT_BASE) - -/** @} */ /* End of group Device_Peripheral_declaration */ + #include "base_addresses.h" /* ========================================= End of section using anonymous unions ========================================= */ #if defined(__CC_ARM) @@ -19414,6 +21498,12 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ================ PORT ================ */ /* =========================================================================================================================== */ +/* =========================================================================================================================== */ +/* ================ PMSAR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PMSAR ========================================================= */ + /* =========================================================================================================================== */ /* ================ RTCCR ================ */ /* =========================================================================================================================== */ @@ -19604,6 +21694,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADCSR_GBADIE_Msk (0x40UL) /*!< GBADIE (Bitfield-Mask: 0x01) */ #define R_ADC0_ADCSR_DBLANS_Pos (0UL) /*!< DBLANS (Bit 0) */ #define R_ADC0_ADCSR_DBLANS_Msk (0x1fUL) /*!< DBLANS (Bitfield-Mask: 0x1f) */ + #define R_ADC0_ADCSR_ADIE_Pos (12UL) /*!< ADIE (Bit 12) */ + #define R_ADC0_ADCSR_ADIE_Msk (0x1000UL) /*!< ADIE (Bitfield-Mask: 0x01) */ /* ======================================================== ADANSA ========================================================= */ #define R_ADC0_ADANSA_ANSA_Pos (0UL) /*!< ANSA (Bit 0) */ #define R_ADC0_ADANSA_ANSA_Msk (0x1UL) /*!< ANSA (Bitfield-Mask: 0x01) */ @@ -19630,6 +21722,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADCER_ACE_Msk (0x20UL) /*!< ACE (Bitfield-Mask: 0x01) */ #define R_ADC0_ADCER_ADPRC_Pos (1UL) /*!< ADPRC (Bit 1) */ #define R_ADC0_ADCER_ADPRC_Msk (0x6UL) /*!< ADPRC (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADCER_DCE_Pos (4UL) /*!< DCE (Bit 4) */ + #define R_ADC0_ADCER_DCE_Msk (0x10UL) /*!< DCE (Bitfield-Mask: 0x01) */ /* ======================================================== ADSTRGR ======================================================== */ #define R_ADC0_ADSTRGR_TRSA_Pos (8UL) /*!< TRSA (Bit 8) */ #define R_ADC0_ADSTRGR_TRSA_Msk (0x3f00UL) /*!< TRSA (Bitfield-Mask: 0x3f) */ @@ -19648,6 +21742,10 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADEXICR_OCSAD_Msk (0x2UL) /*!< OCSAD (Bitfield-Mask: 0x01) */ #define R_ADC0_ADEXICR_TSSAD_Pos (0UL) /*!< TSSAD (Bit 0) */ #define R_ADC0_ADEXICR_TSSAD_Msk (0x1UL) /*!< TSSAD (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_EXSEL_Pos (14UL) /*!< EXSEL (Bit 14) */ + #define R_ADC0_ADEXICR_EXSEL_Msk (0x4000UL) /*!< EXSEL (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_EXOEN_Pos (15UL) /*!< EXOEN (Bit 15) */ + #define R_ADC0_ADEXICR_EXOEN_Msk (0x8000UL) /*!< EXOEN (Bitfield-Mask: 0x01) */ /* ======================================================== ADANSB ========================================================= */ #define R_ADC0_ADANSB_ANSB_Pos (0UL) /*!< ANSB (Bit 0) */ #define R_ADC0_ADANSB_ANSB_Msk (0x1UL) /*!< ANSB (Bitfield-Mask: 0x01) */ @@ -19697,6 +21795,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADGSPCR_GBRSCN_Msk (0x2UL) /*!< GBRSCN (Bitfield-Mask: 0x01) */ #define R_ADC0_ADGSPCR_PGS_Pos (0UL) /*!< PGS (Bit 0) */ #define R_ADC0_ADGSPCR_PGS_Msk (0x1UL) /*!< PGS (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADGSPCR_GBEXTRG_Pos (8UL) /*!< GBEXTRG (Bit 8) */ + #define R_ADC0_ADGSPCR_GBEXTRG_Msk (0x100UL) /*!< GBEXTRG (Bitfield-Mask: 0x01) */ /* ========================================================= ADICR ========================================================= */ #define R_ADC0_ADICR_ADIC_Pos (0UL) /*!< ADIC (Bit 0) */ #define R_ADC0_ADICR_ADIC_Msk (0x3UL) /*!< ADIC (Bitfield-Mask: 0x03) */ @@ -19814,6 +21914,14 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADPGACR_P000SEL1_Msk (0x2UL) /*!< P000SEL1 (Bitfield-Mask: 0x01) */ #define R_ADC0_ADPGACR_P000SEL0_Pos (0UL) /*!< P000SEL0 (Bit 0) */ #define R_ADC0_ADPGACR_P000SEL0_Msk (0x1UL) /*!< P000SEL0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003SEL0_Pos (12UL) /*!< P003SEL0 (Bit 12) */ + #define R_ADC0_ADPGACR_P003SEL0_Msk (0x1000UL) /*!< P003SEL0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003SEL1_Pos (13UL) /*!< P003SEL1 (Bit 13) */ + #define R_ADC0_ADPGACR_P003SEL1_Msk (0x2000UL) /*!< P003SEL1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003ENAMP_Pos (14UL) /*!< P003ENAMP (Bit 14) */ + #define R_ADC0_ADPGACR_P003ENAMP_Msk (0x4000UL) /*!< P003ENAMP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003GEN_Pos (15UL) /*!< P003GEN (Bit 15) */ + #define R_ADC0_ADPGACR_P003GEN_Msk (0x8000UL) /*!< P003GEN (Bitfield-Mask: 0x01) */ /* ========================================================= ADRD ========================================================== */ #define R_ADC0_ADRD_AD_Pos (0UL) /*!< AD (Bit 0) */ #define R_ADC0_ADRD_AD_Msk (0xffffUL) /*!< AD (Bitfield-Mask: 0xffff) */ @@ -19846,6 +21954,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADPGAGS0_P001GAIN_Msk (0xf0UL) /*!< P001GAIN (Bitfield-Mask: 0x0f) */ #define R_ADC0_ADPGAGS0_P000GAIN_Pos (0UL) /*!< P000GAIN (Bit 0) */ #define R_ADC0_ADPGAGS0_P000GAIN_Msk (0xfUL) /*!< P000GAIN (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADPGAGS0_P003GAIN_Pos (12UL) /*!< P003GAIN (Bit 12) */ + #define R_ADC0_ADPGAGS0_P003GAIN_Msk (0xf000UL) /*!< P003GAIN (Bitfield-Mask: 0x0f) */ /* ======================================================= ADPGADCR0 ======================================================= */ #define R_ADC0_ADPGADCR0_P003DG_Pos (12UL) /*!< P003DG (Bit 12) */ #define R_ADC0_ADPGADCR0_P003DG_Msk (0x3000UL) /*!< P003DG (Bitfield-Mask: 0x03) */ @@ -19861,6 +21971,349 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ADC0_ADPGADCR0_P000DEN_Msk (0x8UL) /*!< P000DEN (Bitfield-Mask: 0x01) */ #define R_ADC0_ADPGADCR0_P000DG_Pos (0UL) /*!< P000DG (Bit 0) */ #define R_ADC0_ADPGADCR0_P000DG_Msk (0x3UL) /*!< P000DG (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADPGADCR0_P003DEN_Pos (15UL) /*!< P003DEN (Bit 15) */ + #define R_ADC0_ADPGADCR0_P003DEN_Msk (0x8000UL) /*!< P003DEN (Bitfield-Mask: 0x01) */ +/* ========================================================= ADREF ========================================================= */ + #define R_ADC0_ADREF_ADF_Pos (0UL) /*!< ADF (Bit 0) */ + #define R_ADC0_ADREF_ADF_Msk (0x1UL) /*!< ADF (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADREF_ADSCACT_Pos (7UL) /*!< ADSCACT (Bit 7) */ + #define R_ADC0_ADREF_ADSCACT_Msk (0x80UL) /*!< ADSCACT (Bitfield-Mask: 0x01) */ +/* ======================================================== ADEXREF ======================================================== */ + #define R_ADC0_ADEXREF_GBADF_Pos (0UL) /*!< GBADF (Bit 0) */ + #define R_ADC0_ADEXREF_GBADF_Msk (0x1UL) /*!< GBADF (Bitfield-Mask: 0x01) */ +/* ======================================================= ADAMPOFF ======================================================== */ + #define R_ADC0_ADAMPOFF_OPOFF_Pos (0UL) /*!< OPOFF (Bit 0) */ + #define R_ADC0_ADAMPOFF_OPOFF_Msk (0xffUL) /*!< OPOFF (Bitfield-Mask: 0xff) */ +/* ======================================================== ADTSTPR ======================================================== */ + #define R_ADC0_ADTSTPR_PRO_Pos (0UL) /*!< PRO (Bit 0) */ + #define R_ADC0_ADTSTPR_PRO_Msk (0x1UL) /*!< PRO (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTPR_B0WI_Pos (1UL) /*!< B0WI (Bit 1) */ + #define R_ADC0_ADTSTPR_B0WI_Msk (0x2UL) /*!< B0WI (Bitfield-Mask: 0x01) */ +/* ======================================================= ADDDACER ======================================================== */ + #define R_ADC0_ADDDACER_WRION_Pos (0UL) /*!< WRION (Bit 0) */ + #define R_ADC0_ADDDACER_WRION_Msk (0x1fUL) /*!< WRION (Bitfield-Mask: 0x1f) */ + #define R_ADC0_ADDDACER_WRIOFF_Pos (8UL) /*!< WRIOFF (Bit 8) */ + #define R_ADC0_ADDDACER_WRIOFF_Msk (0x1f00UL) /*!< WRIOFF (Bitfield-Mask: 0x1f) */ + #define R_ADC0_ADDDACER_ADHS_Pos (15UL) /*!< ADHS (Bit 15) */ + #define R_ADC0_ADDDACER_ADHS_Msk (0x8000UL) /*!< ADHS (Bitfield-Mask: 0x01) */ +/* ======================================================= ADEXTSTR ======================================================== */ + #define R_ADC0_ADEXTSTR_SHTEST_Pos (0UL) /*!< SHTEST (Bit 0) */ + #define R_ADC0_ADEXTSTR_SHTEST_Msk (0x7UL) /*!< SHTEST (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADEXTSTR_SWTST_Pos (4UL) /*!< SWTST (Bit 4) */ + #define R_ADC0_ADEXTSTR_SWTST_Msk (0x30UL) /*!< SWTST (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADEXTSTR_SHTRM_Pos (8UL) /*!< SHTRM (Bit 8) */ + #define R_ADC0_ADEXTSTR_SHTRM_Msk (0x300UL) /*!< SHTRM (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADEXTSTR_ADTRM3_Pos (11UL) /*!< ADTRM3 (Bit 11) */ + #define R_ADC0_ADEXTSTR_ADTRM3_Msk (0x800UL) /*!< ADTRM3 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXTSTR_ADTRM2_Pos (12UL) /*!< ADTRM2 (Bit 12) */ + #define R_ADC0_ADEXTSTR_ADTRM2_Msk (0x3000UL) /*!< ADTRM2 (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADEXTSTR_ADTRM1_Pos (14UL) /*!< ADTRM1 (Bit 14) */ + #define R_ADC0_ADEXTSTR_ADTRM1_Msk (0xc000UL) /*!< ADTRM1 (Bitfield-Mask: 0x03) */ +/* ======================================================== ADTSTRA ======================================================== */ + #define R_ADC0_ADTSTRA_ATBUSSEL_Pos (0UL) /*!< ATBUSSEL (Bit 0) */ + #define R_ADC0_ADTSTRA_ATBUSSEL_Msk (0x1UL) /*!< ATBUSSEL (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTRA_TSTSWREF_Pos (1UL) /*!< TSTSWREF (Bit 1) */ + #define R_ADC0_ADTSTRA_TSTSWREF_Msk (0xeUL) /*!< TSTSWREF (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADTSTRA_OCSW_Pos (5UL) /*!< OCSW (Bit 5) */ + #define R_ADC0_ADTSTRA_OCSW_Msk (0x20UL) /*!< OCSW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTRA_TSSW_Pos (6UL) /*!< TSSW (Bit 6) */ + #define R_ADC0_ADTSTRA_TSSW_Msk (0x40UL) /*!< TSSW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTRA_ADTEST_AD_Pos (8UL) /*!< ADTEST_AD (Bit 8) */ + #define R_ADC0_ADTSTRA_ADTEST_AD_Msk (0xf00UL) /*!< ADTEST_AD (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADTSTRA_ADTEST_IO_Pos (12UL) /*!< ADTEST_IO (Bit 12) */ + #define R_ADC0_ADTSTRA_ADTEST_IO_Msk (0xf000UL) /*!< ADTEST_IO (Bitfield-Mask: 0x0f) */ +/* ======================================================== ADTSTRB ======================================================== */ + #define R_ADC0_ADTSTRB_ADVAL_Pos (0UL) /*!< ADVAL (Bit 0) */ + #define R_ADC0_ADTSTRB_ADVAL_Msk (0x7fffUL) /*!< ADVAL (Bitfield-Mask: 0x7fff) */ +/* ======================================================== ADTSTRC ======================================================== */ + #define R_ADC0_ADTSTRC_ADMD_Pos (0UL) /*!< ADMD (Bit 0) */ + #define R_ADC0_ADTSTRC_ADMD_Msk (0xffUL) /*!< ADMD (Bitfield-Mask: 0xff) */ + #define R_ADC0_ADTSTRC_SYNCERR_Pos (12UL) /*!< SYNCERR (Bit 12) */ + #define R_ADC0_ADTSTRC_SYNCERR_Msk (0x1000UL) /*!< SYNCERR (Bitfield-Mask: 0x01) */ +/* ======================================================== ADTSTRD ======================================================== */ + #define R_ADC0_ADTSTRD_ADVAL16_Pos (0UL) /*!< ADVAL16 (Bit 0) */ + #define R_ADC0_ADTSTRD_ADVAL16_Msk (0x1UL) /*!< ADVAL16 (Bitfield-Mask: 0x01) */ +/* ======================================================= ADSWTSTR0 ======================================================= */ + #define R_ADC0_ADSWTSTR0_CHSW00_Pos (0UL) /*!< CHSW00 (Bit 0) */ + #define R_ADC0_ADSWTSTR0_CHSW00_Msk (0x1UL) /*!< CHSW00 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW01_Pos (1UL) /*!< CHSW01 (Bit 1) */ + #define R_ADC0_ADSWTSTR0_CHSW01_Msk (0x2UL) /*!< CHSW01 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW02_Pos (2UL) /*!< CHSW02 (Bit 2) */ + #define R_ADC0_ADSWTSTR0_CHSW02_Msk (0x4UL) /*!< CHSW02 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW03_Pos (3UL) /*!< CHSW03 (Bit 3) */ + #define R_ADC0_ADSWTSTR0_CHSW03_Msk (0x8UL) /*!< CHSW03 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW04_Pos (4UL) /*!< CHSW04 (Bit 4) */ + #define R_ADC0_ADSWTSTR0_CHSW04_Msk (0x10UL) /*!< CHSW04 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW05_Pos (5UL) /*!< CHSW05 (Bit 5) */ + #define R_ADC0_ADSWTSTR0_CHSW05_Msk (0x20UL) /*!< CHSW05 (Bitfield-Mask: 0x01) */ +/* ======================================================= ADSWTSTR1 ======================================================= */ + #define R_ADC0_ADSWTSTR1_CHSW16_Pos (0UL) /*!< CHSW16 (Bit 0) */ + #define R_ADC0_ADSWTSTR1_CHSW16_Msk (0x1UL) /*!< CHSW16 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW17_Pos (1UL) /*!< CHSW17 (Bit 1) */ + #define R_ADC0_ADSWTSTR1_CHSW17_Msk (0x2UL) /*!< CHSW17 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW18_Pos (2UL) /*!< CHSW18 (Bit 2) */ + #define R_ADC0_ADSWTSTR1_CHSW18_Msk (0x4UL) /*!< CHSW18 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW19_Pos (3UL) /*!< CHSW19 (Bit 3) */ + #define R_ADC0_ADSWTSTR1_CHSW19_Msk (0x8UL) /*!< CHSW19 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW20_Pos (4UL) /*!< CHSW20 (Bit 4) */ + #define R_ADC0_ADSWTSTR1_CHSW20_Msk (0x10UL) /*!< CHSW20 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW21_Pos (5UL) /*!< CHSW21 (Bit 5) */ + #define R_ADC0_ADSWTSTR1_CHSW21_Msk (0x20UL) /*!< CHSW21 (Bitfield-Mask: 0x01) */ +/* ======================================================= ADSWTSTR2 ======================================================= */ + #define R_ADC0_ADSWTSTR2_EX0SW_Pos (0UL) /*!< EX0SW (Bit 0) */ + #define R_ADC0_ADSWTSTR2_EX0SW_Msk (0x1UL) /*!< EX0SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_EX1SW_Pos (1UL) /*!< EX1SW (Bit 1) */ + #define R_ADC0_ADSWTSTR2_EX1SW_Msk (0x2UL) /*!< EX1SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_SHBYPS0_Pos (4UL) /*!< SHBYPS0 (Bit 4) */ + #define R_ADC0_ADSWTSTR2_SHBYPS0_Msk (0x10UL) /*!< SHBYPS0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_SHBYPS1_Pos (5UL) /*!< SHBYPS1 (Bit 5) */ + #define R_ADC0_ADSWTSTR2_SHBYPS1_Msk (0x20UL) /*!< SHBYPS1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_SHBYPS2_Pos (6UL) /*!< SHBYPS2 (Bit 6) */ + #define R_ADC0_ADSWTSTR2_SHBYPS2_Msk (0x40UL) /*!< SHBYPS2 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP0SW_Pos (8UL) /*!< GRP0SW (Bit 8) */ + #define R_ADC0_ADSWTSTR2_GRP0SW_Msk (0x100UL) /*!< GRP0SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP1SW_Pos (9UL) /*!< GRP1SW (Bit 9) */ + #define R_ADC0_ADSWTSTR2_GRP1SW_Msk (0x200UL) /*!< GRP1SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP2SW_Pos (10UL) /*!< GRP2SW (Bit 10) */ + #define R_ADC0_ADSWTSTR2_GRP2SW_Msk (0x400UL) /*!< GRP2SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP3SW_Pos (11UL) /*!< GRP3SW (Bit 11) */ + #define R_ADC0_ADSWTSTR2_GRP3SW_Msk (0x800UL) /*!< GRP3SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRPEX1SW_Pos (12UL) /*!< GRPEX1SW (Bit 12) */ + #define R_ADC0_ADSWTSTR2_GRPEX1SW_Msk (0x1000UL) /*!< GRPEX1SW (Bitfield-Mask: 0x01) */ +/* ======================================================== ADSWCR ========================================================= */ + #define R_ADC0_ADSWCR_ADSWREF_Pos (0UL) /*!< ADSWREF (Bit 0) */ + #define R_ADC0_ADSWCR_ADSWREF_Msk (0x7UL) /*!< ADSWREF (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADSWCR_SHSWREF_Pos (4UL) /*!< SHSWREF (Bit 4) */ + #define R_ADC0_ADSWCR_SHSWREF_Msk (0x70UL) /*!< SHSWREF (Bitfield-Mask: 0x07) */ +/* ======================================================== ADGSCS ========================================================= */ + #define R_ADC0_ADGSCS_CHSELGB_Pos (0UL) /*!< CHSELGB (Bit 0) */ + #define R_ADC0_ADGSCS_CHSELGB_Msk (0xffUL) /*!< CHSELGB (Bitfield-Mask: 0xff) */ + #define R_ADC0_ADGSCS_CHSELGA_Pos (8UL) /*!< CHSELGA (Bit 8) */ + #define R_ADC0_ADGSCS_CHSELGA_Msk (0xff00UL) /*!< CHSELGA (Bitfield-Mask: 0xff) */ +/* ========================================================= ADSER ========================================================= */ + #define R_ADC0_ADSER_SMPEX_Pos (7UL) /*!< SMPEX (Bit 7) */ + #define R_ADC0_ADSER_SMPEX_Msk (0x80UL) /*!< SMPEX (Bitfield-Mask: 0x01) */ +/* ======================================================== ADBUF0 ========================================================= */ + #define R_ADC0_ADBUF0_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF0_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF1 ========================================================= */ + #define R_ADC0_ADBUF1_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF1_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF2 ========================================================= */ + #define R_ADC0_ADBUF2_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF2_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF3 ========================================================= */ + #define R_ADC0_ADBUF3_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF3_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF4 ========================================================= */ + #define R_ADC0_ADBUF4_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF4_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF5 ========================================================= */ + #define R_ADC0_ADBUF5_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF5_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF6 ========================================================= */ + #define R_ADC0_ADBUF6_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF6_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF7 ========================================================= */ + #define R_ADC0_ADBUF7_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF7_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF8 ========================================================= */ + #define R_ADC0_ADBUF8_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF8_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF9 ========================================================= */ + #define R_ADC0_ADBUF9_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF9_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF10 ======================================================== */ + #define R_ADC0_ADBUF10_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF10_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF11 ======================================================== */ + #define R_ADC0_ADBUF11_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF11_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF12 ======================================================== */ + #define R_ADC0_ADBUF12_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF12_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF13 ======================================================== */ + #define R_ADC0_ADBUF13_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF13_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF14 ======================================================== */ + #define R_ADC0_ADBUF14_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF14_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF15 ======================================================== */ + #define R_ADC0_ADBUF15_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF15_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUFEN ======================================================== */ + #define R_ADC0_ADBUFEN_BUFEN_Pos (0UL) /*!< BUFEN (Bit 0) */ + #define R_ADC0_ADBUFEN_BUFEN_Msk (0x1UL) /*!< BUFEN (Bitfield-Mask: 0x01) */ +/* ======================================================= ADBUFPTR ======================================================== */ + #define R_ADC0_ADBUFPTR_BUFPTR_Pos (0UL) /*!< BUFPTR (Bit 0) */ + #define R_ADC0_ADBUFPTR_BUFPTR_Msk (0xfUL) /*!< BUFPTR (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADBUFPTR_PTROVF_Pos (4UL) /*!< PTROVF (Bit 4) */ + #define R_ADC0_ADBUFPTR_PTROVF_Msk (0x10UL) /*!< PTROVF (Bitfield-Mask: 0x01) */ +/* ======================================================= ADPGADBS0 ======================================================= */ + #define R_ADC0_ADPGADBS0_P0BIAS_Pos (0UL) /*!< P0BIAS (Bit 0) */ + #define R_ADC0_ADPGADBS0_P0BIAS_Msk (0x1UL) /*!< P0BIAS (Bitfield-Mask: 0x01) */ +/* ======================================================= ADPGADBS1 ======================================================= */ + #define R_ADC0_ADPGADBS1_P3BIAS_Pos (0UL) /*!< P3BIAS (Bit 0) */ + #define R_ADC0_ADPGADBS1_P3BIAS_Msk (0x1UL) /*!< P3BIAS (Bitfield-Mask: 0x01) */ +/* ======================================================= ADREFMON ======================================================== */ + #define R_ADC0_ADREFMON_PGAMON_Pos (0UL) /*!< PGAMON (Bit 0) */ + #define R_ADC0_ADREFMON_PGAMON_Msk (0x7UL) /*!< PGAMON (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADREFMON_MONSEL_Pos (4UL) /*!< MONSEL (Bit 4) */ + #define R_ADC0_ADREFMON_MONSEL_Msk (0xf0UL) /*!< MONSEL (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ R_PSCU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PSARB ========================================================= */ + #define R_PSCU_PSARB_PSARB1_Pos (1UL) /*!< PSARB1 (Bit 1) */ + #define R_PSCU_PSARB_PSARB1_Msk (0x2UL) /*!< PSARB1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB2_Pos (2UL) /*!< PSARB2 (Bit 2) */ + #define R_PSCU_PSARB_PSARB2_Msk (0x4UL) /*!< PSARB2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB3_Pos (3UL) /*!< PSARB3 (Bit 3) */ + #define R_PSCU_PSARB_PSARB3_Msk (0x8UL) /*!< PSARB3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB6_Pos (6UL) /*!< PSARB6 (Bit 6) */ + #define R_PSCU_PSARB_PSARB6_Msk (0x40UL) /*!< PSARB6 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB7_Pos (7UL) /*!< PSARB7 (Bit 7) */ + #define R_PSCU_PSARB_PSARB7_Msk (0x80UL) /*!< PSARB7 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB8_Pos (8UL) /*!< PSARB8 (Bit 8) */ + #define R_PSCU_PSARB_PSARB8_Msk (0x100UL) /*!< PSARB8 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB9_Pos (9UL) /*!< PSARB9 (Bit 9) */ + #define R_PSCU_PSARB_PSARB9_Msk (0x200UL) /*!< PSARB9 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB11_Pos (11UL) /*!< PSARB11 (Bit 11) */ + #define R_PSCU_PSARB_PSARB11_Msk (0x800UL) /*!< PSARB11 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB12_Pos (12UL) /*!< PSARB12 (Bit 12) */ + #define R_PSCU_PSARB_PSARB12_Msk (0x1000UL) /*!< PSARB12 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB15_Pos (15UL) /*!< PSARB15 (Bit 15) */ + #define R_PSCU_PSARB_PSARB15_Msk (0x8000UL) /*!< PSARB15 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB16_Pos (16UL) /*!< PSARB16 (Bit 16) */ + #define R_PSCU_PSARB_PSARB16_Msk (0x10000UL) /*!< PSARB16 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB18_Pos (18UL) /*!< PSARB18 (Bit 18) */ + #define R_PSCU_PSARB_PSARB18_Msk (0x40000UL) /*!< PSARB18 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB19_Pos (19UL) /*!< PSARB19 (Bit 19) */ + #define R_PSCU_PSARB_PSARB19_Msk (0x80000UL) /*!< PSARB19 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB22_Pos (22UL) /*!< PSARB22 (Bit 22) */ + #define R_PSCU_PSARB_PSARB22_Msk (0x400000UL) /*!< PSARB22 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB23_Pos (23UL) /*!< PSARB23 (Bit 23) */ + #define R_PSCU_PSARB_PSARB23_Msk (0x800000UL) /*!< PSARB23 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB24_Pos (24UL) /*!< PSARB24 (Bit 24) */ + #define R_PSCU_PSARB_PSARB24_Msk (0x1000000UL) /*!< PSARB24 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB25_Pos (25UL) /*!< PSARB25 (Bit 25) */ + #define R_PSCU_PSARB_PSARB25_Msk (0x2000000UL) /*!< PSARB25 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB26_Pos (26UL) /*!< PSARB26 (Bit 26) */ + #define R_PSCU_PSARB_PSARB26_Msk (0x4000000UL) /*!< PSARB26 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB27_Pos (27UL) /*!< PSARB27 (Bit 27) */ + #define R_PSCU_PSARB_PSARB27_Msk (0x8000000UL) /*!< PSARB27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB28_Pos (28UL) /*!< PSARB28 (Bit 28) */ + #define R_PSCU_PSARB_PSARB28_Msk (0x10000000UL) /*!< PSARB28 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB29_Pos (29UL) /*!< PSARB29 (Bit 29) */ + #define R_PSCU_PSARB_PSARB29_Msk (0x20000000UL) /*!< PSARB29 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB30_Pos (30UL) /*!< PSARB30 (Bit 30) */ + #define R_PSCU_PSARB_PSARB30_Msk (0x40000000UL) /*!< PSARB30 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB31_Pos (31UL) /*!< PSARB31 (Bit 31) */ + #define R_PSCU_PSARB_PSARB31_Msk (0x80000000UL) /*!< PSARB31 (Bitfield-Mask: 0x01) */ +/* ========================================================= PSARC ========================================================= */ + #define R_PSCU_PSARC_PSARC0_Pos (0UL) /*!< PSARC0 (Bit 0) */ + #define R_PSCU_PSARC_PSARC0_Msk (0x1UL) /*!< PSARC0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC1_Pos (1UL) /*!< PSARC1 (Bit 1) */ + #define R_PSCU_PSARC_PSARC1_Msk (0x2UL) /*!< PSARC1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC3_Pos (3UL) /*!< PSARC3 (Bit 3) */ + #define R_PSCU_PSARC_PSARC3_Msk (0x8UL) /*!< PSARC3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC8_Pos (8UL) /*!< PSARC8 (Bit 8) */ + #define R_PSCU_PSARC_PSARC8_Msk (0x100UL) /*!< PSARC8 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC12_Pos (12UL) /*!< PSARC12 (Bit 12) */ + #define R_PSCU_PSARC_PSARC12_Msk (0x1000UL) /*!< PSARC12 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC13_Pos (13UL) /*!< PSARC13 (Bit 13) */ + #define R_PSCU_PSARC_PSARC13_Msk (0x2000UL) /*!< PSARC13 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC26_Pos (26UL) /*!< PSARC26 (Bit 26) */ + #define R_PSCU_PSARC_PSARC26_Msk (0x4000000UL) /*!< PSARC26 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC27_Pos (27UL) /*!< PSARC27 (Bit 27) */ + #define R_PSCU_PSARC_PSARC27_Msk (0x8000000UL) /*!< PSARC27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC31_Pos (31UL) /*!< PSARC31 (Bit 31) */ + #define R_PSCU_PSARC_PSARC31_Msk (0x80000000UL) /*!< PSARC31 (Bitfield-Mask: 0x01) */ +/* ========================================================= PSARD ========================================================= */ + #define R_PSCU_PSARD_PSARD0_Pos (0UL) /*!< PSARD0 (Bit 0) */ + #define R_PSCU_PSARD_PSARD0_Msk (0x1UL) /*!< PSARD0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD1_Pos (1UL) /*!< PSARD1 (Bit 1) */ + #define R_PSCU_PSARD_PSARD1_Msk (0x2UL) /*!< PSARD1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD2_Pos (2UL) /*!< PSARD2 (Bit 2) */ + #define R_PSCU_PSARD_PSARD2_Msk (0x4UL) /*!< PSARD2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD3_Pos (3UL) /*!< PSARD3 (Bit 3) */ + #define R_PSCU_PSARD_PSARD3_Msk (0x8UL) /*!< PSARD3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD11_Pos (11UL) /*!< PSARD11 (Bit 11) */ + #define R_PSCU_PSARD_PSARD11_Msk (0x800UL) /*!< PSARD11 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD12_Pos (12UL) /*!< PSARD12 (Bit 12) */ + #define R_PSCU_PSARD_PSARD12_Msk (0x1000UL) /*!< PSARD12 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD13_Pos (13UL) /*!< PSARD13 (Bit 13) */ + #define R_PSCU_PSARD_PSARD13_Msk (0x2000UL) /*!< PSARD13 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD14_Pos (14UL) /*!< PSARD14 (Bit 14) */ + #define R_PSCU_PSARD_PSARD14_Msk (0x4000UL) /*!< PSARD14 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD15_Pos (15UL) /*!< PSARD15 (Bit 15) */ + #define R_PSCU_PSARD_PSARD15_Msk (0x8000UL) /*!< PSARD15 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD16_Pos (16UL) /*!< PSARD16 (Bit 16) */ + #define R_PSCU_PSARD_PSARD16_Msk (0x10000UL) /*!< PSARD16 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD20_Pos (20UL) /*!< PSARD20 (Bit 20) */ + #define R_PSCU_PSARD_PSARD20_Msk (0x100000UL) /*!< PSARD20 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD22_Pos (22UL) /*!< PSARD22 (Bit 22) */ + #define R_PSCU_PSARD_PSARD22_Msk (0x400000UL) /*!< PSARD22 (Bitfield-Mask: 0x01) */ +/* ========================================================= PSARE ========================================================= */ + #define R_PSCU_PSARE_PSARE0_Pos (0UL) /*!< PSARE0 (Bit 0) */ + #define R_PSCU_PSARE_PSARE0_Msk (0x1UL) /*!< PSARE0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE1_Pos (1UL) /*!< PSARE1 (Bit 1) */ + #define R_PSCU_PSARE_PSARE1_Msk (0x2UL) /*!< PSARE1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE2_Pos (2UL) /*!< PSARE2 (Bit 2) */ + #define R_PSCU_PSARE_PSARE2_Msk (0x4UL) /*!< PSARE2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE14_Pos (14UL) /*!< PSARE14 (Bit 14) */ + #define R_PSCU_PSARE_PSARE14_Msk (0x4000UL) /*!< PSARE14 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE15_Pos (15UL) /*!< PSARE15 (Bit 15) */ + #define R_PSCU_PSARE_PSARE15_Msk (0x8000UL) /*!< PSARE15 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE22_Pos (22UL) /*!< PSARE22 (Bit 22) */ + #define R_PSCU_PSARE_PSARE22_Msk (0x400000UL) /*!< PSARE22 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE23_Pos (23UL) /*!< PSARE23 (Bit 23) */ + #define R_PSCU_PSARE_PSARE23_Msk (0x800000UL) /*!< PSARE23 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE24_Pos (24UL) /*!< PSARE24 (Bit 24) */ + #define R_PSCU_PSARE_PSARE24_Msk (0x1000000UL) /*!< PSARE24 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE25_Pos (25UL) /*!< PSARE25 (Bit 25) */ + #define R_PSCU_PSARE_PSARE25_Msk (0x2000000UL) /*!< PSARE25 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE26_Pos (26UL) /*!< PSARE26 (Bit 26) */ + #define R_PSCU_PSARE_PSARE26_Msk (0x4000000UL) /*!< PSARE26 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE27_Pos (27UL) /*!< PSARE27 (Bit 27) */ + #define R_PSCU_PSARE_PSARE27_Msk (0x8000000UL) /*!< PSARE27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE28_Pos (28UL) /*!< PSARE28 (Bit 28) */ + #define R_PSCU_PSARE_PSARE28_Msk (0x10000000UL) /*!< PSARE28 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE29_Pos (29UL) /*!< PSARE29 (Bit 29) */ + #define R_PSCU_PSARE_PSARE29_Msk (0x20000000UL) /*!< PSARE29 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE30_Pos (30UL) /*!< PSARE30 (Bit 30) */ + #define R_PSCU_PSARE_PSARE30_Msk (0x40000000UL) /*!< PSARE30 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE31_Pos (31UL) /*!< PSARE31 (Bit 31) */ + #define R_PSCU_PSARE_PSARE31_Msk (0x80000000UL) /*!< PSARE31 (Bitfield-Mask: 0x01) */ +/* ========================================================= MSSAR ========================================================= */ + #define R_PSCU_MSSAR_MSSAR0_Pos (0UL) /*!< MSSAR0 (Bit 0) */ + #define R_PSCU_MSSAR_MSSAR0_Msk (0x1UL) /*!< MSSAR0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR1_Pos (1UL) /*!< MSSAR1 (Bit 1) */ + #define R_PSCU_MSSAR_MSSAR1_Msk (0x2UL) /*!< MSSAR1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR2_Pos (2UL) /*!< MSSAR2 (Bit 2) */ + #define R_PSCU_MSSAR_MSSAR2_Msk (0x4UL) /*!< MSSAR2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR3_Pos (3UL) /*!< MSSAR3 (Bit 3) */ + #define R_PSCU_MSSAR_MSSAR3_Msk (0x8UL) /*!< MSSAR3 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFSAMONA ======================================================== */ + #define R_PSCU_CFSAMONA_CFS1_Pos (15UL) /*!< CFS1 (Bit 15) */ + #define R_PSCU_CFSAMONA_CFS1_Msk (0xff8000UL) /*!< CFS1 (Bitfield-Mask: 0x1ff) */ +/* ======================================================= CFSAMONB ======================================================== */ + #define R_PSCU_CFSAMONB_CFS2_Pos (10UL) /*!< CFS2 (Bit 10) */ + #define R_PSCU_CFSAMONB_CFS2_Msk (0xfffc00UL) /*!< CFS2 (Bitfield-Mask: 0x3fff) */ +/* ======================================================== DFSAMON ======================================================== */ + #define R_PSCU_DFSAMON_DFS_Pos (10UL) /*!< DFS (Bit 10) */ + #define R_PSCU_DFSAMON_DFS_Msk (0xfc00UL) /*!< DFS (Bitfield-Mask: 0x3f) */ +/* ======================================================== SSAMONA ======================================================== */ + #define R_PSCU_SSAMONA_SS1_Pos (13UL) /*!< SS1 (Bit 13) */ + #define R_PSCU_SSAMONA_SS1_Msk (0x1fe000UL) /*!< SS1 (Bitfield-Mask: 0xff) */ +/* ======================================================== SSAMONB ======================================================== */ + #define R_PSCU_SSAMONB_SS2_Pos (10UL) /*!< SS2 (Bit 10) */ + #define R_PSCU_SSAMONB_SS2_Msk (0x1ffc00UL) /*!< SS2 (Bitfield-Mask: 0x7ff) */ +/* ======================================================== DLMMON ========================================================= */ + #define R_PSCU_DLMMON_DLMMON_Pos (0UL) /*!< DLMMON (Bit 0) */ + #define R_PSCU_DLMMON_DLMMON_Msk (0xfUL) /*!< DLMMON (Bitfield-Mask: 0x0f) */ /* =========================================================================================================================== */ /* ================ R_AGT0 ================ */ @@ -19930,6 +22383,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ======================================================= AGTIOSEL ======================================================== */ #define R_AGT0_AGTIOSEL_TIES_Pos (4UL) /*!< TIES (Bit 4) */ #define R_AGT0_AGTIOSEL_TIES_Msk (0x10UL) /*!< TIES (Bitfield-Mask: 0x01) */ + #define R_AGT0_AGTIOSEL_SEL_Pos (0UL) /*!< SEL (Bit 0) */ + #define R_AGT0_AGTIOSEL_SEL_Msk (0x3UL) /*!< SEL (Bitfield-Mask: 0x03) */ /* =========================================================================================================================== */ /* ================ R_BUS ================ */ @@ -20525,6 +22980,15 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ======================================================= CTSUERRS ======================================================== */ #define R_CTSU_CTSUERRS_CTSUICOMP_Pos (15UL) /*!< CTSUICOMP (Bit 15) */ #define R_CTSU_CTSUERRS_CTSUICOMP_Msk (0x8000UL) /*!< CTSUICOMP (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUSPMD_Pos (0UL) /*!< CTSUSPMD (Bit 0) */ + #define R_CTSU_CTSUERRS_CTSUSPMD_Msk (0x3UL) /*!< CTSUSPMD (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUERRS_CTSUTSOD_Pos (2UL) /*!< CTSUTSOD (Bit 2) */ + #define R_CTSU_CTSUERRS_CTSUTSOD_Msk (0x4UL) /*!< CTSUTSOD (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUDRV_Pos (3UL) /*!< CTSUDRV (Bit 3) */ + #define R_CTSU_CTSUERRS_CTSUDRV_Msk (0x8UL) /*!< CTSUDRV (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUTSOC_Pos (7UL) /*!< CTSUTSOC (Bit 7) */ + #define R_CTSU_CTSUERRS_CTSUTSOC_Msk (0x80UL) /*!< CTSUTSOC (Bitfield-Mask: 0x01) */ +/* ======================================================= CTSUTRMR ======================================================== */ /* =========================================================================================================================== */ /* ================ R_CTSU2 ================ */ @@ -21096,14 +23560,23 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_DEBUG_DBGSTOPCR_DBGSTOP_IWDT_Msk (0x1UL) /*!< DBGSTOP_IWDT (Bitfield-Mask: 0x01) */ #define R_DEBUG_DBGSTOPCR_DBGSTOP_WDT_Pos (1UL) /*!< DBGSTOP_WDT (Bit 1) */ #define R_DEBUG_DBGSTOPCR_DBGSTOP_WDT_Msk (0x2UL) /*!< DBGSTOP_WDT (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_CPER_Pos (31UL) /*!< DBGSTOP_CPER (Bit 31) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_CPER_Msk (0x80000000UL) /*!< DBGSTOP_CPER (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_DMA ================ */ /* =========================================================================================================================== */ /* ========================================================= DMAST ========================================================= */ - #define R_DMA_DMAST_DMST_Pos (0UL) /*!< DMST (Bit 0) */ - #define R_DMA_DMAST_DMST_Msk (0x1UL) /*!< DMST (Bitfield-Mask: 0x01) */ + #define R_DMA_DMAST_DMST_Pos (0UL) /*!< DMST (Bit 0) */ + #define R_DMA_DMAST_DMST_Msk (0x1UL) /*!< DMST (Bitfield-Mask: 0x01) */ +/* ======================================================== DMECHR ========================================================= */ + #define R_DMA_DMECHR_DMECH_Pos (0UL) /*!< DMECH (Bit 0) */ + #define R_DMA_DMECHR_DMECH_Msk (0x7UL) /*!< DMECH (Bitfield-Mask: 0x07) */ + #define R_DMA_DMECHR_DMECHSAM_Pos (8UL) /*!< DMECHSAM (Bit 8) */ + #define R_DMA_DMECHR_DMECHSAM_Msk (0x100UL) /*!< DMECHSAM (Bitfield-Mask: 0x01) */ + #define R_DMA_DMECHR_DMESTA_Pos (16UL) /*!< DMESTA (Bit 16) */ + #define R_DMA_DMECHR_DMESTA_Msk (0x10000UL) /*!< DMESTA (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_DMAC0 ================ */ @@ -21132,6 +23605,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_DMAC0_DMTMD_SZ_Msk (0x300UL) /*!< SZ (Bitfield-Mask: 0x03) */ #define R_DMAC0_DMTMD_DCTG_Pos (0UL) /*!< DCTG (Bit 0) */ #define R_DMAC0_DMTMD_DCTG_Msk (0x3UL) /*!< DCTG (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMTMD_TKP_Pos (10UL) /*!< TKP (Bit 10) */ + #define R_DMAC0_DMTMD_TKP_Msk (0x400UL) /*!< TKP (Bitfield-Mask: 0x01) */ /* ========================================================= DMINT ========================================================= */ #define R_DMAC0_DMINT_DTIE_Pos (4UL) /*!< DTIE (Bit 4) */ #define R_DMAC0_DMINT_DTIE_Msk (0x10UL) /*!< DTIE (Bitfield-Mask: 0x01) */ @@ -21152,6 +23627,10 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_DMAC0_DMAMD_DM_Msk (0xc0UL) /*!< DM (Bitfield-Mask: 0x03) */ #define R_DMAC0_DMAMD_DARA_Pos (0UL) /*!< DARA (Bit 0) */ #define R_DMAC0_DMAMD_DARA_Msk (0x1fUL) /*!< DARA (Bitfield-Mask: 0x1f) */ + #define R_DMAC0_DMAMD_DADR_Pos (5UL) /*!< DADR (Bit 5) */ + #define R_DMAC0_DMAMD_DADR_Msk (0x20UL) /*!< DADR (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMAMD_SADR_Pos (13UL) /*!< SADR (Bit 13) */ + #define R_DMAC0_DMAMD_SADR_Msk (0x2000UL) /*!< SADR (Bitfield-Mask: 0x01) */ /* ========================================================= DMOFR ========================================================= */ #define R_DMAC0_DMOFR_DMOFR_Pos (0UL) /*!< DMOFR (Bit 0) */ #define R_DMAC0_DMOFR_DMOFR_Msk (0xffffffffUL) /*!< DMOFR (Bitfield-Mask: 0xffffffff) */ @@ -21170,6 +23649,21 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_DMAC0_DMSTS_DTIF_Msk (0x10UL) /*!< DTIF (Bitfield-Mask: 0x01) */ #define R_DMAC0_DMSTS_ESIF_Pos (0UL) /*!< ESIF (Bit 0) */ #define R_DMAC0_DMSTS_ESIF_Msk (0x1UL) /*!< ESIF (Bitfield-Mask: 0x01) */ +/* ========================================================= DMSRR ========================================================= */ +/* ========================================================= DMDRR ========================================================= */ +/* ========================================================= DMSBS ========================================================= */ + #define R_DMAC0_DMSBS_DMSBSL_Pos (0UL) /*!< DMSBSL (Bit 0) */ + #define R_DMAC0_DMSBS_DMSBSL_Msk (0xffffUL) /*!< DMSBSL (Bitfield-Mask: 0xffff) */ + #define R_DMAC0_DMSBS_DMSBSH_Pos (16UL) /*!< DMSBSH (Bit 16) */ + #define R_DMAC0_DMSBS_DMSBSH_Msk (0xffff0000UL) /*!< DMSBSH (Bitfield-Mask: 0xffff) */ +/* ========================================================= DMDBS ========================================================= */ + #define R_DMAC0_DMDBS_DMDBSL_Pos (0UL) /*!< DMDBSL (Bit 0) */ + #define R_DMAC0_DMDBS_DMDBSL_Msk (0xffffUL) /*!< DMDBSL (Bitfield-Mask: 0xffff) */ + #define R_DMAC0_DMDBS_DMDBSH_Pos (16UL) /*!< DMDBSH (Bit 16) */ + #define R_DMAC0_DMDBS_DMDBSH_Msk (0xffff0000UL) /*!< DMDBSH (Bitfield-Mask: 0xffff) */ +/* ========================================================= DMBWR ========================================================= */ + #define R_DMAC0_DMBWR_BWE_Pos (0UL) /*!< BWE (Bit 0) */ + #define R_DMAC0_DMBWR_BWE_Msk (0x1UL) /*!< BWE (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_DOC ================ */ @@ -21530,27 +24024,85 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* =========================================================================================================================== */ /* ========================================================= DTCCR ========================================================= */ - #define R_DTC_DTCCR_RRS_Pos (4UL) /*!< RRS (Bit 4) */ - #define R_DTC_DTCCR_RRS_Msk (0x10UL) /*!< RRS (Bitfield-Mask: 0x01) */ + #define R_DTC_DTCCR_RRS_Pos (4UL) /*!< RRS (Bit 4) */ + #define R_DTC_DTCCR_RRS_Msk (0x10UL) /*!< RRS (Bitfield-Mask: 0x01) */ /* ======================================================== DTCVBR ========================================================= */ - #define R_DTC_DTCVBR_DTCVBR_Pos (0UL) /*!< DTCVBR (Bit 0) */ - #define R_DTC_DTCVBR_DTCVBR_Msk (0xffffffffUL) /*!< DTCVBR (Bitfield-Mask: 0xffffffff) */ + #define R_DTC_DTCVBR_DTCVBR_Pos (0UL) /*!< DTCVBR (Bit 0) */ + #define R_DTC_DTCVBR_DTCVBR_Msk (0xffffffffUL) /*!< DTCVBR (Bitfield-Mask: 0xffffffff) */ /* ========================================================= DTCST ========================================================= */ - #define R_DTC_DTCST_DTCST_Pos (0UL) /*!< DTCST (Bit 0) */ - #define R_DTC_DTCST_DTCST_Msk (0x1UL) /*!< DTCST (Bitfield-Mask: 0x01) */ + #define R_DTC_DTCST_DTCST_Pos (0UL) /*!< DTCST (Bit 0) */ + #define R_DTC_DTCST_DTCST_Msk (0x1UL) /*!< DTCST (Bitfield-Mask: 0x01) */ /* ======================================================== DTCSTS ========================================================= */ - #define R_DTC_DTCSTS_ACT_Pos (15UL) /*!< ACT (Bit 15) */ - #define R_DTC_DTCSTS_ACT_Msk (0x8000UL) /*!< ACT (Bitfield-Mask: 0x01) */ - #define R_DTC_DTCSTS_VECN_Pos (0UL) /*!< VECN (Bit 0) */ - #define R_DTC_DTCSTS_VECN_Msk (0xffUL) /*!< VECN (Bitfield-Mask: 0xff) */ + #define R_DTC_DTCSTS_ACT_Pos (15UL) /*!< ACT (Bit 15) */ + #define R_DTC_DTCSTS_ACT_Msk (0x8000UL) /*!< ACT (Bitfield-Mask: 0x01) */ + #define R_DTC_DTCSTS_VECN_Pos (0UL) /*!< VECN (Bit 0) */ + #define R_DTC_DTCSTS_VECN_Msk (0xffUL) /*!< VECN (Bitfield-Mask: 0xff) */ +/* ======================================================= DTCCR_SEC ======================================================= */ + #define R_DTC_DTCCR_SEC_RRSS_Pos (4UL) /*!< RRSS (Bit 4) */ + #define R_DTC_DTCCR_SEC_RRSS_Msk (0x10UL) /*!< RRSS (Bitfield-Mask: 0x01) */ +/* ====================================================== DTCVBR_SEC ======================================================= */ +/* ========================================================= DTEVR ========================================================= */ + #define R_DTC_DTEVR_DTEV_Pos (0UL) /*!< DTEV (Bit 0) */ + #define R_DTC_DTEVR_DTEV_Msk (0xffUL) /*!< DTEV (Bitfield-Mask: 0xff) */ + #define R_DTC_DTEVR_DTEVSAM_Pos (8UL) /*!< DTEVSAM (Bit 8) */ + #define R_DTC_DTEVR_DTEVSAM_Msk (0x100UL) /*!< DTEVSAM (Bitfield-Mask: 0x01) */ + #define R_DTC_DTEVR_DTESTA_Pos (16UL) /*!< DTESTA (Bit 16) */ + #define R_DTC_DTEVR_DTESTA_Msk (0x10000UL) /*!< DTESTA (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_ELC ================ */ /* =========================================================================================================================== */ /* ========================================================= ELCR ========================================================== */ - #define R_ELC_ELCR_ELCON_Pos (7UL) /*!< ELCON (Bit 7) */ - #define R_ELC_ELCR_ELCON_Msk (0x80UL) /*!< ELCON (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCR_ELCON_Pos (7UL) /*!< ELCON (Bit 7) */ + #define R_ELC_ELCR_ELCON_Msk (0x80UL) /*!< ELCON (Bitfield-Mask: 0x01) */ +/* ======================================================== ELCSARA ======================================================== */ + #define R_ELC_ELCSARA_ELSEGR0_Pos (0UL) /*!< ELSEGR0 (Bit 0) */ + #define R_ELC_ELCSARA_ELSEGR0_Msk (0x1UL) /*!< ELSEGR0 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARA_ELSEGR1_Pos (1UL) /*!< ELSEGR1 (Bit 1) */ + #define R_ELC_ELCSARA_ELSEGR1_Msk (0x2UL) /*!< ELSEGR1 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARA_ELCR_Pos (2UL) /*!< ELCR (Bit 2) */ + #define R_ELC_ELCSARA_ELCR_Msk (0x4UL) /*!< ELCR (Bitfield-Mask: 0x01) */ +/* ======================================================== ELCSARB ======================================================== */ + #define R_ELC_ELCSARB_ELSR0_Pos (0UL) /*!< ELSR0 (Bit 0) */ + #define R_ELC_ELCSARB_ELSR0_Msk (0x1UL) /*!< ELSR0 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR1_Pos (1UL) /*!< ELSR1 (Bit 1) */ + #define R_ELC_ELCSARB_ELSR1_Msk (0x2UL) /*!< ELSR1 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR2_Pos (2UL) /*!< ELSR2 (Bit 2) */ + #define R_ELC_ELCSARB_ELSR2_Msk (0x4UL) /*!< ELSR2 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR3_Pos (3UL) /*!< ELSR3 (Bit 3) */ + #define R_ELC_ELCSARB_ELSR3_Msk (0x8UL) /*!< ELSR3 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR4_Pos (4UL) /*!< ELSR4 (Bit 4) */ + #define R_ELC_ELCSARB_ELSR4_Msk (0x10UL) /*!< ELSR4 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR5_Pos (5UL) /*!< ELSR5 (Bit 5) */ + #define R_ELC_ELCSARB_ELSR5_Msk (0x20UL) /*!< ELSR5 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR6_Pos (6UL) /*!< ELSR6 (Bit 6) */ + #define R_ELC_ELCSARB_ELSR6_Msk (0x40UL) /*!< ELSR6 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR7_Pos (7UL) /*!< ELSR7 (Bit 7) */ + #define R_ELC_ELCSARB_ELSR7_Msk (0x80UL) /*!< ELSR7 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR8_Pos (8UL) /*!< ELSR8 (Bit 8) */ + #define R_ELC_ELCSARB_ELSR8_Msk (0x100UL) /*!< ELSR8 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR9_Pos (9UL) /*!< ELSR9 (Bit 9) */ + #define R_ELC_ELCSARB_ELSR9_Msk (0x200UL) /*!< ELSR9 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR10_Pos (10UL) /*!< ELSR10 (Bit 10) */ + #define R_ELC_ELCSARB_ELSR10_Msk (0x400UL) /*!< ELSR10 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR11_Pos (11UL) /*!< ELSR11 (Bit 11) */ + #define R_ELC_ELCSARB_ELSR11_Msk (0x800UL) /*!< ELSR11 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR12_Pos (12UL) /*!< ELSR12 (Bit 12) */ + #define R_ELC_ELCSARB_ELSR12_Msk (0x1000UL) /*!< ELSR12 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR13_Pos (13UL) /*!< ELSR13 (Bit 13) */ + #define R_ELC_ELCSARB_ELSR13_Msk (0x2000UL) /*!< ELSR13 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR14_Pos (14UL) /*!< ELSR14 (Bit 14) */ + #define R_ELC_ELCSARB_ELSR14_Msk (0x4000UL) /*!< ELSR14 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR15_Pos (15UL) /*!< ELSR15 (Bit 15) */ + #define R_ELC_ELCSARB_ELSR15_Msk (0x8000UL) /*!< ELSR15 (Bitfield-Mask: 0x01) */ +/* ======================================================== ELCSARC ======================================================== */ + #define R_ELC_ELCSARC_ELSR16_Pos (0UL) /*!< ELSR16 (Bit 0) */ + #define R_ELC_ELCSARC_ELSR16_Msk (0x1UL) /*!< ELSR16 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARC_ELSR17_Pos (1UL) /*!< ELSR17 (Bit 1) */ + #define R_ELC_ELCSARC_ELSR17_Msk (0x2UL) /*!< ELSR17 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARC_ELSR18_Pos (2UL) /*!< ELSR18 (Bit 2) */ + #define R_ELC_ELCSARC_ELSR18_Msk (0x4UL) /*!< ELSR18 (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_ETHERC0 ================ */ @@ -22531,118 +25083,125 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* =========================================================================================================================== */ /* ======================================================== FASTAT ========================================================= */ - #define R_FACI_HP_FASTAT_CFAE_Pos (7UL) /*!< CFAE (Bit 7) */ - #define R_FACI_HP_FASTAT_CFAE_Msk (0x80UL) /*!< CFAE (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FASTAT_CMDLK_Pos (4UL) /*!< CMDLK (Bit 4) */ - #define R_FACI_HP_FASTAT_CMDLK_Msk (0x10UL) /*!< CMDLK (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FASTAT_DFAE_Pos (3UL) /*!< DFAE (Bit 3) */ - #define R_FACI_HP_FASTAT_DFAE_Msk (0x8UL) /*!< DFAE (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FASTAT_ECRCT_Pos (0UL) /*!< ECRCT (Bit 0) */ - #define R_FACI_HP_FASTAT_ECRCT_Msk (0x1UL) /*!< ECRCT (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FASTAT_CFAE_Pos (7UL) /*!< CFAE (Bit 7) */ + #define R_FACI_HP_FASTAT_CFAE_Msk (0x80UL) /*!< CFAE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FASTAT_CMDLK_Pos (4UL) /*!< CMDLK (Bit 4) */ + #define R_FACI_HP_FASTAT_CMDLK_Msk (0x10UL) /*!< CMDLK (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FASTAT_DFAE_Pos (3UL) /*!< DFAE (Bit 3) */ + #define R_FACI_HP_FASTAT_DFAE_Msk (0x8UL) /*!< DFAE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FASTAT_ECRCT_Pos (0UL) /*!< ECRCT (Bit 0) */ + #define R_FACI_HP_FASTAT_ECRCT_Msk (0x1UL) /*!< ECRCT (Bitfield-Mask: 0x01) */ /* ======================================================== FAEINT ========================================================= */ - #define R_FACI_HP_FAEINT_CFAEIE_Pos (7UL) /*!< CFAEIE (Bit 7) */ - #define R_FACI_HP_FAEINT_CFAEIE_Msk (0x80UL) /*!< CFAEIE (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FAEINT_CMDLKIE_Pos (4UL) /*!< CMDLKIE (Bit 4) */ - #define R_FACI_HP_FAEINT_CMDLKIE_Msk (0x10UL) /*!< CMDLKIE (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FAEINT_DFAEIE_Pos (3UL) /*!< DFAEIE (Bit 3) */ - #define R_FACI_HP_FAEINT_DFAEIE_Msk (0x8UL) /*!< DFAEIE (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FAEINT_ECRCTIE_Pos (0UL) /*!< ECRCTIE (Bit 0) */ - #define R_FACI_HP_FAEINT_ECRCTIE_Msk (0x1UL) /*!< ECRCTIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAEINT_CFAEIE_Pos (7UL) /*!< CFAEIE (Bit 7) */ + #define R_FACI_HP_FAEINT_CFAEIE_Msk (0x80UL) /*!< CFAEIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAEINT_CMDLKIE_Pos (4UL) /*!< CMDLKIE (Bit 4) */ + #define R_FACI_HP_FAEINT_CMDLKIE_Msk (0x10UL) /*!< CMDLKIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAEINT_DFAEIE_Pos (3UL) /*!< DFAEIE (Bit 3) */ + #define R_FACI_HP_FAEINT_DFAEIE_Msk (0x8UL) /*!< DFAEIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAEINT_ECRCTIE_Pos (0UL) /*!< ECRCTIE (Bit 0) */ + #define R_FACI_HP_FAEINT_ECRCTIE_Msk (0x1UL) /*!< ECRCTIE (Bitfield-Mask: 0x01) */ /* ======================================================== FRDYIE ========================================================= */ - #define R_FACI_HP_FRDYIE_FRDYIE_Pos (0UL) /*!< FRDYIE (Bit 0) */ - #define R_FACI_HP_FRDYIE_FRDYIE_Msk (0x1UL) /*!< FRDYIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FRDYIE_FRDYIE_Pos (0UL) /*!< FRDYIE (Bit 0) */ + #define R_FACI_HP_FRDYIE_FRDYIE_Msk (0x1UL) /*!< FRDYIE (Bitfield-Mask: 0x01) */ /* ======================================================== FSADDR ========================================================= */ - #define R_FACI_HP_FSADDR_FSA_Pos (0UL) /*!< FSA (Bit 0) */ - #define R_FACI_HP_FSADDR_FSA_Msk (0xffffffffUL) /*!< FSA (Bitfield-Mask: 0xffffffff) */ + #define R_FACI_HP_FSADDR_FSA_Pos (0UL) /*!< FSA (Bit 0) */ + #define R_FACI_HP_FSADDR_FSA_Msk (0xffffffffUL) /*!< FSA (Bitfield-Mask: 0xffffffff) */ /* ======================================================== FEADDR ========================================================= */ - #define R_FACI_HP_FEADDR_FEA_Pos (0UL) /*!< FEA (Bit 0) */ - #define R_FACI_HP_FEADDR_FEA_Msk (0xffffffffUL) /*!< FEA (Bitfield-Mask: 0xffffffff) */ + #define R_FACI_HP_FEADDR_FEA_Pos (0UL) /*!< FEA (Bit 0) */ + #define R_FACI_HP_FEADDR_FEA_Msk (0xffffffffUL) /*!< FEA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== FMEPROT ======================================================== */ + #define R_FACI_HP_FMEPROT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FMEPROT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FMEPROT_CEPROT_Pos (0UL) /*!< CEPROT (Bit 0) */ + #define R_FACI_HP_FMEPROT_CEPROT_Msk (0x1UL) /*!< CEPROT (Bitfield-Mask: 0x01) */ +/* ======================================================== FBPROT0 ======================================================== */ + #define R_FACI_HP_FBPROT0_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FBPROT0_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FBPROT0_BPCN0_Pos (0UL) /*!< BPCN0 (Bit 0) */ + #define R_FACI_HP_FBPROT0_BPCN0_Msk (0x1UL) /*!< BPCN0 (Bitfield-Mask: 0x01) */ +/* ======================================================== FBPROT1 ======================================================== */ + #define R_FACI_HP_FBPROT1_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FBPROT1_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FBPROT1_BPCN1_Pos (0UL) /*!< BPCN1 (Bit 0) */ + #define R_FACI_HP_FBPROT1_BPCN1_Msk (0x1UL) /*!< BPCN1 (Bitfield-Mask: 0x01) */ /* ======================================================== FSTATR ========================================================= */ - #define R_FACI_HP_FSTATR_EBFULL_Pos (18UL) /*!< EBFULL (Bit 18) */ - #define R_FACI_HP_FSTATR_EBFULL_Msk (0x40000UL) /*!< EBFULL (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_OTPDTCT_Pos (17UL) /*!< OTPDTCT (Bit 17) */ - #define R_FACI_HP_FSTATR_OTPDTCT_Msk (0x20000UL) /*!< OTPDTCT (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_OTPCRCT_Pos (16UL) /*!< OTPCRCT (Bit 16) */ - #define R_FACI_HP_FSTATR_OTPCRCT_Msk (0x10000UL) /*!< OTPCRCT (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_FRDY_Pos (15UL) /*!< FRDY (Bit 15) */ - #define R_FACI_HP_FSTATR_FRDY_Msk (0x8000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_ILGLERR_Pos (14UL) /*!< ILGLERR (Bit 14) */ - #define R_FACI_HP_FSTATR_ILGLERR_Msk (0x4000UL) /*!< ILGLERR (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_ERSERR_Pos (13UL) /*!< ERSERR (Bit 13) */ - #define R_FACI_HP_FSTATR_ERSERR_Msk (0x2000UL) /*!< ERSERR (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_PRGERR_Pos (12UL) /*!< PRGERR (Bit 12) */ - #define R_FACI_HP_FSTATR_PRGERR_Msk (0x1000UL) /*!< PRGERR (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_SUSRDY_Pos (11UL) /*!< SUSRDY (Bit 11) */ - #define R_FACI_HP_FSTATR_SUSRDY_Msk (0x800UL) /*!< SUSRDY (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_DBFULL_Pos (10UL) /*!< DBFULL (Bit 10) */ - #define R_FACI_HP_FSTATR_DBFULL_Msk (0x400UL) /*!< DBFULL (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_ERSSPD_Pos (9UL) /*!< ERSSPD (Bit 9) */ - #define R_FACI_HP_FSTATR_ERSSPD_Msk (0x200UL) /*!< ERSSPD (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_PRGSPD_Pos (8UL) /*!< PRGSPD (Bit 8) */ - #define R_FACI_HP_FSTATR_PRGSPD_Msk (0x100UL) /*!< PRGSPD (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_FCUERR_Pos (7UL) /*!< FCUERR (Bit 7) */ - #define R_FACI_HP_FSTATR_FCUERR_Msk (0x80UL) /*!< FCUERR (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_FHVEERR_Pos (6UL) /*!< FHVEERR (Bit 6) */ - #define R_FACI_HP_FSTATR_FHVEERR_Msk (0x40UL) /*!< FHVEERR (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_CFGDTCT_Pos (5UL) /*!< CFGDTCT (Bit 5) */ - #define R_FACI_HP_FSTATR_CFGDTCT_Msk (0x20UL) /*!< CFGDTCT (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_CFGCRCT_Pos (4UL) /*!< CFGCRCT (Bit 4) */ - #define R_FACI_HP_FSTATR_CFGCRCT_Msk (0x10UL) /*!< CFGCRCT (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_TBLDTCT_Pos (3UL) /*!< TBLDTCT (Bit 3) */ - #define R_FACI_HP_FSTATR_TBLDTCT_Msk (0x8UL) /*!< TBLDTCT (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FSTATR_TBLCRCT_Pos (2UL) /*!< TBLCRCT (Bit 2) */ - #define R_FACI_HP_FSTATR_TBLCRCT_Msk (0x4UL) /*!< TBLCRCT (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ILGCOMERR_Pos (23UL) /*!< ILGCOMERR (Bit 23) */ + #define R_FACI_HP_FSTATR_ILGCOMERR_Msk (0x800000UL) /*!< ILGCOMERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_FESETERR_Pos (22UL) /*!< FESETERR (Bit 22) */ + #define R_FACI_HP_FSTATR_FESETERR_Msk (0x400000UL) /*!< FESETERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_SECERR_Pos (21UL) /*!< SECERR (Bit 21) */ + #define R_FACI_HP_FSTATR_SECERR_Msk (0x200000UL) /*!< SECERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_OTERR_Pos (20UL) /*!< OTERR (Bit 20) */ + #define R_FACI_HP_FSTATR_OTERR_Msk (0x100000UL) /*!< OTERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_FRDY_Pos (15UL) /*!< FRDY (Bit 15) */ + #define R_FACI_HP_FSTATR_FRDY_Msk (0x8000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ILGLERR_Pos (14UL) /*!< ILGLERR (Bit 14) */ + #define R_FACI_HP_FSTATR_ILGLERR_Msk (0x4000UL) /*!< ILGLERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ERSERR_Pos (13UL) /*!< ERSERR (Bit 13) */ + #define R_FACI_HP_FSTATR_ERSERR_Msk (0x2000UL) /*!< ERSERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_PRGERR_Pos (12UL) /*!< PRGERR (Bit 12) */ + #define R_FACI_HP_FSTATR_PRGERR_Msk (0x1000UL) /*!< PRGERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_SUSRDY_Pos (11UL) /*!< SUSRDY (Bit 11) */ + #define R_FACI_HP_FSTATR_SUSRDY_Msk (0x800UL) /*!< SUSRDY (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_DBFULL_Pos (10UL) /*!< DBFULL (Bit 10) */ + #define R_FACI_HP_FSTATR_DBFULL_Msk (0x400UL) /*!< DBFULL (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ERSSPD_Pos (9UL) /*!< ERSSPD (Bit 9) */ + #define R_FACI_HP_FSTATR_ERSSPD_Msk (0x200UL) /*!< ERSSPD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_PRGSPD_Pos (8UL) /*!< PRGSPD (Bit 8) */ + #define R_FACI_HP_FSTATR_PRGSPD_Msk (0x100UL) /*!< PRGSPD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_FLWEERR_Pos (6UL) /*!< FLWEERR (Bit 6) */ + #define R_FACI_HP_FSTATR_FLWEERR_Msk (0x40UL) /*!< FLWEERR (Bitfield-Mask: 0x01) */ /* ======================================================== FENTRYR ======================================================== */ - #define R_FACI_HP_FENTRYR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ - #define R_FACI_HP_FENTRYR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ - #define R_FACI_HP_FENTRYR_FENTRYD_Pos (7UL) /*!< FENTRYD (Bit 7) */ - #define R_FACI_HP_FENTRYR_FENTRYD_Msk (0x80UL) /*!< FENTRYD (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FENTRYR_FENTRYC_Pos (0UL) /*!< FENTRYC (Bit 0) */ - #define R_FACI_HP_FENTRYR_FENTRYC_Msk (0x1UL) /*!< FENTRYC (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FENTRYR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FENTRYR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FENTRYR_FENTRYD_Pos (7UL) /*!< FENTRYD (Bit 7) */ + #define R_FACI_HP_FENTRYR_FENTRYD_Msk (0x80UL) /*!< FENTRYD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FENTRYR_FENTRYC_Pos (0UL) /*!< FENTRYC (Bit 0) */ + #define R_FACI_HP_FENTRYR_FENTRYC_Msk (0x1UL) /*!< FENTRYC (Bitfield-Mask: 0x01) */ /* ======================================================= FSUINITR ======================================================== */ - #define R_FACI_HP_FSUINITR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ - #define R_FACI_HP_FSUINITR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ - #define R_FACI_HP_FSUINITR_SUINIT_Pos (0UL) /*!< SUINIT (Bit 0) */ - #define R_FACI_HP_FSUINITR_SUINIT_Msk (0x1UL) /*!< SUINIT (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSUINITR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FSUINITR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FSUINITR_SUINIT_Pos (0UL) /*!< SUINIT (Bit 0) */ + #define R_FACI_HP_FSUINITR_SUINIT_Msk (0x1UL) /*!< SUINIT (Bitfield-Mask: 0x01) */ /* ========================================================= FCMDR ========================================================= */ - #define R_FACI_HP_FCMDR_CMDR_Pos (8UL) /*!< CMDR (Bit 8) */ - #define R_FACI_HP_FCMDR_CMDR_Msk (0xff00UL) /*!< CMDR (Bitfield-Mask: 0xff) */ - #define R_FACI_HP_FCMDR_PCMDR_Pos (0UL) /*!< PCMDR (Bit 0) */ - #define R_FACI_HP_FCMDR_PCMDR_Msk (0xffUL) /*!< PCMDR (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FCMDR_CMDR_Pos (8UL) /*!< CMDR (Bit 8) */ + #define R_FACI_HP_FCMDR_CMDR_Msk (0xff00UL) /*!< CMDR (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FCMDR_PCMDR_Pos (0UL) /*!< PCMDR (Bit 0) */ + #define R_FACI_HP_FCMDR_PCMDR_Msk (0xffUL) /*!< PCMDR (Bitfield-Mask: 0xff) */ /* ======================================================== FPESTAT ======================================================== */ - #define R_FACI_HP_FPESTAT_PEERRST_Pos (0UL) /*!< PEERRST (Bit 0) */ - #define R_FACI_HP_FPESTAT_PEERRST_Msk (0xffUL) /*!< PEERRST (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FPESTAT_PEERRST_Pos (0UL) /*!< PEERRST (Bit 0) */ + #define R_FACI_HP_FPESTAT_PEERRST_Msk (0xffUL) /*!< PEERRST (Bitfield-Mask: 0xff) */ /* ======================================================== FBCCNT ========================================================= */ - #define R_FACI_HP_FBCCNT_BCDIR_Pos (0UL) /*!< BCDIR (Bit 0) */ - #define R_FACI_HP_FBCCNT_BCDIR_Msk (0x1UL) /*!< BCDIR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FBCCNT_BCDIR_Pos (0UL) /*!< BCDIR (Bit 0) */ + #define R_FACI_HP_FBCCNT_BCDIR_Msk (0x1UL) /*!< BCDIR (Bitfield-Mask: 0x01) */ /* ======================================================== FBCSTAT ======================================================== */ - #define R_FACI_HP_FBCSTAT_BCST_Pos (0UL) /*!< BCST (Bit 0) */ - #define R_FACI_HP_FBCSTAT_BCST_Msk (0x1UL) /*!< BCST (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FBCSTAT_BCST_Pos (0UL) /*!< BCST (Bit 0) */ + #define R_FACI_HP_FBCSTAT_BCST_Msk (0x1UL) /*!< BCST (Bitfield-Mask: 0x01) */ /* ======================================================== FPSADDR ======================================================== */ - #define R_FACI_HP_FPSADDR_PSADR_Pos (0UL) /*!< PSADR (Bit 0) */ - #define R_FACI_HP_FPSADDR_PSADR_Msk (0x7ffffUL) /*!< PSADR (Bitfield-Mask: 0x7ffff) */ + #define R_FACI_HP_FPSADDR_PSADR_Pos (0UL) /*!< PSADR (Bit 0) */ + #define R_FACI_HP_FPSADDR_PSADR_Msk (0x7ffffUL) /*!< PSADR (Bitfield-Mask: 0x7ffff) */ /* ======================================================== FAWMON ========================================================= */ - #define R_FACI_HP_FAWMON_BTFLG_Pos (31UL) /*!< BTFLG (Bit 31) */ - #define R_FACI_HP_FAWMON_BTFLG_Msk (0x80000000UL) /*!< BTFLG (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FAWMON_FAWE_Pos (16UL) /*!< FAWE (Bit 16) */ - #define R_FACI_HP_FAWMON_FAWE_Msk (0x7ff0000UL) /*!< FAWE (Bitfield-Mask: 0x7ff) */ - #define R_FACI_HP_FAWMON_FSPR_Pos (15UL) /*!< FSPR (Bit 15) */ - #define R_FACI_HP_FAWMON_FSPR_Msk (0x8000UL) /*!< FSPR (Bitfield-Mask: 0x01) */ - #define R_FACI_HP_FAWMON_FAWS_Pos (0UL) /*!< FAWS (Bit 0) */ - #define R_FACI_HP_FAWMON_FAWS_Msk (0x7ffUL) /*!< FAWS (Bitfield-Mask: 0x7ff) */ + #define R_FACI_HP_FAWMON_BTFLG_Pos (31UL) /*!< BTFLG (Bit 31) */ + #define R_FACI_HP_FAWMON_BTFLG_Msk (0x80000000UL) /*!< BTFLG (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAWMON_FAWE_Pos (16UL) /*!< FAWE (Bit 16) */ + #define R_FACI_HP_FAWMON_FAWE_Msk (0x7ff0000UL) /*!< FAWE (Bitfield-Mask: 0x7ff) */ + #define R_FACI_HP_FAWMON_FSPR_Pos (15UL) /*!< FSPR (Bit 15) */ + #define R_FACI_HP_FAWMON_FSPR_Msk (0x8000UL) /*!< FSPR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAWMON_FAWS_Pos (0UL) /*!< FAWS (Bit 0) */ + #define R_FACI_HP_FAWMON_FAWS_Msk (0x7ffUL) /*!< FAWS (Bitfield-Mask: 0x7ff) */ /* ========================================================= FCPSR ========================================================= */ - #define R_FACI_HP_FCPSR_ESUSPMD_Pos (0UL) /*!< ESUSPMD (Bit 0) */ - #define R_FACI_HP_FCPSR_ESUSPMD_Msk (0x1UL) /*!< ESUSPMD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FCPSR_ESUSPMD_Pos (0UL) /*!< ESUSPMD (Bit 0) */ + #define R_FACI_HP_FCPSR_ESUSPMD_Msk (0x1UL) /*!< ESUSPMD (Bitfield-Mask: 0x01) */ /* ======================================================== FPCKAR ========================================================= */ - #define R_FACI_HP_FPCKAR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ - #define R_FACI_HP_FPCKAR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ - #define R_FACI_HP_FPCKAR_PCKA_Pos (0UL) /*!< PCKA (Bit 0) */ - #define R_FACI_HP_FPCKAR_PCKA_Msk (0xffUL) /*!< PCKA (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FPCKAR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FPCKAR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FPCKAR_PCKA_Pos (0UL) /*!< PCKA (Bit 0) */ + #define R_FACI_HP_FPCKAR_PCKA_Msk (0xffUL) /*!< PCKA (Bitfield-Mask: 0xff) */ /* ======================================================== FSUACR ========================================================= */ - #define R_FACI_HP_FSUACR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ - #define R_FACI_HP_FSUACR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ - #define R_FACI_HP_FSUACR_SAS_Pos (0UL) /*!< SAS (Bit 0) */ - #define R_FACI_HP_FSUACR_SAS_Msk (0x3UL) /*!< SAS (Bitfield-Mask: 0x03) */ + #define R_FACI_HP_FSUACR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FSUACR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FSUACR_SAS_Pos (0UL) /*!< SAS (Bit 0) */ + #define R_FACI_HP_FSUACR_SAS_Msk (0x3UL) /*!< SAS (Bitfield-Mask: 0x03) */ /* =========================================================================================================================== */ /* ================ R_FACI_LP ================ */ @@ -22798,14 +25357,19 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* =========================================================================================================================== */ /* ======================================================== FCACHEE ======================================================== */ - #define R_FCACHE_FCACHEE_FCACHEEN_Pos (0UL) /*!< FCACHEEN (Bit 0) */ - #define R_FCACHE_FCACHEE_FCACHEEN_Msk (0x1UL) /*!< FCACHEEN (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FCACHEE_FCACHEEN_Pos (0UL) /*!< FCACHEEN (Bit 0) */ + #define R_FCACHE_FCACHEE_FCACHEEN_Msk (0x1UL) /*!< FCACHEEN (Bitfield-Mask: 0x01) */ /* ======================================================= FCACHEIV ======================================================== */ - #define R_FCACHE_FCACHEIV_FCACHEIV_Pos (0UL) /*!< FCACHEIV (Bit 0) */ - #define R_FCACHE_FCACHEIV_FCACHEIV_Msk (0x1UL) /*!< FCACHEIV (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FCACHEIV_FCACHEIV_Pos (0UL) /*!< FCACHEIV (Bit 0) */ + #define R_FCACHE_FCACHEIV_FCACHEIV_Msk (0x1UL) /*!< FCACHEIV (Bitfield-Mask: 0x01) */ /* ========================================================= FLWT ========================================================== */ - #define R_FCACHE_FLWT_FLWT_Pos (0UL) /*!< FLWT (Bit 0) */ - #define R_FCACHE_FLWT_FLWT_Msk (0x7UL) /*!< FLWT (Bitfield-Mask: 0x07) */ + #define R_FCACHE_FLWT_FLWT_Pos (0UL) /*!< FLWT (Bit 0) */ + #define R_FCACHE_FLWT_FLWT_Msk (0x7UL) /*!< FLWT (Bitfield-Mask: 0x07) */ +/* ========================================================= FSAR ========================================================== */ + #define R_FCACHE_FSAR_FLWTSA_Pos (0UL) /*!< FLWTSA (Bit 0) */ + #define R_FCACHE_FSAR_FLWTSA_Msk (0x1UL) /*!< FLWTSA (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FSAR_FCKMHZSA_Pos (8UL) /*!< FCKMHZSA (Bit 8) */ + #define R_FCACHE_FSAR_FCKMHZSA_Msk (0x100UL) /*!< FCKMHZSA (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_GLCDC ================ */ @@ -22857,6 +25421,14 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_GPT0_GTWP_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ #define R_GPT0_GTWP_WP_Pos (0UL) /*!< WP (Bit 0) */ #define R_GPT0_GTWP_WP_Msk (0x1UL) /*!< WP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_STRWP_Pos (1UL) /*!< STRWP (Bit 1) */ + #define R_GPT0_GTWP_STRWP_Msk (0x2UL) /*!< STRWP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_STPWP_Pos (2UL) /*!< STPWP (Bit 2) */ + #define R_GPT0_GTWP_STPWP_Msk (0x4UL) /*!< STPWP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_CLRWP_Pos (3UL) /*!< CLRWP (Bit 3) */ + #define R_GPT0_GTWP_CLRWP_Msk (0x8UL) /*!< CLRWP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_CMNWP_Pos (4UL) /*!< CMNWP (Bit 4) */ + #define R_GPT0_GTWP_CMNWP_Msk (0x10UL) /*!< CMNWP (Bitfield-Mask: 0x01) */ /* ========================================================= GTSTR ========================================================= */ #define R_GPT0_GTSTR_CSTRT_Pos (0UL) /*!< CSTRT (Bit 0) */ #define R_GPT0_GTSTR_CSTRT_Msk (0x1UL) /*!< CSTRT (Bitfield-Mask: 0x01) */ @@ -23034,8 +25606,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_GPT0_GTICBSR_BSGTRGR_Pos (0UL) /*!< BSGTRGR (Bit 0) */ #define R_GPT0_GTICBSR_BSGTRGR_Msk (0x1UL) /*!< BSGTRGR (Bitfield-Mask: 0x01) */ /* ========================================================= GTCR ========================================================== */ - #define R_GPT0_GTCR_TPCS_Pos (24UL) /*!< TPCS (Bit 24) */ - #define R_GPT0_GTCR_TPCS_Msk (0x7000000UL) /*!< TPCS (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTCR_TPCS_Pos (23UL) /*!< TPCS (Bit 23) */ + #define R_GPT0_GTCR_TPCS_Msk (0x7800000UL) /*!< TPCS (Bitfield-Mask: 0x0f) */ #define R_GPT0_GTCR_MD_Pos (16UL) /*!< MD (Bit 16) */ #define R_GPT0_GTCR_MD_Msk (0x70000UL) /*!< MD (Bitfield-Mask: 0x07) */ #define R_GPT0_GTCR_CST_Pos (0UL) /*!< CST (Bit 0) */ @@ -23095,6 +25667,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_GPT0_GTINTAD_GRPDTE_Msk (0x10000000UL) /*!< GRPDTE (Bitfield-Mask: 0x01) */ #define R_GPT0_GTINTAD_GRP_Pos (24UL) /*!< GRP (Bit 24) */ #define R_GPT0_GTINTAD_GRP_Msk (0x3000000UL) /*!< GRP (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTINTAD_GTINTPC_Pos (31UL) /*!< GTINTPC (Bit 31) */ + #define R_GPT0_GTINTAD_GTINTPC_Msk (0x80000000UL) /*!< GTINTPC (Bitfield-Mask: 0x01) */ /* ========================================================= GTST ========================================================== */ #define R_GPT0_GTST_OABLF_Pos (30UL) /*!< OABLF (Bit 30) */ #define R_GPT0_GTST_OABLF_Msk (0x40000000UL) /*!< OABLF (Bitfield-Mask: 0x01) */ @@ -23132,6 +25706,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_GPT0_GTST_TCFB_Msk (0x2UL) /*!< TCFB (Bitfield-Mask: 0x01) */ #define R_GPT0_GTST_TCFA_Pos (0UL) /*!< TCFA (Bit 0) */ #define R_GPT0_GTST_TCFA_Msk (0x1UL) /*!< TCFA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_PCF_Pos (31UL) /*!< PCF (Bit 31) */ + #define R_GPT0_GTST_PCF_Msk (0x80000000UL) /*!< PCF (Bitfield-Mask: 0x01) */ /* ========================================================= GTBER ========================================================= */ #define R_GPT0_GTBER_ADTDB_Pos (30UL) /*!< ADTDB (Bit 30) */ #define R_GPT0_GTBER_ADTDB_Msk (0x40000000UL) /*!< ADTDB (Bitfield-Mask: 0x01) */ @@ -23238,6 +25814,56 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ======================================================== GTSOTR ========================================================= */ #define R_GPT0_GTSOTR_SOTR_Pos (0UL) /*!< SOTR (Bit 0) */ #define R_GPT0_GTSOTR_SOTR_Msk (0x1UL) /*!< SOTR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTICLF ========================================================= */ + #define R_GPT0_GTICLF_ICLFA_Pos (0UL) /*!< ICLFA (Bit 0) */ + #define R_GPT0_GTICLF_ICLFA_Msk (0x7UL) /*!< ICLFA (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTICLF_ICLFSELC_Pos (4UL) /*!< ICLFSELC (Bit 4) */ + #define R_GPT0_GTICLF_ICLFSELC_Msk (0x3f0UL) /*!< ICLFSELC (Bitfield-Mask: 0x3f) */ + #define R_GPT0_GTICLF_ICLFB_Pos (16UL) /*!< ICLFB (Bit 16) */ + #define R_GPT0_GTICLF_ICLFB_Msk (0x70000UL) /*!< ICLFB (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTICLF_ICLFSELD_Pos (20UL) /*!< ICLFSELD (Bit 20) */ + #define R_GPT0_GTICLF_ICLFSELD_Msk (0x3f00000UL) /*!< ICLFSELD (Bitfield-Mask: 0x3f) */ +/* ========================================================= GTPC ========================================================== */ + #define R_GPT0_GTPC_PCEN_Pos (0UL) /*!< PCEN (Bit 0) */ + #define R_GPT0_GTPC_PCEN_Msk (0x1UL) /*!< PCEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPC_ASTP_Pos (8UL) /*!< ASTP (Bit 8) */ + #define R_GPT0_GTPC_ASTP_Msk (0x100UL) /*!< ASTP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPC_PCNT_Pos (16UL) /*!< PCNT (Bit 16) */ + #define R_GPT0_GTPC_PCNT_Msk (0xfff0000UL) /*!< PCNT (Bitfield-Mask: 0xfff) */ +/* ======================================================== GTSECSR ======================================================== */ + #define R_GPT0_GTSECSR_SECSEL0_Pos (0UL) /*!< SECSEL0 (Bit 0) */ + #define R_GPT0_GTSECSR_SECSEL0_Msk (0x1UL) /*!< SECSEL0 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL1_Pos (1UL) /*!< SECSEL1 (Bit 1) */ + #define R_GPT0_GTSECSR_SECSEL1_Msk (0x2UL) /*!< SECSEL1 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL2_Pos (2UL) /*!< SECSEL2 (Bit 2) */ + #define R_GPT0_GTSECSR_SECSEL2_Msk (0x4UL) /*!< SECSEL2 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL3_Pos (3UL) /*!< SECSEL3 (Bit 3) */ + #define R_GPT0_GTSECSR_SECSEL3_Msk (0x8UL) /*!< SECSEL3 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL4_Pos (4UL) /*!< SECSEL4 (Bit 4) */ + #define R_GPT0_GTSECSR_SECSEL4_Msk (0x10UL) /*!< SECSEL4 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL5_Pos (5UL) /*!< SECSEL5 (Bit 5) */ + #define R_GPT0_GTSECSR_SECSEL5_Msk (0x20UL) /*!< SECSEL5 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL6_Pos (6UL) /*!< SECSEL6 (Bit 6) */ + #define R_GPT0_GTSECSR_SECSEL6_Msk (0x40UL) /*!< SECSEL6 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL7_Pos (7UL) /*!< SECSEL7 (Bit 7) */ + #define R_GPT0_GTSECSR_SECSEL7_Msk (0x80UL) /*!< SECSEL7 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL8_Pos (8UL) /*!< SECSEL8 (Bit 8) */ + #define R_GPT0_GTSECSR_SECSEL8_Msk (0x100UL) /*!< SECSEL8 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL9_Pos (9UL) /*!< SECSEL9 (Bit 9) */ + #define R_GPT0_GTSECSR_SECSEL9_Msk (0x200UL) /*!< SECSEL9 (Bitfield-Mask: 0x01) */ +/* ======================================================== GTSECR ========================================================= */ + #define R_GPT0_GTSECR_SBDCE_Pos (0UL) /*!< SBDCE (Bit 0) */ + #define R_GPT0_GTSECR_SBDCE_Msk (0x1UL) /*!< SBDCE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDPE_Pos (1UL) /*!< SBDPE (Bit 1) */ + #define R_GPT0_GTSECR_SBDPE_Msk (0x2UL) /*!< SBDPE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDCD_Pos (8UL) /*!< SBDCD (Bit 8) */ + #define R_GPT0_GTSECR_SBDCD_Msk (0x100UL) /*!< SBDCD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDPD_Pos (9UL) /*!< SBDPD (Bit 9) */ + #define R_GPT0_GTSECR_SBDPD_Msk (0x200UL) /*!< SBDPD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SPCE_Pos (16UL) /*!< SPCE (Bit 16) */ + #define R_GPT0_GTSECR_SPCE_Msk (0x10000UL) /*!< SPCE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SPCD_Pos (24UL) /*!< SPCD (Bit 24) */ + #define R_GPT0_GTSECR_SPCD_Msk (0x1000000UL) /*!< SPCD (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_GPT_ODC ================ */ @@ -23364,6 +25990,10 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ICU_NMISR_WDTST_Msk (0x2UL) /*!< WDTST (Bitfield-Mask: 0x01) */ #define R_ICU_NMISR_IWDTST_Pos (0UL) /*!< IWDTST (Bit 0) */ #define R_ICU_NMISR_IWDTST_Msk (0x1UL) /*!< IWDTST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_TZFST_Pos (13UL) /*!< TZFST (Bit 13) */ + #define R_ICU_NMISR_TZFST_Msk (0x2000UL) /*!< TZFST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_CPEST_Pos (15UL) /*!< CPEST (Bit 15) */ + #define R_ICU_NMISR_CPEST_Msk (0x8000UL) /*!< CPEST (Bitfield-Mask: 0x01) */ /* ========================================================= NMIER ========================================================= */ #define R_ICU_NMIER_SPEEN_Pos (12UL) /*!< SPEEN (Bit 12) */ #define R_ICU_NMIER_SPEEN_Msk (0x1000UL) /*!< SPEEN (Bitfield-Mask: 0x01) */ @@ -23389,6 +26019,10 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ICU_NMIER_WDTEN_Msk (0x2UL) /*!< WDTEN (Bitfield-Mask: 0x01) */ #define R_ICU_NMIER_IWDTEN_Pos (0UL) /*!< IWDTEN (Bit 0) */ #define R_ICU_NMIER_IWDTEN_Msk (0x1UL) /*!< IWDTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_TZFEN_Pos (13UL) /*!< TZFEN (Bit 13) */ + #define R_ICU_NMIER_TZFEN_Msk (0x2000UL) /*!< TZFEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_CPEEN_Pos (15UL) /*!< CPEEN (Bit 15) */ + #define R_ICU_NMIER_CPEEN_Msk (0x8000UL) /*!< CPEEN (Bitfield-Mask: 0x01) */ /* ======================================================== NMICLR ========================================================= */ #define R_ICU_NMICLR_SPECLR_Pos (12UL) /*!< SPECLR (Bit 12) */ #define R_ICU_NMICLR_SPECLR_Msk (0x1000UL) /*!< SPECLR (Bitfield-Mask: 0x01) */ @@ -23414,6 +26048,10 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ICU_NMICLR_WDTCLR_Msk (0x2UL) /*!< WDTCLR (Bitfield-Mask: 0x01) */ #define R_ICU_NMICLR_IWDTCLR_Pos (0UL) /*!< IWDTCLR (Bit 0) */ #define R_ICU_NMICLR_IWDTCLR_Msk (0x1UL) /*!< IWDTCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_TZFCLR_Pos (13UL) /*!< TZFCLR (Bit 13) */ + #define R_ICU_NMICLR_TZFCLR_Msk (0x2000UL) /*!< TZFCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_CPECLR_Pos (15UL) /*!< CPECLR (Bit 15) */ + #define R_ICU_NMICLR_CPECLR_Msk (0x8000UL) /*!< CPECLR (Bitfield-Mask: 0x01) */ /* ========================================================= NMICR ========================================================= */ #define R_ICU_NMICR_NFLTEN_Pos (7UL) /*!< NFLTEN (Bit 7) */ #define R_ICU_NMICR_NFLTEN_Msk (0x80UL) /*!< NFLTEN (Bitfield-Mask: 0x01) */ @@ -23469,6 +26107,13 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_ICU_WUPEN_IWDTWUPEN_Msk (0x10000UL) /*!< IWDTWUPEN (Bitfield-Mask: 0x01) */ #define R_ICU_WUPEN_IRQWUPEN_Pos (0UL) /*!< IRQWUPEN (Bit 0) */ #define R_ICU_WUPEN_IRQWUPEN_Msk (0x1UL) /*!< IRQWUPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== WUPEN1 ========================================================= */ + #define R_ICU_WUPEN1_AGT3UDWUPEN_Pos (0UL) /*!< AGT3UDWUPEN (Bit 0) */ + #define R_ICU_WUPEN1_AGT3UDWUPEN_Msk (0x1UL) /*!< AGT3UDWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN1_AGT3CAWUPEN_Pos (1UL) /*!< AGT3CAWUPEN (Bit 1) */ + #define R_ICU_WUPEN1_AGT3CAWUPEN_Msk (0x2UL) /*!< AGT3CAWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN1_AGT3CBWUPEN_Pos (2UL) /*!< AGT3CBWUPEN (Bit 2) */ + #define R_ICU_WUPEN1_AGT3CBWUPEN_Msk (0x4UL) /*!< AGT3CBWUPEN (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_IIC0 ================ */ @@ -23997,6 +26642,20 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_MSTP_MSTPCRC_MSTPC14_Msk (0x4000UL) /*!< MSTPC14 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRC_MSTPC13_Pos (13UL) /*!< MSTPC13 (Bit 13) */ #define R_MSTP_MSTPCRC_MSTPC13_Msk (0x2000UL) /*!< MSTPC13 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC12_Pos (12UL) /*!< MSTPC12 (Bit 12) */ + #define R_MSTP_MSTPCRC_MSTPC12_Msk (0x1000UL) /*!< MSTPC12 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC11_Pos (11UL) /*!< MSTPC11 (Bit 11) */ + #define R_MSTP_MSTPCRC_MSTPC11_Msk (0x800UL) /*!< MSTPC11 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC9_Pos (9UL) /*!< MSTPC9 (Bit 9) */ + #define R_MSTP_MSTPCRC_MSTPC9_Msk (0x200UL) /*!< MSTPC9 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC8_Pos (8UL) /*!< MSTPC8 (Bit 8) */ + #define R_MSTP_MSTPCRC_MSTPC8_Msk (0x100UL) /*!< MSTPC8 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC7_Pos (7UL) /*!< MSTPC7 (Bit 7) */ + #define R_MSTP_MSTPCRC_MSTPC7_Msk (0x80UL) /*!< MSTPC7 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC6_Pos (6UL) /*!< MSTPC6 (Bit 6) */ + #define R_MSTP_MSTPCRC_MSTPC6_Msk (0x40UL) /*!< MSTPC6 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRC_MSTPC5_Pos (5UL) /*!< MSTPC5 (Bit 5) */ + #define R_MSTP_MSTPCRC_MSTPC5_Msk (0x20UL) /*!< MSTPC5 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRC_MSTPC4_Pos (4UL) /*!< MSTPC4 (Bit 4) */ #define R_MSTP_MSTPCRC_MSTPC4_Msk (0x10UL) /*!< MSTPC4 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRC_MSTPC3_Pos (3UL) /*!< MSTPC3 (Bit 3) */ @@ -24014,6 +26673,18 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_MSTP_MSTPCRD_MSTPD29_Msk (0x20000000UL) /*!< MSTPD29 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD28_Pos (28UL) /*!< MSTPD28 (Bit 28) */ #define R_MSTP_MSTPCRD_MSTPD28_Msk (0x10000000UL) /*!< MSTPD28 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD27_Pos (27UL) /*!< MSTPD27 (Bit 27) */ + #define R_MSTP_MSTPCRD_MSTPD27_Msk (0x8000000UL) /*!< MSTPD27 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD26_Pos (26UL) /*!< MSTPD26 (Bit 26) */ + #define R_MSTP_MSTPCRD_MSTPD26_Msk (0x4000000UL) /*!< MSTPD26 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD25_Pos (25UL) /*!< MSTPD25 (Bit 25) */ + #define R_MSTP_MSTPCRD_MSTPD25_Msk (0x2000000UL) /*!< MSTPD25 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD24_Pos (24UL) /*!< MSTPD24 (Bit 24) */ + #define R_MSTP_MSTPCRD_MSTPD24_Msk (0x1000000UL) /*!< MSTPD24 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD23_Pos (23UL) /*!< MSTPD23 (Bit 23) */ + #define R_MSTP_MSTPCRD_MSTPD23_Msk (0x800000UL) /*!< MSTPD23 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD22_Pos (22UL) /*!< MSTPD22 (Bit 22) */ + #define R_MSTP_MSTPCRD_MSTPD22_Msk (0x400000UL) /*!< MSTPD22 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD20_Pos (20UL) /*!< MSTPD20 (Bit 20) */ #define R_MSTP_MSTPCRD_MSTPD20_Msk (0x100000UL) /*!< MSTPD20 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD19_Pos (19UL) /*!< MSTPD19 (Bit 19) */ @@ -24022,8 +26693,16 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_MSTP_MSTPCRD_MSTPD17_Msk (0x20000UL) /*!< MSTPD17 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD16_Pos (16UL) /*!< MSTPD16 (Bit 16) */ #define R_MSTP_MSTPCRD_MSTPD16_Msk (0x10000UL) /*!< MSTPD16 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD15_Pos (15UL) /*!< MSTPD15 (Bit 15) */ + #define R_MSTP_MSTPCRD_MSTPD15_Msk (0x8000UL) /*!< MSTPD15 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD14_Pos (14UL) /*!< MSTPD14 (Bit 14) */ #define R_MSTP_MSTPCRD_MSTPD14_Msk (0x4000UL) /*!< MSTPD14 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD13_Pos (13UL) /*!< MSTPD13 (Bit 13) */ + #define R_MSTP_MSTPCRD_MSTPD13_Msk (0x2000UL) /*!< MSTPD13 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD12_Pos (12UL) /*!< MSTPD12 (Bit 12) */ + #define R_MSTP_MSTPCRD_MSTPD12_Msk (0x1000UL) /*!< MSTPD12 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD11_Pos (11UL) /*!< MSTPD11 (Bit 11) */ + #define R_MSTP_MSTPCRD_MSTPD11_Msk (0x800UL) /*!< MSTPD11 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD6_Pos (6UL) /*!< MSTPD6 (Bit 6) */ #define R_MSTP_MSTPCRD_MSTPD6_Msk (0x40UL) /*!< MSTPD6 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD5_Pos (5UL) /*!< MSTPD5 (Bit 5) */ @@ -24032,6 +26711,35 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_MSTP_MSTPCRD_MSTPD3_Msk (0x8UL) /*!< MSTPD3 (Bitfield-Mask: 0x01) */ #define R_MSTP_MSTPCRD_MSTPD2_Pos (2UL) /*!< MSTPD2 (Bit 2) */ #define R_MSTP_MSTPCRD_MSTPD2_Msk (0x4UL) /*!< MSTPD2 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD1_Pos (1UL) /*!< MSTPD1 (Bit 1) */ + #define R_MSTP_MSTPCRD_MSTPD1_Msk (0x2UL) /*!< MSTPD1 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRD_MSTPD0_Pos (0UL) /*!< MSTPD0 (Bit 0) */ + #define R_MSTP_MSTPCRD_MSTPD0_Msk (0x1UL) /*!< MSTPD0 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRE ======================================================== */ + #define R_MSTP_MSTPCRE_MSTPE14_Pos (14UL) /*!< MSTPE14 (Bit 14) */ + #define R_MSTP_MSTPCRE_MSTPE14_Msk (0x4000UL) /*!< MSTPE14 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE15_Pos (15UL) /*!< MSTPE15 (Bit 15) */ + #define R_MSTP_MSTPCRE_MSTPE15_Msk (0x8000UL) /*!< MSTPE15 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE22_Pos (22UL) /*!< MSTPE22 (Bit 22) */ + #define R_MSTP_MSTPCRE_MSTPE22_Msk (0x400000UL) /*!< MSTPE22 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE23_Pos (23UL) /*!< MSTPE23 (Bit 23) */ + #define R_MSTP_MSTPCRE_MSTPE23_Msk (0x800000UL) /*!< MSTPE23 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE24_Pos (24UL) /*!< MSTPE24 (Bit 24) */ + #define R_MSTP_MSTPCRE_MSTPE24_Msk (0x1000000UL) /*!< MSTPE24 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE25_Pos (25UL) /*!< MSTPE25 (Bit 25) */ + #define R_MSTP_MSTPCRE_MSTPE25_Msk (0x2000000UL) /*!< MSTPE25 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE26_Pos (26UL) /*!< MSTPE26 (Bit 26) */ + #define R_MSTP_MSTPCRE_MSTPE26_Msk (0x4000000UL) /*!< MSTPE26 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE27_Pos (27UL) /*!< MSTPE27 (Bit 27) */ + #define R_MSTP_MSTPCRE_MSTPE27_Msk (0x8000000UL) /*!< MSTPE27 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE28_Pos (28UL) /*!< MSTPE28 (Bit 28) */ + #define R_MSTP_MSTPCRE_MSTPE28_Msk (0x10000000UL) /*!< MSTPE28 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE29_Pos (29UL) /*!< MSTPE29 (Bit 29) */ + #define R_MSTP_MSTPCRE_MSTPE29_Msk (0x20000000UL) /*!< MSTPE29 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE30_Pos (30UL) /*!< MSTPE30 (Bit 30) */ + #define R_MSTP_MSTPCRE_MSTPE30_Msk (0x40000000UL) /*!< MSTPE30 (Bitfield-Mask: 0x01) */ + #define R_MSTP_MSTPCRE_MSTPE31_Pos (31UL) /*!< MSTPE31 (Bit 31) */ + #define R_MSTP_MSTPCRE_MSTPE31_Msk (0x80000000UL) /*!< MSTPE31 (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_OPAMP ================ */ @@ -24198,6 +26906,11 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_PMISC_PWPR_PFSWE_Msk (0x40UL) /*!< PFSWE (Bitfield-Mask: 0x01) */ #define R_PMISC_PWPR_B0WI_Pos (7UL) /*!< B0WI (Bit 7) */ #define R_PMISC_PWPR_B0WI_Msk (0x80UL) /*!< B0WI (Bitfield-Mask: 0x01) */ +/* ========================================================= PWPRS ========================================================= */ + #define R_PMISC_PWPRS_PFSWE_Pos (6UL) /*!< PFSWE (Bit 6) */ + #define R_PMISC_PWPRS_PFSWE_Msk (0x40UL) /*!< PFSWE (Bitfield-Mask: 0x01) */ + #define R_PMISC_PWPRS_B0WI_Pos (7UL) /*!< B0WI (Bit 7) */ + #define R_PMISC_PWPRS_B0WI_Msk (0x80UL) /*!< B0WI (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_QSPI ================ */ @@ -24757,6 +27470,151 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SCI0_SPTR_SPB2DT_Msk (0x2UL) /*!< SPB2DT (Bitfield-Mask: 0x01) */ #define R_SCI0_SPTR_RXDMON_Pos (0UL) /*!< RXDMON (Bit 0) */ #define R_SCI0_SPTR_RXDMON_Msk (0x1UL) /*!< RXDMON (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_RINV_Pos (4UL) /*!< RINV (Bit 4) */ + #define R_SCI0_SPTR_RINV_Msk (0x10UL) /*!< RINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_TINV_Pos (5UL) /*!< TINV (Bit 5) */ + #define R_SCI0_SPTR_TINV_Msk (0x20UL) /*!< TINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_ASEN_Pos (6UL) /*!< ASEN (Bit 6) */ + #define R_SCI0_SPTR_ASEN_Msk (0x40UL) /*!< ASEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_ATEN_Pos (7UL) /*!< ATEN (Bit 7) */ + #define R_SCI0_SPTR_ATEN_Msk (0x80UL) /*!< ATEN (Bitfield-Mask: 0x01) */ +/* ========================================================= ACTR ========================================================== */ + #define R_SCI0_ACTR_AST_Pos (0UL) /*!< AST (Bit 0) */ + #define R_SCI0_ACTR_AST_Msk (0x7UL) /*!< AST (Bitfield-Mask: 0x07) */ + #define R_SCI0_ACTR_AJD_Pos (3UL) /*!< AJD (Bit 3) */ + #define R_SCI0_ACTR_AJD_Msk (0x8UL) /*!< AJD (Bitfield-Mask: 0x01) */ + #define R_SCI0_ACTR_ATT_Pos (4UL) /*!< ATT (Bit 4) */ + #define R_SCI0_ACTR_ATT_Msk (0x70UL) /*!< ATT (Bitfield-Mask: 0x07) */ + #define R_SCI0_ACTR_AET_Pos (7UL) /*!< AET (Bit 7) */ + #define R_SCI0_ACTR_AET_Msk (0x80UL) /*!< AET (Bitfield-Mask: 0x01) */ +/* ========================================================= ESMER ========================================================= */ + #define R_SCI0_ESMER_ESME_Pos (0UL) /*!< ESME (Bit 0) */ + #define R_SCI0_ESMER_ESME_Msk (0x1UL) /*!< ESME (Bitfield-Mask: 0x01) */ +/* ========================================================== CR0 ========================================================== */ + #define R_SCI0_CR0_SFSF_Pos (1UL) /*!< SFSF (Bit 1) */ + #define R_SCI0_CR0_SFSF_Msk (0x2UL) /*!< SFSF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR0_RXDSF_Pos (2UL) /*!< RXDSF (Bit 2) */ + #define R_SCI0_CR0_RXDSF_Msk (0x4UL) /*!< RXDSF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR0_BRME_Pos (3UL) /*!< BRME (Bit 3) */ + #define R_SCI0_CR0_BRME_Msk (0x8UL) /*!< BRME (Bitfield-Mask: 0x01) */ +/* ========================================================== CR1 ========================================================== */ + #define R_SCI0_CR1_BFE_Pos (0UL) /*!< BFE (Bit 0) */ + #define R_SCI0_CR1_BFE_Msk (0x1UL) /*!< BFE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR1_CF0RE_Pos (1UL) /*!< CF0RE (Bit 1) */ + #define R_SCI0_CR1_CF0RE_Msk (0x2UL) /*!< CF0RE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR1_CF1DS_Pos (2UL) /*!< CF1DS (Bit 2) */ + #define R_SCI0_CR1_CF1DS_Msk (0xcUL) /*!< CF1DS (Bitfield-Mask: 0x03) */ + #define R_SCI0_CR1_PIBE_Pos (4UL) /*!< PIBE (Bit 4) */ + #define R_SCI0_CR1_PIBE_Msk (0x10UL) /*!< PIBE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR1_PIBS_Pos (5UL) /*!< PIBS (Bit 5) */ + #define R_SCI0_CR1_PIBS_Msk (0xe0UL) /*!< PIBS (Bitfield-Mask: 0x07) */ +/* ========================================================== CR2 ========================================================== */ + #define R_SCI0_CR2_DFCS_Pos (0UL) /*!< DFCS (Bit 0) */ + #define R_SCI0_CR2_DFCS_Msk (0x7UL) /*!< DFCS (Bitfield-Mask: 0x07) */ + #define R_SCI0_CR2_BCCS_Pos (4UL) /*!< BCCS (Bit 4) */ + #define R_SCI0_CR2_BCCS_Msk (0x30UL) /*!< BCCS (Bitfield-Mask: 0x03) */ + #define R_SCI0_CR2_RTS_Pos (6UL) /*!< RTS (Bit 6) */ + #define R_SCI0_CR2_RTS_Msk (0xc0UL) /*!< RTS (Bitfield-Mask: 0x03) */ +/* ========================================================== CR3 ========================================================== */ + #define R_SCI0_CR3_SDST_Pos (0UL) /*!< SDST (Bit 0) */ + #define R_SCI0_CR3_SDST_Msk (0x1UL) /*!< SDST (Bitfield-Mask: 0x01) */ +/* ========================================================== PCR ========================================================== */ + #define R_SCI0_PCR_TXDXPS_Pos (0UL) /*!< TXDXPS (Bit 0) */ + #define R_SCI0_PCR_TXDXPS_Msk (0x1UL) /*!< TXDXPS (Bitfield-Mask: 0x01) */ + #define R_SCI0_PCR_RXDXPS_Pos (1UL) /*!< RXDXPS (Bit 1) */ + #define R_SCI0_PCR_RXDXPS_Msk (0x2UL) /*!< RXDXPS (Bitfield-Mask: 0x01) */ + #define R_SCI0_PCR_SHARPS_Pos (4UL) /*!< SHARPS (Bit 4) */ + #define R_SCI0_PCR_SHARPS_Msk (0x10UL) /*!< SHARPS (Bitfield-Mask: 0x01) */ +/* ========================================================== ICR ========================================================== */ + #define R_SCI0_ICR_BFDIE_Pos (0UL) /*!< BFDIE (Bit 0) */ + #define R_SCI0_ICR_BFDIE_Msk (0x1UL) /*!< BFDIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_CF0MIE_Pos (1UL) /*!< CF0MIE (Bit 1) */ + #define R_SCI0_ICR_CF0MIE_Msk (0x2UL) /*!< CF0MIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_CF1MIE_Pos (2UL) /*!< CF1MIE (Bit 2) */ + #define R_SCI0_ICR_CF1MIE_Msk (0x4UL) /*!< CF1MIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_PIBDIE_Pos (3UL) /*!< PIBDIE (Bit 3) */ + #define R_SCI0_ICR_PIBDIE_Msk (0x8UL) /*!< PIBDIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_BCDIE_Pos (4UL) /*!< BCDIE (Bit 4) */ + #define R_SCI0_ICR_BCDIE_Msk (0x10UL) /*!< BCDIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_AEDIE_Pos (5UL) /*!< AEDIE (Bit 5) */ + #define R_SCI0_ICR_AEDIE_Msk (0x20UL) /*!< AEDIE (Bitfield-Mask: 0x01) */ +/* ========================================================== STR ========================================================== */ + #define R_SCI0_STR_BFDF_Pos (0UL) /*!< BFDF (Bit 0) */ + #define R_SCI0_STR_BFDF_Msk (0x1UL) /*!< BFDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_CF0MF_Pos (1UL) /*!< CF0MF (Bit 1) */ + #define R_SCI0_STR_CF0MF_Msk (0x2UL) /*!< CF0MF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_CF1MF_Pos (2UL) /*!< CF1MF (Bit 2) */ + #define R_SCI0_STR_CF1MF_Msk (0x4UL) /*!< CF1MF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_PIBDF_Pos (3UL) /*!< PIBDF (Bit 3) */ + #define R_SCI0_STR_PIBDF_Msk (0x8UL) /*!< PIBDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_BCDF_Pos (4UL) /*!< BCDF (Bit 4) */ + #define R_SCI0_STR_BCDF_Msk (0x10UL) /*!< BCDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_AEDF_Pos (5UL) /*!< AEDF (Bit 5) */ + #define R_SCI0_STR_AEDF_Msk (0x20UL) /*!< AEDF (Bitfield-Mask: 0x01) */ +/* ========================================================= STCR ========================================================== */ + #define R_SCI0_STCR_BFDCL_Pos (0UL) /*!< BFDCL (Bit 0) */ + #define R_SCI0_STCR_BFDCL_Msk (0x1UL) /*!< BFDCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_CF0MCL_Pos (1UL) /*!< CF0MCL (Bit 1) */ + #define R_SCI0_STCR_CF0MCL_Msk (0x2UL) /*!< CF0MCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_CF1MCL_Pos (2UL) /*!< CF1MCL (Bit 2) */ + #define R_SCI0_STCR_CF1MCL_Msk (0x4UL) /*!< CF1MCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_PIBDCL_Pos (3UL) /*!< PIBDCL (Bit 3) */ + #define R_SCI0_STCR_PIBDCL_Msk (0x8UL) /*!< PIBDCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_BCDCL_Pos (4UL) /*!< BCDCL (Bit 4) */ + #define R_SCI0_STCR_BCDCL_Msk (0x10UL) /*!< BCDCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_AEDCL_Pos (5UL) /*!< AEDCL (Bit 5) */ + #define R_SCI0_STCR_AEDCL_Msk (0x20UL) /*!< AEDCL (Bitfield-Mask: 0x01) */ +/* ========================================================= CF0DR ========================================================= */ +/* ========================================================= CF0CR ========================================================= */ + #define R_SCI0_CF0CR_CF0CE0_Pos (0UL) /*!< CF0CE0 (Bit 0) */ + #define R_SCI0_CF0CR_CF0CE0_Msk (0x1UL) /*!< CF0CE0 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE1_Pos (1UL) /*!< CF0CE1 (Bit 1) */ + #define R_SCI0_CF0CR_CF0CE1_Msk (0x2UL) /*!< CF0CE1 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE2_Pos (2UL) /*!< CF0CE2 (Bit 2) */ + #define R_SCI0_CF0CR_CF0CE2_Msk (0x4UL) /*!< CF0CE2 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE3_Pos (3UL) /*!< CF0CE3 (Bit 3) */ + #define R_SCI0_CF0CR_CF0CE3_Msk (0x8UL) /*!< CF0CE3 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE4_Pos (4UL) /*!< CF0CE4 (Bit 4) */ + #define R_SCI0_CF0CR_CF0CE4_Msk (0x10UL) /*!< CF0CE4 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE5_Pos (5UL) /*!< CF0CE5 (Bit 5) */ + #define R_SCI0_CF0CR_CF0CE5_Msk (0x20UL) /*!< CF0CE5 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE6_Pos (6UL) /*!< CF0CE6 (Bit 6) */ + #define R_SCI0_CF0CR_CF0CE6_Msk (0x40UL) /*!< CF0CE6 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE7_Pos (7UL) /*!< CF0CE7 (Bit 7) */ + #define R_SCI0_CF0CR_CF0CE7_Msk (0x80UL) /*!< CF0CE7 (Bitfield-Mask: 0x01) */ +/* ========================================================= CF0RR ========================================================= */ +/* ======================================================== PCF1DR ========================================================= */ +/* ======================================================== SCF1DR ========================================================= */ +/* ========================================================= CF1CR ========================================================= */ + #define R_SCI0_CF1CR_CF1CE0_Pos (0UL) /*!< CF1CE0 (Bit 0) */ + #define R_SCI0_CF1CR_CF1CE0_Msk (0x1UL) /*!< CF1CE0 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE1_Pos (1UL) /*!< CF1CE1 (Bit 1) */ + #define R_SCI0_CF1CR_CF1CE1_Msk (0x2UL) /*!< CF1CE1 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE2_Pos (2UL) /*!< CF1CE2 (Bit 2) */ + #define R_SCI0_CF1CR_CF1CE2_Msk (0x4UL) /*!< CF1CE2 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE3_Pos (3UL) /*!< CF1CE3 (Bit 3) */ + #define R_SCI0_CF1CR_CF1CE3_Msk (0x8UL) /*!< CF1CE3 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE4_Pos (4UL) /*!< CF1CE4 (Bit 4) */ + #define R_SCI0_CF1CR_CF1CE4_Msk (0x10UL) /*!< CF1CE4 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE5_Pos (5UL) /*!< CF1CE5 (Bit 5) */ + #define R_SCI0_CF1CR_CF1CE5_Msk (0x20UL) /*!< CF1CE5 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE6_Pos (6UL) /*!< CF1CE6 (Bit 6) */ + #define R_SCI0_CF1CR_CF1CE6_Msk (0x40UL) /*!< CF1CE6 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE7_Pos (7UL) /*!< CF1CE7 (Bit 7) */ + #define R_SCI0_CF1CR_CF1CE7_Msk (0x80UL) /*!< CF1CE7 (Bitfield-Mask: 0x01) */ +/* ========================================================= CF1RR ========================================================= */ +/* ========================================================== TCR ========================================================== */ + #define R_SCI0_TCR_TCST_Pos (0UL) /*!< TCST (Bit 0) */ + #define R_SCI0_TCR_TCST_Msk (0x1UL) /*!< TCST (Bitfield-Mask: 0x01) */ +/* ========================================================== TMR ========================================================== */ + #define R_SCI0_TMR_TOMS_Pos (0UL) /*!< TOMS (Bit 0) */ + #define R_SCI0_TMR_TOMS_Msk (0x3UL) /*!< TOMS (Bitfield-Mask: 0x03) */ + #define R_SCI0_TMR_TWRC_Pos (3UL) /*!< TWRC (Bit 3) */ + #define R_SCI0_TMR_TWRC_Msk (0x8UL) /*!< TWRC (Bitfield-Mask: 0x01) */ + #define R_SCI0_TMR_TCSS_Pos (4UL) /*!< TCSS (Bit 4) */ + #define R_SCI0_TMR_TCSS_Msk (0x70UL) /*!< TCSS (Bitfield-Mask: 0x07) */ +/* ========================================================= TPRE ========================================================== */ +/* ========================================================= TCNT ========================================================== */ /* =========================================================================================================================== */ /* ================ R_SDADC0 ================ */ @@ -25148,6 +28006,14 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SPI0_SSLP_SSL1P_Msk (0x2UL) /*!< SSL1P (Bitfield-Mask: 0x01) */ #define R_SPI0_SSLP_SSL0P_Pos (0UL) /*!< SSL0P (Bit 0) */ #define R_SPI0_SSLP_SSL0P_Msk (0x1UL) /*!< SSL0P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL4P_Pos (4UL) /*!< SSL4P (Bit 4) */ + #define R_SPI0_SSLP_SSL4P_Msk (0x10UL) /*!< SSL4P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL5P_Pos (5UL) /*!< SSL5P (Bit 5) */ + #define R_SPI0_SSLP_SSL5P_Msk (0x20UL) /*!< SSL5P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL6P_Pos (6UL) /*!< SSL6P (Bit 6) */ + #define R_SPI0_SSLP_SSL6P_Msk (0x40UL) /*!< SSL6P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL7P_Pos (7UL) /*!< SSL7P (Bit 7) */ + #define R_SPI0_SSLP_SSL7P_Msk (0x80UL) /*!< SSL7P (Bitfield-Mask: 0x01) */ /* ========================================================= SPPCR ========================================================= */ #define R_SPI0_SPPCR_MOIFE_Pos (5UL) /*!< MOIFE (Bit 5) */ #define R_SPI0_SPPCR_MOIFE_Msk (0x20UL) /*!< MOIFE (Bitfield-Mask: 0x01) */ @@ -25172,6 +28038,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SPI0_SPSR_IDLNF_Msk (0x2UL) /*!< IDLNF (Bitfield-Mask: 0x01) */ #define R_SPI0_SPSR_OVRF_Pos (0UL) /*!< OVRF (Bit 0) */ #define R_SPI0_SPSR_OVRF_Msk (0x1UL) /*!< OVRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_CENDF_Pos (6UL) /*!< CENDF (Bit 6) */ + #define R_SPI0_SPSR_CENDF_Msk (0x40UL) /*!< CENDF (Bitfield-Mask: 0x01) */ /* ========================================================= SPDR ========================================================== */ /* ======================================================== SPDR_HA ======================================================== */ /* ======================================================== SPDR_BY ======================================================== */ @@ -25190,6 +28058,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SPI0_SPDCR_SPRDTD_Msk (0x10UL) /*!< SPRDTD (Bitfield-Mask: 0x01) */ #define R_SPI0_SPDCR_SPFC_Pos (0UL) /*!< SPFC (Bit 0) */ #define R_SPI0_SPDCR_SPFC_Msk (0x3UL) /*!< SPFC (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPDCR_SLSEL_Pos (2UL) /*!< SLSEL (Bit 2) */ + #define R_SPI0_SPDCR_SLSEL_Msk (0xcUL) /*!< SLSEL (Bitfield-Mask: 0x03) */ /* ========================================================= SPCKD ========================================================= */ #define R_SPI0_SPCKD_SCKDL_Pos (0UL) /*!< SCKDL (Bit 0) */ #define R_SPI0_SPCKD_SCKDL_Msk (0x7UL) /*!< SCKDL (Bitfield-Mask: 0x07) */ @@ -25210,6 +28080,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SPI0_SPCR2_SPOE_Msk (0x2UL) /*!< SPOE (Bitfield-Mask: 0x01) */ #define R_SPI0_SPCR2_SPPE_Pos (0UL) /*!< SPPE (Bit 0) */ #define R_SPI0_SPCR2_SPPE_Msk (0x1UL) /*!< SPPE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR2_SPTDDL_Pos (5UL) /*!< SPTDDL (Bit 5) */ + #define R_SPI0_SPCR2_SPTDDL_Msk (0xe0UL) /*!< SPTDDL (Bitfield-Mask: 0x07) */ /* ========================================================= SPCMD ========================================================= */ #define R_SPI0_SPCMD_SCKDEN_Pos (15UL) /*!< SCKDEN (Bit 15) */ #define R_SPI0_SPCMD_SCKDEN_Msk (0x8000UL) /*!< SCKDEN (Bitfield-Mask: 0x01) */ @@ -25234,6 +28106,27 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ======================================================== SPDCR2 ========================================================= */ #define R_SPI0_SPDCR2_BYSW_Pos (0UL) /*!< BYSW (Bit 0) */ #define R_SPI0_SPDCR2_BYSW_Msk (0x1UL) /*!< BYSW (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR2_SINV_Pos (1UL) /*!< SINV (Bit 1) */ + #define R_SPI0_SPDCR2_SINV_Msk (0x2UL) /*!< SINV (Bitfield-Mask: 0x01) */ +/* ========================================================= SPSSR ========================================================= */ + #define R_SPI0_SPSSR_SPCP_Pos (0UL) /*!< SPCP (Bit 0) */ + #define R_SPI0_SPSSR_SPCP_Msk (0x7UL) /*!< SPCP (Bitfield-Mask: 0x07) */ + #define R_SPI0_SPSSR_SPECM_Pos (4UL) /*!< SPECM (Bit 4) */ + #define R_SPI0_SPSSR_SPECM_Msk (0x70UL) /*!< SPECM (Bitfield-Mask: 0x07) */ +/* ========================================================= SPCR3 ========================================================= */ + #define R_SPI0_SPCR3_ETXMD_Pos (0UL) /*!< ETXMD (Bit 0) */ + #define R_SPI0_SPCR3_ETXMD_Msk (0x1UL) /*!< ETXMD (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR3_BFDS_Pos (1UL) /*!< BFDS (Bit 1) */ + #define R_SPI0_SPCR3_BFDS_Msk (0x2UL) /*!< BFDS (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR3_CENDIE_Pos (4UL) /*!< CENDIE (Bit 4) */ + #define R_SPI0_SPCR3_CENDIE_Msk (0x10UL) /*!< CENDIE (Bitfield-Mask: 0x01) */ +/* ========================================================= SPPR ========================================================== */ + #define R_SPI0_SPPR_BUFWID_Pos (4UL) /*!< BUFWID (Bit 4) */ + #define R_SPI0_SPPR_BUFWID_Msk (0x10UL) /*!< BUFWID (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPR_BUFNUM_Pos (8UL) /*!< BUFNUM (Bit 8) */ + #define R_SPI0_SPPR_BUFNUM_Msk (0x700UL) /*!< BUFNUM (Bitfield-Mask: 0x07) */ + #define R_SPI0_SPPR_CMDNUM_Pos (12UL) /*!< CMDNUM (Bit 12) */ + #define R_SPI0_SPPR_CMDNUM_Msk (0xf000UL) /*!< CMDNUM (Bitfield-Mask: 0x0f) */ /* =========================================================================================================================== */ /* ================ R_SRAM ================ */ @@ -25286,6 +28179,11 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ======================================================== ECCOAD ========================================================= */ #define R_SRAM_ECCOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ #define R_SRAM_ECCOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ======================================================= SRAMPRCR2 ======================================================= */ + #define R_SRAM_SRAMPRCR2_SRAMPRCR2_Pos (0UL) /*!< SRAMPRCR2 (Bit 0) */ + #define R_SRAM_SRAMPRCR2_SRAMPRCR2_Msk (0x1UL) /*!< SRAMPRCR2 (Bitfield-Mask: 0x01) */ + #define R_SRAM_SRAMPRCR2_KW_Pos (1UL) /*!< KW (Bit 1) */ + #define R_SRAM_SRAMPRCR2_KW_Msk (0xfeUL) /*!< KW (Bitfield-Mask: 0x7f) */ /* =========================================================================================================================== */ /* ================ R_SRC ================ */ @@ -25436,6 +28334,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SSI0_SSIFCR_TFRST_Msk (0x2UL) /*!< TFRST (Bitfield-Mask: 0x01) */ #define R_SSI0_SSIFCR_RFRST_Pos (0UL) /*!< RFRST (Bit 0) */ #define R_SSI0_SSIFCR_RFRST_Msk (0x1UL) /*!< RFRST (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_BSW_Pos (11UL) /*!< BSW (Bit 11) */ + #define R_SSI0_SSIFCR_BSW_Msk (0x800UL) /*!< BSW (Bitfield-Mask: 0x01) */ /* ======================================================== SSIFSR ========================================================= */ #define R_SSI0_SSIFSR_TDC_Pos (24UL) /*!< TDC (Bit 24) */ #define R_SSI0_SSIFSR_TDC_Msk (0x3f000000UL) /*!< TDC (Bitfield-Mask: 0x3f) */ @@ -25554,6 +28454,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_OSCSF_MOSCSF_Msk (0x8UL) /*!< MOSCSF (Bitfield-Mask: 0x01) */ #define R_SYSTEM_OSCSF_HOCOSF_Pos (0UL) /*!< HOCOSF (Bit 0) */ #define R_SYSTEM_OSCSF_HOCOSF_Msk (0x1UL) /*!< HOCOSF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OSCSF_PLL2SF_Pos (6UL) /*!< PLL2SF (Bit 6) */ + #define R_SYSTEM_OSCSF_PLL2SF_Msk (0x40UL) /*!< PLL2SF (Bitfield-Mask: 0x01) */ /* ========================================================= CKOCR ========================================================= */ #define R_SYSTEM_CKOCR_CKOEN_Pos (7UL) /*!< CKOEN (Bit 7) */ #define R_SYSTEM_CKOCR_CKOEN_Msk (0x80UL) /*!< CKOEN (Bitfield-Mask: 0x01) */ @@ -25675,6 +28577,10 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_RSTSR1_WDTRF_Msk (0x2UL) /*!< WDTRF (Bitfield-Mask: 0x01) */ #define R_SYSTEM_RSTSR1_IWDTRF_Pos (0UL) /*!< IWDTRF (Bit 0) */ #define R_SYSTEM_RSTSR1_IWDTRF_Msk (0x1UL) /*!< IWDTRF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_TZERF_Pos (13UL) /*!< TZERF (Bit 13) */ + #define R_SYSTEM_RSTSR1_TZERF_Msk (0x2000UL) /*!< TZERF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_CPERF_Pos (15UL) /*!< CPERF (Bit 15) */ + #define R_SYSTEM_RSTSR1_CPERF_Msk (0x8000UL) /*!< CPERF (Bitfield-Mask: 0x01) */ /* ======================================================== STCONR ========================================================= */ #define R_SYSTEM_STCONR_STCON_Pos (0UL) /*!< STCON (Bit 0) */ #define R_SYSTEM_STCONR_STCON_Msk (0x3UL) /*!< STCON (Bitfield-Mask: 0x03) */ @@ -25688,9 +28594,9 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_LVD2CR1_IRQSEL_Msk (0x4UL) /*!< IRQSEL (Bitfield-Mask: 0x01) */ #define R_SYSTEM_LVD2CR1_IDTSEL_Pos (0UL) /*!< IDTSEL (Bit 0) */ #define R_SYSTEM_LVD2CR1_IDTSEL_Msk (0x3UL) /*!< IDTSEL (Bitfield-Mask: 0x03) */ -/* ======================================================== USBCKCR ======================================================== */ - #define R_SYSTEM_USBCKCR_USBCLKSEL_Pos (0UL) /*!< USBCLKSEL (Bit 0) */ - #define R_SYSTEM_USBCKCR_USBCLKSEL_Msk (0x1UL) /*!< USBCLKSEL (Bitfield-Mask: 0x01) */ +/* ====================================================== USBCKCR_ALT ====================================================== */ + #define R_SYSTEM_USBCKCR_ALT_USBCLKSEL_Pos (0UL) /*!< USBCLKSEL (Bit 0) */ + #define R_SYSTEM_USBCKCR_ALT_USBCLKSEL_Msk (0x1UL) /*!< USBCLKSEL (Bitfield-Mask: 0x01) */ /* ======================================================= SDADCCKCR ======================================================= */ #define R_SYSTEM_SDADCCKCR_SDADCCKSEL_Pos (0UL) /*!< SDADCCKSEL (Bit 0) */ #define R_SYSTEM_SDADCCKCR_SDADCCKSEL_Msk (0x1UL) /*!< SDADCCKSEL (Bitfield-Mask: 0x01) */ @@ -25715,6 +28621,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_PRCR_PRC1_Msk (0x2UL) /*!< PRC1 (Bitfield-Mask: 0x01) */ #define R_SYSTEM_PRCR_PRC0_Pos (0UL) /*!< PRC0 (Bit 0) */ #define R_SYSTEM_PRCR_PRC0_Msk (0x1UL) /*!< PRC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PRCR_PRC4_Pos (4UL) /*!< PRC4 (Bit 4) */ + #define R_SYSTEM_PRCR_PRC4_Msk (0x10UL) /*!< PRC4 (Bitfield-Mask: 0x01) */ /* ======================================================== DPSIER0 ======================================================== */ #define R_SYSTEM_DPSIER0_DIRQE_Pos (0UL) /*!< DIRQE (Bit 0) */ #define R_SYSTEM_DPSIER0_DIRQE_Msk (0x1UL) /*!< DIRQE (Bitfield-Mask: 0x01) */ @@ -25739,6 +28647,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_DPSIER3_DUSBHSIE_Msk (0x2UL) /*!< DUSBHSIE (Bitfield-Mask: 0x01) */ #define R_SYSTEM_DPSIER3_DUSBFSIE_Pos (0UL) /*!< DUSBFSIE (Bit 0) */ #define R_SYSTEM_DPSIER3_DUSBFSIE_Msk (0x1UL) /*!< DUSBFSIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER3_DAGT3IE_Pos (3UL) /*!< DAGT3IE (Bit 3) */ + #define R_SYSTEM_DPSIER3_DAGT3IE_Msk (0x8UL) /*!< DAGT3IE (Bitfield-Mask: 0x01) */ /* ======================================================== DPSIFR0 ======================================================== */ #define R_SYSTEM_DPSIFR0_DIRQF_Pos (0UL) /*!< DIRQF (Bit 0) */ #define R_SYSTEM_DPSIFR0_DIRQF_Msk (0x1UL) /*!< DIRQF (Bitfield-Mask: 0x01) */ @@ -25763,6 +28673,8 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_DPSIFR3_DUSBHSIF_Msk (0x2UL) /*!< DUSBHSIF (Bitfield-Mask: 0x01) */ #define R_SYSTEM_DPSIFR3_DUSBFSIF_Pos (0UL) /*!< DUSBFSIF (Bit 0) */ #define R_SYSTEM_DPSIFR3_DUSBFSIF_Msk (0x1UL) /*!< DUSBFSIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR3_DAGT3IF_Pos (3UL) /*!< DAGT3IF (Bit 3) */ + #define R_SYSTEM_DPSIFR3_DAGT3IF_Msk (0x8UL) /*!< DAGT3IF (Bitfield-Mask: 0x01) */ /* ======================================================= DPSIEGR0 ======================================================== */ #define R_SYSTEM_DPSIEGR0_DIRQEG_Pos (0UL) /*!< DIRQEG (Bit 0) */ #define R_SYSTEM_DPSIEGR0_DIRQEG_Msk (0x1UL) /*!< DIRQEG (Bitfield-Mask: 0x01) */ @@ -25816,11 +28728,21 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_SYSTEM_LVCMPCR_LVD2E_Msk (0x40UL) /*!< LVD2E (Bitfield-Mask: 0x01) */ #define R_SYSTEM_LVCMPCR_LVD1E_Pos (5UL) /*!< LVD1E (Bit 5) */ #define R_SYSTEM_LVCMPCR_LVD1E_Msk (0x20UL) /*!< LVD1E (Bitfield-Mask: 0x01) */ +/* ======================================================= LVD1CMPCR ======================================================= */ + #define R_SYSTEM_LVD1CMPCR_LVD1LVL_Pos (0UL) /*!< LVD1LVL (Bit 0) */ + #define R_SYSTEM_LVD1CMPCR_LVD1LVL_Msk (0x1fUL) /*!< LVD1LVL (Bitfield-Mask: 0x1f) */ + #define R_SYSTEM_LVD1CMPCR_LVD1E_Pos (7UL) /*!< LVD1E (Bit 7) */ + #define R_SYSTEM_LVD1CMPCR_LVD1E_Msk (0x80UL) /*!< LVD1E (Bitfield-Mask: 0x01) */ /* ======================================================== LVDLVLR ======================================================== */ #define R_SYSTEM_LVDLVLR_LVD2LVL_Pos (5UL) /*!< LVD2LVL (Bit 5) */ #define R_SYSTEM_LVDLVLR_LVD2LVL_Msk (0xe0UL) /*!< LVD2LVL (Bitfield-Mask: 0x07) */ #define R_SYSTEM_LVDLVLR_LVD1LVL_Pos (0UL) /*!< LVD1LVL (Bit 0) */ #define R_SYSTEM_LVDLVLR_LVD1LVL_Msk (0x1fUL) /*!< LVD1LVL (Bitfield-Mask: 0x1f) */ +/* ======================================================= LVD2CMPCR ======================================================= */ + #define R_SYSTEM_LVD2CMPCR_LVD2LVL_Pos (0UL) /*!< LVD2LVL (Bit 0) */ + #define R_SYSTEM_LVD2CMPCR_LVD2LVL_Msk (0x7UL) /*!< LVD2LVL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_LVD2CMPCR_LVD2E_Pos (7UL) /*!< LVD2E (Bit 7) */ + #define R_SYSTEM_LVD2CMPCR_LVD2E_Msk (0x80UL) /*!< LVD2E (Bitfield-Mask: 0x01) */ /* ======================================================== LVD1CR0 ======================================================== */ #define R_SYSTEM_LVD1CR0_RN_Pos (7UL) /*!< RN (Bit 7) */ #define R_SYSTEM_LVD1CR0_RN_Msk (0x80UL) /*!< RN (Bitfield-Mask: 0x01) */ @@ -25977,6 +28899,180 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure /* ======================================================== FWEPROR ======================================================== */ #define R_SYSTEM_FWEPROR_FLWE_Pos (0UL) /*!< FLWE (Bit 0) */ #define R_SYSTEM_FWEPROR_FLWE_Msk (0x3UL) /*!< FLWE (Bitfield-Mask: 0x03) */ +/* ======================================================== PLL2CCR ======================================================== */ + #define R_SYSTEM_PLL2CCR_PL2IDIV_Pos (0UL) /*!< PL2IDIV (Bit 0) */ + #define R_SYSTEM_PLL2CCR_PL2IDIV_Msk (0x3UL) /*!< PL2IDIV (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_PLL2CCR_PL2SRCSEL_Pos (4UL) /*!< PL2SRCSEL (Bit 4) */ + #define R_SYSTEM_PLL2CCR_PL2SRCSEL_Msk (0x10UL) /*!< PL2SRCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PLL2CCR_PLL2MUL_Pos (8UL) /*!< PLL2MUL (Bit 8) */ + #define R_SYSTEM_PLL2CCR_PLL2MUL_Msk (0x3f00UL) /*!< PLL2MUL (Bitfield-Mask: 0x3f) */ +/* ======================================================== PLL2CR ========================================================= */ + #define R_SYSTEM_PLL2CR_PLL2STP_Pos (0UL) /*!< PLL2STP (Bit 0) */ + #define R_SYSTEM_PLL2CR_PLL2STP_Msk (0x1UL) /*!< PLL2STP (Bitfield-Mask: 0x01) */ +/* ====================================================== USBCKDIVCR ======================================================= */ + #define R_SYSTEM_USBCKDIVCR_USBCKDIV_Pos (0UL) /*!< USBCKDIV (Bit 0) */ + #define R_SYSTEM_USBCKDIVCR_USBCKDIV_Msk (0x7UL) /*!< USBCKDIV (Bitfield-Mask: 0x07) */ +/* ====================================================== OCTACKDIVCR ====================================================== */ + #define R_SYSTEM_OCTACKDIVCR_OCTACKDIV_Pos (0UL) /*!< OCTACKDIV (Bit 0) */ + #define R_SYSTEM_OCTACKDIVCR_OCTACKDIV_Msk (0x7UL) /*!< OCTACKDIV (Bitfield-Mask: 0x07) */ +/* ======================================================== USBCKCR ======================================================== */ + #define R_SYSTEM_USBCKCR_USBCKSEL_Pos (0UL) /*!< USBCKSEL (Bit 0) */ + #define R_SYSTEM_USBCKCR_USBCKSEL_Msk (0x7UL) /*!< USBCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_USBCKCR_USBCKSREQ_Pos (6UL) /*!< USBCKSREQ (Bit 6) */ + #define R_SYSTEM_USBCKCR_USBCKSREQ_Msk (0x40UL) /*!< USBCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_USBCKCR_USBCKSRDY_Pos (7UL) /*!< USBCKSRDY (Bit 7) */ + #define R_SYSTEM_USBCKCR_USBCKSRDY_Msk (0x80UL) /*!< USBCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================= OCTACKCR ======================================================== */ + #define R_SYSTEM_OCTACKCR_OCTACKSEL_Pos (0UL) /*!< OCTACKSEL (Bit 0) */ + #define R_SYSTEM_OCTACKCR_OCTACKSEL_Msk (0x7UL) /*!< OCTACKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_OCTACKCR_OCTACKSREQ_Pos (6UL) /*!< OCTACKSREQ (Bit 6) */ + #define R_SYSTEM_OCTACKCR_OCTACKSREQ_Msk (0x40UL) /*!< OCTACKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OCTACKCR_OCTACKSRDY_Pos (7UL) /*!< OCTACKSRDY (Bit 7) */ + #define R_SYSTEM_OCTACKCR_OCTACKSRDY_Msk (0x80UL) /*!< OCTACKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================= SNZREQCR1 ======================================================= */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN0_Pos (0UL) /*!< SNZREQEN0 (Bit 0) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN0_Msk (0x1UL) /*!< SNZREQEN0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN1_Pos (1UL) /*!< SNZREQEN1 (Bit 1) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN1_Msk (0x2UL) /*!< SNZREQEN1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN2_Pos (2UL) /*!< SNZREQEN2 (Bit 2) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN2_Msk (0x4UL) /*!< SNZREQEN2 (Bitfield-Mask: 0x01) */ +/* ======================================================= SNZEDCR1 ======================================================== */ + #define R_SYSTEM_SNZEDCR1_AGT3UNFED_Pos (0UL) /*!< AGT3UNFED (Bit 0) */ + #define R_SYSTEM_SNZEDCR1_AGT3UNFED_Msk (0x1UL) /*!< AGT3UNFED (Bitfield-Mask: 0x01) */ +/* ======================================================== CGFSAR ========================================================= */ + #define R_SYSTEM_CGFSAR_NONSEC00_Pos (0UL) /*!< NONSEC00 (Bit 0) */ + #define R_SYSTEM_CGFSAR_NONSEC00_Msk (0x1UL) /*!< NONSEC00 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC02_Pos (2UL) /*!< NONSEC02 (Bit 2) */ + #define R_SYSTEM_CGFSAR_NONSEC02_Msk (0x4UL) /*!< NONSEC02 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC03_Pos (3UL) /*!< NONSEC03 (Bit 3) */ + #define R_SYSTEM_CGFSAR_NONSEC03_Msk (0x8UL) /*!< NONSEC03 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC04_Pos (4UL) /*!< NONSEC04 (Bit 4) */ + #define R_SYSTEM_CGFSAR_NONSEC04_Msk (0x10UL) /*!< NONSEC04 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC05_Pos (5UL) /*!< NONSEC05 (Bit 5) */ + #define R_SYSTEM_CGFSAR_NONSEC05_Msk (0x20UL) /*!< NONSEC05 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC06_Pos (6UL) /*!< NONSEC06 (Bit 6) */ + #define R_SYSTEM_CGFSAR_NONSEC06_Msk (0x40UL) /*!< NONSEC06 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC07_Pos (7UL) /*!< NONSEC07 (Bit 7) */ + #define R_SYSTEM_CGFSAR_NONSEC07_Msk (0x80UL) /*!< NONSEC07 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC08_Pos (8UL) /*!< NONSEC08 (Bit 8) */ + #define R_SYSTEM_CGFSAR_NONSEC08_Msk (0x100UL) /*!< NONSEC08 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC09_Pos (9UL) /*!< NONSEC09 (Bit 9) */ + #define R_SYSTEM_CGFSAR_NONSEC09_Msk (0x200UL) /*!< NONSEC09 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC11_Pos (11UL) /*!< NONSEC11 (Bit 11) */ + #define R_SYSTEM_CGFSAR_NONSEC11_Msk (0x800UL) /*!< NONSEC11 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC12_Pos (12UL) /*!< NONSEC12 (Bit 12) */ + #define R_SYSTEM_CGFSAR_NONSEC12_Msk (0x1000UL) /*!< NONSEC12 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC16_Pos (16UL) /*!< NONSEC16 (Bit 16) */ + #define R_SYSTEM_CGFSAR_NONSEC16_Msk (0x10000UL) /*!< NONSEC16 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC17_Pos (17UL) /*!< NONSEC17 (Bit 17) */ + #define R_SYSTEM_CGFSAR_NONSEC17_Msk (0x20000UL) /*!< NONSEC17 (Bitfield-Mask: 0x01) */ +/* ======================================================== LPMSAR ========================================================= */ + #define R_SYSTEM_LPMSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_LPMSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC2_Pos (2UL) /*!< NONSEC2 (Bit 2) */ + #define R_SYSTEM_LPMSAR_NONSEC2_Msk (0x4UL) /*!< NONSEC2 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC4_Pos (4UL) /*!< NONSEC4 (Bit 4) */ + #define R_SYSTEM_LPMSAR_NONSEC4_Msk (0x10UL) /*!< NONSEC4 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC8_Pos (8UL) /*!< NONSEC8 (Bit 8) */ + #define R_SYSTEM_LPMSAR_NONSEC8_Msk (0x100UL) /*!< NONSEC8 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC9_Pos (9UL) /*!< NONSEC9 (Bit 9) */ + #define R_SYSTEM_LPMSAR_NONSEC9_Msk (0x200UL) /*!< NONSEC9 (Bitfield-Mask: 0x01) */ +/* ======================================================== LVDSAR ========================================================= */ + #define R_SYSTEM_LVDSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_LVDSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVDSAR_NONSEC1_Pos (1UL) /*!< NONSEC1 (Bit 1) */ + #define R_SYSTEM_LVDSAR_NONSEC1_Msk (0x2UL) /*!< NONSEC1 (Bitfield-Mask: 0x01) */ +/* ======================================================== RSTSAR ========================================================= */ + #define R_SYSTEM_RSTSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_RSTSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSAR_NONSEC1_Pos (1UL) /*!< NONSEC1 (Bit 1) */ + #define R_SYSTEM_RSTSAR_NONSEC1_Msk (0x2UL) /*!< NONSEC1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSAR_NONSEC2_Pos (2UL) /*!< NONSEC2 (Bit 2) */ + #define R_SYSTEM_RSTSAR_NONSEC2_Msk (0x4UL) /*!< NONSEC2 (Bitfield-Mask: 0x01) */ +/* ======================================================== BBFSAR ========================================================= */ + #define R_SYSTEM_BBFSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_BBFSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC1_Pos (1UL) /*!< NONSEC1 (Bit 1) */ + #define R_SYSTEM_BBFSAR_NONSEC1_Msk (0x2UL) /*!< NONSEC1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC2_Pos (2UL) /*!< NONSEC2 (Bit 2) */ + #define R_SYSTEM_BBFSAR_NONSEC2_Msk (0x4UL) /*!< NONSEC2 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC16_Pos (16UL) /*!< NONSEC16 (Bit 16) */ + #define R_SYSTEM_BBFSAR_NONSEC16_Msk (0x10000UL) /*!< NONSEC16 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC17_Pos (17UL) /*!< NONSEC17 (Bit 17) */ + #define R_SYSTEM_BBFSAR_NONSEC17_Msk (0x20000UL) /*!< NONSEC17 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC18_Pos (18UL) /*!< NONSEC18 (Bit 18) */ + #define R_SYSTEM_BBFSAR_NONSEC18_Msk (0x40000UL) /*!< NONSEC18 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC19_Pos (19UL) /*!< NONSEC19 (Bit 19) */ + #define R_SYSTEM_BBFSAR_NONSEC19_Msk (0x80000UL) /*!< NONSEC19 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC20_Pos (20UL) /*!< NONSEC20 (Bit 20) */ + #define R_SYSTEM_BBFSAR_NONSEC20_Msk (0x100000UL) /*!< NONSEC20 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC21_Pos (21UL) /*!< NONSEC21 (Bit 21) */ + #define R_SYSTEM_BBFSAR_NONSEC21_Msk (0x200000UL) /*!< NONSEC21 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC22_Pos (22UL) /*!< NONSEC22 (Bit 22) */ + #define R_SYSTEM_BBFSAR_NONSEC22_Msk (0x400000UL) /*!< NONSEC22 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC23_Pos (23UL) /*!< NONSEC23 (Bit 23) */ + #define R_SYSTEM_BBFSAR_NONSEC23_Msk (0x800000UL) /*!< NONSEC23 (Bitfield-Mask: 0x01) */ +/* ======================================================== DPFSAR ========================================================= */ + #define R_SYSTEM_DPFSAR_DPFSA0_Pos (0UL) /*!< DPFSA0 (Bit 0) */ + #define R_SYSTEM_DPFSAR_DPFSA0_Msk (0x1UL) /*!< DPFSA0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA1_Pos (1UL) /*!< DPFSA1 (Bit 1) */ + #define R_SYSTEM_DPFSAR_DPFSA1_Msk (0x2UL) /*!< DPFSA1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA2_Pos (2UL) /*!< DPFSA2 (Bit 2) */ + #define R_SYSTEM_DPFSAR_DPFSA2_Msk (0x4UL) /*!< DPFSA2 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA3_Pos (3UL) /*!< DPFSA3 (Bit 3) */ + #define R_SYSTEM_DPFSAR_DPFSA3_Msk (0x8UL) /*!< DPFSA3 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA4_Pos (4UL) /*!< DPFSA4 (Bit 4) */ + #define R_SYSTEM_DPFSAR_DPFSA4_Msk (0x10UL) /*!< DPFSA4 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA5_Pos (5UL) /*!< DPFSA5 (Bit 5) */ + #define R_SYSTEM_DPFSAR_DPFSA5_Msk (0x20UL) /*!< DPFSA5 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA6_Pos (6UL) /*!< DPFSA6 (Bit 6) */ + #define R_SYSTEM_DPFSAR_DPFSA6_Msk (0x40UL) /*!< DPFSA6 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA7_Pos (7UL) /*!< DPFSA7 (Bit 7) */ + #define R_SYSTEM_DPFSAR_DPFSA7_Msk (0x80UL) /*!< DPFSA7 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA8_Pos (8UL) /*!< DPFSA8 (Bit 8) */ + #define R_SYSTEM_DPFSAR_DPFSA8_Msk (0x100UL) /*!< DPFSA8 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA9_Pos (9UL) /*!< DPFSA9 (Bit 9) */ + #define R_SYSTEM_DPFSAR_DPFSA9_Msk (0x200UL) /*!< DPFSA9 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA10_Pos (10UL) /*!< DPFSA10 (Bit 10) */ + #define R_SYSTEM_DPFSAR_DPFSA10_Msk (0x400UL) /*!< DPFSA10 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA11_Pos (11UL) /*!< DPFSA11 (Bit 11) */ + #define R_SYSTEM_DPFSAR_DPFSA11_Msk (0x800UL) /*!< DPFSA11 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA12_Pos (12UL) /*!< DPFSA12 (Bit 12) */ + #define R_SYSTEM_DPFSAR_DPFSA12_Msk (0x1000UL) /*!< DPFSA12 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA13_Pos (13UL) /*!< DPFSA13 (Bit 13) */ + #define R_SYSTEM_DPFSAR_DPFSA13_Msk (0x2000UL) /*!< DPFSA13 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA14_Pos (14UL) /*!< DPFSA14 (Bit 14) */ + #define R_SYSTEM_DPFSAR_DPFSA14_Msk (0x4000UL) /*!< DPFSA14 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA15_Pos (15UL) /*!< DPFSA15 (Bit 15) */ + #define R_SYSTEM_DPFSAR_DPFSA15_Msk (0x8000UL) /*!< DPFSA15 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA16_Pos (16UL) /*!< DPFSA16 (Bit 16) */ + #define R_SYSTEM_DPFSAR_DPFSA16_Msk (0x10000UL) /*!< DPFSA16 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA17_Pos (17UL) /*!< DPFSA17 (Bit 17) */ + #define R_SYSTEM_DPFSAR_DPFSA17_Msk (0x20000UL) /*!< DPFSA17 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA18_Pos (18UL) /*!< DPFSA18 (Bit 18) */ + #define R_SYSTEM_DPFSAR_DPFSA18_Msk (0x40000UL) /*!< DPFSA18 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA19_Pos (19UL) /*!< DPFSA19 (Bit 19) */ + #define R_SYSTEM_DPFSAR_DPFSA19_Msk (0x80000UL) /*!< DPFSA19 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA20_Pos (20UL) /*!< DPFSA20 (Bit 20) */ + #define R_SYSTEM_DPFSAR_DPFSA20_Msk (0x100000UL) /*!< DPFSA20 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA24_Pos (24UL) /*!< DPFSA24 (Bit 24) */ + #define R_SYSTEM_DPFSAR_DPFSA24_Msk (0x1000000UL) /*!< DPFSA24 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA26_Pos (26UL) /*!< DPFSA26 (Bit 26) */ + #define R_SYSTEM_DPFSAR_DPFSA26_Msk (0x4000000UL) /*!< DPFSA26 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA27_Pos (27UL) /*!< DPFSA27 (Bit 27) */ + #define R_SYSTEM_DPFSAR_DPFSA27_Msk (0x8000000UL) /*!< DPFSA27 (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSWCR ========================================================= */ + #define R_SYSTEM_DPSWCR_WTSTS_Pos (0UL) /*!< WTSTS (Bit 0) */ + #define R_SYSTEM_DPSWCR_WTSTS_Msk (0x3fUL) /*!< WTSTS (Bitfield-Mask: 0x3f) */ +/* ====================================================== VBATTMNSELR ====================================================== */ + #define R_SYSTEM_VBATTMNSELR_VBATTMNSEL_Pos (0UL) /*!< VBATTMNSEL (Bit 0) */ + #define R_SYSTEM_VBATTMNSELR_VBATTMNSEL_Msk (0x1UL) /*!< VBATTMNSEL (Bitfield-Mask: 0x01) */ +/* ======================================================= VBATTMONR ======================================================= */ + #define R_SYSTEM_VBATTMONR_VBATTMON_Pos (0UL) /*!< VBATTMON (Bit 0) */ + #define R_SYSTEM_VBATTMONR_VBATTMON_Msk (0x1UL) /*!< VBATTMON (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTBER ========================================================= */ + #define R_SYSTEM_VBTBER_VBAE_Pos (3UL) /*!< VBAE (Bit 3) */ + #define R_SYSTEM_VBTBER_VBAE_Msk (0x8UL) /*!< VBAE (Bitfield-Mask: 0x01) */ /* =========================================================================================================================== */ /* ================ R_TSN ================ */ @@ -26590,6 +29686,323 @@ typedef struct /*!< (@ 0x40044200) R_WDT Structure #define R_WDT_WDTCSTPR_SLCSTP_Pos (7UL) /*!< SLCSTP (Bit 7) */ #define R_WDT_WDTCSTPR_SLCSTP_Msk (0x80UL) /*!< SLCSTP (Bitfield-Mask: 0x01) */ +/* =========================================================================================================================== */ +/* ================ R_TZF ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== TZFOAD ========================================================= */ + #define R_TZF_TZFOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_TZF_TZFOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ + #define R_TZF_TZFOAD_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_TZF_TZFOAD_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ +/* ========================================================= TZFPT ========================================================= */ + #define R_TZF_TZFPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_TZF_TZFPT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ + #define R_TZF_TZFPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_TZF_TZFPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ +/* ======================================================== TZFSAR ========================================================= */ + #define R_TZF_TZFSAR_TZFSA0_Pos (0UL) /*!< TZFSA0 (Bit 0) */ + #define R_TZF_TZFSAR_TZFSA0_Msk (0x1UL) /*!< TZFSA0 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_CPSCU ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SRAMSAR ======================================================== */ + #define R_CPSCU_SRAMSAR_SRAMSA0_Pos (0UL) /*!< SRAMSA0 (Bit 0) */ + #define R_CPSCU_SRAMSAR_SRAMSA0_Msk (0x1UL) /*!< SRAMSA0 (Bitfield-Mask: 0x01) */ + #define R_CPSCU_SRAMSAR_SRAMSA1_Pos (1UL) /*!< SRAMSA1 (Bit 1) */ + #define R_CPSCU_SRAMSAR_SRAMSA1_Msk (0x2UL) /*!< SRAMSA1 (Bitfield-Mask: 0x01) */ + #define R_CPSCU_SRAMSAR_SRAMSA2_Pos (2UL) /*!< SRAMSA2 (Bit 2) */ + #define R_CPSCU_SRAMSAR_SRAMSA2_Msk (0x4UL) /*!< SRAMSA2 (Bitfield-Mask: 0x01) */ +/* ======================================================= STBRAMSAR ======================================================= */ + #define R_CPSCU_STBRAMSAR_NSBSTBR_Pos (0UL) /*!< NSBSTBR (Bit 0) */ + #define R_CPSCU_STBRAMSAR_NSBSTBR_Msk (0xfUL) /*!< NSBSTBR (Bitfield-Mask: 0x0f) */ +/* ======================================================== DTCSAR ========================================================= */ + #define R_CPSCU_DTCSAR_DTCSTSA_Pos (0UL) /*!< DTCSTSA (Bit 0) */ + #define R_CPSCU_DTCSAR_DTCSTSA_Msk (0x1UL) /*!< DTCSTSA (Bitfield-Mask: 0x01) */ +/* ======================================================== DMACSAR ======================================================== */ + #define R_CPSCU_DMACSAR_DMASTSA_Pos (0UL) /*!< DMASTSA (Bit 0) */ + #define R_CPSCU_DMACSAR_DMASTSA_Msk (0x1UL) /*!< DMASTSA (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARA ======================================================== */ + #define R_CPSCU_ICUSARA_SAIRQCRn_Pos (0UL) /*!< SAIRQCRn (Bit 0) */ + #define R_CPSCU_ICUSARA_SAIRQCRn_Msk (0xffffUL) /*!< SAIRQCRn (Bitfield-Mask: 0xffff) */ +/* ======================================================== ICUSARB ======================================================== */ + #define R_CPSCU_ICUSARB_SANMI_Pos (0UL) /*!< SANMI (Bit 0) */ + #define R_CPSCU_ICUSARB_SANMI_Msk (0x1UL) /*!< SANMI (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARC ======================================================== */ + #define R_CPSCU_ICUSARC_SADMACn_Pos (0UL) /*!< SADMACn (Bit 0) */ + #define R_CPSCU_ICUSARC_SADMACn_Msk (0xffUL) /*!< SADMACn (Bitfield-Mask: 0xff) */ +/* ======================================================== ICUSARD ======================================================== */ + #define R_CPSCU_ICUSARD_SASELSR0_Pos (0UL) /*!< SASELSR0 (Bit 0) */ + #define R_CPSCU_ICUSARD_SASELSR0_Msk (0x1UL) /*!< SASELSR0 (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARE ======================================================== */ + #define R_CPSCU_ICUSARE_SAIWDTWUP_Pos (16UL) /*!< SAIWDTWUP (Bit 16) */ + #define R_CPSCU_ICUSARE_SAIWDTWUP_Msk (0x10000UL) /*!< SAIWDTWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SALVD1WUP_Pos (18UL) /*!< SALVD1WUP (Bit 18) */ + #define R_CPSCU_ICUSARE_SALVD1WUP_Msk (0x40000UL) /*!< SALVD1WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SALVD2WUP_Pos (19UL) /*!< SALVD2WUP (Bit 19) */ + #define R_CPSCU_ICUSARE_SALVD2WUP_Msk (0x80000UL) /*!< SALVD2WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SARTCALMWUP_Pos (24UL) /*!< SARTCALMWUP (Bit 24) */ + #define R_CPSCU_ICUSARE_SARTCALMWUP_Msk (0x1000000UL) /*!< SARTCALMWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SARTCPRDWUP_Pos (25UL) /*!< SARTCPRDWUP (Bit 25) */ + #define R_CPSCU_ICUSARE_SARTCPRDWUP_Msk (0x2000000UL) /*!< SARTCPRDWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAUSBFS0WUP_Pos (27UL) /*!< SAUSBFS0WUP (Bit 27) */ + #define R_CPSCU_ICUSARE_SAUSBFS0WUP_Msk (0x8000000UL) /*!< SAUSBFS0WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAAGT1UDWUP_Pos (28UL) /*!< SAAGT1UDWUP (Bit 28) */ + #define R_CPSCU_ICUSARE_SAAGT1UDWUP_Msk (0x10000000UL) /*!< SAAGT1UDWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAAGT1CAWUP_Pos (29UL) /*!< SAAGT1CAWUP (Bit 29) */ + #define R_CPSCU_ICUSARE_SAAGT1CAWUP_Msk (0x20000000UL) /*!< SAAGT1CAWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAAGT1CBWUP_Pos (30UL) /*!< SAAGT1CBWUP (Bit 30) */ + #define R_CPSCU_ICUSARE_SAAGT1CBWUP_Msk (0x40000000UL) /*!< SAAGT1CBWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAIIC0WUP_Pos (31UL) /*!< SAIIC0WUP (Bit 31) */ + #define R_CPSCU_ICUSARE_SAIIC0WUP_Msk (0x80000000UL) /*!< SAIIC0WUP (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARF ======================================================== */ + #define R_CPSCU_ICUSARF_SAAGT3UDWUP_Pos (0UL) /*!< SAAGT3UDWUP (Bit 0) */ + #define R_CPSCU_ICUSARF_SAAGT3UDWUP_Msk (0x1UL) /*!< SAAGT3UDWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAAGT3CAWUP_Pos (1UL) /*!< SAAGT3CAWUP (Bit 1) */ + #define R_CPSCU_ICUSARF_SAAGT3CAWUP_Msk (0x2UL) /*!< SAAGT3CAWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAAGT3CBWUP_Pos (2UL) /*!< SAAGT3CBWUP (Bit 2) */ + #define R_CPSCU_ICUSARF_SAAGT3CBWUP_Msk (0x4UL) /*!< SAAGT3CBWUP (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARG ======================================================== */ + #define R_CPSCU_ICUSARG_SAIELSRn_Pos (0UL) /*!< SAIELSRn (Bit 0) */ + #define R_CPSCU_ICUSARG_SAIELSRn_Msk (0xffffffffUL) /*!< SAIELSRn (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ICUSARH ======================================================== */ + #define R_CPSCU_ICUSARH_SAIELSRn_Pos (0UL) /*!< SAIELSRn (Bit 0) */ + #define R_CPSCU_ICUSARH_SAIELSRn_Msk (0xffffffffUL) /*!< SAIELSRn (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ICUSARI ======================================================== */ + #define R_CPSCU_ICUSARI_SAIELSRn_Pos (0UL) /*!< SAIELSRn (Bit 0) */ + #define R_CPSCU_ICUSARI_SAIELSRn_Msk (0xffffffffUL) /*!< SAIELSRn (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== BUSSARA ======================================================== */ + #define R_CPSCU_BUSSARA_BUSSA0_Pos (0UL) /*!< BUSSA0 (Bit 0) */ + #define R_CPSCU_BUSSARA_BUSSA0_Msk (0x1UL) /*!< BUSSA0 (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSSARB ======================================================== */ + #define R_CPSCU_BUSSARB_BUSSB0_Pos (0UL) /*!< BUSSB0 (Bit 0) */ + #define R_CPSCU_BUSSARB_BUSSB0_Msk (0x1UL) /*!< BUSSB0 (Bitfield-Mask: 0x01) */ +/* ======================================================= MMPUSARA ======================================================== */ + #define R_CPSCU_MMPUSARA_MMPUAnSA_Pos (0UL) /*!< MMPUAnSA (Bit 0) */ + #define R_CPSCU_MMPUSARA_MMPUAnSA_Msk (0xffUL) /*!< MMPUAnSA (Bitfield-Mask: 0xff) */ +/* ======================================================= MMPUSARB ======================================================== */ + #define R_CPSCU_MMPUSARB_MMPUB0SA_Pos (0UL) /*!< MMPUB0SA (Bit 0) */ + #define R_CPSCU_MMPUSARB_MMPUB0SA_Msk (0x1UL) /*!< MMPUB0SA (Bitfield-Mask: 0x01) */ +/* ======================================================== CPUDSAR ======================================================== */ + #define R_CPSCU_CPUDSAR_CPUDSA0_Pos (0UL) /*!< CPUDSA0 (Bit 0) */ + #define R_CPSCU_CPUDSAR_CPUDSA0_Msk (0x1UL) /*!< CPUDSA0 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_OSPI ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== DCR ========================================================== */ + #define R_OSPI_DCR_DVCMD0_Pos (0UL) /*!< DVCMD0 (Bit 0) */ + #define R_OSPI_DCR_DVCMD0_Msk (0xffUL) /*!< DVCMD0 (Bitfield-Mask: 0xff) */ + #define R_OSPI_DCR_DVCMD1_Pos (8UL) /*!< DVCMD1 (Bit 8) */ + #define R_OSPI_DCR_DVCMD1_Msk (0xff00UL) /*!< DVCMD1 (Bitfield-Mask: 0xff) */ +/* ========================================================== DAR ========================================================== */ + #define R_OSPI_DAR_DVAD0_Pos (0UL) /*!< DVAD0 (Bit 0) */ + #define R_OSPI_DAR_DVAD0_Msk (0xffUL) /*!< DVAD0 (Bitfield-Mask: 0xff) */ + #define R_OSPI_DAR_DVAD1_Pos (8UL) /*!< DVAD1 (Bit 8) */ + #define R_OSPI_DAR_DVAD1_Msk (0xff00UL) /*!< DVAD1 (Bitfield-Mask: 0xff) */ + #define R_OSPI_DAR_DVAD2_Pos (16UL) /*!< DVAD2 (Bit 16) */ + #define R_OSPI_DAR_DVAD2_Msk (0xff0000UL) /*!< DVAD2 (Bitfield-Mask: 0xff) */ + #define R_OSPI_DAR_DVAD3_Pos (24UL) /*!< DVAD3 (Bit 24) */ + #define R_OSPI_DAR_DVAD3_Msk (0xff000000UL) /*!< DVAD3 (Bitfield-Mask: 0xff) */ +/* ========================================================= DCSR ========================================================== */ + #define R_OSPI_DCSR_DALEN_Pos (0UL) /*!< DALEN (Bit 0) */ + #define R_OSPI_DCSR_DALEN_Msk (0xffUL) /*!< DALEN (Bitfield-Mask: 0xff) */ + #define R_OSPI_DCSR_DMLEN_Pos (8UL) /*!< DMLEN (Bit 8) */ + #define R_OSPI_DCSR_DMLEN_Msk (0xff00UL) /*!< DMLEN (Bitfield-Mask: 0xff) */ + #define R_OSPI_DCSR_ACDV_Pos (19UL) /*!< ACDV (Bit 19) */ + #define R_OSPI_DCSR_ACDV_Msk (0x80000UL) /*!< ACDV (Bitfield-Mask: 0x01) */ + #define R_OSPI_DCSR_CMDLEN_Pos (20UL) /*!< CMDLEN (Bit 20) */ + #define R_OSPI_DCSR_CMDLEN_Msk (0x700000UL) /*!< CMDLEN (Bitfield-Mask: 0x07) */ + #define R_OSPI_DCSR_DAOR_Pos (23UL) /*!< DAOR (Bit 23) */ + #define R_OSPI_DCSR_DAOR_Msk (0x800000UL) /*!< DAOR (Bitfield-Mask: 0x01) */ + #define R_OSPI_DCSR_ADLEN_Pos (24UL) /*!< ADLEN (Bit 24) */ + #define R_OSPI_DCSR_ADLEN_Msk (0x7000000UL) /*!< ADLEN (Bitfield-Mask: 0x07) */ + #define R_OSPI_DCSR_DOPI_Pos (27UL) /*!< DOPI (Bit 27) */ + #define R_OSPI_DCSR_DOPI_Msk (0x8000000UL) /*!< DOPI (Bitfield-Mask: 0x01) */ + #define R_OSPI_DCSR_ACDA_Pos (28UL) /*!< ACDA (Bit 28) */ + #define R_OSPI_DCSR_ACDA_Msk (0x10000000UL) /*!< ACDA (Bitfield-Mask: 0x01) */ + #define R_OSPI_DCSR_PREN_Pos (29UL) /*!< PREN (Bit 29) */ + #define R_OSPI_DCSR_PREN_Msk (0x20000000UL) /*!< PREN (Bitfield-Mask: 0x01) */ +/* ========================================================== DSR ========================================================== */ + #define R_OSPI_DSR_DVSZ_Pos (0UL) /*!< DVSZ (Bit 0) */ + #define R_OSPI_DSR_DVSZ_Msk (0x3fffffffUL) /*!< DVSZ (Bitfield-Mask: 0x3fffffff) */ + #define R_OSPI_DSR_DVTYP_Pos (30UL) /*!< DVTYP (Bit 30) */ + #define R_OSPI_DSR_DVTYP_Msk (0xc0000000UL) /*!< DVTYP (Bitfield-Mask: 0x03) */ +/* ========================================================= MDTR ========================================================== */ + #define R_OSPI_MDTR_DV0DEL_Pos (0UL) /*!< DV0DEL (Bit 0) */ + #define R_OSPI_MDTR_DV0DEL_Msk (0xffUL) /*!< DV0DEL (Bitfield-Mask: 0xff) */ + #define R_OSPI_MDTR_DQSERAM_Pos (8UL) /*!< DQSERAM (Bit 8) */ + #define R_OSPI_MDTR_DQSERAM_Msk (0xf00UL) /*!< DQSERAM (Bitfield-Mask: 0x0f) */ + #define R_OSPI_MDTR_DQSESOPI_Pos (12UL) /*!< DQSESOPI (Bit 12) */ + #define R_OSPI_MDTR_DQSESOPI_Msk (0xf000UL) /*!< DQSESOPI (Bitfield-Mask: 0x0f) */ + #define R_OSPI_MDTR_DV1DEL_Pos (16UL) /*!< DV1DEL (Bit 16) */ + #define R_OSPI_MDTR_DV1DEL_Msk (0xff0000UL) /*!< DV1DEL (Bitfield-Mask: 0xff) */ + #define R_OSPI_MDTR_DQSEDOPI_Pos (24UL) /*!< DQSEDOPI (Bit 24) */ + #define R_OSPI_MDTR_DQSEDOPI_Msk (0xf000000UL) /*!< DQSEDOPI (Bitfield-Mask: 0x0f) */ +/* ========================================================= ACTR ========================================================== */ + #define R_OSPI_ACTR_CTP_Pos (0UL) /*!< CTP (Bit 0) */ + #define R_OSPI_ACTR_CTP_Msk (0xffffffffUL) /*!< CTP (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= ACAR ========================================================== */ + #define R_OSPI_ACAR_CAD_Pos (0UL) /*!< CAD (Bit 0) */ + #define R_OSPI_ACAR_CAD_Msk (0xffffffffUL) /*!< CAD (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== DRCSTR ========================================================= */ + #define R_OSPI_DRCSTR_CTRW0_Pos (0UL) /*!< CTRW0 (Bit 0) */ + #define R_OSPI_DRCSTR_CTRW0_Msk (0x7fUL) /*!< CTRW0 (Bitfield-Mask: 0x7f) */ + #define R_OSPI_DRCSTR_CTR0_Pos (7UL) /*!< CTR0 (Bit 7) */ + #define R_OSPI_DRCSTR_CTR0_Msk (0x80UL) /*!< CTR0 (Bitfield-Mask: 0x01) */ + #define R_OSPI_DRCSTR_DVRDCMD0_Pos (8UL) /*!< DVRDCMD0 (Bit 8) */ + #define R_OSPI_DRCSTR_DVRDCMD0_Msk (0x700UL) /*!< DVRDCMD0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DRCSTR_DVRDHI0_Pos (11UL) /*!< DVRDHI0 (Bit 11) */ + #define R_OSPI_DRCSTR_DVRDHI0_Msk (0x3800UL) /*!< DVRDHI0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DRCSTR_DVRDLO0_Pos (14UL) /*!< DVRDLO0 (Bit 14) */ + #define R_OSPI_DRCSTR_DVRDLO0_Msk (0xc000UL) /*!< DVRDLO0 (Bitfield-Mask: 0x03) */ + #define R_OSPI_DRCSTR_CTRW1_Pos (16UL) /*!< CTRW1 (Bit 16) */ + #define R_OSPI_DRCSTR_CTRW1_Msk (0x7f0000UL) /*!< CTRW1 (Bitfield-Mask: 0x7f) */ + #define R_OSPI_DRCSTR_CTR1_Pos (23UL) /*!< CTR1 (Bit 23) */ + #define R_OSPI_DRCSTR_CTR1_Msk (0x800000UL) /*!< CTR1 (Bitfield-Mask: 0x01) */ + #define R_OSPI_DRCSTR_DVRDCMD1_Pos (24UL) /*!< DVRDCMD1 (Bit 24) */ + #define R_OSPI_DRCSTR_DVRDCMD1_Msk (0x7000000UL) /*!< DVRDCMD1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DRCSTR_DVRDHI1_Pos (27UL) /*!< DVRDHI1 (Bit 27) */ + #define R_OSPI_DRCSTR_DVRDHI1_Msk (0x38000000UL) /*!< DVRDHI1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DRCSTR_DVRDLO1_Pos (30UL) /*!< DVRDLO1 (Bit 30) */ + #define R_OSPI_DRCSTR_DVRDLO1_Msk (0xc0000000UL) /*!< DVRDLO1 (Bitfield-Mask: 0x03) */ +/* ======================================================== DWCSTR ========================================================= */ + #define R_OSPI_DWCSTR_CTWW0_Pos (0UL) /*!< CTWW0 (Bit 0) */ + #define R_OSPI_DWCSTR_CTWW0_Msk (0x7fUL) /*!< CTWW0 (Bitfield-Mask: 0x7f) */ + #define R_OSPI_DWCSTR_CTW0_Pos (7UL) /*!< CTW0 (Bit 7) */ + #define R_OSPI_DWCSTR_CTW0_Msk (0x80UL) /*!< CTW0 (Bitfield-Mask: 0x01) */ + #define R_OSPI_DWCSTR_DVWCMD0_Pos (8UL) /*!< DVWCMD0 (Bit 8) */ + #define R_OSPI_DWCSTR_DVWCMD0_Msk (0x700UL) /*!< DVWCMD0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DWCSTR_DVWHI0_Pos (11UL) /*!< DVWHI0 (Bit 11) */ + #define R_OSPI_DWCSTR_DVWHI0_Msk (0x3800UL) /*!< DVWHI0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DWCSTR_DVWLO0_Pos (14UL) /*!< DVWLO0 (Bit 14) */ + #define R_OSPI_DWCSTR_DVWLO0_Msk (0xc000UL) /*!< DVWLO0 (Bitfield-Mask: 0x03) */ + #define R_OSPI_DWCSTR_CTWW1_Pos (16UL) /*!< CTWW1 (Bit 16) */ + #define R_OSPI_DWCSTR_CTWW1_Msk (0x7f0000UL) /*!< CTWW1 (Bitfield-Mask: 0x7f) */ + #define R_OSPI_DWCSTR_CTW1_Pos (23UL) /*!< CTW1 (Bit 23) */ + #define R_OSPI_DWCSTR_CTW1_Msk (0x800000UL) /*!< CTW1 (Bitfield-Mask: 0x01) */ + #define R_OSPI_DWCSTR_DVWCMD1_Pos (24UL) /*!< DVWCMD1 (Bit 24) */ + #define R_OSPI_DWCSTR_DVWCMD1_Msk (0x7000000UL) /*!< DVWCMD1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DWCSTR_DVWHI1_Pos (27UL) /*!< DVWHI1 (Bit 27) */ + #define R_OSPI_DWCSTR_DVWHI1_Msk (0x38000000UL) /*!< DVWHI1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_DWCSTR_DVWLO1_Pos (30UL) /*!< DVWLO1 (Bit 30) */ + #define R_OSPI_DWCSTR_DVWLO1_Msk (0xc0000000UL) /*!< DVWLO1 (Bitfield-Mask: 0x03) */ +/* ========================================================= DCSTR ========================================================= */ + #define R_OSPI_DCSTR_DVSELCMD_Pos (8UL) /*!< DVSELCMD (Bit 8) */ + #define R_OSPI_DCSTR_DVSELCMD_Msk (0x700UL) /*!< DVSELCMD (Bitfield-Mask: 0x07) */ + #define R_OSPI_DCSTR_DVSELHI_Pos (11UL) /*!< DVSELHI (Bit 11) */ + #define R_OSPI_DCSTR_DVSELHI_Msk (0x3800UL) /*!< DVSELHI (Bitfield-Mask: 0x07) */ + #define R_OSPI_DCSTR_DVSELLO_Pos (14UL) /*!< DVSELLO (Bit 14) */ + #define R_OSPI_DCSTR_DVSELLO_Msk (0xc000UL) /*!< DVSELLO (Bitfield-Mask: 0x03) */ +/* ========================================================= CDSR ========================================================== */ + #define R_OSPI_CDSR_DV0TTYP_Pos (0UL) /*!< DV0TTYP (Bit 0) */ + #define R_OSPI_CDSR_DV0TTYP_Msk (0x3UL) /*!< DV0TTYP (Bitfield-Mask: 0x03) */ + #define R_OSPI_CDSR_DV1TTYP_Pos (2UL) /*!< DV1TTYP (Bit 2) */ + #define R_OSPI_CDSR_DV1TTYP_Msk (0xcUL) /*!< DV1TTYP (Bitfield-Mask: 0x03) */ + #define R_OSPI_CDSR_DV0PC_Pos (4UL) /*!< DV0PC (Bit 4) */ + #define R_OSPI_CDSR_DV0PC_Msk (0x10UL) /*!< DV0PC (Bitfield-Mask: 0x01) */ + #define R_OSPI_CDSR_DV1PC_Pos (5UL) /*!< DV1PC (Bit 5) */ + #define R_OSPI_CDSR_DV1PC_Msk (0x20UL) /*!< DV1PC (Bitfield-Mask: 0x01) */ + #define R_OSPI_CDSR_ACMEME0_Pos (10UL) /*!< ACMEME0 (Bit 10) */ + #define R_OSPI_CDSR_ACMEME0_Msk (0x400UL) /*!< ACMEME0 (Bitfield-Mask: 0x01) */ + #define R_OSPI_CDSR_ACMEME1_Pos (11UL) /*!< ACMEME1 (Bit 11) */ + #define R_OSPI_CDSR_ACMEME1_Msk (0x800UL) /*!< ACMEME1 (Bitfield-Mask: 0x01) */ + #define R_OSPI_CDSR_ACMODE_Pos (12UL) /*!< ACMODE (Bit 12) */ + #define R_OSPI_CDSR_ACMODE_Msk (0x3000UL) /*!< ACMODE (Bitfield-Mask: 0x03) */ + #define R_OSPI_CDSR_DLFT_Pos (31UL) /*!< DLFT (Bit 31) */ + #define R_OSPI_CDSR_DLFT_Msk (0x80000000UL) /*!< DLFT (Bitfield-Mask: 0x01) */ +/* ========================================================= MDLR ========================================================== */ + #define R_OSPI_MDLR_DV0RDL_Pos (0UL) /*!< DV0RDL (Bit 0) */ + #define R_OSPI_MDLR_DV0RDL_Msk (0xffUL) /*!< DV0RDL (Bitfield-Mask: 0xff) */ + #define R_OSPI_MDLR_DV0WDL_Pos (8UL) /*!< DV0WDL (Bit 8) */ + #define R_OSPI_MDLR_DV0WDL_Msk (0xff00UL) /*!< DV0WDL (Bitfield-Mask: 0xff) */ + #define R_OSPI_MDLR_DV1RDL_Pos (16UL) /*!< DV1RDL (Bit 16) */ + #define R_OSPI_MDLR_DV1RDL_Msk (0xff0000UL) /*!< DV1RDL (Bitfield-Mask: 0xff) */ + #define R_OSPI_MDLR_DV1WDL_Pos (24UL) /*!< DV1WDL (Bit 24) */ + #define R_OSPI_MDLR_DV1WDL_Msk (0xff000000UL) /*!< DV1WDL (Bitfield-Mask: 0xff) */ +/* ========================================================= MRWCR ========================================================= */ + #define R_OSPI_MRWCR_DMRCMD0_Pos (0UL) /*!< DMRCMD0 (Bit 0) */ + #define R_OSPI_MRWCR_DMRCMD0_Msk (0xffUL) /*!< DMRCMD0 (Bitfield-Mask: 0xff) */ + #define R_OSPI_MRWCR_DMRCMD1_Pos (8UL) /*!< DMRCMD1 (Bit 8) */ + #define R_OSPI_MRWCR_DMRCMD1_Msk (0xff00UL) /*!< DMRCMD1 (Bitfield-Mask: 0xff) */ + #define R_OSPI_MRWCR_DMWCMD0_Pos (16UL) /*!< DMWCMD0 (Bit 16) */ + #define R_OSPI_MRWCR_DMWCMD0_Msk (0xff0000UL) /*!< DMWCMD0 (Bitfield-Mask: 0xff) */ + #define R_OSPI_MRWCR_DMWCMD1_Pos (24UL) /*!< DMWCMD1 (Bit 24) */ + #define R_OSPI_MRWCR_DMWCMD1_Msk (0xff000000UL) /*!< DMWCMD1 (Bitfield-Mask: 0xff) */ +/* ======================================================== MRWCSR ========================================================= */ + #define R_OSPI_MRWCSR_MRAL0_Pos (0UL) /*!< MRAL0 (Bit 0) */ + #define R_OSPI_MRWCSR_MRAL0_Msk (0x7UL) /*!< MRAL0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MRCL0_Pos (3UL) /*!< MRCL0 (Bit 3) */ + #define R_OSPI_MRWCSR_MRCL0_Msk (0x38UL) /*!< MRCL0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MRO0_Pos (6UL) /*!< MRO0 (Bit 6) */ + #define R_OSPI_MRWCSR_MRO0_Msk (0x40UL) /*!< MRO0 (Bitfield-Mask: 0x01) */ + #define R_OSPI_MRWCSR_PREN0_Pos (7UL) /*!< PREN0 (Bit 7) */ + #define R_OSPI_MRWCSR_PREN0_Msk (0x80UL) /*!< PREN0 (Bitfield-Mask: 0x01) */ + #define R_OSPI_MRWCSR_MWAL0_Pos (8UL) /*!< MWAL0 (Bit 8) */ + #define R_OSPI_MRWCSR_MWAL0_Msk (0x700UL) /*!< MWAL0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MWCL0_Pos (11UL) /*!< MWCL0 (Bit 11) */ + #define R_OSPI_MRWCSR_MWCL0_Msk (0x3800UL) /*!< MWCL0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MWO0_Pos (14UL) /*!< MWO0 (Bit 14) */ + #define R_OSPI_MRWCSR_MWO0_Msk (0x4000UL) /*!< MWO0 (Bitfield-Mask: 0x01) */ + #define R_OSPI_MRWCSR_MRAL1_Pos (16UL) /*!< MRAL1 (Bit 16) */ + #define R_OSPI_MRWCSR_MRAL1_Msk (0x70000UL) /*!< MRAL1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MRCL1_Pos (19UL) /*!< MRCL1 (Bit 19) */ + #define R_OSPI_MRWCSR_MRCL1_Msk (0x380000UL) /*!< MRCL1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MRO1_Pos (22UL) /*!< MRO1 (Bit 22) */ + #define R_OSPI_MRWCSR_MRO1_Msk (0x400000UL) /*!< MRO1 (Bitfield-Mask: 0x01) */ + #define R_OSPI_MRWCSR_PREN1_Pos (23UL) /*!< PREN1 (Bit 23) */ + #define R_OSPI_MRWCSR_PREN1_Msk (0x800000UL) /*!< PREN1 (Bitfield-Mask: 0x01) */ + #define R_OSPI_MRWCSR_MWAL1_Pos (24UL) /*!< MWAL1 (Bit 24) */ + #define R_OSPI_MRWCSR_MWAL1_Msk (0x7000000UL) /*!< MWAL1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MWCL1_Pos (27UL) /*!< MWCL1 (Bit 27) */ + #define R_OSPI_MRWCSR_MWCL1_Msk (0x38000000UL) /*!< MWCL1 (Bitfield-Mask: 0x07) */ + #define R_OSPI_MRWCSR_MWO1_Pos (30UL) /*!< MWO1 (Bit 30) */ + #define R_OSPI_MRWCSR_MWO1_Msk (0x40000000UL) /*!< MWO1 (Bitfield-Mask: 0x01) */ +/* ========================================================== ESR ========================================================== */ + #define R_OSPI_ESR_MRESR_Pos (0UL) /*!< MRESR (Bit 0) */ + #define R_OSPI_ESR_MRESR_Msk (0xffUL) /*!< MRESR (Bitfield-Mask: 0xff) */ + #define R_OSPI_ESR_MWESR_Pos (8UL) /*!< MWESR (Bit 8) */ + #define R_OSPI_ESR_MWESR_Msk (0xff00UL) /*!< MWESR (Bitfield-Mask: 0xff) */ +/* ========================================================= CWNDR ========================================================= */ + #define R_OSPI_CWNDR_WND_Pos (0UL) /*!< WND (Bit 0) */ + #define R_OSPI_CWNDR_WND_Msk (0xffffffffUL) /*!< WND (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= CWDR ========================================================== */ + #define R_OSPI_CWDR_WD0_Pos (0UL) /*!< WD0 (Bit 0) */ + #define R_OSPI_CWDR_WD0_Msk (0xffUL) /*!< WD0 (Bitfield-Mask: 0xff) */ + #define R_OSPI_CWDR_WD1_Pos (8UL) /*!< WD1 (Bit 8) */ + #define R_OSPI_CWDR_WD1_Msk (0xff00UL) /*!< WD1 (Bitfield-Mask: 0xff) */ + #define R_OSPI_CWDR_WD2_Pos (16UL) /*!< WD2 (Bit 16) */ + #define R_OSPI_CWDR_WD2_Msk (0xff0000UL) /*!< WD2 (Bitfield-Mask: 0xff) */ + #define R_OSPI_CWDR_WD3_Pos (24UL) /*!< WD3 (Bit 24) */ + #define R_OSPI_CWDR_WD3_Msk (0xff000000UL) /*!< WD3 (Bitfield-Mask: 0xff) */ +/* ========================================================== CRR ========================================================== */ + #define R_OSPI_CRR_RD0_Pos (0UL) /*!< RD0 (Bit 0) */ + #define R_OSPI_CRR_RD0_Msk (0xffUL) /*!< RD0 (Bitfield-Mask: 0xff) */ + #define R_OSPI_CRR_RD1_Pos (8UL) /*!< RD1 (Bit 8) */ + #define R_OSPI_CRR_RD1_Msk (0xff00UL) /*!< RD1 (Bitfield-Mask: 0xff) */ + #define R_OSPI_CRR_RD2_Pos (16UL) /*!< RD2 (Bit 16) */ + #define R_OSPI_CRR_RD2_Msk (0xff0000UL) /*!< RD2 (Bitfield-Mask: 0xff) */ + #define R_OSPI_CRR_RD3_Pos (24UL) /*!< RD3 (Bit 24) */ + #define R_OSPI_CRR_RD3_Msk (0xff000000UL) /*!< RD3 (Bitfield-Mask: 0xff) */ +/* ========================================================= ACSR ========================================================== */ + #define R_OSPI_ACSR_ACSR0_Pos (0UL) /*!< ACSR0 (Bit 0) */ + #define R_OSPI_ACSR_ACSR0_Msk (0x7UL) /*!< ACSR0 (Bitfield-Mask: 0x07) */ + #define R_OSPI_ACSR_ACSR1_Pos (3UL) /*!< ACSR1 (Bit 3) */ + #define R_OSPI_ACSR_ACSR1_Msk (0x38UL) /*!< ACSR1 (Bitfield-Mask: 0x07) */ +/* ======================================================== DCSMXR ========================================================= */ + #define R_OSPI_DCSMXR_CTWMX0_Pos (0UL) /*!< CTWMX0 (Bit 0) */ + #define R_OSPI_DCSMXR_CTWMX0_Msk (0x1ffUL) /*!< CTWMX0 (Bitfield-Mask: 0x1ff) */ + #define R_OSPI_DCSMXR_CTWMX1_Pos (16UL) /*!< CTWMX1 (Bit 16) */ + #define R_OSPI_DCSMXR_CTWMX1_Msk (0x1ff0000UL) /*!< CTWMX1 (Bitfield-Mask: 0x1ff) */ +/* ======================================================== DWSCTSR ======================================================== */ + #define R_OSPI_DWSCTSR_CTSN0_Pos (0UL) /*!< CTSN0 (Bit 0) */ + #define R_OSPI_DWSCTSR_CTSN0_Msk (0x7ffUL) /*!< CTSN0 (Bitfield-Mask: 0x7ff) */ + #define R_OSPI_DWSCTSR_CTSN1_Pos (16UL) /*!< CTSN1 (Bit 16) */ + #define R_OSPI_DWSCTSR_CTSN1_Msk (0x7ff0000UL) /*!< CTSN1 (Bitfield-Mask: 0x7ff) */ + /** @} */ /* End of group PosMask_peripherals */ #ifdef __cplusplus diff --git a/ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd b/ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd index c9bc9fc08..1d2bd186d 100644 --- a/ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd +++ b/ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd @@ -1,5 +1,5 @@ - - + + Renesas Renesas RA @@ -1202,6 +1202,25 @@ 4 read-write + + ADIE + Scan End Interrupt Enable + 12 + 12 + read-write + + + 0 + Disables S12ADI0 interrupt generation upon scan completion. + #0 + + + 1 + Enables S12ADI0 interrupt generation upon scan completion. + #1 + + + @@ -1503,6 +1522,25 @@ + + DCE + Discharge Enable + 4 + 4 + read-write + + + 0 + Discharge after the A/D conversion is disabled. + #0 + + + 1 + Discharge after the A/D conversion is enabled. + #1 + + + @@ -1653,6 +1691,49 @@ + + EXSEL + Extended Analog Input Select + 14 + 14 + read-write + + + 00 + Analog input channel (ANnXX) + #00 + + + 01 + ANEX1 + #01 + + + others + Setting prohibited. + true + + + + + EXOEN + Extended Analog Output Control + 15 + 15 + read-write + + + 0 + Output is disabled. + #0 + + + 1 + Output is enabled. + #1 + + + @@ -2089,6 +2170,25 @@ + + GBEXTRG + External trigger selection bit for group B. + 8 + 8 + read-write + + + 0 + An external trigger is not selected the trigger of group B. + #0 + + + 1 + An external trigger is selected the trigger of group B. + #1 + + + @@ -3227,6 +3327,82 @@ 0 0 + + P003SEL0 + A through amplifier is enable for PGA P003 + 12 + 12 + read-write + + + 0 + Not through the PGA in amplifier + #0 + + + 1 + I will through in the PGA amplifier. + #1 + + + + + P003SEL1 + The amplifier passing is enable for PGA P003 + 13 + 13 + read-write + + + 0 + By way of the amplifier in PGA. + #0 + + + 1 + Note 1 that by way of amplifier in PGA + #1 + + + + + P003ENAMP + Amplifier enable bit for PGA P003 + 14 + 14 + read-write + + + 0 + The amplifier in PGA is not used. + #0 + + + 1 + The amplifier in PGA is used. + #1 + + + + + P003GEN + PGA P003 gain setting and enable bit + 15 + 15 + read-write + + + 0 + The gain setting is invalidated (AIN is not input in PGA). + #0 + + + 1 + The gain setting is effectively done (AIN is input in PGA). + #1 + + + @@ -3583,70 +3759,159 @@ 0 3 - - - - ADPGADCR0 - A/D Programmable Gain Amplifier Differential Input Control Register - 0x1B0 - 16 - read-write - 0x0000 - 0xFFFF - - P003DG - P003 Differential Input Gain SettingNOTE: When these bits are used, set {P003DEN, P003GEN} to 11b. + P003GAIN + PGA P003 gain setting bit.The gain magnification of (ADPGSDCR0.P003GEN=0b) when the shingle end is input and each PGA P003 is set. When the differential motion is input, (ADPGSDCR0.P003GEN=1b) sets the gain magnification when the differential motion is input by the combination with ADPGSDCR0.P003DG 1:0. 12 - 13 + 15 read-write - 00 - x 1.5 - #00 + 0000 + x 2.000 (ADPGADDCR0.P003DEN=0) + #0000 - 01 - x 2.333 - #01 + 0001 + x 2.500 (ADPGADDCR0.P003DEN=0) / x 1.500 (ADPGADDCR0.P003DEN=1) + #0001 - 10 - x 4.0 - #10 + 0010 + x 2.667 (ADPGADDCR0.P003DEN=0) + #0010 - 11 - x 5.667 - #11 + 0011 + x 2.857 (ADPGADDCR0.P003DEN=0) + #0011 - - - - P002DEN - P002 Differential Input Enable - 11 - 11 - read-write - - 0 - Differential input is disabled. - #0 + 0100 + x 3.077 (ADPGADDCR0.P003DEN=0) + #0100 - 1 - Differential input is enabled. - #1 + 0101 + x 3.333 (ADPGADDCR0.P003DEN=0) / x 2.333 (ADPGADDCR0.P003DEN=1) + #0101 + + + 0110 + x 3.636 (ADPGADDCR0.P003DEN=0) + #0110 + + + 0111 + x 4.000 (ADPGADDCR0.P003DEN=0) + #0111 + + + 1000 + x 4.444 (ADPGADDCR0.P003DEN=0) + #1000 + + + 1001 + x 5.000 (ADPGADDCR0.P003DEN=0) / x 4.00 (ADPGADDCR0.P003DEN=1) + #1001 + + + 1010 + x 5.714 (ADPGADDCR0.P003DEN=0) + #1010 + + + 1011 + x 6.667 (ADPGADDCR0.P003DEN=0) / x 5.667 (ADPGADDCR0.P003DEN=1) + #1011 + + + 1100 + x 8.000 (ADPGADDCR0.P003DEN=0) + #1100 + + + 1101 + x 10.000 (ADPGADDCR0.P003DEN=0) + #1101 + + + 1110 + x 13.333 (ADPGADDCR0.P003DEN=0) + #1110 + + + 1111 + x 1.000 (for offset measurement) (ADPGADDCR0.P003DEN=0) + #1111 + + + + ADPGADCR0 + A/D Programmable Gain Amplifier Differential Input Control Register + 0x1B0 + 16 + read-write + 0x0000 + 0xFFFF + - P002DG - P002 Differential Input Gain SettingNOTE: When these bits are used, set {P002DEN, P002GEN} to 11b. - 8 - 9 + P003DG + P003 Differential Input Gain SettingNOTE: When these bits are used, set {P003DEN, P003GEN} to 11b. + 12 + 13 + read-write + + + 00 + x 1.5 + #00 + + + 01 + x 2.333 + #01 + + + 10 + x 4.0 + #10 + + + 11 + x 5.667 + #11 + + + + + P002DEN + P002 Differential Input Enable + 11 + 11 + read-write + + + 0 + Differential input is disabled. + #0 + + + 1 + Differential input is enabled. + #1 + + + + + P002DG + P002 Differential Input Gain SettingNOTE: When these bits are used, set {P002DEN, P002GEN} to 11b. + 8 + 9 read-write @@ -3767,31936 +4032,9490 @@ - - - - - - R_ADC1 - 0x4005C200 - - - R_AGT0 - Asynchronous General Purpose Timer - 0x40084000 - - 0x00000000 - 0x006 - registers - - - 0x00000008 - 0x003 - registers - - - 0x0000000C - 0x004 - registers - - - - AGT - AGT Counter Register - 0x00 - 16 - read-write - 0xFFFF - 0xFFFF - - - AGT - 16bit counter and reload registerNOTE : When 1 is written to the TSTOP bit in the AGTCRn register, the 16-bit counter is forcibly stopped and set to FFFFH. - 0 - 15 - read-write - - - - - AGTCMA - AGT Compare Match A Register - 0x02 - 16 - read-write - 0xFFFF - 0xFFFF - - - AGTCMA - AGT Compare Match A data is stored.NOTE : When 1 is written to the TSTOP bit in the AGTCRn register, set to FFFFH - 0 - 15 - read-write - - - - - AGTCMB - AGT Compare Match B Register - 0x04 - 16 - read-write - 0xFFFF - 0xFFFF - - AGTCMB - AGT Compare Match B data is stored.NOTE : When 1 is written to the TSTOP bit in the AGTCR register, set to FFFFH - 0 + P003DEN + P003 Differential Input Enable + 15 15 read-write + + + 0 + Differential input is disabled. + #0 + + + 1 + Differential input is enabled. + #1 + + - AGTCR - AGT Control Register - 0x08 + ADREF + A/D status register + 0x002 8 read-write 0x00 0xFF - TCMBF - Compare match B flag - 7 - 7 + ADF + Scanning end flag bitThis bit is a status bit that becomes "1" while scanning. + 0 + 0 read-write zeroToClear modify 0 - No match + State of the idol or scanning. #0 1 - Match. + End of scanning #1 - TCMAF - Compare match A flag - 6 + Reserved + These bits are read as 000000. The write value should be 000000. + 1 6 read-write - zeroToClear - modify + + + ADSCACT + Scanning status bit + 7 + 7 + read-only 0 - No match + State of idol #0 1 - Match. + It is Scanning #1 + + + + ADEXREF + A/D enhancing status register + 0x003 + 8 + read-write + 0x00 + 0xFF + - TUNDF - Underflow flag - 5 - 5 + GBADF + Group B scanning end flag bit. + 0 + 0 read-write zeroToClear modify 0 - No match + State of the idol or scanning. #0 1 - Match. + End of scanning #1 - TEDGF - Active edge judgment flag - 4 - 4 + Reserved + These bits are read as 0000000. The write value should be 0000000. + 1 + 7 + read-write + + + + + ADAMPOFF + A/D RRAMP off state register + 0x062 + 8 + read-write + 0x0C + 0xFF + + + OPOFF + 0 + 7 + read-write + + + + + ADTSTPR + A/D Test Protecting Release Register + 0x063 + 8 + read-write + 0x00 + 0xFF + + + PRO + Test register protecting bit. + 0 + 0 read-write - zeroToClear - modify 0 - No active edge received + R/W is improper of ADEXTSTR, ADTSTRA/B/C/D, and ADSWTSTR0/1/2. #0 1 - Active edge received. + R/W is available of ADEXTSTR, ADTSTRA/B/C/D, and ADSWTSTR0/1/2. #1 - TSTOP - AGT count forced stop + B0WI + Bit 0 writing permission bit. + 1 + 1 + read-write + + + Reserved + These bits are read as 000000. The write value should be 000000. 2 + 7 + read-write + + + + + ADDDACER + A/D RRAMP Discharge Period Register + 0x064 + 16 + read-write + 0x1E03 + 0xFFFF + + + WRION + 0 + 4 + read-write + + + Reserved + These bits are read as 000. The write value should be 000. + 5 + 7 + read-write + + + WRIOFF + 8 + 12 + read-write + + + Reserved + These bits are read as 00. The write value should be 00. + 13 + 14 + read-write + + + ADHS + 15 + 15 + read-write + + + + + ADEXTSTR + A/D Enhancing Test Register + 0x068 + 16 + read-write + 0x0000 + 0xFFFF + + + SHTEST + Test mode bit for S&H circuit.Test mode bit of S&H circuit only for channel. + 0 2 - write-only + read-write + + + Reserved + This bit is read as 0. The write value should be 0. + 3 + 3 + read-write + + + SWTST + Test selection bit for pressure switch. + 4 + 5 + read-write - 0 - Writing is invalid - #0 + 00 + Test non-selection + #00 - 1 - The count is forcibly stopped. - #1 + 01 + Pressure test mode + #01 - - - - TCSTF - AGT count status flag - 1 - 1 - read-only - - 0 - Count stops - #0 + 10 + PMOS test mode + #10 - 1 - Count in progress. - #1 + 11 + Setting prohibited (PMOS test mode) + #11 - TSTART - AGT count start + Reserved + These bits are read as 00. The write value should be 00. + 6 + 7 + read-write + + + SHTRM + Current adjustment trim bit for S&H circuit.Trim bit for adjustment to hardening of process. + 8 + 9 + read-write + + + Reserved + This bit is read as 0. The write value should be 0. + 10 + 10 + read-write + + + ADTRM3 + Trim bit 3 for A/D hard macro.3bit Flash comparator power save bit for A/D hard macro to hardening of process. + 11 + 11 + read-write + + + ADTRM2 + Trim bit 2 for A/D hard macro.Bias adjustment trim bit for A/D hard macro to hardening of process. + 12 + 13 + read-write + + + ADTRM1 + Trim bit 1 for A/D hard macro.Timing adjustment trim bit for A/D hard macro to hardening of process. + 14 + 15 + read-write + + + + + ADTSTRA + A/D Test Register A + 0x06A + 16 + read-write + 0x0000 + 0xFFFF + + + ATBUSSEL + Analog test bus selection bit. 0 0 read-write 0 - Count stops + ATBUS use test non-selection #0 1 - Count starts. + ATBUS use test selection #1 - - - - AGTMR1 - AGT Mode Register 1 - 0x09 - 8 - read-write - 0x00 - 0xFF - - TCK - Count source + TSTSWREF + Pressure switch refreshing setting bit for S&H circuit amplifier test.Refreshing the pressure switch that opens for the DAC output voltage charge period when the amplifier of the S&H circuit is tested only for the channel is set. + 1 + 3 + read-write + + + Reserved + This bit is read as 0. The write value should be 0. 4 - 6 + 4 + read-write + + + OCSW + Internal reference voltage analog switch test control bit. + 5 + 5 read-write - 000 - PCLKB - #000 - - - 001 - PCLKB/8 - #001 - - - 011 - PCLKB/2 - #011 - - - 100 - Divided clock AGTLCLK specified by CKS[2:0] bits in the AGTMR2 register - #100 - - - 101 - Underflow event signal from AGT0*6 - #101 - - - 110 - Divided clock AGTSCLK specified by CKS[2:0] bits in the AGTMR2 register. - #110 + 0 + Internal reference voltage analog switch H/W control + #0 - others - settings are prohibited. - true + 1 + Internal reference voltage analog switch ON + #1 - TEDGPL - Edge polarity - 3 - 3 + TSSW + Temperature sensor output analogue switch test control bit + 6 + 6 read-write 0 - Single-edge + Temperature sensor output analogue switch H/W control #0 1 - Both-edge. + Temperature sensor output analogue switch ON #1 - TMOD - Operating mode - 0 - 2 + Reserved + This bit is read as 0. The write value should be 0. + 7 + 7 + read-write + + + ADTEST_AD + Test bit for A/D analog module Bit for test of A/D analog module Details are described to the bit explanation. + 8 + 11 read-write - 000 - Timer mode - #000 + 0000 + Conversion mode usually + #0000 - 001 - Pulse output mode - #001 + 0001 + Self Test(VRB) + #0001 - 010 - Event counter mode - #010 + 0010 + Self Test(1/4) + #0010 - 011 - Pulse width measurement mode - #011 + 0011 + Self Test(2/4) + #0011 - 100 - Pulse period measurement mode. - #100 + 0100 + Self Test(3/4) + #0100 + + + 0101 + Self Test(VRT) + #0101 + + + 1001 + ADCOM input test + #1001 + + + 1100 + Resistance DAC output test + #1100 + + + 1101 + ADVAL input test + #1101 others - settings are prohibited + Setting prohibited true + + ADTEST_IO + Test bit for analog I/ODetails are described to the bit explanation. + 12 + 15 + read-write + - AGTMR2 - AGT Mode Register 2 - 0x0A - 8 + ADTSTRB + A/D Test Register B + 0x06C + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - LPM - Low Power Mode - 7 - 7 + ADVAL + Signal input bit bit14-0 for A/D analog module test.It corresponds to ADVAL 14:0 input of A/D analog module. + 0 + 14 read-write - - - 0 - Normal mode + + + Reserved + This bit is read as 0. The write value should be 0. + 15 + 15 + read-write + + + + + ADTSTRC + A/D Test Register C + 0x06E + 16 + read-write + 0x0000 + 0xFFFF + + + ADMD + Bit for A/D analog module test.ADMODE 6:0 input of A/D analog module. + 0 + 7 + read-write + + + Reserved + These bits are read as 0000. The write value should be 0000. + 8 + 11 + read-write + + + SYNCERR + Synchronous analog to digital conversion error bit. + 12 + 12 + read-write + + + 0 + A/D analog module and the A/D control part (soft macro part) are lights as for synchronization or 0. #0 1 - Low Power mode + Neither A/D analog module nor the A/D control part (soft macro part) have synchronized nor it is a light as for one. #1 - CKS - AGTLCLK/AGTSCLK count source clock frequency division ratio + Reserved + These bits are read as 000. The write value should be 000. + 13 + 15 + read-write + + + + + ADTSTRD + A/D Test Register D + 0x070 + 16 + read-write + 0x0000 + 0xFFFF + + + ADVAL16 + Signal input bit bit16 for A/D analog module test.It corresponds to ADVAL 16 input of A/D analog module. + 0 + 0 + read-write + + + Reserved + These bits are read as 000000000000000. The write value should be 000000000000000. + 1 + 15 + read-write + + + + + ADSWTSTR0 + A/D Channel Switch Test Control Register 0 + 0x072 + 16 + read-write + 0x0000 + 0xFFFF + + + CHSW00 + Channel switch test control bit. 0 + 0 + read-write + + + 0 + ch00 switch OFF + #0 + + + 1 + ch00 switch ON + #1 + + + + + CHSW01 + Channel switch test control bit. + 1 + 1 + read-write + + + 0 + ch01 switch OFF + #0 + + + 1 + ch01 switch ON + #1 + + + + + CHSW02 + Channel switch test control bit. + 2 2 read-write - 000 - 1/1 - #000 + 0 + ch02 switch OFF + #0 - 001 - 1/2 - #001 + 1 + ch02 switch ON + #1 + + + + CHSW03 + Channel switch test control bit. + 3 + 3 + read-write + - 010 - 1/4 - #010 + 0 + ch03 switch OFF + #0 - 011 - 1/8 - #011 + 1 + ch03 switch ON + #1 + + + + CHSW04 + Channel switch test control bit. + 4 + 4 + read-write + - 100 - 1/16 - #100 + 0 + ch04 switch OFF + #0 - 101 - 1/32 - #101 + 1 + ch04 switch ON + #1 + + + + CHSW05 + Channel switch test control bit. + 5 + 5 + read-write + - 110 - 1/64 - #110 + 0 + ch05 switch OFF + #0 - 111 - 1/128. - #111 + 1 + ch05 switch ON + #1 + + Reserved + These bits are read as 0000000000. The write value should be 0000000000. + 6 + 15 + read-write + - AGTIOC - AGT I/O Control Register - 0x0C - 8 + ADSWTSTR1 + A/D Channel Switch Test Control Register 1 + 0x074 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - TIOGT - Count control - 6 - 7 + CHSW16 + Channel switch test control bit. + 0 + 0 read-write - 00 - Event is always counted - #00 + 0 + ch16 switch OFF + #0 - 01 - Event is counted during polarity period specified for AGTEEn. - #01 + 1 + ch16 switch ON + #1 + + + + + CHSW17 + Channel switch test control bit. + 1 + 1 + read-write + + + 0 + ch17 switch OFF + #0 - others - settings are prohibited. - true + 1 + ch17 switch ON + #1 - TIPF - Input filter - 4 - 5 + CHSW18 + Channel switch test control bit. + 2 + 2 read-write - 00 - No filter - #00 + 0 + ch18 switch OFF + #0 - 01 - Filter sampled at PCLKB - #01 + 1 + ch18 switch ON + #1 + + + + CHSW19 + Channel switch test control bit. + 3 + 3 + read-write + - 10 - Filter sampled at PCLKB/8 - #10 + 0 + ch19 switch OFF + #0 - 11 - Filter sampled at PCLKB/32 - #11 + 1 + ch19 switch ON + #1 - TOE - AGTOn output enable - 2 - 2 + CHSW20 + Channel switch test control bit. + 4 + 4 read-write 0 - AGTOn output disabled + ch20 switch OFF #0 1 - AGTOn output enabled. + ch20 switch ON #1 - TEDGSEL - I/O polarity switchFunction varies depending on the operating mode. - 0 - 0 + CHSW21 + Channel switch test control bit. + 5 + 5 + read-write + + + 0 + ch21 switch OFF + #0 + + + 1 + ch21 switch ON + #1 + + + + + Reserved + These bits are read as 0000000000. The write value should be 0000000000. + 6 + 15 read-write - AGTISR - AGT Event Pin Select Register - 0x0D - 8 + ADSWTSTR2 + A/D Channel Switch Test Control Register 2 + 0x076 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - EEPS - AGTEE polarty selection + EX0SW + Test control of 0 enhancing input channel switches bit (ANEX0 switch) + 0 + 0 + read-write + + + 0 + Channel switch OFF + #0 + + + 1 + Channel switch ON + #1 + + + + + EX1SW + Test control of one enhancing input channel switch bit (ANEX1 switch). + 1 + 1 + read-write + + + 0 + Channel switch OFF + #0 + + + 1 + Channel switch ON + #1 + + + + + Reserved + These bits are read as 00. The write value should be 00. 2 - 2 + 3 + read-write + + + SHBYPS0 + S&H circuit by-pass switch control bit 0. + 4 + 4 read-write 0 - An event is counted during the low-level period + S&H by-pass switch OFF #0 1 - An event is counted during the high-level period + S&H by-pass switch ON #1 - - - - AGTCMSR - AGT Compare Match Function Select Register - 0x0E - 8 - read-write - 0x00 - 0xFF - - TOPOLB - AGTOB polarity select + SHBYPS1 + S&H circuit by-pass switch control bit 1. + 5 + 5 + read-write + + + 0 + S&H by-pass switch OFF + #0 + + + 1 + S&H by-pass switch ON + #1 + + + + + SHBYPS2 + S&H circuit by-pass switch control bit 2. 6 6 read-write 0 - AGTOB Output is started at low + S&H by-pass switch OFF #0 1 - AGTOB Output is started at high + S&H by-pass switch ON #1 - TOEB - AGTOB output enable - 5 - 5 + Reserved + This bit is read as 0. The write value should be 0. + 7 + 7 + read-write + + + GRP0SW + Test control of 0 group switches bit. + 8 + 8 read-write 0 - AGTOB output disabled (port) + Channel switch OFF #0 1 - AGTOB output enabled + Channel switch ON #1 - TCMEB - Compare match B register enable - 4 - 4 + GRP1SW + Test control of one group switch bit. + 9 + 9 read-write 0 - Disable compare match B register + Channel switch OFF #0 1 - Enable compare match B register + Channel switch ON #1 - TOPOLA - AGTOA polarity select - 2 - 2 + GRP2SW + Test control of two group switches bit + 10 + 10 read-write 0 - AGTOA Output is started at low + Channel switch OFF #0 1 - AGTOA Output is started at high + Channel switch ON #1 - TOEA - AGTOA output enable - 1 - 1 + GRP3SW + Test control of two group switches bit + 11 + 11 read-write 0 - AGTOA output disabled (port) + Channel switch OFF #0 1 - AGTOA output enabled + Channel switch ON #1 - TCMEA - Compare match A register enable - 0 - 0 + GRPEX1SW + Switch test control bit of enhancing analog ANEX1 + 12 + 12 read-write 0 - Disable compare match A register + Enhancing analog ANEX1 switch OFF #0 1 - Enable compare match A register + Enhancing analog ANEX1 switch ON #1 + + Reserved + These bits are read as 000. The write value should be 000. + 13 + 15 + read-write + - AGTIOSEL - AGT Pin Select Register - 0x0F + ADSWCR + A/D Pressure Switch Control Register + 0x07B 8 read-write 0x00 0xFF - TIES - AGTIO input enable + ADSWREF + These bits are read as 0. The write value should be 0.Refreshing the pressure switch in A/D analog module is set. + 0 + 2 + read-write + + + Reserved + This bit is read as 0. The write value should be 0. + 3 + 3 + read-write + + + SHSWREF + S&H Boost Switch Refresh Interval Setting 4 - 4 + 6 read-write - 0 - External event input is disabled during Software Standby mode - #0 + 000 + Non-Refresh + #000 - 1 - External event input is enabled during Software Standby mode. - #1 + 001 + 64 * ADCLK (Refresh Interval) / 1 * ADCLK (Refresh Period) + #001 + + + 010 + 32 * ADCLK (Refresh Interval) / 1 * ADCLK (Refresh Period) + #010 + + + 011 + 16 * ADCLK (Refresh Interval) / 1 * ADCLK (Refresh Period) + #011 + + + 100 + 128 * ADCLK (Refresh Interval) / 8 * ADCLK (Refresh Period) + #100 + + + 101 + 64 * ADCLK (Refresh Interval) / 8 * ADCLK (Refresh Period) + #101 + + + 110 + 32 * ADCLK (Refresh Interval) / 8 * ADCLK (Refresh Period) + #110 + + + 111 + 16 * ADCLK (Refresh Interval) / 8 * ADCLK (Refresh Period) + #111 + + Reserved + This bit is read as 0. The write value should be 0. + 7 + 7 + read-write + - - - - R_AGT1 - 0x40084100 - - - R_BUS - Bus Interface - 0x40003000 - - 0x00000002 - 0x00A - registers - - - 0x00000012 - 0x00A - registers - - - 0x00000022 - 0x00A - registers - - - 0x00000032 - 0x00A - registers - - - 0x00000042 - 0x00A - registers - - - 0x00000052 - 0x00A - registers - - - 0x00000062 - 0x00A - registers - - - 0x00000072 - 0x00A - registers - - - 0x00000802 - 0x02 - registers - - - 0x0000080A - 0x02 - registers - - - 0x00000812 - 0x02 - registers - - - 0x0000081A - 0x02 - registers - - - 0x00000822 - 0x02 - registers - - - 0x0000082A - 0x02 - registers - - - 0x00000832 - 0x02 - registers - - - 0x0000083A - 0x02 - registers - - - 0x00000842 - 0x02 - registers - - - 0x0000084A - 0x02 - registers - - - 0x00000852 - 0x02 - registers - - - 0x0000085A - 0x02 - registers - - - 0x00000862 - 0x02 - registers - - - 0x0000086A - 0x02 - registers - - - 0x00000872 - 0x02 - registers - - - 0x0000087A - 0x02 - registers - - - 0x00000880 - 0x02 - registers - - - 0x00000C00 - 0x003 - registers - - - 0x00000C10 - 0x01 - registers - - - 0x00000C14 - 0x003 - registers - - - 0x00000C20 - 0x01 - registers - - - 0x00000C24 - 0x02 - registers - - - 0x00000C40 - 0x01 - registers - - - 0x00000C44 - 0x006 - registers - - - 0x00000C50 - 0x01 - registers - - - 0x00001000 - 0x02 - registers - - - 0x00001004 - 0x02 - registers - - - 0x00001008 - 0x02 - registers - - - 0x0000100C - 0x02 - registers - - - 0x00001010 - 0x02 - registers - - - 0x00001014 - 0x02 - registers - - - 0x00001100 - 0x02 - registers - - - 0x00001104 - 0x02 - registers - - - 0x00001108 - 0x02 - registers - - - 0x0000110C - 0x02 - registers - - - 0x00001110 - 0x02 - registers - - - 0x00001114 - 0x02 - registers - - - 0x00001118 - 0x02 - registers - - - 0x0000111C - 0x02 - registers - - - 0x00001120 - 0x02 - registers - - - 0x00001124 - 0x02 - registers - - - 0x00001128 - 0x02 - registers - - - 0x0000112C - 0x02 - registers - - - 0x00001130 - 0x02 - registers - - - 0x00001134 - 0x02 - registers - - - 0x00001138 - 0x02 - registers - - - 0x0000113C - 0x02 - registers - - - 0x00001800 - 0x005 - registers - - - 0x00001810 - 0x005 - registers - - - 0x00001820 - 0x005 - registers - - - 0x00001830 - 0x005 - registers - - - 0x00001840 - 0x005 - registers - - - 0x00001850 - 0x005 - registers - - - 0x00001860 - 0x005 - registers - - - 0x00001870 - 0x005 - registers - - - 0x00001880 - 0x005 - registers - - - 0x00001890 - 0x005 - registers - - - 0x000018A0 - 0x005 - registers - - - - 8 - 0x10 - CSa[%s] - CS Registers - 0x0000 - - MOD - Mode Register - 0x0002 - 16 - read-write - 0x0000 - 0xFFFF - - - PRMOD - Page Read Access Mode Select - 15 - 15 - read-write - - - 0 - Normal access compatible mode - #0 - - - 1 - External data read continuous assertion mode - #1 - - - - - PWENB - Page Write Access Enable - 9 - 9 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - PRENB - Page Read Access Enable - 8 - 8 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - EWENB - External Wait Enable - 3 - 3 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - WRMOD - Write Access Mode Select - 0 - 0 - read-write - - - 0 - Byte strobe mode - #0 - - - 1 - Single write strobe mode - #1 - - - - - - - WCR1 - Wait Control Register 1 - 0x0004 - 32 - read-write - 0x07070707 - 0xFFFFFFFF - - - CSRWAIT - Normal Read Cycle Wait Select - 24 - 28 - read-write - - - 0x00 - No wait is inserted. - 0x00 - - - others - Wait with a length of CSRWAIT clock cycle is inserted. - true - - - - - CSWWAIT - Normal Write Cycle Wait Select - 16 - 20 - read-write - - - 0x00 - No wait is inserted. - 0x00 - - - others - Wait with a length of CSWWAIT clock cycle is inserted. - true - - - - - CSPRWAIT - Page Read Cycle Wait SelectNOTE: The CSPRWAIT value is valid only when the PRENB bit in CSnMOD is set to 1. - 8 - 10 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of CSPRWAIT clock cycle is inserted. - true - - - - - CSPWWAIT - Page Write Cycle Wait SelectNOTE: The CSPWWAIT value is valid only when the PWENB bit in CSnMOD is set to 1. - 0 - 2 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of CSPWWAIT clock cycle is inserted. - true - - - - - - - WCR2 - Wait Control Register 2 - 0x0008 - 32 - read-write - 0x00000007 - 0xFFFFFFFF - - - CSON - CS Assert Wait Select - 28 - 30 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of CSON clock cycle is inserted. - true - - - - - WDON - Write Data Output Wait Select - 24 - 26 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of WDON clock cycle is inserted. - true - - - - - WRON - WR Assert Wait Select - 20 - 22 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of WRON clock cycle is inserted. - true - - - - - RDON - RD Assert Wait Select - 16 - 18 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of RDON clock cycle is inserted. - true - - - - - AWAIT - CS Assert Wait Select - 12 - 13 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of AWAIT clock cycle is inserted. - true - - - - - WDOFF - Write Data Output Extension Cycle Select - 8 - 10 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of WDOFF clock cycle is inserted. - true - - - - - CSWOFF - Write-Access CS Extension Cycle Select - 4 - 6 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of CSWOFF clock cycle is inserted. - true - - - - - CSROFF - Read-Access CS Extension Cycle Select - 0 - 2 - read-write - - - 0x0 - No wait is inserted. - 0x0 - - - others - Wait with a length of CSROFF clock cycle is inserted. - true - - - - - - - - 8 - 0x10 - CSb[%s] - CS Registers - 0x0800 - - CR - Control Register - 0x002 - 16 - read-write - 0x0000 - 0xFFFF - - - MPXEN - Address/Data Multiplexed I/O Interface Select - 12 - 12 - read-write - - - 0 - Separate bus interface is selected for area n - #0 - - - 1 - Address/data multiplexed I/O interface is selected for area n. (n = 0 to 7) - #1 - - - - - EMODE - Endian Mode - 8 - 8 - read-write - - - 0 - Little Endian - #0 - - - 1 - Big Endian - #1 - - - - - BSIZE - External Bus Width Select - 4 - 5 - read-write - - - 00 - A 16-bit bus space - #00 - - - 01 - Setting prohibited - #01 - - - 10 - An 8-bit bus space - #10 - - - 11 - Setting prohibited - #11 - - - - - EXENB - Operation Enable - 0 - 0 - read-write - - - 0 - Disable operation - #0 - - - 1 - Enable operation - #1 - - - - - - - REC - Recovery Cycle Register - 0x00A - 16 - read-write - 0x0000 - 0xFFFF - - - WRCV - Write Recovery - 8 - 11 - read-write - - - 0x0 - No recovery cycle is inserted. - 0x0 - - - others - WRCV recovery cycle is inserted. - true - - - - - RRCV - Read Recovery - 0 - 3 - read-write - - - 0x0 - No recovery cycle is inserted. - 0x0 - - - others - RRCV recovery cycle is inserted. - true - - - - - - - - SDRAM - SDRAM Registers - 0x0C00 - - SDCCR - SDC Control Register - 0x00 - 8 - read-write - 0x00 - 0xFF - - - BSIZE - SDRAM Bus Width Select - 4 - 5 - read-write - - - 00 - A 16-bit bus space - #00 - - - 01 - Setting prohibited - #01 - - - 10 - An 8-bit bus space - #10 - - - 11 - Setting prohibited - #11 - - - - - EXENB - Operation Enable - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - - - SDCMOD - SDC Mode Register - 0x01 - 8 - read-write - 0x00 - 0xFF - - - EMODE - Endian Mode - 0 - 0 - read-write - - - 0 - Endian order of SDRAM address space is the same as the endian order of the operating mode - #0 - - - 1 - Endian order of SDRAM address space is not the endian order of the operating mode. - #1 - - - - - - - SDAMOD - SDRAM Access Mode Register - 0x02 - 8 - read-write - 0x00 - 0xFF - - - BE - Continuous Access Enable - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable. - #1 - - - - - - - SDSELF - SDRAM Self-Refresh Control Register - 0x10 - 8 - read-write - 0x00 - 0xFF - - - SFEN - SDRAM Self-Refresh Enable - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - - - SDRFCR - SDRAM Refresh Control Register - 0x14 - 16 - read-write - 0x0001 - 0xFFFF - - - REFW - Auto-Refresh Cycle/ Self-Refresh Clearing Cycle Count Setting. ( REFW+1 Cycles ) - 12 - 15 - read-write - - - RFC - Auto-Refresh Request Interval Setting - 0 - 11 - read-write - - - 0x0 - Setting prohibited - 0x0 - - - others - RFC+1 cycles inserted - true - - - - - - - SDRFEN - SDRAM Auto-Refresh Control Register - 0x16 - 8 - read-write - 0x00 - 0xFF - - - RFEN - Auto-Refresh Operation Enable - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - - - SDICR - SDRAM Initialization Sequence Control Register - 0x20 - 8 - read-write - 0x00 - 0xFF - - - INIRQ - Initialization Sequence Start - 0 - 0 - read-write - - - 0 - Invalid - #0 - - - 1 - Initialization sequence starts - #1 - - - - - - - SDIR - SDRAM Initialization Register - 0x24 - 16 - read-write - 0x0010 - 0xFFFF - - - PRC - Initialization Precharge Cycle Count ( PRF+3 cycles ) - 8 - 10 - read-write - - - ARFC - Initialization Auto-Refresh Count - 4 - 7 - read-write - - - 0x0 - Setting prohibited - 0x0 - - - others - ARFC+1 times - true - - - - - ARFI - Initialization Auto-Refresh Interval ( PRF+3 cycles ) - 0 - 3 - read-write - - - - - SDADR - SDRAM Address Register - 0x40 - 8 - read-write - 0x00 - 0xFF - - - MXC - Address Multiplex Select - 0 - 1 - read-write - - - 00 - 8-bit shift - #00 - - - 01 - 9-bit shift - #01 - - - 10 - 10-bit shift - #10 - - - 11 - 11-bit shift - #11 - - - - - - - SDTR - SDRAM Timing Register - 0x44 - 32 - read-write - 0x00000002 - 0xFFFFFFFF - - - RAS - Row Active Interval - 16 - 18 - read-write - - - 000 - 1 cycle - #000 - - - 001 - 2 cycles - #001 - - - 010 - 3 cycles - #010 - - - 011 - 4 cycles - #011 - - - 100 - 5 cycles - #100 - - - 101 - 6 cycles - #101 - - - 110 - 7 cycles - #110 - - - 111 - Setting prohibited - #111 - - - - - RCD - Row Column Latency ( RCD+1 cycles ) - 12 - 13 - read-write - - - RP - Row Precharge Interval ( RP+1 cycles ) - 9 - 11 - read-write - - - WR - Write Recovery Interval - 8 - 8 - read-write - - - 0 - 1 cycle - #0 - - - 1 - 2 cycles - #1 - - - - - CL - SDRAMC Column Latency - 0 - 2 - read-write - - - 001 - 1 cycle - #001 - - - 010 - 2 cycles - #010 - - - 011 - 3 cycles - #011 - - - others - Setting prohibited - true - - - - - - - SDMOD - SDRAM Mode Register - 0x48 - 16 - read-write - 0x0000 - 0xFFFF - - - MR - Mode Register SettingWriting to these bits: Mode register set command is issued. - 0 - 14 - read-write - - - - - SDSR - SDRAM Status Register - 0x50 - 8 - read-only - 0x00 - 0xFF - - - SRFST - Self-Refresh Transition/Recovery Status - 4 - 4 - read-only - - - 0 - Transition/recovery not in progress - #0 - - - 1 - Transition/recovery in progress - #1 - - - - - INIST - Initialization Status - 3 - 3 - read-only - - - 0 - Initialization sequence not in progress - #0 - - - 1 - Initialization sequence in progress - #1 - - - - - MRSST - Mode Register Setting Status - 0 - 0 - read-only - - - 0 - Mode register setting not in progress - #0 - - - 1 - Mode register setting in progress - #1 - - - - - - - - 11 - 0x10 - - - BUS1 - BUS1 - 0 - - - BUS2 - BUS2 - 1 - - - BUS3 - BUS3 - 2 - - - BUS4 - BUS4 - 3 - - - BUS5 - BUS5 - 4 - - - BUS6 - BUS6 - 5 - - - BUS7 - BUS7 - 6 - - - BUS8 - BUS8 - 7 - - - BUS9 - BUS9 - 8 - - - BUS10 - BUS10 - 9 - - - BUS11 - BUS11 - 10 - - - BUSERR[%s] - Bus Error Registers - 0x1800 - - ADD - Bus Error Address Register - 0x00 - 32 - read-only - 0x00000000 - 0x00000000 - - - BERAD - Bus Error AddressWhen a bus error occurs, It stores an error address. - 0 - 31 - read-only - - - - - STAT - Bus Error Status Register - 0x04 - 8 - read-only - 0x00 - 0xFE - - - ERRSTAT - Bus Error StatusWhen bus error assert, error flag occurs. - 7 - 7 - read-only - - - 0 - No bus error occurred - #0 - - - 1 - Bus error occurred - #1 - - - - - ACCSTAT - Error access statusThe status at the time of the error - 0 - 0 - read-only - - - 0 - Read access - #0 - - - 1 - Write Access - #1 - - - - - - - - 6 - 0x4 - - - M4I - M4I - 0 - - - M4D - M4D - 1 - - - SYS - SYS - 2 - - - DMA - DMA - 3 - - - EDM - EDM - 4 - - - GPX - GPX - 5 - - - BUSM[%s] - Master Bus Control Register Array - 0x1000 - - CNT - Master Bus Control Register - 0x0 - 16 - read-write - 0x0000 - 0xFFFF - - - IERES - Ignore Error Responses - 15 - 15 - read-write - - - 0 - Bus error will be reported. - #0 - - - 1 - Bus error will not be reported. - #1 - - - - - - - - 16 - 0x4 - - - FLI - FLI - 0 - - - RAMH - RAMH - 1 - - - MBIU - MBIU - 2 - - - RAM0 - RAM0 - 3 - - - RAM1 - RAM1 - 4 - - - P0B - P0B - 5 - - - P2B - P2B - 6 - - - P3B - P3B - 7 - - - P4B - P4B - 8 - - - PxB - PxB - 9 - - - P6B - P6B - 10 - - - P7B - P7B - 11 - - - FBU - FBU - 12 - - - EXT - EXT - 13 - - - EXT2 - EXT2 - 14 - - - GPX - GPX - 15 - - - BUSS[%s] - Slave Bus Control Register Array - 0x1100 - - CNT - Slave Bus Control Register - 0x00 - 16 - read-write - 0x0000 - 0xFFFF - - - ARBMET - Arbitration MethodSpecify the priority between groups - 4 - 5 - read-write - - - 00 - fixed priority - #00 - - - 01 - round-robin - #01 - - - others - Setting prohibited - true - - - - - - - - CSRECEN - CS Recovery Cycle Insertion Enable Register - 0x0880 - 16 - read-write - 0x3E3E - 0xFFFF - - - 8 - 1 - RCVENM%s - Multiplexed Bus Recovery Cycle Insertion Enable - 8 - 8 - read-write - - - 0 - Recovery cycle insertion is disabled. - #0 - - - 1 - Recovery cycle insertion is enabled. - #1 - - - - - 8 - 1 - RCVEN%s - Separate Bus Recovery Cycle Insertion Enable - 0 - 0 - read-write - - - 0 - Recovery cycle insertion is disabled. - #0 - - - 1 - Recovery cycle insertion is enabled. - #1 - - - - - - - - - R_CAC - Clock Frequency Accuracy Measurement Circuit - 0x40044600 - - 0x00000000 - 0x005 - registers - - - 0x00000006 - 0x006 - registers - - - - CACR0 - CAC Control Register 0 - 0x00 - 8 - read-write - 0x00 - 0xFF - - - CFME - Clock Frequency Measurement Enable. - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - - - CACR1 - CAC Control Register 1 - 0x01 - 8 - read-write - 0x00 - 0xFF - - - EDGES - Valid Edge Select - 6 - 7 - read-write - - - 00 - Rising edge - #00 - - - 01 - Falling edge - #01 - - - 10 - Both rising and falling edges - #10 - - - 11 - Setting prohibited - #11 - - - - - TCSS - Measurement Target Clock Frequency Division Ratio Select - 4 - 5 - read-write - - - 00 - No division - #00 - - - 01 - x 1/4 clock - #01 - - - 10 - x 1/8 clock - #10 - - - 11 - x 1/32 clock - #11 - - - - - FMCS - Measurement Target Clock Select - 1 - 3 - read-write - - - 000 - Main clock - #000 - - - 001 - Sub-clock - #001 - - - 010 - HOCO clock - #010 - - - 011 - MOCO clock - #011 - - - 100 - LOCO clock - #100 - - - 101 - Peripheral module clock(PCLKB) - #101 - - - 110 - IWDTCLK clock - #110 - - - 111 - Setting prohibited - #111 - - - - - CACREFE - CACREF Pin Input Enable - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - - - CACR2 - CAC Control Register 2 - 0x02 - 8 - read-write - 0x00 - 0xFF - - - DFS - Digital Filter Selection - 6 - 7 - read-write - - - 00 - Digital filtering is disabled. - #00 - - - 01 - The sampling clock for the digital filter is the frequency measuring clock. - #01 - - - 10 - The sampling clock for the digital filter is the frequency measuring clock divided by 4. - #10 - - - 11 - The sampling clock for the digital filter is the frequency measuring clock divided by 16. - #11 - - - - - RCDS - Measurement Reference Clock Frequency Division Ratio Select - 4 - 5 - read-write - - - 00 - 1/32 clock - #00 - - - 01 - 1/128 clock - #01 - - - 10 - 1/1024 clock - #10 - - - 11 - 1/8192 clock - #11 - - - - - RSCS - Measurement Reference Clock Select - 1 - 3 - read-write - - - 000 - Main clock - #000 - - - 001 - Sub-clock - #001 - - - 010 - HOCO clock - #010 - - - 011 - MOCO clock - #011 - - - 100 - LOCO clock - #100 - - - 101 - Peripheral module clock(PCLKB) - #101 - - - 110 - IWDTCLK clock - #110 - - - 111 - Setting prohibited - #111 - - - - - RPS - Reference Signal Select - 0 - 0 - read-write - - - 0 - CACREF pin input - #0 - - - 1 - Internal clock (internally generated signal) - #1 - - - - - - - CAICR - CAC Interrupt Control Register - 0x03 - 8 - read-write - 0x00 - 0xFF - - - OVFFCL - OVFF Clear - 6 - 6 - write-only - - - 0 - No effect on operations - #0 - - - 1 - Clears the OVFF flag - #1 - - - - - MENDFCL - MENDF Clear - 5 - 5 - write-only - - - 0 - No effect on operations - #0 - - - 1 - Clears the MENDF flag - #1 - - - - - FERRFCL - FERRF Clear - 4 - 4 - write-only - - - 0 - No effect on operations - #0 - - - 1 - Clears the FERRF flag - #1 - - - - - OVFIE - Overflow Interrupt Request Enable - 2 - 2 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - MENDIE - Measurement End Interrupt Request Enable - 1 - 1 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - FERRIE - Frequency Error Interrupt Request Enable - 0 - 0 - read-write - - - 0 - Disable - #0 - - - 1 - Enable - #1 - - - - - - - CASTR - CAC Status Register - 0x04 - 8 - read-only - 0x00 - 0xFF - - - OVFF - Counter Overflow Flag - 2 - 2 - read-only - - - 0 - The counter has not overflowed. - #0 - - - 1 - The counter has overflowed. - #1 - - - - - MENDF - Measurement End Flag - 1 - 1 - read-only - - - 0 - Measurement is in progress. - #0 - - - 1 - Measurement has ended. - #1 - - - - - FERRF - Frequency Error Flag - 0 - 0 - read-only - - - 0 - The clock frequency is within the range corresponding to the settings. - #0 - - - 1 - The clock frequency has deviated beyond the range corresponding to the settings (frequency error). - #1 - - - - - - - CAULVR - CAC Upper-Limit Value Setting Register - 0x06 - 16 - read-write - 0x0000 - 0xFFFF - - - CAULVR - CAULVR is a 16-bit readable/writable register that stores the upper-limit value of the frequency. - 0 - 15 - read-write - - - - - CALLVR - CAC Lower-Limit Value Setting Register - 0x08 - 16 - read-write - 0x0000 - 0xFFFF - - - CALLVR - CALLVR is a 16-bit readable/writable register that stores the lower-limit value of the frequency. - 0 - 15 - read-write - - - - - CACNTBR - CAC Counter Buffer Register - 0x0A - 16 - read-only - 0x0000 - 0xFFFF - - - CACNTBR - CACNTBR is a 16-bit read-only register that retains the counter value at the time a valid reference signal edge is input - 0 - 15 - read-only - - - - - - - R_CAN0 - Controller Area Network (CAN) Module - 0x40050000 - - 0x00000200 - 0x230 - registers - - - 0x00000820 - 0x039 - registers - - - - 32 - 0x10 - MB[%s] - Mailbox - 0x200 - - ID - Mailbox ID Register - 0x0 - 32 - read-write - 0x00000000 - 0x00000000 - - - IDE - ID Extension - 31 - 31 - read-write - - - 0 - Standard ID - #0 - - - 1 - Extended ID - #1 - - - - - RTR - Remote Transmission Request - 30 - 30 - read-write - - - 0 - Data frame - #0 - - - 1 - Remote frame - #1 - - - - - SID - Standard ID - 18 - 28 - read-write - - - EID - Extended ID - 0 - 17 - read-write - - - - - DL - Mailbox DLC Register - 0x4 - 16 - read-write - 0x0000 - 0x0000 - - - DLC - Data Length Code - 0 - 3 - read-write - - - 0000 - Data length = 0 byte - #0000 - - - 0001 - Data length = 1 byte - #0001 - - - 0010 - Data length = 2 bytes - #0010 - - - 0011 - Data length = 3 bytes - #0011 - - - 0100 - Data length = 4 bytes - #0100 - - - 0101 - Data length = 5 bytes - #0101 - - - 0110 - Data length = 6 bytes - #0110 - - - 0111 - Data length = 7 bytes - #0111 - - - others - Data length = 8 bytes - true - - - - - - - 8 - 0x01 - D[%s] - Mailbox Data Register - 0x6 - 8 - read-write - 0x00 - 0x00 - - - DATA - DATA0 to DATA7 store the transmitted or received CAN message data. Transmission or reception starts from DATA0. The bit order on the CAN bus is MSB-first, and transmission or reception starts from bit 7 - 0 - 7 - read-write - - - - - TS - Mailbox Timestamp Register - 0xE - 16 - read-write - 0x0000 - 0x0000 - - - TSH - Time Stamp Lower ByteBits TSH[7:0] store the counter value of the time stamp when received messages are stored in the mailbox. - 8 - 15 - read-write - - - TSL - Time Stamp Higher ByteBits TSL[7:0] store the counter value of the time stamp when received messages are stored in the mailbox. - 0 - 7 - read-write - - - - - - 8 - 0x4 - MKR[%s] - Mask Register - 0x400 - 32 - read-write - 0x00000000 - 0x00000000 - - - SID - Standard ID - 18 - 28 - read-write - - - EID - Extended ID - 0 - 17 - read-write - - - - - 2 - 0x4 - FIDCR[%s] - FIFO Received ID Compare Registers - 0x420 - 32 - read-write - 0x00000000 - 0x00000000 - - - IDE - ID Extension - 31 - 31 - read-write - - - 0 - Standard ID - #0 - - - 1 - Extended ID - #1 - - - - - RTR - Remote Transmission Request - 30 - 30 - read-write - - - 0 - Data frame - #0 - - - 1 - Remote frame - #1 - - - - - SID - Standard ID - 18 - 28 - read-write - - - EID - Extended ID - 0 - 17 - read-write - - - - - MKIVLR - Mask Invalid Register - 0x428 - 32 - read-write - 0x00000000 - 0x00000000 - - - MB31 - mailbox 31 Mask Invalid - 31 - 31 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB30 - mailbox 30 Mask Invalid - 30 - 30 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB29 - mailbox 29 Mask Invalid - 29 - 29 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB28 - mailbox 28 Mask Invalid - 28 - 28 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB27 - mailbox 27 Mask Invalid - 27 - 27 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB26 - mailbox 26 Mask Invalid - 26 - 26 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB25 - mailbox 25 Mask Invalid - 25 - 25 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB24 - mailbox 24 Mask Invalid - 24 - 24 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB23 - mailbox 23 Mask Invalid - 23 - 23 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB22 - mailbox 22 Mask Invalid - 22 - 22 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB21 - mailbox 21 Mask Invalid - 21 - 21 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB20 - mailbox 20 Mask Invalid - 20 - 20 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB19 - mailbox 19 Mask Invalid - 19 - 19 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB18 - mailbox 18 Mask Invalid - 18 - 18 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB17 - mailbox 17 Mask Invalid - 17 - 17 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB16 - mailbox 16 Mask Invalid - 16 - 16 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB15 - mailbox 15 Mask Invalid - 15 - 15 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB14 - mailbox 14 Mask Invalid - 14 - 14 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB13 - mailbox 13 Mask Invalid - 13 - 13 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB12 - mailbox 12 Mask Invalid - 12 - 12 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB11 - mailbox 11 Mask Invalid - 11 - 11 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB10 - mailbox 10 Mask Invalid - 10 - 10 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB9 - mailbox 9 Mask Invalid - 9 - 9 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB8 - mailbox 8 Mask Invalid - 8 - 8 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB7 - mailbox 7 Mask Invalid - 7 - 7 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB6 - mailbox 6 Mask Invalid - 6 - 6 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB5 - mailbox 5 Mask Invalid - 5 - 5 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB4 - mailbox 4 Mask Invalid - 4 - 4 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB3 - mailbox 3 Mask Invalid - 3 - 3 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB2 - mailbox 2 Mask Invalid - 2 - 2 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB1 - mailbox 1 Mask Invalid - 1 - 1 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - MB0 - mailbox 0 Mask Invalid - 0 - 0 - read-write - - - 0 - Mask valid - #0 - - - 1 - Mask invalid - #1 - - - - - - - MIER - Mailbox Interrupt Enable Register - 0x42C - 32 - read-write - 0x00000000 - 0x00000000 - - - MB31 - mailbox 31 Interrupt Enable - 31 - 31 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB30 - mailbox 30 Interrupt Enable - 30 - 30 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB29 - mailbox 29 Interrupt Enable - 29 - 29 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB28 - mailbox 28 Interrupt Enable - 28 - 28 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB27 - mailbox 27 Interrupt Enable - 27 - 27 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB26 - mailbox 26 Interrupt Enable - 26 - 26 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB25 - mailbox 25 Interrupt Enable - 25 - 25 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB24 - mailbox 24 Interrupt Enable - 24 - 24 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB23 - mailbox 23 Interrupt Enable - 23 - 23 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB22 - mailbox 22 Interrupt Enable - 22 - 22 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB21 - mailbox 21 Interrupt Enable - 21 - 21 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB20 - mailbox 20 Interrupt Enable - 20 - 20 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB19 - mailbox 19 Interrupt Enable - 19 - 19 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB18 - mailbox 18 Interrupt Enable - 18 - 18 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB17 - mailbox 17 Interrupt Enable - 17 - 17 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB16 - mailbox 16 Interrupt Enable - 16 - 16 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB15 - mailbox 15 Interrupt Enable - 15 - 15 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB14 - mailbox 14 Interrupt Enable - 14 - 14 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB13 - mailbox 13 Interrupt Enable - 13 - 13 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB12 - mailbox 12 Interrupt Enable - 12 - 12 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB11 - mailbox 11 Interrupt Enable - 11 - 11 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB10 - mailbox 10 Interrupt Enable - 10 - 10 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB9 - mailbox 9 Interrupt Enable - 9 - 9 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB8 - mailbox 8 Interrupt Enable - 8 - 8 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB7 - mailbox 7 Interrupt Enable - 7 - 7 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB6 - mailbox 6 Interrupt Enable - 6 - 6 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB5 - mailbox 5 Interrupt Enable - 5 - 5 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB4 - mailbox 4 Interrupt Enable - 4 - 4 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB3 - mailbox 3 Interrupt Enable - 3 - 3 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB2 - mailbox 2 Interrupt Enable - 2 - 2 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB1 - mailbox 1 Interrupt Enable - 1 - 1 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB0 - mailbox 0 Interrupt Enable - 0 - 0 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - - - MIER_FIFO - Mailbox Interrupt Enable Register for FIFO Mailbox Mode - MIER - 0x42C - 32 - read-write - 0x00000000 - 0x00000000 - - - MB29 - Receive FIFO Interrupt Generation Timing Control - 29 - 29 - read-write - - - 0 - Every time reception is completed - #0 - - - 1 - When the receive FIFO becomes buffer warning by completion of reception - #1 - - - - - MB28 - Receive FIFO Interrupt Enable - 28 - 28 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB25 - Transmit FIFO Interrupt Generation Timing Control - 25 - 25 - read-write - - - 0 - Every time transmission is completed - #0 - - - 1 - When the transmit FIFO becomes empty due to completion of transmission - #1 - - - - - MB24 - Transmit FIFO Interrupt Enable - 24 - 24 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB23 - mailbox 23 Interrupt Enable - 23 - 23 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB22 - mailbox 22 Interrupt Enable - 22 - 22 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB21 - mailbox 21 Interrupt Enable - 21 - 21 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB20 - mailbox 20 Interrupt Enable - 20 - 20 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB19 - mailbox 19 Interrupt Enable - 19 - 19 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB18 - mailbox 18 Interrupt Enable - 18 - 18 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB17 - mailbox 17 Interrupt Enable - 17 - 17 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB16 - mailbox 16 Interrupt Enable - 16 - 16 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB15 - mailbox 15 Interrupt Enable - 15 - 15 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB14 - mailbox 14 Interrupt Enable - 14 - 14 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB13 - mailbox 13 Interrupt Enable - 13 - 13 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB12 - mailbox 12 Interrupt Enable - 12 - 12 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB11 - mailbox 11 Interrupt Enable - 11 - 11 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB10 - mailbox 10 Interrupt Enable - 10 - 10 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB9 - mailbox 9 Interrupt Enable - 9 - 9 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB8 - mailbox 8 Interrupt Enable - 8 - 8 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB7 - mailbox 7 Interrupt Enable - 7 - 7 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB6 - mailbox 6 Interrupt Enable - 6 - 6 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB5 - mailbox 5 Interrupt Enable - 5 - 5 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB4 - mailbox 4 Interrupt Enable - 4 - 4 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB3 - mailbox 3 Interrupt Enable - 3 - 3 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB2 - mailbox 2 Interrupt Enable - 2 - 2 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB1 - mailbox 1 Interrupt Enable - 1 - 1 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - MB0 - mailbox 0 Interrupt Enable - 0 - 0 - read-write - - - 0 - Interrupt disabled - #0 - - - 1 - Interrupt enabled - #1 - - - - - - - 32 - 0x1 - MCTL_TX[%s] - Message Control Register for Transmit - 0x820 - 8 - read-write - 0x00 - 0xFF - - - TRMREQ - Transmit Mailbox Request - 7 - 7 - read-write - - - 0 - Not configured for transmission - #0 - - - 1 - Configured for transmission - #1 - - - - - RECREQ - Receive Mailbox Request - 6 - 6 - read-write - - - 0 - Not configured for reception - #0 - - - 1 - Configured for reception - #1 - - - - - ONESHOT - One-Shot Enable - 4 - 4 - read-write - - - 0 - One-shot reception or one-shot transmission disabled - #0 - - - 1 - One-shot reception or one-shot transmission enabled - #1 - - - - - TRMABT - Transmission Abort Complete Flag (Transmit mailbox setting enabled) - 2 - 2 - read-write - - - 0 - Transmission has started, transmission abort failed because transmission is completed, or transmission abort is not requested - #0 - - - 1 - Transmission abort is completed - #1 - - - - - TRMACTIVE - Transmission-in-Progress Status Flag (Transmit mailbox setting enabled) - 1 - 1 - read-only - - - 0 - Transmission is pending or transmission is not requested - #0 - - - 1 - From acceptance of transmission request to completion of transmission, or error/arbitration-lost - #1 - - - - - SENTDATA - Transmission Complete Flag - 0 - 0 - read-write - - - 0 - Transmission is not completed - #0 - - - 1 - Transmission is completed - #1 - - - - - - - 32 - 0x1 - MCTL_RX[%s] - Message Control Register for Receive - MCTL_TX[%s] - 0x820 - 8 - read-write - 0x00 - 0xFF - - - TRMREQ - Transmit Mailbox Request - 7 - 7 - read-write - - - 0 - Not configured for transmission - #0 - - - 1 - Configured for transmission - #1 - - - - - RECREQ - Receive Mailbox Request - 6 - 6 - read-write - - - 0 - Not configured for reception - #0 - - - 1 - Configured for reception - #1 - - - - - ONESHOT - One-Shot Enable - 4 - 4 - read-write - - - 0 - One-shot reception or one-shot transmission disabled - #0 - - - 1 - One-shot reception or one-shot transmission enabled - #1 - - - - - MSGLOST - Message Lost Flag(Receive mailbox setting enabled) - 2 - 2 - read-write - - - 0 - Message is not overwritten or overrun - #0 - - - 1 - Message is overwritten or overrun - #1 - - - - - INVALDATA - Reception-in-Progress Status Flag (Receive mailbox setting enabled) - 1 - 1 - read-only - - - 0 - Message valid - #0 - - - 1 - Message being updated - #1 - - - - - NEWDATA - Reception Complete Flag - 0 - 0 - read-write - - - 0 - No data has been received or 0 is written to the NEWDATA bit - #0 - - - 1 - A new message is being stored or has been stored to the mailbox - #1 - - - - - - - CTLR - Control Register - 0x840 - 16 - read-write - 0x0500 - 0xFFFF - - - RBOC - Forcible Return From Bus-Off - 13 - 13 - read-write - - - 0 - Nothing occurred - #0 - - - 1 - Forcible return from bus-off - #1 - - - - - BOM - Bus-Off Recovery Mode by a program request - 11 - 12 - read-write - - - 00 - Normal mode (ISO11898-1 compliant) - #00 - - - 01 - Entry to CAN halt mode automatically at bus-off entry - #01 - - - 10 - Entry to CAN halt mode automatically at bus-off end - #10 - - - 11 - Entry to CAN halt mode (during bus-off recovery period) - #11 - - - - - SLPM - CAN Sleep Mode - 10 - 10 - read-write - - - 0 - Other than CAN sleep mode - #0 - - - 1 - CAN sleep mode - #1 - - - - - CANM - CAN Operating Mode Select - 8 - 9 - read-write - - - 00 - CAN operation mode - #00 - - - 01 - CAN reset mode - #01 - - - 10 - CAN halt mode - #10 - - - 11 - CAN reset mode (forcible transition) - #11 - - - - - TSPS - Time Stamp Prescaler Select - 6 - 7 - read-write - - - 00 - Every bit time - #00 - - - 01 - Every 2-bit time - #01 - - - 10 - Every 4-bit time - #10 - - - 11 - Every 8-bit time - #11 - - - - - TSRC - Time Stamp Counter Reset Command - 5 - 5 - read-write - - - 0 - Nothing occurred - #0 - - - 1 - Reset - #1 - - - - - TPM - Transmission Priority Mode Select - 4 - 4 - read-write - - - 0 - ID priority transmit mode - #0 - - - 1 - Mailbox number priority transmit mode - #1 - - - - - MLM - Message Lost Mode Select - 3 - 3 - read-write - - - 0 - Overwrite mode - #0 - - - 1 - Overrun mode - #1 - - - - - IDFM - ID Format Mode Select - 1 - 2 - read-write - - - 00 - Standard ID mode.All mailboxes (including FIFO mailboxes) handle only standard Ids. - #00 - - - 01 - Extended ID mode.All mailboxes (including FIFO mailboxes) handle only extended IDs. - #01 - - - 10 - Mixed ID mode.All mailboxes (including FIFO mailboxes) handle both standard IDs and extended IDs. Standard IDs or extended IDs are specified by using the IDE bit in the corresponding mailbox in normal mailbox mode. In FIFO mailbox mode, the IDE bit in the corresponding mailbox is used for mailboxes [0] to [23], the IDE bits in FIDCR0 and FIDCR1 are used for the receive FIFO, and the IDE bit in mailbox [24] is used for the transmit FIFO. - #10 - - - 11 - Do not use this combination - #11 - - - - - MBM - CAN Mailbox Mode Select - 0 - 0 - read-write - - - 0 - Normal mailbox mode - #0 - - - 1 - FIFO mailbox mode - #1 - - - - - - - STR - Status Register - 0x842 - 16 - read-only - 0x0500 - 0xFFFF - - - RECST - Receive Status Flag (receiver) - 14 - 14 - read-only - - - 0 - Bus idle or transmission in progress - #0 - - - 1 - Reception in progress - #1 - - - - - TRMST - Transmit Status Flag (transmitter) - 13 - 13 - read-only - - - 0 - Bus idle or reception in progress - #0 - - - 1 - Transmission in progress or in bus-off state - #1 - - - - - BOST - Bus-Off Status Flag - 12 - 12 - read-only - - - 0 - Not in bus-off state - #0 - - - 1 - In bus-off state - #1 - - - - - EPST - Error-Passive Status Flag - 11 - 11 - read-only - - - 0 - Not in error-passive state - #0 - - - 1 - In error-passive state - #1 - - - - - SLPST - CAN Sleep Status Flag - 10 - 10 - read-only - - - 0 - Not in CAN sleep mode - #0 - - - 1 - In CAN sleep mode - #1 - - - - - HLTST - CAN Halt Status Flag - 9 - 9 - read-only - - - 0 - Not in CAN halt mode - #0 - - - 1 - In CAN halt mode - #1 - - - - - RSTST - CAN Reset Status Flag - 8 - 8 - read-only - - - 0 - Not in CAN reset mode - #0 - - - 1 - In CAN reset mode - #1 - - - - - EST - Error Status Flag - 7 - 7 - read-only - - - 0 - No error occurred - #0 - - - 1 - Error occurred - #1 - - - - - TABST - Transmission Abort Status Flag - 6 - 6 - read-only - - - 0 - No mailbox with TRMABT bit = 1 - #0 - - - 1 - Mailbox(es) with TRMABT bit = 1 - #1 - - - - - FMLST - FIFO Mailbox Message Lost Status Flag - 5 - 5 - read-only - - - 0 - RFMLF bit = 0 - #0 - - - 1 - RFMLF bit = 1 - #1 - - - - - NMLST - Normal Mailbox Message Lost Status Flag - 4 - 4 - read-only - - - 0 - No mailbox with MSGLOST bit = 1 - #0 - - - 1 - Mailbox(es) with MSGLOST bit = 1 - #1 - - - - - TFST - Transmit FIFO Status Flag - 3 - 3 - read-only - - - 0 - Transmit FIFO is full - #0 - - - 1 - Transmit FIFO is not full - #1 - - - - - RFST - Receive FIFO Status Flag - 2 - 2 - read-only - - - 0 - No message in receive FIFO (empty) - #0 - - - 1 - Message in receive FIFO - #1 - - - - - SDST - SENTDATA Status Flag - 1 - 1 - read-only - - - 0 - No mailbox with SENTDATA bit = 1 - #0 - - - 1 - Mailbox(es) with SENTDATA bit = 1 - #1 - - - - - NDST - NEWDATA Status Flag - 0 - 0 - read-only - - - 0 - No mailbox with NEWDATA bit = 1 - #0 - - - 1 - Mailbox(es) with NEWDATA bit = 1 - #1 - - - - - - - BCR - Bit Configuration Register - 0x844 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TSEG1 - Time Segment 1 Control - 28 - 31 - read-write - - - 0000 - Setting prohibited - #0000 - - - 0001 - Setting prohibited - #0001 - - - 0010 - Setting prohibited - #0010 - - - 0011 - 4 Tq - #0011 - - - 0100 - 5 Tq - #0100 - - - 0101 - 6 Tq - #0101 - - - 0110 - 7 Tq - #0110 - - - 0111 - 8 Tq - #0111 - - - 1000 - 9 Tq - #1000 - - - 1001 - 10 Tq - #1001 - - - 1010 - 11 Tq - #1010 - - - 1011 - 12 Tq - #1011 - - - 1100 - 13 Tq - #1100 - - - 1101 - 14 Tq - #1101 - - - 1110 - 15 Tq - #1110 - - - 1111 - 16 Tq - #1111 - - - - - BRP - Prescaler Division Ratio Select . These bits set the frequency of the CAN communication clock (fCANCLK). - 16 - 25 - read-write - - - SJW - Resynchronization Jump Width Control - 12 - 13 - read-write - - - 00 - 1 Tq - #00 - - - 01 - 2 Tq - #01 - - - 10 - 3 Tq - #10 - - - 11 - 4 Tq - #11 - - - - - TSEG2 - Time Segment 2 Control - 8 - 10 - read-write - - - 000 - Setting prohibited - #000 - - - 001 - 2 Tq - #001 - - - 010 - 3 Tq - #010 - - - 011 - 4 Tq - #011 - - - 100 - 5 Tq - #100 - - - 101 - 6 Tq - #101 - - - 110 - 7 Tq - #110 - - - 111 - 8 Tq - #111 - - - - - CCLKS - CAN Clock Source Selection - 0 - 0 - read-write - - - 0 - PCLK (generated by the PLL clock) - #0 - - - 1 - CANMCLK (generated by the main clock) - #1 - - - - - - - RFCR - Receive FIFO Control Register - 0x848 - 8 - read-write - 0x80 - 0xFF - - - RFEST - Receive FIFO Empty Status Flag - 7 - 7 - read-only - - - 0 - Unread message in receive FIFO - #0 - - - 1 - No unread message in receive FIFO - #1 - - - - - RFWST - Receive FIFO Buffer Warning Status Flag - 6 - 6 - read-only - - - 0 - Receive FIFO is not buffer warning - #0 - - - 1 - Receive FIFO is buffer warning (3 unread messages) - #1 - - - - - RFFST - Receive FIFO Full Status Flag - 5 - 5 - read-only - - - 0 - Receive FIFO is not full - #0 - - - 1 - Receive FIFO is full (4 unread messages) - #1 - - - - - RFMLF - Receive FIFO Message Lost Flag - 4 - 4 - read-write - - - 0 - No receive FIFO message lost has occurred - #0 - - - 1 - Receive FIFO message lost has occurred - #1 - - - - - RFUST - Receive FIFO Unread Message Number Status - 1 - 3 - read-only - - - 000 - No unread message - #000 - - - 001 - 1 unread message - #001 - - - 010 - 2 unread messages - #010 - - - 011 - 3 unread messages - #011 - - - 100 - 4 unread messages - #100 - - - others - Setting prohibited - true - - - - - RFE - Receive FIFO Enable - 0 - 0 - read-write - - - 0 - Receive FIFO disabled - #0 - - - 1 - Receive FIFO enabled - #1 - - - - - - - RFPCR - Receive FIFO Pointer Control Register - 0x849 - 8 - write-only - 0x00 - 0x00 - - - RFPCR - The CPU-side pointer for the receive FIFO is incremented by writing FFh to RFPCR. - 0 - 7 - write-only - - - - - TFCR - Transmit FIFO Control Register - 0x84A - 8 - read-write - 0x80 - 0xFF - - - TFEST - Transmit FIFO Empty Status - 7 - 7 - read-only - - - 0 - Unsent message in transmit FIFO - #0 - - - 1 - No unsent message in transmit FIFO - #1 - - - - - TFFST - Transmit FIFO Full Status - 6 - 6 - read-only - - - 0 - Transmit FIFO is not full - #0 - - - 1 - Transmit FIFO is full (4 unsent messages) - #1 - - - - - TFUST - Transmit FIFO Unsent Message Number Status - 1 - 3 - read-only - - - 000 - No unsent message - #000 - - - 001 - 1 unsent message - #001 - - - 010 - 2 unsent messages - #010 - - - 011 - 3 unsent messages - #011 - - - 100 - 4 unsent messages - #100 - - - others - Setting prohibited - true - - - - - TFE - Transmit FIFO Enable - 0 - 0 - read-write - - - 0 - Transmit FIFO disabled - #0 - - - 1 - Transmit FIFO enabled - #1 - - - - - - - TFPCR - Transmit FIFO Pointer Control Register - 0x84B - 8 - write-only - 0x00 - 0x00 - - - TFPCR - The CPU-side pointer for the transmit FIFO is incremented by writing FFh to TFPCR. - 0 - 7 - write-only - - - - - EIER - Error Interrupt Enable Register - 0x84C - 8 - read-write - 0x00 - 0xFF - - - BLIE - Bus Lock Interrupt Enable - 7 - 7 - read-write - - - 0 - Bus lock interrupt disabled - #0 - - - 1 - Bus lock interrupt enabled - #1 - - - - - OLIE - Overload Frame Transmit Interrupt Enable - 6 - 6 - read-write - - - 0 - Overload frame transmit interrupt disabled - #0 - - - 1 - Overload frame transmit interrupt enabled - #1 - - - - - ORIE - Overrun Interrupt Enable - 5 - 5 - read-write - - - 0 - Receive overrun interrupt disabled - #0 - - - 1 - Receive overrun interrupt enabled - #1 - - - - - BORIE - Bus-Off Recovery Interrupt Enable - 4 - 4 - read-write - - - 0 - Bus-off recovery interrupt disabled - #0 - - - 1 - Bus-off recovery interrupt enabled - #1 - - - - - BOEIE - Bus-Off Entry Interrupt Enable - 3 - 3 - read-write - - - 0 - Bus-off entry interrupt disabled - #0 - - - 1 - Bus-off entry interrupt enabled - #1 - - - - - EPIE - Error-Passive Interrupt Enable - 2 - 2 - read-write - - - 0 - Error-passive interrupt disabled - #0 - - - 1 - Error-passive interrupt enabled - #1 - - - - - EWIE - Error-Warning Interrupt Enable - 1 - 1 - read-write - - - 0 - Error-warning interrupt disabled - #0 - - - 1 - Error-warning interrupt enabled - #1 - - - - - BEIE - Bus Error Interrupt Enable - 0 - 0 - read-write - - - 0 - Bus error interrupt disabled - #0 - - - 1 - Bus error interrupt enabled - #1 - - - - - - - EIFR - Error Interrupt Factor Judge Register - 0x84D - 8 - read-write - 0x00 - 0xFF - - - BLIF - Bus Lock Detect Flag - 7 - 7 - read-write - - - 0 - No bus lock detected - #0 - - - 1 - Bus lock detected - #1 - - - - - OLIF - Overload Frame Transmission Detect Flag - 6 - 6 - read-write - - - 0 - No overload frame transmission detected - #0 - - - 1 - Overload frame transmission detected - #1 - - - - - ORIF - Receive Overrun Detect Flag - 5 - 5 - read-write - - - 0 - No receive overrun detected - #0 - - - 1 - Receive overrun detected - #1 - - - - - BORIF - Bus-Off Recovery Detect Flag - 4 - 4 - read-write - - - 0 - No bus-off recovery detected - #0 - - - 1 - Bus-off recovery detected - #1 - - - - - BOEIF - Bus-Off Entry Detect Flag - 3 - 3 - read-write - - - 0 - No bus-off entry detected - #0 - - - 1 - Bus-off entry detected - #1 - - - - - EPIF - Error-Passive Detect Flag - 2 - 2 - read-write - - - 0 - No error-passive detected - #0 - - - 1 - Error-passive detected - #1 - - - - - EWIF - Error-Warning Detect Flag - 1 - 1 - read-write - - - 0 - No error-warning detected - #0 - - - 1 - Error-warning detected - #1 - - - - - BEIF - Bus Error Detect Flag - 0 - 0 - read-write - - - 0 - No bus error detected - #0 - - - 1 - Bus error detected - #1 - - - - - - - RECR - Receive Error Count Register - 0x84E - 8 - read-only - 0x00 - 0xFF - - - RECR - Receive error count functionRECR increments or decrements the counter value according to the error status of the CAN module during reception. - 0 - 7 - read-only - - - - - TECR - Transmit Error Count Register - 0x84F - 8 - read-only - 0x00 - 0xFF - - - TECR - Transmit error count functionTECR increments or decrements the counter value according to the error status of the CAN module during transmission. - 0 - 7 - read-only - - - - - ECSR - Error Code Store Register - 0x850 - 8 - read-write - 0x00 - 0xFF - - - EDPM - Error Display Mode Select - 7 - 7 - read-write - - - 0 - Output of first detected error code - #0 - - - 1 - Output of accumulated error code - #1 - - - - - ADEF - ACK Delimiter Error Flag - 6 - 6 - read-write - - - 0 - No ACK delimiter error detected - #0 - - - 1 - ACK delimiter error detected - #1 - - - - - BE0F - Bit Error (dominant) Flag - 5 - 5 - read-write - - - 0 - No bit error (dominant) detected - #0 - - - 1 - Bit error (dominant) detected - #1 - - - - - BE1F - Bit Error (recessive) Flag - 4 - 4 - read-write - - - 0 - No bit error (recessive) detected - #0 - - - 1 - Bit error (recessive) detected - #1 - - - - - CEF - CRC Error Flag - 3 - 3 - read-write - - - 0 - No CRC error detected - #0 - - - 1 - CRC error detected - #1 - - - - - AEF - ACK Error Flag - 2 - 2 - read-write - - - 0 - No ACK error detected - #0 - - - 1 - ACK error detected - #1 - - - - - FEF - Form Error Flag - 1 - 1 - read-write - - - 0 - No form error detected - #0 - - - 1 - Form error detected - #1 - - - - - SEF - Stuff Error Flag - 0 - 0 - read-write - - - 0 - No stuff error detected - #0 - - - 1 - Stuff error detected - #1 - - - - - - - CSSR - Channel Search Support Register - 0x851 - 8 - read-write - 0x00 - 0x00 - - - CSSR - When the value for the channel search is input, the channel number is output to MSSR. - 0 - 7 - read-write - - - - - MSSR - Mailbox Search Status Register - 0x852 - 8 - read-only - 0x80 - 0xFF - - - SEST - Search Result Status - 7 - 7 - read-only - - - 0 - Search result found - #0 - - - 1 - No search result - #1 - - - - - MBNST - Search Result Mailbox Number Status These bits output the smallest mailbox number that is searched in each mode of MSMR. - 0 - 4 - read-only - - - - - MSMR - Mailbox Search Mode Register - 0x853 - 8 - read-write - 0x00 - 0xFF - - - MBSM - Mailbox Search Mode Select - 0 - 1 - read-write - - - 00 - Receive mailbox search mode - #00 - - - 01 - Transmit mailbox search mode - #01 - - - 10 - Message lost search mode - #10 - - - 11 - Channel search mode - #11 - - - - - - - TSR - Time Stamp Register - 0x854 - 16 - read-only - 0x0000 - 0xFFFF - - - TSR - Free-running counter value for the time stamp function - 0 - 15 - read-only - - - - - AFSR - Acceptance Filter Support Register - 0x856 - 16 - read-write - 0x0000 - 0x0000 - - - AFSR - After the standard ID of a received message is written, the value converted for data table search can be read. - 0 - 15 - read-write - - - - - TCR - Test Control Register - 0x858 - 8 - read-write - 0x00 - 0xFF - - - TSTM - CAN Test Mode Select - 1 - 2 - read-write - - - 00 - Other than CAN test mode - #00 - - - 01 - Listen-only mode - #01 - - - 10 - Self-test mode 0 (external loopback) - #10 - - - 11 - Self-test mode 1 (internal loopback) - #11 - - - - - TSTE - CAN Test Mode Enable - 0 - 0 - read-write - - - 0 - CAN test mode disabled - #0 - - - 1 - CAN test mode enabled - #1 - - - - - - - - - R_CAN1 - 0x40051000 - - - R_CRC - Cyclic Redundancy Check (CRC) Calculator - 0x40074000 - - 0x00000000 - 0x002 - registers - - - 0x00000004 - 0x00A - registers - - - - CRCCR0 - CRC Control Register0 - 0x00 - 8 - read-write - 0x00 - 0xFF - - - DORCLR - CRCDOR Register Clear - 7 - 7 - write-only - - - 0 - No effect. - #0 - - - 1 - Clears the CRCDOR register. - #1 - - - - - LMS - CRC Calculation Switching - 6 - 6 - read-write - - - 0 - Generates CRC for LSB first communication. - #0 - - - 1 - Generates CRC for MSB first communication. - #1 - - - - - GPS - CRC Generating Polynomial Switching - 0 - 2 - read-write - - - 000 - No calculation is executed. - #000 - - - 001 - 8-bit CRC-8 (X8 + X2 + X + 1) - #001 - - - 010 - 16-bit CRC-16 (X16 + X15 + X2 + 1) - #010 - - - 011 - 16-bit CRC-CCITT (X16 + X12 + X5 + 1) - #011 - - - 100 - 32-bit CRC-32 (X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1) - #100 - - - 101 - 32-bit CRC-32C (X32+X28+X27+X26+ X25+X23+X22+X20+X19+X18+X14+X13+X11+X10+X9+X8+X6+1) - #101 - - - others - No calculation is executed. - true - - - - - - - CRCCR1 - CRC Control Register1 - 0x01 - 8 - read-write - 0x00 - 0xFF - - - CRCSEN - Snoop enable bit - 7 - 7 - read-write - - - 0 - Disabled - #0 - - - 1 - Enabled - #1 - - - - - CRCSWR - Snoop-on-write/read switch bit - 6 - 6 - read-write - - - 0 - Snoop-on-read - #0 - - - 1 - Snoop-on-write - #1 - - - - - - - CRCDIR - CRC Data Input Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CRCDIR - Calculation input Data (Case of CRC-32, CRC-32C ) - 0 - 31 - read-write - - - - - CRCDIR_BY - CRC Data Input Register (byte access) - CRCDIR - 0x04 - 8 - read-write - 0x00 - 0xFF - - - CRCDIR_BY - Calculation input Data ( Case of CRC-8, CRC-16 or CRC-CCITT ) - 0 - 7 - read-write - - - - - CRCDOR - CRC Data Output Register - 0x08 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CRCDOR - Calculation output Data (Case of CRC-32, CRC-32C ) - 0 - 31 - read-write - - - - - CRCDOR_HA - CRC Data Output Register (halfword access) - CRCDOR - 0x08 - 16 - read-write - 0x0000 - 0xFFFF - - - CRCDOR_HA - Calculation output Data (Case of CRC-16 or CRC-CCITT ) - 0 - 15 - read-write - - - - - CRCDOR_BY - CRC Data Output Register(byte access) - CRCDOR - 0x08 - 8 - read-write - 0x00 - 0xFF - - - CRCDOR_BY - Calculation output Data (Case of CRC-8 ) - 0 - 7 - read-write - - - - - CRCSAR - Snoop Address Register - 0x0C - 16 - read-write - 0x0000 - 0xFFFF - - - CRCSA - snoop address bitSet the I/O register address to snoop - 0 - 13 - read-write - - - 0x0003 - SCI0.TDR - 0x0003 - - - 0x0005 - SCI0.RDR - 0x0005 - - - 0x0023 - SCI1.TDR - 0x0023 - - - 0x0025 - SCI1.RDR - 0x0025 - - - 0x0043 - SCI2.TDR - 0x0043 - - - 0x0045 - SCI2.RDR - 0x0045 - - - 0x0063 - SCI3.TDR - 0x0063 - - - 0x0065 - SCI3.RDR - 0x0065 - - - 0x0083 - SCI4.TDR - 0x0083 - - - 0x0085 - SCI4.RDR - 0x0085 - - - 0x00A3 - SCI5.TDR - 0x00A3 - - - 0x00A5 - SCI5.RDR - 0x00A5 - - - 0x00C3 - SCI6.TDR - 0x00C3 - - - 0x00C5 - SCI6.RDR - 0x00C5 - - - 0x00E3 - SCI7.TDR - 0x00E3 - - - 0x00E5 - SCI7.RDR - 0x00E5 - - - 0x0103 - SCI8.TDR - 0x0103 - - - 0x0105 - SCI8.RDR - 0x0105 - - - 0x0123 - SCI9.TDR - 0x0123 - - - 0x0125 - SCI9.RDR - 0x0125 - - - others - Settings other than above are prohibited. - true - - - - - - - - - R_CTSU - Capacitive Touch Sensing Unit - 0x40081000 - - 0x00000000 - 0x01E - registers - - - - CTSUCR0 - CTSU Control Register 0 - 0x00 - 8 - read-write - 0x00 - 0xFF - - - CTSUTXVSEL - CTSU Transmission power supply selection - 7 - 7 - read-write - - - 0 - Select Vcc - #0 - - - 1 - Select internal logic power supply - #1 - - - - - CTSUINIT - CTSU Control Block Initialization - 4 - 4 - read-write - - - 0 - Writing a 0 has no effect, this bit is read as 0. - #0 - - - 1 - initializes the CTSU control block and registers. - #1 - - - - - CTSUIOC - CTSU Transmit Pin Control - 3 - 3 - read-write - - - 0 - Low-level output from transmit channel non-measurement pin. - #0 - - - 1 - High-level output from transmit channel non-measurement pin. - #1 - - - - - CTSUSNZ - CTSU Wait State Power-Saving Enable - 2 - 2 - read-write - - - 0 - Power-saving function during wait state is disabled. - #0 - - - 1 - Power-saving function during wait state is enabled. - #1 - - - - - CTSUCAP - CTSU Measurement Operation Start Trigger Select - 1 - 1 - read-write - - - 0 - Software trigger. - #0 - - - 1 - External trigger. - #1 - - - - - CTSUSTRT - CTSU Measurement Operation Start - 0 - 0 - read-write - - - 0 - Measurement operation stops. - #0 - - - 1 - Measurement operation starts. - #1 - - - - - - - CTSUCR1 - CTSU Control Register 1 - 0x01 - 8 - read-write - 0x00 - 0xFF - - - CTSUMD - CTSU Measurement Mode Select - 6 - 7 - read-write - - - 00 - Self-capacitance single scan mode - #00 - - - 01 - Self-capacitance multi-scan mode - #01 - - - 10 - Mutual capacitance simple scan mode - #10 - - - 11 - Mutual capacitance full scan mode - #11 - - - - - CTSUCLK - CTSU Operating Clock Select - 4 - 5 - read-write - - - 00 - PCLK - #00 - - - 01 - PCLK/2 (PCLK divided by 2) - #01 - - - 10 - PCLK/2 (PCLK divided by 4) - #10 - - - 11 - Setting prohibited - #11 - - - - - CTSUATUNE1 - CTSU Power Supply Capacity Adjustment - 3 - 3 - read-write - - - 0 - Normal output - #0 - - - 1 - High-current output - #1 - - - - - CTSUATUNE0 - CTSU Power Supply Operating Mode Setting - 2 - 2 - read-write - - - 0 - Normal operating mode - #0 - - - 1 - Low-voltage operating mode - #1 - - - - - CTSUCSW - CTSU LPF Capacitance Charging Control - 1 - 1 - read-write - - - 0 - Turned off capacitance switch - #0 - - - 1 - Turned on capacitance switch - #1 - - - - - CTSUPON - CTSU Power Supply Enable - 0 - 0 - read-write - - - 0 - Powered off the CTSU - #0 - - - 1 - Powered on the CTSU - #1 - - - - - - - CTSUSDPRS - CTSU Synchronous Noise Reduction Setting Register - 0x02 - 8 - read-write - 0x00 - 0xFF - - - CTSUSOFF - CTSU High-Pass Noise Reduction Function Off Setting - 6 - 6 - read-write - - - 0 - High-pass noise reduction function turned on - #0 - - - 1 - High-pass noise reduction function turned off - #1 - - - - - CTSUPRMODE - CTSU Base Period and Pulse Count Setting - 4 - 5 - read-write - - - 00 - 510 pulses - #00 - - - 01 - 126 pulses - #01 - - - 10 - 62 pulses (recommended setting value) - #10 - - - 11 - Setting prohibited - #11 - - - - - CTSUPRRATIO - CTSU Measurement Time and Pulse Count AdjustmentRecommended setting: 3 (0011b) - 0 - 3 - read-write - - - - - CTSUSST - CTSU Sensor Stabilization Wait Control Register - 0x03 - 8 - read-write - 0x00 - 0xFF - - - CTSUSST - CTSU Sensor Stabilization Wait ControlNOTE: The value of these bits should be fixed to 00010000b. - 0 - 7 - read-write - - - - - CTSUMCH0 - CTSU Measurement Channel Register 0 - 0x04 - 8 - read-write - 0x3F - 0xFF - - - CTSUMCH0 - CTSU Measurement Channel 0.Note1: Writing to these bits is only enabled in self-capacitance single-scan mode (CTSUCR1.CTSUMD[1:0] bits = 00b).Note2: If the value of CTSUMCH0 was set to b'111111 in mode other than self-capacitor single scan mode, the measurement is stopped. - 0 - 5 - read-write - - - TS0 - measured TS0 - 0 - - - TS1 - measured TS1 - 1 - - - TS2 - measured TS2 - 2 - - - TS3 - measured TS3 - 3 - - - TS4 - measured TS4 - 4 - - - TS5 - measured TS5 - 5 - - - TS6 - measured TS6 - 6 - - - TS7 - measured TS7 - 7 - - - TS8 - measured TS8 - 8 - - - TS9 - measured TS9 - 9 - - - TS10 - measured TS10 - 10 - - - TS11 - measured TS11 - 11 - - - TS12 - measured TS12 - 12 - - - TS13 - measured TS13 - 13 - - - TS14 - measured TS14 - 14 - - - TS15 - measured TS15 - 15 - - - TS16 - measured TS16 - 16 - - - TS17 - measured TS17 - 17 - - - TS18 - measured TS18 - 18 - - - TS19 - measured TS19 - 19 - - - TS20 - measured TS20 - 20 - - - TS21 - measured TS21 - 21 - - - TS22 - measured TS22 - 22 - - - TS23 - measured TS23 - 23 - - - TS24 - measured TS24 - 24 - - - TS25 - measured TS25 - 25 - - - TS26 - measured TS26 - 26 - - - TS27 - measured TS27 - 27 - - - TS28 - measured TS28 - 28 - - - TS29 - measured TS29 - 29 - - - TS30 - measured TS30 - 30 - - - TS31 - measured TS31 - 31 - - - TS32 - measured TS32 - 32 - - - TS33 - measured TS33 - 33 - - - TS34 - measured TS34 - 34 - - - TS35 - measured TS35 - 35 - - - STOP - Conversion Stopped - #111111 - - - - - - - CTSUMCH1 - CTSU Measurement Channel Register 1 - 0x05 - 8 - read-write - 0x3F - 0xFF - - - CTSUMCH1 - CTSU Measurement Channel 1Note1: If the value of CTSUMCH1 was set to b'111111, the measurement is stopped. - 0 - 5 - read-only - - - TS0 - measured TS0 - 0 - - - TS1 - measured TS1 - 1 - - - TS2 - measured TS2 - 2 - - - TS3 - measured TS3 - 3 - - - TS4 - measured TS4 - 4 - - - TS5 - measured TS5 - 5 - - - TS6 - measured TS6 - 6 - - - TS7 - measured TS7 - 7 - - - TS8 - measured TS8 - 8 - - - TS9 - measured TS9 - 9 - - - TS10 - measured TS10 - 10 - - - TS11 - measured TS11 - 11 - - - TS12 - measured TS12 - 12 - - - TS13 - measured TS13 - 13 - - - TS14 - measured TS14 - 14 - - - TS15 - measured TS15 - 15 - - - TS16 - measured TS16 - 16 - - - TS17 - measured TS17 - 17 - - - TS18 - measured TS18 - 18 - - - TS19 - measured TS19 - 19 - - - TS20 - measured TS20 - 20 - - - TS21 - measured TS21 - 21 - - - TS22 - measured TS22 - 22 - - - TS23 - measured TS23 - 23 - - - TS24 - measured TS24 - 24 - - - TS25 - measured TS25 - 25 - - - TS26 - measured TS26 - 26 - - - TS27 - measured TS27 - 27 - - - TS28 - measured TS28 - 28 - - - TS29 - measured TS29 - 29 - - - TS30 - measured TS30 - 30 - - - TS31 - measured TS31 - 31 - - - TS32 - measured TS32 - 32 - - - TS33 - measured TS33 - 33 - - - TS34 - measured TS34 - 34 - - - TS35 - measured TS35 - 35 - - - STOP - Conversion Stopped - #111111 - - - - - - - 5 - 1 - CTSUCHAC[%s] - CTSU Channel Enable Control Register - 0x06 - 8 - read-write - 0x00 - 0xFF - - - 8 - 1 - TS%s - CTSU Channel Enable Control - 0 - 0 - read-write - - - 0 - Do not measure - 0 - - - 1 - Measure - 1 - - - - - - - 5 - 1 - CTSUCHTRC[%s] - CTSU Channel Transmit/Receive Control Register - 0x0B - 8 - read-write - 0x00 - 0xFF - - - 8 - 1 - TS%s - CTSU Channel Transmit/Receive Control - 0 - 0 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - - - CTSUDCLKC - CTSU High-Pass Noise Reduction Control Register - 0x10 - 8 - read-write - 0x00 - 0xFF - - - CTSUSSCNT - CTSU Diffusion Clock Mode ControlNOTE: This bit should be set to 11b. - 4 - 5 - read-write - - - CTSUSSMOD - CTSU Diffusion Clock Mode SelectNOTE: This bit should be set to 00b. - 0 - 1 - read-write - - - - - CTSUST - CTSU Status Register - 0x11 - 8 - read-write - 0x00 - 0xFF - - - CTSUPS - CTSU Mutual Capacitance Status Flag - 7 - 7 - read-only - - - 0 - First measurement - #0 - - - 1 - Second measurement - #1 - - - - - CTSUROVF - CTSU Reference Counter Overflow Flag - 6 - 6 - read-write - - - 0 - No overflow - #0 - - - 1 - An overflow - #1 - - - - - CTSUSOVF - CTSU Sensor Counter Overflow Flag - 5 - 5 - read-write - - - 0 - No overflow - #0 - - - 1 - An overflow - #1 - - - - - CTSUDTSR - CTSU Data Transfer Status Flag - 4 - 4 - read-only - - - 0 - Measurement result has been read - #0 - - - 1 - Measurement result has not been read - #1 - - - - - CTSUSTC - CTSU Measurement Status Counter - 0 - 2 - read-only - - - 000 - Status 0 - #000 - - - 001 - Status 1 - #001 - - - 010 - Status 2 - #010 - - - 011 - Status 3 - #011 - - - 100 - Status 4 - #100 - - - 101 - Status 5 - #101 - - - - - - - CTSUSSC - CTSU High-Pass Noise Reduction Spectrum Diffusion Control Register - 0x12 - 16 - read-write - 0x0000 - 0xFFFF - - - CTSUSSDIV - CTSU Spectrum Diffusion Frequency Division Setting - 8 - 11 - read-write - - - 0000 - 4.00 <= fb - #0000 - - - 0001 - 2.00 <= fb < 4.00 - #0001 - - - 0010 - 1.33 <= fb < 2.00 - #0010 - - - 0011 - 1.00 <= fb < 1.33 - #0011 - - - 0100 - 0.80 <= fb < 1.00 - #0100 - - - 0101 - 0.67 <= fb < 0.80 - #0101 - - - 0110 - 0.57 <= fb < 0.67 - #0110 - - - 0111 - 0.50 <= fb < 0.57 - #0111 - - - 1000 - 0.44 <= fb < 0.50 - #1000 - - - 1001 - 0.40 <= fb < 0.44 - #1001 - - - 1010 - 0.36 <= fb < 0.40 - #1010 - - - 1011 - 0.33 <= fb < 0.36 - #1011 - - - 1100 - 0.31 <= fb < 0.33 - #1100 - - - 1101 - 0.29 <= fb < 0.31 - #1101 - - - 1110 - 0.27 <= fb < 0.29 - #1110 - - - 1111 - fb < 0.27 - #1111 - - - - - - - CTSUSO0 - CTSU Sensor Offset Register 0 - 0x14 - 16 - read-write - 0x0000 - 0xFFFF - - - CTSUSNUM - CTSU Measurement Count Setting - 10 - 15 - read-write - - - CTSUSO - CTSU Sensor Offset AdjustmentCurrent offset amount is CTSUSO ( 0 to 1023 ) - 0 - 9 - read-write - - - - - CTSUSO1 - CTSU Sensor Offset Register 1 - 0x16 - 16 - read-write - 0x0000 - 0xFFFF - - - CTSUICOG - CTSU ICO Gain Adjustment - 13 - 14 - read-write - - - 00 - 100 percent gain - #00 - - - 01 - 66 percent gain - #01 - - - 10 - 50 percent gain - #10 - - - 11 - 40 percent gain - #11 - - - - - CTSUSDPA - CTSU Base Clock SettingOperating clock divided by ( CTSUSDPA + 1 ) x 2 - 8 - 12 - read-write - - - CTSURICOA - CTSU Reference ICO Current AdjustmentCurrent offset amount is CTSUSO ( 0 to 255 ) - 0 - 7 - read-write - - - - - CTSUSC - CTSU Sensor Counter - 0x18 - 16 - read-only - 0x0000 - 0xFFFF - - - CTSUSC - CTSU Sensor CounterThese bits indicate the measurement result of the CTSU. These bits indicate FFFFh when an overflow occurs. - 0 - 15 - read-only - - - - - CTSURC - CTSU Reference Counter - 0x1A - 16 - read-only - 0x0000 - 0xFFFF - - - CTSURC - CTSU Reference CounterThese bits indicate the measurement result of the reference ICO.These bits indicate FFFFh when an overflow occurs. - 0 - 15 - read-only - - - - - CTSUERRS - CTSU Error Status Register - 0x1C - 16 - read-only - 0x0000 - 0xFFFF - - - CTSUICOMP - TSCAP Voltage Error Monitor - 15 - 15 - read-only - - - 0 - Normal TSCAP voltage - #0 - - - 1 - Abnormal TSCAP voltage - #1 - - - - - - - - - R_CTSU2 - Capacitive Touch Sensing Unit - 0x40082000 - - 0x00 - 12 - registers - - - 0x0C - 8 - registers - - - 0x14 - 8 - registers - - - 0x1C - 4 - registers - - - 0x20 - 8 - registers - - - 0x28 - 16 - registers - - - - CTSUCRA - CTSU Control Register A - 0x00 - 32 - read-write - 0x00000000 - 0xffffffff - - - STRT - CTSU Measurement Operation Start - 0 - 0 - read-write - - - 0 - Stop measurement operation - #0 - - - 1 - Start measurement operation - #1 - - - - - CAP - CTSU Measurement Operation Start Trigger Select - 1 - 1 - read-write - - - 0 - Software trigger - #0 - - - 1 - External trigger - #1 - - - - - SNZ - CTSU Wait State Power-Saving Enable - 2 - 2 - read-write - - - 0 - Disable power-saving function during wait state - #0 - - - 1 - Enable power-saving function during wait state - #1 - - - - - CFCON - CTSU CFC Power on Control - 3 - 3 - read-write - - - 0 - CFC power off - #0 - - - 1 - CFC power on - #1 - - - - - INIT - CTSU Control Block Initialization - 4 - 4 - write-only - - - PUMPON - CTSU Boost Circuit Control - 5 - 5 - read-write - - - 0 - Boost circuit off - #0 - - - 1 - Boost circuit on - #1 - - - - - TXVSEL - CTSU Transmission Power Supply Selection - 6 - 7 - read-write - - - 00 - VCC is selected as the power supply for the transmit pins in measurement methods other than self-capacitance method. - #00 - - - 01 - VCC is selected as the power supply for the transmit pins in self-capacitance method. - #01 - - - 10 - VCL is selected as the power-supply voltage for the transmit pins. - #10 - - - 11 - Setting prohibited - #11 - - - - - PON - CTSU Power Supply Enable - 8 - 8 - read-write - - - 0 - Power off the CTSU - #0 - - - 1 - Power on the CTSU - #1 - - - - - CSW - CTSU LPF Capacitance Charging Control - 9 - 9 - read-write - - - 0 - Turn off capacitance switch - #0 - - - 1 - Turn on capacitance switch - #1 - - - - - ATUNE0 - CTSU Power Supply Operating Mode Setting - 10 - 10 - read-write - - - 0 - VCC ≥ 2.4 V: Normal operating mode - VCC < 2.4 V: Setting prohibited - - #0 - - - 1 - Low-voltage operating mode - #1 - - - - - ATUNE1 - CTSU Current Range Adjustment - 11 - 11 - read-write - - - 0 - 40 µA when CTSUATUNE2 = 0 - 20 µA when CTSUATUNE2 = 1 - - #0 - - - 1 - 80 µA when CTSUATUNE2 = 0 - 160 µA when CTSUATUNE2 = 1 - - #1 - - - - - CLK - CTSU Operating Clock Select - 12 - 13 - read-write - - - 00 - PCLKB - #00 - - - 01 - PCLKB/2 (PCLKB divided by 2) - #01 - - - 10 - PCLKB/4 (PCLKB divided by 4) - #10 - - - 11 - PCLKB/8 (PCLKB divided by 8) - #11 - - - - - MD0 - CTSU Measurement Mode Select 0 - 14 - 14 - read-write - - - 0 - Single scan mode - #0 - - - 1 - Multi-scan mode - #1 - - - - - MD1 - CTSU Measurement Mode Select 1 - 15 - 15 - read-write - - - 0 - Single scan mode - #0 - - - 1 - Multi-scan mode - #1 - - - - - MD2 - CTSU Measurement Mode Select 2 - 16 - 16 - read-write - - - 0 - Measure the current that flows through the switched capacitor. - #0 - - - 1 - Measure the transfer charge in CFC circuit (high speed measurement) - #1 - - - - - ATUNE2 - CTSU Current Range Adjustment - 17 - 17 - read-write - - - 0 - 40 µA when CTSUATUNE1 = 0 - 80 µA when CTSUATUNE2 = 1 - - #0 - - - 1 - 20 µA when CTSUATUNE1 = 0 - 160 µA when CTSUATUNE2 = 1 - - #1 - - - - - LOAD - CTSU Measurement Load Control - 18 - 19 - read-write - - - 00 - Normal measurement mode - #00 - - - 01 - Load off mode - #01 - - - 10 - Current load mode - #10 - - - 11 - Resistance load mode - #11 - - - - - POSEL - CTSU Non-measured Channel Output Select - 20 - 21 - read-write - - - 00 - Output low through GPIO - #00 - - - 01 - Hi-Z - #01 - - - 10 - Output low through the power setting in the TXVSEL[1:0] bits - #10 - - - 11 - Same phase pulse output as transmission channel through the power setting in the TXVSEL[1:0] bits - #11 - - - - - SDPSEL - CTSU Sensor Drive Pulse Select - 22 - 22 - read-write - - - 0 - Random pulse mode - #0 - - - 1 - High resolution pulse mode - #1 - - - - - FCMODE - CTSU SUCLK Control - 23 - 23 - read-write - - - 0 - SUCLK is used as frequency diffusion clock - #0 - - - 1 - SUCLK is used as recovery clock for multi-clock measurement - #1 - - - - - STCLK - CTSU STCLK Select - 24 - 29 - read-write - - - DCMODE - CTSU Current Measurement Mode Select - 30 - 30 - read-write - - - 0 - Normal mode - #0 - - - 1 - Current measurement mode - #1 - - - - - DCBACK - CTSU Current Measurement Feedback Select - 31 - 31 - read-write - - - 0 - TSCAP pin is selected - #0 - - - 1 - Measurement pin is selected - #1 - - - - - - - CTSUCRAL - CTSU Control Register A - CTSUCRA - 0x00 - 16 - read-write - 0x0000 - 0xffff - - - CTSUCR0 - CTSU Control Register A - CTSUCRA - 0x00 - 8 - read-write - 0x00 - 0xff - - - CTSUCR1 - CTSU Control Register A - CTSUCRA - 0x01 - 8 - read-write - 0x00 - 0xff - - - CTSUCR2 - CTSU Control Register A - CTSUCRAH - 0x02 - 8 - read-write - 0x00 - 0xff - - - CTSUCR3 - CTSU Control Register A - CTSUCRA - 0x03 - 8 - read-write - 0x00 - 0xff - - - CTSUCRB - CTSU Control Register B - 0x04 - 32 - read-write - 0x00000000 - 0xffffffff - - - PRRATIO - CTSU Measurement Time and Pulse Count Adjustment - 0 - 3 - read-write - - - PRMODE - CTSU Base Period and Pulse Count Setting - 4 - 5 - read-write - - - 00 - 510 pulses (512 pulses when PROFF bit is 1) - #00 - - - 01 - 126 pulses (128 pulses when PROFF bit is 1) - #01 - - - 10 - 62 pulses (recommended setting) (64 pulses when PROFF bit is 1) - #10 - - - 11 - Setting prohibited - #11 - - - - - SOFF - CTSU High-Pass Noise Reduction Function Off Setting - 6 - 6 - read-write - - - 0 - Turn spectrum diffusion on. - #0 - - - 1 - Turn spectrum diffusion off. - #1 - - - - - PROFF - CTSU Random Number Off Control - 7 - 7 - read-write - - - 0 - There is random number control. - #0 - - - 1 - There is no random number control. - #1 - - - - - SST - CTSU Sensor Stabilization Wait Control - 8 - 15 - read-write - - - SSMOD - CTSU SUCLK Diffusion Mode Select - 24 - 26 - read-write - - - SSCNT - CTSU SUCLK Diffusion Control - 28 - 29 - read-write - - - - - CTSUCRBL - CTSU Control Register B - CTSUCRB - 0x04 - 16 - read-write - 0x0000 - 0xffff - - - CTSUSDPRS - CTSU Control Register B - CTSUCRB - 0x04 - 8 - read-write - 0x00 - 0xff - - - CTSUSST - CTSU Control Register B - CTSUCRB - 0x05 - 8 - read-write - 0x00 - 0xff - - - CTSUCRBH - CTSU Control Register B - CTSUCRB - 0x06 - 16 - read-write - 0x0000 - 0xffff - - - CTSUDCLKC - CTSU Control Register B - CTSUCRB - 0x07 - 8 - read-write - 0x00 - 0xff - - - CTSUMCH - CTSU Measurement Channel Register - 0x08 - 32 - read-write - 0x00003f3f - 0xffffffff - - - MCH0 - CTSU Measurement Channel 0 - 0 - 5 - read-write - - - 0x00 - TS00 - 0x00 - - - 0x02 - TS02 - 0x02 - - - 0x04 - TS04 - 0x04 - - - 0x05 - TS05 - 0x05 - - - 0x06 - TS06 - 0x06 - - - 0x07 - TS07 - 0x07 - - - 0x08 - TS08 - 0x08 - - - 0x09 - TS09 - 0x09 - - - 0x0A - TS10 - 0x0a - - - 0x0B - TS11 - 0x0b - - - 0x0C - TS12 - 0x0c - - - 0x0D - TS13 - 0x0d - - - 0x0E - TS14 - 0x0e - - - 0x0F - TS15 - 0x0f - - - 0x10 - TS16 - 0x10 - - - 0x11 - TS17 - 0x11 - - - 0x12 - TS18 - 0x12 - - - 0x15 - TS21 - 0x15 - - - 0x16 - TS22 - 0x16 - - - 0x17 - TS23 - 0x17 - - - 0x18 - TS24 - 0x18 - - - 0x19 - TS25 - 0x19 - - - 0x1A - TS26 - 0x1a - - - 0x1B - TS27 - 0x1b - - - 0x1C - TS28 - 0x1c - - - 0x1D - TS29 - 0x1d - - - 0x1E - TS30 - 0x1e - - - 0x1F - TS31 - 0x1f - - - 0x20 - TS32 - 0x20 - - - 0x21 - TS33 - 0x21 - - - 0x22 - TS34 - 0x22 - - - 0x23 - TS35 - 0x23 - - - 0x3F - Measurement is being stopped. - 0x3f - - - - - MCH1 - CTSU Measurement Channel 1 - 8 - 13 - read-write - - - 0x00 - TS00 - 0x00 - - - 0x02 - TS02 - 0x02 - - - 0x04 - TS04 - 0x04 - - - 0x05 - TS05 - 0x05 - - - 0x06 - TS06 - 0x06 - - - 0x07 - TS07 - 0x07 - - - 0x08 - TS08 - 0x08 - - - 0x09 - TS09 - 0x09 - - - 0x0A - TS10 - 0x0a - - - 0x0B - TS11 - 0x0b - - - 0x0C - TS12 - 0x0c - - - 0x0D - TS13 - 0x0d - - - 0x0E - TS14 - 0x0e - - - 0x0F - TS15 - 0x0f - - - 0x10 - TS16 - 0x10 - - - 0x11 - TS17 - 0x11 - - - 0x12 - TS18 - 0x12 - - - 0x15 - TS21 - 0x15 - - - 0x16 - TS22 - 0x16 - - - 0x17 - TS23 - 0x17 - - - 0x18 - TS24 - 0x18 - - - 0x19 - TS25 - 0x19 - - - 0x1A - TS26 - 0x1a - - - 0x1B - TS27 - 0x1b - - - 0x1C - TS28 - 0x1c - - - 0x1D - TS29 - 0x1d - - - 0x1E - TS30 - 0x1e - - - 0x1F - TS31 - 0x1f - - - 0x20 - TS32 - 0x20 - - - 0x21 - TS33 - 0x21 - - - 0x22 - TS34 - 0x22 - - - 0x23 - TS35 - 0x23 - - - 0x3F - Measurement is being stopped. - 0x3f - - - - - MCA0 - CTSU Multiple Valid Clock Control - 16 - 16 - read-write - - - 0 - Valid - #0 - - - 1 - Invalid - #1 - - - - - MCA1 - CTSU Multiple Valid Clock Control - 17 - 17 - read-write - - - 0 - Valid - #0 - - - 1 - Invalid - #1 - - - - - MCA2 - CTSU Multiple Valid Clock Control - 18 - 18 - read-write - - - 0 - Valid - #0 - - - 1 - Invalid - #1 - - - - - MCA3 - CTSU Multiple Valid Clock Control - 19 - 19 - read-write - - - 0 - Valid - #0 - - - 1 - Invalid - #1 - - - - - - - CTSUMCHL - CTSU Measurement Channel Register - CTSUMCH - 0x08 - 16 - read-write - 0x0000 - 0xffff - - - CTSUMCH0 - CTSU Measurement Channel Register - CTSUMCH - 0x08 - 8 - read-write - 0x00 - 0xff - - - CTSUMCH1 - CTSU Measurement Channel Register - CTSUMCH - 0x09 - 8 - read-write - 0x00 - 0xff - - - CTSUMCHH - CTSU Measurement Channel Register - CTSUMCH - 0x0A - 16 - read-write - 0x3f3f - 0xffff - - - CTSUMFAF - CTSU Measurement Channel Register - CTSUMCHH - 0x0A - 8 - read-write - 0x3f - 0xff - - - CTSUCHACA - CTSU Channel Enable Control Register A - 0x0C - 32 - read-write - 0x00000000 - 0xffffffff - - - CHAC00 - CTSU Channel Enable Control A - 0 - 0 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC02 - CTSU Channel Enable Control A - 2 - 2 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC04 - CTSU Channel Enable Control A - 4 - 4 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC05 - CTSU Channel Enable Control A - 5 - 5 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC06 - CTSU Channel Enable Control A - 6 - 6 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC07 - CTSU Channel Enable Control A - 7 - 7 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC08 - CTSU Channel Enable Control A - 8 - 8 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC09 - CTSU Channel Enable Control A - 9 - 9 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC10 - CTSU Channel Enable Control A - 10 - 10 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC11 - CTSU Channel Enable Control A - 11 - 11 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC12 - CTSU Channel Enable Control A - 12 - 12 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC13 - CTSU Channel Enable Control A - 13 - 13 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC14 - CTSU Channel Enable Control A - 14 - 14 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC15 - CTSU Channel Enable Control A - 15 - 15 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC16 - CTSU Channel Enable Control A - 16 - 16 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC17 - CTSU Channel Enable Control A - 17 - 17 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC18 - CTSU Channel Enable Control A - 18 - 18 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC21 - CTSU Channel Enable Control A - 21 - 21 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC22 - CTSU Channel Enable Control A - 22 - 22 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC23 - CTSU Channel Enable Control A - 23 - 23 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC24 - CTSU Channel Enable Control A - 24 - 24 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC25 - CTSU Channel Enable Control A - 25 - 25 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC26 - CTSU Channel Enable Control A - 26 - 26 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC27 - CTSU Channel Enable Control A - 27 - 27 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC28 - CTSU Channel Enable Control A - 28 - 28 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC29 - CTSU Channel Enable Control A - 29 - 29 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC30 - CTSU Channel Enable Control A - 30 - 30 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC31 - CTSU Channel Enable Control A - 31 - 31 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - - - CTSUCHACAL - CTSU Channel Enable Control Register A - CTSUCHACA - 0x0C - 16 - read-write - 0x0000 - 0xffff - - - CTSUCHAC0 - CTSU Channel Enable Control Register A - CTSUCHACA - 0x0C - 8 - read-write - 0x00 - 0xff - - - CTSUCHAC1 - CTSU Channel Enable Control Register A - CTSUCHACA - 0x0D - 8 - read-write - 0x00 - 0xff - - - CTSUCHACAH - CTSU Channel Enable Control Register A - CTSUCHACA - 0x0E - 16 - read-write - 0x0000 - 0xffff - - - CTSUCHAC2 - CTSU Channel Enable Control Register A - CTSUCHACAH - 0x0E - 8 - read-write - 0x00 - 0xff - - - CTSUCHAC3 - CTSU Channel Enable Control Register A - CTSUCHACA - 0x0F - 8 - read-write - 0x00 - 0xff - - - CTSUCHACB - CTSU Channel Enable Control Register B - 0x10 - 32 - read-write - 0x00000000 - 0xffffffff - - - CHAC32 - CTSU Channel Enable Control B - 0 - 0 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC33 - CTSU Channel Enable Control B - 1 - 1 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC34 - CTSU Channel Enable Control B - 2 - 2 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - CHAC35 - CTSU Channel Enable Control B - 3 - 3 - read-write - - - 0 - Do not measure. - #0 - - - 1 - Measure. - #1 - - - - - - - CTSUCHACBL - CTSU Channel Enable Control Register B - CTSUCHACB - 0x10 - 16 - read-write - 0x0000 - 0xffff - - - CTSUCHAC4 - CTSU Channel Enable Control Register B - CTSUCHACB - 0x10 - 8 - read-write - 0x00 - 0xff - - - CTSUCHTRCA - CTSU Channel Transmit/Receive Control Register A - 0x14 - 32 - read-write - 0x00000000 - 0xffffffff - - - CHTRC - CTSU Channel Transmit/Receive Control A - 0 - 0 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC02 - CTSU Channel Transmit/Receive Control A - 2 - 2 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC04 - CTSU Channel Transmit/Receive Control A - 4 - 4 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC05 - CTSU Channel Transmit/Receive Control A - 5 - 5 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC06 - CTSU Channel Transmit/Receive Control A - 6 - 6 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC07 - CTSU Channel Transmit/Receive Control A - 7 - 7 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC08 - CTSU Channel Transmit/Receive Control A - 8 - 8 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC09 - CTSU Channel Transmit/Receive Control A - 9 - 9 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC10 - CTSU Channel Transmit/Receive Control A - 10 - 10 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC11 - CTSU Channel Transmit/Receive Control A - 11 - 11 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC12 - CTSU Channel Transmit/Receive Control A - 12 - 12 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC13 - CTSU Channel Transmit/Receive Control A - 13 - 13 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC14 - CTSU Channel Transmit/Receive Control A - 14 - 14 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC15 - CTSU Channel Transmit/Receive Control A - 15 - 15 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC16 - CTSU Channel Transmit/Receive Control A - 16 - 16 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC17 - CTSU Channel Transmit/Receive Control A - 17 - 17 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC18 - CTSU Channel Transmit/Receive Control A - 18 - 18 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC21 - CTSU Channel Transmit/Receive Control A - 21 - 21 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC22 - CTSU Channel Transmit/Receive Control A - 22 - 22 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC23 - CTSU Channel Transmit/Receive Control A - 23 - 23 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC24 - CTSU Channel Transmit/Receive Control A - 24 - 24 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC25 - CTSU Channel Transmit/Receive Control A - 25 - 25 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC26 - CTSU Channel Transmit/Receive Control A - 26 - 26 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC27 - CTSU Channel Transmit/Receive Control A - 27 - 27 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC28 - CTSU Channel Transmit/Receive Control A - 28 - 28 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC29 - CTSU Channel Transmit/Receive Control A - 29 - 29 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC30 - CTSU Channel Transmit/Receive Control A - 30 - 30 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC31 - CTSU Channel Transmit/Receive Control A - 31 - 31 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - - - CTSUCHTRCAL - CTSU Channel Transmit/Receive Control Register A - CTSUCHTRCA - 0x14 - 16 - read-write - 0x0000 - 0xffff - - - CTSUCHTRC0 - CTSU Channel Transmit/Receive Control Register A - CTSUCHTRCA - 0x14 - 8 - read-write - 0x00 - 0xff - - - CTSUCHTRC1 - CTSU Channel Transmit/Receive Control Register A - CTSUCHTRCA - 0x15 - 8 - read-write - 0x00 - 0xff - - - CTSUCHTRCAH - CTSU Channel Transmit/Receive Control Register A - CTSUCHTRCA - 0x16 - 16 - read-write - 0x0000 - 0xffff - - - CTSUCHTRC2 - CTSU Channel Transmit/Receive Control Register A - CTSUCHTRCAH - 0x16 - 8 - read-write - 0x00 - 0xff - - - CTSUCHTRC3 - CTSU Channel Transmit/Receive Control Register A - CTSUCHTRCA - 0x17 - 8 - read-write - 0x00 - 0xff - - - CTSUCHTRCB - CTSU Channel Transmit/Receive Control Register B - 0x18 - 32 - read-write - 0x00000000 - 0xffffffff - - - CHTRC32 - CTSU Channel Transmit/Receive Control B - 0 - 0 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC33 - CTSU Channel Transmit/Receive Control B - 1 - 1 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC34 - CTSU Channel Transmit/Receive Control B - 2 - 2 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - CHTRC35 - CTSU Channel Transmit/Receive Control B - 3 - 3 - read-write - - - 0 - Reception - #0 - - - 1 - Transmission - #1 - - - - - - - CTSUCHTRCBL - CTSU Channel Transmit/Receive Control Register B - CTSUCHTRCB - 0x18 - 16 - read-write - 0x0000 - 0xffff - - - CTSUCHTRC4 - CTSU Channel Transmit/Receive Control Register B - CTSUCHTRCB - 0x18 - 8 - read-write - 0x00 - 0xff - - - CTSUSR - CTSU Status Register - 0x1C - 32 - read-write - 0x00000000 - 0xffffffff - - - MFC - CTSU Multi-clock Counter - 0 - 1 - read-write - - - 00 - Multi-clock 0 - #00 - - - 01 - Multi-clock 1 - #01 - - - 10 - Multi-clock 2 - #10 - - - 11 - Multi-clock 3 - #11 - - - - - ICOMPRST - CTSU CTSUICOMP1 Flag Reset - 5 - 5 - write-only - - - ICOMP1 - CTSU Sense Current Error Monitor - 6 - 6 - read-only - - - 0 - Normal sensor current - #0 - - - 1 - Abnormal sensor current - #1 - - - - - ICOMP0 - TSCAP Voltage Error Monitor - 7 - 7 - read-only - - - 0 - Normal TSCAP voltage - #0 - - - 1 - Abnormal TSCAP voltage - #1 - - - - - STC - CTSU Measurement Status Counter - 8 - 10 - read-only - - - 000 - Status 0 - #000 - - - 001 - Status 1 - #001 - - - 010 - Status 2 - #010 - - - 011 - Status 3 - #011 - - - 100 - Status 4 - #100 - - - 101 - Status 5 - #101 - - - - - DTSR - CTSU Data Transfer Status Flag - 12 - 12 - read-only - - - 0 - Read - #0 - - - 1 - Not read - #1 - - - - - SENSOVF - CTSU Sensor Counter Overflow Flag - 13 - 13 - read-write - - - 0 - No overflow occurred - #0 - - - 1 - Overflow occurred - #1 - - - - - PS - CTSU Mutual Capacitance Status Flag - 15 - 15 - read-only - - - 0 - First measurement - #0 - - - 1 - Second measurement - #1 - - - - - CFCRDCH - CTSU CFC Read Channel Select - 16 - 21 - read-write - - - 0x00 - TS00 - 0x00 - - - 0x02 - TS02 (CFC) - 0x02 - - - 0x04 - TS04 - 0x04 - - - 0x05 - TS05 - 0x05 - - - 0x06 - TS06 - 0x06 - - - 0x07 - TS07 - 0x07 - - - 0x08 - TS08 (CFC) - 0x08 - - - 0x09 - TS09 (CFC) - 0x09 - - - 0x0A - TS10 (CFC) - 0x0a - - - 0x0B - TS11 (CFC) - 0x0b - - - 0x0C - TS12 (CFC) - 0x0c - - - 0x0D - TS13 (CFC) - 0x0d - - - 0x0E - TS14 (CFC) - 0x0e - - - 0x0F - TS15 (CFC) - 0x0f - - - 0x10 - TS16 (CFC) - 0x10 - - - 0x11 - TS17 - 0x11 - - - 0x12 - TS18 - 0x12 - - - 0x15 - TS21 - 0x15 - - - 0x16 - TS22 - 0x16 - - - 0x17 - TS23 - 0x17 - - - 0x18 - TS24 - 0x18 - - - 0x19 - TS25 - 0x19 - - - 0x1A - TS26 (CFC) - 0x1a - - - 0x1B - TS27 (CFC) - 0x1b - - - 0x1C - TS28 (CFC) - 0x1c - - - 0x1D - TS29 (CFC) - 0x1d - - - 0x1E - TS30 (CFC) - 0x1e - - - 0x1F - TS31 (CFC) - 0x1f - - - 0x20 - TS32 (CFC) - 0x20 - - - 0x21 - TS33 (CFC) - 0x21 - - - 0x22 - TS34 (CFC) - 0x22 - - - 0x23 - TS35 (CFC) - 0x23 - - - - - - - CTSUSRL - CTSU Status Register - CTSUSR - 0x1C - 16 - read-write - 0x0000 - 0xffff - - - CTSUSR0 - CTSU Status Register - CTSUSR - 0x1C - 8 - read-write - 0x00 - 0xff - - - CTSUST - CTSU Status Register - CTSUSR - 0x1D - 8 - read-write - 0x00 - 0xff - - - CTSUSRH - CTSU Status Register - CTSUSR - 0x1E - 16 - read-write - 0x0000 - 0xffff - - - CTSUSR2 - CTSU Status Register - CTSUSRH - 0x1E - 8 - read-write - 0x00 - 0xff - - - CTSUSO - CTSU Sensor Offset Register - 0x20 - 32 - read-write - 0x00000000 - 0xffffffff - - - SO - CTSU Sensor Offset Adjustment - 0 - 9 - read-write - - - SNUM - CTSU Measurement Count Setting - 10 - 17 - read-write - - - SSDIV - CTSU Spectrum Diffusion Frequency Division Setting - 20 - 23 - read-write - - - SDPA - CTSU Base Clock Setting - 24 - 31 - read-write - - - - - CTSUSO0 - CTSU Sensor Offset Register - CTSUSO - 0x20 - 16 - read-write - 0x0000 - 0xffff - - - CTSUSO1 - CTSU Sensor Offset Register - CTSUSO - 0x22 - 16 - read-write - 0x0000 - 0xffff - - - CTSUSCNT - CTSU Sensor Counter Register - 0x24 - 32 - read-only - 0x00000000 - 0xffffffff - - - SENSCNT - CTSU Sensor Counter - 0 - 15 - read-only - - - - - CTSUSC - CTSU Sensor Counter Register - CTSUSCNT - 0x24 - 16 - read-only - 0x0000 - 0xffff - - - CTSUCALIB - CTSU Calibration Register - 0x28 - 32 - read-write - 0x00000000 - 0xffffffff - - - TSOD - CTSU TS Pins Fixed Output Select - 2 - 2 - read-write - - - 0 - Electrostatic capacitance measurement mode - #0 - - - 1 - TS pins fix output (High output/Low output). - #1 - - - - - DRV - CTSU Calibration Setting Bit 1 - 3 - 3 - read-write - - - 0 - Electrostatic capacitance measurement mode - #0 - - - 1 - Calibration setting 1 - #1 - - - - - SUCLKEN - CTSU SUCLK Enable Control - 6 - 6 - read-write - - - 0 - SUCLK operation is disabled. - #0 - - - 1 - SUCLK operation is enabled. - #1 - - - - - TSOC - CTSU Calibration Setting Bit 2 - 7 - 7 - read-write - - - 0 - Electrostatic capacitance measurement mode - #0 - - - 1 - Calibration setting 2 - #1 - - - - - IOC - CTSU Transfer Pins Control - 9 - 9 - read-write - - - 0 - Low level - #0 - - - 1 - High level - #1 - - - - - CFCRDMD - CTSU CFC Counter Read Mode Select - 10 - 10 - read-write - - - 0 - Read by DTC - #0 - - - 1 - Read by CPU - #1 - - - - - DCOFF - CTSU Down Converter Control - 11 - 11 - read-write - - - 0 - Normal operation mode - #0 - - - 1 - The down converter is off. - #1 - - - - - CFCMODE - CTSU CFC Current Source Switching - 22 - 22 - read-write - - - 0 - CFC current measurement (normal mode) - #0 - - - 1 - External current measurement for calibration - #1 - - - - - DACCARRY - CTSU DAC Upper Current Source Carry Control - 25 - 25 - read-write - - - 0 - Do not carry - #0 - - - 1 - Carry - #1 - - - - - SUCARRY - CTSU CCO Carry Control - 27 - 27 - read-write - - - 0 - Do not carry - #0 - - - 1 - Carry - #1 - - - - - DACCLK - CTSU DAC Modulation Circuit Clock Select - 28 - 28 - read-write - - - 0 - Divided PCLK specified by CTSUCRA.CLK[1:0] bits - #0 - - - 1 - SUCLK - #1 - - - - - CCOCLK - CTSU CCO Modulation Circuit Clock Select - 29 - 29 - read-write - - - 0 - Divided PCLK specified by CTSUCRA.CLK[1:0] bits - #0 - - - 1 - SUCLK - #1 - - - - - CCOCALIB - CTSU CCO Calibration Mode Select - 30 - 30 - read-write - - - 0 - Normal mode - #0 - - - 1 - Oscillator calibration mode - #1 - - - - - - - CTSUDBGR0 - CTSU Calibration Register - CTSUCALIB - 0x28 - 16 - read-write - 0x0000 - 0xffff - - - CTSUDBGR1 - CTSU Calibration Register - CTSUCALIB - 0x2A - 16 - read-write - 0x0000 - 0xffff - - - CTSUSUCLKA - CTSU Sensor Unit Clock Control Register A - 0x2C - 32 - read-write - 0x00000000 - 0xffffffff - - - CTSUSUCLK0 - CTSU Sensor Unit Clock Control Register A - CTSUSUCLKA - 0x2C - 16 - read-write - 0x0000 - 0xffff - - - CTSUSUCLK1 - CTSU Sensor Unit Clock Control Register A - CTSUSUCLKA - 0x2E - 16 - read-write - 0x0000 - 0xffff - - - CTSUSUCLKB - CTSU Sensor Unit Clock Control Register B - 0x30 - 32 - read-write - 0x00000000 - 0xffffffff - - - SUADJ2 - CTSU SUCLK Frequency Adjustment - 0 - 7 - read-write - - - SUMULTI2 - CTSU SUCLK Multiplier Rate Setting - 8 - 15 - read-write - - - SUADJ3 - CTSU SUCLK Frequency Adjustment - 16 - 23 - read-write - - - SUMULTI3 - CTSU SUCLK Multiplier Rate Setting - 24 - 31 - read-write - - - - - CTSUSUCLK2 - CTSU Sensor Unit Clock Control Register B - CTSUSUCLKB - 0x30 - 16 - read-write - 0x0000 - 0xffff - - - CTSUSUCLK3 - CTSU Sensor Unit Clock Control Register B - CTSUSUCLKB - 0x32 - 16 - read-write - 0x0000 - 0xffff - - - CTSUCFCCNT - CTSU CFC Counter Register - 0x34 - 32 - read-only - 0x00000000 - 0xffffffff - - - CFCCNT - CTSU CFC Counter - 0 - 15 - read-only - - - - - CTSUCFCCNTL - CTSU CFC Counter Register - CTSUCFCCNT - 0x34 - 16 - read-only - 0x0000 - 0xffff - - - - - R_DAC - D/A Converter - 0x4005E000 - - 0x00000000 - 0x00A - registers - - - - DACR - D/A Control Register - 0x04 - 8 - read-write - 0x1F - 0xFF - - - DAE - D/A Enable - 5 - 5 - read-write - - - 0 - Control D/A conversion of channels 0 and 1 individually - #0 - - - - - 2 - 1 - DAOE%s - D/A Output Enable 0 - 6 - 6 - read-write - - - 0 - Analog output of channel 0 (DA0) is disabled. - #0 - - - 1 - D/A conversion of channel 0 is enabled. Analog output of channel 0 (DA0) is enabled. - #1 - - - - - - - 2 - 2 - DADR[%s] - D/A Data Register - 0x00 - 16 - read-write - 0x0000 - 0xFFFF - - - DADR - D/A Data RegisterNOTE: When DADPR.DPSEL = 0, the high-order 4 bits are fixed to 0: right justified format. When DADPR.DPSEL = 1, the low-order 4 bits are fixed to 0: left justified format. - 0 - 15 - read-write - - - - - DADPR - DADR0 Format Select Register - 0x05 - 8 - read-write - 0x00 - 0xFF - - - DPSEL - DADRm Format Select - 7 - 7 - read-write - - - 0 - Right justified format. - #0 - - - 1 - Left justified format. - #1 - - - - - - - DAADSCR - D/A-A/D Synchronous Start Control Register - 0x06 - 8 - read-write - 0x00 - 0xFF - - - DAADST - D/A-A/D Synchronous Conversion - 7 - 7 - read-write - - - 0 - D/A converter operation does not synchronize with A/D converter operation (unit 1) (countermeasure against interference between D/A and A/D conversions is disabled). - #0 - - - 1 - D/A converter operation synchronizes with A/D converter operation (unit 1) (countermeasure against interference between D/A and A/D conversions is enabled). - #1 - - - - - - - DAVREFCR - D/A VREF Control Register - 0x07 - 8 - read-write - 0x00 - 0xFF - - - REF - D/A Reference Voltage Select - 0 - 2 - read-write - - - 000 - Not selected - #000 - - - 001 - AVCC0/AVSS0 - #001 - - - 011 - Internal reference voltage/AVSS0 - #011 - - - 110 - VREFH/VREFL - #110 - - - others - Setting prohibited - true - - - - - - - DAPC - D/A Switch Charge Pump Control Register - 0x09 - 8 - read-write - 0x00 - 0xFF - - - PUMPEN - Charge Pump Enable - 0 - 0 - read-write - - - 0 - Charge pump disabled - #0 - - - 1 - Charge pump enabled - #1 - - - - - - - DAAMPCR - D/A Output Amplifier Control Register - 0x08 - 8 - read-write - 0x1F - 0xFF - - - 2 - 1 - DAAMP%s - Amplifier Control - 6 - 6 - read-write - - - 0 - Do not use channel output amplifier - #0 - - - - - - - DAASWCR - D/A Amplifier Stabilization Wait Control Register - 0x1C - 8 - read-write - 0x00 - 0xFF - - - DAASW1 - Set the DAASW1 bit to 1 in the initialization procedure to wait for stabilization of the output amplifier of D/A channel 1. When DAASW1 is set to 1, D/A conversion operates, but the conversion result D/A is not output from channel 1. When the DAASW1 bit is 0, the stabilization wait time stops, and the D/A conversion result of channel 1 is output through the output amplifier. - 7 - 7 - read-write - - - 0 - Amplifier stabilization wait off (output) for channel 1 - #0 - - - 1 - Amplifier stabilization wait on (high-Z) for channel 1 - #1 - - - - - DAASW0 - Set the DAASW0 bit to 1 in the initialization procedure to wait for stabilization of the output amplifier of D/A channel 0. When DAASW0 is set to 1, D/A conversion operates, but the conversion result D/A is not output from channel 0. When the DAASW0 bit is 0, the stabilization wait time stops, and the D/A conversion result of channel 0 is output through the output amplifier. - 6 - 6 - read-write - - - 0 - Amplifier stabilization wait off (output) for channel 0 - #0 - - - 1 - Amplifier stabilization wait on (high-Z) for channel 0 - #1 - - - - - - - DAADUSR - D/A A/D Synchronous Unit Select Register - 0x10C0 - 8 - read-write - 0x00 - 0xFF - - - AMADSEL1 - The DAADUSR register selects the target ADC12 unit for D/A and A/D synchronous conversions. Set bit [1] to 1 to select unit 1 as the target synchronous unit for the MCU. When setting the DAADSCR.DAADST bit to 1 for synchronous conversions, select the target unit in this register in advance. Only set the DAADUSR register while the ADCSR.ADST bit of the ADC12 is set to 0 and the DAADSCR.DAADST bit is set to 0. - 6 - 6 - read-write - - - 0 - Do not select unit 1 - #0 - - - 1 - Select unit 1 - #1 - - - - - - - - - R_DAC8 - 8-Bit D/A Converter - 0x4009E000 - - 0x00000000 - 0x002 - registers - - - 0x00000003 - 0x01 - registers - - - 0x00000006 - 0x002 - registers - - - - DAM - D/A Converter Mode Register - 0x03 - 8 - read-write - 0x00 - 0xFF - - - DACE1 - D/A operation enable 1 - 5 - 5 - read-write - - - 0 - D/A conversion disabled for channel 1 - #0 - - - 1 - D/A conversion enabled for channel 1 - #1 - - - - - DACE0 - D/A operation enable 0 - 4 - 4 - read-write - - - 0 - D/A conversion disabled for channel 0 - #0 - - - 1 - D/A conversion enabled for channel 0 - #1 - - - - - DAMD1 - D/A operation mode select 1 - 1 - 1 - read-write - - - 0 - Channel 1 for normal operation mode - #0 - - - 1 - Channel 1 for real-time output mode(event link) - #1 - - - - - DAMD0 - D/A operation mode select 0 - 0 - 0 - read-write - - - 0 - Channel 0 for normal operation mode - #0 - - - 1 - Channel 0 for real-time output mode(event link) - #1 - - - - - - - 2 - 0x01 - DACS[%s] - D/A Conversion Value Setting Register %s - 0x00 - 8 - read-write - 0x00 - 0xFF - - - DACS - DACS D/A conversion store data - 0 - 7 - read-write - - - - - DACADSCR - D/A A/D Synchronous Start Control Register - 0x06 - 8 - read-write - 0x00 - 0xFF - - - DACADST - D/A A/D Synchronous Conversion - 0 - 0 - read-write - - - 0 - Do not synchronize DAC8 with ADC16 operation (disable interference reduction between D/A and A/D conversion) - #0 - - - 1 - Synchronize DAC8 with ADC16 operation (enable interference reduction between D/A and A/D conversion). - #1 - - - - - - - DACPC - D/A SW Charge Pump Control Register - 0x07 - 8 - read-write - 0x00 - 0xFF - - - PUMPEN - Charge pump enable - 0 - 0 - read-write - - - 0 - Charge pump disable - #0 - - - 1 - Charge pump enable - #1 - - - - - - - - - R_DALI0 - Digital Addressable Lighting Interface - 0x4008F000 - - 0x00000000 - 0x018 - registers - - - 0x0000001E - 0x006 - registers - - - 0x00000026 - 0x004 - registers - - - 0x0000002E - 0x006 - registers - - - 0x00000036 - 0x02 - registers - - - 0x0000003A - 0x004 - registers - - - - BTVTHR1 - DALI Bit Timing Violation Threshold Register 1 - 0x000 - 16 - read-write - 0x4F00 - 0xFFFF - - - BTV2 - Bit Timing Violation Threshold 2Specifies the bit timing violation threshold value 2.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 8 - 15 - read-write - - - BTV1 - Bit Timing Violation Threshold 1Specifies the bit timing violation threshold value 1.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 6 - read-write - - - - - BTVTHR2 - DALI Bit Timing Violation Threshold Register 2 - 0x002 - 16 - read-write - 0x654F - 0xFFFF - - - BTV4 - Bit Timing Violation Threshold 4Specifies the bit timing violation threshold value 4.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 8 - 15 - read-write - - - BTV3 - Bit Timing Violation Threshold 3Specifies the bit timing violation threshold value 3.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 7 - read-write - - - - - BTVTHR3 - DALI Bit Timing Violation Threshold Register 3 - 0x004 - 16 - read-write - 0x009D - 0xFFFF - - - BTV5 - Bit Timing Violation Threshold 5Specifies the bit timing violation threshold value 5.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 7 - read-write - - - - - BTVTHR4 - DALI Bit Timing Violation Threshold Register 4 - 0x006 - 16 - read-write - 0x00DB - 0xFFFF - - - BTV6 - Bit Timing Violation Threshold 6Specifies the bit timing violation threshold value 6.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 8 - read-write - - - - - COLTHR1 - DALI Collision Threshold Register 1 - 0x008 - 16 - read-write - 0x380F - 0xFFFF - - - COL2 - Collision Threshold 2Specifies the collision threshold value 2.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 8 - 13 - read-write - - - COL1 - Collision Threshold 1Specifies the collision threshold value 1.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 5 - read-write - - - - - COLTHR2 - DALI Collision Threshold Register 2 - 0x00A - 16 - read-write - 0x443C - 0xFFFF - - - COL4 - Collision Threshold 4Specifies the collision threshold value 4.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 8 - 14 - read-write - - - COL3 - Collision Threshold 3Specifies the collision threshold value 3.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 6 - read-write - - - - - COLTHR3 - DALI Collision Threshold Register 3 - 0x00C - 16 - read-write - 0x7148 - 0xFFFF - - - COL6 - Collision Threshold 6Specifies the collision threshold value 6.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 8 - 14 - read-write - - - COL5 - Collision Threshold 5Specifies the collision threshold value 5.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 6 - read-write - - - - - COLTHR4 - DALI Collision Threshold Register 4 - 0x00E - 16 - read-write - 0x8879 - 0xFFFF - - - COL8 - Collision Threshold 8Specifies the collision threshold value 8.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 8 - 15 - read-write - - - COL7 - Collision Threshold 7Specifies the collision threshold value 7.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 7 - read-write - - - - - COLTHR5 - DALI Collision Threshold Register 5 - 0x010 - 16 - read-write - 0x008E - 0xFFFF - - - COL9 - Collision Threshold 9Specifies the collision threshold value 9.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. - 0 - 7 - read-write - - - - - CNFR1 - DALI Configuration Register 1 - 0x012 - 16 - read-write - 0x00FF - 0xFFFF - - - CHL - Character Length - 12 - 14 - read-write - - - 000 - 8 bits - #000 - - - 001 - 16 bits - #001 - - - 010 - 24 bits - #010 - - - 011 - 32 bits - #011 - - - 100 - 20 bits - #100 - - - 101 - 17 bits - #101 - - - others - Setting prohibited - true - - - - - CKS - Clock Select - 8 - 9 - read-write - - - 00 - PCLK clock (x = 0) - #00 - - - 01 - PCLK/4 clock (x = 1) - #01 - - - 10 - PCLK/16 clock (x = 2) - #10 - - - 11 - PCLK/64 clock (x = 3) - #11 - - - - - BR - Clock SelectBit rate setting example is shown in Table - 0 - 7 - read-write - - - - - CNFR2 - DALI Configuration Register 2 - 0x014 - 16 - read-write - 0x0000 - 0xFFFF - - - CDM0 - Collision Detect ModeNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. - 5 - 5 - read-write - - - 0 - Destroy area - #0 - - - 1 - Destroy area and avoidance area (edge) - #1 - - - - - CDE - Collision Detect EnableNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. - 4 - 4 - read-write - - - 0 - Collision detection is disabled. - #0 - - - 1 - Collision detection is enabled. - #1 - - - - - TXWE - DTX Width Modulation EnableNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. - 3 - 3 - read-write - - - 0 - The width of DTX0 waveform is not modulated. - #0 - - - 1 - The width of DTX0 waveform is modulated. - #1 - - - - - SGA - Save an Edge of Gray Area ModeNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. - 2 - 2 - read-write - - - 0 - The edge allowable area of the DRX0 input signal is the default. - #0 - - - 1 - The edge allowable area of the DRX0 input signal is extended. - #1 - - - - - BTVM - Bit Timing Violation ModeNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. - 1 - 1 - read-write - - - 0 - Edge in gray area between half bit and 2-half bit is not detected as bit timing violation. - #0 - - - 1 - Edge in gray area between half bit and 2-half bit is detected as bit timing violation. - #1 - - - - - BTVE - Bit Timing Violation EnableNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. - 0 - 0 - read-write - - - 0 - Bit timing violation function is disabled. - #0 - - - 1 - Bit timing violation function is enabled. - #1 - - - - - - - TXWR1 - DALI DTX Width Register 1 - 0x016 - 16 - read-write - 0x003F - 0xFFFF - - - TXLW - DTX Low WidthDTX0 pin low level width - 0 - 6 - read-write - - - - - TDR1H - DALI Transmit Data Register 1H - 0x01E - 16 - read-write - 0x0000 - 0xFFFF - - - DTDR - Upper 16-bit DALI transmit data - 0 - 15 - read-write - - - - - TDR1L - DALI Transmit Data Register 1L - 0x020 - 16 - read-write - 0x0000 - 0xFFFF - - - DTDR - Lower 16-bit DALI transmit data - 0 - 15 - read-write - - - - - TRSTR1 - DALI Transmit Control Register 1 - SPDR - 0x022 - 16 - write-only - 0x0000 - 0xFFFF - - - TRST - Transmission Start Trigger - 0 - 0 - write-only - - - 0 - No effect - #0 - - - 1 - Transmission Start - #1 - - - - - - - CTR1 - DALI Control Register 1 - 0x026 - 16 - read-write - 0x0000 - 0xFFFF - - - FEIE - DALI_FEI Output Enabling - 12 - 12 - read-write - - - 0 - DALI_FEI output is disabled. - #0 - - - 1 - DALI_FEI output is enabled. - #1 - - - - - BPIE - DALI_BPI Output Enabling - 11 - 11 - read-write - - - 0 - DALI_BPI output is disabled. - #0 - - - 1 - DALI_BPI output is enabled. - #1 - - - - - CLIE - DALI_CLI Output Enabling - 10 - 10 - read-write - - - 0 - DALI_CLI output is disabled. - #0 - - - 1 - DALI_CLI output is enabled. - #1 - - - - - DEIE - DALI_DEI Output Enabling - 9 - 9 - read-write - - - 0 - DALI_DEI output is disabled. - #0 - - - 1 - DALI_DEI output is enabled. - #1 - - - - - SDIE - DALI_SDI Output Enabling - 8 - 8 - read-write - - - 0 - DALI_SDI output is disabled. - #0 - - - 1 - DALI_SDI output is enabled. - #1 - - - - - RE - Receive Enabling - 1 - 1 - read-write - - - 0 - Storing received data is disabled. - #0 - - - 1 - Storing received data is enabled. - #1 - - - - - TE - Transmit Enabling - 0 - 0 - read-write - - - 0 - Transmit operation is disabled. - #0 - - - 1 - Transmit operation is enabled. - #1 - - - - - - - TXDCTR1 - DALI DTX Control Register 1 - 0x028 - 16 - read-write - 0x0000 - 0xFFFF - - - TXASE - DTX Assert EnablingNote 1. The bit must be modified only when the DALI0.CTR1.TE bit is 0. - 1 - 1 - read-write - - - 0 - An internal transmit data is output to the DTX0 pin. - #0 - - - 1 - The level specified by TXAS bit is output to the DTX0 pin. - #1 - - - - - TXAS - DTX Assert LevelNote 1. The bit must be modified only when the DALI0.CTR1.TE bit is 0. - 0 - 0 - read-write - - - 0 - The DTX0 pin is driven low. - #0 - - - 1 - The DTX0 pin is driven high. - #1 - - - - - - - RDR1H - DALI Reception Data Register 1H - 0x02E - 16 - read-only - 0x0000 - 0xFFFF - - - DRDR - Upper 16-bit of DALI receive data - 0 - 15 - read-only - - - - - RDR1L - DALI Reception Data Register 1L - 0x030 - 16 - read-only - 0x0000 - 0xFFFF - - - DRDR - Lower 16-bit of DALI receive data - 0 - 15 - read-only - - - - - STR1 - DALI Status Register 1 - 0x032 - 16 - read-only - 0x0000 - 0xFFFF - - - RDBL - Receive Data Bit LengthThese bits store the bit length for data received successfully - 10 - 15 - read-only - - - DAF - Destroy Area Flag - 9 - 9 - read-only - - - 0 - The collision did not occur in the destroy area or 1 was written to the DALI0.FECR1.DAFC bit. - #0 - - - 1 - The collision occurred in the destroy area. - #1 - - - - - CDF - Collision Detect Flag - 8 - 8 - read-only - - - 0 - No collision occurred or 1 was written to the DALI0.FECR1.CDFC bit. - #0 - - - 1 - A collision occurred. - #1 - - - - - O32F - Over 32-Bit Data Reception Flag - 7 - 7 - read-only - - - 0 - Receive data is 32 bits or less, or 1 was written to the DALI0.FECR1.O32FC bit. - #0 - - - 1 - Receive data is 33 bits or more. - #1 - - - - - BPDF - Bus Power Down Flag - 6 - 6 - read-only - - - 0 - No effected - #0 - - - 1 - Bus power down detected - #1 - - - - - BBF - Bus BUSY Flag - 5 - 5 - read-only - - - 0 - DALI bus is IDLE - #0 - - - 1 - DALI bus is BUSY - #1 - - - - - TENDF - Transmit End Flag - 4 - 4 - read-only - - - 0 - 1 was written to the DALI0.FECR1.TENDFC bit. - #0 - - - 1 - Frame transmission has been completed. - #1 - - - - - RDRF - Receive Data Register Full Flag - 3 - 3 - read-only - - - 0 - The DALI0.RDR1L register was read or 1 was written to the DALI0.FECR1.RDRFC. - #0 - - - 1 - Receive data is stored in the DALI0.RDR1L or DALI0.RDR1H register. - #1 - - - - - BTVF - Bit Timing Violation Flag - 2 - 2 - read-only - - - 0 - No bit timing violation occurred or 1 was written to the DALI0.FECR1.BTVFC bit. - #0 - - - 1 - Bit timing violation occurred - #1 - - - - - OVF - Overrun Error Flag - 1 - 1 - read-only - - - 0 - No overrun error occurred or 1 was written to the DALI0.FECR1.OVFC bit. - #0 - - - 1 - An overrun error occurred. - #1 - - - - - MFEF - Manchester Flaming Error Flag - 0 - 0 - read-only - - - 0 - No MFE occurred or 1 was written to the DALI0.FECR1.MFEFC bit. - #0 - - - 1 - An MFE occurred. - #1 - - - - - - - COLR1 - DALI Collision Register 1 - 0x036 - 16 - read-only - 0x0800 - 0xFFFF - - - TXDCV - DTX Collision Value - 13 - 13 - read-only - - - 0 - Low - #0 - - - 1 - High - #1 - - - - - RXDCEG - DRX Collision Edge - 12 - 12 - read-only - - - 0 - Falling edge - #0 - - - 1 - Rising edge - #1 - - - - - RXDMON - DRX MonitorThis bit monitors the DRX0 pin value after the DRX0 pin is synchronized - 11 - 11 - read-only - - - CLDAF - Collision Last Destroy Area Flag - 10 - 10 - read-only - - - 0 - Collision detected is caused by a DRX0 edge occurrence. - #0 - - - 1 - Collision detected is not caused by a DRX0 edge occurrence. (Last destroy area) - #1 - - - - - CDTF1 - Collision Detect Timing Flag 1 - 4 - 4 - read-only - - - 0 - Collision detection started at the edge on a bit period boundary. - #0 - - - 1 - Collision detection started at the edge in the middle of a bit period. - #1 - - - - - CFTF2 - Collision Detect Timing Flag 2 - 0 - 3 - read-only - - - 0000 - After reset is released - #0000 - - - 0001 - Collision detection timing 1 - #0001 - - - 0010 - Collision detection timing 2 - #0010 - - - 0011 - Collision detection timing 3 - #0011 - - - 0100 - Collision detection timing 4 - #0100 - - - 0101 - Collision detection timing 5 - #0101 - - - 0110 - Collision detection timing 6 - #0110 - - - 0111 - Collision detection timing 7 *1 - #0111 - - - 1000 - Collision detection timing 8 *1 - #1000 - - - 1001 - Collision detection timing 9 *1 - #1001 - - - 1010 - Collision detection timing 10 *1 - #1010 - - - others - Setting prohibited - true - - - - - - - FECR1 - DALI Flag Error Clear Register 1 - 0x03A - 16 - write-only - 0x0000 - 0xFFFF - - - DAFC - Destroy Area Flag Clear - 9 - 9 - write-only - - - 0 - DALI0.STR1.DAF bit is not cleared. - #0 - - - 1 - DALI0.STR1.DAF bit is cleared. - #1 - - - - - CDFC - Collision Detect Flag Clear - 8 - 8 - write-only - - - 0 - DALI0.STR1.CDF bit is not cleared. - #0 - - - 1 - DALI0.STR1.CDF bit is cleared. - #1 - - - - - O32FC - Over 32-Bit Data Reception Flag Clear - 7 - 7 - write-only - - - 0 - DALI0.STR1.O32F bit is not cleared. - #0 - - - 1 - DALI0.STR1.O32F bit is cleared - #1 - - - - - BPDFC - Bus Power Down Flag Clear - 6 - 6 - write-only - - - 0 - DALI0.STR1.BPDF bit is not cleared. - #0 - - - 1 - DALI0.STR1.BPDF bit is cleared. - #1 - - - - - BBFC - Bus BUSY Flag ClearNote1: Do not clear DALI0.STR1.BBF bit when DALI0.CTR1.TE bit or DALI0.CTR1.RE bit is 1. - 5 - 5 - write-only - - - 0 - DALI0.STR1.BBF bit is not cleared. - #0 - - - 1 - DALI0.STR1.BBF bit is cleared - #1 - - - - - TENDFC - Transmit End Flag Clear - 4 - 4 - write-only - - - 0 - DALI0.STR1.TENDF bit is not cleared. - #0 - - - 1 - DALI0.STR1.TENDF bit is cleared - #1 - - - - - RDRFC - Receive Data Register Full Flag Clear - 3 - 3 - write-only - - - 0 - DALI0.STR1.RDRF bit is not cleared. - #0 - - - 1 - DALI0.STR1.RDRF bit is cleared. - #1 - - - - - BTVFC - Bit Timing Violation Flag Clear - 2 - 2 - write-only - - - 0 - DALI0.STR1.BTVF bit is not cleared. - #0 - - - 1 - DALI0.STR1.BTVF bit is cleared. - #1 - - - - - OVFC - Overrun Error Flag Clear - 1 - 1 - write-only - - - 0 - DALI0.STR1.OVF bit is not cleared. - #0 - - - 1 - DALI0.STR1.OVF bit is cleared - #1 - - - - - MFEFC - Manchester Flaming Error Flag Clear - 0 - 0 - write-only - - - 0 - DALI0.STR1.MFEF bit is not cleared. - #0 - - - 1 - DALI0.STR1.MFEF bit is cleared - #1 - - - - - - - SWRR1 - DALI Software Reset Register 1 - 0x03C - 16 - write-only - 0x0000 - 0xFFFF - - - SWR - Software ResetWriting 1 to this bit causes a software reset. - 0 - 0 - write-only - - - - - - - R_DEBUG - Debug Function - 0x4001B000 - - 0x00000000 - 0x04 - registers - - - 0x00000010 - 0x04 - registers - - - - DBGSTR - Debug Status Register - 0 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - CDBGPWRUPREQ - Debug power-up request - 28 - 28 - read-only - - - 0 - 0: OCD is not requesting debug power up - #0 - - - 1 - 0: OCD is requesting debug power up - #1 - - - - - CDBGPWRUPACK - Debug power-up acknowledge - 29 - 29 - - - 0 - Debug power-up request is not acknowledged - #0 - - - 1 - Debug power-up request is acknowledged - #1 - - - - - - - DBGSTOPCR - Debug Stop Control Register - 0x10 - 32 - read-write - 0x00000003 - 0xFFFFFFFF - - - DBGSTOP_RPER - Mask bit for SRAM parity error - 24 - 24 - - - 3 - 1 - DBGSTOP_LVD%s - Mask bit for LVD reset/interupt - 16 - 16 - read-write - - - 0 - Enable reset/interupt on corresponding LVD - #0 - - - 1 - Mask reset/interupt on corresponding LVD - #1 - - - - - DBGSTOP_RECCR - Mask bit for SRAM ECC error - 25 - 25 - - - DBGSTOP_IWDT - Mask bit for IWDT reset/interrupt - 0 - 0 - - - DBGSTOP_WDT - Mask bit for WDT reset/interrupt - 1 - 1 - - - - - - - R_DMA - DMA Controller Common - 0x40005200 - - 0x00000000 - 0x01 - registers - - - - DMAST - DMAC Module Activation Register - 0x00 - 8 - read-write - 0x00 - 0xFF - - - DMST - DMAC Operation Enable - 0 - 0 - read-write - - - 0 - Disabled. - #0 - - - 1 - Enabled. - #1 - - - - - - - - - R_DMAC0 - DMA Controller - 0x40005000 - - 0x00000000 - 0x00E - registers - - - 0x00000010 - 0x02 - registers - - - 0x00000013 - 0x003 - registers - - - 0x00000018 - 0x007 - registers - - - - DMSAR - DMA Source Address Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DMSAR - Specifies the transfer source start address. - 0 - 31 - read-write - - - - - DMDAR - DMA Destination Address Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DMDAR - Specifies the transfer destination start address. - 0 - 31 - read-write - - - - - DMCRA - DMA Transfer Count Register - 0x08 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DMCRAH - Upper bits of transfer count - 16 - 25 - read-write - - - DMCRAL - Lower bits of transfer count - 0 - 15 - read-write - - - - - DMCRB - DMA Block Transfer Count Register - 0x0C - 16 - read-write - 0x0000 - 0xFFFF - - - DMCRB - Specifies the number of block transfer operations or repeat transfer operations. - 0 - 15 - read-write - - - 0000 - 65,536 blocks - #0000 - - - others - DMCRB blocks - true - - - - - - - DMTMD - DMA Transfer Mode Register - 0x10 - 16 - read-write - 0x0000 - 0xFFFF - - - MD - Transfer Mode Select - 14 - 15 - read-write - - - 00 - Normal transfer - #00 - - - 01 - Repeat transfer - #01 - - - 10 - Block transfer - #10 - - - 11 - Setting prohibited - #11 - - - - - DTS - Repeat Area Select - 12 - 13 - read-write - - - 00 - The destination is specified as the repeat area or block area. - #00 - - - 01 - The source is specified as the repeat area or block area. - #01 - - - 10 - The repeat area or block area is not specified. - #10 - - - 11 - Setting prohibited - #11 - - - - - SZ - Transfer Data Size Select - 8 - 9 - read-write - - - 00 - 8 bits - #00 - - - 01 - 16 bits - #01 - - - 10 - 32 bits - #10 - - - 11 - Setting prohibited - #11 - - - - - DCTG - Transfer Request Source Select - 0 - 1 - read-write - - - 00 - Software - #00 - - - 01 - Interrupts*1 from peripheral modules or external interrupt input pins - #01 - - - 10 - Setting prohibited - #10 - - - 11 - Setting prohibited - #11 - - - - - - - DMINT - DMA Interrupt Setting Register - 0x13 - 8 - read-write - 0x00 - 0xFF - - - DTIE - Transfer End Interrupt Enable - 4 - 4 - read-write - - - 0 - Disabled - #0 - - - 1 - Enabled - #1 - - - - - ESIE - Transfer Escape End Interrupt Enable - 3 - 3 - read-write - - - 0 - Disabled - #0 - - - 1 - Enabled - #1 - - - - - RPTIE - Repeat Size End Interrupt Enable - 2 - 2 - read-write - - - 0 - Disabled - #0 - - - 1 - Enabled - #1 - - - - - SARIE - Source Address Extended Repeat Area Overflow Interrupt Enable - 1 - 1 - read-write - - - 0 - Disabled - #0 - - - 1 - Enabled - #1 - - - - - DARIE - Destination Address Extended Repeat Area Overflow Interrupt Enable - 0 - 0 - read-write - - - 0 - Disabled - #0 - - - 1 - Enabled - #1 - - - - - - - DMAMD - DMA Address Mode Register - 0x14 - 16 - read-write - 0x0000 - 0xFFFF - - - SM - Source Address Update Mode - 14 - 15 - read-write - - - 00 - Fixed address - #00 - - - 01 - Offset addition - #01 - - - 10 - Incremented address - #10 - - - 11 - Decremented address. - #11 - - - - - SARA - Source Address Extended Repeat Area Specifies the extended repeat area on the source address. For details on the settings. - 8 - 12 - read-write - - - DM - Destination Address Update Mode - 6 - 7 - read-write - - - 00 - Fixed address - #00 - - - 01 - Offset addition - #01 - - - 10 - Incremented address - #10 - - - 11 - Decremented address. - #11 - - - - - DARA - Destination Address Extended Repeat Area Specifies the extended repeat area on the destination address. For details on the settings. - 0 - 4 - read-write - - - - - DMOFR - DMA Offset Register - 0x18 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DMOFR - Specifies the offset when offset addition is selected as the address update mode for transfer source or destination. - 0 - 31 - read-write - - - - - DMCNT - DMA Transfer Enable Register - 0x1C - 8 - read-write - 0x00 - 0xFF - - - DTE - DMA Transfer Enable - 0 - 0 - read-write - modify - - - 0 - Disabled - #0 - - - 1 - Enabled. - #1 - - - - - - - DMREQ - DMA Software Start Register - 0x1D - 8 - read-write - 0x00 - 0xFF - - - CLRS - DMA Software Start Bit Auto Clear Select - 4 - 4 - read-write - - - 0 - SWREQ bit is cleared after DMA transfer is started by software. - #0 - - - 1 - SWREQ bit is not cleared after DMA transfer is started by software. - #1 - - - - - SWREQ - DMA Software Start - 0 - 0 - read-write - modify - - - 0 - DMA transfer is not requested. - #0 - - - 1 - DMA transfer is requested. - #1 - - - - - - - DMSTS - DMA Status Register - 0x1E - 8 - read-write - 0x00 - 0xFF - - - ACT - DMA Active Flag - 7 - 7 - read-only - - - 0 - DMAC operation suspended - #0 - - - 1 - DMAC operating. - #1 - - - - - DTIF - Transfer End Interrupt Flag - 4 - 4 - read-write - zeroToClear - modify - - - 0 - No interrupt - #0 - - - 1 - Interrupt occurred. - #1 - - - - - ESIF - Transfer Escape End Interrupt Flag - 0 - 0 - read-write - zeroToClear - modify - - - 0 - No interrupt - #0 - - - 1 - Interrupt occurred. - #1 - - - - - - - - - R_DMAC1 - 0x40005040 - - - R_DMAC2 - 0x40005080 - - - R_DMAC3 - 0x400050C0 - - - R_DMAC4 - 0x40005100 - - - R_DMAC5 - 0x40005140 - - - R_DMAC6 - 0x40005180 - - - R_DMAC7 - 0x400051C0 - - - R_DOC - Data Operation Circuit - 0x40054100 - - 0x00000000 - 0x01 - registers - - - 0x00000002 - 0x004 - registers - - - - DOCR - DOC Control Register - 0x00 - 8 - read-write - 0x00 - 0xFF - - - DOPCFCL - DOPCF Clear - 6 - 6 - read-write - - - 0 - Maintains the DOPCF flag state. - #0 - - - 1 - Clears the DOPCF flag. - #1 - - - - - DOPCF - Data Operation Circuit Flag - 5 - 5 - read-only - - - DCSEL - Detection Condition Select - 2 - 2 - read-write - - - 0 - DOPCF is set when data mismatch is detected. - #0 - - - 1 - DOPCF is set when data match is detected. - #1 - - - - - OMS - Operating Mode Select - 0 - 1 - read-write - - - 00 - Data comparison mode - #00 - - - 01 - Data addition mode - #01 - - - 10 - Data subtraction mode - #10 - - - 11 - Setting prohibited - #11 - - - - - - - DODIR - DOC Data Input Register - 0x02 - 16 - read-write - 0x0000 - 0xFFFF - - - DODIR - 16-bit read-write register in which 16-bit data for use in the operations are stored. - 0 - 15 - read-write - - - - - DODSR - DOC Data Setting Register - 0x04 - 16 - read-write - 0x0000 - 0xFFFF - - - DODSR - This register stores 16-bit data for use as a reference in data comparison mode. This register also stores the results of operations in data addition and data subtraction modes. - 0 - 15 - read-write - - - - - - - R_DRW - 2D Drawing Engine - 0x400E4000 - - 0x00000000 - 0x008 - registers - - - 0x00000010 - 0x050 - registers - - - 0x00000064 - 0x008 - registers - - - 0x00000074 - 0x010 - registers - - - 0x00000090 - 0x020 - registers - - - 0x000000B4 - 0x024 - registers - - - 0x000000DC - 0x010 - registers - - - - CONTROL - Geometry Control Register - 0x00 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - SPANSTORE - Nextline span start is always equal or left to current-line span start - 23 - 23 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - SPANABORT - Shape is horizontally convex, only a single span per scanline - 22 - 22 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - UNIONCD - Combine outputs C & D as union (output is final) - 21 - 21 - write-only - - - 0 - minimum/intersect - #0 - - - 1 - maximum/union - #1 - - - - - UNIONAB - Combine outputs A & B as union (output is called C) - 20 - 20 - write-only - - - 0 - minimum/intersect - #0 - - - 1 - maximum/union - #1 - - - - - UNION56 - Combine limter 5 & 6 as union (output is called D) - 19 - 19 - write-only - - - 0 - minimum/intersect - #0 - - - 1 - maximum/union - #1 - - - - - UNION34 - Combine limter 3 & 4 as union (output is called B) - 18 - 18 - write-only - - - 0 - minimum/intersect - #0 - - - 1 - maximum/union - #1 - - - - - UNION12 - Combine limter 1 & 2 as union (output is called A) - 17 - 17 - write-only - - - 0 - minimum/intersect - #0 - - - 1 - maximum/union - #1 - - - - - BAND2ENABLE - Enable band postprocess for limiter 1 (see L1BAND) - 16 - 16 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - BAND1ENABLE - Enable band postprocess for limiter 1 (see L1BAND) - 15 - 15 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM6THRESHOLD - Enable limiter 6 threshold mode - 14 - 14 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM5THRESHOLD - Enable limiter 5 threshold mode - 13 - 13 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM4THRESHOLD - Enable limiter 4 threshold mode - 12 - 12 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM3THRESHOLD - Enable limiter 3 threshold mode - 11 - 11 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM2THRESHOLD - Enable limiter 2 threshold mode - 10 - 10 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM1THRESHOLD - Enable limiter 1 threshold mode - 9 - 9 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - QUAD3ENABLE - Enable quadratic coupling of limiters 5 and 6 - 8 - 8 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - QUAD2ENABLE - Enable quadratic coupling of limiters 3 and 4 - 7 - 7 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - QUAD1ENABLE - Enable quadratic coupling of limiters 1 and 2 - 6 - 6 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM6ENABLE - Enable limiter 6 - 5 - 5 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM5ENABLE - Enable limiter 5 - 4 - 4 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM4ENABLE - Enable limiter 4 - 3 - 3 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM3ENABLE - Enable limiter 3 - 2 - 2 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM2ENABLE - Enable limiter 2 - 1 - 1 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - LIM1ENABLE - Enable limiter 1 - 0 - 0 - write-only - - - 0 - disabled - #0 - - - 1 - enabled - #1 - - - - - - - CONTROL2 - Surface Control Register - 0x04 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - RLEPIXELWIDTH - Texel width for RLE unit - 30 - 31 - write-only - - - 00 - 1 byte per texel - #00 - - - 01 - 2 byte per texel - #01 - - - 10 - 3 byte per texel - #10 - - - 11 - 4 byte per texel - #11 - - - - - BDIA - Blend destination factor inverted in alpha channel (USEACB = 1) - 29 - 29 - write-only - - - 0 - use blend factor as specified through BDFA - #0 - - - 1 - invert blend destination factor (1-x) - #1 - - - - - BSIA - Blend source factor inverted in alpha channel (USEACB = 1) - 28 - 28 - write-only - - - 0 - use blend factor as specified through BSFA - #0 - - - 1 - invert blend source factor (1-x) - #1 - - - - - CLUTFORMAT - Format of the CLUT - 27 - 27 - write-only - - - 0 - aRGB(8888) - #0 - - - 1 - RGB(565) - #1 - - - - - COLKEYENABLE - color keying enable - 26 - 26 - write-only - - - 0 - color keying disabled - #0 - - - 1 - color keying enabled - #1 - - - - - CLUTENABLE - CLUT enable - 25 - 25 - write-only - - - 0 - CLUT disabled - #0 - - - 1 - CLUT enabled - #1 - - - - - RLEENABLE - RLE enable - 24 - 24 - write-only - - - 0 - RLE disabled - #0 - - - 1 - RLE enabled - #1 - - - - - WRITEALPHA - Writeback alpha source for framebufferSet the 'alpha source' for the framebuffer(USEACB = 0)Blend alpha in color 2 instead of framebuffer alpha((USEACB = 1))In not alpha channel blending mode (USEACB = 0):Set the 'alpha source' for the framebuffer.In alpha channel blending mode (USEACB = 1):Blend alpha in color 2 instead of framebuffer alpha00B: BC2A = 1: use alpha from framebuffer as destination (DST_A)else: BC2A = 0: use alpha in color 2 as destination (DST_A) - 22 - 23 - write-only - - - 00 - use alpha from color 2 - #00 - - - 01 - use source alpha (pixel coverage) - #01 - - - 10 - use 0.0 as alpha - #10 - - - 11 - use alpha from framebuffer - #11 - - - - - WRITEFORMAT10 - Pixel format of the framebuffer - 20 - 21 - write-only - - - 00 - 8bpp a(8)0 - #00 - - - 01 - 16bpp RGB(565) - #01 - - - 10 - 32bpp aRGB(8888) - #10 - - - 11 - 16bpp aRGB(4444) - #11 - - - - - READFORMAT10 - Pixel format of the texture buffer{READFORMAT32,READFORMAT10}0000: 8 bpp a(8)0001: 16 bpp RGB(565)0010: 32 bpp aRGB(8888)0011: 16 bpp aRGB(4444)0100: 16 bpp aRGB(1555)0101: 8 bpp aCLUT(44) 4 bit alpha and 4 bit indexed color1001: 8 bpp CLUT(8)/I(8), 8 bit indexed color/luminance1010: 4 bpp CLUT(4)/I(4), 4 bit indexed color/luminance1011: 2 bpp CLUT(2)/I(2), 2 bit indexed color/luminance 1100: 1 bpp CLUT(1)/I(1), 1 bit indexed color/luminance - 18 - 19 - write-only - - - 00 - 8 bpp a(8) (READFORMAT32=00) / 16 bpp aRGB(1555) (READFORMAT32=01) / 1 bpp CLUT(1)/I(1), 1 bit indexed color/luminance (READFORMAT32=11) - #00 - - - 01 - 16 bpp RGB(565) (READFORMAT32=00) / 8 bpp aCLUT(44) 4 bit alpha and 4 bit indexed color (READFORMAT32=01) / 8 bpp CLUT(8)/I(8), 8 bit indexed color/luminance (READFORMAT32=10) - #01 - - - 10 - 32 bpp aRGB(8888) (READFORMAT32=00) / 4 bpp CLUT(4)/I(4), 4 bit indexed color/luminance (READFORMAT32=10) - #10 - - - 11 - 16 bpp aRGB(4444) (READFORMAT32=00) / 2 bpp CLUT(2)/I(2), 2 bit indexed color/luminance (READFORMAT32=10) - #11 - - - - - TEXTUREFILTERY - Linear filtering on texture V axis - 17 - 17 - write-only - - - 0 - no filtering on texture V axis - #0 - - - 1 - linear filtering on texture V axis - #1 - - - - - TEXTUREFILTERX - Linear filtering on texture U axis - 16 - 16 - write-only - - - 0 - no filtering on texture U axis - #0 - - - 1 - linear filtering on texture U axis - #1 - - - - - TEXTURECLAMPY - Calculating V limiter outside use textureThe bit describes what happens if the V limiter (y direction in texture space) calculates a V value outside of the used texture - 15 - 15 - write-only - - - 0 - Texture wrap mode: The integer part of the calculated value from the v limiter is anded with TEXVMASK. This results in a repetition of the texture in y/v direction. - #0 - - - 1 - Texture clamp mode: The texture color at the border of the texture is taken. This results in a repetition of the texture border color in y/v direction. - #1 - - - - - TEXTURECLAMPX - Calculating U limiter outside use textureThe bit describes what happens if the U limiter (x direction in texture space) calculates a U value outside of the used texture - 14 - 14 - write-only - - - 0 - Texture wrap mode: The integer part of the calculated value from the u limiter is anded with TEXUMASK. This results in a repetition of the texture in x/u direction. - #0 - - - 1 - Texture clamp mode: The texture color at the border of the texture is taken. This results in a repetition of the texture border color in x/u direction. - #1 - - - - - BC2 - Blend color 2 instead of framebuffer pixel - 13 - 13 - write-only - - - 0 - use pixel from framebuffer as destination (DST) - #0 - - - 1 - use color 2 as destination (DST) - #1 - - - - - BDI - Blend destination factor is inverteddst factor will be inverted (meaning 1-a or 1-1 depending on BDF) - 12 - 12 - write-only - - - 0 - use blend factor as specified through BDF - #0 - - - 1 - invert blend destinationfactor (1-x) - #1 - - - - - BSI - Blend source factor is invertedsrc factor will be inverted (meaning 1-a or 1-1 depending on BSF) - 11 - 11 - write-only - - - 0 - use blend factor as specified through BSF - #0 - - - 1 - invert blend source factor (1-x) - #1 - - - - - BDF - Blend destination factordst factor is alpha (factor is 1 per default) - 10 - 10 - write-only - - - 0 - use 1.0 as blend destination factor - #0 - - - 1 - use alpha as blend destination factor - #1 - - - - - BSF - Blend source factorsrc factor is alpha (factor is 1 per default) - 9 - 9 - write-only - - - 0 - use 1.0 as blend source factor - #0 - - - 1 - use alpha as blend source factor - #1 - - - - - WRITEFORMAT2 - Bit 3 of framebuffer pixel formatSee WRITEFORMAT above description. - 8 - 8 - write-only - - - BDFA - Blend destinetion factor for alpha channel in alpha channel blending mode (USEACB = 1) - 7 - 7 - write-only - - - 0 - use 1.0 as blend destination factor for alpha channel - #0 - - - 1 - use alpha as blend destination factor for alpha channel - #1 - - - - - BSFA - Blend source factor for alpha channel in alpha channel blending mode (USEACB = 1) - 6 - 6 - write-only - - - 0 - use 1.0 as blend source factor for alpha channel - #0 - - - 1 - use alpha as blend source factor for alpha channel - #1 - - - - - READFORMAT32 - Bit 4 and 3 of the texture buffer format.See READFORMAT above for description - 4 - 5 - write-only - - - USEACB - Alpha blend mode - 3 - 3 - write-only - - - 0 - use WRITEALPHA[1:0] mode - #0 - - - 1 - use full alpha channel blending mode - #1 - - - - - PATTERNSOURCEL5 - Limiter 5 is used as pattern index instead of the default U limiter.Limiter 5 can be combined with limiter 6 to form a quadratic limiter which can be used to make quadratic pattern functions to draw radial patterns. - 2 - 2 - write-only - - - TEXTUREENABLE - Pixel source is read from texture and used as an alpha to blend between COLOR1 and COLOR2 - 1 - 1 - write-only - - - 0 - disabled texture - #0 - - - 1 - enabled texture - #1 - - - - - PATTERNENABLE - Pixel source is a pattern color (blend of COLOR1 and COLOR2 depending on PATTERN and pattern index) - 0 - 0 - write-only - - - 0 - disabled pattern - #0 - - - 1 - enabled pattern - #1 - - - - - - - IRQCTL - Interrupt Control Register - 0xC0 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - BUSIRQCLR - Clear bus error interrupt BUSIRQ - 5 - 5 - write-only - - - 0 - no BUSIRQCLR clear - #0 - - - 1 - clear BUSIRQCLR - #1 - - - - - BUSIRQEN - BUSIRQ interrupt mask enable - 4 - 4 - write-only - - - 0 - disable (mask) BUSIRQ - #0 - - - 1 - enable (unmask) BUSIRQ - #1 - - - - - DLISTIRQCLR - Clear display list interrupt DLISTIRQ - 3 - 3 - write-only - - - 0 - no DLISTRQCLR clear - #0 - - - 1 - clear DLISTRQCLR - #1 - - - - - ENUMIRQCLR - Clear enumeration interrupt ENUMIRQ - 2 - 2 - write-only - - - 0 - no ENUMIRQCLR clear - #0 - - - 1 - clear ENUMIRQCLR - #1 - - - - - DLISTIRQEN - DLISTIRQ interrupt mask enable - 1 - 1 - write-only - - - 0 - disable (mask) DLISTIRQ - #0 - - - 1 - enable (unmask) DLISTIRQ - #1 - - - - - ENUMIRQEN - ENUMIRQ interrupt mask enable - 0 - 0 - write-only - - - 0 - disable (mask) ENUMIRQ - #0 - - - 1 - enable (unmask) ENUMIRQ - #1 - - - - - - - CACHECTL - Cache Control Register - 0xC4 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - CFLUSHTX - Flush texture cache - 3 - 3 - write-only - - - 0 - do not flush the texture cache - #0 - - - 1 - flush the texture cache - #1 - - - - - CENABLETX - Texture cache enable - 2 - 2 - write-only - - - 0 - disable the texture cache - #0 - - - 1 - enable the texture cache - #1 - - - - - CFLUSHFX - Flush framebuffer cache - 1 - 1 - write-only - - - 0 - do not flush the framebuffer cache - #0 - - - 1 - flush the framebuffer cache - #1 - - - - - CENABLEFX - Framebuffer cache enable - 0 - 0 - write-only - - - 0 - disable the framebuffer cache - #0 - - - 1 - enable the framebuffer cache - #1 - - - - - - - STATUS - Status Control Register - CONTROL - 0x00 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - BUSERRMDL - display list bus error interrupt triggered - 10 - 10 - read-only - - - 0 - no display list bus error occurred or interrupt disabled - #0 - - - 1 - display list bus error interrupt triggered - #1 - - - - - BUSERRMTXMRL - texture bus error interrupt triggered - 9 - 9 - read-only - - - 0 - no texture bus error occurred or interrupt disabled - #0 - - - 1 - texture bus error interrupt triggered - #1 - - - - - BUSERRMFB - framebuffer bus error interrupt triggered - 8 - 8 - read-only - - - 0 - no framebuffer bus error occured or interrupt disabled - #0 - - - 1 - framebuffer bus error interrupt triggered - #1 - - - - - BUSIRQ - bus error interrupt triggered - 6 - 6 - read-only - - - 0 - no bus error occurred or interrupt disabled - #0 - - - 1 - bus error interrupt triggered - #1 - - - - - DLISTIRQ - display list finished interrupt triggered - 5 - 5 - read-only - - - 0 - display list not finished or interrupt disabled - #0 - - - 1 - display list finished interrupt triggered - #1 - - - - - ENUMIRQ - enumeration finished interrupt triggered - 4 - 4 - read-only - - - 0 - enumeration not finished or interrupt disabled - #0 - - - 1 - enumeration finished interrupt triggered - #1 - - - - - DLISTACTIVE - Display list reader status - 3 - 3 - read-only - - - 0 - display list reader is idle - #0 - - - 1 - display list reader busy, no direct write access to registers allowed - #1 - - - - - CACHEDIRTY - Framebuffer cache status - 2 - 2 - read-only - - - 0 - framebuffer cache is not dirty - #0 - - - 1 - framebuffer cache is dirty, frame should not be flipped - #1 - - - - - BUSYWRITE - Framebuffer writeback status - 1 - 1 - read-only - - - 0 - framebuffer writeback finished - #0 - - - 1 - framebuffer writeback busy, framebuffer type can not be changed - #1 - - - - - BUSYENUM - Enumeration unit status - 0 - 0 - read-only - - - 0 - enumeration unit idle - #0 - - - 1 - enumeration unit busy, new primitive can not be started - #1 - - - - - - - HWREVISION - Hardware Version and Feature Set ID Register - CONTROL2 - 0x04 - 32 - read-only - 0x0FBE0107 - 0xFFFFFFFF - - - ACBLEND - Alpha channel blending feature - 27 - 27 - read-only - - - 0 - Alpha channel blending unavailable - #0 - - - 1 - Alpha channel blending available - #1 - - - - - COLORKEY - Colorkey feature - 25 - 25 - read-only - - - 0 - Colorkey unavailable - #0 - - - 1 - Colorkey available - #1 - - - - - TEXCLUT256 - Texture CLUT feature - 24 - 24 - read-only - - - 0 - Texture CLUT unavailable - #0 - - - 1 - Texture CLUT available - #1 - - - - - RLEUNIT - RLE unit feature - 23 - 23 - read-only - - - 0 - RLE unit unavailable - #0 - - - 1 - RLE unit available - #1 - - - - - TEXCLU - Texture CLUT with 16 or 256 entries feature - 21 - 21 - read-only - - - 0 - Texture CLUT with 16 or 256 entries unavailable - #0 - - - 1 - Texture CLUT with 16 or 256 entries available - #1 - - - - - PERFCOUNT - Two performance counter feature - 20 - 20 - read-only - - - 0 - Two performance counter unavailable - #0 - - - 1 - Two performance counter available - #1 - - - - - TXCACHE - Texture cache feature - 19 - 19 - read-only - - - 0 - Texture cache unavailable - #0 - - - 1 - Texture cache available - #1 - - - - - FBCACHE - Framebuffer cache feature - 18 - 18 - read-only - - - 0 - Framebuffer cache unavailable - #0 - - - 1 - Framebuffer cache available - #1 - - - - - DLR - Display list reader feature - 17 - 17 - read-only - - - 0 - Display list reader unavailable - #0 - - - 1 - Display list reader available - #1 - - - - - REV - Revision number - 0 - 11 - read-only - - - - - COLOR1 - Base Color Register - 0x64 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - COLOR1A - Alpha channel of color 1(0x00: transparent. . . 0xFF: opaque) - 24 - 31 - write-only - - - COLOR1R - Red channel of color 1 - 16 - 23 - write-only - - - COLOR1G - Green channel of color 1 - 8 - 15 - write-only - - - COLOR1B - Blue channel of color 1 - 0 - 7 - write-only - - - - - COLOR2 - Secondary Color Register - 0x68 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - COLOR2A - Alpha channel of color 2(0x00: transparent. . . 0xFF: opaque) - 24 - 31 - write-only - - - COLOR2R - Red channel of color 2 - 16 - 23 - write-only - - - COLOR2G - Green channel of color 2 - 8 - 15 - write-only - - - COLOR2B - Blue channel of color 2 - 0 - 7 - write-only - - - - - PATTERN - Pattern Register - 0x74 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - PATTERN - Bitmap of the pattern - 0 - 7 - write-only - - - - - 6 - 0x4 - 1-6 - L%sSTART - Limiter %s Start Value Register - 0x10 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LSTART - Start value of the n'th limiter(n=1-6) - 0 - 31 - write-only - - - - - 6 - 0x4 - 1-6 - L%sXADD - Limiter %s X-Axis Increment Register - 0x28 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LXADD - X-axis increment - 0 - 31 - write-only - - - - - 6 - 0x4 - 1-6 - L%sYADD - Limiter %s Y-Axis Increment Register - 0x40 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LYADD - Y-axis increment - 0 - 31 - write-only - - - - - 2 - 0x4 - 1,2 - L%sBAND - Limiter %s Band Width Parameter Register - 0x58 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LBAND - Limiter m band width parameter - 0 - 31 - write-only - - - - - TEXORIGIN - Texture Base Address Register - 0xBC - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - TEXORIGIN - Texture base address - 0 - 31 - write-only - - - - - TEXPITCH - Texels Per Texture Line Register - 0xB4 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - TEXPITCH - Texels per texture linevalid range: 0 to 2048 - 0 - 31 - write-only - - - - - TEXMASK - Texture Size or Texture Address Mask Register - 0xB8 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - TEXVMASK - V maskSet TEXVMASK[20:0] = TEXPITCH * (texture_height - 1).In texture wrapping mode (CONTROL2.TEXTURECLAMPY = 0): texture_height must be a power of 2In texture clamping mode (CONTROL2.TEXTURECLAMPY = 1):all heights up to 1024 are allowed. - 11 - 31 - write-only - - - TEXUMASK - U maskSet TEXUMASK[10:0] = texture_width -1In texture wrapping mode (CONTROL2.TEXTURECLAMPX = 0): texture_width must be a power of 2.In texture clamping mode (CONTROL2.TEXTURECLAMPX = 1):all widths up to 2048 are allowed. - 0 - 10 - write-only - - - - - LUSTART - U Limiter Start Value Register - 0x90 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LUSTART - U limiter start value - 0 - 31 - write-only - - - - - LUXADD - U Limiter X-Axis Increment Register - 0x94 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LUXADD - U limiter x-axis increment - 0 - 31 - write-only - - - - - LUYADD - U Limiter Y-Axis Increment Register - 0x98 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LUYADD - U limiter y-axis increment - 0 - 31 - write-only - - - - - LVSTARTI - V Limiter Start Value Integer Part Register - 0x9C - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LVSTARTI - V limiter start value integer part - 0 - 31 - write-only - - - - - LVSTARTF - V Limiter Start Value Fractional Part Register - 0xA0 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LVSTARTF - V limiter start value fractional part - 0 - 15 - write-only - - - - - LVXADDI - V Limiter X-Axis Increment Integer Part Register - 0xA4 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LVXADDI - V limiter x-axis increment integer part - 0 - 31 - write-only - - - - - LVYADDI - V Limiter Y-Axis Increment Integer Part Register - 0xA8 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LVYADDI - V limiter y-axis increment integer part - 0 - 31 - write-only - - - - - LVYXADDF - V Limiter Increment Fractional Parts Register - 0xAC - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LVYADDF - V y limiter increment fractional part - 16 - 31 - write-only - - - LVXADDF - V xlimiter increment fractional part - 0 - 15 - write-only - - - - - TEXCLADDR - CLUT Start Address Register - 0xDC - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - CLADDR - Texture CLUT start address for indexed texture format - 0 - 7 - write-only - - - - - TEXCLDATA - CLUT Data Register - 0xE0 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - CLDATA - Texture CLUT data for Indexed texture format - 0 - 31 - write-only - - - - - TEXCLOFFSET - CLUT Offset Register - 0xE4 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - CLOFFSET - Texture CLUT offset for Indexed texture format. CLOFFSET[7:0] is or'ed with the original index - 0 - 7 - write-only - - - - - COLKEY - Color Key Register - 0xE8 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - COLKEYR - Red channel of color key - 16 - 23 - write-only - - - COLKEYG - Green channel of color key - 8 - 15 - write-only - - - COLKEYB - Blue channel of color key - 0 - 7 - write-only - - - - - SIZE - Bounding Box Dimension Register - 0x78 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - SIZEY - Height of the bounding box in pixelsvalid range: 0 to 1024 - 16 - 31 - write-only - - - SIZEX - Width of the bounding box in pixelsvalid range: 0 to 1024 - 0 - 15 - write-only - - - - - PITCH - Framebuffer Pitch And Spanstore Delay Register - 0x7C - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - SSD - Spanstore delay - 16 - 31 - write-only - - - PITCH - pitch of the framebuffer. A negative width can be used to render bottom-up instead of top-down - 0 - 15 - write-only - - - - - ORIGIN - Framebuffer Base Address Register - 0x80 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - ORIGIN - Address of the first pixel in framebuffer - 0 - 31 - write-only - - - - - DLISTSTART - Display List Start Address Register - 0xC8 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - DLISTSTART - Display list start address - 0 - 31 - write-only - - - - - PERFTRIGGER - Performance Counters Control Register - 0xD4 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - PERFTRIGGER2 - Selects the internal event that will increment PERFCOUNT2 register - 16 - 31 - write-only - - - 0x00 - disable performance counter - 0x00 - - - 0x01 - 2D Drawing Engine active cycles - 0x01 - - - 0x02 - framebuffer read access - 0x02 - - - 0x03 - framebuffer write access - 0x03 - - - 0x04 - texture read access - 0x04 - - - 0x05 - invisible pixels (enumerated but selected with alpha 0percent) - 0x05 - - - 0x06 - invisible pixels while internal FIFO is empty (lost cycles) - 0x06 - - - 0x07 - display list reader active cycles - 0x07 - - - 0x08 - framebuffer read hits - 0x08 - - - 0x09 - framebuffer read misses - 0x09 - - - 0x0A - framebuffer write hits - 0x0A - - - 0x0B - framebuffer write misses - 0x0B - - - 0x0C - texture read hits - 0x0C - - - 0x0D - texture read misses - 0x0D - - - 0x1F - every clock cycle (for use as timer) - 0x1F - - - others - Setting prohibited - true - - - - - PERFTRIGGER1 - Selects the internal event that will increment PERFCOUNT1 register. - 0 - 15 - write-only - - - 0x00 - disable performance counter - 0x00 - - - 0x01 - 2D Drawing Engine active cycles - 0x01 - - - 0x02 - framebuffer read access - 0x02 - - - 0x03 - framebuffer write access - 0x03 - - - 0x04 - texture read access - 0x04 - - - 0x05 - invisible pixels (enumerated but selected with alpha 0percent) - 0x05 - - - 0x06 - invisible pixels while internal FIFO is empty (lost cycles) - 0x06 - - - 0x07 - display list reader active cycles - 0x07 - - - 0x08 - framebuffer read hits - 0x08 - - - 0x09 - framebuffer read misses - 0x09 - - - 0x0A - framebuffer write hits - 0x0A - - - 0x0B - framebuffer write misses - 0x0B - - - 0x0C - texture read hits - 0x0C - - - 0x0D - texture read misses - 0x0D - - - 0x1F - every clock cycle (for use as timer) - 0x1F - - - others - Setting prohibited - true - - - - - - - 2 - 0x4 - 1,2 - PERFCOUNT%s - Performance Counter %s - 0xCC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PERFCOUNT - Counter value.The counter is reset by writing PERFCOUNT = 0000 0000H. - 0 - 31 - read-write - - - - - - - R_DTC - Data Transfer Controller - 0x40005400 - - 0x00000000 - 0x01 - registers - - - 0x00000004 - 0x04 - registers - - - 0x0000000C - 0x01 - registers - - - 0x0000000E - 0x02 - registers - - - - DTCCR - DTC Control Register - 0x00 - 8 - read-write - 0x08 - 0xFF - - - RRS - DTC Transfer Information Read Skip Enable. - 4 - 4 - read-write - - - 0 - Do not skip transfer information read - #0 - - - 1 - Skip transfer information read when vector numbers match - #1 - - - - - - - DTCVBR - DTC Vector Base Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DTCVBR - DTC Vector Base Address.Note: A value cannot be set in the lower-order 10 bits. These bits are fixed to 0. - 0 - 31 - read-write - - - - - DTCST - DTC Module Start Register - 0x0C - 8 - read-write - 0x00 - 0xFF - - - DTCST - DTC Module Start - 0 - 0 - read-write - - - 0 - DTC module stop - #0 - - - 1 - DTC module start - #1 - - - - - - - DTCSTS - DTC Status Register - 0x0E - 16 - read-only - 0x0000 - 0xFFFF - - - ACT - DTC Active Flag - 15 - 15 - read-only - - - 0 - DTC transfer operation is not in progress. - #0 - - - 1 - DTC transfer operation is in progress. - #1 - - - - - VECN - DTC-Activating Vector Number MonitoringThese bits indicate the vector number for the activating source when DTC transfer is in progress.The value is only valid if DTC transfer is in progress (the value of the ACT flag is 1) - 0 - 7 - read-only - - - - - - - R_ELC - Event Link Controller - 0x40041000 - - 0x00000000 - 0x01 - registers - - - 0x00000002 - 0x01 - registers - - - 0x00000004 - 0x01 - registers - - - 0x00000010 - 0x02 - registers - - - 0x00000014 - 0x02 - registers - - - 0x00000018 - 0x02 - registers - - - 0x0000001C - 0x02 - registers - - - 0x00000020 - 0x02 - registers - - - 0x00000024 - 0x02 - registers - - - 0x00000028 - 0x02 - registers - - - 0x0000002C - 0x02 - registers - - - 0x00000030 - 0x02 - registers - - - 0x00000034 - 0x02 - registers - - - 0x00000038 - 0x02 - registers - - - 0x0000003C - 0x02 - registers - - - 0x00000040 - 0x02 - registers - - - 0x00000044 - 0x02 - registers - - - 0x00000048 - 0x02 - registers - - - 0x0000004C - 0x02 - registers - - - 0x00000050 - 0x02 - registers - - - 0x00000054 - 0x02 - registers - - - 0x00000058 - 0x02 - registers - - - 0x0000005C - 0x02 - registers - - - 0x00000060 - 0x02 - registers - - - 0x00000064 - 0x02 - registers - - - 0x00000068 - 0x02 - registers - - - - 2 - 0x2 - ELSEGR[%s] - Event Link Software Event Generation Register - 0x02 - - BY - Event Link Software Event Generation Register - 0x00 - 8 - read-write - 0x80 - 0xFF - - - WI - ELSEGR Register Write Disable - 7 - 7 - write-only - - - 0 - Write to ELSEGR register is enabled. - #0 - - - 1 - Write to ELSEGR register is disabled. - #1 - - - - - WE - SEG Bit Write Enable - 6 - 6 - read-write - - - 0 - Write to SEG bit is disabled. - #0 - - - 1 - Write to SEG bit is enabled. - #1 - - - - - SEG - Software Event Generation - 0 - 0 - write-only - - - 0 - Normal operation - #0 - - - 1 - Software event is generated. - #1 - - - - - - - - 23 - 0x4 - - - GPTA - GPTA - 0 - - - GPTB - GPTB - 1 - - - GPTC - GPTC - 2 - - - GPTD - GPTD - 3 - - - GPTE - GPTE - 4 - - - GPTF - GPTF - 5 - - - GPTG - GPTG - 6 - - - GPTH - GPTH - 7 - - - ADCA0 - ADCA0 - 8 - - - ADCB0 - ADCB0 - 9 - - - ADCA1 - ADCA1 - 10 - - - ADCB1 - ADCB1 - 11 - - - DA0 - DA0 - 12 - - - DA1 - DA1 - 13 - - - PORT1 - PORT1 - 14 - - - PORT2 - PORT2 - 15 - - - PORT3 - PORT3 - 16 - - - PORT4 - PORT4 - 17 - - - CTSU - CTSU - 18 - - - DA80 - DA80 - 19 - - - DA81 - DA81 - 20 - - - DA82 - DA82 - 21 - - - SDADC0 - SDADC0 - 22 - - - ELSR[%s] - Event Link Setting Register %s - 0x10 - - HA - Event Link Setting Register - 0x00 - 16 - read-write - 0x0000 - 0xFFFF - - - ELS - Event Link Select - 0 - 8 - read-write - - - 0x000 - Event output to the corresponding peripheral module is disabled. - 0x000 - - - others - Set the number for the event signal to be linked. - true - - - - - - - - ELCR - Event Link Controller Register - 0x00 - 8 - read-write - 0x00 - 0xFF - - - ELCON - All Event Link Enable - 7 - 7 - read-write - - - 0 - ELC function is disabled. - #0 - - - 1 - ELC function is enabled. - #1 - - - - - - - - - R_ETHERC0 - Ethernet MAC Controller - 0x40064100 - - 0x00000000 - 0x04 - registers - - - 0x00000008 - 0x04 - registers - - - 0x00000010 - 0x04 - registers - - - 0x00000018 - 0x04 - registers - - - 0x00000020 - 0x04 - registers - - - 0x00000028 - 0x04 - registers - - - 0x00000040 - 0x04 - registers - - - 0x00000050 - 0x00C - registers - - - 0x00000060 - 0x010 - registers - - - 0x000000C0 - 0x04 - registers - - - 0x000000C8 - 0x04 - registers - - - 0x000000D0 - 0x010 - registers - - - 0x000000E4 - 0x018 - registers - - - - ECMR - ETHERC Mode Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TPC - PAUSE Frame Transmit - 20 - 20 - read-write - - - 0 - PAUSE frame is transmitted even during a PAUSE period. - #0 - - - 1 - PAUSE frame is not transmitted during a PAUSE period. - #1 - - - - - ZPF - 0 Time PAUSE Frame Enable - 19 - 19 - read-write - - - 0 - PAUSE frame that contains the pause_time parameter of 0 is not used. - #0 - - - 1 - PAUSE frame that contains the pause_time parameter of 0 is used. - #1 - - - - - PFR - PAUSE Frame Receive Mode - 18 - 18 - read-write - - - 0 - PAUSE frame is not transferred to the EDMAC. - #0 - - - 1 - PAUSE frame is transferred to the EDMAC. - #1 - - - - - RXF - Receive Flow Control Operating Mode - 17 - 17 - read-write - - - 0 - PAUSE frame detection is disabled. - #0 - - - 1 - PAUSE frame detection is enabled. - #1 - - - - - TXF - Transmit Flow Control Operating Mode - 16 - 16 - read-write - - - 0 - Automatic PAUSE frame transmission is disabled.(PAUSE frame is not automatically transmitted.) - #0 - - - 1 - Automatic PAUSE frame transmission is enabled.(PAUSE frame is automatically transmitted as required.) - #1 - - - - - PRCEF - CRC Error Frame Receive Mode - 12 - 12 - read-write - - - 0 - EDMAC is notified of a CRC error. - #0 - - - 1 - EDMAC is not notified of a CRC error. - #1 - - - - - MPDE - Magic Packet Detection Enable - 9 - 9 - read-write - - - 0 - Magic Packet detection is disabled. - #0 - - - 1 - Magic Packet detection is enabled. - #1 - - - - - RE - Reception Enable - 6 - 6 - read-write - - - 0 - Receive function is disabled. - #0 - - - 1 - Receive function is enabled. - #1 - - - - - TE - Transmission Enable - 5 - 5 - read-write - - - 0 - Transmit function is disabled. - #0 - - - 1 - Transmit function is enabled. - #1 - - - - - ILB - Internal Loopback Mode - 3 - 3 - read-write - - - 0 - Normal data transmission or reception is performed. - #0 - - - 1 - Data is looped back in the ETHERC when full-duplex mode is selected. - #1 - - - - - RTM - Bit Rate - 2 - 2 - read-write - - - 0 - 10 Mbps - #0 - - - 1 - 100 Mbps - #1 - - - - - DM - Duplex Mode - 1 - 1 - read-write - - - 0 - Half-duplex mode - #0 - - - 1 - Full-duplex mode - #1 - - - - - PRM - Promiscuous Mode - 0 - 0 - read-write - - - 0 - Promiscuous mode is disabled. - #0 - - - 1 - Promiscuous mode is enabled. - #1 - - - - - - - RFLR - Receive Frame Maximum Length Register - 0x08 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RFL - Receive Frame Maximum LengthThe set value becomes the maximum frame length. The minimum value that can be set is 1,518 bytes, and the maximum value that can be set is 2,048 bytes. Values that are less than 1,518 bytes are regarded as 1,518 bytes, and values larger than 2,048 bytes are regarded as 2,048 bytes. - 0 - 11 - read-write - - - - - ECSR - ETHERC Status Register - 0x10 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BFR - Continuous Broadcast Frame Reception Flag - 5 - 5 - read-write - oneToClear - modify - - - 0 - Continuous reception of broadcast frames has not been detected. - #0 - - - 1 - Continuous reception of broadcast frames has been detected. - #1 - - - - - PSRTO - PAUSE Frame Retransmit Over Flag - 4 - 4 - read-write - oneToClear - modify - - - 0 - PAUSE frame retransmit count has not reached the upper limit. - #0 - - - 1 - PAUSE frame retransmit count has reached the upper limit. - #1 - - - - - LCHNG - LCHNG Link Signal Change Flag - 2 - 2 - read-write - oneToClear - modify - - - 0 - Change in the ETn_LINKSTA signal has not been detected. - #0 - - - 1 - Change in the ETn_LINKSTA signal has been detected (high to low, or low to high). - #1 - - - - - MPD - Magic Packet Detect Flag - 1 - 1 - read-write - oneToClear - modify - - - 0 - Magic Packet has not been detected. - #0 - - - 1 - Magic Packet has been detected. - #1 - - - - - ICD - False Carrier Detect Flag - 0 - 0 - read-write - oneToClear - modify - - - 0 - PHY-LSI has not detected a false carrier on the line. - #0 - - - 1 - PHY-LSI has detected a false carrier on the line. - #1 - - - - - - - ECSIPR - ETHERC Interrupt Enable Register - 0x18 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BFSIPR - Continuous Broadcast Frame Reception Interrupt Enable - 5 - 5 - read-write - - - 0 - Notification of continuous broadcast frame reception interrupt is disabled. - #0 - - - 1 - Notification of continuous broadcast frame reception interrupt is enabled. - #1 - - - - - PSRTOIP - PAUSE Frame Retransmit Over Interrupt Enable - 4 - 4 - read-write - - - 0 - Notification of PAUSE frame retransmit over interrupt is disabled. - #0 - - - 1 - Notification of PAUSE frame retransmit over interrupt is enabled. - #1 - - - - - LCHNGIP - LINK Signal Change Interrupt Enable - 2 - 2 - read-write - - - 0 - Notification of ETn_LINKSTA signal change interrupt is disabled. - #0 - - - 1 - Notification of ETn_LINKSTA signal change interrupt is enabled. - #1 - - - - - MPDIP - Magic Packet Detect Interrupt Enable - 1 - 1 - read-write - - - 0 - Notification of the Magic Packet detect interrupt is disabled. - #0 - - - 1 - Notification of the Magic Packet detect interrupt is enabled. - #1 - - - - - ICDIP - False Carrier Detect Interrupt Enable - 0 - 0 - read-write - - - 0 - Notification of the false carrier detect interrupt is disabled. - #0 - - - 1 - Notification of the false carrier detect interrupt is enabled. - #1 - - - - - - - PIR - PHY Interface Register - 0x20 - 32 - read-write - 0x00000000 - 0xFFFFFFF7 - - - MDI - MII/RMII Management Data-InThis bit indicates the level of the ETn_MDIO pin. The write value should be 0. - 3 - 3 - read-only - - - MDO - MII/RMII Management Data-OutThe MDO bit value is output from the ETn_MDIO pin when the MMD bit is 1 (write). The value is not output when the MMD bit is 0 (read). - 2 - 2 - read-write - - - MMD - MII/RMII Management Mode - 1 - 1 - read-write - - - 0 - Read - #0 - - - 1 - Write - #1 - - - - - MDC - MII/RMII Management Data ClockThe MDC bit value is output from the ETn_MDC pin to supply the management data clock to the MII or RMII. - 0 - 0 - read-write - - - - - PSR - PHY Status Register - 0x28 - 32 - read-only - 0x00000000 - 0xFFFFFFFE - - - LMON - ETn_LINKSTA Pin Status FlagThe link status can be read by connecting the link signal output from the PHY-LSI to the ETn_LINKSTA pin. For details on the polarity, refer to the specifications of the connected PHY-LSI. - 0 - 0 - read-only - - - - - RDMLR - Random Number Generation Counter Upper Limit Setting Register - 0x40 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RMD - Random Number Generation Counter - 0 - 19 - read-write - - - 00000h - Normal operation - 0x00000 - - - others - Setting prohibited - true - - - - - - - IPGR - IPG Register - 0x50 - 32 - read-write - 0x00000014 - 0xFFFFFFFF - - - IPG - Interpacket Gap Range:"16bit time(0x00)"-"140bit time(0x1F)" - 0 - 4 - read-write - - - 14h - 96 bit time (initial value) - 0x14 - - - others - (IPGx4+16) bit time - true - - - - - - - APR - Automatic PAUSE Frame Register - 0x54 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - AP - Automatic PAUSE Time SettingThese bits set the value of the pause_time parameter for a PAUSE frame that is automatically transmitted. Transmission is not performed until the set value multiplied by 512 bit time has elapsed. - 0 - 15 - read-write - - - - - MPR - Manual PAUSE Frame Register - 0x58 - 32 - write-only - 0x00000000 - 0xFFFF0000 - - - MP - Manual PAUSE Time SettingThese bits set the value of the pause_time parameter for a PAUSE frame that is manually transmitted. Transmission is not performed until the set value multiplied by 512 bit time has elapsed. The read value is undefined. - 0 - 15 - write-only - - - - - RFCF - Received PAUSE Frame Counter - 0x60 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - RPAUSE - Received PAUSE Frame CountNumber of received PAUSE frames - 0 - 7 - read-only - - - - - TPAUSER - PAUSE Frame Retransmit Count Setting Register - 0x64 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TPAUSE - Automatic PAUSE Frame Retransmit Setting - 0 - 15 - read-write - - - 0x0000 - Number of retransmissions is unlimited - 0x0000 - - - others - Maximum number of retransmissions is (TPAUSE) - true - - - - - - - TPAUSECR - PAUSE Frame Retransmit Counter - 0x68 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - - BCFRR - Broadcast Frame Receive Count Setting Register - 0x6C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BCF - Broadcast Frame Continuous Receive Count Setting - 0 - 15 - read-write - - - 0000h - Number of receptions is unlimited. - 0x0000 - - - others - Receive (BFC) frame. - true - - - - - - - MAHR - MAC Address Upper Bit Register - 0xC0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MAHR - MAC Address Upper Bit RegisterThe MAHR register sets the upper 32 bits (b47 to b16) of the 48-bit MAC address. - 0 - 31 - read-write - - - - - MALR - MAC Address Lower Bit Register - 0xC8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MALR - MAC Address Lower Bit RegisterThe MALR register sets the lower 16 bits of the 48-bit MAC address. - 0 - 15 - read-write - - - - - TROCR - Transmit Retry Over Counter Register - 0xD0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TROCR - Transmit Retry Over Counter RegisterThe TROCR register is a counter indicating the number of frames that fail to be retransmitted. - 0 - 31 - read-write - clear - - - - - CDCR - Late Collision Detect Counter Register - 0xD4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - - LCCR - Lost Carrier Counter Register - 0xD8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - LCCR - Lost Carrier Counter RegisterThe LCCR register is a counter indicating the number of times a loss of carrier is detected during frame transmission. - 0 - 31 - read-write - clear - - - - - CNDCR - Carrier Not Detect Counter Register - 0xDC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CNDCR - Carrier Not Detect Counter RegisterThe CNDCR register is a counter indicating the number of times a carrier is not detected during preamble transmission. - 0 - 31 - read-write - clear - - - - - CEFCR - CRC Error Frame Receive Counter Register - 0xE4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CEFCR - CRC Error Frame Receive Counter RegisterThe CEFCR register is a counter indicating the number of received frames where a CRC error has been detected. - 0 - 31 - read-write - clear - - - - - FRECR - Frame Receive Error Counter Register - 0xE8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FRECR - Frame Receive Error Counter RegisterThe FRECR register is a counter indicating the number of times a frame receive error has occurred. - 0 - 31 - read-write - clear - - - - - TSFRCR - Too-Short Frame Receive Counter Register - 0xEC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TSFRCR - Too-Short Frame Receive Counter RegisterThe TSFRCR register is a counter indicating the number of times a short frame that is shorter than 64 bytes has been received. - 0 - 31 - read-write - clear - - - - - TLFRCR - Too-Long Frame Receive Counter Register - 0xF0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TLFRCR - Too-Long Frame Receive Counter RegisterThe TLFRCR register is a counter indicating the number of times a long frame that is longer than the RFLR register value has been received. - 0 - 31 - read-write - clear - - - - - RFCR - Received Alignment Error Frame Counter Register - 0xF4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RFCR - Received Alignment Error Frame Counter RegisterThe RFCR register is a counter indicating the number of times a frame has been received with the alignment error (frame is not an integral number of octets). - 0 - 31 - read-write - clear - - - - - MAFCR - Multicast Address Frame Receive Counter Register - 0xF8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MAFCR - Multicast Address Frame Receive Counter RegisterThe MAFCR register is a counter indicating the number of times a frame where the multicast address is set has been received. - 0 - 31 - read-write - clear - - - - - - - R_ETHERC_EDMAC - Ethernet DMA Controller - 0x40064000 - - 0x00000000 - 0x04 - registers - - - 0x00000008 - 0x04 - registers - - - 0x00000010 - 0x04 - registers - - - 0x00000018 - 0x04 - registers - - - 0x00000020 - 0x04 - registers - - - 0x00000028 - 0x04 - registers - - - 0x00000030 - 0x04 - registers - - - 0x00000038 - 0x04 - registers - - - 0x00000040 - 0x04 - registers - - - 0x00000048 - 0x04 - registers - - - 0x00000050 - 0x04 - registers - - - 0x00000058 - 0x04 - registers - - - 0x00000064 - 0x010 - registers - - - 0x00000078 - 0x008 - registers - - - 0x000000C8 - 0x008 - registers - - - 0x000000D4 - 0x008 - registers - - - - EDMR - EDMAC Mode Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DE - Big Endian Mode/Little Endian ModeNOTE: This setting applies to data for the transmit/receive buffer. It does not apply to transmit/receive descriptors and registers. - 6 - 6 - read-write - - - 0 - Big endian mode - #0 - - - 1 - Little endian mode - #1 - - - - - DL - Transmit/Receive DescriptorLength - 4 - 5 - read-write - - - 00 - 16 bytes - #00 - - - 01 - 32 bytes - #01 - - - 10 - 64 bytes - #10 - - - 11 - 16 bytes - #11 - - - - - SWR - Software Reset - 0 - 0 - write-only - - - 0 - no effect. - #0 - - - 1 - the corresponding channels of the EDMAC and ETHERC are reset. Registers TDLAR, RDLAR, RMFCR, TFUCR, and RFOCR are not reset. - #1 - - - - - - - EDTRR - EDMAC Transmit Request Register - 0x08 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TR - Transmit Request - 0 - 0 - write-only - - - 0 - no effect. - #0 - - - 1 - When 1 is written, the EDMAC reads the corresponding descriptor and transmits frames where the TD0.TACT bit is 1. The TR bit becomes 0 after all the valid frames are transmitted. - #1 - - - - - - - EDRRR - EDMAC Receive Request Register - 0x10 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RR - Receive Request - 0 - 0 - read-write - - - 0 - Receive function is disabled. - #0 - - - 1 - Receive descriptor is read, and the receive function is enabled. - #1 - - - - - - - TDLAR - Transmit Descriptor List Start Address Register - 0x18 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TDLAR - The start address of the transmit descriptor list is set. Set the start address according to the descriptor length selected by the EDMR.DL[1:0] bits.16-byte boundary: Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte boundary: Lower 6 bits = 000000b - 0 - 31 - read-write - - - - - RDLAR - Receive Descriptor List Start Address Register - 0x20 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RDLAR - The start address of the receive descriptor list is set. Set the start address according to the descriptor length selected by the EDMR.DL[1:0] bits.16-byte boundary: Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte boundary: Lower 6 bits = 000000b - 0 - 31 - read-write - - - - - EESR - ETHERC/EDMAC Status Register - 0x28 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TWB - Write-Back Complete Flag - 30 - 30 - read-write - oneToClear - modify - - - 0 - Write-back has not been completed, or no transmission has been requested. - #0 - - - 1 - Write-back to the transmit descriptor has been completed. - #1 - - - - - TABT - Transmit Abort Detect Flag - 26 - 26 - read-write - oneToClear - modify - - - 0 - Frame transmission has not been aborted or no transmission has been requested. - #0 - - - 1 - Frame transmission has been aborted. - #1 - - - - - RABT - Receive Abort Detect Flag - 25 - 25 - read-write - oneToClear - modify - - - 0 - Frame reception has not been aborted or no reception has been requested. - #0 - - - 1 - Frame reception has been aborted. - #1 - - - - - RFCOF - Receive Frame Counter Overflow Flag - 24 - 24 - read-write - oneToClear - modify - - - 0 - Receive frame counter has not overflowed. - #0 - - - 1 - Receive frame counter has overflowed. - #1 - - - - - ADE - Address Error Flag - 23 - 23 - read-write - oneToClear - modify - - - 0 - Invalid memory address has not been detected (normal operation). - #0 - - - 1 - Invalid memory address has been detected. - #1 - - - - - ECI - ETHERC Status Register Source FlagNOTE: When the source in the ETHERCn.ECSR register is cleared, the ECI flag is also cleared. - 22 - 22 - read-only - - - 0 - ETHERC status interrupt source has not been detected. - #0 - - - 1 - ETHERC status interrupt source has been detected. - #1 - - - - - TC - Frame Transfer Complete Flag - 21 - 21 - read-write - oneToClear - modify - - - 0 - Transfer have not been completed, or no transfer has been requested. - #0 - - - 1 - All frames indicated by the transmit descriptor have been completely transferred to the transmit FIFO. - #1 - - - - - TDE - Transmit Descriptor Empty Flag - 20 - 20 - read-write - oneToClear - modify - - - 0 - The EDMAC detects that the transmit descriptor valid bit (TDn.TACT) is 1. - #0 - - - 1 - The EDMAC detects that the transmit descriptor valid bit (TDn.TACT) is 0. - #1 - - - - - TFUF - Transmit FIFO Underflow Flag - 19 - 19 - read-write - oneToClear - modify - - - 0 - Underflow has not occurred. - #0 - - - 1 - Underflow has occurred. - #1 - - - - - FR - Frame Receive Flag - 18 - 18 - read-write - oneToClear - modify - - - 0 - Frame has not been received. - #0 - - - 1 - Frame has been received. Update of the receive descriptor is complete. - #1 - - - - - RDE - Receive Descriptor Empty Flag - 17 - 17 - read-write - oneToClear - modify - - - 0 - The EDMAC detects that the receive descriptor valid bit (RDn.RACT) is 1. - #0 - - - 1 - The EDMAC detects that the receive descriptor valid bit (RDn.RACT) is 0. - #1 - - - - - RFOF - Receive FIFO Overflow Flag - 16 - 16 - read-write - oneToClear - modify - - - 0 - Overflow has not occurred. - #0 - - - 1 - Overflow has occurred. - #1 - - - - - CND - Carrier Not Detect Flag - 11 - 11 - read-write - oneToClear - modify - - - 0 - A carrier has been detected when transmission starts. - #0 - - - 1 - A carrier has not been detected during preamble transmission. - #1 - - - - - DLC - Loss of Carrier Detect Flag - 10 - 10 - read-write - oneToClear - modify - - - 0 - Loss of carrier has not been detected. - #0 - - - 1 - Loss of carrier has been detected during frame transmission. - #1 - - - - - CD - Late Collision Detect Flag - 9 - 9 - read-write - oneToClear - modify - - - 0 - Late collision has not been detected. - #0 - - - 1 - Late collision has been detected during frame transmission. - #1 - - - - - TRO - Transmit Retry Over Flag - 8 - 8 - read-write - oneToClear - modify - - - 0 - Transmit retry-over condition has not been detected. - #0 - - - 1 - Transmit retry-over condition has been detected. - #1 - - - - - RMAF - Multicast Address Frame Receive Flag - 7 - 7 - read-write - oneToClear - modify - - - 0 - Multicast address frame has not been received. - #0 - - - 1 - Multicast address frame has been received. - #1 - - - - - RRF - Alignment Error Flag - 4 - 4 - read-write - oneToClear - modify - - - 0 - Alignment error has not been detected. - #0 - - - 1 - Alignment error has been detected. - #1 - - - - - RTLF - Frame-Too-Long Error Flag - 3 - 3 - read-write - oneToClear - modify - - - 0 - Frame-too-long error has not been detected. - #0 - - - 1 - Frame-too-long error has been detected. - #1 - - - - - RTSF - Frame-Too-Short Error Flag - 2 - 2 - read-write - oneToClear - modify - - - 0 - Frame-too-short error has not been detected. - #0 - - - 1 - Frame-too-short error has been detected. - #1 - - - - - PRE - PHY-LSI Receive Error Flag - 1 - 1 - read-write - oneToClear - modify - - - 0 - PHY-LSI receive error has not been detected. - #0 - - - 1 - PHY-LSI receive error has been detected. - #1 - - - - - CERF - CRC Error Flag - 0 - 0 - read-write - oneToClear - modify - - - 0 - CRC error has not been detected. - #0 - - - 1 - CRC error has been detected. - #1 - - - - - - - EESIPR - ETHERC/EDMAC Status Interrupt Enable Register - 0x30 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TWBIP - Write-Back Complete Interrupt Request Enable - 30 - 30 - read-write - - - 0 - Write-back complete interrupt request is disabled. - #0 - - - 1 - Write-back complete interrupt request is enabled. - #1 - - - - - TABTIP - Transmit Abort Detect Interrupt Request Enable - 26 - 26 - read-write - - - 0 - Transmit abort detect interrupt request is disabled. - #0 - - - 1 - Transmit abort detect interrupt request is enabled. - #1 - - - - - RABTIP - Receive Abort Detect Interrupt Request Enable - 25 - 25 - read-write - - - 0 - Receive abort detect interrupt request is disabled. - #0 - - - 1 - Receive abort detect interrupt request is enabled. - #1 - - - - - RFCOFIP - Receive Frame Counter Overflow Interrupt Request Enable - 24 - 24 - read-write - - - 0 - Receive frame counter overflow interrupt request is disabled. - #0 - - - 1 - Receive frame counter overflow interrupt request is enabled. - #1 - - - - - ADEIP - Address Error Interrupt Request Enable - 23 - 23 - read-write - - - 0 - Address error interrupt request is disabled. - #0 - - - 1 - Address error interrupt request is enabled. - #1 - - - - - ECIIP - ETHERC Status Register Source Interrupt Request Enable - 22 - 22 - read-write - - - 0 - ETHERC status interrupt request is disabled. - #0 - - - 1 - ETHERC status interrupt request is enabled. - #1 - - - - - TCIP - Frame Transfer Complete Interrupt Request Enable - 21 - 21 - read-write - - - 0 - Frame transmission complete interrupt request is disabled. - #0 - - - 1 - Frame transmission complete interrupt request is enabled. - #1 - - - - - TDEIP - Transmit Descriptor Empty Interrupt Request Enable - 20 - 20 - read-write - - - 0 - Transmit descriptor empty interrupt request is disabled. - #0 - - - 1 - Transmit descriptor empty interrupt request is enabled. - #1 - - - - - TFUFIP - Transmit FIFO Underflow Interrupt Request Enable - 19 - 19 - read-write - - - 0 - Underflow interrupt request is disabled. - #0 - - - 1 - Underflow interrupt request is enabled. - #1 - - - - - FRIP - Frame Receive Interrupt Request Enable - 18 - 18 - read-write - - - 0 - Frame reception interrupt request is disabled. - #0 - - - 1 - Frame reception interrupt request is enabled. - #1 - - - - - RDEIP - Receive Descriptor Empty Interrupt Request Enable - 17 - 17 - read-write - - - 0 - Receive descriptor empty interrupt request is disabled. - #0 - - - 1 - Receive descriptor empty interrupt request is enabled. - #1 - - - - - RFOFIP - Receive FIFO Overflow Interrupt Request Enable - 16 - 16 - read-write - - - 0 - Overflow interrupt request is disabled. - #0 - - - 1 - Overflow interrupt request is enabled. - #1 - - - - - CNDIP - Carrier Not Detect Interrupt Request Enable - 11 - 11 - read-write - - - 0 - Carrier not detect interrupt request is disabled. - #0 - - - 1 - Carrier not detect interrupt request is enabled. - #1 - - - - - DLCIP - Loss of Carrier Detect Interrupt Request Enable - 10 - 10 - read-write - - - 0 - Loss of carrier detect interrupt request is disabled. - #0 - - - 1 - Loss of carrier detect interrupt request is enabled. - #1 - - - - - CDIP - Late Collision Detect Interrupt Request Enable - 9 - 9 - read-write - - - 0 - Late collision detect interrupt request is disabled. - #0 - - - 1 - Late collision detect interrupt request is enabled. - #1 - - - - - TROIP - Transmit Retry Over Interrupt Request Enable - 8 - 8 - read-write - - - 0 - Transmit retry over interrupt request is disabled. - #0 - - - 1 - Transmit retry over interrupt request is enabled. - #1 - - - - - RMAFIP - Multicast Address Frame Receive Interrupt Request Enable - 7 - 7 - read-write - - - 0 - Multicast address frame receive interrupt request is disabled. - #0 - - - 1 - Multicast address frame receive interrupt request is enabled. - #1 - - - - - RRFIP - Alignment Error Interrupt Request Enable - 4 - 4 - read-write - - - 0 - Alignment error interrupt request is disabled. - #0 - - - 1 - Alignment error interrupt request is enabled. - #1 - - - - - RTLFIP - Frame-Too-Long Error Interrupt Request Enable - 3 - 3 - read-write - - - 0 - Frame-too-long error interrupt request is disabled. - #0 - - - 1 - Frame-too-long error interrupt request is enabled. - #1 - - - - - RTSFIP - Frame-Too-Short Error Interrupt Request Enable - 2 - 2 - read-write - - - 0 - Frame-too-short error interrupt request is disabled. - #0 - - - 1 - Frame-too-short error interrupt request is enabled. - #1 - - - - - PREIP - PHY-LSI Receive Error Interrupt Request Enable - 1 - 1 - read-write - - - 0 - PHY-LSI receive error interrupt request is disabled. - #0 - - - 1 - PHY-LSI receive error interrupt request is enabled. - #1 - - - - - CERFIP - CRC Error Interrupt Request Enable - 0 - 0 - read-write - - - 0 - CRC error interrupt request is disabled. - #0 - - - 1 - CRC error interrupt request is enabled. - #1 - - - - - - - TRSCER - ETHERC/EDMAC Transmit/Receive Status Copy Enable Register - 0x38 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RMAFCE - RMAF Flag Copy Enable - 7 - 7 - read-write - - - 0 - The EDMACn.EESR.RMAF flag status is reflected in the RDn.RFE bit of the receive descriptor. - #0 - - - 1 - The EDMACn.EESR.RMAF flag status is not reflected in the RDn.RFE bit of the receive descriptor. - #1 - - - - - RRFCE - RRF Flag Copy Enable - 4 - 4 - read-write - - - 0 - The EDMACn.EESR.RRF flag status is reflected in the RDn.RFE bit of the receive descriptor. - #0 - - - 1 - The EDMACn.EESR.RRF flag status is not reflected in the RDn.RFE bit of the receive descriptor. - #1 - - - - - - - RMFCR - Missed-Frame Counter Register - 0x40 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MFC - Missed-Frame CounterThese bits indicate the number of frames that are discarded and not transferred to the receive buffer during reception. - 0 - 15 - read-write - clear - - - - - TFTR - Transmit FIFO Threshold Register - 0x48 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TFT - Transmit FIFO Threshold00Dh to 200h: The threshold is the set value multiplied by 4. Example: 00Dh: 52 bytes 040h: 256 bytes 100h: 1024 bytes 200h: 2048 bytes - 0 - 10 - read-write - - - 0x000 - 0x200 - - - - - 0x000 - Store and forward mode - 0x000 - - - others - The threshold is the set value multiplied by 4. (001h to 00Ch and 201h to 7FFh: Setting prohibited) - true - - - - - - - FDR - Transmit FIFO Threshold Register - 0x50 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TFD - Receive FIFO Depth - 8 - 12 - read-write - - - 01111 - 4096 bytes - #01111 - - - others - Settings other than above are prohibited. - true - - - - - RFD - Transmit FIFO Depth - 0 - 4 - read-write - - - 00111 - 2048 bytes - #00111 - - - others - Settings other than above are prohibited. - true - - - - - - - RMCR - Receive Method Control Register - 0x58 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RNR - Receive Request Reset - 0 - 0 - read-write - - - 0 - EDRRR.RR bit (receive request bit) is set to 0 when one frame has been received. - #0 - - - 1 - EDRRR.RR bit (receive request bit) is not set to 0 when one frame has been received. - #1 - - - - - - - TFUCR - Transmit FIFO Underflow Counter - 0x64 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - UNDER - Transmit FIFO Underflow CountThese bits indicate how many times the transmit FIFO has underflowed. The counter stops when the counter value reaches FFFFh. - 0 - 15 - read-write - - - - - RFOCR - Receive FIFO Overflow Counter - 0x68 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - OVER - Receive FIFO Overflow CountThese bits indicate how many times the receive FIFO has overflowed. The counter stops when the counter value reaches FFFFh. - 0 - 15 - read-write - - - - - IOSR - Independent Output Signal Setting Register - 0x6C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ELB - External Loopback Mode - 0 - 0 - read-write - - - 0 - The ETn_EXOUT pin outputs low. - #0 - - - 1 - The ETn_EXOUT pin outputs high. - #1 - - - - - - - FCFTR - Flow Control Start FIFO Threshold Setting Register - 0x70 - 32 - read-write - 0x00070007 - 0xFFFFFFFF - - - RFFO - Receive FIFO Frame PAUSE Output Threshold(When ((RFFO+1)x2) receive frames have been stored in the receive FIFO.) - 16 - 18 - read-write - - - 000 - When 2 receive frames have been stored in the receive FIFO. - #000 - - - 001 - When 4 receive frames have been stored in the receive FIFO. - #001 - - - 010 - When 6 receive frames have been stored in the receive FIFO. - #010 - - - 011 - When 8 receive frames have been stored in the receive FIFO. - #011 - - - 100 - When 10 receive frames have been stored in the receive FIFO. - #100 - - - 101 - When 12 receive frames have been stored in the receive FIFO. - #101 - - - 110 - When 14 receive frames have been stored in the receive FIFO. - #110 - - - 111 - When 16 receive frames have been stored in the receive FIFO. - #111 - - - - - RFDO - Receive FIFO Data PAUSE Output Threshold(When (RFDO+1)x256-32 bytes of data is stored in the receive FIFO.) - 0 - 2 - read-write - - - 000 - When 224 ( 256 - 32) bytes of data is stored in the receive FIFO. - #000 - - - 001 - When 480 ( 512 - 32) bytes of data is stored in the receive FIFO. - #001 - - - 010 - When 736 ( 768 - 32) bytes of data is stored in the receive FIFO. - #010 - - - 011 - When 992 (1024 - 32) bytes of data is stored in the receive FIFO. - #011 - - - 100 - When 1248 (1280 - 32) bytes of data is stored in the receive FIFO. - #100 - - - 101 - When 1504 (1536 - 32) bytes of data is stored in the receive FIFO. - #101 - - - 110 - When 1760 (1792 - 32) bytes of data is stored in the receive FIFO. - #110 - - - 111 - When 2016 (2048 - 32) bytes of data is stored in the receive FIFO. - #111 - - - - - - - RPADIR - Receive Data Padding Insert Register - 0x78 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PADS - Padding Size - 16 - 17 - read-write - - - 00 - No padding is inserted. - #00 - - - 01 - 1 byte is inserted. - #01 - - - 10 - 2 bytes are inserted. - #10 - - - 11 - 3 bytes are inserted. - #11 - - - - - PADR - Padding Slot - 0 - 5 - read-write - - - 00h - Padding is inserted at the head of received data. - 0x00 - - - others - Padding is inserted between the (PADR)th byte and (PADR+1)th byte of received data. - true - - - - - - - TRIMD - Transmit Interrupt Setting Register - 0x07C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TIM - Transmit Interrupt Mode - 4 - 4 - read-write - - - 0 - Transmission complete interrupt mode: An interrupt occurs when a frame has been transmitted. - #0 - - - 1 - Write-back complete interrupt mode: An interrupt occurs when write-back to the transmit descriptor has been completed. - #1 - - - - - TIS - Transmit Interrupt EnableSet the EESR.TWB flag to 1 in the mode selected by the TIM bit to notify an interrupt. - 0 - 0 - read-write - - - 0 - Transmit Interrupt is disabled. - #0 - - - 1 - Transmit Interrupt is enabled. - #1 - - - - - - - RBWAR - Receive Buffer Write Address Register - 0xC8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RBWAR - Receive Buffer Write Address RegisterThe RBWAR register indicates the last address that the EDMAC has written data to when writing to the receive buffer.Refer to the address indicated by the RBWAR register to recognize which address in the receive buffer the EDMAC is writing data to. Note that the address that the EDMAC is outputting to the receive buffer may not match the read value of the RBWAR register during data reception. - 0 - 31 - read-only - - - - - RDFAR - Receive Descriptor Fetch Address Register - 0xCC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RDFAR - Receive Descriptor Fetch Address RegisterThe RDFAR register indicates the start address of the last fetched receive descriptor when the EDMAC fetches descriptor information from the receive descriptor.Refer to the address indicated by the RDFAR register to recognize which receive descriptor information the EDMAC is using for the current processing. Note that the address of the receive descriptor that the EDMAC fetches may not match the read value of the RDFAR register during data reception. - 0 - 31 - read-only - - - - - TBRAR - Transmit Buffer Read Address Register - 0x0D4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TBRAR - Transmit Buffer Read Address RegisterThe TBRAR register indicates the last address that the EDMAC has read data from when reading data from the transmit buffer.Refer to the address indicated by the TBRAR register to recognize which address in the transmit buffer the EDMAC is reading from. Note that the address that the EDMAC is outputting to the transmit buffer may not match the read value of the TBRAR register. - 0 - 31 - read-only - - - - - TDFAR - Transmit Descriptor Fetch Address Register - 0xD8 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - TDFAR - Transmit Descriptor Fetch Address RegisterThe TDFAR register indicates the start address of the last fetched transmit descriptor when the EDMAC fetches descriptor information from the transmit descriptor.Refer to the address indicated by the TDFAR register to recognize which transmit descriptor information the EDMAC is using for the current processing. Note that the address of the transmit descriptor that the EDMAC fetches may not match the read value of the TDFAR register. - 0 - 31 - read-only - - - - - - - R_ETHERC_EPTPC - Ethernet PTP Controller - 0x40065800 - - 0x00000000 - 0x008 - registers - - - 0x00000010 - 0x010 - registers - - - 0x00000040 - 0x008 - registers - - - 0x00000050 - 0x01C - registers - - - 0x00000080 - 0x04 - registers - - - 0x00000090 - 0x00C - registers - - - 0x000000A0 - 0x00C - registers - - - 0x000000C0 - 0x018 - registers - - - 0x000000E0 - 0x018 - registers - - - 0x00000100 - 0x014 - registers - - - 0x00000120 - 0x024 - registers - - - 0x00000160 - 0x018 - registers - - - 0x000001C0 - 0x018 - registers - - - - 2 - 0x8 - F[%s] - Frame Reception Filter Setting Registers - 0x160 - - 2 - 0x8 - 0-1 - MACRU - Frame Reception Filter MAC Address Setting Registers - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FMACRU - These bits hold the setting for the higher-order 24 bits of the destination MAC address for received multicast frames. - 0 - 23 - read-write - - - - - 2 - 0x8 - 0-1 - MACRL - Frame Reception Filter MAC Address Setting Registers - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FMACRL - These bits hold the setting for the lower-order 24 bits of the destination MAC address for received multicast frames. - 0 - 23 - read-write - - - - - - SYSR - SYNFP Status Register - 0x000 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GENDN - Generation Stop Completion Detection Flag - 17 - 17 - read-write - oneToClear - modify - - - 0 - Stopping generation has not been completed. - #0 - - - 1 - Stopping generation has been completed. - #1 - - - - - RESDN - Response Stop Completion Detection Flag - 16 - 16 - read-write - oneToClear - modify - - - 0 - Stopping responses has not been completed. - #0 - - - 1 - Stopping responses has been completed. - #1 - - - - - INFABT - Control Information Abnormality Detection Flag - 14 - 14 - read-write - oneToClear - modify - - - 0 - No abnormality in control information - #0 - - - 1 - Abnormality in control information - #1 - - - - - RECLP - Loop Reception Detection Flag - 12 - 12 - read-write - oneToClear - modify - - - 0 - A received message has not returned through a loop. - #0 - - - 1 - A received message has returned through a loop. - #1 - - - - - DRQOVR - Delay_Req Reception FIFO Overflow Detection Flag - 6 - 6 - read-write - oneToClear - modify - - - 0 - The received Delay_Req has not caused the reception FIFO to overflow. - #0 - - - 1 - The received Delay_Req has caused the reception FIFO to overflow. - #1 - - - - - INTDEV - Receive logMessageInterval Value Out-of-Range Flag - 5 - 5 - read-write - oneToClear - modify - - - 0 - The received logMessageInterval value is within the range. - #0 - - - 1 - The received logMessageInterval value is out of the range. - #1 - - - - - DRPTO - Delay_Resp/Pdelay_Resp Reception Timeout Detection Flag - 4 - 4 - read-write - oneToClear - modify - - - 0 - A Delay_Resp/Pdelay_Resp timeout has not occurred. - #0 - - - 1 - A Delay_Resp/Pdelay_Resp timeout has occurred. - #1 - - - - - MPDUD - meanPathDelay Value Update Flag - 2 - 2 - read-write - oneToClear - modify - - - 0 - The meanPathDelay value has not been updated. - #0 - - - 1 - The meanPathDelay value has been updated. - #1 - - - - - INTCHG - Receive logMessageInterval Value Change Detection Flag - 1 - 1 - read-write - oneToClear - modify - - - 0 - No change in the received logMessageInterval value. - #0 - - - 1 - A change in the received logMessageInterval value. - #1 - - - - - OFMUD - offsetFromMaster Value Update Flag - 0 - 0 - read-write - oneToClear - modify - - - 0 - The offsetFromMaster value has not been updated. - #0 - - - 1 - The offsetFromMaster value has been updated. - #1 - - - - - - - SYIPR - SYNFP Status Notification Permission Register - 0x004 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GENDN - SYSR.GENDN Status Notification Permission - 17 - 17 - read-write - - - 0 - Prohibits notification of the state of SYSR.GENDN. - #0 - - - 1 - Permits notification of the state of SYSR.GENDN. - #1 - - - - - RESDN - SYSR.RESDN Status Notification Permission - 16 - 16 - read-write - - - 0 - Prohibits notification of the state of SYSR.RESDN. - #0 - - - 1 - Permits notification of the state of SYSR.RESDN. - #1 - - - - - INFABT - SYSR.INFABT Status Notification Permission - 14 - 14 - read-write - - - 0 - Prohibits notification of the state of SYSR.INFABT. - #0 - - - 1 - Permits notification of the state of SYSR.INFABT. - #1 - - - - - RECLP - SYSR.RECLP Status Notification Permission - 12 - 12 - read-write - - - 0 - Prohibits notification of the state of SYSR.RECLP. - #0 - - - 1 - Permits notification of the state of SYSR.RECLP. - #1 - - - - - DRQOVR - SYSR.DRQOVR Status Notification Permission - 6 - 6 - read-write - - - 0 - Prohibits notification of the state of SYSR.DRQOVR. - #0 - - - 1 - Permits notification of the state of SYSR.DRQOVR. - #1 - - - - - INTDEV - SYSR.INTDEV Status Notification Permission - 5 - 5 - read-write - - - 0 - Prohibits notification of the state of SYSR.INTDEV. - #0 - - - 1 - Permits notification of the state of SYSR.INTDEV. - #1 - - - - - DRPTO - SYSR.DRPTO Status Notification Permission - 4 - 4 - read-write - - - 0 - Prohibits notification of the state of SYSR.DRPTO. - #0 - - - 1 - Permits notification of the state of SYSR.DRPTO. - #1 - - - - - MPDUD - SYSR.MPDUD Status Notification Permission - 2 - 2 - read-write - - - 0 - Prohibits notification of the state of SYSR.MPDUD. - #0 - - - 1 - Permits notification of the state of SYSR.MPDUD. - #1 - - - - - INTCHG - SYSR.INTCHG Status Notification Permission - 1 - 1 - read-write - - - 0 - Prohibits notification of the state of SYSR.INTCHG. - #0 - - - 1 - Permits notification of the state of SYSR.INTCHG. - #1 - - - - - OFMUD - SYSR.OFMUD Status Notification Permission - 0 - 0 - read-write - - - 0 - Prohibits notification of the state of SYSR.OFMUD. - #0 - - - 1 - Permits notification of the state of SYSR.OFMUD. - #1 - - - - - - - SYMACRU - SYNFP MAC Address Registers - 0x010 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYMACRU - These bits hold the setting for the higher-order 24 bits of the local MAC address. - 0 - 23 - read-write - - - - - SYMACRL - SYNFP MAC Address Registers - 0x014 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYMACRL - These bits hold the setting for the lower-order 24 bits of the local MAC address. - 0 - 23 - read-write - - - - - SYLLCCTLR - SYNFP LLC-CTL Value Register - 0x018 - 32 - read-write - 0x00000003 - 0xFFFFFFFF - - - CTL - LLC-CTL FieldThese bits specify the value used for the control field in the LLC sublayer when generating IEEE802.3 frames. - 0 - 7 - read-write - - - - - SYIPADDRR - SYNFP Local IP Address Register - 0x01C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYIPADDRR - These bits hold the setting for the local IP address. - 0 - 31 - read-write - - - - - SYSPVRR - SYNFP Specification Version Setting Register - 0x040 - 32 - read-write - 0x00000002 - 0xFFFFFFFF - - - TRSP - transportSpecific Field ValueThese bits are used to set the transportSpecific field value of the PTP v2 header.When a message is received, this value is compared with the transportSpecific field of the received frame.In generating messages, the value is used for the transportSpecific field of the frame for transmission.Set these bits to 0000b (IEEE 1588). - 4 - 7 - read-write - - - VER - versionPTP Field ValueThese bits are used to set the versionPTP field value of the PTP v2 header.When a message is received, this value is compared with the versionPTP field of the received frame.In generating messages, the value is used for the versionPTP field of the frame for transmission.Set these bits to 0010b (PTP v2). - 0 - 3 - read-write - - - - - SYDOMR - SYNFP Domain Number Setting Register - 0x044 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DNUM - domainNumber Field Value SettingThese bits are used to set the domainNumber field value of the PTP v2 header.When a message is received, this value is compared with the domainNumber field of the received frame as a condition for PTP reception processing.In generating messages, the value is used for the domainNumber field of the frame for transmission. - 0 - 7 - read-write - - - - - ANFR - Announce Message Flag Field Setting Register - 0x050 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FLAG14 - PTP profile Specific 2 - 14 - 14 - read-write - - - 0 - PTP profile Specific 2 is set to FALSE. - #0 - - - 1 - PTP profile Specific 2 is set to TRUE. - #1 - - - - - FLAG13 - PTP profile Specific 1 - 13 - 13 - read-write - - - 0 - PTP profile Specific 1 is set to FALSE. - #0 - - - 1 - PTP profile Specific 1 is set to TRUE. - #1 - - - - - FLAG10 - unicastFlag - 10 - 10 - read-write - - - 0 - unicastFlag is set to FALSE. - #0 - - - 1 - unicastFlag is set to TRUE. - #1 - - - - - FLAG8 - alternateMasterFlag - 8 - 8 - read-write - - - 0 - alternateMasterFlag is set to FALSE. - #0 - - - 1 - alternateMasterFlag is set to TRUE. - #1 - - - - - FLAG5 - frequencyTraceableThis bit is used to set the logical value of the frequencyTraceable member of timePropertiesDS. - 5 - 5 - read-write - - - 0 - frequencyTraceable is set to FALSE. - #0 - - - 1 - frequencyTraceable is set to TRUE. - #1 - - - - - FLAG4 - timeTraceableThis bit is used to set the logical value of the timeTraceable member of timePropertiesDS. - 4 - 4 - read-write - - - 0 - timeTraceable is set to FALSE. - #0 - - - 1 - timeTraceable is set to TRUE. - #1 - - - - - FLAG3 - ptpTimescaleThis bit is used to set the logical value of the ptpTimescale member of timePropertiesDS. - 3 - 3 - read-write - - - 0 - ptpTimescale is set to FALSE. - #0 - - - 1 - ptpTimescale is set to TRUE. - #1 - - - - - FLAG2 - currentUtcOffsetValidThis bit is used to set the logical value of the currentUtcOffsetValid member of timePropertiesDS. - 2 - 2 - read-write - - - 0 - currentUtcOffsetValid is set to FALSE. - #0 - - - 1 - currentUtcOffsetValid is set to TRUE. - #1 - - - - - FLAG1 - leap59This bit is used to set the logical value of the leap59 member of timePropertiesDS. - 1 - 1 - read-write - - - 0 - leap59 is set to FALSE. - #0 - - - 1 - leap59 is set to TRUE. - #1 - - - - - FLAG0 - leap61This bit is used to set the logical value of the leap61 member of timePropertiesDS. - 0 - 0 - read-write - - - 0 - leap61 is set to FALSE. - #0 - - - 1 - leap61 is set to TRUE. - #1 - - - - - - - SYNFR - Sync Message Flag Field Setting Register - 0x054 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FLAG14 - PTP profile Specific 2 - 14 - 14 - read-write - - - 0 - PTP profile Specific 2 is set to FALSE. - #0 - - - 1 - PTP profile Specific 2 is set to TRUE. - #1 - - - - - FLAG13 - PTP profile Specific 1 - 13 - 13 - read-write - - - 0 - PTP profile Specific 1 is set to FALSE. - #0 - - - 1 - PTP profile Specific 1 is set to TRUE. - #1 - - - - - FLAG10 - unicastFlag - 10 - 10 - read-write - - - 0 - unicastFlag is set to FALSE. - #0 - - - 1 - unicastFlag is set to TRUE. - #1 - - - - - FLAG9 - twoStepFlag - 9 - 9 - read-write - - - 0 - Set this bit to 0 (FALSE). - #0 - - - 1 - Setting prohibited - #1 - - - - - FLAG8 - alternateMasterFlag - 8 - 8 - read-write - - - 0 - alternateMasterFlag is set to FALSE. - #0 - - - 1 - alternateMasterFlag is set to TRUE. - #1 - - - - - - - DYRQFR - Delay_Req Message Flag Field Setting Register - 0x058 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FLAG14 - PTP profile Specific 2 - 14 - 14 - read-write - - - 0 - PTP profile Specific 2 is set to FALSE. - #0 - - - 1 - PTP profile Specific 2 is set to TRULE. - #1 - - - - - FLAG13 - PTP profile Specific 1 - 13 - 13 - read-write - - - 0 - PTP profile Specific 1 is set to FALSE. - #0 - - - 1 - PTP profile Specific 1 is set to TRULE. - #1 - - - - - FLAG10 - unicastFlag - 10 - 10 - read-write - - - 0 - unicastFlag is set to FALSE. - #0 - - - 1 - unicastFlag is set to TRULE. - #1 - - - - - - - DYRPFR - Delay_Resp Message Flag Field Setting Register - 0x05C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FLAG14 - PTP profile Specific 2 - 14 - 14 - read-write - - - 0 - PTP profile Specific 2 is set to FALSE. - #0 - - - 1 - PTP profile Specific 2 is set to TRUE. - #1 - - - - - FLAG13 - PTP profile Specific 1 - 13 - 13 - read-write - - - 0 - PTP profile Specific 1 is set to FALSE. - #0 - - - 1 - PTP profile Specific 1 is set to TRUE. - #1 - - - - - FLAG10 - unicastFlag - 10 - 10 - read-write - - - 0 - unicastFlag is set to FALSE. - #0 - - - 1 - unicastFlag is set to TRUE. - #1 - - - - - FLAG9 - woStepFlag - 9 - 9 - read-write - - - 0 - Set this bit to 0 (FALSE). - #0 - - - 1 - Setting prohibited - #1 - - - - - FLAG8 - alternateMasterFlag - 8 - 8 - read-write - - - 0 - alternateMasterFlag is set to FALSE. - #0 - - - 1 - alternateMasterFlag is set to TRUE. - #1 - - - - - - - SYCIDRU - SYNFP Local Clock ID Registers - 0x060 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYCIDRU - These bits hold the setting for the higher-order 32 bits of the clock-ID of your port. - 0 - 31 - read-write - - - - - SYCIDRL - SYNFP Local Clock ID Registers - 0x064 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYCIDRL - These bits hold the setting for the lower-order 32 bits of the clock-ID of your port. - 0 - 31 - read-write - - - - - SYPNUMR - SYNFP Local Port Number Register - 0x068 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PNUM - Local Port Number SettingThese bits hold the setting for the port number of the local port. - 0 - 15 - read-write - - - - - SYRVLDR - SYNFP Register Value Load Directive Register - 0x080 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - ANUP - Announce Message Generation Information Update - 2 - 2 - write-only - - - 0 - no effect - #0 - - - 1 - Setting this bit to 1 leads to simultaneous reflection in the Announce message generation block of the values of the registers required for the generation of Announce messages. - #1 - - - - - STUP - State Update - 1 - 1 - write-only - - - 0 - no effect - #0 - - - 1 - Setting this bit to 1 leads to simultaneous reflection in the SYNFP module of the values of the registers related to the reception and transmission of PTP messages. - #1 - - - - - BMUP - BMC Update - 0 - 0 - write-only - - - 0 - no effect - #0 - - - 1 - Setting this bit to 1 leads to simultaneous reflection in the SYNFP module of the values of the registers holding the MasterClock identifying information. - #1 - - - - - - - SYRFL1R - SYNFP Reception Filter Register 1 - 0x090 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PDFUP2 - Pdelay_Resp_Follow_Up Message Processing - 30 - 30 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP does not process messages. - #1 - - - - - PDFUP1 - Pdelay_Resp_Follow_Up Message Processing - 29 - 29 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - PDFUP0 - Pdelay_Resp_Follow_Up Message Processing - 28 - 28 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - PDRP2 - Pdelay_Resp Message Processing - 26 - 26 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP processes messages. - #1 - - - - - PDRP1 - Pdelay_Resp Message Processing - 25 - 25 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - PDRP0 - Pdelay_Resp Message Processing - 24 - 24 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - PDRQ2 - Pdelay_Req Message Processing - 22 - 22 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP processes messages. - #1 - - - - - PDRQ1 - Pdelay_Req Message Processing - 21 - 21 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - PDRQ0 - Pdelay_Req Message Processing - 20 - 20 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - DRP2 - Delay_Resp Message Processing - 18 - 18 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP processes messages. - #1 - - - - - DRP1 - Delay_Resp Message Processing - 17 - 17 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - DRP0 - Delay_Resp Message Processing - 16 - 16 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - DRQ2 - Delay_Req Message Processing - 14 - 14 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP processes messages. - #1 - - - - - DRQ1 - Delay_Req Message Processing - 13 - 13 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - DRQ0 - Delay_Req Message Processing - 12 - 12 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - FUP2 - Follow_Up Message Processing - 10 - 10 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP processes messages. - #1 - - - - - FUP1 - Follow_Up Message Processing - 9 - 9 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - FUP0 - Follow_Up Message Processing - 8 - 8 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - SYNC2 - Sync Message Processing - 6 - 6 - read-write - - - 0 - The SYNFP does not process messages. - #0 - - - 1 - The SYNFP processes messages. - #1 - - - - - SYNC1 - Sync Message Processing - 5 - 5 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - SYNC0 - Sync Message Processing - 4 - 4 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - ANCE1 - Announce Message Processing - 1 - 1 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - ANCE0 - Announce Message Processing - 0 - 0 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - - - SYRFL2R - SYNFP Reception Filter Register 2 - 0x094 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ILL1 - Illegal Message Processing Setting - 29 - 29 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - ILL0 - Illegal Message Processing Setting - 28 - 28 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - SIG1 - Signaling Message Processing Setting - 5 - 5 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - SIG0 - Signaling Message Processing Setting - 4 - 4 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - MAN1 - Management Message Processing Setting - 1 - 1 - read-write - - - 0 - The PRC-TC does not relay messages between ports 0 and 1. - #0 - - - 1 - The PRC-TC relays messages between ports 0 and 1. - #1 - - - - - MAN0 - Management Message Processing Setting - 0 - 0 - read-write - - - 0 - Messages are not transferred to the PTPEDMAC. - #0 - - - 1 - Messages are transferred to the PTPEDMAC. - #1 - - - - - - - SYTRENR - SYNFP Transmission Enable Register - 0x098 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PDRQ - Pdelay_Req Message Transmission Enable - 12 - 12 - read-write - - - 0 - Pdelay_Req messages are not transmitted. - #0 - - - 1 - Pdelay_Req messages are transmitted. - #1 - - - - - DRQ - Delay_Req Message Transmission Enable - 8 - 8 - read-write - - - 0 - Delay_Req messages are not transmitted. - #0 - - - 1 - Delay_Req messages are transmitted. - #1 - - - - - SYNC - Sync Message Transmission Enable - 4 - 4 - read-write - - - 0 - Sync messages are not transmitted. - #0 - - - 1 - Sync messages are transmitted. - #1 - - - - - ANCE - Announce Message Transmission Enable - 0 - 0 - read-write - - - 0 - Announce messages are not transmitted. - #0 - - - 1 - Announce messages are transmitted. - #1 - - - - - - - MTCIDU - Master Clock ID Registers - 0x0A0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MTCIDU - These bits hold the setting for the higher-order 32 bits of the clock-ID of the master clock. - 0 - 31 - read-write - - - - - MTCIDL - Master Clock ID Registers - 0x0A4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MTCIDL - These bits hold the setting for the lower-order 32 bits of the clock-ID of the master clock. - 0 - 31 - read-write - - - - - MTPID - Master clock port number register - 0x0A8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PNUM - Master Clock Port Number SettingThese bits hold the setting for the port number of the master clock. - 0 - 15 - read-write - - - - - SYTLIR - SYNFP Transmission Interval Setting Register - 0x0C0 - 32 - read-write - 0x00000001 - 0xFFFFFFFF - - - DREQ - Delay_Req Transmission Interval Average Value/ Pdelay_Req Transmission Interval SettingThe bits set the average interval for the transmission of Delay_Req messages and the interval for the transmission of Pdelay_Req messages.The setting is also placed in the logMessageInterval field of Delay_Resp messages. - 16 - 23 - read-write - - - SYNC - Sync Message Transmission Interval SettingThese bits set the interval for the transmission of Sync messages. The setting is also placed in the logMessageInterval field of transmitted Sync messages. - 8 - 15 - read-write - - - ANCE - Announce Message Transmission Interval SettingThese bits set the interval for the transmission of Announce messages. - 0 - 7 - read-write - - - - - SYRLIR - SYNFP Received logMessageInterval Value Indication Register - 0x0C4 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - DRESP - Delay_Resp Message logMessageInterval Field IndicationThese bits indicate the logMessageInterval field value of a received Delay_Resp message. - 16 - 23 - read-only - - - SYNC - Sync Message logMessageInterval Field IndicationThese bits indicate the logMessageInterval field value of a received Sync message. - 8 - 15 - read-only - - - ANCE - Announce Message logMessageInterval Field IndicationThese bits indicate the logMessageInterval field value of a received Announce message. - 0 - 7 - read-only - - - - - OFMRU - offsetFromMaster Value Registers - 0x0C8 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - OFMRU - These bits indicate the higher-order 32 bits of the calculated offsetFromMaster value. - 0 - 31 - read-only - - - - - OFMRL - offsetFromMaster Value Registers - 0x0CC - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - OFMRL - These bits indicate the lower-order 32 bits of the calculated offsetFromMaster value. - 0 - 31 - read-only - - - - - MPDRU - meanPathDelay Value Registers - 0x0D0 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - MPDRU - These bits indicate the higher-order 32 bits of the calculated meanPathDelay value. - 0 - 31 - read-only - - - - - MPDRL - meanPathDelay Value Registers - 0x0D4 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - MPDRL - These bits indicate the lower-order 32 bits of the calculated meanPathDelay value. - 0 - 31 - read-only - - - - - GMPR - grandmasterPriority Field Setting Register - 0x0E0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GMPR1 - grandmasterPriority1 Field Value SettingThese bits are used to set the value of the grandmasterPriority1 fields of Announce messages. - 16 - 23 - read-write - - - GMPR2 - grandmasterPriority2 Field Value SettingThese bits are used to set the value of the grandmasterPriority2 fields of Announce messages. - 0 - 7 - read-write - - - - - GMCQR - grandmasterClockQuality Field Setting Register - 0x0E4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GMCQR - These bits are used to set the value of the grandmasterClockQuality fields of Announce messages. The correspondence between bits and the grandmasterClockQuality fields is as listed below.b31 to b24: clockClassb23 to b16: clockAccuracyb15 to b0: offsetScaledLogVariance - 0 - 31 - read-write - - - - - GMIDRU - grandmasterIdentity Field Setting Registers - 0x0E8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GMIDRU - These bits hold the setting for the higher-order 32 bits of the value of the grandmasterIdentity fields of Announce messages. - 0 - 31 - read-write - - - - - GMIDRL - grandmasterIdentity Field Setting Registers - 0x0EC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GMIDRL - These bits hold the setting for the lower-order 32 bits of the value of the grandmasterIdentity fields of Announce messages. - 0 - 31 - read-write - - - - - CUOTSR - currentUtcOffset/timeSource Field Setting Register - 0x0F0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CUTO - currentUtcOffset Field SettingThese bits set the value of the currentUtcOffset fields of Announce messages. - 16 - 31 - read-write - - - TSRC - timeSource Field SettingThese bits set the value of the timeSource fields of Announce messages. - 0 - 7 - read-write - - - - - SRR - stepsRemoved Field Setting Register - 0x0F4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SRMV - stepsRemoved Field Value SettingThese bits set the value of the stepsRemoved fields of Announce messages. - 0 - 15 - read-write - - - - - PPMACRU - PTP-primary Message Destination MAC Address Setting Registers - 0x100 - 32 - read-write - 0x00011B19 - 0xFFFFFFFF - - - PPMACRU - These bits hold the setting for the higher-order 24 bits of the destination MAC address for PTP-primary messages. - 0 - 23 - read-write - - - - - PPMACRL - PTP-primary Message Destination MAC Address Setting Registers - 0x104 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PPMACRL - These bits hold the setting for the lower-order 24 bits of the destination MAC address for PTP-primary messages. - 0 - 23 - read-write - - - - - PDMACRU - PTP-pdelay Message MAC Address Setting Registers - 0x108 - 32 - read-write - 0x000180C2 - 0xFFFFFFFF - - - PDMACRU - These bits hold the setting for the higher-order 24 bits of the destination MAC address for PTP-pdelay messages. - 0 - 23 - read-write - - - - - PDMACRL - PTP-pdelay Message MAC Address Setting Registers - 0x10C - 32 - read-write - 0x0000000E - 0xFFFFFFFF - - - PDMACRL - These bits hold the setting for the lower-order 24 bits of the destination MAC address for PTP-pdelay messages. - 0 - 23 - read-write - - - - - PETYPER - PTP Message EtherType Setting Register - 0x110 - 32 - read-write - 0x000088F7 - 0xFFFFFFFF - - - TYPE - PTP Message EtherType Value SettingThese bits hold the setting for the EtherType field value for frames in the Ethernet II format. - 0 - 15 - read-write - - - - - PPIPR - PTP-primary Message Destination IP Address Setting Register - 0x120 - 32 - read-write - 0xE0000181 - 0xFFFFFFFF - - - PPIPR - These bits hold the setting for the destination IP address for PTPprimary messages. - 0 - 31 - read-write - - - - - PDIPR - PTP-pdelay Message Destination IP Address Setting Register - 0x124 - 32 - read-write - 0xE000006B - 0xFFFFFFFF - - - PDIPR - These bits hold the setting for the destination IP address for PTPpdelay messages. - 0 - 31 - read-write - - - - - PETOSR - PTP Event Message TOS Setting Register - 0x128 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - EVTO - PTP Event Message TOS Field Value SettingThese bits hold the setting for the value of the TOS field within the IPv4 headers of PTP event messages. - 0 - 7 - read-write - - - - - PGTOSR - PTP general Message TOS Setting Register - 0x12C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GETO - PTP general Message TOS Field Value SettingThese bits hold the setting for the value of the TOS field within the IPv4 headers of PTP general messages. - 0 - 7 - read-write - - - - - PPTTLR - PTP-primary Message TTL Setting Register - 0x130 - 32 - read-write - 0x00000080 - 0xFFFFFFFF - - - PRTL - PTP-primary Message TTL Field Value SettingThese bits hold the setting for the value of the TTL field within the IPv4 headers of PTP-primary messages. - 0 - 7 - read-write - - - - - PDTTLR - PTP-pdelay Message TTL Setting Register - 0x134 - 32 - read-write - 0x00000001 - 0xFFFFFFFF - - - PDTL - PTP-pdelay Message TTL Field ValueThese bits hold the setting for the value of the TTL field within the IPv4 headers of PTP-pdelay messages. - 0 - 7 - read-write - - - - - PEUDPR - PTP Event Message UDP Destination Port Number Setting Register - 0x138 - 32 - read-write - 0x0000013F - 0xFFFFFFFF - - - EVUPT - PTP Event Message Destination Port Number SettingThese bits hold the setting for the value of the destination port number field within the UDP headers of PTP event messages. - 0 - 15 - read-write - - - - - PGUDPR - PTP general Message UDP Destination Port Number Setting Register - 0x13C - 32 - read-write - 0x00000140 - 0xFFFFFFFF - - - GEUPT - PTP general Message Destination Port NumberThese bits hold the setting for the value of the destination port number field within the UDP headers of PTP general messages. - 0 - 15 - read-write - - - - - FFLTR - Frame Reception Filter Setting Register - 0x140 - 32 - read-write - 0x00010000 - 0xFFFFFFFF - - - EXTPRM - Extended Promiscuous ModeSetting - 16 - 16 - read-write - - - 0 - Normal operation (unicast frames addressed to the EPTPC are received, filtering of PTP frames is applied, multicast filtering is applied, and all broadcast frames are received). - #0 - - - 1 - Extended promiscuous mode (all frames are received) - #1 - - - - - ENB - Reception Filter EnableNOTE: The setting of these bits is only effective when EXTPRM=0. - 2 - 2 - read-write - - - 0 - Filtering is disabled (all multicast frames are received). - #0 - - - 1 - See PRT and SEL bit. - #1 - - - - - PRT - Frame Reception EnableNOTE: The setting of these bits is only effective when EXTPRM=0 and ENB=1. - 1 - 1 - read-write - - - 0 - Do not receive multicast frames. - #0 - - - 1 - See SEL bit. - #1 - - - - - SEL - Receive MAC Address SelectNOTE: The setting of these bits is only effective when EXTPRM=0, ENB=1and RPT=1. - 0 - 0 - read-write - - - 0 - Only receive multicast frames matching the MAC address setting in FMAC0R(U/L). - #0 - - - 1 - Only receive multicast frames matching the MAC address setting in FMAC1R(U/L). - #1 - - - - - - - DASYMRU - Asymmetric Delay Setting Registers - 0x1C0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DASYMRU - These bits hold the setting for the higher-order 16 bits of the asymmetric delay value. - 0 - 15 - read-write - - - - - DASYMRL - Asymmetric Delay Setting Registers - 0x1C4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - DASYMRL - These bits hold the setting for the lower-order 32 bits of the asymmetric delay value. - 0 - 31 - read-write - - - - - TSLATR - Timestamp Latency Setting Register - 0x1C8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - INGP - Output Port Timestamp Latency SettingThese bits hold the setting for the time stamp latency (ns) for the output ports. - 16 - 31 - read-write - - - EGP - Input Port Timestamp Latency SettingThese bits hold the setting for the time stamp latency (ns) for the input ports. - 0 - 15 - read-write - - - - - SYCONFR - SYNFP Operation Setting Register - 0x1CC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TCMOD - TC Mode Setting - 20 - 20 - read-write - - - 0 - E2E TC - #0 - - - 1 - P2P TC - #1 - - - - - FILDIS - Receive Message domainNumber Filter Disable - 16 - 16 - read-write - - - 0 - Filtering conditions for the reception of PTP messages include comparison with the domainNumber field. - #0 - - - 1 - Filtering conditions for the reception of PTP messages do not include comparison with the domainNumber field. - #1 - - - - - SBDIS - Sync Message Transmission Bandwidth Securing Disable - 12 - 12 - read-write - - - 0 - Securing of the bandwidth for the transmission of SYNC messages is enabled (transfer by the EDMAC is given lower priority). - #0 - - - 1 - Securing of the bandwidth for the transmission of SYNC messages is disabled (transfer by the EDMAC is given higher priority). - #1 - - - - - TCYC - PTP Message Transmission Interval SettingThese bits are used to set the time from the completion of one transmission to the start of the next in cycles of the transmission clock. A value n in these bits means that a transmission interval of n cycles will be secured.No interval is secured if the setting is 00h.We recommend the setting 28h (40 cycles). - 0 - 7 - read-write - - - - - SYFORMR - SYNFP Frame Format Setting Register - 0x1D0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FORM1 - Ethernet Frame Format Setting - 1 - 1 - read-write - - - 0 - Set this bit to 0 (Ethernet II frame format). - #0 - - - 1 - Setting prohibited - #1 - - - - - FORM0 - Ethernet/UDP Encapsulation - 0 - 0 - read-write - - - 0 - PTP directly over Ethernet - #0 - - - 1 - PTP over UDP/IPv4 - #1 - - - - - - - RSTOUTR - Response Message Reception Timeout Register - 0x1D4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RSTOUTR - Response Message Reception Timeout Time SettingA response message not being received within n x 1024 (ns), where n is the setting, is judged to represent a timeout. - 0 - 31 - read-write - - - - - - - R_ETHERC_EPTPC1 - 0x40065C00 - - - R_ETHERC_EPTPC_CFG - Ethernet PTP Configuration - 0x40064500 - - 0x00000000 - 0x00C - registers - - - - PTRSTR - EPTPC Reset Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RESET - EPTPC Software Reset - 0 - 0 - read-write - - - 0 - Do not reset the EPTPC - #0 - - - 1 - Reset the EPTPC. Do not access the EPTPC-related registers other than this register while a software reset is being issued. - #1 - - - - - - - STCSELR - STCA Clock Select Register - 0x04 - 32 - read-write - 0x00000006 - 0xFFFFFFFF - - - SCLKSEL - STCA Clock Select - 8 - 10 - read-write - - - 000 - PCLKA clock divided by 1 to 6 - #000 - - - 010 - Input clock from the REF50CK0 pin - #010 - - - 011 - Input clock from the REF50CK1 pin - #011 - - - others - Settings other than above are prohibited. - true - - - - - SCLKDIV - PCLKA Clock Frequency Division - 0 - 2 - read-write - - - 001 - 1 - #001 - - - 010 - 1/2 - #010 - - - 011 - 1/3 - #011 - - - 100 - 1/4 - #100 - - - 101 - 1/5 - #101 - - - 110 - 1/6 - #110 - - - others - Settings other than above are prohibited. - true - - - - - - - BYPASS - Bypass 1588 module Register - 0x08 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BYPASS1 - Bypass 1588 module for Ether 1ch - 16 - 16 - read-write - - - 0 - to use 1588 module for Ether 1ch - #0 - - - 1 - to bypass 1588 module for Ether 1ch - #1 - - - - - BYPASS0 - Bypass 1588 module for Ether 0ch - 0 - 0 - read-write - - - 0 - to use 1588 module for Ether 0ch - #0 - - - 1 - to bypass 1588 module for Ether 0ch - #1 - - - - - - - - - R_ETHERC_EPTPC_COMMON - Ethernet PTP Controller Common - 0x40065000 - - 0x00000000 - 0x008 - registers - - - 0x00000010 - 0x008 - registers - - - 0x00000040 - 0x008 - registers - - - 0x00000050 - 0x00C - registers - - - 0x00000060 - 0x010 - registers - - - 0x00000080 - 0x008 - registers - - - 0x00000090 - 0x010 - registers - - - 0x000000B0 - 0x00C - registers - - - 0x00000124 - 0x020 - registers - - - 0x00000170 - 0x00C - registers - - - 0x00000210 - 0x00C - registers - - - 0x000002D0 - 0x00C - registers - - - 0x00000300 - 0x060 - registers - - - 0x0000037C - 0x04 - registers - - - 0x00000400 - 0x008 - registers - - - 0x00000410 - 0x014 - registers - - - 0x00000430 - 0x008 - registers - - - - 6 - 0x10 - TM[%s] - Timer Setting Registers - 0x300 - - STTRU - Timer Start Time Setting Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TMSTTRU - These bits hold the setting for the higher-order 32 bits of the start time of the pulse output timer in nanoseconds. - 0 - 31 - read-write - - - - - STTRL - Timer Start Time Setting Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TMSTTRL - These bits hold the setting for the lower-order 32 bits of the start time of the pulse output timer in nanoseconds. - 0 - 31 - read-write - - - - - CYCR - Timer Cycle Setting Registers - 0x08 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TMCYCR - These bits set the cycle of the pulse output timer in nanoseconds. Set a value that is equivalent to at least four cycles of the STCA clock. - 0 - 29 - read-write - - - - - PLSR - Timer Pulse Width Setting Register - 0x0C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TMPLSR - These bits set the width at high level of the pulse signal from the timer in nanoseconds. Set a value that is equivalent to at least two cycles of the STCA clock. - 0 - 28 - read-write - - - - - - 2 - 0x8 - PR[%s] - Local MAC Address Registers - 0x410 - - MACRU - Channel Local MAC Address Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PRMACRU - These bits hold the setting for the higher-order 24 bits of the local MAC address for Ethernet port 0. - 0 - 23 - read-write - - - - - MACRL - Channel Local MAC Address Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PRMACRL - These bits hold the setting for the higher-order 24 bits of the local MAC address for Ethernet port 0. - 0 - 23 - read-write - - - - - - MIESR - MINT Interrupt Source Status Register - 0x000 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CYC5 - Pulse Output Timer 5 Rising Edge Detection Flag - 21 - 21 - read-write - oneToClear - modify - - - 0 - A rising edge in the periodic pulse signal from pulse output timer 5 is not detected. - #0 - - - 1 - A rising edge in the periodic pulse signal from pulse output timer 5 is detected. - #1 - - - - - CYC4 - Pulse Output Timer 4 Rising Edge Detection Flag - 20 - 20 - read-write - oneToClear - modify - - - 0 - A rising edge in the periodic pulse signal from pulse output timer 4 is not detected. - #0 - - - 1 - A rising edge in the periodic pulse signal from pulse output timer 4 is detected. - #1 - - - - - CYC3 - Pulse Output Timer 3 Rising Edge Detection Flag - 19 - 19 - read-write - oneToClear - modify - - - 0 - A rising edge in the periodic pulse signal from pulse output timer 3 is not detected. - #0 - - - 1 - A rising edge in the periodic pulse signal from pulse output timer 3 is detected. - #1 - - - - - CYC2 - Pulse Output Timer 2 Rising Edge Detection Flag - 18 - 18 - read-write - oneToClear - modify - - - 0 - A rising edge in the periodic pulse signal from pulse output timer 2 is not detected. - #0 - - - 1 - A rising edge in the periodic pulse signal from pulse output timer 2 is detected. - #1 - - - - - CYC1 - Pulse Output Timer 1 Rising Edge Detection Flag - 17 - 17 - read-write - oneToClear - modify - - - 0 - A rising edge in the periodic pulse signal from pulse output timer 1 is not detected. - #0 - - - 1 - A rising edge in the periodic pulse signal from pulse output timer 1 is detected. - #1 - - - - - CYC0 - Pulse Output Timer 0 Rising Edge Detection Flag - 16 - 16 - read-write - oneToClear - modify - - - 0 - A rising edge in the periodic pulse signal from pulse output timer 0 is not detected. - #0 - - - 1 - A rising edge in the periodic pulse signal from pulse output timer 0 is detected. - #1 - - - - - PRC - PRC-TC Status Flag - 3 - 3 - read-only - - - 0 - No change in the state of the PRC-TC module - #0 - - - 1 - A change in the state of the PRC-TC module - #1 - - - - - SY1 - SYNFP1 Status Flag - 2 - 2 - read-only - - - 0 - No change in the state of the SYNFP1 module - #0 - - - 1 - A change in the state of the SYNFP1 module - #1 - - - - - SY0 - SYNFP0 Status Flag - 1 - 1 - read-only - - - 0 - No change in the state of the SYNFP0 module - #0 - - - 1 - A change in the state of the SYNFP0 module - #1 - - - - - ST - STCA Status Flag - 0 - 0 - read-only - - - 0 - No change in the state of the STCA module - #0 - - - 1 - A change in the state of the STCA module - #1 - - - - - - - MIEIPR - MINT Interrupt Request Permission Register - 0x004 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CYC5 - Pulse Output Timer 5 Rising Edge Detection Interrupt Request Permission - 21 - 21 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 5. - #0 - - - 1 - Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 5. - #1 - - - - - CYC4 - Pulse Output Timer 4 Rising Edge Detection Interrupt Request Permission - 20 - 20 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 4. - #0 - - - 1 - Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 4. - #1 - - - - - CYC3 - Pulse Output Timer 3 Rising Edge Detection Interrupt Request Permission - 19 - 19 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 3. - #0 - - - 1 - Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 3. - #1 - - - - - CYC2 - Pulse Output Timer 2 Rising Edge Detection Interrupt Request Permission - 18 - 18 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 2. - #0 - - - 1 - Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 2. - #1 - - - - - CYC1 - Pulse Output Timer 1 Rising Edge Detection Interrupt Request Permission - 17 - 17 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 1. - #0 - - - 1 - Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 1. - #1 - - - - - CYC0 - Pulse Output Timer 0 Rising Edge Detection Interrupt Request Permission - 16 - 16 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 0. - #0 - - - 1 - Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 0. - #1 - - - - - PRC - PRC-TC Status Interrupt Request Permission - 3 - 3 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests by the PRC-TC status flag. - #0 - - - 1 - Permits the generation of MINT interrupt requests by the PRCTC status flag. - #1 - - - - - SY1 - SYNFP1 Status Interrupt Request Permission - 2 - 2 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests by the SYNFP1 status flag. - #0 - - - 1 - Permits the generation of MINT interrupt requests by the SYNFP1 status flag. - #1 - - - - - SY0 - SYNFP0 Status Interrupt Request Permission - 1 - 1 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests by the SYNFP0 status flag. - #0 - - - 1 - Permits the generation of MINT interrupt requests by the SYNFP0 status flag. - #1 - - - - - ST - STCA Status Interrupt Request Permission - 0 - 0 - read-write - - - 0 - Prohibits the generation of MINT interrupt requests by the STCA status flag. - #0 - - - 1 - Permits the generation of MINT interrupt requests by the STCA status flag. - #1 - - - - - - - ELIPPR - ELC Output/ETHER_IPLS Interrupt Request Permission Register - 0x010 - 32 - read-write - 0x00003F3F - 0xFFFFFFFF - - - PLSN - Pulse Output Timer Falling Edge Detection IPLS Interrupt Request Permission - 24 - 24 - read-write - - - 0 - Prohibits IPLS interrupt requests due to falling edges of signals from the selected pulse output timer. - #0 - - - 1 - Permits IPLS interrupt requests due to falling edges of signals from the selected pulse output timer. - #1 - - - - - PLSP - Pulse Output Timer Rising Edge Detection IPLS Interrupt Request Permission - 16 - 16 - read-write - - - 0 - Prohibits IPLS interrupt requests due to rising edges of signals from the selected pulse output timer. - #0 - - - 1 - Permits IPLS interrupt requests due to rising edges of signals from the selected pulse output timer. - #1 - - - - - CYCN5 - Pulse Output Timer 5 Falling Edge Detection Event Output Enable - 13 - 13 - read-write - - - 0 - Falling edges of the signal from pulse output timer 5 are not conveyed to the ELC as event signals. - #0 - - - 1 - Falling edges of the signal from pulse output timer 5 are conveyed to the ELC as event signals. - #1 - - - - - CYCN4 - Pulse Output Timer 4 Falling Edge Detection Event Output Enable - 12 - 12 - read-write - - - 0 - Falling edges of the signal from pulse output timer 4 are not conveyed to the ELC as event signals. - #0 - - - 1 - Falling edges of the signal from pulse output timer 4 are conveyed to the ELC as event signals. - #1 - - - - - CYCN3 - Pulse Output Timer 3 Falling Edge Detection Event Output Enable - 11 - 11 - read-write - - - 0 - Falling edges of the signal from pulse output timer 3 are not conveyed to the ELC as event signals. - #0 - - - 1 - Falling edges of the signal from pulse output timer 3 are conveyed to the ELC as event signals. - #1 - - - - - CYCN2 - Pulse Output Timer 2 Falling Edge Detection Event Output Enable - 10 - 10 - read-write - - - 0 - Falling edges of the signal from pulse output timer 2 are not conveyed to the ELC as event signals. - #0 - - - 1 - Falling edges of the signal from pulse output timer 2 are conveyed to the ELC as event signals. - #1 - - - - - CYCN1 - Pulse Output Timer 1 Falling Edge Detection Event Output Enable - 9 - 9 - read-write - - - 0 - Falling edges of the signal from pulse output timer 1 are not conveyed to the ELC as event signals. - #0 - - - 1 - Falling edges of the signal from pulse output timer 1 are conveyed to the ELC as event signals. - #1 - - - - - CYCN0 - Pulse Output Timer 0 Falling Edge Detection Event Output Enable - 8 - 8 - read-write - - - 0 - Falling edges of the signal from pulse output timer 0 are not conveyed to the ELC as event signals. - #0 - - - 1 - Falling edges of the signal from pulse output timer 0 are conveyed to the ELC as event signals. - #1 - - - - - CYCP5 - Pulse Output Timer 5 Rising Edge Detection Event Output Enable - 5 - 5 - read-write - - - 0 - Rising edges of the signal from pulse output timer 5 are not conveyed to the ELC as event signals. - #0 - - - 1 - Rising edges of the signal from pulse output timer 5 are conveyed to the ELC as event signals. - #1 - - - - - CYCP4 - Pulse Output Timer 4 Rising Edge Detection Event Output Enable - 4 - 4 - read-write - - - 0 - Rising edges of the signal from pulse output timer 4 are not conveyed to the ELC as event signals. - #0 - - - 1 - Rising edges of the signal from pulse output timer 4 are conveyed to the ELC as event signals. - #1 - - - - - CYCP3 - Pulse Output Timer 3 Rising Edge Detection Event Output Enable - 3 - 3 - read-write - - - 0 - Rising edges of the signal from pulse output timer 3 are not conveyed to the ELC as event signals. - #0 - - - 1 - Rising edges of the signal from pulse output timer 3 are conveyed to the ELC as event signals. - #1 - - - - - CYCP2 - Pulse Output Timer 2 Rising Edge Detection Event Output Enable - 2 - 2 - read-write - - - 0 - Rising edges of the signal from pulse output timer 2 are not conveyed to the ELC as event signals. - #0 - - - 1 - Rising edges of the signal from pulse output timer 2 are conveyed to the ELC as event signals. - #1 - - - - - CYCP1 - Pulse Output Timer 1 Rising Edge Detection Event Output Enable - 1 - 1 - read-write - - - 0 - Rising edges of the signal from pulse output timer 1 are not conveyed to the ELC as event signals. - #0 - - - 1 - Rising edges of the signal from pulse output timer 1 are conveyed to the ELC as event signals. - #1 - - - - - CYCP0 - Pulse Output Timer 0 Rising Edge Detection Event Output Enable - 0 - 0 - read-write - - - 0 - Rising edges of the signal from pulse output timer 0 are not conveyed to the ELC as event signals. - #0 - - - 1 - Rising edges of the signal from pulse output timer 0 are conveyed to the ELC as event signals. - #1 - - - - - - - ELIPACR - ELC Output/IPLS Interrupt Permission Automatic Clearing Register - 0x014 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PLSN - ELIPPR.PLSN Bit Automatic Clearing - 24 - 24 - read-write - - - 0 - Disables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. - #0 - - - 1 - Enables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. - #1 - - - - - PLSP - ELIPPR.PLSP Bit Automatic Clearing - 16 - 16 - read-write - - - 0 - Disables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. - #0 - - - 1 - Enables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. - #1 - - - - - CYCN5 - ELIPPR.CYCN5 Bit Automatic Clearing - 13 - 13 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 5. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 5. - #1 - - - - - CYCN4 - ELIPPR.CYCN4 Bit Automatic Clearing - 12 - 12 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 4. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 4. - #1 - - - - - CYCN3 - ELIPPR.CYCN3 Bit Automatic Clearing - 11 - 11 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 3. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 3. - #1 - - - - - CYCN2 - ELIPPR.CYCN2 Bit Automatic Clearing - 10 - 10 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 2. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 2. - #1 - - - - - CYCN1 - ELIPPR.CYCN1 Bit Automatic Clearing - 9 - 9 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 1. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 1. - #1 - - - - - CYCN0 - ELIPPR.CYCN0 Bit Automatic Clearing - 8 - 8 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 0. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 0. - #1 - - - - - CYCP5 - ELIPPR.CYCP5 Bit Automatic Clearing - 5 - 5 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 5. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 5. - #1 - - - - - CYCP4 - ELIPPR.CYCP4 Bit Automatic Clearing - 4 - 4 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 4. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 4. - #1 - - - - - CYCP3 - ELIPPR.CYCP3 Bit Automatic Clearing - 3 - 3 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 3. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 3. - #1 - - - - - CYCP2 - ELIPPR.CYCP2 Bit Automatic Clearing - 2 - 2 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 2. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 2. - #1 - - - - - CYCP1 - ELIPPR.CYCP1 Bit Automatic Clearing - 1 - 1 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 1. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 1. - #1 - - - - - CYCP0 - ELIPPR.CYCP0 Bit Automatic Clearing - 0 - 0 - read-write - - - 0 - Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 0. - #0 - - - 1 - Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 0. - #1 - - - - - - - STSR - STCA Status Register - 0x040 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - W10D - Worst 10 Acquisition Completion Flag - 4 - 4 - read-write - oneToClear - - - 0 - Ten worst values not acquired yet - #0 - - - 1 - Ten worst values acquired - #1 - - - - - SYNTOUT - Sync Message Reception Timeout Detection Flag - 3 - 3 - read-write - oneToClear - - - 0 - Sync message reception timeout not detected - #0 - - - 1 - Sync message reception timeout detected - #1 - - - - - SYNCOUT - Synchronization Loss Detection Flag - 1 - 1 - read-write - oneToClear - - - 0 - Loss of synchronization not detected - #0 - - - 1 - Loss of synchronization detected - #1 - - - - - SYNC - Synchronized State Detection Flag - 0 - 0 - read-write - oneToClear - - - 0 - Synchronization not detected - #0 - - - 1 - Synchronization detected - #1 - - - - - - - STIPR - STCA Status Notification Permission Register - 0x044 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - W10D - W10D Status Notification Enable - 4 - 4 - read-write - - - 0 - Disable notification of the STSR.W10D state - #0 - - - 1 - Enable notification of the STSR.W10D state - #1 - - - - - SYNTOUT - SYNTOUT Status Notification Enable - 3 - 3 - read-write - - - 0 - Disable notification of the STSR.SYNTOUT state - #0 - - - 1 - Enable notification of the STSR.SYNTOUT state - #1 - - - - - SYNCOUT - SYNCOUT Status Notification Enable - 1 - 1 - read-write - - - 0 - Disable notification of the STSR.SYNCOUT state - #0 - - - 1 - Enable notification of the STSR.SYNCOUT state - #1 - - - - - SYNC - SYNC Status Notification Enable - 0 - 0 - read-write - - - 0 - Disable notification of the STSR.SYNC state - #0 - - - 1 - Enable notification of the STSR.SYNC state - #1 - - - - - - - STCFR - STCA Clock Frequency Setting Register - 0x050 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - STCF - STCA Clock Frequency - 0 - 1 - read-write - - - 00 - 20MHz - #00 - - - 01 - 25MHz - #01 - - - 10 - 50MHz - #10 - - - 11 - 100 MHz - #11 - - - - - - - STMR - STCA Operating Mode Register - 0x054 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ALEN1 - Alarm Detection Enable 1 - 29 - 29 - read-write - - - 0 - The STSR.SYNTOUT flag is not set to 1 on detection of the Sync message reception timeout interrupt. - #0 - - - 1 - The STSR.SYNTOUT flag is not set to 1 on detection of the Sync message reception timeout interrupt. - #1 - - - - - ALEN0 - Alarm Detection Enable 0 - 28 - 28 - read-write - - - 0 - The STSR.SYNC or SYNCOUT flag is not set to 1 on detection of synchronization or loss of synchronization. - #0 - - - 1 - The STSR.SYNC or SYNCOUT flag is set to 1 on detection of synchronization or loss of synchronization. - #1 - - - - - DVTH - Synchronization Loss Detection Threshold Setting - 20 - 23 - read-write - - - 0x0 - None - 0x0 - - - others - (DVTH) time - true - - - - - SYTH - Synchronized State Detection Threshold Setting - 16 - 19 - read-write - - - 0x0 - None - 0x0 - - - others - (SYTH) time - true - - - - - W10S - Worst 10 Acquisition Control Select - 15 - 15 - read-write - - - 0 - Measurement is started by hardware and the value acquired in the PW10VR or MW10R register is used as the limit for filtering. - #0 - - - 1 - Measurement is started by the GETW10R.GW10 bit. Also, the value set in the PLIMITR or MLIMITR register is used as the limit for filtering. - #1 - - - - - CMOD - Time Synchronization Correction Mode - 13 - 13 - read-write - - - 0 - Mode 1 - #0 - - - 1 - Mode 2 - #1 - - - - - WINT - Worst 10 Acquisition Time - 0 - 7 - read-write - - - 0x00 - The worst 10 values are not acquired. - 0x00 - - - others - Sync message reception: (WINT) time - true - - - - - - - SYNTOR - Sync Message Reception Timeout Register - 0x058 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYNTOR - A Sync message not being received within 1024 x n (ns), where n is the setting, leads to a timeout for reception of Sync messages, leading to the STSR.SYNTOUT flag being set to 1. - 0 - 31 - read-write - - - - - IPTSELR - IPLS Interrupt Request Timer Select Register - 0x060 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - IPTSEL5 - Pulse Output Timer 5 Select - 5 - 5 - read-write - - - 0 - Pulse output timer 5 is not selected as a source of IPLS interrupt requests. - #0 - - - 1 - Pulse output timer 5 is selected as a source of IPLS interrupt requests. - #1 - - - - - IPTSEL4 - Pulse Output Timer 4 Select - 4 - 4 - read-write - - - 0 - Pulse output timer 4 is not selected as a source of IPLS interrupt requests. - #0 - - - 1 - Pulse output timer 4 is selected as a source of IPLS interrupt requests. - #1 - - - - - IPTSEL3 - Pulse Output Timer 3 Select - 3 - 3 - read-write - - - 0 - Pulse output timer 3 is not selected as a source of IPLS interrupt requests. - #0 - - - 1 - Pulse output timer 3 is selected as a source of IPLS interrupt requests. - #1 - - - - - IPTSEL2 - Pulse Output Timer 2 Select - 2 - 2 - read-write - - - 0 - Pulse output timer 2 is not selected as a source of IPLS interrupt requests. - #0 - - - 1 - Pulse output timer 2 is selected as a source of IPLS interrupt requests. - #1 - - - - - IPTSEL1 - Pulse Output Timer 1 Select - 1 - 1 - read-write - - - 0 - Pulse output timer 1 is not selected as a source of IPLS interrupt requests. - #0 - - - 1 - Pulse output timer 1 is selected as a source of IPLS interrupt requests. - #1 - - - - - IPTSEL0 - Pulse Output Timer 0 Select - 0 - 0 - read-write - - - 0 - Pulse output timer 0 is not selected as a source of IPLS interrupt requests. - #0 - - - 1 - Pulse output timer 0 is selected as a source of IPLS interrupt requests. - #1 - - - - - - - MITSELR - MINT Interrupt Request Timer Select Register - 0x064 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MINTEN5 - Pulse Output Timer 5 MINT Interrupt Output Enable - 5 - 5 - read-write - - - 0 - Output of rising edges by pulse output timer 5 is not reflected by the MIESR.CYC5 flag as a MINT interrupt source. - #0 - - - 1 - Output of rising edges by pulse output timer 5 is reflected by the MIESR.CYC5 flag as a MINT interrupt source. - #1 - - - - - MINTEN4 - Pulse Output Timer 4 MINT Interrupt Output Enable - 4 - 4 - read-write - - - 0 - Output of rising edges by pulse output timer 4 is not reflected by the MIESR.CYC4 flag as a MINT interrupt source. - #0 - - - 1 - Output of rising edges by pulse output timer 4 is reflected by the MIESR.CYC4 flag as a MINT interrupt source. - #1 - - - - - MINTEN3 - Pulse Output Timer 3 MINT Interrupt Output Enable - 3 - 3 - read-write - - - 0 - Output of rising edges by pulse output timer 3 is not reflected by the MIESR.CYC3 flag as a MINT interrupt source. - #0 - - - 1 - Output of rising edges by pulse output timer 3 is reflected by the MIESR.CYC3 flag as a MINT interrupt source. - #1 - - - - - MINTEN2 - Pulse Output Timer 2 MINT Interrupt Output Enable - 2 - 2 - read-write - - - 0 - Output of rising edges by pulse output timer 2 is not reflected by the MIESR.CYC2 flag as a MINT interrupt source. - #0 - - - 1 - Output of rising edges by pulse output timer 2 is reflected by the MIESR.CYC2 flag as a MINT interrupt source. - #1 - - - - - MINTEN1 - Pulse Output Timer 1 MINT Interrupt Output Enable - 1 - 1 - read-write - - - 0 - Output of rising edges by pulse output timer 1 is not reflected by the MIESR.CYC1 flag as a MINT interrupt source. - #0 - - - 1 - Output of rising edges by pulse output timer 1 is reflected by the MIESR.CYC1 flag as a MINT interrupt source. - #1 - - - - - MINTEN0 - Pulse Output Timer 0 MINT Interrupt Output Enable - 0 - 0 - read-write - - - 0 - Output of rising edges by pulse output timer 0 is not reflected by the MIESR.CYC0 flag as a MINT interrupt source. - #0 - - - 1 - Output of rising edges by pulse output timer 0 is reflected by the MIESR.CYC0 flag as a MINT interrupt source. - #1 - - - - - - - ELTSELR - ELC Output Timer Select Register - 0x068 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ELTDIS5 - Pulse Output Timer 5 Event Generation Disable - 5 - 5 - read-write - - - 0 - Pulse output timer 5 is used for the generation of event signals for the ELC. - #0 - - - 1 - Pulse output timer 5 is not used for the generation of event signals for the ELC. - #1 - - - - - ELTDIS4 - Pulse Output Timer 4 Event Generation Disable - 4 - 4 - read-write - - - 0 - Pulse output timer 4 is used for the generation of event signals for the ELC. - #0 - - - 1 - Pulse output timer 4 is not used for the generation of event signals for the ELC. - #1 - - - - - ELTDIS3 - Pulse Output Timer 3 Event Generation Disable - 3 - 3 - read-write - - - 0 - Pulse output timer 3 is used for the generation of event signals for the ELC. - #0 - - - 1 - Pulse output timer 3 is not used for the generation of event signals for the ELC. - #1 - - - - - ELTDIS2 - Pulse Output Timer 2 Event Generation Disable - 2 - 2 - read-write - - - 0 - Pulse output timer 2 is used for the generation of event signals for the ELC. - #0 - - - 1 - Pulse output timer 2 is not used for the generation of event signals for the ELC. - #1 - - - - - ELTDIS1 - Pulse Output Timer 1 Event Generation Disable - 1 - 1 - read-write - - - 0 - Pulse output timer 1 is used for the generation of event signals for the ELC. - #0 - - - 1 - Pulse output timer 1 is not used for the generation of event signals for the ELC. - #1 - - - - - ELTDIS0 - Pulse Output Timer 0 Event Generation Disable - 0 - 0 - read-write - - - 0 - Pulse output timer 0 is used for the generation of event signals for the ELC. - #0 - - - 1 - Pulse output timer 0 is not used for the generation of event signals for the ELC. - #1 - - - - - - - STCHSELR - Time Synchronization Channel Select Register - 0x06C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYSEL - Timer Information Input SelectNOTE: Do not change the value of this bit while the SYNSTARTR.STR bit is 1. - 0 - 0 - read-write - - - 0 - Time information from synchronization from the SYNFP0 module is used. - #0 - - - 1 - Time information from synchronization from the SYNFP1 module is used. - #1 - - - - - - - SYNSTARTR - Slave Time Synchronization Start Register - 0x080 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - STR - Slave Time Synchronization Control - 0 - 0 - read-write - - - 0 - Slave time synchronization is stopped. - #0 - - - 1 - Slave time synchronization is started. - #1 - - - - - - - LCIVLDR - Local Time Counter Initial Value Load Directive Register - 0x084 - 32 - write-only - 0x00000000 - 0xFFFFFFFF - - - LOAD - Local Time Counter Initial Value Load Directive - 0 - 0 - write-only - - - 0 - The initial value is not loaded into the local time counter. - #0 - - - 1 - The initial value is loaded into the local time counter. - #1 - - - - - - - SYNTDARU - Synchronization Loss Detection Threshold Registers - 0x090 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYNTDARU - These bits hold the setting for the higher-order 32 bits of the threshold for detection of loss of synchronization. - 0 - 31 - read-write - - - - - SYNTDARL - Synchronization Loss Detection Threshold Registers - 0x094 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYNTDARL - These bits hold the setting for the lower-order 32 bits of the threshold for detection of loss of synchronization. - 0 - 31 - read-write - - - - - SYNTDBRU - Synchronization Detection Threshold Registers - 0x098 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYNTDBRU - These bits hold the setting for the higher-order 32 bits of the threshold for detection of synchronization. - 0 - 31 - read-write - - - - - SYNTDBRL - Synchronization Detection Threshold Registers - 0x09C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SYNTDBRL - These bits hold the setting for the lower-order 32 bits of the threshold for detection of synchronization. - 0 - 31 - read-write - - - - - LCIVRU - Local Time Counter Initial Value Registers - 0x0B0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - LCIVRU - These bits hold the setting for the higher-order 16 bits of the integer portion of the initial value for the local timer counter. - 0 - 15 - read-write - - - - - LCIVRM - Local Time Counter Initial Value Registers - 0x0B4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - LCIVRM - These bits hold the setting for the lower-order 32 bits of the integer portion of the initial value for the local timer counter. - 0 - 31 - read-write - - - - - LCIVRL - Local Time Counter Initial Value Registers - 0x0B8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - LCIVRL - These bits hold the setting for the fractional portion of the initial value of the local timer counter in nanoseconds. - 0 - 31 - read-write - - - - - GETW10R - Worst 10 Acquisition Directive Register - 0x124 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - GW10 - Worst 10 Acquisition Directive - 0 - 0 - read-write - - - 0 - The worst-10 values are not acquired. - #0 - - - 1 - Starts acquisition of the worst-10 values. - #1 - - - - - - - PLIMITRU - Positive Gradient Limit Registers - 0x128 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PLIMITRU - These bits hold the setting for the higher-order 31 bits of the limit for the positive gradient. - 0 - 30 - read-write - - - - - PLIMITRM - Positive Gradient Limit Registers - 0x12C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PLIMITRM - These bits hold the setting for the middle-order 32 bits of the limit for the positive gradient. - 0 - 31 - read-write - - - - - PLIMITRL - Positive Gradient Limit Registers - 0x130 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PLIMITRL - These bits hold the setting for the lower-order 32 bits of the limit for the positive gradient. - 0 - 31 - read-write - - - - - MLIMITRU - Negative Gradient Limit Registers - 0x134 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MLIMITRU - These bits hold the setting for the higher-order 31 bits of the limit for the negative gradient. - 0 - 30 - read-write - - - - - MLIMITRM - Negative Gradient Limit Registers - 0x138 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MLIMITRM - These bits hold the setting for the middle-order 32 bits of the limit for the negative gradient. - 0 - 31 - read-write - - - - - MLIMITRL - Negative Gradient Limit Registers - 0x13C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - MLIMITRL - These bits hold the setting for the lower-order 32 bits of the limit for the negative gradient. - 0 - 31 - read-write - - - - - GETINFOR - Statistical Information Retention Control Register - 0x140 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - INFO - Information Retention ControlNOTE: Once information fetching is directed, values of various statistical information read before completion of information fetching are not guaranteed. - 0 - 0 - read-write - - - 0 - Has no effects.(write) / Information retention is completed.(read) - #0 - - - 1 - Information is retained.(write) / Processing for information retention is in progress.(read) - #1 - - - - - - - LCCVRU - Local Time Counters - 0x170 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - LCCVRU - These bits are for reading the higher-order 16 bits of the integer portion of the local timer counter's value. - 0 - 15 - read-only - - - - - LCCVRM - Local Time Counters - 0x174 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - LCCVRM - These bits are for reading the lower-order 32 bits of the integer portion of the local timer counter's value. - 0 - 31 - read-only - - - - - LCCVRL - Local Time Counters - 0x178 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - LCCVRL - These bits are for reading the fractional portion of the local timer counter's value (in nanoseconds). - 0 - 31 - read-only - - - - - PW10VRU - Positive Gradient Worst 10 Value Registers - 0x210 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - PW10VRU - These bits are for reading the higher-order 32 bits of the positive gradient value. - 0 - 31 - read-only - - - - - PW10VRM - Positive Gradient Worst 10 Value Registers - 0x214 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - PW10VRM - These bits are for reading the middle-order 32 bits of the positive gradient value. - 0 - 31 - read-only - - - - - PW10VRL - Positive Gradient Worst 10 Value Registers - 0x218 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - PW10VRL - These bits are for reading the lower-order 32 bits of the positive gradient value. - 0 - 31 - read-only - - - - - MW10RU - Negative Gradient Worst 10 Value Registers - 0x2D0 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - MW10RU - These bits are for reading the higher-order 32 bits of the negative gradient value. - 0 - 31 - read-only - - - - - MW10RM - Negative Gradient Worst 10 Value Registers - 0x2D4 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - MW10RM - These bits are for reading the middle-order 32 bits of the negative gradient value. - 0 - 31 - read-only - - - - - MW10RL - Negative Gradient Worst 10 Value Registers - 0x2D8 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - MW10RL - These bits are for reading the lower-order 32 bits of the negative gradient value. - 0 - 31 - read-only - - - - - TMSTARTR - Timer Start Register - 0x37C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - EN5 - Pulse Output Timer 5 Start - 5 - 5 - read-write - - - 0 - Stops pulse output timer 5. - #0 - - - 1 - Starts pulse output timer 5. - #1 - - - - - EN4 - Pulse Output Timer 4 Start - 4 - 4 - read-write - - - 0 - Stops pulse output timer 4. - #0 - - - 1 - Starts pulse output timer 4. - #1 - - - - - EN3 - Pulse Output Timer 3 Start - 3 - 3 - read-write - - - 0 - Stops pulse output timer 3. - #0 - - - 1 - Starts pulse output timer 3. - #1 - - - - - EN2 - Pulse Output Timer 2 Start - 2 - 2 - read-write - - - 0 - Stops pulse output timer 2. - #0 - - - 1 - Starts pulse output timer 2. - #1 - - - - - EN1 - Pulse Output Timer 1 Start - 1 - 1 - read-write - - - 0 - Stops pulse output timer 1. - #0 - - - 1 - Starts pulse output timer 1. - #1 - - - - - EN0 - Pulse Output Timer 0 Start - 0 - 0 - read-write - - - 0 - Stops pulse output timer 0. - #0 - - - 1 - Starts pulse output timer 0. - #1 - - - - - - - PRSR - PRC-TC Status Register - 0x400 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - URE1 - Relay Packet Underflow Detection Flag 1 - 29 - 29 - read-write - oneToClear - - - 0 - No underflow in transfer of data from SYNFP0 to SYNFP1. - #0 - - - 1 - An underflow has been detected in transfer of data from SYNFP0 to SYNFP1. - #1 - - - - - URE0 - Relay Packet Underflow Detection Flag 0 - 28 - 28 - read-write - oneToClear - - - 0 - No underflow in transfer of data from SYNFP1 to SYNFP0. - #0 - - - 1 - An underflow has been detected in transfer of data from SYNFP1 to SYNFP0. - #1 - - - - - MACE - Originating MAC Address Mismatch Detection Flag - 8 - 8 - read-write - oneToClear - modify - - - 0 - A MAC address mismatch has not been detected. - #0 - - - 1 - A MAC address mismatch has been detected. - #1 - - - - - OVRE3 - Relay Packet Overflow Detection Flag 3 - 3 - 3 - read-write - oneToClear - modify - - - 0 - No overflow in transfer of data from SYNFP0 to SYNFP1. - #0 - - - 1 - An overflow has been detected in transfer of data from SYNFP0 to SYNFP1. - #1 - - - - - OVRE2 - Relay Packet Overflow Detection Flag 2 - 2 - 2 - read-write - oneToClear - modify - - - 0 - No overflow in transfer of data from SYNFP1 to SYNFP0. - #0 - - - 1 - An overflow has been detected in transfer of data from SYNFP1 to SYNFP0. - #1 - - - - - OVRE1 - Relay Packet Overflow Detection Flag 1 - 1 - 1 - read-write - oneToClear - modify - - - 0 - No overflow in transfer of data from SYNFP0 to PTPEDMAC. - #0 - - - 1 - An overflow has been detected in transfer of data from SYNFP0 to PTPEDMAC. - #1 - - - - - OVRE0 - Relay Packet Overflow Detection Flag 0 - 0 - 0 - read-write - oneToClear - modify - - - 0 - No overflow in transfer of data from SYNFP1 to PTPEDMAC. - #0 - - - 1 - An overflow has been detected in transfer of data from SYNFP1 to PTPEDMAC. - #1 - - - - - - - PRIPR - PRC-TC Status Notification Permission Register - 0x404 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - URE1 - PRSR.URE1 Status Notification Permission - 29 - 29 - read-write - - - 0 - Prohibits notification of the state of PRSR.URE1. - #0 - - - 1 - Permits notification of the state of PRSR.URE1. - #1 - - - - - URE0 - PRSR.URE0 Status Notification Permission - 28 - 28 - read-write - - - 0 - Prohibits notification of the state of PRSR.URE0. - #0 - - - 1 - Permits notification of the state of PRSR.URE0. - #1 - - - - - MACE - PRSR.MACE Status Notification Permission - 8 - 8 - read-write - - - 0 - Prohibits notification of the state of PRSR.MACE - #0 - - - 1 - Permits notification of the state of PRSR.MACE - #1 - - - - - OVRE3 - PRSR.OVRE3 Status Notification Permission - 3 - 3 - read-write - - - 0 - Prohibits notification of the state of PRSR.OVRE3. - #0 - - - 1 - Permits notification of the state of PRSR.OVRE3. - #1 - - - - - OVRE2 - PRSR.OVRE2 Status Notification Permission - 2 - 2 - read-write - - - 0 - Prohibits notification of the state of PRSR.OVRE2. - #0 - - - 1 - Permits notification of the state of PRSR.OVRE2. - #1 - - - - - OVRE1 - PRSR.OVRE1 Status Notification Permission - 1 - 1 - read-write - - - 0 - Prohibits notification of the state of PRSR.OVRE1. - #0 - - - 1 - Permits notification of the state of PRSR.OVRE1. - #1 - - - - - OVRE0 - PRSR.OVRE0 Status Notification Permission - 0 - 0 - read-write - - - 0 - Prohibits notification of the state of PRSR.OVRE0. - #0 - - - 1 - Permits notification of the state of PRSR.OVRE0. - #1 - - - - - - - TRNDISR - Packet Transmission Control Register - 0x420 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TDIS - Packet Transmission Control - 0 - 1 - read-write - - - 00 - PTP packets are transmitted through both Ethernet port 0 and Ethernet port 1. - #00 - - - 01 - PTP packets are only transmitted through Ethernet port 0. - #01 - - - 10 - PTP packets are only transmitted through Ethernet port 1. - #10 - - - 11 - Setting prohibited - #11 - - - - - - - TRNMR - Relay Mode Register - 0x430 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FWD1 - Channel 1 Relay Enable - 9 - 9 - read-write - - - 0 - Unicast, multicast (other than PTP packets), and broadcast messages from the other node are not relayed from port 1 to port 0. - #0 - - - 1 - Unicast, multicast (other than PTP packets), and broadcast messages from the other node are relayed from port 1 to port 0. - #1 - - - - - FWD0 - Channel 0 Relay Enable - 8 - 8 - read-write - - - 0 - Unicast, multicast (other than PTP packets), and broadcast messages from the other node are not relayed from port 0 to port 1. - #0 - - - 1 - Unicast, multicast (other than PTP packets), and broadcast messages from the other node are relayed from port 0 to port 1. - #1 - - - - - MOD - Cut-Through Mode - 0 - 0 - read-write - - - 0 - Store-and-forward - #0 - - - 1 - Cut-through - #1 - - - - - - - TRNCTTDR - Cut-Through Transfer Start Threshold Register - 0x434 - 32 - read-write - 0x00000060 - 0xFFFFFFFF - - - THVAL - FIFO Read Start ThresholdThreshold for starting to read data from the relay FIFO in cut-through mode (specified as the number of bytes)NOTE1: A value cannot be set in the lower-order 2 bits. These bits are fixed to 0.NOTE2: A value of less than 96 bytes cannot be set. - 0 - 10 - read-write - - - - - - - R_FACI_HP_CMD - Flash Application Command Interface Command-Issuing Area - 0x407E0000 - - 0x00000000 - 4 - registers - - - - FACI_CMD16 - FACI Command Issuing Area (halfword access) - 0 - 16 - read-write - 0x0000 - 0xFFFF - - - FACI_CMD8 - FACI Command Issuing Area (halfword access) - FACI_CMD16 - 0 - 8 - read-write - 0x00 - 0xFF - - - - - R_FACI_HP - Flash Application Command Interface - 0x407FE000 - - 0x00000000 - 0x100 - registers - - - - FASTAT - Flash Access Status - 0x0010 - 8 - read-write - 0x00 - 0xFF - - - CFAE - Code Flash Access Error - 7 - 7 - read-write - zeroToClear - modify - - - 0 - No code flash access error has occurred. - #0 - - - 1 - Code flash access error has occurred. - #1 - - - - - CMDLK - Command Lock - 4 - 4 - read-only - - - DFAE - Data Flash Access Error - 3 - 3 - read-write - zeroToClear - modify - - - ECRCT - 0 - 0 - read-only - - - - - FAEINT - Flash Access Error Interrupt Enable - 0x0014 - 8 - read-write - 0x99 - 0xFF - - - CFAEIE - Code Flash Access Error Interrupt Enable - 7 - 7 - read-write - - - 0 - Does not generate "intflerr" interrupt request when CFAE = "1". - #0 - - - 1 - Generates "intflerr" interrupt request when CFAE = "1". - #1 - - - - - CMDLKIE - Command Lock Interrupt Enable - 4 - 4 - read-write - - - 0 - Does not generate "intflerr" interrupt request when CMDLK = "1". - #0 - - - 1 - Generates "intflerr" interrupt request when CMDLK = "1". - #1 - - - - - DFAEIE - Data Flash Access Error Interrupt Enable - 3 - 3 - read-write - - - 0 - Does not generate "intflerr" interrupt request when DFAE = "1". - #0 - - - 1 - Generates "intflerr" interrupt request when DFAE = "1". - #1 - - - - - ECRCTIE - Error Correct Interrupt Enable - 0 - 0 - read-write - - - 0 - Does not generate "intflerr" interrupt request when ECRCT = "1". - #0 - - - 1 - Generates "intflerr" interrupt request when ECRCT = "1". - #1 - - - - - - - FRDYIE - Flash Ready Interrupt Enable - 0x0018 - 8 - read-write - 0x00 - 0xFF - - - FRDYIE - FRDY Interrupt Enable - 0 - 0 - read-write - - - 0 - Does not generate "intflend" interrupt request when FRDY is changed from "0" to "1". - #0 - - - 1 - Generates "intflend" interrupt request when FRDY is changed from "0" to "1". - #1 - - - - - - - FSADDR - Flash Start Address - 0x0030 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FSA - Start Address of Flash Sequencer Command Target Area - These bits can be written when FRDY bit of FSTATR register is "1". Writing to these bits in FRDY = "0" is ignored. - 0 - 31 - read-write - - - others - Specifies start address for each command processing. - true - - - - - - - FEADDR - Flash End Address - 0x0034 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FEA - End Address of Flash Sequencer Command Target Area - Specifies end address of target area in "Blank Check" command. - These bits can be written when FRDY bit of FSTATR register is "1". Writing to these bits in FRDY = "0" is ignored. - 0 - 31 - read-write - - - - - FSTATR - Flash Status - 0x0080 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - EBFULL - FDMYECC Buffer Full - 18 - 18 - read-only - - - 0 - ECC Buffer is not full - #0 - - - 1 - ECC Buffer is full - #1 - - - - - OTPDTCT - OTP Bit ECC 2-Bit Error Detection Monitoring Bit - 17 - 17 - read-only - - - 0 - No error has been detected. - #0 - - - 1 - An error has been detected. - #1 - - - - - OTPCRCT - OTP Bit ECC 1-Bit Error Correction Monitoring Bit - 16 - 16 - read-only - - - 0 - No error has been corrected. - #0 - - - 1 - An error has been corrected. - #1 - - - - - FRDY - Flash Ready - 15 - 15 - read-only - - - 0 - "Program", "DMA Program", "Erase", "Program" or "Erase" command suspension, "Forced Stop", "Blank Check", "Config Program", "Config Clear", "Lock Bit Program", "Lock Bit Read", or "OTP Program" is processing. - #0 - - - 1 - None of the above is in progress. - #1 - - - - - ILGLERR - Illegal Command Error - 14 - 14 - read-only - - - 0 - Flash sequencer has not detected any illegal command or illegal flash memory access. - #0 - - - 1 - Flash sequencer has detected an illegal command or illegal flash memory access - #1 - - - - - ERSERR - Erasure Error - 13 - 13 - read-only - - - 0 - Erasure processing has been completed successfully - #0 - - - 1 - An error has occurred during erasure - #1 - - - - - PRGERR - Programming Error - 12 - 12 - read-only - - - 0 - Programming has been completed successfully - #0 - - - 1 - An error has occurred during programming - #1 - - - - - SUSRDY - Suspend Ready - 11 - 11 - read-only - - - 0 - Flash sequencer cannot accept "Program/Erase Suspend" command. - #0 - - - 1 - Flash sequencer can accept "Program/Erase Suspend" command. - #1 - - - - - DBFULL - Data Buffer Full - 10 - 10 - read-only - - - 0 - Data Buffer is not full - #0 - - - - - ERSSPD - Erasure-Suspended Status - 9 - 9 - read-only - - - 0 - Flash sequencer is in status other than the below mentioned. - #0 - - - 1 - Flash sequencer is in erasure suspension process or erasure-suspended status. - #1 - - - - - PRGSPD - Programming-Suspended Status - 8 - 8 - read-only - - - 0 - Flash sequencer is in status other than the below mentioned. - #0 - - - 1 - Flash sequencer is in programming suspension process or programming-suspended status. - #1 - - - - - FCUERR - FCU Error - 7 - 7 - read-only - - - 0 - No error has occurred during FPCC processing. - #0 - - - 1 - An error has occurred during FPCC processing. - #1 - - - - - FHVEERR - "fhve" Error - 6 - 6 - read-only - - - 0 - No error has been detected. - #0 - - - 1 - An error has been detected. - #1 - - - - - CFGDTCT - Config Area ECC 2-Bit Error Detection Monitoring Bit - 5 - 5 - read-only - - - 0 - No error has been detected. - #0 - - - 1 - An error has been detected. - #1 - - - - - CFGCRCT - Config Area ECC 1-Bit Error Correction Monitoring Bit - 4 - 4 - read-only - - - 0 - No error has been corrected. - #0 - - - 1 - An error has been corrected. - #1 - - - - - TBLDTCT - Table Area ECC 2-Bit Error Detection Monitoring Bit - 3 - 3 - read-only - - - 0 - No error has been detected. - #0 - - - 1 - An error has been detected. - #1 - - - - - TBLCRCT - Table Area ECC 1-Bit Error Correction Monitoring Bit - 2 - 2 - read-only - - - 0 - No error has been corrected. - #0 - - - 1 - An error has been corrected. - #1 - - - - - - - FENTRYR - Program/Erase Mode Entry - 0x0084 - 16 - read-write - 0x0000 - 0xFFFF - - - KEY - KEY Code - 8 - 15 - write-only - - - 0xAA - Writing to the other bits in this register is enabled. - 0xAA - - - others - Writing to the other bits in this register is disabled. - true - - - - - FENTRYD - Data Flash P/E Mode Entry - These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. - Writing to these bits is enabled only when this register is accessed in 16-bit size and H'AA is written to KEY bits. - 7 - 7 - read-write - - - 0 - Data flash is in "Read Mode" - #0 - - - 1 - Data flash is in "P/E Mode" - #1 - - - - - FENTRYC - Code Flash P/E Mode Entry - These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. - Writing to these bits is enabled only when this register is accessed in 16-bit size and H'AA is written to KEY bits - 0 - 0 - read-write - - - 0 - Code flash is in "Read Mode" - #0 - - - 1 - Code flash is in "P/E Mode" - #1 - - - - - - - FSUINITR - Flash Sequencer Set-up Initialize - 0x008C - 16 - read-write - 0x0000 - 0xFFFF - - - KEY - KEY Code - 8 - 15 - write-only - - - 0x2D - Writing to the other bits in this register is enabled. - 0x2D - - - others - Writing to the other bits in this register is disabled. - true - - - - - SUINIT - Set-up Initialization - This bit can be written when FRDY bit of FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. - Writing to these bits is enabled only when this register is accessed in 16-bit size and H'2D is written to KEY bits. - 0 - 0 - read-write - - - 0 - Set-up registers keep its' value. - #0 - - - 1 - Set-up registers are initialized. - #1 - - - - - - - FCMDR - Flash Sequencer Command - 0x00A0 - 16 - read-only - 0x0000 - 0xFFFF - - - CMDR - Command Register - 8 - 15 - read-only - - - others - These bits store the latest command accepted by FACI. - true - - - - - PCMDR - Previous Command Register - 0 - 7 - read-only - - - others - These bits store previous command accepted by FACI. - true - - - - - - - FPESTAT - Program/Erase Error Status - 0x00C0 - 16 - read-only - 0x0000 - 0xFFFF - - - PEERRST - P/E Error Status - 0 - 7 - read-only - - - 0x01 - A write attempt made to an area protected by the lock bits - 0x01 - - - 0x02 - A write error caused by other source than the above - 0x02 - - - 0x11 - An erase attempt made to an area protected by the lock bits - 0x11 - - - 0x12 - An erase error caused by other source than the above - 0x12 - - - others - Reserved - true - - - - - - - FBCCNT - Blank Check Control - 0x00D0 - 8 - read-write - 0x00 - 0xFF - - - BCDIR - Blank Check Direction - 0 - 0 - read-write - - - 0 - Blank check is executed from smaller address to larger address. (Incremental mode) - #0 - - - 1 - Blank check is executed from larger address to smaller address. (Decremental mode) - #1 - - - - - - - FBCSTAT - Blank Check Status - 0x00D4 - 8 - read-only - 0x00 - 0xFF - - - BCST - Blank Check Status Bit - 0 - 0 - read-only - - - 0 - The target area is erased (blank). - #0 - - - 1 - The target area is filled with 0s and/or 1s. - #1 - - - - - - - FPSADDR - Programmed Area Start Address - 0x00D8 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - PSADR - Programmed Area Start Address - NOTE: Indicates address of the first programmed data which is found in "Blank Check" command execution. - 0 - 18 - read-only - - - - - FAWMON - Flash Access Window Monitor - 0x0DC - 32 - read-only - 0x00000000 - 0x00000000 - - - BTFLG - Flag of Start-Up area select for Boot Swap - 31 - 31 - read-only - - - 0 - The start-up area is the alternate area (sector 1) - #0 - - - 1 - The start-up area is the default area (sector 0) - #1 - - - - - FAWE - End Sector Address for Access Window - NOTE: These bits indicate the end sector address for setting the access window that is located in the configuration area. - 16 - 26 - read-only - - - FSPR - Protection Flag of programming the Access Window, Boot Flag and Temporary Boot Swap Control and "Config Clear" command execution - 15 - 15 - read-only - - - 0 - Protected state - #0 - - - 1 - Non-protected state - #1 - - - - - FAWS - Start Sector Address for Access Window - NOTE: These bits indicate the start sector address for setting the access window that is located in the configuration area. - 0 - 10 - read-only - - - - - FCPSR - FCU Process Switch - 0x00E0 - 16 - read-write - 0x0000 - 0xFFFF - - - ESUSPMD - Erasure-Suspended Mode - 0 - 0 - read-write - - - 0 - Suspension-priority mode - #0 - - - 1 - Erasure-priority mode - #1 - - - - - - - FPCKAR - Flash Sequencer Processing Clock Frequency Notification - 0x00E4 - 16 - read-write - 0x0000 - 0xFFFF - - - KEY - KEY Code - 8 - 15 - write-only - - - 0x1E - Writing to the other bits in this register is enabled. - 0x1E - - - others - Writing to the other bits in this register is disabled. - true - - - - - PCKA - Flash Sequencer Processing Clock Frequency - These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. - Writing to these bits is enabled only when this register is accessed in 16-bit size and H'1E is written to KEY bits. - 0 - 7 - read-write - - - others - Notifies operating frequency of clkf. - true - - - - - - - FSUACR - Flash Start-Up Area Control Register - 0x00E8 - 16 - read-write - 0x0000 - 0xFFFF - - - KEY - KEY Code - 8 - 15 - write-only - - - 0x66 - Writing to the other bits in this register is enabled. - 0x66 - - - others - Writing to the other bits in this register is disabled. - true - - - - - SAS - Start Up Area Select - These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. - Writing to these bits is enabled only when this register is accessed in 16-bit size and H'66 is written to KEY bits. - 0 - 1 - read-write - - - 10 - The start-up area is temporarily switched to the default area (sector 0) regardless of the BTFLG bit. When a reset is generated after setting, the start-up area is selected according to the BTFLG bit. - #10 - - - 11 - The start-up area is temporarily switched to the alternate area (sector 1) regardless of the BTFLG bit. When a reset is generated after setting, the start-up area is selected according to the BTFLG bit. - #11 - - - others - The start-up area is selected according to the start-up area setting of the configuration area (BTFLG bit). - true - - - - - - - - - R_FACI_LP - Flash Application Command Interface - 0x407EC000 - - 0x00000000 - 0x400 - registers - - - - DFLCTL - Flash P/E Mode Control Register - 0x090 - 8 - read-write - 0x00 - 0xFF - - - FPMCR - Flash P/E Mode Control Register - 0x100 - 8 - read-write - 0x08 - 0xFF - - - FMS2 - Flash Operating Mode Select 2. -Refer to the description of the FMS0 bit. - 7 - 7 - read-write - - - VLPE - Low-Voltage P/E Mode Enable - 6 - 6 - read-write - - - 0 - Low-voltage programming is disabled - #0 - - - 1 - Low-voltage programming is enabled - #1 - - - - - FMS1 - The bit to make data flash a programming mode -Refer to the description of the FMS0 bit. - 4 - 4 - read-write - - - RPDIS - Code Flash P/E Disable - 3 - 3 - read-write - - - 0 - The programming of the code flash is enabled - #0 - - - 1 - The programming of the code flash is disabled - #1 - - - - - FMS0 - Flash Operating Mode Select 0 -FMS2,1,0: - 000: Read mode - 011: Discharge mode 1 - 111: Discharge mode 2 - 101: Code Flash P/E mode - 010: Data flash P/E mode - Others: Setting prohibited. - 1 - 1 - read-write - - - - - FASR - Flash Area Select Register - 0x104 - 8 - read-write - 0x00 - 0xFF - - - EXS - Extra area select - 0 - 0 - read-write - - - 0 - User area or data area - #0 - - - 1 - Extra area - #1 - - - - - - - FSARL - Flash Processing Start Address Register L - 0x108 - 16 - read-write - 0x0000 - 0xFFFF - - - FSAR15_0 - Start address - 0 - 15 - read-write - - - - - FSARH - Flash Processing Start Address Register H - 0x110 - 16 - read-write - 0x0000 - 0xFFFF - - - FSAR31_25 - Start address - 9 - 15 - read-write - - - FSAR20_16 - Start address - 0 - 4 - read-write - - - - - FCR - Flash Control Register - 0x114 - 8 - read-write - 0x00 - 0xFF - - - OPST - Processing Start - 7 - 7 - read-write - - - 0 - Processing stops. - #0 - - - 1 - Processing starts. - #1 - - - - - STOP - Forced Processing Stop - 6 - 6 - read-write - - - DRC - Data Read Completion - 4 - 4 - read-write - - - 0 - Data is not read or next data is requested. - #0 - - - 1 - Data reading is completed. - #1 - - - - - CMD - Software Command Setting - 0 - 3 - read-write - - - 0001 - Program - #0001 - - - 0011 - Blank check - #0011 - - - 0100 - Block erase - #0100 - - - 0101 - Consecutive read - #0101 - - - 0111 - Chip erase - #0111 - - - others - Setting prohibited - true - - - - - - - FEARL - Flash Processing End Address Register L - 0x118 - 16 - read-write - 0x0000 - 0xFFFF - - - FEAR15_0 - End address - 0 - 15 - read-write - - - - - FEARH - Flash Processing End Address Register H - 0x120 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FEAR31_25 - End address - 9 - 15 - read-write - - - FEAR20_16 - End address - 0 - 4 - read-write - - - - - FRESETR - Flash Reset Register - 0x124 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FRESET - Software Reset of the registers - 0 - 0 - read-write - - - 0 - No effect - #0 - - - 1 - The registers relates to the flash programming are reset. - #1 - - - - - - - FSTATR00 - Flash Status Register00 - 0x128 - 32 - read-only - 0x00000000 - 0xFFFFFFEF - - - EILGLERR - Extra Area Illegal Command Error Flag - 5 - 5 - read-only - - - 0 - No illegal command or illegal access to the extra area is detected. - #0 - - - 1 - An illegal command or illegal access to the extra area is detected. - #1 - - - - - ILGLERR - Illegal Command Error Flag - 4 - 4 - read-only - - - 0 - No illegal software command or illegal access is detected. - #0 - - - 1 - An illegal command or illegal access is detected. - #1 - - - - - BCERR0 - Blank Check Error Flag0 - 3 - 3 - read-only - - - 0 - Blank checking terminates normally. - #0 - - - 1 - An error occurs during blank checking. - #1 - - - - - PRGERR01 - Program Error Flag 01 - 2 - 2 - read-only - - - 0 - Programming by the FEXCR register terminates normally. - #0 - - - 1 - An error occurs during programming. - #1 - - - - - PRGERR0 - Program Error Flag0 - 1 - 1 - read-only - - - 0 - Programming terminates normally. - #0 - - - 1 - An error occurs during programming. - #1 - - - - - ERERR0 - Erase Error Flag0 - 0 - 0 - read-only - - - 0 - Erasure terminates normally. - #0 - - - 1 - An error occurs during erasure. - #1 - - - - - - - FSTATR1 - Flash Status Register1 - 0x12C - 32 - read-only - 0x00000000 - 0xFFFFFFFB - - - EXRDY - End status signal of a Extra programming sequencer - 7 - 7 - read-only - - - 0 - Other than below - #0 - - - 1 - The software command of the FEXCR register is terminated. - #1 - - - - - FRDY - End status signal of a sequencer - 6 - 6 - read-only - - - 0 - Other than below - #0 - - - 1 - The software command of the FCR register is terminated. - #1 - - - - - DRRDY - Data read request - 1 - 1 - read-only - - - 0 - Other than below - #0 - - - 1 - The read processing of the consecutive read command at each address is terminated and read data is stored to the FRBH and FRBL registers. - #1 - - - - - - - FWBL0 - Flash Write Buffer Register L0 - 0x130 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - WDATA - Program data of the program command - 0 - 15 - read-write - - - - - FWBH0 - Flash Write Buffer Register H0 - 0x138 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - WDATA - Program data of the program command - 0 - 15 - - - - - FSTATR01 - Flash Status Register01 - 0x13C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - BCERR1 - Blank Check Error Flag1 - 3 - 3 - - - 0 - Blank checking terminates normally. - #0 - - - 1 - An error occurs during blank checking. - #1 - - - - - PRGERR1 - Program Error Flag1 - 1 - 1 - - - 0 - Programming terminates normally. - #0 - - - 1 - An error occurs during programming. - #1 - - - - - ERERR1 - Erase Error Flag1 - 0 - 0 - - - 0 - Erasure terminates normally. - #0 - - - 1 - An error occurs during erasure. - #1 - - - - - - - FWBL1 - Flash Write Buffer Register L1 - 0x140 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - WDATA47_32 - Program data of the program command - 0 - 15 - read-write - - - - - FWBH1 - Flash Write Buffer Register H1 - 0x144 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - WDATA63_48 - Program data of the program command - 0 - 15 - - - - - FRBL1 - Flash Read Buffer Register L1 - 0x148 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - RDATA47_32 - Read data of the consecutive read command - 0 - 15 - read-only - - - - - FRBH1 - Flash Read Buffer Register H1 - 0x14C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - RDATA63_48 - Read data of the consecutive read command - 0 - 15 - read-only - - - - - FPR - Protection Unlock Register - 0x180 - 32 - write-only - 0x00000000 - 0xFFFFFF00 - - - FPR - Protection Unlock Register - 0 - 7 - write-only - - - - - FPSR - Protection Unlock Status Register - 0x184 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - PERR - Protect Error Flag - 0 - 0 - read-only - - - 0 - No error - #0 - - - 1 - An error occurs. - #1 - - - - - - - FRBL0 - Flash Read Buffer Register L0 - 0x188 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - RDATA - Read data of the consecutive read command - 0 - 15 - - - - - FRBH0 - Flash Read Buffer Register H0 - 0x190 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - RDATA - Read data of the consecutive read command - 0 - 15 - - - - - FSCMR - Flash Start-Up Setting Monitor Register - 0x1C0 - 32 - read-only - 0x00000000 - 0xFFFFBEFF - - - FSPR - Access Window Protection Flag - 14 - 14 - read-only - - - SASMF - Start-up Area Setting Monitor Flag - 8 - 8 - read-only - - - - - FAWSMR - Flash Access Window Start Address Monitor Register - 0x1C8 - 32 - read-only - 0x00000000 - 0xFFFFF000 - - - FAWS - Flash Access Window Start Address - 0 - 11 - read-only - - - - - FAWEMR - Flash Access Window End Address Monitor Register - 0x1D0 - 32 - read-only - 0x00000000 - 0xFFFFF000 - - - FAWE - Flash Access Window End Address - 0 - 11 - read-only - - - - - FISR - Flash Initial Setting Register - 0x1D8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SAS - Temporary boot swap mode - 6 - 7 - - - 10 - The start-up area is switched to the default area temporarily. - #10 - - - 11 - The start-up area is switched to the alternate area temporarily. - #11 - - - others - The start-up area is selected according to the start-up area settings of the extra area. - true - - - - - PCKA - Peripheral Clock Notification - 0 - 5 - - - - - FEXCR - Flash Extra Area Control Register - 0x1DC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - OPST - Software Command Setting - 7 - 7 - read-write - - - 0 - Processing stops. - #0 - - - 1 - Processing starts. - #1 - - - - - CMD - Processing Start) - 0 - 2 - read-write - - - 001 - Start-up area selection and security setting - #001 - - - 010 - Access window information program - #010 - - - 011 - OCDID1 program - #011 - - - 100 - OCDID2 program - #100 - - - 101 - OCDID3 program - #101 - - - 110 - OCDID4 program - #110 - - - 111 - Extra area clear - #111 - - - others - Setting prohibited - true - - - - - - - FEAML - Flash Error Address Monitor Register L - 0x1E0 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - FEAM - Flash Error Address Monitor Register - 0 - 15 - - - - - FEAMH - Flash Error Address Monitor Register H - 0x1E8 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - FEAM - Flash Error Address Monitor Register - 0 - 15 - - - - - FSTATR2 - Flash Status Register2 - 0x1F0 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - EILGLERR - Extra Area Illegal Command Error Flag - 5 - 5 - read-only - - - ILGLERR - Illegal Command Error Flag - 4 - 4 - read-only - - - BCERR - Blank Check Error Flag - 3 - 3 - read-only - - - PRGERR01 - Program Error Flag 01 - 2 - 2 - read-write - - - PRGERR1 - Program Error Flag - 1 - 1 - read-only - - - ERERR - Erase Error Flag - 0 - 0 - read-only - - - - - FENTRYR_MF4 - Flash P/E Mode Entry Register for MF4 - 0x3FB0 - 16 - read-write - 0x0000 - 0xFFFF - - - FENTRYR - Flash P/E Mode Entry Register - 0x3FB2 - 16 - read-write - 0x0000 - 0xFFFF - - - FLWAITR - Flash Wait Cycle Register - 0x3FC0 - 8 - read-write - 0x00 - 0xFF - - - PFBER - Prefetch Buffer Enable Register - 0x3FC8 - 8 - read-write - 0x00 - 0xFF - - - - - R_FCACHE - Flash Memory Cache - 0x4001C000 - - 0x00000100 - 0x02 - registers - - - 0x00000104 - 0x02 - registers - - - 0x0000011C - 0x01 - registers - - - - FCACHEE - Flash Cache Enable Register - 0x100 - 16 - read-write - 0x0000 - 0xFFFF - - - FCACHEEN - FCACHE Enable - 0 - 0 - read-write - - - 0 - Disable FCACHE - #0 - - - 1 - Enable FCACHE - #1 - - - - - - - FCACHEIV - Flash Cache Invalidate Register - 0x104 - 16 - read-write - 0x0000 - 0xFFFF - - - FCACHEIV - Flash Cache Invalidate Register - 0 - 0 - read-write - - - 0 - Do not invalidate reads, setting ignored on writes - #0 - - - 1 - Invalidate on reads and writes. - #1 - - - - - - - FLWT - Flash Wait Cycle Register - 0x11C - 8 - read-write - - - FLWT - Flash Wait Cycle - 0 - 2 - read-write - - - 000 - 0 waits (ICLK <= 80 MHz) - #000 - - - 001 - 1 wait (80 MHz < ICLK <= 160 MHz) - #001 - - - 010 - 2 waits (160 MHz < ICLK <= 240 MHz). - #010 - - - - - - - - - R_GLCDC - Graphics LCD Controller - 0x400E0000 - - 0x00000000 - 0x101C - registers - - - 0x00001100 - 0x014 - registers - - - 0x00001118 - 0x02C - registers - - - 0x0000114C - 0x00C - registers - - - 0x00001200 - 0x014 - registers - - - 0x00001218 - 0x02C - registers - - - 0x0000124C - 0x00C - registers - - - 0x00001300 - 0x03C - registers - - - 0x00001340 - 0x03C - registers - - - 0x00001380 - 0x03C - registers - - - 0x000013C0 - 0x018 - registers - - - 0x000013E4 - 0x04 - registers - - - 0x00001404 - 0x028 - registers - - - 0x00001440 - 0x014 - registers - - - - BG - Background Registers - 0x1000 - - EN - Background Plane Setting Operation Control Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SWRST - Entire module SW reset control - 16 - 16 - read-write - - - 1 - Releases the entire module from the SW reset state. - #1 - - - 0 - Places the entire module in the SW reset state. - #0 - - - - - VEN - Control of LCDC internal register value reflection to internal operations - 8 - 8 - read-write - oneToSet - modify - - - 1 - Enables - #1 - - - 0 - Disables(Cleared to 0 by an internal source) - #0 - - - - - EN - Background plane generation module operation enable - 0 - 0 - read-write - - - 1 - Enables operation. - #1 - - - 0 - Disables operation. - #0 - - - - - - - PERI - Background Plane Setting Free-Running Period Register - 0x04 - 32 - read-write - 0x00170017 - 0xFFFFFFFF - - - FV - Background plane vertical synchronization signal period on the basis of line. - 16 - 26 - read-write - - - 0x013 - 0x3FF - - - - - FV - FV lines.The valid range is 0x013 to 0x3FF. - true - - - - - FH - Background plane horizontal synchronization signal period on the basis of pixel clock (PXCLK). - 0 - 10 - read-write - - - 0x017 - 0x3FF - - - - - FH - FH lines. The valid range is 0x017 to 0x3FF. - true - - - - - - - SYNC - Background Plane Setting Synchronization Position Register - 0x08 - 32 - read-write - 0x00010001 - 0xFFFFFFFF - - - VP - Background plane vertical synchronization signal assertion position on the basis of line. - 16 - 19 - read-write - - - 0x0 - Setting prohibited - 0x0 - - - others - (VP)th line - true - - - - - HP - Background plane horizontal synchronization signal assertion position on the basis of pixel clock (PXCLK). - 0 - 3 - read-write - - - 0x0 - Setting prohibited - 0x0 - - - others - (HP)th line (pixels) - true - - - - - - - VSIZE - Background Plane Setting Full Image Vertical Size Register - 0x0C - 32 - read-write - 0x00070010 - 0xFFFFFFFF - - - VP - Background plane vertical valid pixel start position on the basis of line - 16 - 26 - read-write - - - 0x0003 - 0x3EF - - - - - VP - VP lines. The valid range is 0x003 to 0x3EF. - true - - - - - VW - Background plane vertical valid pixel width on the basis of line - 0 - 10 - read-write - - - 0x0010 - 0x03FC - - - - - VW - VW lines. The valid range is 0x010 to 0x3F0. - true - - - - - - - HSIZE - Background Plane Setting Full Image Horizontal Size Register - 0x10 - 32 - read-write - 0x00060010 - 0xFFFFFFFF - - - HP - Background plane horizontal valid pixel start position on the basis of pixel clock (PXCLK). - 16 - 26 - read-write - - - 0x006 - 0x3EE - - - - - HP - HP cycle(pixel). The valid range is 0x006 to 0x3EE. - true - - - - - HW - - Background plane horizontall valid pixel width on the basis of pixel clock (PXCLK) - Note: When serial RGB is selected as the output format for the output control block, add two to the horizontal enable signal width and set the resulting value to this field. - - 0 - 10 - read-write - - - 0x010 - 0x3F8 - - - - - HW - HW cycles. The valid range is 0x010 to 0x3F8. - true - - - - - - - BGC - Background Plane Setting Background Color Register - 0x14 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - R - - R value for background plane valid pixel area. - Unsigned; 8-bit integer. - - 16 - 23 - read-write - - - G - - G value for background plane valid pixel area - Unsigned; 8-bit integer - - 8 - 15 - read-write - - - B - - B value for background plane valid pixel area - Unsigned; 8-bit integer - - 0 - 7 - read-write - - - - - MON - Background Plane Setting Status Monitor Register - 0x18 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SWRST - Entire module SW reset state monitor. - 16 - 16 - read-only - - - 1 - The entire module is released from the SW reset state. - #1 - - - 0 - The entire module is in the SW reset state. - #0 - - - - - VEN - - Entire module internal operation reflection control signal monitor. - The signal state for controlling reflection of the register values to the internal operations upon assertion of the vertical synchronization signal. - - 8 - 8 - read-only - - - 1 - The signal for controlling reflection of the register values to the internal operations upon assertion of the vertical synchronization signal is asserted. - #1 - - - 0 - The signal for controlling reflection of the register values to the internal operations upon assertion of the vertical synchronization signal is negated. - #0 - - - - - EN - Background plane generation module operation state monitor. - 0 - 0 - read-only - - - 1 - Operation is in progress. - #1 - - - 0 - Operation is stopped. - #0 - - - - - - - - 2 - 0x100 - GR[%s] - Layer Registers - 0x1100 - - VEN - Graphics Register Update Control Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - PVEN - - Control of graphics n module register value reflection to internal operations. - Reflection of the register values to the internal operation at the assertion of the vertical synchronization signal (VS). - - 0 - 0 - read-write - zeroToClear - modify - - - 1 - Enables reflection of the register values to the internal operation at the assertion of the vertical synchronization signal (VS). - #1 - - - 0 - Disables reflection of the register values to the internal operation at the assertion of the vertical synchronization signal (VS). - #0 - - - - - - - FLMRD - Graphics Frame Buffer Read Control Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - RENB - Graphics data (frame buffer data) read enable. - 0 - 0 - read-write - - - 1 - Enables reading. - #1 - - - 0 - Disables reading. - #0 - - - - - - - FLM1 - Graphics Frame Buffer Control Register 1 - 0x08 - 32 - read-only - 0x00000003 - 0xFFFFFFFF - - - BSTMD - - Burst transfer control for graphics data (frame buffer data) - access - - 0 - 1 - read-only - - - 11 - 16-beat increment burst transfer (64-byte boundary) - #11 - - - others - Setting prohibited. - true - - - - - - - FLM2 - Graphics Frame Buffer Control Register 2 - 0x0C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BASE - - Base address for accessing graphics data (frame buffer data) - Set the head address in the frame buffer where graphics data is to be stored. GRn_FLM2.BASE[5:0] should be fixed to 0 during 64-byte burst transfer. - - 0 - 31 - read-write - - - - - FLM3 - Graphics Frame Buffer Control Register 3 - 0x10 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - LNOFF - - Macro line offset address for accessing graphics data - (frame buffer data) - Signed; 16-bit integer - - 16 - 31 - read-write - - - - - FLM5 - Graphics Frame Buffer Control Register 5 - 0x18 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - LNNUM - Number of lines per frame for accessing graphics data (frame buffer data). - 16 - 26 - read-write - - - 0x00F - 0x3FF - - - - - LNNUM - LNNUM lines. The valid range is 0x00F to 0x3FF. - true - - - - - DATANUM - Number of data transfer times per line for accessing graphics data (frame buffer data), where one transfer is defined as 16-beat burst access (64-byte boundary) - 0 - 15 - read-write - - - DATAUM - DATAUM+1 times. - true - - - - - - - FLM6 - Graphics Frame Buffer Control Register 6 - 0x1C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - FORMAT - Data format for accessing graphics data (frame buffer data). - 28 - 30 - read-write - - - 111 - CLUT11bit/pix) - #111 - - - 110 - CLUT4 (4 bits/pix) - #110 - - - 101 - CLUT8 (8 bits/pix) - #101 - - - 100 - ARGB8888 (32 bits/pix) - #100 - - - 011 - ARGB4444 (16 bits/pix) - #011 - - - 010 - ARGB1555 (16 bits/pix, 1 bit of A is LUT data) - #010 - - - 001 - RGB888 (32 bits/pix, 8 bits on the MSB side are invalid) - #001 - - - 000 - RGB565 (16 bits/pix) - #000 - - - others - Setting prohibited. - true - - - - - - - AB1 - Graphics Alpha Blending Control Register 1 - 0x20 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ARCON - Rectangular area alpha blending control. - 12 - 12 - read-write - - - 1 - On - #1 - - - 0 - Off - #0 - - - - - ARCDISPON - Image area border display control for rectangular area alpha blending. - 8 - 8 - read-write - - - 1 - Display on - #1 - - - 0 - Display off - #0 - - - - - GRCDISPON - Graphics image area border display control. - 4 - 4 - read-write - - - 1 - Display on - #1 - - - 0 - Display off - #0 - - - - - DISPSEL - Graphics display plane control. - 0 - 1 - read-write - - - 11 - Blended display of lower-layer graphics (input image from the previous stage) and current graphics (graphics data read from the AHB bus) - #11 - - - 10 - Current graphics display - #10 - - - 01 - Lower-layer graphics display - #01 - - - 00 - Background color display (value set by the GRn_BASE register). - #00 - - - - - - - AB2 - Graphics Alpha Blending Control Register 2 - 0x24 - 32 - read-write - 0x00060010 - 0xFFFFFFFF - - - GRCVS - Vertical start position of graphics image area. - 16 - 26 - read-write - - - 0x002 - 0x3EE - - - - - GRCVS - GRCVS lines. The valid range is 0x002 to 0x3EE. - true - - - - - GRCVW - Vertical width of graphics image area. - 0 - 10 - read-write - - - 0x010 - 0x3FC - - - - - GRCVW - GRCVW lines. The valid range is 0x010 to 0x3F0. - true - - - - - - - AB3 - Graphics Alpha Blending Control Register 3 - 0x28 - 32 - read-write - 0x00050010 - 0xFFFFFFFF - - - GRCHS - Horizontal start position of graphics image area. - 16 - 26 - read-write - - - 0x005 - 0x3ED - - - - - GRCHS - GRCHS lines. The valid range is 0x005 to 0x3ED. - true - - - - - GRCHW - Horizontal width of graphics image area. - 0 - 10 - read-write - - - 0x010 - 0x3F0 - - - - - GRCHW - GRCHW pixels. The valid range is 0x010 to 0x3F0. - true - - - - - - - AB4 - Graphics Alpha Blending Control Register 4 - 0x2C - 32 - read-write - 0x00060010 - 0xFFFFFFFF - - - ARCVS - Vertical start position of rectangular area alpha blending image area - 16 - 26 - read-write - - - 0x002 - 0x3EE - - - - - ARCVS - ARCVS linels. The valid range is 0x002 to 0x3EE. - true - - - - - ARCVW - Vertical width of rectangular area alpha blending image area. - 0 - 10 + + ADGSCS + A/D Conversion Channel Status Register (for Group Scan) + 0x082 + 16 + read-only + 0x8080 + 0xFFFF + + + CHSELGB + Channel status of Group B scan + 0 + 7 + read-only + + + 0x80 + Group B scan start + 0x80 + + + 0xFF + Group B scan end + 0xFF + + + + + CHSELGA + Channel status of Group A scan + 8 + 15 + read-only + + + 0x80 + Group A scan start + 0x80 + + + 0xFF + Group A scan end + 0xFF + + + + + + + ADSER + A/D Sampling Extension Register + 0x088 + 8 + read-write + 0x00 + 0xFF + + + Reserved + These bits are read as 0000000. The write value should be 0000000. + 0 + 6 + read-write + + + SMPEX + Sampling extension control + 7 + 7 + read-write + + + 0 + Not extend sampling period + #0 + + + 1 + Extending sampling period + #1 + + + + + + + 16 + 0x2 + 0-15 + ADBUF%s + A/D Data Buffer Register %s + 0x0B0 + 16 + read-only + 0x0000 + 0xFFFF + + + ADBUF + A/D data buffer registers (ADBUF) are 16-bit read-only registers that sequentially store all A/D converted values. The automatic clear function is not applied to these registers. + 0 + 15 + read-only + + + + + ADBUFEN + A/D Data Buffer Enable Register + 0x0D0 + 8 + read-write + 0x00 + 0xFF + + + BUFEN + Data Buffer Enable + 0 + 0 + read-write + + + 0 + The data buffer is not used. + #0 + + + 1 + The data buffer is used. + #1 + + + + + Reserved + These bits are read as 0000000. The write value should be 0000000. + 1 + 7 + read-write + + + + + ADBUFPTR + A/D Data Buffer Pointer Register + 0x0D2 + 8 + read-write + 0x00 + 0xFF + zeroToClear + modify + + + BUFPTR + Data Buffer PointerThese bits indicate the number of data buffer to which the next A/D converted data is transferred. + 0 + 3 + read-only + + + PTROVF + Pointer Overflow Flag + 4 + 4 + read-only + + + 0 + The data buffer pointer has not overflowed. + #0 + + + 1 + The data buffer pointer has overflowed. + #1 + + + + + Reserved + These bits are read as 000. The write value should be 000. + 5 + 7 + read-write + + + + + ADPGADBS0 + A/D Programmable Gain Amplifier Differential Input Bias Select Register 0 + 0x1B4 + 8 + read-write + 0x00 + 0xFF + + + P0BIAS + Programmable Gain Amplifiers P000 to P002 Bias Voltage SelectNOTE: This bit selects the input bias voltage value when differential inputs are used. + 0 + 0 + read-write + + + 0 + AVCC x 0.5 + #0 + + + 1 + AVCC x 0.6 + #1 + + + + + Reserved + These bits are read as 0000000. The write value should be 0000000. + 1 + 7 + read-write + + + + + ADPGADBS1 + A/D Programmable Gain Amplifier Differential Input Bias Select Register 1 + 0x1B5 + 8 + read-write + 0x00 + 0xFF + + + P3BIAS + Programmable Gain Amplifiers P003 Bias Voltage SelectNOTE: This bit selects the input bias voltage value when differential inputs are used. + 0 + 0 + read-write + + + 0 + AVCC x 0.5 + #0 + + + 1 + AVCC x 0.6 + #1 + + + + + Reserved + These bits are read as 0000000. The write value should be 0000000. + 1 + 7 + read-write + + + + + ADREFMON + A/D External Reference Voltage Monitor Register + 0x1E0 + 8 + read-write + 0x00 + 0xFF + + + PGAMON + PGA Monitor Output Enable + 0 + 2 + read-write + + + 000 + The monitor output is disabled. + #000 + + + 001 + The monitor output is enabled. + #001 + + + others + Setting prohibited. + true + + + + + Reserved + This bit is read as 0. The write value should be 0. + 3 + 3 + read-write + + + MONSEL + Monitor output selection bit. + 4 + 7 + read-write + + + 0000 + No monitor output is selected. + #0000 + + + 1000 + P000 is selected. + #1000 + + + 1001 + P001 is selected. + #1001 + + + 1010 + P002 is selected. + #1010 + + + 1011 + P003 is selected. + #1011 + + + others + Setting prohibited. + true + + + + + + + + + R_ADC1 + 0x4005C200 + + + R_PSCU + Peripheral Security Control Unit + 0x400E0000 + + 0x04 + 44 + registers + + + + PSARB + Peripheral Security Attribution Register B + 0x04 + 32 read-write - - - 0x001 - 0x3FC - - - - - ARCVW - ARCVW linels. The valid range is 0x001 to 0x3F0. - true - - - - - - - AB5 - Graphics Alpha Blending Control Register 5 - 0x30 - 32 - read-write - 0x00050010 - 0xFFFFFFFF - - - ARCHS - Horizontal start position of rectangular area alpha blending image area. - 16 - 26 + 0xffffffff + 0xffffffff + + + PSARB1 + CAN1 and the MSTPCRB.MSTPB1 bit security attribution + 1 + 1 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB2 + CAN0 and the MSTPCRB.MSTPB2 bit security attribution + 2 + 2 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB3 + CEC and the MSTPCRB.MSTPB3 bit security attribution + 3 + 3 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB6 + QSPI and the MSTPCRB.MSTPB6 bit security attribution + 6 + 6 + read-only + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB7 + IIC2 and the MSTPCRB.MSTPB7 bit security attribution + 7 + 7 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB8 + IIC1 and the MSTPCRB.MSTPB8 bit security attribution + 8 + 8 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB9 + IIC0 and the MSTPCRB.MSTPB9 bit security attribution + 9 + 9 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB11 + USBFS and the MSTPCRB.MSTPB11 bit security attribution + 11 + 11 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB12 + USBHS and the MSTPCRB.MSTPB12 bit security attribution + 12 + 12 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB15 + ETHER0/EDMAC0, the MSTPCRB.MSTPB15 bit and the PFENET.PHYMODE0 bit security attribution + 15 + 15 + read-only + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB16 + OSPI and the MSTPCRB.MSTPB16 bit security attribution + 16 + 16 + read-only + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB18 + RSPI1 and the MSTPCRB.MSTPB18 bit security attribution + 18 + 18 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB19 + RSPI0 and the MSTPCRB.MSTPB19 bit security attribution + 19 + 19 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB22 + SCI9 and the MSTPCRB.MSTPB22 bit security attribution + 22 + 22 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB23 + SCI8 and the MSTPCRB.MSTPB23 bit security attribution + 23 + 23 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB24 + SCI7 and the MSTPCRB.MSTPB24 bit security attribution + 24 + 24 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB25 + SCI6 and the MSTPCRB.MSTPB25 bit security attribution + 25 + 25 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB26 + SCI5 and the MSTPCRB.MSTPB26 bit security attribution + 26 + 26 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB27 + SCI4 and the MSTPCRB.MSTPB27 bit security attribution + 27 + 27 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB28 + SCI3 and the MSTPCRB.MSTPB28 bit security attribution + 28 + 28 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB29 + SCI2 and the MSTPCRB.MSTPB29 bit security attribution + 29 + 29 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB30 + SCI1 and the MSTPCRB.MSTPB30 bit security attribution + 30 + 30 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARB31 + SCI0 and the MSTPCRB.MSTPB31 bit security attribution + 31 + 31 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + + + PSARC + Peripheral Security Attribution Register C + 0x08 + 32 read-write - - - 0x005 - 0x3ED - - - - - ARCHS - ARCHS pixel. The valid range is 0x005 to 0x3ED. - true - - - - - ARCHW - Horizontal width of rectangular area alpha blending image area. - 0 - 10 + 0xffffffff + 0xffffffff + + + PSARC0 + CAC and the MSTPCRC.MSTPC0 bit security attribution + 0 + 0 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC1 + CRC and the MSTPCRC.MSTPC1 bit security attribution + 1 + 1 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC3 + CTSU and the MSTPCRC.MSTPC3 bit security attribution + 3 + 3 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC8 + SSIE0 and the MSTPCRC.MSTPC8 bit security attribution + 8 + 8 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC12 + SDHI0 and the MSTPCRC.MSTPC12 bit security attribution + 12 + 12 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC13 + DOC and the MSTPCRC.MSTPC13 bit security attribution + 13 + 13 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC26 + CANFD1 and the MSTPCRC.MSTPC26 bit security attribution + 26 + 26 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC27 + CANFD0 and the MSTPCRC.MSTPC27 bit security attribution + 27 + 27 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARC31 + TSIP and the MSTPCRC.MSTPC31 bit security attribution + 31 + 31 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + + + PSARD + Peripheral Security Attribution Register D + 0x0C + 32 read-write - - - 0x001 - 0x3F8 - - - - - ARCHW - ARCHW pixels. The valid range is 0x001 to 0x3F0. - true - - - - - - - AB6 - Graphics Alpha Blending Control Register 6 - 0x34 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ARCCOEF - - Alpha coefficient for alpha blending in rectangular area (-255 to 255). - [8]: Sign (0: addition, 1: subtraction) - [7:0]: Variation (absolute value) - - 16 - 24 + 0xffffffff + 0xffffffff + + + PSARD0 + AGT3 and the MSTPCRD.MSTPD0 bit security attribution + 0 + 0 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD1 + AGT2 and the MSTPCRD.MSTPD1 bit security attribution + 1 + 1 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD2 + AGT1 and the MSTPCRD.MSTPD2 bit security attribution + 2 + 2 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD3 + AGT0 and the MSTPCRD.MSTPD3 bit security attribution + 3 + 3 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD11 + PGI3 and the MSTPCRD.MSTPD11 bit security attribution + 11 + 11 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD12 + PGI2 and the MSTPCRD.MSTPD12 bit security attribution + 12 + 12 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD13 + PGI1 and the MSTPCRD.MSTPD13 bit security attribution + 13 + 13 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD14 + PGI0 and the MSTPCRD.MSTPD14 bit security attribution + 14 + 14 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD15 + ADC1 and the MSTPCRD.MSTPD15 bit security attribution + 15 + 15 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD16 + ADC0 and the MSTPCRD.MSTPD16 bit security attribution + 16 + 16 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD20 + DAC12 and the MSTPCRD.MSTPD20 bit security attribution + 20 + 20 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARD22 + TSN and the MSTPCRD.MSTPD22 bit security attribution + 22 + 22 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + + + PSARE + Peripheral Security Attribution Register E + 0x10 + 32 read-write - - - ARCRATE - Frame rate for alpha blending in rectangular area. - 0 - 7 + 0xffffffff + 0xffffffff + + + PSARE0 + WDT security attribution + 0 + 0 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE1 + IWDT security attribution + 1 + 1 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE2 + RTC security attribution + 2 + 2 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE14 + AGT5 and the MSTPCRE.MSTPE14 bit security attribution + 14 + 14 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE15 + AGT4 and the MSTPCRE.MSTPE15 bit security attribution + 15 + 15 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE22 + GPT9 and the MSTPCRE.MSTPE22 bit security attribution + 22 + 22 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE23 + GPT8 and the MSTPCRE.MSTPE23 bit security attribution + 23 + 23 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE24 + GPT7 and the MSTPCRE.MSTPE24 bit security attribution + 24 + 24 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE25 + GPT6 and the MSTPCRE.MSTPE25 bit security attribution + 25 + 25 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE26 + GPT5 and the MSTPCRE.MSTPE26 bit security attribution + 26 + 26 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE27 + GPT4 and the MSTPCRE.MSTPE27 bit security attribution + 27 + 27 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE28 + GPT3 and the MSTPCRE.MSTPE28 bit security attribution + 28 + 28 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE29 + GPT2 and the MSTPCRE.MSTPE29 bit security attribution + 29 + 29 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE30 + GPT1 and the MSTPCRE.MSTPE30 bit security attribution + 30 + 30 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + PSARE31 + GPT0 and the MSTPCRE.MSTPE31 bit security attribution + 31 + 31 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + + + MSSAR + Module Stop Security Attribution Register + 0x14 + 32 read-write - - - ARCRATE - ARCRATE+1 frames - true - - - - - + 0xffffffff + 0xffffffff + + + MSSAR0 + The MSTPCRC.MSTPC14 bit security attribution + 0 + 0 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + MSSAR1 + The MSTPCRA.MSTPA22 bit security attribution + 1 + 1 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + MSSAR2 + The MSTPCRA.MSTPA7 bit security attribution + 2 + 2 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + MSSAR3 + The MSTPCRA.MSTPA0 bit security attribution + 3 + 3 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + + + + CFSAMONA + Code Flash Security Attribution Monitor Register A + 0x18 + 32 + read-only + + + CFS1 + Code Flash Secure area 1 + 15 + 23 + read-only + + + + + CFSAMONB + Code Flash Security Attribution Monitor Register B + 0x1C + 32 + read-only + + + CFS2 + Code Flash Secure area 2 + 10 + 23 + read-only + + + + + DFSAMON + Data Flash Security Attribution Monitor Register + 0x20 + 32 + read-only + + + DFS + Data flash Secure area + 10 + 15 + read-only + + + + + SSAMONA + SRAM Security Attribution Monitor Register A + 0x24 + 32 + read-only + + + SS1 + SRAM Secure area 1 + 13 + 20 + read-only + + + + + SSAMONB + SRAM Security Attribution Monitor Register B + 0x28 + 32 + read-only + + + SS2 + SRAM secure area 2 + 10 + 20 + read-only + + + + + DLMMON + Device Lifecycle Management State Monitor Register + 0x2C + 32 + read-only + + + DLMMON + Device Lifecycle Management State Monitor + 0 + 3 + read-only + + + 0x0 + CM + 0x0 + + + 0x1 + SHIPPED + 0x1 + + + 0x2 + SSD + 0x2 + + + 0x3 + NSECSD + 0x3 + + + 0x4 + DPL + 0x4 + + + 0x5 + LCK_DBG + 0x5 + + + 0x6 + LCK_BOOT + 0x6 + + + 0x7 + RMA_REQ + 0x7 + + + 0x8 + RMA_ACK + 0x8 + + + Others + Reserved + true + + + + + + + + + + R_AGT0 + Asynchronous General Purpose Timer + 0x40084000 + + 0x00000000 + 0x006 + registers + + + 0x00000008 + 0x003 + registers + + + 0x0000000C + 0x004 + registers + + + + AGT + AGT Counter Register + 0x00 + 16 + read-write + 0xFFFF + 0xFFFF + + + AGT + 16bit counter and reload registerNOTE : When 1 is written to the TSTOP bit in the AGTCRn register, the 16-bit counter is forcibly stopped and set to FFFFH. + 0 + 15 + read-write + + + + + AGTCMA + AGT Compare Match A Register + 0x02 + 16 + read-write + 0xFFFF + 0xFFFF + + + AGTCMA + AGT Compare Match A data is stored.NOTE : When 1 is written to the TSTOP bit in the AGTCRn register, set to FFFFH + 0 + 15 + read-write + + + + + AGTCMB + AGT Compare Match B Register + 0x04 + 16 + read-write + 0xFFFF + 0xFFFF + + + AGTCMB + AGT Compare Match B data is stored.NOTE : When 1 is written to the TSTOP bit in the AGTCR register, set to FFFFH + 0 + 15 + read-write + + + + + AGTCR + AGT Control Register + 0x08 + 8 + read-write + 0x00 + 0xFF + + + TCMBF + Compare match B flag + 7 + 7 + read-write + zeroToClear + modify + + + 0 + No match + #0 + + + 1 + Match. + #1 + + + + + TCMAF + Compare match A flag + 6 + 6 + read-write + zeroToClear + modify + + + 0 + No match + #0 + + + 1 + Match. + #1 + + + + + TUNDF + Underflow flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + No match + #0 + + + 1 + Match. + #1 + + + + + TEDGF + Active edge judgment flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + No active edge received + #0 + + + 1 + Active edge received. + #1 + + + + + TSTOP + AGT count forced stop + 2 + 2 + write-only + + + 0 + Writing is invalid + #0 + + + 1 + The count is forcibly stopped. + #1 + + + + + TCSTF + AGT count status flag + 1 + 1 + read-only + + + 0 + Count stops + #0 + + + 1 + Count in progress. + #1 + + + + + TSTART + AGT count start + 0 + 0 + read-write + + + 0 + Count stops + #0 + + + 1 + Count starts. + #1 + + + + + + + AGTMR1 + AGT Mode Register 1 + 0x09 + 8 + read-write + 0x00 + 0xFF + + + TCK + Count source + 4 + 6 + read-write + + + 000 + PCLKB + #000 + + + 001 + PCLKB/8 + #001 + + + 011 + PCLKB/2 + #011 + + + 100 + Divided clock AGTLCLK specified by CKS[2:0] bits in the AGTMR2 register + #100 + + + 101 + Underflow event signal from AGT0*6 + #101 + + + 110 + Divided clock AGTSCLK specified by CKS[2:0] bits in the AGTMR2 register. + #110 + + + others + settings are prohibited. + true + + + + + TEDGPL + Edge polarity + 3 + 3 + read-write + + + 0 + Single-edge + #0 + + + 1 + Both-edge. + #1 + + + + + TMOD + Operating mode + 0 + 2 + read-write + + + 000 + Timer mode + #000 + + + 001 + Pulse output mode + #001 + + + 010 + Event counter mode + #010 + + + 011 + Pulse width measurement mode + #011 + + + 100 + Pulse period measurement mode. + #100 + + + others + settings are prohibited + true + + + + + + + AGTMR2 + AGT Mode Register 2 + 0x0A + 8 + read-write + 0x00 + 0xFF + + + LPM + Low Power Mode + 7 + 7 + read-write + + + 0 + Normal mode + #0 + + + 1 + Low Power mode + #1 + + + + + CKS + AGTLCLK/AGTSCLK count source clock frequency division ratio + 0 + 2 + read-write + + + 000 + 1/1 + #000 + + + 001 + 1/2 + #001 + + + 010 + 1/4 + #010 + + + 011 + 1/8 + #011 + + + 100 + 1/16 + #100 + + + 101 + 1/32 + #101 + + + 110 + 1/64 + #110 + + + 111 + 1/128. + #111 + + + + + + + AGTIOC + AGT I/O Control Register + 0x0C + 8 + read-write + 0x00 + 0xFF + + + TIOGT + Count control + 6 + 7 + read-write + + + 00 + Event is always counted + #00 + + + 01 + Event is counted during polarity period specified for AGTEEn. + #01 + + + others + settings are prohibited. + true + + + + + TIPF + Input filter + 4 + 5 + read-write + + + 00 + No filter + #00 + + + 01 + Filter sampled at PCLKB + #01 + + + 10 + Filter sampled at PCLKB/8 + #10 + + + 11 + Filter sampled at PCLKB/32 + #11 + + + + + TOE + AGTOn output enable + 2 + 2 + read-write + + + 0 + AGTOn output disabled + #0 + + + 1 + AGTOn output enabled. + #1 + + + + + TEDGSEL + I/O polarity switchFunction varies depending on the operating mode. + 0 + 0 + read-write + + + + + AGTISR + AGT Event Pin Select Register + 0x0D + 8 + read-write + 0x00 + 0xFF + + + EEPS + AGTEE polarty selection + 2 + 2 + read-write + + + 0 + An event is counted during the low-level period + #0 + + + 1 + An event is counted during the high-level period + #1 + + + + + + + AGTCMSR + AGT Compare Match Function Select Register + 0x0E + 8 + read-write + 0x00 + 0xFF + + + TOPOLB + AGTOB polarity select + 6 + 6 + read-write + + + 0 + AGTOB Output is started at low + #0 + + + 1 + AGTOB Output is started at high + #1 + + + + + TOEB + AGTOB output enable + 5 + 5 + read-write + + + 0 + AGTOB output disabled (port) + #0 + + + 1 + AGTOB output enabled + #1 + + + + + TCMEB + Compare match B register enable + 4 + 4 + read-write + + + 0 + Disable compare match B register + #0 + + + 1 + Enable compare match B register + #1 + + + + + TOPOLA + AGTOA polarity select + 2 + 2 + read-write + + + 0 + AGTOA Output is started at low + #0 + + + 1 + AGTOA Output is started at high + #1 + + + + + TOEA + AGTOA output enable + 1 + 1 + read-write + + + 0 + AGTOA output disabled (port) + #0 + + + 1 + AGTOA output enabled + #1 + + + + + TCMEA + Compare match A register enable + 0 + 0 + read-write + + + 0 + Disable compare match A register + #0 + + + 1 + Enable compare match A register + #1 + + + + + + + AGTIOSEL + AGT Pin Select Register + 0x0F + 8 + read-write + 0x00 + 0xFF + + + TIES + AGTIO input enable + 4 + 4 + read-write + + + 0 + External event input is disabled during Software Standby mode + #0 + + + 1 + External event input is enabled during Software Standby mode. + #1 + + + + + SEL + AGTIO pin select + 0 + 1 + read-write + + + 00 + AGTIO_A can not be used as AGTIO input pin in deep software standby mode + #00 + + + 01 + Setting prohibited + #01 + + + 10 + AGTIO_B can be used as AGTIO input pin in deep software standby mode. AGTIO_B is input only. It is not possible to output. + #10 + + + 11 + AGTIO_C can be used as AGTIO input pin in deep software standby mode. AGTIO_C is input only. It is not possible to output. + #11 + + + + + + + + + R_AGT1 + 0x40084100 + + + R_BUS + Bus Interface + 0x40003000 + + 0x00000002 + 0x00A + registers + + + 0x00000012 + 0x00A + registers + + + 0x00000022 + 0x00A + registers + + + 0x00000032 + 0x00A + registers + + + 0x00000042 + 0x00A + registers + + + 0x00000052 + 0x00A + registers + + + 0x00000062 + 0x00A + registers + + + 0x00000072 + 0x00A + registers + + + 0x00000802 + 0x02 + registers + + + 0x0000080A + 0x02 + registers + + + 0x00000812 + 0x02 + registers + + + 0x0000081A + 0x02 + registers + + + 0x00000822 + 0x02 + registers + + + 0x0000082A + 0x02 + registers + + + 0x00000832 + 0x02 + registers + + + 0x0000083A + 0x02 + registers + + + 0x00000842 + 0x02 + registers + + + 0x0000084A + 0x02 + registers + + + 0x00000852 + 0x02 + registers + + + 0x0000085A + 0x02 + registers + + + 0x00000862 + 0x02 + registers + + + 0x0000086A + 0x02 + registers + + + 0x00000872 + 0x02 + registers + + + 0x0000087A + 0x02 + registers + + + 0x00000880 + 0x02 + registers + + + 0x00000C00 + 0x003 + registers + + + 0x00000C10 + 0x01 + registers + + + 0x00000C14 + 0x003 + registers + + + 0x00000C20 + 0x01 + registers + + + 0x00000C24 + 0x02 + registers + + + 0x00000C40 + 0x01 + registers + + + 0x00000C44 + 0x006 + registers + + + 0x00000C50 + 0x01 + registers + + + 0x00001000 + 0x02 + registers + + + 0x00001004 + 0x02 + registers + + + 0x00001008 + 0x02 + registers + + + 0x0000100C + 0x02 + registers + + + 0x00001010 + 0x02 + registers + + + 0x00001014 + 0x02 + registers + + + 0x00001100 + 0x02 + registers + + + 0x00001104 + 0x02 + registers + + + 0x00001108 + 0x02 + registers + + + 0x0000110C + 0x02 + registers + + + 0x00001110 + 0x02 + registers + + + 0x00001114 + 0x02 + registers + + + 0x00001118 + 0x02 + registers + + + 0x0000111C + 0x02 + registers + + + 0x00001120 + 0x02 + registers + + + 0x00001124 + 0x02 + registers + + + 0x00001128 + 0x02 + registers + + + 0x0000112C + 0x02 + registers + + + 0x00001130 + 0x02 + registers + + + 0x00001134 + 0x02 + registers + + + 0x00001138 + 0x02 + registers + + + 0x0000113C + 0x02 + registers + + + 0x00001800 + 0x005 + registers + + + 0x00001810 + 0x005 + registers + + + 0x00001820 + 0x005 + registers + + + 0x00001830 + 0x005 + registers + + + 0x00001840 + 0x005 + registers + + + 0x00001850 + 0x005 + registers + + + 0x00001860 + 0x005 + registers + + + 0x00001870 + 0x005 + registers + + + 0x00001880 + 0x005 + registers + + + 0x00001890 + 0x005 + registers + + + 0x000018A0 + 0x005 + registers + + + + 8 + 0x10 + CSa[%s] + CS Registers + 0x0000 - AB7 - Graphics Alpha Blending Control Register 7 - 0x38 - 32 + MOD + Mode Register + 0x0002 + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - ARCDEF - Initial alpha value for alpha blending in rectangular area. - 16 - 23 - read-write - - - CKON - RGB-index chroma-key processing control. - 0 - 0 + PRMOD + Page Read Access Mode Select + 15 + 15 read-write + + 0 + Normal access compatible mode + #0 + 1 - Enables chroma-key processing + External data read continuous assertion mode #1 + + + + PWENB + Page Write Access Enable + 9 + 9 + read-write + 0 - Disables chroma-key processing + Disable #0 + + 1 + Enable + #1 + - - - - AB8 - Graphics Alpha Blending Control Register 8 - 0x3C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CKKG - - G signal for RGB-index chroma-key processing - Unsigned; 8 bits. - - 16 - 23 - read-write - - - CKKB - - B signal for RGB-index chroma-key processing - Unsigned; 8 bits. - - 8 - 15 - read-write - - - CKKR - - R signal for RGB-index chroma-key processing - Unsigned; 8 bits. - - 0 - 7 - read-write - - - - - AB9 - Graphics Alpha Blending Control Register 9 - 0x40 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CKA - A value after RGB-index chroma-key processing replacement. - 24 - 31 - read-write - - - CKG - - G value after RGB-index chroma-key processing replacement - Unsigned; 8 bits. - - 16 - 23 - read-write - - - CKB - - B value after RGB-index chroma-key processing replacement - Unsigned; 8 bits. - - 8 - 15 - read-write - - - CKR - - R value after RGB-index chroma-key processing replacement - Unsigned; 8 bits. - - 0 - 7 - read-write - - - - - BASE - Graphics Background Color Control Register - 0x4C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - G - - Background color G value - Unsigned; 8 bits - - 16 - 23 - read-write - - B - - Background color B value - Unsigned; 8 bits - + PRENB + Page Read Access Enable 8 - 15 - read-write - - - R - - Background color R value - Unsigned; 8 bits - - 0 - 7 - read-write - - - - - CLUTINT - Graphics CLUT Table Interrupt Control Register - 0x50 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SEL - CLUT table control - 16 - 16 + 8 read-write + + 0 + Disable + #0 + 1 - Uses CLUT1 plane for internal operations. + Enable #1 + + + + EWENB + External Wait Enable + 3 + 3 + read-write + 0 - Uses CLUT0 plane for internal operations. + Disable #0 - others - Setting prohibited - true + 1 + Enable + #1 - LINE - Number of detection lines + WRMOD + Write Access Mode Select 0 - 10 + 0 read-write - - - 0x000 - 0x400 - - - LINE - LINE+1 lines. The valid range is 0x000 to 0x400. - true + 0 + Byte strobe mode + #0 + + + 1 + Single write strobe mode + #1 - MON - Graphics Status Monitor Register - 0x54 + WCR1 + Wait Control Register 1 + 0x0004 32 - read-only - 0x00000000 + read-write + 0x07070707 0xFFFFFFFF - UNDFLST - Status monitor for underflow - 16 - 16 - read-only + CSRWAIT + Normal Read Cycle Wait Select + 24 + 28 + read-write - 1 - An underflow occurs in internal operations. - #1 + 0x00 + No wait is inserted. + 0x00 - 0 - No underflow occurs in internal operations. - #0 + others + Wait with a length of CSRWAIT clock cycle is inserted. + true - ARCST - Status monitor for alpha blending in rectangular area - 0 - 0 - read-only + CSWWAIT + Normal Write Cycle Wait Select + 16 + 20 + read-write - 1 - Fade-in/fade-out is in progress. - #1 + 0x00 + No wait is inserted. + 0x00 - 0 - Fade-in/fade-out is not in progress. - #0 + others + Wait with a length of CSWWAIT clock cycle is inserted. + true - - - - - 3 - 0x40 - GAM[%s] - Gamma Settings - 0x1300 - - LATCH - Gamma Register Update Control Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - VEN - - Control of gamma correction x module register value reflection to internal operations. - The register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). - - 0 - 0 + CSPRWAIT + Page Read Cycle Wait SelectNOTE: The CSPRWAIT value is valid only when the PRENB bit in CSnMOD is set to 1. + 8 + 10 read-write - zeroToClear - modify - 1 - Enables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). - #1 + 0x0 + No wait is inserted. + 0x0 - 0 - Disables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). - #0 + others + Wait with a length of CSPRWAIT clock cycle is inserted. + true - - - - GAM_SW - Gamma Correction Block Function Switch Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - GAMON - Gamma correction on/off control + CSPWWAIT + Page Write Cycle Wait SelectNOTE: The CSPWWAIT value is valid only when the PWENB bit in CSnMOD is set to 1. 0 - 0 + 2 read-write - 1 - Turns on gamma correction. - #1 + 0x0 + No wait is inserted. + 0x0 - 0 - Turns off gamma correction. - #0 + others + Wait with a length of CSPWWAIT clock cycle is inserted. + true - 8 - 0x04 - LUT[%s] - Gamma Correction Block Table Setting Register - 0x08 + WCR2 + Wait Control Register 2 + 0x0008 32 read-write - 0x00000000 + 0x00000007 0xFFFFFFFF - 2 - 16 - HIGH,LOW - _%s - - Gain value of area 0. - Unsigned 11-bit fixed point. - - 0 - 10 + CSON + CS Assert Wait Select + 28 + 30 read-write - GAIN00 - GAIN00/1024 + 0x0 + No wait is inserted. + 0x0 + + + others + Wait with a length of CSON clock cycle is inserted. true - - - - 5 - 0x04 - AREA[%s] - Gamma Correction Block Area Setting Register - 0x28 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - 3 - 10 - HIGH,MID,LOW - _%s - - Start threshold of area 1 - Unsigned 10-bit integer - - 0 - 9 - read-write - - - - - - OUT - Output Control Registers - 0x13C0 - - VLATCH - Output Control Block Register Update Control Register - 0x0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - VEN - - Control of output control module register value reflection to internal operations. - The register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). - - 0 - 0 + WDON + Write Data Output Wait Select + 24 + 26 read-write - zeroToClear - modify - 1 - Enables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). - #1 + 0x0 + No wait is inserted. + 0x0 - 0 - Disables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). - #0 + others + Wait with a length of WDON clock cycle is inserted. + true - - - - SET - Output Control Block Output Interface Register - 0x4 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - ENDIANON - Bit endian change control - 28 - 28 + WRON + WR Assert Wait Select + 20 + 22 read-write - 1 - Ascending order (big endian) - #1 + 0x0 + No wait is inserted. + 0x0 - 0 - Descending order (little endian) - #0 + others + Wait with a length of WRON clock cycle is inserted. + true - - SWAPON - Pixel order control - 24 - 24 + + RDON + RD Assert Wait Select + 16 + 18 read-write - 1 - In the order of BGR - #1 + 0x0 + No wait is inserted. + 0x0 - 0 - In the order of RGB - #0 + others + Wait with a length of RDON clock cycle is inserted. + true - FORMAT - Output format select + AWAIT + CS Assert Wait Select 12 13 read-write - 11 - Serial RGB; select RGB888 as dither output format. - #11 + 0x0 + No wait is inserted. + 0x0 - 10 - RGB565; select RGB565 as dither output format. - #10 + others + Wait with a length of AWAIT clock cycle is inserted. + true + + + + WDOFF + Write Data Output Extension Cycle Select + 8 + 10 + read-write + - 01 - RGB666; select RGB666 as dither output format. - #01 + 0x0 + No wait is inserted. + 0x0 - 00 - RGB888; select RGB888 as dither output format. - #00 + others + Wait with a length of WDOFF clock cycle is inserted. + true - FRQSEL - Clock frequency division control - 8 - 9 + CSWOFF + Write-Access CS Extension Cycle Select + 4 + 6 read-write - 11 - Setting prohibited - #11 + 0x0 + No wait is inserted. + 0x0 - 10 - Quarter frequency (serial RGB) - #10 + others + Wait with a length of CSWOFF clock cycle is inserted. + true + + + + CSROFF + Read-Access CS Extension Cycle Select + 0 + 2 + read-write + - 01 - Setting prohibited - #01 + 0x0 + No wait is inserted. + 0x0 - 00 - No frequency division, parallel RGB - #00 + others + Wait with a length of CSROFF clock cycle is inserted. + true + + + + + 8 + 0x10 + CSb[%s] + CS Registers + 0x0800 + + CR + Control Register + 0x002 + 16 + read-write + 0x0000 + 0xFFFF + - DIRSEL - Invalid data position control in serial RGB format - 4 - 4 + MPXEN + Address/Data Multiplexed I/O Interface Select + 12 + 12 read-write + + 0 + Separate bus interface is selected for area n + #0 + 1 - Invalid data is output prior to valid (RGB) data. + Address/data multiplexed I/O interface is selected for area n. (n = 0 to 7) #1 + + + + EMODE + Endian Mode + 8 + 8 + read-write + 0 - Invalid data is output following valid (RGB) data. + Little Endian #0 + + 1 + Big Endian + #1 + - PHASE - Data delay in serial RGB format (based on OUTCLK) - 0 - 1 + BSIZE + External Bus Width Select + 4 + 5 read-write - 11 - 3 cycles - #11 - - - 10 - 2 cycles - #10 + 00 + A 16-bit bus space + #00 01 - 1 cycle + Setting prohibited #01 - 00 - 0 cycle - #00 + 10 + An 8-bit bus space + #10 + + + 11 + Setting prohibited + #11 - - - - BRIGHT1 - Output Control Block Brightness Correction Register 1 - 0x8 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BRTG - - Brightness (DC) adjustment of G signal - Unsigned; 10 bits; +512 with offset; integer - - 0 - 9 - read-write - - - - - BRIGHT2 - Output Control Block Brightness Correction Register 2 - 0xC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BRTB - - Brightness (DC) adjustment of B signal - Unsigned; 10 bits; +512 with offset; integer - - 16 - 25 - read-write - - BRTR - - Brightness (DC) adjustment of R signal - Unsigned; 10 bits; +512 with offset; integer - + EXENB + Operation Enable 0 - 9 + 0 read-write + + + 0 + Disable operation + #0 + + + 1 + Enable operation + #1 + + - CONTRAST - Output Control Block Contrast Correction Register - 0x10 - 32 + REC + Recovery Cycle Register + 0x00A + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - CONTG - - Contrast (GAIN) adjustment of G signal - Unsigned; 8 bits fixed point. - - 16 - 23 + WRCV + Write Recovery + 8 + 11 read-write - CONTG - CONTG/128 - true + 0x0 + No recovery cycle is inserted. + 0x0 - - - - CONTB - - Contrast (GAIN) adjustment of B signal - Unsigned; 8 bits fixed point - - 8 - 15 - read-write - - CONTB - CONTB/128 + others + WRCV recovery cycle is inserted. true - CONTR - - Contrast (GAIN) adjustment of R signal - Unsigned; 8 bits fixed point - + RRCV + Read Recovery 0 - 7 + 3 read-write - CONTR - CONTR/128 + 0x0 + No recovery cycle is inserted. + 0x0 + + + others + RRCV recovery cycle is inserted. true + + + SDRAM + SDRAM Registers + 0x0C00 - PDTHA - Output Control Block Panel Dither Correction Register - 0x14 - 32 + SDCCR + SDC Control Register + 0x00 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x00 + 0xFF - SEL - Operation mode - 20 - 21 + BSIZE + SDRAM Bus Width Select + 4 + 5 read-write - 11 + 00 + A 16-bit bus space + #00 + + + 01 Setting prohibited - #11 + #01 10 - 2x2 pattern dither + An 8-bit bus space #10 - 01 - Round-off - #01 - - - 00 - Truncate - #00 + 11 + Setting prohibited + #11 - FORM - Output format select - 16 - 17 + EXENB + Operation Enable + 0 + 0 read-write - 11 - Setting prohibited - #11 - - - 10 - RGB565; select RGB565 as output interface format. - #10 - - - 01 - RGB666; select RGB666 as output interface format. - #01 + 0 + Disable + #0 - 00 - RGB888; select RGB888 or serial RGB as output interface format. - #00 + 1 + Enable + #1 + + + + SDCMOD + SDC Mode Register + 0x01 + 8 + read-write + 0x00 + 0xFF + - PA - - Pattern value (A) of 2 x 2 pattern dither - Unsigned 2-bit integer - - 12 - 13 - read-write - - - PB - - Pattern value (B) of 2 x 2 pattern dither - Unsigned 2-bit integer - - 8 - 9 - read-write - - - PC - - Pattern value (C) of 2 x 2 pattern dither - Unsigned 2-bit integer - - 4 - 5 - read-write - - - PD - - Pattern value (D) of 2 x 2 pattern dither - Unsigned 2-bit integer - + EMODE + Endian Mode 0 - 1 + 0 read-write + + + 0 + Endian order of SDRAM address space is the same as the endian order of the operating mode + #0 + + + 1 + Endian order of SDRAM address space is not the endian order of the operating mode. + #1 + + - CLKPHASE - Output Control Block Output Phase Control Register - 0x24 - 32 + SDAMOD + SDRAM Access Mode Register + 0x02 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x00 + 0xFF - FRONTGAM - Correction control - 12 - 12 + BE + Continuous Access Enable + 0 + 0 read-write + + 0 + Disable + #0 + 1 - Gamma correction is followed by brightness/contrast correction. + Enable. #1 + + + + + + SDSELF + SDRAM Self-Refresh Control Register + 0x10 + 8 + read-write + 0x00 + 0xFF + + + SFEN + SDRAM Self-Refresh Enable + 0 + 0 + read-write + 0 - Brightness/contrast correction is followed by gamma correction. + Disable #0 + + 1 + Enable + #1 + + + + + SDRFCR + SDRAM Refresh Control Register + 0x14 + 16 + read-write + 0x0001 + 0xFFFF + + + REFW + Auto-Refresh Cycle/ Self-Refresh Clearing Cycle Count Setting. ( REFW+1 Cycles ) + 12 + 15 + read-write + - LCDEDGE - LCD_DATA Output Phase Control - 8 - 8 + RFC + Auto-Refresh Request Interval Setting + 0 + 11 read-write - 0 - In synchronization with the rising edge of LCD_CLK. - #0 + 0x0 + Setting prohibited + 0x0 - 1 - In synchronization with the falling edge of LCD_CLK - #1 + others + RFC+1 cycles inserted + true + + + + SDRFEN + SDRAM Auto-Refresh Control Register + 0x16 + 8 + read-write + 0x00 + 0xFF + - TCON0EDGE - LCD_TCON0 Output Phase Control - 6 - 6 + RFEN + Auto-Refresh Operation Enable + 0 + 0 read-write - - 1 - In synchronization with the falling edge of LCD_CLK. - #1 - 0 - In synchronization with the rising edge of LCD_CLK. + Disable #0 - - - - TCON1EDGE - LCD_TCON1 Output Phase Control - 5 - 5 - read-write - 1 - In synchronization with the falling edge of LCD_CLK. + Enable #1 - - 0 - In synchronization with the rising edge of LCD_CLK. - #0 - + + + + SDICR + SDRAM Initialization Sequence Control Register + 0x20 + 8 + read-write + 0x00 + 0xFF + - TCON2EDGE - LCD_TCON2 Output Phase Control - 4 - 4 + INIRQ + Initialization Sequence Start + 0 + 0 read-write - - 1 - In synchronization with the falling edge of LCD_CLK. - #1 - 0 - In synchronization with the rising edge of LCD_CLK. + Invalid #0 - - - - TCON3EDGE - LCD_TCON3 Output Phase Control - 3 - 3 - read-write - 1 - In synchronization with the falling edge of LCD_CLK. + Initialization sequence starts #1 - - 0 - In synchronization with the rising edge of LCD_CLK. - #0 - - - - TCON - Timing Control Registers - 0x1400 - TIM - TCON Reference Timing Setting Register - 0x04 - 32 + SDIR + SDRAM Initialization Register + 0x24 + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0010 + 0xFFFF - HALF - - Vertical synchronization signal generation change timing - Sets the delay from the assertion of the internal horizontal synchronization signal in terms of pixels. - - 16 - 26 + PRC + Initialization Precharge Cycle Count ( PRF+3 cycles ) + 8 + 10 + read-write + + + ARFC + Initialization Auto-Refresh Count + 4 + 7 read-write - - - 0x000 - 0x3FF - - - HALF - HALF pixels. The valid range is 0x000 to 0x3FF. + 0x0 + Setting prohibited + 0x0 + + + others + ARFC+1 times true - OFFSET - - Horizontal synchronization signal generation reference timing - Sets the offset from the assertion of the internal horizontal synchronization signal in terms of pixels. - + ARFI + Initialization Auto-Refresh Interval ( PRF+3 cycles ) 0 - 10 + 3 read-write - - - 0x000 - 0x3FF - - - - - OFFSET - OFFSET+1 pixels. The valid range is 0x000 to 0x3FF. - true - - - 2 - 0x8 - A,B - STV%s1 - TCON Vertical Timing Setting Register %s1 - 0x08 - 32 + SDADR + SDRAM Address Register + 0x40 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x00 + 0xFF - VS - STVx1 first change timing - 16 - 26 + MXC + Address Multiplex Select + 0 + 1 read-write - - - 0x000 - 0x7FF - - - VS - VS pixels. The valid range is 0x000 to 0x3FF. - true + 00 + 8-bit shift + #00 - - - - VW - - STVx1 second change timing - Sets the signal assertion width. - - 0 - 10 - read-write - - - 0x000 - 0x7FF - - - - VW - VW pixels. The valid range is 0x000 to 0x3FF. - true + 01 + 9-bit shift + #01 + + + 10 + 10-bit shift + #10 + + + 11 + 11-bit shift + #11 - 2 - 0x8 - A,B - STV%s2 - TCON Vertical Timing Setting Register %s2 - 0x0C + SDTR + SDRAM Timing Register + 0x44 32 read-write - 0x00000000 + 0x00000002 0xFFFFFFFF - INV - STVx signal polarity inversion control - 4 - 4 + RAS + Row Active Interval + 16 + 18 read-write - 1 - Inverted - #1 - - - 0 - Not inverted - #0 + 000 + 1 cycle + #000 - - - - SEL - Output signal select control for VSOUT (controlled by TCON_STVA2 register)/VEOUT (controlled by the TCON_STVB2 register) pin - 0 - 2 - read-write - - 111 - DE - #111 + 001 + 2 cycles + #001 - 110 - Setting prohibited - #110 + 010 + 3 cycles + #010 - 101 - Setting prohibited - #101 + 011 + 4 cycles + #011 100 - Setting prohibited + 5 cycles #100 - 011 - STHB - #011 - - - 010 - STHA - #010 + 101 + 6 cycles + #101 - 001 - STVB - #001 + 110 + 7 cycles + #110 - 000 - STVA - #000 + 111 + Setting prohibited + #111 - - - - 2 - 0x8 - A,B - STH%s1 - TCON Horizontal Timing Setting Register STH%s1 - 0x18 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - HS - STHx1 first change timing - 16 - 26 + RCD + Row Column Latency ( RCD+1 cycles ) + 12 + 13 read-write - - - 0x000 - 0x3FF - - - - - HS - HS lines. The valid range is 0x000 to 0x3FF. - true - - - HW - - STHx1 second change timing. - Sets the signal assertion width. - - 0 - 10 + RP + Row Precharge Interval ( RP+1 cycles ) + 9 + 11 read-write - - - 0x000 - 0x3FF - - - - - HW - HW pixels. The valid range is 0x000 to 0x3FF. - true - - - - - - 2 - 0x8 - A,B - STH%s2 - TCON Horizontal Timing Setting Register STH%s2 - 0x1C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - HSSEL - STHx signal generation reference timing control. + WR + Write Recovery Interval 8 8 read-write - - 1 - Reference timing is the offset set with the TCON_TIM.OFFSET[10:0] (horizontal synchronization generation reference timing) field - #1 - 0 - Reference timing is the input horizontal synchronization signal (HSIN) + 1 cycle #0 - - - - INV - STVx signal polarity inversion control. - 4 - 4 - read-write - 1 - Inverted + 2 cycles #1 - - 0 - Not inverted - #0 - - SEL - Output signal select control for LCD_TCON2 (controlled by TCON_STHA2 register)/LCD_TCON3 (controlled by the TCON_STHB2 register) pin. + CL + SDRAMC Column Latency 0 2 read-write - 111 - DE - #111 + 001 + 1 cycle + #001 - 110 - Setting prohibited - #110 + 010 + 2 cycles + #010 - 101 - Setting prohibited - #101 + 011 + 3 cycles + #011 - 100 + others Setting prohibited - #100 + true + + + + + + SDMOD + SDRAM Mode Register + 0x48 + 16 + read-write + 0x0000 + 0xFFFF + + + MR + Mode Register SettingWriting to these bits: Mode register set command is issued. + 0 + 14 + read-write + + + + + SDSR + SDRAM Status Register + 0x50 + 8 + read-only + 0x00 + 0xFF + + + SRFST + Self-Refresh Transition/Recovery Status + 4 + 4 + read-only + - 011 - STHB - #011 + 0 + Transition/recovery not in progress + #0 - 010 - STHA - #010 + 1 + Transition/recovery in progress + #1 + + + + INIST + Initialization Status + 3 + 3 + read-only + - 001 - STVB - #001 + 0 + Initialization sequence not in progress + #0 - 000 - STVA - #000 + 1 + Initialization sequence in progress + #1 - - - - DE - TCON Data Enable Polarity Setting Register - 0x28 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - INV - DE signal polarity inversion control. + MRSST + Mode Register Setting Status 0 0 - read-write + read-only - - 1 - Inverted - #1 - 0 - Not inverted + Mode register setting not in progress #0 + + 1 + Mode register setting in progress + #1 + - SYSCNT - GLCDC System Control Registers - 0x1440 + 11 + 0x10 + + + BUS1 + BUS1 + 0 + + + BUS2 + BUS2 + 1 + + + BUS3 + BUS3 + 2 + + + BUS4 + BUS4 + 3 + + + BUS5 + BUS5 + 4 + + + BUS6 + BUS6 + 5 + + + BUS7 + BUS7 + 6 + + + BUS8 + BUS8 + 7 + + + BUS9 + BUS9 + 8 + + + BUS10 + BUS10 + 9 + + + BUS11 + BUS11 + 10 + + + BUSERR[%s] + Bus Error Registers + 0x1800 - DTCTEN - System control block State Detection Control Register + ADD + Bus Error Address Register 0x00 32 - read-write + read-only 0x00000000 - 0xFFFFFFFF + 0x00000000 - L2UNDFDTC - Graphics 2 underflow detection control - 2 - 2 - read-write + BERAD + Bus Error AddressWhen a bus error occurs, It stores an error address. + 0 + 31 + read-only + + + + + STAT + Bus Error Status Register + 0x04 + 8 + read-only + 0x00 + 0xFE + + + ERRSTAT + Bus Error StatusWhen bus error assert, error flag occurs. + 7 + 7 + read-only - - 1 - Enables detection. - #1 - 0 - Disables detection. + No bus error occurred #0 - - - - L1UNDFDTC - Graphics 1 underflow detection control - 1 - 1 - read-write - 1 - Enables detection. + Bus error occurred #1 - - 0 - Disables detection. - #0 - - VPOSDTC - Specified line detection control + ACCSTAT + Error access statusThe status at the time of the error 0 0 - read-write + read-only - - 1 - Enables detection. - #1 - 0 - Disables detection. + Read access #0 + + 1 + Write Access + #1 + + + + 6 + 0x4 + + + M4I + M4I + 0 + + + M4D + M4D + 1 + + + SYS + SYS + 2 + + + DMA + DMA + 3 + + + EDM + EDM + 4 + + + GPX + GPX + 5 + + + BUSM[%s] + Master Bus Control Register Array + 0x1000 - INTEN - System control block Interrupt Request Enable Control Register - 0x04 - 32 + CNT + Master Bus Control Register + 0x0 + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - L2UNDFINTEN - Interrupt request signal GLCDC_L2UNDF enable control. - 2 - 2 + IERES + Ignore Error Responses + 15 + 15 read-write - - 1 - Enables GLCDC_L2UNDF output - #1 - 0 - Disables GLCDC_L2UNDF output + Bus error will be reported. #0 - - - - L1UNDFINTEN - Interrupt request signal GLCDC_L1UNDF enable control. - 1 - 1 - read-write - 1 - Enables GLCDC_L1UNDF output + Bus error will not be reported. #1 - - 0 - Disables GLCDC_L1UNDF output - #0 - + + + + + 16 + 0x4 + + + FLI + FLI + 0 + + + RAMH + RAMH + 1 + + + MBIU + MBIU + 2 + + + RAM0 + RAM0 + 3 + + + RAM1 + RAM1 + 4 + + + P0B + P0B + 5 + + + P2B + P2B + 6 + + + P3B + P3B + 7 + + + P4B + P4B + 8 + + + PxB + PxB + 9 + + + P6B + P6B + 10 + + + P7B + P7B + 11 + + + FBU + FBU + 12 + + + EXT + EXT + 13 + + + EXT2 + EXT2 + 14 + + + GPX + GPX + 15 + + + BUSS[%s] + Slave Bus Control Register Array + 0x1100 + + CNT + Slave Bus Control Register + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + - VPOSINTEN - Interrupt request signal GLCDC_VPOS enable control. - 0 - 0 + ARBMET + Arbitration MethodSpecify the priority between groups + 4 + 5 read-write - 1 - Enables GLCDC_VPOS output - #1 + 00 + fixed priority + #00 - 0 - Disables GLCDC_VPOS output - #0 + 01 + round-robin + #01 + + + others + Setting prohibited + true + + + CSRECEN + CS Recovery Cycle Insertion Enable Register + 0x0880 + 16 + read-write + 0x3E3E + 0xFFFF + + + 8 + 1 + RCVENM%s + Multiplexed Bus Recovery Cycle Insertion Enable + 8 + 8 + read-write + + + 0 + Recovery cycle insertion is disabled. + #0 + + + 1 + Recovery cycle insertion is enabled. + #1 + + + + + 8 + 1 + RCVEN%s + Separate Bus Recovery Cycle Insertion Enable + 0 + 0 + read-write + + + 0 + Recovery cycle insertion is disabled. + #0 + + + 1 + Recovery cycle insertion is enabled. + #1 + + + + + + + + + R_CAC + Clock Frequency Accuracy Measurement Circuit + 0x40044600 + + 0x00000000 + 0x005 + registers + + + 0x00000006 + 0x006 + registers + + + + CACR0 + CAC Control Register 0 + 0x00 + 8 + read-write + 0x00 + 0xFF + + + CFME + Clock Frequency Measurement Enable. + 0 + 0 + read-write + + + 0 + Disable + #0 + + + 1 + Enable + #1 + + + + + + + CACR1 + CAC Control Register 1 + 0x01 + 8 + read-write + 0x00 + 0xFF + + + EDGES + Valid Edge Select + 6 + 7 + read-write + + + 00 + Rising edge + #00 + + + 01 + Falling edge + #01 + + + 10 + Both rising and falling edges + #10 + + + 11 + Setting prohibited + #11 + + + + + TCSS + Measurement Target Clock Frequency Division Ratio Select + 4 + 5 + read-write + + + 00 + No division + #00 + + + 01 + x 1/4 clock + #01 + + + 10 + x 1/8 clock + #10 + + + 11 + x 1/32 clock + #11 + + + + + FMCS + Measurement Target Clock Select + 1 + 3 + read-write + + + 000 + Main clock + #000 + + + 001 + Sub-clock + #001 + + + 010 + HOCO clock + #010 + + + 011 + MOCO clock + #011 + + + 100 + LOCO clock + #100 + + + 101 + Peripheral module clock(PCLKB) + #101 + + + 110 + IWDTCLK clock + #110 + + + 111 + Setting prohibited + #111 + + + + + CACREFE + CACREF Pin Input Enable + 0 + 0 + read-write + + + 0 + Disable + #0 + + + 1 + Enable + #1 + + + + + + + CACR2 + CAC Control Register 2 + 0x02 + 8 + read-write + 0x00 + 0xFF + + + DFS + Digital Filter Selection + 6 + 7 + read-write + + + 00 + Digital filtering is disabled. + #00 + + + 01 + The sampling clock for the digital filter is the frequency measuring clock. + #01 + + + 10 + The sampling clock for the digital filter is the frequency measuring clock divided by 4. + #10 + + + 11 + The sampling clock for the digital filter is the frequency measuring clock divided by 16. + #11 + + + + + RCDS + Measurement Reference Clock Frequency Division Ratio Select + 4 + 5 + read-write + + + 00 + 1/32 clock + #00 + + + 01 + 1/128 clock + #01 + + + 10 + 1/1024 clock + #10 + + + 11 + 1/8192 clock + #11 + + + + + RSCS + Measurement Reference Clock Select + 1 + 3 + read-write + + + 000 + Main clock + #000 + + + 001 + Sub-clock + #001 + + + 010 + HOCO clock + #010 + + + 011 + MOCO clock + #011 + + + 100 + LOCO clock + #100 + + + 101 + Peripheral module clock(PCLKB) + #101 + + + 110 + IWDTCLK clock + #110 + + + 111 + Setting prohibited + #111 + + + + + RPS + Reference Signal Select + 0 + 0 + read-write + + + 0 + CACREF pin input + #0 + + + 1 + Internal clock (internally generated signal) + #1 + + + + + + + CAICR + CAC Interrupt Control Register + 0x03 + 8 + read-write + 0x00 + 0xFF + + + OVFFCL + OVFF Clear + 6 + 6 + write-only + + + 0 + No effect on operations + #0 + + + 1 + Clears the OVFF flag + #1 + + + + + MENDFCL + MENDF Clear + 5 + 5 + write-only + + + 0 + No effect on operations + #0 + + + 1 + Clears the MENDF flag + #1 + + + + + FERRFCL + FERRF Clear + 4 + 4 + write-only + + + 0 + No effect on operations + #0 + + + 1 + Clears the FERRF flag + #1 + + + + + OVFIE + Overflow Interrupt Request Enable + 2 + 2 + read-write + + + 0 + Disable + #0 + + + 1 + Enable + #1 + + + + + MENDIE + Measurement End Interrupt Request Enable + 1 + 1 + read-write + + + 0 + Disable + #0 + + + 1 + Enable + #1 + + + + + FERRIE + Frequency Error Interrupt Request Enable + 0 + 0 + read-write + + + 0 + Disable + #0 + + + 1 + Enable + #1 + + + + + + + CASTR + CAC Status Register + 0x04 + 8 + read-only + 0x00 + 0xFF + + + OVFF + Counter Overflow Flag + 2 + 2 + read-only + + + 0 + The counter has not overflowed. + #0 + + + 1 + The counter has overflowed. + #1 + + + + + MENDF + Measurement End Flag + 1 + 1 + read-only + + + 0 + Measurement is in progress. + #0 + + + 1 + Measurement has ended. + #1 + + + + + FERRF + Frequency Error Flag + 0 + 0 + read-only + + + 0 + The clock frequency is within the range corresponding to the settings. + #0 + + + 1 + The clock frequency has deviated beyond the range corresponding to the settings (frequency error). + #1 + + + + + + + CAULVR + CAC Upper-Limit Value Setting Register + 0x06 + 16 + read-write + 0x0000 + 0xFFFF + + + CAULVR + CAULVR is a 16-bit readable/writable register that stores the upper-limit value of the frequency. + 0 + 15 + read-write + + + + + CALLVR + CAC Lower-Limit Value Setting Register + 0x08 + 16 + read-write + 0x0000 + 0xFFFF + + + CALLVR + CALLVR is a 16-bit readable/writable register that stores the lower-limit value of the frequency. + 0 + 15 + read-write + + + + + CACNTBR + CAC Counter Buffer Register + 0x0A + 16 + read-only + 0x0000 + 0xFFFF + + + CACNTBR + CACNTBR is a 16-bit read-only register that retains the counter value at the time a valid reference signal edge is input + 0 + 15 + read-only + + + + + + + R_CAN0 + Controller Area Network (CAN) Module + 0x40050000 + + 0x00000200 + 0x230 + registers + + + 0x00000820 + 0x039 + registers + + + + 32 + 0x10 + MB[%s] + Mailbox + 0x200 - STCLR - System control block Status Clear Register - 0x08 + ID + Mailbox ID Register + 0x0 32 read-write 0x00000000 - 0xFFFFFFFF + 0x00000000 - L2UNDFCLR - Graphics 2 underflow detection flag clear field - 2 - 2 + IDE + ID Extension + 31 + 31 read-write - - 1 - Clears the graphics 2 underflow detection flag. - #1 - 0 - No operation + Standard ID #0 - - - - L1UNDFCLR - Graphics 1 underflow detection flag clear field - 1 - 1 - read-write - 1 - Clears the graphics 1 underflow detection flag. + Extended ID #1 - - 0 - No operation - #0 - - VPOSCLR - Graphics 2 specified line detection flag clear field - 0 - 0 + RTR + Remote Transmission Request + 30 + 30 read-write - - 1 - Clears the specified line detection flag. - #1 - 0 - No operation + Data frame #0 + + 1 + Remote frame + #1 + + + SID + Standard ID + 18 + 28 + read-write + + + EID + Extended ID + 0 + 17 + read-write + - STMON - System control block Status Monitor Register - 0x0c - 32 - read-only - 0x00000000 - 0xFFFFFFFF + DL + Mailbox DLC Register + 0x4 + 16 + read-write + 0x0000 + 0x0000 - L2UNDF - Graphics 2 underflow detection flag - 2 - 2 - read-only + DLC + Data Length Code + 0 + 3 + read-write - 1 - An underflow has been detected in graphics 2. - #1 + 0000 + Data length = 0 byte + #0000 - 0 - No underflow has been detected in graphics 2. - #0 + 0001 + Data length = 1 byte + #0001 - - - - L1UNDF - Graphics 1 underflow detection flag - 1 - 1 - read-only - - 1 - An underflow has been detected in graphics 1. - #1 + 0010 + Data length = 2 bytes + #0010 - 0 - No underflow has been detected in graphics 1. - #0 + 0011 + Data length = 3 bytes + #0011 - - - - VPOS - Graphics 2 specified line detection flag - 0 - 0 - read-only - - 1 - A specified line notification has been detected in graphics 2. - #1 + 0100 + Data length = 4 bytes + #0100 - 0 - No specified line notification has been detected in graphics 2. - #0 + 0101 + Data length = 5 bytes + #0101 + + + 0110 + Data length = 6 bytes + #0110 + + + 0111 + Data length = 7 bytes + #0111 + + + others + Data length = 8 bytes + true - PANEL_CLK - System control block Version and Panel Clock Control Register - 0x10 - 32 + 8 + 0x01 + D[%s] + Mailbox Data Register + 0x6 + 8 read-write - 0x01000000 - 0xFFFFFFFF + 0x00 + 0x00 - VER - - Version information - Version information of the GLCDC - - 16 - 31 - read-only - - - PIXSEL - - Pixel clock select control. - Must be set to the same value as OUT_SET.FRQSEL[1]. - - 12 - 12 + DATA + DATA0 to DATA7 store the transmitted or received CAN message data. Transmission or reception starts from DATA0. The bit order on the CAN bus is MSB-first, and transmission or reception starts from bit 7 + 0 + 7 read-write - - - 0 - No frequency division, parallel RGB - #0 - - - 1 - Quarter frequency,serial RGB - #1 - - + + + + TS + Mailbox Timestamp Register + 0xE + 16 + read-write + 0x0000 + 0x0000 + - CLKSEL - Panel clock supply source select + TSH + Time Stamp Lower ByteBits TSH[7:0] store the counter value of the time stamp when received messages are stored in the mailbox. 8 - 8 - read-write - - - 0 - External clock select - #0 - - - 1 - PLL output select - #1 - - - - - CLKEN - - Panel clock output enable control - Note: Before changing the PIXSEL,CLKSEL or DCDR bit, this bit must be set to 0. - - 6 - 6 + 15 read-write - - - 0 - Disable panel clock output - #0 - - - 1 - Enable panel clock output - #1 - - - DCDR - - Clock division ratio setting control - Refer toTable 2.7.1 for details about setting value. - Note: Settings that are not listed in table 2.7.1 are prohibited. - + TSL + Time Stamp Higher ByteBits TSL[7:0] store the counter value of the time stamp when received messages are stored in the mailbox. 0 - 5 + 7 read-write - 256 - 0x4 - GR1_CLUT0[%s] - Color Palette 0 Plane for Graphics 1 Plane - 0x0000 - 32 + 8 + 0x4 + MKR[%s] + Mask Register + 0x400 + 32 + read-write + 0x00000000 + 0x00000000 + + + SID + Standard ID + 18 + 28 + read-write + + + EID + Extended ID + 0 + 17 + read-write + + + + + 2 + 0x4 + FIDCR[%s] + FIFO Received ID Compare Registers + 0x420 + 32 + read-write + 0x00000000 + 0x00000000 + + + IDE + ID Extension + 31 + 31 + read-write + + + 0 + Standard ID + #0 + + + 1 + Extended ID + #1 + + + + + RTR + Remote Transmission Request + 30 + 30 + read-write + + + 0 + Data frame + #0 + + + 1 + Remote frame + #1 + + + + + SID + Standard ID + 18 + 28 + read-write + + + EID + Extended ID + 0 + 17 + read-write + + + + + MKIVLR + Mask Invalid Register + 0x428 + 32 + read-write + 0x00000000 + 0x00000000 + + + MB31 + mailbox 31 Mask Invalid + 31 + 31 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB30 + mailbox 30 Mask Invalid + 30 + 30 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB29 + mailbox 29 Mask Invalid + 29 + 29 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB28 + mailbox 28 Mask Invalid + 28 + 28 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB27 + mailbox 27 Mask Invalid + 27 + 27 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB26 + mailbox 26 Mask Invalid + 26 + 26 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB25 + mailbox 25 Mask Invalid + 25 + 25 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB24 + mailbox 24 Mask Invalid + 24 + 24 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB23 + mailbox 23 Mask Invalid + 23 + 23 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB22 + mailbox 22 Mask Invalid + 22 + 22 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB21 + mailbox 21 Mask Invalid + 21 + 21 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB20 + mailbox 20 Mask Invalid + 20 + 20 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB19 + mailbox 19 Mask Invalid + 19 + 19 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB18 + mailbox 18 Mask Invalid + 18 + 18 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB17 + mailbox 17 Mask Invalid + 17 + 17 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB16 + mailbox 16 Mask Invalid + 16 + 16 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB15 + mailbox 15 Mask Invalid + 15 + 15 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB14 + mailbox 14 Mask Invalid + 14 + 14 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB13 + mailbox 13 Mask Invalid + 13 + 13 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB12 + mailbox 12 Mask Invalid + 12 + 12 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB11 + mailbox 11 Mask Invalid + 11 + 11 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB10 + mailbox 10 Mask Invalid + 10 + 10 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB9 + mailbox 9 Mask Invalid + 9 + 9 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB8 + mailbox 8 Mask Invalid + 8 + 8 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB7 + mailbox 7 Mask Invalid + 7 + 7 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB6 + mailbox 6 Mask Invalid + 6 + 6 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB5 + mailbox 5 Mask Invalid + 5 + 5 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB4 + mailbox 4 Mask Invalid + 4 + 4 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB3 + mailbox 3 Mask Invalid + 3 + 3 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB2 + mailbox 2 Mask Invalid + 2 + 2 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB1 + mailbox 1 Mask Invalid + 1 + 1 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + MB0 + mailbox 0 Mask Invalid + 0 + 0 + read-write + + + 0 + Mask valid + #0 + + + 1 + Mask invalid + #1 + + + + + + + MIER + Mailbox Interrupt Enable Register + 0x42C + 32 + read-write + 0x00000000 + 0x00000000 + + + MB31 + mailbox 31 Interrupt Enable + 31 + 31 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB30 + mailbox 30 Interrupt Enable + 30 + 30 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB29 + mailbox 29 Interrupt Enable + 29 + 29 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB28 + mailbox 28 Interrupt Enable + 28 + 28 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB27 + mailbox 27 Interrupt Enable + 27 + 27 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB26 + mailbox 26 Interrupt Enable + 26 + 26 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB25 + mailbox 25 Interrupt Enable + 25 + 25 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB24 + mailbox 24 Interrupt Enable + 24 + 24 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB23 + mailbox 23 Interrupt Enable + 23 + 23 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB22 + mailbox 22 Interrupt Enable + 22 + 22 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB21 + mailbox 21 Interrupt Enable + 21 + 21 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB20 + mailbox 20 Interrupt Enable + 20 + 20 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB19 + mailbox 19 Interrupt Enable + 19 + 19 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB18 + mailbox 18 Interrupt Enable + 18 + 18 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB17 + mailbox 17 Interrupt Enable + 17 + 17 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB16 + mailbox 16 Interrupt Enable + 16 + 16 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB15 + mailbox 15 Interrupt Enable + 15 + 15 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB14 + mailbox 14 Interrupt Enable + 14 + 14 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB13 + mailbox 13 Interrupt Enable + 13 + 13 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB12 + mailbox 12 Interrupt Enable + 12 + 12 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB11 + mailbox 11 Interrupt Enable + 11 + 11 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB10 + mailbox 10 Interrupt Enable + 10 + 10 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB9 + mailbox 9 Interrupt Enable + 9 + 9 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB8 + mailbox 8 Interrupt Enable + 8 + 8 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB7 + mailbox 7 Interrupt Enable + 7 + 7 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB6 + mailbox 6 Interrupt Enable + 6 + 6 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB5 + mailbox 5 Interrupt Enable + 5 + 5 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB4 + mailbox 4 Interrupt Enable + 4 + 4 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB3 + mailbox 3 Interrupt Enable + 3 + 3 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB2 + mailbox 2 Interrupt Enable + 2 + 2 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB1 + mailbox 1 Interrupt Enable + 1 + 1 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB0 + mailbox 0 Interrupt Enable + 0 + 0 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + + + MIER_FIFO + Mailbox Interrupt Enable Register for FIFO Mailbox Mode + MIER + 0x42C + 32 + read-write + 0x00000000 + 0x00000000 + + + MB29 + Receive FIFO Interrupt Generation Timing Control + 29 + 29 + read-write + + + 0 + Every time reception is completed + #0 + + + 1 + When the receive FIFO becomes buffer warning by completion of reception + #1 + + + + + MB28 + Receive FIFO Interrupt Enable + 28 + 28 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB25 + Transmit FIFO Interrupt Generation Timing Control + 25 + 25 + read-write + + + 0 + Every time transmission is completed + #0 + + + 1 + When the transmit FIFO becomes empty due to completion of transmission + #1 + + + + + MB24 + Transmit FIFO Interrupt Enable + 24 + 24 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB23 + mailbox 23 Interrupt Enable + 23 + 23 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB22 + mailbox 22 Interrupt Enable + 22 + 22 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB21 + mailbox 21 Interrupt Enable + 21 + 21 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB20 + mailbox 20 Interrupt Enable + 20 + 20 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB19 + mailbox 19 Interrupt Enable + 19 + 19 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB18 + mailbox 18 Interrupt Enable + 18 + 18 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB17 + mailbox 17 Interrupt Enable + 17 + 17 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB16 + mailbox 16 Interrupt Enable + 16 + 16 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB15 + mailbox 15 Interrupt Enable + 15 + 15 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB14 + mailbox 14 Interrupt Enable + 14 + 14 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB13 + mailbox 13 Interrupt Enable + 13 + 13 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB12 + mailbox 12 Interrupt Enable + 12 + 12 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB11 + mailbox 11 Interrupt Enable + 11 + 11 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB10 + mailbox 10 Interrupt Enable + 10 + 10 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB9 + mailbox 9 Interrupt Enable + 9 + 9 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB8 + mailbox 8 Interrupt Enable + 8 + 8 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB7 + mailbox 7 Interrupt Enable + 7 + 7 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB6 + mailbox 6 Interrupt Enable + 6 + 6 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB5 + mailbox 5 Interrupt Enable + 5 + 5 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB4 + mailbox 4 Interrupt Enable + 4 + 4 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB3 + mailbox 3 Interrupt Enable + 3 + 3 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB2 + mailbox 2 Interrupt Enable + 2 + 2 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB1 + mailbox 1 Interrupt Enable + 1 + 1 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + MB0 + mailbox 0 Interrupt Enable + 0 + 0 + read-write + + + 0 + Interrupt disabled + #0 + + + 1 + Interrupt enabled + #1 + + + + + + + 32 + 0x1 + MCTL_TX[%s] + Message Control Register for Transmit + 0x820 + 8 + read-write + 0x00 + 0xFF + + + TRMREQ + Transmit Mailbox Request + 7 + 7 + read-write + + + 0 + Not configured for transmission + #0 + + + 1 + Configured for transmission + #1 + + + + + RECREQ + Receive Mailbox Request + 6 + 6 + read-write + + + 0 + Not configured for reception + #0 + + + 1 + Configured for reception + #1 + + + + + ONESHOT + One-Shot Enable + 4 + 4 + read-write + + + 0 + One-shot reception or one-shot transmission disabled + #0 + + + 1 + One-shot reception or one-shot transmission enabled + #1 + + + + + TRMABT + Transmission Abort Complete Flag (Transmit mailbox setting enabled) + 2 + 2 + read-write + + + 0 + Transmission has started, transmission abort failed because transmission is completed, or transmission abort is not requested + #0 + + + 1 + Transmission abort is completed + #1 + + + + + TRMACTIVE + Transmission-in-Progress Status Flag (Transmit mailbox setting enabled) + 1 + 1 + read-only + + + 0 + Transmission is pending or transmission is not requested + #0 + + + 1 + From acceptance of transmission request to completion of transmission, or error/arbitration-lost + #1 + + + + + SENTDATA + Transmission Complete Flag + 0 + 0 + read-write + + + 0 + Transmission is not completed + #0 + + + 1 + Transmission is completed + #1 + + + + + + + 32 + 0x1 + MCTL_RX[%s] + Message Control Register for Receive + MCTL_TX[%s] + 0x820 + 8 + read-write + 0x00 + 0xFF + + + TRMREQ + Transmit Mailbox Request + 7 + 7 + read-write + + + 0 + Not configured for transmission + #0 + + + 1 + Configured for transmission + #1 + + + + + RECREQ + Receive Mailbox Request + 6 + 6 + read-write + + + 0 + Not configured for reception + #0 + + + 1 + Configured for reception + #1 + + + + + ONESHOT + One-Shot Enable + 4 + 4 + read-write + + + 0 + One-shot reception or one-shot transmission disabled + #0 + + + 1 + One-shot reception or one-shot transmission enabled + #1 + + + + + MSGLOST + Message Lost Flag(Receive mailbox setting enabled) + 2 + 2 + read-write + + + 0 + Message is not overwritten or overrun + #0 + + + 1 + Message is overwritten or overrun + #1 + + + + + INVALDATA + Reception-in-Progress Status Flag (Receive mailbox setting enabled) + 1 + 1 + read-only + + + 0 + Message valid + #0 + + + 1 + Message being updated + #1 + + + + + NEWDATA + Reception Complete Flag + 0 + 0 + read-write + + + 0 + No data has been received or 0 is written to the NEWDATA bit + #0 + + + 1 + A new message is being stored or has been stored to the mailbox + #1 + + + + + + + CTLR + Control Register + 0x840 + 16 + read-write + 0x0500 + 0xFFFF + + + RBOC + Forcible Return From Bus-Off + 13 + 13 + read-write + + + 0 + Nothing occurred + #0 + + + 1 + Forcible return from bus-off + #1 + + + + + BOM + Bus-Off Recovery Mode by a program request + 11 + 12 + read-write + + + 00 + Normal mode (ISO11898-1 compliant) + #00 + + + 01 + Entry to CAN halt mode automatically at bus-off entry + #01 + + + 10 + Entry to CAN halt mode automatically at bus-off end + #10 + + + 11 + Entry to CAN halt mode (during bus-off recovery period) + #11 + + + + + SLPM + CAN Sleep Mode + 10 + 10 + read-write + + + 0 + Other than CAN sleep mode + #0 + + + 1 + CAN sleep mode + #1 + + + + + CANM + CAN Operating Mode Select + 8 + 9 + read-write + + + 00 + CAN operation mode + #00 + + + 01 + CAN reset mode + #01 + + + 10 + CAN halt mode + #10 + + + 11 + CAN reset mode (forcible transition) + #11 + + + + + TSPS + Time Stamp Prescaler Select + 6 + 7 + read-write + + + 00 + Every bit time + #00 + + + 01 + Every 2-bit time + #01 + + + 10 + Every 4-bit time + #10 + + + 11 + Every 8-bit time + #11 + + + + + TSRC + Time Stamp Counter Reset Command + 5 + 5 + read-write + + + 0 + Nothing occurred + #0 + + + 1 + Reset + #1 + + + + + TPM + Transmission Priority Mode Select + 4 + 4 + read-write + + + 0 + ID priority transmit mode + #0 + + + 1 + Mailbox number priority transmit mode + #1 + + + + + MLM + Message Lost Mode Select + 3 + 3 + read-write + + + 0 + Overwrite mode + #0 + + + 1 + Overrun mode + #1 + + + + + IDFM + ID Format Mode Select + 1 + 2 + read-write + + + 00 + Standard ID mode.All mailboxes (including FIFO mailboxes) handle only standard Ids. + #00 + + + 01 + Extended ID mode.All mailboxes (including FIFO mailboxes) handle only extended IDs. + #01 + + + 10 + Mixed ID mode.All mailboxes (including FIFO mailboxes) handle both standard IDs and extended IDs. Standard IDs or extended IDs are specified by using the IDE bit in the corresponding mailbox in normal mailbox mode. In FIFO mailbox mode, the IDE bit in the corresponding mailbox is used for mailboxes [0] to [23], the IDE bits in FIDCR0 and FIDCR1 are used for the receive FIFO, and the IDE bit in mailbox [24] is used for the transmit FIFO. + #10 + + + 11 + Do not use this combination + #11 + + + + + MBM + CAN Mailbox Mode Select + 0 + 0 + read-write + + + 0 + Normal mailbox mode + #0 + + + 1 + FIFO mailbox mode + #1 + + + + + + + STR + Status Register + 0x842 + 16 + read-only + 0x0500 + 0xFFFF + + + RECST + Receive Status Flag (receiver) + 14 + 14 + read-only + + + 0 + Bus idle or transmission in progress + #0 + + + 1 + Reception in progress + #1 + + + + + TRMST + Transmit Status Flag (transmitter) + 13 + 13 + read-only + + + 0 + Bus idle or reception in progress + #0 + + + 1 + Transmission in progress or in bus-off state + #1 + + + + + BOST + Bus-Off Status Flag + 12 + 12 + read-only + + + 0 + Not in bus-off state + #0 + + + 1 + In bus-off state + #1 + + + + + EPST + Error-Passive Status Flag + 11 + 11 + read-only + + + 0 + Not in error-passive state + #0 + + + 1 + In error-passive state + #1 + + + + + SLPST + CAN Sleep Status Flag + 10 + 10 + read-only + + + 0 + Not in CAN sleep mode + #0 + + + 1 + In CAN sleep mode + #1 + + + + + HLTST + CAN Halt Status Flag + 9 + 9 + read-only + + + 0 + Not in CAN halt mode + #0 + + + 1 + In CAN halt mode + #1 + + + + + RSTST + CAN Reset Status Flag + 8 + 8 + read-only + + + 0 + Not in CAN reset mode + #0 + + + 1 + In CAN reset mode + #1 + + + + + EST + Error Status Flag + 7 + 7 + read-only + + + 0 + No error occurred + #0 + + + 1 + Error occurred + #1 + + + + + TABST + Transmission Abort Status Flag + 6 + 6 + read-only + + + 0 + No mailbox with TRMABT bit = 1 + #0 + + + 1 + Mailbox(es) with TRMABT bit = 1 + #1 + + + + + FMLST + FIFO Mailbox Message Lost Status Flag + 5 + 5 + read-only + + + 0 + RFMLF bit = 0 + #0 + + + 1 + RFMLF bit = 1 + #1 + + + + + NMLST + Normal Mailbox Message Lost Status Flag + 4 + 4 + read-only + + + 0 + No mailbox with MSGLOST bit = 1 + #0 + + + 1 + Mailbox(es) with MSGLOST bit = 1 + #1 + + + + + TFST + Transmit FIFO Status Flag + 3 + 3 + read-only + + + 0 + Transmit FIFO is full + #0 + + + 1 + Transmit FIFO is not full + #1 + + + + + RFST + Receive FIFO Status Flag + 2 + 2 + read-only + + + 0 + No message in receive FIFO (empty) + #0 + + + 1 + Message in receive FIFO + #1 + + + + + SDST + SENTDATA Status Flag + 1 + 1 + read-only + + + 0 + No mailbox with SENTDATA bit = 1 + #0 + + + 1 + Mailbox(es) with SENTDATA bit = 1 + #1 + + + + + NDST + NEWDATA Status Flag + 0 + 0 + read-only + + + 0 + No mailbox with NEWDATA bit = 1 + #0 + + + 1 + Mailbox(es) with NEWDATA bit = 1 + #1 + + + + + + + BCR + Bit Configuration Register + 0x844 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TSEG1 + Time Segment 1 Control + 28 + 31 + read-write + + + 0000 + Setting prohibited + #0000 + + + 0001 + Setting prohibited + #0001 + + + 0010 + Setting prohibited + #0010 + + + 0011 + 4 Tq + #0011 + + + 0100 + 5 Tq + #0100 + + + 0101 + 6 Tq + #0101 + + + 0110 + 7 Tq + #0110 + + + 0111 + 8 Tq + #0111 + + + 1000 + 9 Tq + #1000 + + + 1001 + 10 Tq + #1001 + + + 1010 + 11 Tq + #1010 + + + 1011 + 12 Tq + #1011 + + + 1100 + 13 Tq + #1100 + + + 1101 + 14 Tq + #1101 + + + 1110 + 15 Tq + #1110 + + + 1111 + 16 Tq + #1111 + + + + + BRP + Prescaler Division Ratio Select . These bits set the frequency of the CAN communication clock (fCANCLK). + 16 + 25 + read-write + + + SJW + Resynchronization Jump Width Control + 12 + 13 + read-write + + + 00 + 1 Tq + #00 + + + 01 + 2 Tq + #01 + + + 10 + 3 Tq + #10 + + + 11 + 4 Tq + #11 + + + + + TSEG2 + Time Segment 2 Control + 8 + 10 + read-write + + + 000 + Setting prohibited + #000 + + + 001 + 2 Tq + #001 + + + 010 + 3 Tq + #010 + + + 011 + 4 Tq + #011 + + + 100 + 5 Tq + #100 + + + 101 + 6 Tq + #101 + + + 110 + 7 Tq + #110 + + + 111 + 8 Tq + #111 + + + + + CCLKS + CAN Clock Source Selection + 0 + 0 + read-write + + + 0 + PCLK (generated by the PLL clock) + #0 + + + 1 + CANMCLK (generated by the main clock) + #1 + + + + + + + RFCR + Receive FIFO Control Register + 0x848 + 8 read-write - 0x00000000 - 0x00000000 + 0x80 + 0xFF - A - Alpha Blending Value of Color Palette n Plane for Graphics m Plane - 24 - 31 - read-write + RFEST + Receive FIFO Empty Status Flag + 7 + 7 + read-only + + + 0 + Unread message in receive FIFO + #0 + + + 1 + No unread message in receive FIFO + #1 + + - R - R Value of Color Palette n Plane for Graphics m Plane - 16 - 23 - read-write + RFWST + Receive FIFO Buffer Warning Status Flag + 6 + 6 + read-only + + + 0 + Receive FIFO is not buffer warning + #0 + + + 1 + Receive FIFO is buffer warning (3 unread messages) + #1 + + - G - G Value of Color Palette n Plane for Graphics m Plane - 8 - 15 + RFFST + Receive FIFO Full Status Flag + 5 + 5 + read-only + + + 0 + Receive FIFO is not full + #0 + + + 1 + Receive FIFO is full (4 unread messages) + #1 + + + + + RFMLF + Receive FIFO Message Lost Flag + 4 + 4 read-write + + + 0 + No receive FIFO message lost has occurred + #0 + + + 1 + Receive FIFO message lost has occurred + #1 + + - B - B Value of Color Palette n Plane for Graphics m Plane + RFUST + Receive FIFO Unread Message Number Status + 1 + 3 + read-only + + + 000 + No unread message + #000 + + + 001 + 1 unread message + #001 + + + 010 + 2 unread messages + #010 + + + 011 + 3 unread messages + #011 + + + 100 + 4 unread messages + #100 + + + others + Setting prohibited + true + + + + + RFE + Receive FIFO Enable 0 - 7 + 0 read-write + + + 0 + Receive FIFO disabled + #0 + + + 1 + Receive FIFO enabled + #1 + + - - GR1_CLUT1[%s] - Color Palette 1 Plane for Graphics 1 Plane - 0x0400 - - - - GR2_CLUT0[%s] - Color Palette 0 Plane for Graphics 2 Plane - 0x0800 - - - - GR2_CLUT1[%s] - Color Palette 1 Plane for Graphics 2 Plane - 0x0C00 - + + RFPCR + Receive FIFO Pointer Control Register + 0x849 + 8 + write-only + 0x00 + 0x00 + + + RFPCR + The CPU-side pointer for the receive FIFO is incremented by writing FFh to RFPCR. + 0 + 7 + write-only + + - - - - R_GPT0 - General PWM Timer - 0x40078000 - - 0x00000000 - 0x0A4 - registers - - - GTWP - General PWM Timer Write-Protection Register - 0x00 - 32 + TFCR + Transmit FIFO Control Register + 0x84A + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x80 + 0xFF - PRKEY - GTWP Key Code - 8 - 15 - write-only + TFEST + Transmit FIFO Empty Status + 7 + 7 + read-only - 0xA5 - Written to these bits, the WP bits write is permitted. - 0xA5 + 0 + Unsent message in transmit FIFO + #0 + + + 1 + No unsent message in transmit FIFO + #1 + + + + + TFFST + Transmit FIFO Full Status + 6 + 6 + read-only + + + 0 + Transmit FIFO is not full + #0 + + + 1 + Transmit FIFO is full (4 unsent messages) + #1 + + + + + TFUST + Transmit FIFO Unsent Message Number Status + 1 + 3 + read-only + + + 000 + No unsent message + #000 + + + 001 + 1 unsent message + #001 + + + 010 + 2 unsent messages + #010 + + + 011 + 3 unsent messages + #011 + + + 100 + 4 unsent messages + #100 others - The WP bits write is not permitted. + Setting prohibited true - WP - Register Write Disable - 0 - 0 + TFE + Transmit FIFO Enable + 0 + 0 + read-write + + + 0 + Transmit FIFO disabled + #0 + + + 1 + Transmit FIFO enabled + #1 + + + + + + + TFPCR + Transmit FIFO Pointer Control Register + 0x84B + 8 + write-only + 0x00 + 0x00 + + + TFPCR + The CPU-side pointer for the transmit FIFO is incremented by writing FFh to TFPCR. + 0 + 7 + write-only + + + + + EIER + Error Interrupt Enable Register + 0x84C + 8 + read-write + 0x00 + 0xFF + + + BLIE + Bus Lock Interrupt Enable + 7 + 7 + read-write + + + 0 + Bus lock interrupt disabled + #0 + + + 1 + Bus lock interrupt enabled + #1 + + + + + OLIE + Overload Frame Transmit Interrupt Enable + 6 + 6 + read-write + + + 0 + Overload frame transmit interrupt disabled + #0 + + + 1 + Overload frame transmit interrupt enabled + #1 + + + + + ORIE + Overrun Interrupt Enable + 5 + 5 + read-write + + + 0 + Receive overrun interrupt disabled + #0 + + + 1 + Receive overrun interrupt enabled + #1 + + + + + BORIE + Bus-Off Recovery Interrupt Enable + 4 + 4 + read-write + + + 0 + Bus-off recovery interrupt disabled + #0 + + + 1 + Bus-off recovery interrupt enabled + #1 + + + + + BOEIE + Bus-Off Entry Interrupt Enable + 3 + 3 + read-write + + + 0 + Bus-off entry interrupt disabled + #0 + + + 1 + Bus-off entry interrupt enabled + #1 + + + + + EPIE + Error-Passive Interrupt Enable + 2 + 2 read-write 0 - Write to the register is enabled + Error-passive interrupt disabled #0 1 - Write to the register is disabled + Error-passive interrupt enabled #1 - - - - GTSTR - General PWM Timer Software Start Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - 14 - 1 - CSTRT%s - Channel GTCNT Count StartRead data shows each channel's counter status (GTCR.CST bit). 0 means counter stop. 1 means counter running. - 0 - 0 + EWIE + Error-Warning Interrupt Enable + 1 + 1 read-write 0 - No effect (write) / counter stop (read) + Error-warning interrupt disabled #0 1 - GTCNT counter starts (write) / Counter running (read) + Error-warning interrupt enabled #1 - - - - GTSTP - General PWM Timer Software Stop Register - 0x08 - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - 14 - 1 - CSTOP%s - Channel GTCNT Count StopRead data shows each channel's counter status (GTCR.CST bit). 0 means counter runnning. 1 means counter stop. + BEIE + Bus Error Interrupt Enable 0 0 read-write 0 - No effect (write) / counter running (read) + Bus error interrupt disabled #0 1 - GPT GTCNT counter stops (write) / Counter stop (read) + Bus error interrupt enabled #1 @@ -35704,527 +13523,714 @@ FMS2,1,0: - GTCLR - General PWM Timer Software Clear Register - 0x0C - 32 - write-only - 0x00000000 - 0xFFFFFFFF + EIFR + Error Interrupt Factor Judge Register + 0x84D + 8 + read-write + 0x00 + 0xFF - 14 - 1 - CCLR%s - Channel GTCNT Count Clear - 0 - 0 - write-only + BLIF + Bus Lock Detect Flag + 7 + 7 + read-write 0 - No effect + No bus lock detected #0 1 - GPT GTCNT counter clears + Bus lock detected #1 - - - - GTSSR - General PWM Timer Start Source Select Register - 0x10 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - CSTRT - Software Source Counter Start Enable - 31 - 31 + OLIF + Overload Frame Transmission Detect Flag + 6 + 6 read-write 0 - Counter start is disable by the GTSTR register + No overload frame transmission detected #0 1 - Counter start is enable by the GTSTR register + Overload frame transmission detected #1 - 8 - 1 - A,B,C,D,E,F,G,H - SSELC%s - ELC_GPT Event Source Counter Start Enable - 16 - 16 + ORIF + Receive Overrun Detect Flag + 5 + 5 read-write 0 - Counter start is disable at the ELC_GPT input + No receive overrun detected #0 1 - Counter start is enable at the ELC_GPT input + Receive overrun detected #1 - SSCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Start Enable - 15 - 15 + BORIF + Bus-Off Recovery Detect Flag + 4 + 4 read-write 0 - Counter start is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + No bus-off recovery detected #0 1 - Counter start is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + Bus-off recovery detected #1 - SSCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Start Enable - 14 - 14 + BOEIF + Bus-Off Entry Detect Flag + 3 + 3 read-write 0 - Counter start is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + No bus-off entry detected #0 1 - Counter start is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + Bus-off entry detected #1 - SSCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Start Enable - 13 - 13 + EPIF + Error-Passive Detect Flag + 2 + 2 read-write 0 - Counter start is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + No error-passive detected #0 1 - Counter start is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + Error-passive detected #1 - SSCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Start Enable - 12 - 12 + EWIF + Error-Warning Detect Flag + 1 + 1 read-write 0 - Counter start is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + No error-warning detected #0 1 - Counter start is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + Error-warning detected #1 - SSCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Start Enable - 11 - 11 + BEIF + Bus Error Detect Flag + 0 + 0 read-write 0 - Counter start is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + No bus error detected #0 1 - Counter start is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + Bus error detected #1 + + + + RECR + Receive Error Count Register + 0x84E + 8 + read-only + 0x00 + 0xFF + + + RECR + Receive error count functionRECR increments or decrements the counter value according to the error status of the CAN module during reception. + 0 + 7 + read-only + + + + + TECR + Transmit Error Count Register + 0x84F + 8 + read-only + 0x00 + 0xFF + - SSCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Start Enable - 10 - 10 + TECR + Transmit error count functionTECR increments or decrements the counter value according to the error status of the CAN module during transmission. + 0 + 7 + read-only + + + + + ECSR + Error Code Store Register + 0x850 + 8 + read-write + 0x00 + 0xFF + + + EDPM + Error Display Mode Select + 7 + 7 read-write 0 - Counter start is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + Output of first detected error code #0 1 - Counter start is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + Output of accumulated error code #1 - SSCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Start Enable - 9 - 9 + ADEF + ACK Delimiter Error Flag + 6 + 6 read-write 0 - Counter start is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + No ACK delimiter error detected #0 1 - Counter start is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + ACK delimiter error detected #1 - SSCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Start Enable - 8 - 8 + BE0F + Bit Error (dominant) Flag + 5 + 5 read-write 0 - Counter start is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + No bit error (dominant) detected #0 1 - Counter start is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + Bit error (dominant) detected #1 - 4 - 2 - A,B,C,D - SSGTRG%sF - GTETRG Pin Falling Input Source Counter Start Enable - 1 - 1 + BE1F + Bit Error (recessive) Flag + 4 + 4 read-write 0 - Counter start is disable at the falling edge of GTETRG input + No bit error (recessive) detected #0 1 - Counter start is enable at the falling edge of GTETRG input + Bit error (recessive) detected #1 - 4 - 2 - A,B,C,D - SSGTRG%sR - GTETRG Pin Rising Input Source Counter Start Enable - 0 - 0 + CEF + CRC Error Flag + 3 + 3 read-write 0 - Counter start is disable at the rising edge of GTETRG input + No CRC error detected #0 1 - Counter start is enable at the rising edge of GTETRG input + CRC error detected #1 - - - - GTPSR - General PWM Timer Stop Source Select Register - 0x14 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - CSTOP - Software Source Counter Stop Enable - 31 - 31 + AEF + ACK Error Flag + 2 + 2 read-write 0 - Counter stop is disable by the GTSTP register + No ACK error detected #0 1 - Counter stop is enable by the GTSTP register + ACK error detected #1 - 8 - 1 - A,B,C,D,E,F,G,H - PSELC%s - ELC_GPTA Event Source Counter Stop Enable - 16 - 16 + FEF + Form Error Flag + 1 + 1 read-write 0 - Counter stop is disable at the ELC_GPTA input + No form error detected #0 1 - Counter stop is enable at the ELC_GPTA input + Form error detected #1 - PSCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Stop Enable - 15 - 15 + SEF + Stuff Error Flag + 0 + 0 read-write 0 - Counter stop is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + No stuff error detected #0 1 - Counter stop is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + Stuff error detected #1 + + + + CSSR + Channel Search Support Register + 0x851 + 8 + read-write + 0x00 + 0x00 + - PSCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Stop Enable - 14 - 14 + CSSR + When the value for the channel search is input, the channel number is output to MSSR. + 0 + 7 read-write + + + + + MSSR + Mailbox Search Status Register + 0x852 + 8 + read-only + 0x80 + 0xFF + + + SEST + Search Result Status + 7 + 7 + read-only 0 - Counter stop is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + Search result found #0 1 - Counter stop is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + No search result #1 - PSCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Stop Enable - 13 - 13 + MBNST + Search Result Mailbox Number Status These bits output the smallest mailbox number that is searched in each mode of MSMR. + 0 + 4 + read-only + + + + + MSMR + Mailbox Search Mode Register + 0x853 + 8 + read-write + 0x00 + 0xFF + + + MBSM + Mailbox Search Mode Select + 0 + 1 read-write - 0 - Counter stop is disable at the rising edge of GTIOCB input when GTIOCA input is 1 - #0 + 00 + Receive mailbox search mode + #00 - 1 - Counter stop is enable at the rising edge of GTIOCB input when GTIOCA input is 1 - #1 + 01 + Transmit mailbox search mode + #01 + + + 10 + Message lost search mode + #10 + + + 11 + Channel search mode + #11 + + + + TSR + Time Stamp Register + 0x854 + 16 + read-only + 0x0000 + 0xFFFF + + + TSR + Free-running counter value for the time stamp function + 0 + 15 + read-only + + + + + AFSR + Acceptance Filter Support Register + 0x856 + 16 + read-write + 0x0000 + 0x0000 + - PSCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Stop Enable - 12 - 12 + AFSR + After the standard ID of a received message is written, the value converted for data table search can be read. + 0 + 15 + read-write + + + + + TCR + Test Control Register + 0x858 + 8 + read-write + 0x00 + 0xFF + + + TSTM + CAN Test Mode Select + 1 + 2 read-write - 0 - Counter stop is disable at the rising edge of GTIOCB input when GTIOCA input is 0 - #0 + 00 + Other than CAN test mode + #00 - 1 - Counter stop is enable at the rising edge of GTIOCB input when GTIOCA input is 0 - #1 + 01 + Listen-only mode + #01 + + + 10 + Self-test mode 0 (external loopback) + #10 + + + 11 + Self-test mode 1 (internal loopback) + #11 - PSCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Stop Enable - 11 - 11 + TSTE + CAN Test Mode Enable + 0 + 0 read-write 0 - Counter stop is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + CAN test mode disabled #0 1 - Counter stop is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + CAN test mode enabled #1 + + + + + + R_CAN1 + 0x40051000 + + + R_CRC + Cyclic Redundancy Check (CRC) Calculator + 0x40074000 + + 0x00000000 + 0x002 + registers + + + 0x00000004 + 0x00A + registers + + + + CRCCR0 + CRC Control Register0 + 0x00 + 8 + read-write + 0x00 + 0xFF + - PSCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Stop Enable - 10 - 10 - read-write + DORCLR + CRCDOR Register Clear + 7 + 7 + write-only 0 - Counter stop is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + No effect. #0 1 - Counter stop is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + Clears the CRCDOR register. #1 - PSCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Stop Enable - 9 - 9 + LMS + CRC Calculation Switching + 6 + 6 read-write 0 - Counter stop is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + Generates CRC for LSB first communication. #0 1 - Counter stop is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + Generates CRC for MSB first communication. #1 - PSCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Stop Enable - 8 - 8 + GPS + CRC Generating Polynomial Switching + 0 + 2 read-write - 0 - Counter stop is disable at the rising edge of GTIOCA input when GTIOCB input is 0 - #0 + 000 + No calculation is executed. + #000 - 1 - Counter stop is enable at the rising edge of GTIOCA input when GTIOCB input is 0 - #1 + 001 + 8-bit CRC-8 (X8 + X2 + X + 1) + #001 + + + 010 + 16-bit CRC-16 (X16 + X15 + X2 + 1) + #010 + + + 011 + 16-bit CRC-CCITT (X16 + X12 + X5 + 1) + #011 + + + 100 + 32-bit CRC-32 (X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1) + #100 + + + 101 + 32-bit CRC-32C (X32+X28+X27+X26+ X25+X23+X22+X20+X19+X18+X14+X13+X11+X10+X9+X8+X6+1) + #101 + + + others + No calculation is executed. + true + + + + CRCCR1 + CRC Control Register1 + 0x01 + 8 + read-write + 0x00 + 0xFF + - 4 - 2 - A,B,C,D - PSGTRG%sF - GTETRG Pin Falling Input Source Counter Stop Enable - 1 - 1 + CRCSEN + Snoop enable bit + 7 + 7 read-write 0 - Counter stop is disable at the falling edge of GTETRG input + Disabled #0 1 - Counter stop is enable at the falling edge of GTETRG input + Enabled #1 - 4 - 2 - A,B,C,D - PSGTRG%sR - GTETRG Pin Rising Input Source Counter Stop Enable - 0 - 0 + CRCSWR + Snoop-on-write/read switch bit + 6 + 6 read-write 0 - Counter stop is disable at the rising edge of GTETRG input + Snoop-on-read #0 1 - Counter stop is enable at the rising edge of GTETRG input + Snoop-on-write #1 @@ -36232,476 +14238,499 @@ FMS2,1,0: - GTCSR - General PWM Timer Clear Source Select Register - 0x18 + CRCDIR + CRC Data Input Register + 0x04 32 read-write 0x00000000 0xFFFFFFFF - CCLR - Software Source Counter Clear Enable - 31 + CRCDIR + Calculation input Data (Case of CRC-32, CRC-32C ) + 0 31 read-write - - - 0 - Counter clear is disable by the GTCLR register - #0 - - - 1 - Counter clear is enable by the GTCLR register - #1 - - + + + + CRCDIR_BY + CRC Data Input Register (byte access) + CRCDIR + 0x04 + 8 + read-write + 0x00 + 0xFF + + + CRCDIR_BY + Calculation input Data ( Case of CRC-8, CRC-16 or CRC-CCITT ) + 0 + 7 + read-write + + + + + CRCDOR + CRC Data Output Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - 8 - 1 - A,B,C,D,E,F,G,H - CSELC%s - ELC_GPTA Event Source Counter Clear Enable - 16 - 16 + CRCDOR + Calculation output Data (Case of CRC-32, CRC-32C ) + 0 + 31 read-write - - - 0 - Counter clear is disable at the ELC_GPTA input - #0 - - - 1 - Counter clear is enable at the ELC_GPTA input - #1 - - + + + + CRCDOR_HA + CRC Data Output Register (halfword access) + CRCDOR + 0x08 + 16 + read-write + 0x0000 + 0xFFFF + - CSCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Clear Enable - 15 + CRCDOR_HA + Calculation output Data (Case of CRC-16 or CRC-CCITT ) + 0 15 read-write + + + + + CRCDOR_BY + CRC Data Output Register(byte access) + CRCDOR + 0x08 + 8 + read-write + 0x00 + 0xFF + + + CRCDOR_BY + Calculation output Data (Case of CRC-8 ) + 0 + 7 + read-write + + + + + CRCSAR + Snoop Address Register + 0x0C + 16 + read-write + 0x0000 + 0xFFFF + + + CRCSA + snoop address bitSet the I/O register address to snoop + 0 + 13 + read-write - 0 - Counter clear is disable at the falling edge of GTIOCB input when GTIOCA input is 1 - #0 + 0x0003 + SCI0.TDR + 0x0003 - 1 - Counter clear is enable at the falling edge of GTIOCB input when GTIOCA input is 1 - #1 + 0x0005 + SCI0.RDR + 0x0005 - - - - CSCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Clear Enable - 14 - 14 - read-write - - 0 - Counter clear is disable at the falling edge of GTIOCB input when GTIOCA input is 0 - #0 + 0x0023 + SCI1.TDR + 0x0023 - 1 - Counter clear is enable at the falling edge of GTIOCB input when GTIOCA input is 0 - #1 + 0x0025 + SCI1.RDR + 0x0025 - - - - CSCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Clear Enable - 13 - 13 - read-write - - 0 - Counter clear is disable at the rising edge of GTIOCB input when GTIOCA input is 1 - #0 + 0x0043 + SCI2.TDR + 0x0043 - 1 - Counter clear is enable at the rising edge of GTIOCB input when GTIOCA input is 1 - #1 + 0x0045 + SCI2.RDR + 0x0045 - - - - CSCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Clear Enable - 12 - 12 - read-write - - 0 - Counter clear is disable at the rising edge of GTIOCB input when GTIOCA input is 0 - #0 + 0x0063 + SCI3.TDR + 0x0063 - 1 - Counter clear is enable at the rising edge of GTIOCB input when GTIOCA input is 0 - #1 + 0x0065 + SCI3.RDR + 0x0065 - - - - CSCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Clear Enable - 11 - 11 - read-write - - 0 - Counter clear is disable at the falling edge of GTIOCA input when GTIOCB input is 1 - #0 + 0x0083 + SCI4.TDR + 0x0083 - 1 - Counter clear is enable at the falling edge of GTIOCA input when GTIOCB input is 1 - #1 + 0x0085 + SCI4.RDR + 0x0085 - - - - CSCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Clear Enable - 10 - 10 - read-write - - 0 - Counter clear is disable at the falling edge of GTIOCA input when GTIOCB input is 0 - #0 + 0x00A3 + SCI5.TDR + 0x00A3 - 1 - Counter clear is enable at the falling edge of GTIOCA input when GTIOCB input is 0 - #1 + 0x00A5 + SCI5.RDR + 0x00A5 - - - - CSCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Clear Enable - 9 - 9 - read-write - - 0 - Counter clear is disable at the rising edge of GTIOCA input when GTIOCB input is 1 - #0 + 0x00C3 + SCI6.TDR + 0x00C3 - 1 - Counter clear is enable at the rising edge of GTIOCA input when GTIOCB input is 1 - #1 + 0x00C5 + SCI6.RDR + 0x00C5 - - - - CSCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Clear Enable - 8 - 8 - read-write - - 0 - Counter clear is disable at the rising edge of GTIOCA input when GTIOCB input is 0 - #0 + 0x00E3 + SCI7.TDR + 0x00E3 - 1 - Counter clear is enable at the rising edge of GTIOCA input when GTIOCB input is 0 - #1 + 0x00E5 + SCI7.RDR + 0x00E5 - - - - 4 - 2 - A,B,C,D - CSGTRG%sF - GTETRG Pin Falling Input Source Counter Clear Enable - 1 - 1 - read-write - - 0 - Counter clear is disable at the falling edge of GTETRG input - #0 + 0x0103 + SCI8.TDR + 0x0103 - 1 - Counter clear is enable at the falling edge of GTETRG input - #1 + 0x0105 + SCI8.RDR + 0x0105 + + + 0x0123 + SCI9.TDR + 0x0123 + + + 0x0125 + SCI9.RDR + 0x0125 + + + others + Settings other than above are prohibited. + true + + + + + + R_CTSU + Capacitive Touch Sensing Unit + 0x40081000 + + 0x00000000 + 0x01E + registers + + + + CTSUCR0 + CTSU Control Register 0 + 0x00 + 8 + read-write + 0x00 + 0xFF + - 4 - 2 - A,B,C,D - CSGTRG%sR - GTETRG Pin Rising Input Source Counter Clear Enable - 0 - 0 + CTSUTXVSEL + CTSU Transmission power supply selection + 7 + 7 read-write 0 - Counter clear is disable at the rising edge of GTETRG input + Select Vcc #0 1 - Counter clear is enable at the rising edge of GTETRG input + Select internal logic power supply #1 - - - - GTUPSR - General PWM Timer Up Count Source Select Register - 0x1C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - 8 - 1 - A,B,C,D,E,F,G,H - USELC%s - ELC_GPT Event Source Counter Count Up Enable - 16 - 16 + CTSUINIT + CTSU Control Block Initialization + 4 + 4 read-write 0 - Counter count up is disable at the ELC_GPT input + Writing a 0 has no effect, this bit is read as 0. #0 1 - Counter count up is enable at the ELC_GPT input + initializes the CTSU control block and registers. #1 - USCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Count Up Enable - 15 - 15 + CTSUIOC + CTSU Transmit Pin Control + 3 + 3 read-write 0 - Counter count up is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + Low-level output from transmit channel non-measurement pin. #0 1 - Counter count up is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + High-level output from transmit channel non-measurement pin. #1 - USCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Count Up Enable - 14 - 14 + CTSUSNZ + CTSU Wait State Power-Saving Enable + 2 + 2 read-write 0 - Counter count up is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + Power-saving function during wait state is disabled. #0 1 - Counter count up is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + Power-saving function during wait state is enabled. #1 - USCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Count Up Enable - 13 - 13 + CTSUCAP + CTSU Measurement Operation Start Trigger Select + 1 + 1 read-write 0 - Counter count up is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + Software trigger. #0 1 - Counter count up is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + External trigger. #1 - USCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Count Up Enable - 12 - 12 + CTSUSTRT + CTSU Measurement Operation Start + 0 + 0 read-write 0 - Counter count up is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + Measurement operation stops. #0 1 - Counter count up is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + Measurement operation starts. #1 + + + + CTSUCR1 + CTSU Control Register 1 + 0x01 + 8 + read-write + 0x00 + 0xFF + - USCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Count Up Enable - 11 - 11 + CTSUMD + CTSU Measurement Mode Select + 6 + 7 read-write - 0 - Counter count up is disable at the falling edge of GTIOCA input when GTIOCB input is 1 - #0 + 00 + Self-capacitance single scan mode + #00 - 1 - Counter count up is enable at the falling edge of GTIOCA input when GTIOCB input is 1 - #1 + 01 + Self-capacitance multi-scan mode + #01 + + + 10 + Mutual capacitance simple scan mode + #10 + + + 11 + Mutual capacitance full scan mode + #11 - USCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Count Up Enable - 10 - 10 + CTSUCLK + CTSU Operating Clock Select + 4 + 5 read-write - 0 - Counter count up is disable at the falling edge of GTIOCA input when GTIOCB input is 0 - #0 + 00 + PCLK + #00 - 1 - Counter count up is enable at the falling edge of GTIOCA input when GTIOCB input is 0 - #1 + 01 + PCLK/2 (PCLK divided by 2) + #01 + + + 10 + PCLK/2 (PCLK divided by 4) + #10 + + + 11 + Setting prohibited + #11 - USCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Count Up Enable - 9 - 9 + CTSUATUNE1 + CTSU Power Supply Capacity Adjustment + 3 + 3 read-write 0 - Counter count up is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + Normal output #0 1 - Counter count up is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + High-current output #1 - USCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Count Up Enable - 8 - 8 + CTSUATUNE0 + CTSU Power Supply Operating Mode Setting + 2 + 2 read-write 0 - Counter count up is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + Normal operating mode #0 1 - Counter count up is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + Low-voltage operating mode #1 - 4 - 2 - A,B,C,D - USGTRG%sF - GTETRG Pin Falling Input Source Counter Count Up Enable + CTSUCSW + CTSU LPF Capacitance Charging Control 1 1 read-write 0 - Counter count up is disable at the falling edge of GTETRG input + Turned off capacitance switch #0 1 - Counter count up is enable at the falling edge of GTETRG input + Turned on capacitance switch #1 - 4 - 2 - A,B,C,D - USGTRG%sR - GTETRG Pin Rising Input Source Counter Count Up Enable + CTSUPON + CTSU Power Supply Enable 0 0 read-write 0 - Counter count up is disable at the rising edge of GTETRG input + Powered off the CTSU #0 1 - Counter count up is enable at the rising edge of GTETRG input + Powered on the CTSU #1 @@ -36709,844 +14738,1038 @@ FMS2,1,0: - GTDNSR - General PWM Timer Down Count Source Select Register - 0x20 - 32 + CTSUSDPRS + CTSU Synchronous Noise Reduction Setting Register + 0x02 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x00 + 0xFF - 8 - 1 - A,B,C,D,E,F,G,H - DSELC%s - ELC_GPT Event Source Counter Count Down Enable - 16 - 16 + CTSUSOFF + CTSU High-Pass Noise Reduction Function Off Setting + 6 + 6 read-write 0 - Counter count down is disable at the ELC_GPT input + High-pass noise reduction function turned on #0 1 - Counter count down is enable at the ELC_GPT input + High-pass noise reduction function turned off #1 - DSCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Count Down Enable - 15 - 15 + CTSUPRMODE + CTSU Base Period and Pulse Count Setting + 4 + 5 read-write - 0 - Counter count down is disable at the falling edge of GTIOCB input when GTIOCA input is 1 - #0 + 00 + 510 pulses + #00 - 1 - Counter count down is enable at the falling edge of GTIOCB input when GTIOCA input is 1 - #1 + 01 + 126 pulses + #01 - - - - DSCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Count Down Enable - 14 - 14 - read-write - - 0 - Counter count down is disable at the falling edge of GTIOCB input when GTIOCA input is 0 - #0 + 10 + 62 pulses (recommended setting value) + #10 - 1 - Counter count down is enable at the falling edge of GTIOCB input when GTIOCA input is 0 - #1 + 11 + Setting prohibited + #11 - DSCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Count Down Enable - 13 - 13 + CTSUPRRATIO + CTSU Measurement Time and Pulse Count AdjustmentRecommended setting: 3 (0011b) + 0 + 3 + read-write + + + + + CTSUSST + CTSU Sensor Stabilization Wait Control Register + 0x03 + 8 + read-write + 0x00 + 0xFF + + + CTSUSST + CTSU Sensor Stabilization Wait ControlNOTE: The value of these bits should be fixed to 00010000b. + 0 + 7 + read-write + + + + + CTSUMCH0 + CTSU Measurement Channel Register 0 + 0x04 + 8 + read-write + 0x3F + 0xFF + + + CTSUMCH0 + CTSU Measurement Channel 0.Note1: Writing to these bits is only enabled in self-capacitance single-scan mode (CTSUCR1.CTSUMD[1:0] bits = 00b).Note2: If the value of CTSUMCH0 was set to b'111111 in mode other than self-capacitor single scan mode, the measurement is stopped. + 0 + 5 read-write - 0 - Counter count down is disable at the rising edge of GTIOCB input when GTIOCA input is 1 - #0 + TS0 + measured TS0 + 0 - 1 - Counter count down is enable at the rising edge of GTIOCB input when GTIOCA input is 1 - #1 + TS1 + measured TS1 + 1 - - - - DSCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Count Down Enable - 12 - 12 - read-write - - 0 - Counter count down is disable at the rising edge of GTIOCB input when GTIOCA input is 0 - #0 + TS2 + measured TS2 + 2 - 1 - Counter count down is enable at the rising edge of GTIOCB input when GTIOCA input is 0 - #1 + TS3 + measured TS3 + 3 - - - - DSCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Count Down Enable - 11 - 11 - read-write - - 0 - Counter count down is disable at the falling edge of GTIOCA input when GTIOCB input is 1 - #0 + TS4 + measured TS4 + 4 - 1 - Counter count down is enable at the falling edge of GTIOCA input when GTIOCB input is 1 - #1 + TS5 + measured TS5 + 5 - - - - DSCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Count Down Enable - 10 - 10 - read-write - - 0 - Counter count down is disable at the falling edge of GTIOCA input when GTIOCB input is 0 - #0 + TS6 + measured TS6 + 6 - 1 - Counter count down is enable at the falling edge of GTIOCA input when GTIOCB input is 0 - #1 + TS7 + measured TS7 + 7 - - - - DSCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Count Down Enable - 9 - 9 - read-write - - 0 - Counter count down is disable at the rising edge of GTIOCA input when GTIOCB input is 1 - #0 + TS8 + measured TS8 + 8 + + + TS9 + measured TS9 + 9 + + + TS10 + measured TS10 + 10 + + + TS11 + measured TS11 + 11 + + + TS12 + measured TS12 + 12 + + + TS13 + measured TS13 + 13 + + + TS14 + measured TS14 + 14 + + + TS15 + measured TS15 + 15 + + + TS16 + measured TS16 + 16 + + + TS17 + measured TS17 + 17 + + + TS18 + measured TS18 + 18 + + + TS19 + measured TS19 + 19 + + + TS20 + measured TS20 + 20 + + + TS21 + measured TS21 + 21 + + + TS22 + measured TS22 + 22 + + + TS23 + measured TS23 + 23 + + + TS24 + measured TS24 + 24 + + + TS25 + measured TS25 + 25 + + + TS26 + measured TS26 + 26 + + + TS27 + measured TS27 + 27 + + + TS28 + measured TS28 + 28 + + + TS29 + measured TS29 + 29 - 1 - Counter count down is enable at the rising edge of GTIOCA input when GTIOCB input is 1 - #1 + TS30 + measured TS30 + 30 - - - - DSCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Count Down Enable - 8 - 8 - read-write - - 0 - Counter count down is disable at the rising edge of GTIOCA input when GTIOCB input is 0 - #0 + TS31 + measured TS31 + 31 - 1 - Counter count down is enable at the rising edge of GTIOCA input when GTIOCB input is 0 - #1 + TS32 + measured TS32 + 32 - - - - 4 - 2 - A,B,C,D - DSGTRG%sF - GTETRG Pin Falling Input Source Counter Count Down Enable - 1 - 1 - read-write - - 0 - Counter count down is disable at the falling edge of GTETRG input - #0 + TS33 + measured TS33 + 33 - 1 - Counter count down is enable at the falling edge of GTETRG input - #1 + TS34 + measured TS34 + 34 - - - - 4 - 2 - A,B,C,D - DSGTRG%sR - GTETRG Pin Rising Input Source Counter Count Down Enable - 0 - 0 - read-write - - 0 - Counter count down is disable at the rising edge of GTETRG input - #0 + TS35 + measured TS35 + 35 - 1 - Counter count down is enable at the rising edge of GTETRG input - #1 + STOP + Conversion Stopped + #111111 - GTICASR - General PWM Timer Input Capture Source Select Register A - 0x24 - 32 + CTSUMCH1 + CTSU Measurement Channel Register 1 + 0x05 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x3F + 0xFF - 8 - 1 - A,B,C,D,E,F,G,H - ASELC%s - ELC_GPT Event Source GTCCRA Input Capture Enable - 16 - 16 - read-write + CTSUMCH1 + CTSU Measurement Channel 1Note1: If the value of CTSUMCH1 was set to b'111111, the measurement is stopped. + 0 + 5 + read-only - 0 - GTCCRA input capture is disable at the ELC_GPT input - #0 + TS0 + measured TS0 + 0 - 1 - GTCCRA input capture is enable at the ELC_GPT input - #1 + TS1 + measured TS1 + 1 - - - - ASCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source GTCCRA Input Capture Enable - 15 - 15 - read-write - - 0 - GTCCRA input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 1 - #0 + TS2 + measured TS2 + 2 - 1 - GTCCRA input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 1 - #1 + TS3 + measured TS3 + 3 - - - - ASCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source GTCCRA Input Capture Enable - 14 - 14 - read-write - - 0 - GTCCRA input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 0 - #0 + TS4 + measured TS4 + 4 - 1 - GTCCRA input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 0 - #1 + TS5 + measured TS5 + 5 - - - - ASCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source GTCCRA Input Capture Enable - 13 - 13 - read-write - - 0 - GTCCRA input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 1 - #0 + TS6 + measured TS6 + 6 - 1 - GTCCRA input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 1 - #1 + TS7 + measured TS7 + 7 - - - - ASCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source GTCCRA Input Capture Enable - 12 - 12 - read-write - - 0 - GTCCRA input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 0 - #0 + TS8 + measured TS8 + 8 - 1 - GTCCRA input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 0 - #1 + TS9 + measured TS9 + 9 - - - - ASCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source GTCCRA Input Capture Enable - 11 - 11 - read-write - - 0 - GTCCRA input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 1 - #0 + TS10 + measured TS10 + 10 - 1 - GTCCRA input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 1 - #1 + TS11 + measured TS11 + 11 - - - - ASCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source GTCCRA Input Capture Enable - 10 - 10 - read-write - - 0 - GTCCRA input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 0 - #0 + TS12 + measured TS12 + 12 - 1 - GTCCRA input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 0 - #1 + TS13 + measured TS13 + 13 - - - - ASCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source GTCCRA Input Capture Enable - 9 - 9 - read-write - - 0 - GTCCRA input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 1 - #0 + TS14 + measured TS14 + 14 - 1 - GTCCRA input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 1 - #1 + TS15 + measured TS15 + 15 - - - - ASCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source GTCCRA Input Capture Enable - 8 - 8 - read-write - - 0 - GTCCRA input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 0 - #0 + TS16 + measured TS16 + 16 - 1 - GTCCRA input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 0 - #1 + TS17 + measured TS17 + 17 - - - - 4 - 2 - A,B,C,D - ASGTRG%sF - GTETRG Pin Falling Input Source GTCCRA Input Capture Enable - 1 - 1 - read-write - - 0 - GTCCRA input capture is disable at the falling edge of GTETRG input - #0 + TS18 + measured TS18 + 18 - 1 - GTCCRA input capture is enable at the falling edge of GTETRG input - #1 + TS19 + measured TS19 + 19 - - - - 4 - 2 - A,B,C,D - ASGTRG%sR - GTETRG Pin Rising Input Source GTCCRA Input Capture Enable - 0 - 0 - read-write - - 0 - GTCCRA input capture is disable at the rising edge of GTETRG input - #0 + TS20 + measured TS20 + 20 - 1 - GTCCRA input capture is enable at the rising edge of GTETRG input - #1 + TS21 + measured TS21 + 21 - - - - - - GTICBSR - General PWM Timer Input Capture Source Select Register B - 0x28 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - 8 - 1 - A,B,C,D,E,F,G,H - BSELC%s - ELC_GPT Event Source GTCCRB Input Capture Enable - 16 - 16 - read-write - - 0 - GTCCRB input capture is disable at the ELC_GPT input - #0 + TS22 + measured TS22 + 22 - 1 - GTCCRB input capture is enable at the ELC_GPT input - #1 + TS23 + measured TS23 + 23 - - - - BSCBFAH - GTIOCB Pin Falling Input during GTIOCA Value High Source GTCCRB Input Capture Enable - 15 - 15 - read-write - - 0 - GTCCRB input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 1 - #0 + TS24 + measured TS24 + 24 - 1 - GTCCRB input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 1 - #1 + TS25 + measured TS25 + 25 - - - - BSCBFAL - GTIOCB Pin Falling Input during GTIOCA Value Low Source GTCCRB Input Capture Enable - 14 - 14 - read-write - - 0 - GTCCRB input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 0 - #0 + TS26 + measured TS26 + 26 - 1 - GTCCRB input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 0 - #1 + TS27 + measured TS27 + 27 - - - - BSCBRAH - GTIOCB Pin Rising Input during GTIOCA Value High Source GTCCRB Input Capture Enable - 13 - 13 - read-write - - 0 - GTCCRB input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 1 - #0 + TS28 + measured TS28 + 28 - 1 - GTCCRB input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 1 - #1 + TS29 + measured TS29 + 29 + + + TS30 + measured TS30 + 30 + + + TS31 + measured TS31 + 31 + + + TS32 + measured TS32 + 32 + + + TS33 + measured TS33 + 33 + + + TS34 + measured TS34 + 34 + + + TS35 + measured TS35 + 35 + + + STOP + Conversion Stopped + #111111 + + + + 5 + 1 + CTSUCHAC[%s] + CTSU Channel Enable Control Register + 0x06 + 8 + read-write + 0x00 + 0xFF + - BSCBRAL - GTIOCB Pin Rising Input during GTIOCA Value Low Source GTCCRB Input Capture Enable - 12 - 12 + 8 + 1 + TS%s + CTSU Channel Enable Control + 0 + 0 read-write 0 - GTCCRB input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 0 - #0 + Do not measure + 0 1 - GTCCRB input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 0 - #1 + Measure + 1 + + + + 5 + 1 + CTSUCHTRC[%s] + CTSU Channel Transmit/Receive Control Register + 0x0B + 8 + read-write + 0x00 + 0xFF + - BSCAFBH - GTIOCA Pin Falling Input during GTIOCB Value High Source GTCCRB Input Capture Enable - 11 - 11 + 8 + 1 + TS%s + CTSU Channel Transmit/Receive Control + 0 + 0 read-write 0 - GTCCRB input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + Reception #0 1 - GTCCRB input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + Transmission #1 + + + + CTSUDCLKC + CTSU High-Pass Noise Reduction Control Register + 0x10 + 8 + read-write + 0x00 + 0xFF + + + CTSUSSCNT + CTSU Diffusion Clock Mode ControlNOTE: This bit should be set to 11b. + 4 + 5 + read-write + - BSCAFBL - GTIOCA Pin Falling Input during GTIOCB Value Low Source GTCCRB Input Capture Enable - 10 - 10 + CTSUSSMOD + CTSU Diffusion Clock Mode SelectNOTE: This bit should be set to 00b. + 0 + 1 read-write + + + + + CTSUST + CTSU Status Register + 0x11 + 8 + read-write + 0x00 + 0xFF + + + CTSUPS + CTSU Mutual Capacitance Status Flag + 7 + 7 + read-only 0 - GTCCRB input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + First measurement #0 1 - GTCCRB input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + Second measurement #1 - BSCARBH - GTIOCA Pin Rising Input during GTIOCB Value High Source GTCCRB Input Capture Enable - 9 - 9 + CTSUROVF + CTSU Reference Counter Overflow Flag + 6 + 6 read-write 0 - GTCCRB input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + No overflow #0 1 - GTCCRB input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + An overflow #1 - BSCARBL - GTIOCA Pin Rising Input during GTIOCB Value Low Source GTCCRB Input Capture Enable - 8 - 8 + CTSUSOVF + CTSU Sensor Counter Overflow Flag + 5 + 5 read-write 0 - GTCCRB input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + No overflow #0 1 - GTCCRB input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + An overflow #1 - 4 - 2 - A,B,C,D - BSGTRG%sF - GTETRG Pin Falling Input Source GTCCRB Input Capture Enable - 1 - 1 - read-write + CTSUDTSR + CTSU Data Transfer Status Flag + 4 + 4 + read-only 0 - GTCCRB input capture is disable at the falling edge of GTETRG input + Measurement result has been read #0 1 - GTCCRB input capture is enable at the falling edge of GTETRG input + Measurement result has not been read #1 - 4 - 2 - A,B,C,D - BSGTRG%sR - GTETRG Pin Rising Input Source GTCCRB Input Capture Enable + CTSUSTC + CTSU Measurement Status Counter 0 - 0 - read-write + 2 + read-only - 0 - GTCCRB input capture is disable at the rising edge of GTETRG input - #0 + 000 + Status 0 + #000 - 1 - GTCCRB input capture is enable at the rising edge of GTETRG input - #1 + 001 + Status 1 + #001 + + + 010 + Status 2 + #010 + + + 011 + Status 3 + #011 + + + 100 + Status 4 + #100 + + + 101 + Status 5 + #101 - GTCR - General PWM Timer Control Register - 0x2C - 32 + CTSUSSC + CTSU High-Pass Noise Reduction Spectrum Diffusion Control Register + 0x12 + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - TPCS - Timer Prescaler Select - 24 - 26 + CTSUSSDIV + CTSU Spectrum Diffusion Frequency Division Setting + 8 + 11 read-write 0000 - PCLK/1 + 4.00 <= fb #0000 0001 - PCLK/2 + 2.00 <= fb < 4.00 #0001 0010 - PCLK/4 + 1.33 <= fb < 2.00 #0010 0011 - PCLK/8 + 1.00 <= fb < 1.33 #0011 0100 - PCLK/16 + 0.80 <= fb < 1.00 #0100 0101 - PCLK/32 + 0.67 <= fb < 0.80 #0101 0110 - PCLK/64 + 0.57 <= fb < 0.67 #0110 + + 0111 + 0.50 <= fb < 0.57 + #0111 + 1000 - PCLK/256 + 0.44 <= fb < 0.50 #1000 + + 1001 + 0.40 <= fb < 0.44 + #1001 + 1010 - PCLK/1024 + 0.36 <= fb < 0.40 #1010 + + 1011 + 0.33 <= fb < 0.36 + #1011 + 1100 - GTETRGA + 0.31 <= fb < 0.33 #1100 1101 - GTETRGB + 0.29 <= fb < 0.31 #1101 1110 - GTETRGC + 0.27 <= fb < 0.29 #1110 1111 - GTETRGD + fb < 0.27 #1111 + + + + + + CTSUSO0 + CTSU Sensor Offset Register 0 + 0x14 + 16 + read-write + 0x0000 + 0xFFFF + + + CTSUSNUM + CTSU Measurement Count Setting + 10 + 15 + read-write + + + CTSUSO + CTSU Sensor Offset AdjustmentCurrent offset amount is CTSUSO ( 0 to 1023 ) + 0 + 9 + read-write + + + + + CTSUSO1 + CTSU Sensor Offset Register 1 + 0x16 + 16 + read-write + 0x0000 + 0xFFFF + + + CTSUICOG + CTSU ICO Gain Adjustment + 13 + 14 + read-write + + + 00 + 100 percent gain + #00 + - others - Setting prohibied - true + 01 + 66 percent gain + #01 + + + 10 + 50 percent gain + #10 + + + 11 + 40 percent gain + #11 - MD - Mode Select - 16 - 18 + CTSUSDPA + CTSU Base Clock SettingOperating clock divided by ( CTSUSDPA + 1 ) x 2 + 8 + 12 + read-write + + + CTSURICOA + CTSU Reference ICO Current AdjustmentCurrent offset amount is CTSUSO ( 0 to 255 ) + 0 + 7 read-write + + + + + CTSUSC + CTSU Sensor Counter + 0x18 + 16 + read-only + 0x0000 + 0xFFFF + + + CTSUSC + CTSU Sensor CounterThese bits indicate the measurement result of the CTSU. These bits indicate FFFFh when an overflow occurs. + 0 + 15 + read-only + + + + + CTSURC + CTSU Reference Counter + 0x1A + 16 + read-only + 0x0000 + 0xFFFF + + + CTSURC + CTSU Reference CounterThese bits indicate the measurement result of the reference ICO.These bits indicate FFFFh when an overflow occurs. + 0 + 15 + read-only + + + + + CTSUERRS + CTSU Error Status Register + 0x1C + 16 + read-only + 0x0000 + 0xFFFF + + + CTSUICOMP + TSCAP Voltage Error Monitor + 15 + 15 + read-only - 000 - Saw-wave PWM mode (single buffer or double buffer possible) - #000 + 0 + Normal TSCAP voltage + #0 - 001 - Saw-wave one-shot pulse mode (fixed buffer operation) - #001 + 1 + Abnormal TSCAP voltage + #1 + + + + CTSUSPMD + Calibration Mode + 0 + 1 + read-write + - 010 - Setting prohibited - #010 + 00 + Capacitance measurement mode + #00 - 011 - Setting prohibited - #011 + 10 + Calibration mode + #10 - 100 - Triangle-wave PWM mode 1 (16-bit transfer at crest) (single buffer or double buffer possible) - #100 + Others + Seting prohibited + true + + + + CTSUTSOD + TS Pin Fixed Output + 2 + 2 + read-write + - 101 - Triangle-wave PWM mode 2 (16-bit transfer at crest and trough) (single buffer or double buffer possible) - #101 + 0 + Capacitance measurement mode + #0 - 110 - Triangle-wave PWM mode 3 (32-bit transfer at trough) fixed buffer operation) - #110 + 1 + TS pins are forced to be high or low + #1 + + + + + CTSUDRV + Calibration Setting 1 + 3 + 3 + read-write + + + 0 + Capacitance measurement mode + #0 - 111 - Setting prohibited - #111 + 1 + Calibration setting 1 + #1 - CST - Count Start - 0 - 0 + CTSUTSOC + Calibration Setting 2 + 7 + 7 read-write 0 - Count operation is stopped + Capacitance measurement mode #0 1 - Count operation is performed + Calibration setting 2 #1 @@ -37554,1767 +15777,1753 @@ FMS2,1,0: - GTUDDTYC - General PWM Timer Count Direction and Duty Setting Register - 0x30 + CTSUTRMR + CTSU Reference Current Calibration Register + 0x20 + 8 + read-write + 0x00 + 0x00 + + + + + R_CTSU2 + Capacitive Touch Sensing Unit + 0x40082000 + + 0x00 + 12 + registers + + + 0x0C + 8 + registers + + + 0x14 + 8 + registers + + + 0x1C + 4 + registers + + + 0x20 + 8 + registers + + + 0x28 + 16 + registers + + + + CTSUCRA + CTSU Control Register A + 0x00 32 read-write - 0x00000001 - 0xFFFFFFFF + 0x00000000 + 0xffffffff - OBDTYR - GTIOCB Output Value Selecting after Releasing 0 percent/100 percent Duty Setting - 27 - 27 + STRT + CTSU Measurement Operation Start + 0 + 0 read-write 0 - Apply output value set in 0 percent/100 percent duty to GTIOB[3:2] function after releasing 0 percent/100 percent duty setting. + Stop measurement operation #0 1 - Apply masked compare match output value to GTIOB[3:2] function after releasing 0 percent/100 percent duty setting. + Start measurement operation #1 - OBDTYF - Forcible GTIOCB Output Duty Setting - 26 - 26 + CAP + CTSU Measurement Operation Start Trigger Select + 1 + 1 read-write 0 - Not forcibly set + Software trigger #0 1 - Forcibly set + External trigger #1 - OBDTY - GTIOCB Output Duty Setting - 24 - 25 + SNZ + CTSU Wait State Power-Saving Enable + 2 + 2 read-write - 00 - GTIOCB pin duty is depend on compare match - #00 - - - 01 - GTIOCB pin duty is depend on compare match - #01 - - - 10 - GTIOCB pin duty 0 percent - #10 + 0 + Disable power-saving function during wait state + #0 - 11 - GTIOCB pin duty 100 percent - #11 + 1 + Enable power-saving function during wait state + #1 - OADTYR - GTIOCA Output Value Selecting after Releasing 0 percent/100 percent Duty Setting - 19 - 19 + CFCON + CTSU CFC Power on Control + 3 + 3 read-write 0 - Apply output value set in 0 percent/100 percent duty to GTIOA[3:2] function after releasing 0 percent/100 percent duty setting. + CFC power off #0 1 - Apply masked compare match output value to GTIOA[3:2] function after releasing 0 percent/100 percent duty setting. + CFC power on #1 - OADTYF - Forcible GTIOCA Output Duty Setting - 18 - 18 + INIT + CTSU Control Block Initialization + 4 + 4 + write-only + + + PUMPON + CTSU Boost Circuit Control + 5 + 5 read-write 0 - Not forcibly set + Boost circuit off #0 1 - Forcibly set + Boost circuit on #1 - OADTY - GTIOCA Output Duty Setting - 16 - 17 + TXVSEL + CTSU Transmission Power Supply Selection + 6 + 7 read-write 00 - GTIOCA pin duty is depend on compare match + VCC is selected as the power supply for the transmit pins in measurement methods other than self-capacitance method. #00 01 - GTIOCA pin duty is depend on compare match + VCC is selected as the power supply for the transmit pins in self-capacitance method. #01 10 - GTIOCA pin duty 0 percent + VCL is selected as the power-supply voltage for the transmit pins. #10 11 - GTIOCA pin duty 100 percent + Setting prohibited #11 - UDF - Forcible Count Direction Setting - 1 - 1 + PON + CTSU Power Supply Enable + 8 + 8 read-write 0 - Not forcibly set + Power off the CTSU #0 1 - Forcibly set + Power on the CTSU #1 - UD - Count Direction Setting - 0 - 0 + CSW + CTSU LPF Capacitance Charging Control + 9 + 9 read-write 0 - GTCNT counts down. + Turn off capacitance switch #0 1 - GTCNT counts up. + Turn on capacitance switch #1 - - - - GTIOR - General PWM Timer I/O Control Register - 0x34 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - NFCSB - Noise Filter B Sampling Clock Select - 30 - 31 + ATUNE0 + CTSU Power Supply Operating Mode Setting + 10 + 10 read-write - 00 - PCLK/1 - #00 - - - 01 - PCLK/4 - #01 - - - 10 - PCLK/16 - #10 + 0 + VCC ≥ 2.4 V: Normal operating mode + VCC < 2.4 V: Setting prohibited + + #0 - 11 - PCLK/64 - #11 + 1 + Low-voltage operating mode + #1 - NFBEN - Noise Filter B Enable - 29 - 29 + ATUNE1 + CTSU Current Range Adjustment + 11 + 11 read-write 0 - The noise filter for the GTIOCB pin is disabled. + 40 µA when CTSUATUNE2 = 0 + 20 µA when CTSUATUNE2 = 1 + #0 1 - The noise filter for the GTIOCB pin is enabled. + 80 µA when CTSUATUNE2 = 0 + 160 µA when CTSUATUNE2 = 1 + #1 - OBDF - GTIOCB Pin Disable Value Setting - 25 - 26 + CLK + CTSU Operating Clock Select + 12 + 13 read-write 00 - Output disable is prohibited. + PCLKB #00 01 - GTIOCB pin is set to Hi-Z when output disable is performed. + PCLKB/2 (PCLKB divided by 2) #01 10 - GTIOCB pin is set to 0 when output disable is performed. + PCLKB/4 (PCLKB divided by 4) #10 11 - GTIOCB pin is set to 1 when output disable is performed. + PCLKB/8 (PCLKB divided by 8) #11 - OBE - GTIOCB Pin Output Enable - 24 - 24 + MD0 + CTSU Measurement Mode Select 0 + 14 + 14 read-write 0 - Output is disabled + Single scan mode #0 1 - Output is enabled + Multi-scan mode #1 - OBHLD - GTIOCB Pin Output Setting at the Start/Stop Count - 23 - 23 + MD1 + CTSU Measurement Mode Select 1 + 15 + 15 read-write 0 - The GTIOCB pin output level at start/stop of counting depends on the register setting. + Single scan mode #0 1 - The GTIOCB pin output level is retained at start/stop of counting. + Multi-scan mode #1 - OBDFLT - GTIOCB Pin Output Value Setting at the Count Stop - 22 - 22 + MD2 + CTSU Measurement Mode Select 2 + 16 + 16 read-write 0 - The GTIOCB pin outputs low when counting is stopped. + Measure the current that flows through the switched capacitor. #0 1 - The GTIOCB pin outputs high when counting is stopped. + Measure the transfer charge in CFC circuit (high speed measurement) #1 - GTIOB - GTIOCB Pin Function Select - 16 - 20 + ATUNE2 + CTSU Current Range Adjustment + 17 + 17 read-write - 00000 - Initial output is Low. Output retained at cycle end. Output retained at GTCCRB compare match. - #00000 - - - 00001 - Initial output is Low. Output retained at cycle end. Low output at GTCCRB compare match. - #00001 - - - 00010 - Initial output is Low. Output retained at cycle end. High output at GTCCRB compare match. - #00010 - - - 00011 - Initial output is Low. Output retained at cycle end. Output toggled at GTCCRB compare match. - #00011 - - - 00100 - Initial output is Low. Low output at cycle end. Output retained at GTCCRB compare match. - #00100 - - - 00101 - Initial output is Low. Low output at cycle end. Low output at GTCCRB compare match. - #00101 - - - 00110 - Initial output is Low. Low output at cycle end. High output at GTCCRB compare match. - #00110 - - - 00111 - Initial output is Low. Low output at cycle end. Output toggled at GTCCRB compare match. - #00111 - - - 01000 - Initial output is Low. High output at cycle end. Output retained at GTCCRB compare match. - #01000 - - - 01001 - Initial output is Low. High output at cycle end. Low output at GTCCRB compare match. - #01001 - - - 01010 - Initial output is Low. High output at cycle end. High output at GTCCRB compare match. - #01010 - - - 01011 - Initial output is Low. High output at cycle end. Output toggled at GTCCRB compare match. - #01011 - - - 01100 - Initial output is Low. Output toggled at cycle end. Output retained at GTCCRB compare match. - #01100 - - - 01101 - Initial output is Low. Output toggled at cycle end. Low output at GTCCRB compare match. - #01101 - - - 01110 - Initial output is Low. Output toggled at cycle end. High output at GTCCRB compare match. - #01110 - - - 01111 - Initial output is Low. Output toggled at cycle end. Output toggled at GTCCRB compare match. - #01111 - - - 10000 - Initial output is High. Output retained at cycle end. Output retained at GTCCRB compare match. - #10000 - - - 10001 - Initial output is High. Output retained at cycle end. Low output at GTCCRB compare match. - #10001 - - - 10010 - Initial output is High. Output retained at cycle end. High output at GTCCRB compare match. - #10010 - - - 10011 - Initial output is High. Output retained at cycle end. Output toggled at GTCCRB compare match. - #10011 - - - 10100 - Initial output is High. Low output at cycle end. Output retained at GTCCRB compare match. - #10100 + 0 + 40 µA when CTSUATUNE1 = 0 + 80 µA when CTSUATUNE2 = 1 + + #0 - 10101 - Initial output is High. Low output at cycle end. Low output at GTCCRB compare match. - #10101 + 1 + 20 µA when CTSUATUNE1 = 0 + 160 µA when CTSUATUNE2 = 1 + + #1 + + + + LOAD + CTSU Measurement Load Control + 18 + 19 + read-write + - 10110 - Initial output is High. Low output at cycle end. High output at GTCCRB compare match. - #10110 + 00 + Normal measurement mode + #00 - 10111 - Initial output is High. Low output at cycle end. Output toggled at GTCCRB compare match. - #10111 + 01 + Load off mode + #01 - 11000 - Initial output is High. High output at cycle end. Output retained at GTCCRB compare match. - #11000 + 10 + Current load mode + #10 - 11001 - Initial output is High. High output at cycle end. Low output at GTCCRB compare match. - #11001 + 11 + Resistance load mode + #11 + + + + POSEL + CTSU Non-measured Channel Output Select + 20 + 21 + read-write + - 11010 - Initial output is High. High output at cycle end. High output at GTCCRB compare match. - #11010 + 00 + Output low through GPIO + #00 - 11011 - Initial output is High. High output at cycle end. Output toggled at GTCCRB compare match. - #11011 + 01 + Hi-Z + #01 - 11100 - Initial output is High. Output toggled at cycle end. Output retained at GTCCRB compare match. - #11100 + 10 + Output low through the power setting in the TXVSEL[1:0] bits + #10 - 11101 - Initial output is High. Output toggled at cycle end. Low output at GTCCRB compare match. - #11101 + 11 + Same phase pulse output as transmission channel through the power setting in the TXVSEL[1:0] bits + #11 + + + + SDPSEL + CTSU Sensor Drive Pulse Select + 22 + 22 + read-write + - 11110 - Initial output is High. Output toggled at cycle end. High output at GTCCRB compare match. - #11110 + 0 + Random pulse mode + #0 - 11111 - Initial output is High. Output toggled at cycle end. Output toggled at GTCCRB compare match. - #11111 + 1 + High resolution pulse mode + #1 - NFCSA - Noise Filter A Sampling Clock Select - 14 - 15 + FCMODE + CTSU SUCLK Control + 23 + 23 read-write - 00 - PCLK/1 - #00 + 0 + SUCLK is used as frequency diffusion clock + #0 - 01 - PCLK/4 - #01 + 1 + SUCLK is used as recovery clock for multi-clock measurement + #1 + + + + STCLK + CTSU STCLK Select + 24 + 29 + read-write + + + DCMODE + CTSU Current Measurement Mode Select + 30 + 30 + read-write + - 10 - PCLK/16 - #10 + 0 + Normal mode + #0 - 11 - PCLK/64 - #11 + 1 + Current measurement mode + #1 - NFAEN - Noise Filter A Enable - 13 - 13 + DCBACK + CTSU Current Measurement Feedback Select + 31 + 31 read-write 0 - The noise filter for the GTIOCA pin is disabled. + TSCAP pin is selected #0 1 - The noise filter for the GTIOCA pin is enabled. + Measurement pin is selected #1 + + + + CTSUCRAL + CTSU Control Register A + CTSUCRA + 0x00 + 16 + read-write + 0x0000 + 0xffff + + + CTSUCR0 + CTSU Control Register A + CTSUCRA + 0x00 + 8 + read-write + 0x00 + 0xff + + + CTSUCR1 + CTSU Control Register A + CTSUCRA + 0x01 + 8 + read-write + 0x00 + 0xff + + + CTSUCR2 + CTSU Control Register A + CTSUCRAH + 0x02 + 8 + read-write + 0x00 + 0xff + + + CTSUCR3 + CTSU Control Register A + CTSUCRA + 0x03 + 8 + read-write + 0x00 + 0xff + + + CTSUCRB + CTSU Control Register B + 0x04 + 32 + read-write + 0x00000000 + 0xffffffff + + + PRRATIO + CTSU Measurement Time and Pulse Count Adjustment + 0 + 3 + read-write + - OADF - GTIOCA Pin Disable Value Setting - 9 - 10 + PRMODE + CTSU Base Period and Pulse Count Setting + 4 + 5 read-write 00 - Output disable is prohibited. + 510 pulses (512 pulses when PROFF bit is 1) #00 01 - GTIOCA pin is set to Hi-Z when output disable is performed. + 126 pulses (128 pulses when PROFF bit is 1) #01 10 - GTIOCA pin is set to 0 when output disable is performed. + 62 pulses (recommended setting) (64 pulses when PROFF bit is 1) #10 11 - GTIOCA pin is set to 1 when output disable is performed. + Setting prohibited #11 - OAE - GTIOCA Pin Output Enable - 8 - 8 + SOFF + CTSU High-Pass Noise Reduction Function Off Setting + 6 + 6 read-write 0 - Output is disabled + Turn spectrum diffusion on. #0 1 - Output is enabled + Turn spectrum diffusion off. #1 - OAHLD - GTIOCA Pin Output Setting at the Start/Stop Count + PROFF + CTSU Random Number Off Control 7 7 read-write 0 - The GTIOCA pin output level at start/stop of counting depends on the register setting. + There is random number control. #0 1 - The GTIOCA pin output level is retained at start/stop of counting. + There is no random number control. #1 - OADFLT - GTIOCA Pin Output Value Setting at the Count Stop - 6 - 6 + SST + CTSU Sensor Stabilization Wait Control + 8 + 15 read-write - - - 0 - The GTIOCA pin outputs low when counting is stopped. - #0 - - - 1 - The GTIOCA pin outputs high when counting is stopped. - #1 - - - GTIOA - GTIOCA Pin Function Select + SSMOD + CTSU SUCLK Diffusion Mode Select + 24 + 26 + read-write + + + SSCNT + CTSU SUCLK Diffusion Control + 28 + 29 + read-write + + + + + CTSUCRBL + CTSU Control Register B + CTSUCRB + 0x04 + 16 + read-write + 0x0000 + 0xffff + + + CTSUSDPRS + CTSU Control Register B + CTSUCRB + 0x04 + 8 + read-write + 0x00 + 0xff + + + CTSUSST + CTSU Control Register B + CTSUCRB + 0x05 + 8 + read-write + 0x00 + 0xff + + + CTSUCRBH + CTSU Control Register B + CTSUCRB + 0x06 + 16 + read-write + 0x0000 + 0xffff + + + CTSUDCLKC + CTSU Control Register B + CTSUCRB + 0x07 + 8 + read-write + 0x00 + 0xff + + + CTSUMCH + CTSU Measurement Channel Register + 0x08 + 32 + read-write + 0x00003f3f + 0xffffffff + + + MCH0 + CTSU Measurement Channel 0 0 - 4 + 5 read-write - 00000 - Initial output is Low. Output retained at cycle end. Output retained at GTCCRA compare match. - #00000 + 0x00 + TS00 + 0x00 - 00001 - Initial output is Low. Output retained at cycle end. Low output at GTCCRA compare match. - #00001 + 0x02 + TS02 + 0x02 - 00010 - Initial output is Low. Output retained at cycle end. High output at GTCCRA compare match. - #00010 + 0x04 + TS04 + 0x04 - 00011 - Initial output is Low. Output retained at cycle end. Output toggled at GTCCRA compare match. - #00011 + 0x05 + TS05 + 0x05 - 00100 - Initial output is Low. Low output at cycle end. Output retained at GTCCRA compare match. - #00100 + 0x06 + TS06 + 0x06 - 00101 - Initial output is Low. Low output at cycle end. Low output at GTCCRA compare match. - #00101 + 0x07 + TS07 + 0x07 - 00110 - Initial output is Low. Low output at cycle end. High output at GTCCRA compare match. - #00110 + 0x08 + TS08 + 0x08 - 00111 - Initial output is Low. Low output at cycle end. Output toggled at GTCCRA compare match. - #00111 + 0x09 + TS09 + 0x09 - 01000 - Initial output is Low. High output at cycle end. Output retained at GTCCRA compare match. - #01000 + 0x0A + TS10 + 0x0a - 01001 - Initial output is Low. High output at cycle end. Low output at GTCCRA compare match. - #01001 + 0x0B + TS11 + 0x0b - 01010 - Initial output is Low. High output at cycle end. High output at GTCCRA compare match. - #01010 + 0x0C + TS12 + 0x0c - 01011 - Initial output is Low. High output at cycle end. Output toggled at GTCCRA compare match. - #01011 + 0x0D + TS13 + 0x0d - 01100 - Initial output is Low. Output toggled at cycle end. Output retained at GTCCRA compare match. - #01100 + 0x0E + TS14 + 0x0e - 01101 - Initial output is Low. Output toggled at cycle end. Low output at GTCCRA compare match. - #01101 + 0x0F + TS15 + 0x0f - 01110 - Initial output is Low. Output toggled at cycle end. High output at GTCCRA compare match. - #01110 + 0x10 + TS16 + 0x10 - 01111 - Initial output is Low. Output toggled at cycle end. Output toggled at GTCCRA compare match. - #01111 + 0x11 + TS17 + 0x11 - 10000 - Initial output is High. Output retained at cycle end. Output retained at GTCCRA compare match. - #10000 + 0x12 + TS18 + 0x12 - 10001 - Initial output is High. Output retained at cycle end. Low output at GTCCRA compare match. - #10001 + 0x15 + TS21 + 0x15 - 10010 - Initial output is High. Output retained at cycle end. High output at GTCCRA compare match. - #10010 + 0x16 + TS22 + 0x16 - 10011 - Initial output is High. Output retained at cycle end. Output toggled at GTCCRA compare match. - #10011 + 0x17 + TS23 + 0x17 - 10100 - Initial output is High. Low output at cycle end. Output retained at GTCCRA compare match. - #10100 + 0x18 + TS24 + 0x18 - 10101 - Initial output is High. Low output at cycle end. Low output at GTCCRA compare match. - #10101 + 0x19 + TS25 + 0x19 - 10110 - Initial output is High. Low output at cycle end. High output at GTCCRA compare match. - #10110 + 0x1A + TS26 + 0x1a - 10111 - Initial output is High. Low output at cycle end. Output toggled at GTCCRA compare match. - #10111 + 0x1B + TS27 + 0x1b - 11000 - Initial output is High. High output at cycle end. Output retained at GTCCRA compare match. - #11000 + 0x1C + TS28 + 0x1c - 11001 - Initial output is High. High output at cycle end. Low output at GTCCRA compare match. - #11001 + 0x1D + TS29 + 0x1d - 11010 - Initial output is High. High output at cycle end. High output at GTCCRA compare match. - #11010 + 0x1E + TS30 + 0x1e - 11011 - Initial output is High. High output at cycle end. Output toggled at GTCCRA compare match. - #11011 + 0x1F + TS31 + 0x1f - 11100 - Initial output is High. Output toggled at cycle end. Output retained at GTCCRA compare match. - #11100 + 0x20 + TS32 + 0x20 - 11101 - Initial output is High. Output toggled at cycle end. Low output at GTCCRA compare match. - #11101 + 0x21 + TS33 + 0x21 - 11110 - Initial output is High. Output toggled at cycle end. High output at GTCCRA compare match. - #11110 + 0x22 + TS34 + 0x22 - 11111 - Initial output is High. Output toggled at cycle end. Output toggled at GTCCRA compare match. - #11111 + 0x23 + TS35 + 0x23 + + + 0x3F + Measurement is being stopped. + 0x3f - - - - GTINTAD - General PWM Timer Interrupt Output Setting Register - 0x38 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - GRPABL - Same Time Output Level Low Disable Request Enable - 30 - 30 + MCH1 + CTSU Measurement Channel 1 + 8 + 13 read-write - 0 - Same time output level low disable request is disabled. - #0 + 0x00 + TS00 + 0x00 - 1 - Same time output level low disable request is enabled. - #1 + 0x02 + TS02 + 0x02 - - - - GRPABH - Same Time Output Level High Disable Request Enable - 29 - 29 - read-write - - 0 - Same time output level high disable request is disabled. - #0 + 0x04 + TS04 + 0x04 - 1 - Same time output level high disable request is enabled. - #1 + 0x05 + TS05 + 0x05 - - - - GRPDTE - Dead Time Error Output Disable Request Enable - 28 - 28 - read-write - - 0 - Disable dead time error output disable request - #0 + 0x06 + TS06 + 0x06 - 1 - Enable dead time error output disable request - #1 + 0x07 + TS07 + 0x07 - - - - GRP - Output Disable Source Select - 24 - 25 - read-write - - 00 - Group A output disable request - #00 + 0x08 + TS08 + 0x08 - 01 - Group B output disable request - #01 + 0x09 + TS09 + 0x09 - 10 - Group C output disable request - #10 + 0x0A + TS10 + 0x0a - 11 - Group D output disable request - #11 + 0x0B + TS11 + 0x0b - others - Setting prohibited - true + 0x0C + TS12 + 0x0c + + + 0x0D + TS13 + 0x0d + + + 0x0E + TS14 + 0x0e + + + 0x0F + TS15 + 0x0f + + + 0x10 + TS16 + 0x10 + + + 0x11 + TS17 + 0x11 + + + 0x12 + TS18 + 0x12 + + + 0x15 + TS21 + 0x15 + + + 0x16 + TS22 + 0x16 - - - - - - GTST - General PWM Timer Status Register - 0x3C - 32 - read-write - 0x00008000 - 0xFFFFFFFF - - - OABLF - Same Time Output Level Low Disable Request Enable - 30 - 30 - read-only - - 0 - GTIOCA pin and GTIOCB pin don't output 0 at the same time. - #0 + 0x17 + TS23 + 0x17 - 1 - GTIOCA pin and GTIOCB pin output 0 at the same time. - #1 + 0x18 + TS24 + 0x18 - - - - OABHF - Same Time Output Level High Disable Request Enable - 29 - 29 - read-only - - 0 - GTIOCA pin and GTIOCB pin don't output 1 at the same time. - #0 + 0x19 + TS25 + 0x19 - 1 - GTIOCA pin and GTIOCB pin output 1 at the same time. - #1 + 0x1A + TS26 + 0x1a - - - - DTEF - Dead Time Error Flag - 28 - 28 - read-only - - 0 - No dead time error has occurred. - #0 + 0x1B + TS27 + 0x1b - 1 - A dead time error has occurred. - #1 + 0x1C + TS28 + 0x1c - - - - ODF - Output Disable Flag - 24 - 24 - read-only - - 0 - No output disable request is generated. - #0 + 0x1D + TS29 + 0x1d - 1 - An output disable request is generated. - #1 + 0x1E + TS30 + 0x1e - - - - ADTRBDF - GTADTRB Compare Match(Down-Counting) A/D Convertor Start Request Flag - 19 - 19 - read-write - - 0 - No compare match of GTADTRB at down-counting is generated. - #0 + 0x1F + TS31 + 0x1f - 1 - A compare match of GTADTRB at down-counting is generated. - #1 + 0x20 + TS32 + 0x20 - - - - ADTRBUF - GTADTRB Compare Match(Up-Counting) A/D Convertor Start Request Flag - 18 - 18 - read-write - - 0 - No compare match of GTADTRB at up-counting is generated. - #0 + 0x21 + TS33 + 0x21 - 1 - A compare match of GTADTRB at up-counting is generated. - #1 + 0x22 + TS34 + 0x22 - - - - ADTRADF - GTADTRA Compare Match(Down-Counting) A/D Convertor Start Request Flag - 17 - 17 - read-write - - 0 - No compare match of GTADTRA at down-counting is generated. - #0 + 0x23 + TS35 + 0x23 - 1 - A compare match of GTADTRA at down-counting is generated. - #1 + 0x3F + Measurement is being stopped. + 0x3f - ADTRAUF - GTADTRA Compare Match (Up-Counting) A/D Converter Start Request Interrupt Enable + MCA0 + CTSU Multiple Valid Clock Control 16 16 read-write 0 - No compare match of GTADTRA at up-counting is generated. + Valid #0 1 - A compare match of GTADTRA at up-counting is generated. + Invalid #1 - TUCF - Count Direction Flag - 15 - 15 - read-only + MCA1 + CTSU Multiple Valid Clock Control + 17 + 17 + read-write 0 - The GTCNT counter counts downward. + Valid #0 1 - The GTCNT counter counts upward. + Invalid #1 - ITCNT - GTCIV/GTCIU Interrupt Skipping Count Counter(Counter for counting the number of times a timer interrupt has been skipped.) - 8 - 10 - read-only - - - TCFPU - Underflow Flag - 7 - 7 + MCA2 + CTSU Multiple Valid Clock Control + 18 + 18 read-write 0 - No underflow (trough) has occurred. + Valid #0 1 - An underflow (trough) has occurred. + Invalid #1 - TCFPO - Overflow Flag - 6 - 6 + MCA3 + CTSU Multiple Valid Clock Control + 19 + 19 read-write 0 - No overflow (crest) has occurred. + Valid #0 1 - An overflow (crest) has occurred. + Invalid #1 + + + + CTSUMCHL + CTSU Measurement Channel Register + CTSUMCH + 0x08 + 16 + read-write + 0x0000 + 0xffff + + + CTSUMCH0 + CTSU Measurement Channel Register + CTSUMCH + 0x08 + 8 + read-write + 0x00 + 0xff + + + CTSUMCH1 + CTSU Measurement Channel Register + CTSUMCH + 0x09 + 8 + read-write + 0x00 + 0xff + + + CTSUMCHH + CTSU Measurement Channel Register + CTSUMCH + 0x0A + 16 + read-write + 0x3f3f + 0xffff + + + CTSUMFAF + CTSU Measurement Channel Register + CTSUMCHH + 0x0A + 8 + read-write + 0x3f + 0xff + + + CTSUCHACA + CTSU Channel Enable Control Register A + 0x0C + 32 + read-write + 0x00000000 + 0xffffffff + - TCFF - Input Compare Match Flag F - 5 - 5 + CHAC00 + CTSU Channel Enable Control A + 0 + 0 read-write 0 - No compare match of GTCCRF is generated. + Do not measure. #0 1 - A compare match of GTCCRF is generated. + Measure. #1 - TCFE - Input Compare Match Flag E - 4 - 4 + CHAC02 + CTSU Channel Enable Control A + 2 + 2 read-write 0 - No compare match of GTCCRE is generated. + Do not measure. #0 1 - A compare match of GTCCRE is generated. + Measure. #1 - TCFD - Input Compare Match Flag D - 3 - 3 + CHAC04 + CTSU Channel Enable Control A + 4 + 4 read-write 0 - No compare match of GTCCRD is generated. + Do not measure. #0 1 - A compare match of GTCCRD is generated. + Measure. #1 - TCFC - Input Compare Match Flag C - 2 - 2 + CHAC05 + CTSU Channel Enable Control A + 5 + 5 read-write 0 - No compare match of GTCCRC is generated. + Do not measure. #0 1 - A compare match of GTCCRC is generated. + Measure. #1 - TCFB - Input Capture/Compare Match Flag B - 1 - 1 + CHAC06 + CTSU Channel Enable Control A + 6 + 6 read-write 0 - No input capture/compare match of GTCCRB is generated. + Do not measure. #0 1 - An input capture/compare match of GTCCRB is generated. + Measure. #1 - TCFA - Input Capture/Compare Match Flag A - 0 - 0 + CHAC07 + CTSU Channel Enable Control A + 7 + 7 read-write 0 - No input capture/compare match of GTCCRA is generated. + Do not measure. #0 1 - An input capture/compare match of GTCCRA is generated. + Measure. #1 - - - - GTBER - General PWM Timer Buffer Enable Register - 0x40 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - ADTDB - GTADTRB Double Buffer Operation - 30 - 30 + CHAC08 + CTSU Channel Enable Control A + 8 + 8 read-write 0 - Single buffer operation (GTADTBRB --> GTADTRB) + Do not measure. #0 1 - Double buffer operation (GTADTDBRB --> GTADTBRB --> GTADTDRB) + Measure. #1 - ADTTB - GTADTRB Buffer Transfer Timing Select in the Triangle wavesNOTE: In the Saw waves, values other than 0 0: Transfer at an underflow (in down-counting) or overflow (in up-counting) is performed. - 28 - 29 - read-write - - - 00 - No transfer - #00 - - - 01 - Transfer at crest - #01 - - - 10 - Transfer at trough - #10 - - - 11 - Transfer at both crest and trough - #11 - - - - - ADTDA - GTADTRA Double Buffer Operation - 26 - 26 + CHAC09 + CTSU Channel Enable Control A + 9 + 9 read-write 0 - Single buffer operation (GTADTBRA --> GTADTRA) + Do not measure. #0 1 - Double buffer operation (GTADTDBRA --> GTADTBRA --> GTADTDRA) + Measure. #1 - ADTTA - GTADTRA Buffer Transfer Timing Select in the Triangle wavesNOTE: In the Saw waves, values other than 0 0: Transfer at an underflow (in down-counting) or overflow (in up-counting) is performed. - 24 - 25 + CHAC10 + CTSU Channel Enable Control A + 10 + 10 read-write - - - 00 - No transfer - #00 - - - 01 - Transfer at crest - #01 - - - 10 - Transfer at trough - #10 - - - 11 - Transfer at both crest and trough - #11 - - - - - CCRSWT - GTCCRA and GTCCRB Forcible Buffer OperationThis bit is read as 0. - 22 - 22 - write-only 0 - no effect + Do not measure. #0 1 - Forcibly performs buffer transfer of GTCCRA and GTCCRB. This bit automatically returns to 0 after the writing of 1. + Measure. #1 - PR - GTPR Buffer Operation - 20 - 21 - read-write - - - 00 - Buffer operation is not performed - #00 - - - 01 - Single buffer operation (GTPBR --> GTPR) - #01 - - - others - Setting prohibited - true - - - - - CCRB - GTCCRB Buffer Operation - 18 - 19 - read-write - - - 00 - Buffer operation is not performed - #00 - - - 01 - Single buffer operation (GTCCRB <--> GTCCRE) - #01 - - - 10 - Double buffer operation (GTCCRB <--> GTCCRE <--> GTCCRF) - #10 - - - 11 - Double buffer operation (GTCCRB <--> GTCCRE <--> GTCCRF) - #11 - - - - - CCRA - GTCCRA Buffer Operation - 16 - 17 + CHAC11 + CTSU Channel Enable Control A + 11 + 11 read-write - 00 - Buffer operation is not performed - #00 - - - 01 - Single buffer operation (GTCCRA <--> GTCCRC) - #01 - - - 10 - Double buffer operation (GTCCRA <--> GTCCRC <--> GTCCRD) - #10 + 0 + Do not measure. + #0 - 11 - Double buffer operation (GTCCRA <--> GTCCRC <--> GTCCRD) - #11 + 1 + Measure. + #1 - BD3 - BD[3]: GTDV Buffer Operation DisableBD[2] - 3 - 3 + CHAC12 + CTSU Channel Enable Control A + 12 + 12 read-write 0 - Enable buffer operation + Do not measure. #0 1 - Disable buffer operation + Measure. #1 - BD2 - BD[2]: GTADTR Buffer Operation DisableBD - 2 - 2 + CHAC13 + CTSU Channel Enable Control A + 13 + 13 read-write 0 - Enable buffer operation + Do not measure. #0 1 - Disable buffer operation + Measure. #1 - BD1 - BD[1]: GTPR Buffer Operation Disable - 1 - 1 + CHAC14 + CTSU Channel Enable Control A + 14 + 14 read-write 0 - Buffer operation is enabled + Do not measure. #0 1 - Buffer operation is disabled + Measure. #1 - BD0 - BD[0]: GTCCR Buffer Operation Disable - 0 - 0 + CHAC15 + CTSU Channel Enable Control A + 15 + 15 read-write 0 - Buffer operation is enabled + Do not measure. #0 1 - Buffer operation is disabled + Measure. #1 - - - - GTITC - General PWM Timer Interrupt and A/D Converter Start Request Skipping Setting Register - 0x44 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - ADTBL - GTADTRB A/D Converter Start Request Link - 14 - 14 + CHAC16 + CTSU Channel Enable Control A + 16 + 16 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 - ADTAL - GTADTRA A/D Converter Start Request Link - 12 - 12 + CHAC17 + CTSU Channel Enable Control A + 17 + 17 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function + Measure. #1 - IVTT - GPT_OVF/GPT_UDF Interrupt Skipping Count Select - 8 - 10 + CHAC18 + CTSU Channel Enable Control A + 18 + 18 read-write - 000 - No skipping - #000 + 0 + Do not measure. + #0 - 001 - Skipping count of 1 - #001 + 1 + Measure. + #1 + + + + CHAC21 + CTSU Channel Enable Control A + 21 + 21 + read-write + - 010 - Skipping count of 2 - #010 + 0 + Do not measure. + #0 - 011 - Skipping count of 3 - #011 + 1 + Measure. + #1 + + + + CHAC22 + CTSU Channel Enable Control A + 22 + 22 + read-write + - 100 - Skipping count of 4 - #100 + 0 + Do not measure. + #0 - 101 - Skipping count of 5 - #101 + 1 + Measure. + #1 + + + + CHAC23 + CTSU Channel Enable Control A + 23 + 23 + read-write + - 110 - Skipping count of 6 - #110 + 0 + Do not measure. + #0 - 111 - Skipping count of 7. - #111 + 1 + Measure. + #1 - IVTC - GPT_OVF/GPT_UDF Interrupt Skipping Function Select - 6 - 7 + CHAC24 + CTSU Channel Enable Control A + 24 + 24 read-write - 00 - Do not perform skipping - #00 + 0 + Do not measure. + #0 - 01 - Count and skip both overflow and underflow for saw waves and crest for triangle waves - #01 + 1 + Measure. + #1 + + + + CHAC25 + CTSU Channel Enable Control A + 25 + 25 + read-write + - 10 - Count and skip both overflow and underflow for saw waves and trough for triangle waves - #10 + 0 + Do not measure. + #0 - 11 - Count and skip both overflow and underflow for saw waves and both crest and trough for triangle waves. - #11 + 1 + Measure. + #1 - ITLF - GTCCRF Compare Match Interrupt Link - 5 - 5 + CHAC26 + CTSU Channel Enable Control A + 26 + 26 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 - ITLE - GTCCRE Compare Match Interrupt Link - 4 - 4 + CHAC27 + CTSU Channel Enable Control A + 27 + 27 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 - ITLD - GTCCRD Compare Match Interrupt Link - 3 - 3 + CHAC28 + CTSU Channel Enable Control A + 28 + 28 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 - ITLC - GTCCRC Compare Match Interrupt Link - 2 - 2 + CHAC29 + CTSU Channel Enable Control A + 29 + 29 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 - ITLB - GTCCRB Compare Match/Input Capture Interrupt Link - 1 - 1 + CHAC30 + CTSU Channel Enable Control A + 30 + 30 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 - ITLA - GTCCRA Compare Match/Input Capture Interrupt Link - 0 - 0 + CHAC31 + CTSU Channel Enable Control A + 31 + 31 read-write 0 - Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + Do not measure. #0 1 - Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + Measure. #1 @@ -39322,1699 +17531,1815 @@ FMS2,1,0: - GTCNT - General PWM Timer Counter - 0x48 - 32 + CTSUCHACAL + CTSU Channel Enable Control Register A + CTSUCHACA + 0x0C + 16 read-write - 0x00000000 - 0xFFFFFFFF - - - GTCNT - Counter - 0 - 31 - read-write - - + 0x0000 + 0xffff - 6 - 4 - - - A - A - 0 - - - B - B - 1 - - - C - C - 2 - - - E - E - 3 - - - D - D - 4 - - - F - F - 5 - - - GTCCR[%s] - General PWM Timer Compare Capture Register - 0x4C - 32 + CTSUCHAC0 + CTSU Channel Enable Control Register A + CTSUCHACA + 0x0C + 8 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTCCR - Compare Capture Register A - 0 - 31 - read-write - - + 0x00 + 0xff - GTPR - General PWM Timer Cycle Setting Register - 0x64 - 32 + CTSUCHAC1 + CTSU Channel Enable Control Register A + CTSUCHACA + 0x0D + 8 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTPR - Cycle Setting Register - 0 - 31 - read-write - - + 0x00 + 0xff - GTPBR - General PWM Timer Cycle Setting Buffer Register - 0x68 - 32 + CTSUCHACAH + CTSU Channel Enable Control Register A + CTSUCHACA + 0x0E + 16 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTPBR - Cycle Setting Buffer Register - 0 - 31 - read-write - - + 0x0000 + 0xffff - GTPDBR - General PWM Timer Cycle Setting Double-Buffer Register - 0x6C - 32 + CTSUCHAC2 + CTSU Channel Enable Control Register A + CTSUCHACAH + 0x0E + 8 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTPDBR - Cycle Setting Double-Buffer Register - 0 - 31 - read-write - - + 0x00 + 0xff - GTADTRA - A/D Converter Start Request Timing Register A - 0x70 - 32 + CTSUCHAC3 + CTSU Channel Enable Control Register A + CTSUCHACA + 0x0F + 8 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTADTRA - A/D Converter Start Request Timing Register A - 0 - 31 - read-write - - + 0x00 + 0xff - GTADTRB - A/D Converter Start Request Timing Register B - 0x7C + CTSUCHACB + CTSU Channel Enable Control Register B + 0x10 32 read-write - 0xFFFFFFFF - 0xFFFFFFFF + 0x00000000 + 0xffffffff - GTADTRB - A/D Converter Start Request Timing Register B + CHAC32 + CTSU Channel Enable Control B 0 - 31 + 0 read-write + + + 0 + Do not measure. + #0 + + + 1 + Measure. + #1 + + - - - - GTADTBRA - A/D Converter Start Request Timing Buffer Register A - 0x74 - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - GTADTBRA - A/D Converter Start Request Timing Buffer Register A - 0 - 31 + CHAC33 + CTSU Channel Enable Control B + 1 + 1 + read-write + + + 0 + Do not measure. + #0 + + + 1 + Measure. + #1 + + + + + CHAC34 + CTSU Channel Enable Control B + 2 + 2 read-write + + + 0 + Do not measure. + #0 + + + 1 + Measure. + #1 + + - - - - GTADTBRB - A/D Converter Start Request Timing Buffer Register B - 0x80 - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - GTADTBRB - A/D Converter Start Request Timing Buffer Register B - 0 - 31 + CHAC35 + CTSU Channel Enable Control B + 3 + 3 read-write + + + 0 + Do not measure. + #0 + + + 1 + Measure. + #1 + + - GTADTDBRA - A/D Converter Start Request Timing Double-Buffer Register A - 0x78 - 32 + CTSUCHACBL + CTSU Channel Enable Control Register B + CTSUCHACB + 0x10 + 16 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTADTDBRA - A/D Converter Start Request Timing Double-Buffer Register A - 0 - 31 - read-write - - + 0x0000 + 0xffff - GTADTDBRB - A/D Converter Start Request Timing Double-Buffer Register B - 0x84 - 32 + CTSUCHAC4 + CTSU Channel Enable Control Register B + CTSUCHACB + 0x10 + 8 read-write - 0xFFFFFFFF - 0xFFFFFFFF - - - GTADTDBRB - A/D Converter Start Request Timing Double-Buffer Register B - 0 - 31 - read-write - - + 0x00 + 0xff - GTDTCR - General PWM Timer Dead Time Control Register - 0x88 + CTSUCHTRCA + CTSU Channel Transmit/Receive Control Register A + 0x14 32 read-write 0x00000000 - 0xFFFFFFFF + 0xffffffff - TDFER - GTDVD Setting - 8 - 8 + CHTRC + CTSU Channel Transmit/Receive Control A + 0 + 0 read-write 0 - Set GTDVU and GTDVD separately + Reception #0 1 - Automatically set the value written to GTDVU to GTDVD + Transmission #1 - TDBDE - GTDVD Buffer Operation Enable - 5 - 5 + CHTRC02 + CTSU Channel Transmit/Receive Control A + 2 + 2 read-write 0 - Disable GTDVD buffer operation + Reception #0 1 - Enable GTDVD buffer operation + Transmission #1 - TDBUE - GTDVU Buffer Operation Enable + CHTRC04 + CTSU Channel Transmit/Receive Control A 4 4 read-write 0 - Disable GTDVU buffer operation + Reception #0 1 - Enable GTDVU buffer operation + Transmission #1 - TDE - Negative-Phase Waveform Setting - 0 - 0 + CHTRC05 + CTSU Channel Transmit/Receive Control A + 5 + 5 read-write 0 - GTCCRB is set without using GTDVU and GTDVD. + Reception #0 1 - GTDVU and GTDVD are used to set the compare match value for negative-phase waveform with dead time automatically in GTCCRB. + Transmission #1 - - - - GTDVU - General PWM Timer Dead Time Value Register U - 0x8C - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - GTDVU - Dead Time Value Register U - 0 - 31 + CHTRC06 + CTSU Channel Transmit/Receive Control A + 6 + 6 read-write + + + 0 + Reception + #0 + + + 1 + Transmission + #1 + + - - - - GTDVD - General PWM Timer Dead Time Value Register D - 0x90 - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - GTDVD - Dead Time Value Register D - 0 - 31 + CHTRC07 + CTSU Channel Transmit/Receive Control A + 7 + 7 read-write + + + 0 + Reception + #0 + + + 1 + Transmission + #1 + + - - - - GTDBU - General PWM Timer Dead Time Buffer Register U - 0x94 - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - GTDVU - Dead Time Buffer Register U - 0 - 31 + CHTRC08 + CTSU Channel Transmit/Receive Control A + 8 + 8 read-write + + + 0 + Reception + #0 + + + 1 + Transmission + #1 + + - - - - GTDBD - General PWM Timer Dead Time Buffer Register D - 0x98 - 32 - read-write - 0xFFFFFFFF - 0xFFFFFFFF - - GTDBD - Dead Time Buffer Register D - 0 - 31 + CHTRC09 + CTSU Channel Transmit/Receive Control A + 9 + 9 read-write + + + 0 + Reception + #0 + + + 1 + Transmission + #1 + + - - - - GTSOS - General PWM Timer Output Protection Function Status Register - 0x9C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - SOS - Output Protection Function Status - 0 - 1 - read-only + CHTRC10 + CTSU Channel Transmit/Receive Control A + 10 + 10 + read-write - 00 - Normal operation - #00 + 0 + Reception + #0 - 01 - Protected state (GTCCRA = 0 is set during transfer at trough or crest) - #01 + 1 + Transmission + #1 + + + + CHTRC11 + CTSU Channel Transmit/Receive Control A + 11 + 11 + read-write + - 10 - Protected state (GTCCRA >= GTPR is set during transfer at trough) - #10 + 0 + Reception + #0 - 11 - Protected state (GTCCRA >= GTPR is set during transfer at crest) - #11 + 1 + Transmission + #1 - - - - GTSOTR - General PWM Timer Output Protection Function Temporary Release Register - 0xA0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - SOTR - Output Protection Function Temporary Release - 0 - 0 + CHTRC12 + CTSU Channel Transmit/Receive Control A + 12 + 12 read-write 0 - Do not release protected state + Reception #0 1 - Release protected state + Transmission #1 - - - - - - R_GPT1 - 0x40078100 - - - R_GPT2 - 0x40078200 - - - R_GPT3 - 0x40078300 - - - R_GPT4 - 0x40078400 - - - R_GPT5 - 0x40078500 - - - R_GPT6 - 0x40078600 - - - R_GPT7 - 0x40078700 - - - R_GPT8 - 0x40078800 - - - R_GPT9 - 0x40078900 - - - R_GPT10 - 0x40078A00 - - - R_GPT11 - 0x40078B00 - - - R_GPT12 - 0x40078C00 - - - R_GPT13 - 0x40078D00 - - - R_GPT_ODC - PWM Delay Generation Circuit - 0x4007B000 - - 0x00000000 - 0x004 - registers - - - 0x00000018 - 0x020 - registers - - - - 4 - 4 - GTDLYR[%s] - PWM DELAY RISING - 0x18 - - A - GTIOCA Output Delay Register - 0 - 16 - read-write - 0x0000 - 0xFFFF - - - DLY - GTIOCnA Output Rising Edge Delay Setting - 0 - 4 - read-write - - - 00000 - No delay on rising edges - #00000 - - - others - Delay of DLY/32 times the PCLKD period is applied. - true - - - - - - - B - GTIOCB Output Delay Register - 2 - 16 - read-write - 0x0000 - 0xFFFF - - - DLY - GTIOCnA Output Rising Edge Delay Setting - 0 - 4 - read-write - - - 00000 - No delay on rising edges - #00000 - - - others - Delay of DLY/32 times the PCLKD period is applied. - true - - - - - - - - GTDLYF[%s] - PWM DELAY FALLING - 0x28 - - - GTDLYCR1 - PWM Output Delay Control Register1 - 0x00 - 16 - read-write - 0x0000 - 0xFFFF - - DLLMOD - DLL Mode Select - 8 - 8 + CHTRC13 + CTSU Channel Transmit/Receive Control A + 13 + 13 read-write 0 - 5 bit-mode + Reception #0 1 - 4 bit-mode + Transmission #1 - DLYRST - PWM Delay Generation Circuit Reset - 1 - 1 + CHTRC14 + CTSU Channel Transmit/Receive Control A + 14 + 14 read-write 0 - Normal operation + Reception #0 1 - Reset + Transmission #1 - DLLEN - DLL Operation Enable - 0 - 0 + CHTRC15 + CTSU Channel Transmit/Receive Control A + 15 + 15 read-write 0 - DLL operation is disabled + Reception #0 1 - DLL operation is enabled + Transmission #1 - - - - GTDLYCR2 - PWM Output Delay Control Register2 - 0x02 - 16 - read-write - 0x0000 - 0xFFFF - - 1 - 1 - DLYDENB%s - PWM Delay Generation Circuit Disenable for GTIOCB - 12 - 12 + CHTRC16 + CTSU Channel Transmit/Receive Control A + 16 + 16 read-write 0 - Delay generation circuit of GTIOCB is based on DLYEN1. + Reception #0 1 - Delay generation circuit of GTIOCB is disabled. + Transmission #1 - 1 - 1 - DLYEN%s - PWM Delay Generation Circuit enable - 8 - 8 + CHTRC17 + CTSU Channel Transmit/Receive Control A + 17 + 17 read-write 0 - Delay generation circuit of channel is enabled + Reception #0 1 - Delay generation circuit of channel is disabled. + Transmission #1 - 4 - 1 - DLYBS%s - PWM Delay Generation Circuit bypass - 0 - 0 + CHTRC18 + CTSU Channel Transmit/Receive Control A + 18 + 18 read-write 0 - Delay generation circuit of channel is bypassed. + Reception #0 1 - Delay generation circuit of channel is not bypassed. + Transmission #1 - - - - - - R_GPT_OPS - Output Phase Switching for GPT - 0x40078FF0 - - 0x00000000 - 0x04 - registers - - - - OPSCR - Output Phase Switching Control Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - NFCS - External Input Noise Filter Clock selectionNoise filter sampling clock setting of the external input. - 30 - 31 + CHTRC21 + CTSU Channel Transmit/Receive Control A + 21 + 21 read-write - 00 - PCLK/1 - #00 - - - 01 - PCLK/4 - #01 - - - 10 - PCLK/16 - #10 + 0 + Reception + #0 - 11 - PCLK/64 - #11 + 1 + Transmission + #1 - NFEN - External Input Noise Filter Enable - 29 - 29 + CHTRC22 + CTSU Channel Transmit/Receive Control A + 22 + 22 read-write 0 - Do not use a noise filter to the external input. + Reception #0 1 - Use a noise filter to the external input. + Transmission #1 - GODF - Group output disable function - 26 - 26 + CHTRC23 + CTSU Channel Transmit/Receive Control A + 23 + 23 read-write 0 - This bit function is ignored. + Reception #0 1 - Group disable will clear OPSCR.EN Bit. + Transmission #1 - GRP - Output disabled source selection + CHTRC24 + CTSU Channel Transmit/Receive Control A 24 - 25 + 24 read-write - 00 - Select Group A output disable source - #00 - - - 01 - Select Group B output disable source - #01 - - - 10 - Select Group C output disable source - #10 + 0 + Reception + #0 - 11 - Select Group D output disable source - #11 + 1 + Transmission + #1 - ALIGN - Input phase alignment - 21 - 21 + CHTRC25 + CTSU Channel Transmit/Receive Control A + 25 + 25 read-write 0 - Input phase is aligned to PCLK. + Reception #0 1 - Input phase is aligned PWM. + Transmission #1 - RV - Output phase rotation direction reversal - 20 - 20 + CHTRC26 + CTSU Channel Transmit/Receive Control A + 26 + 26 read-write 0 - U/V/W-Phase output + Reception #0 1 - Output to reverse the V / W-phase + Transmission #1 - INV - Invert-Phase Output Control - 19 - 19 + CHTRC27 + CTSU Channel Transmit/Receive Control A + 27 + 27 read-write 0 - Positive Logic (Active High)output + Reception #0 1 - Negative Logic (Active Low)output + Transmission #1 - N - Negative-Phase Output (N) Control - 18 - 18 + CHTRC28 + CTSU Channel Transmit/Receive Control A + 28 + 28 read-write 0 - Level signal output + Reception #0 1 - PWM signal output (PWM of GPT0) + Transmission #1 - P - Positive-Phase Output (P) Control - 17 - 17 + CHTRC29 + CTSU Channel Transmit/Receive Control A + 29 + 29 read-write 0 - Level signal output + Reception #0 1 - PWM signal output (PWM of GPT0) + Transmission #1 - FB - External Feedback Signal EnableThis bit selects the input phase from the software settings and external input. - 16 - 16 + CHTRC30 + CTSU Channel Transmit/Receive Control A + 30 + 30 read-write 0 - Select the external input. + Reception #0 1 - Select the soft setting(OPSCR.UF, VF, WF). + Transmission #1 - EN - Enable-Phase Output Control - 8 - 8 + CHTRC31 + CTSU Channel Transmit/Receive Control A + 31 + 31 read-write 0 - Not Output(Hi-Z external terminals). + Reception #0 1 - Output + Transmission #1 - - W - Input W-Phase MonitorThis bit monitors the state of the input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Software settings (UF/VF/WF) - 6 - 6 - read-only - - - V - Input V-Phase MonitorThis bit monitors the state of the input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Software settings (UF/VF/WF) - 5 - 5 - read-only - - - U - Input U-Phase MonitorThis bit monitors the state of the input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Software settings (UF/VF/WF) - 4 - 4 - read-only - - - WF - Input Phase Soft Setting UFThis bit sets the input phase by the software settings.This bit setting is valid when the OPSCR.FB bit = 1. - 2 - 2 - read-write - - - VF - Input Phase Soft Setting VFThis bit sets the input phase by the software settings.This bit setting is valid when the OPSCR.FB bit = 1. - 1 - 1 - read-write - - - UF - Input Phase Soft Setting WFThis bit sets the input phase by the software settings.This bit setting is valid when the OPSCR.FB bit = 1. - 0 - 0 - read-write - - - - - R_GPT_POEG0 - Port Output Enable for GPT - 0x40042000 - - 0x00000000 - 0x04 - registers - - - POEGG - POEG Group Setting Register - 0x00 + CTSUCHTRCAL + CTSU Channel Transmit/Receive Control Register A + CTSUCHTRCA + 0x14 + 16 + read-write + 0x0000 + 0xffff + + + CTSUCHTRC0 + CTSU Channel Transmit/Receive Control Register A + CTSUCHTRCA + 0x14 + 8 + read-write + 0x00 + 0xff + + + CTSUCHTRC1 + CTSU Channel Transmit/Receive Control Register A + CTSUCHTRCA + 0x15 + 8 + read-write + 0x00 + 0xff + + + CTSUCHTRCAH + CTSU Channel Transmit/Receive Control Register A + CTSUCHTRCA + 0x16 + 16 + read-write + 0x0000 + 0xffff + + + CTSUCHTRC2 + CTSU Channel Transmit/Receive Control Register A + CTSUCHTRCAH + 0x16 + 8 + read-write + 0x00 + 0xff + + + CTSUCHTRC3 + CTSU Channel Transmit/Receive Control Register A + CTSUCHTRCA + 0x17 + 8 + read-write + 0x00 + 0xff + + + CTSUCHTRCB + CTSU Channel Transmit/Receive Control Register B + 0x18 32 read-write 0x00000000 - 0xFFFFFFFF + 0xffffffff - NFCS - Noise Filter Clock Select - 30 - 31 + CHTRC32 + CTSU Channel Transmit/Receive Control B + 0 + 0 read-write - 00 - Sampling GTETRG pin input level for three times in every PCLKB. - #00 - - - 01 - Sampling GTETRG pin input level for three times in every PCLKB /8. - #01 - - - 10 - Sampling GTETRG pin input level for three times in every PCLKB /32. - #10 + 0 + Reception + #0 - 11 - Sampling GTETRG pin input level for three times in every PCLKB /128. - #11 + 1 + Transmission + #1 - NFEN - Noise Filter Enable - 29 - 29 + CHTRC33 + CTSU Channel Transmit/Receive Control B + 1 + 1 read-write 0 - Filtering noise disabled + Reception #0 1 - Filtering noise enabled + Transmission #1 - INV - GTETRG Input Reverse - 28 - 28 + CHTRC34 + CTSU Channel Transmit/Receive Control B + 2 + 2 read-write 0 - GTETRG Input + Reception #0 1 - GTETRG Input Reversed. + Transmission #1 - ST - GTETRG Input Status Flag - 16 - 16 - read-only + CHTRC35 + CTSU Channel Transmit/Receive Control B + 3 + 3 + read-write 0 - GTETRG input after filtering is 0. + Reception #0 1 - GTETRG input after filtering is 1. + Transmission #1 + + + + CTSUCHTRCBL + CTSU Channel Transmit/Receive Control Register B + CTSUCHTRCB + 0x18 + 16 + read-write + 0x0000 + 0xffff + + + CTSUCHTRC4 + CTSU Channel Transmit/Receive Control Register B + CTSUCHTRCB + 0x18 + 8 + read-write + 0x00 + 0xff + + + CTSUSR + CTSU Status Register + 0x1C + 32 + read-write + 0x00000000 + 0xffffffff + - 6 - 1 - CDRE%s - Comparator Disable Request Enable. Note: Can be modified only once after a reset. - 8 - 8 + MFC + CTSU Multi-clock Counter + 0 + 1 read-write - 0 - A disable request of comparator 0 disabled. - #0 + 00 + Multi-clock 0 + #00 - 1 - A disable request of comparator 0 enabled. - #1 + 01 + Multi-clock 1 + #01 + + + 10 + Multi-clock 2 + #10 + + + 11 + Multi-clock 3 + #11 - OSTPE - Oscillation Stop Detection EnableNote: Can be modified only once after a reset. + ICOMPRST + CTSU CTSUICOMP1 Flag Reset + 5 + 5 + write-only + + + ICOMP1 + CTSU Sense Current Error Monitor 6 6 - read-write + read-only 0 - A output-disable request from the oscillation stop detection disabled. + Normal sensor current #0 1 - A output-disable request from the oscillation stop detection enabled. + Abnormal sensor current #1 - IOCE - Enable for GPT Output-Disable RequestNote: Can be modified only once after a reset. - 5 - 5 - read-write + ICOMP0 + TSCAP Voltage Error Monitor + 7 + 7 + read-only 0 - Disable output-disable requests from GPT disable request + Normal TSCAP voltage #0 1 - Enable output-disable requests from GPT disable request + Abnormal TSCAP voltage #1 - PIDE - Port Input Detection EnableNote: Can be modified only once after a reset. - 4 - 4 - read-write + STC + CTSU Measurement Status Counter + 8 + 10 + read-only - 0 - A output-disable request from the GTETRG pins disabled. - #0 + 000 + Status 0 + #000 - 1 - A output-disable request from the GTETRG pins enabled. - #1 + 001 + Status 1 + #001 + + + 010 + Status 2 + #010 + + + 011 + Status 3 + #011 + + + 100 + Status 4 + #100 + + + 101 + Status 5 + #101 - SSF - Software Stop Flag - 3 - 3 - read-write + DTSR + CTSU Data Transfer Status Flag + 12 + 12 + read-only 0 - A output-disable request from software has not been generated. + Read #0 1 - A output-disable request from software has been generated. + Not read #1 - OSTPF - Oscillation Stop Detection Flag - 2 - 2 + SENSOVF + CTSU Sensor Counter Overflow Flag + 13 + 13 read-write - zeroToClear - modify 0 - A output-disable request from the oscillation stop detection has not been generated. + No overflow occurred #0 1 - A output-disable request from the oscillation stop detection has been generated. + Overflow occurred #1 - IOCF - Real Time Overcurrent Detection Flag - 1 - 1 - read-write - zeroToClear - modify + PS + CTSU Mutual Capacitance Status Flag + 15 + 15 + read-only 0 - A output-disable request from GPT disable request or comparator interrupt has not been generated. + First measurement #0 1 - A output-disable request from GPT disable request or comparator interrupt has been generated. + Second measurement #1 - PIDF - Port Input Detection Flag - 0 - 0 + CFCRDCH + CTSU CFC Read Channel Select + 16 + 21 read-write - zeroToClear - modify - 0 - A output-disable request from the GTETRG pin has not been generated. - #0 + 0x00 + TS00 + 0x00 - 1 - A output-disable request from the GTETRG pin has been generated. - #1 + 0x02 + TS02 (CFC) + 0x02 + + + 0x04 + TS04 + 0x04 + + + 0x05 + TS05 + 0x05 + + + 0x06 + TS06 + 0x06 + + + 0x07 + TS07 + 0x07 + + + 0x08 + TS08 (CFC) + 0x08 + + + 0x09 + TS09 (CFC) + 0x09 + + + 0x0A + TS10 (CFC) + 0x0a + + + 0x0B + TS11 (CFC) + 0x0b + + + 0x0C + TS12 (CFC) + 0x0c + + + 0x0D + TS13 (CFC) + 0x0d + + + 0x0E + TS14 (CFC) + 0x0e + + + 0x0F + TS15 (CFC) + 0x0f + + + 0x10 + TS16 (CFC) + 0x10 + + + 0x11 + TS17 + 0x11 + + + 0x12 + TS18 + 0x12 + + + 0x15 + TS21 + 0x15 + + + 0x16 + TS22 + 0x16 + + + 0x17 + TS23 + 0x17 + + + 0x18 + TS24 + 0x18 + + + 0x19 + TS25 + 0x19 + + + 0x1A + TS26 (CFC) + 0x1a + + + 0x1B + TS27 (CFC) + 0x1b + + + 0x1C + TS28 (CFC) + 0x1c + + + 0x1D + TS29 (CFC) + 0x1d + + + 0x1E + TS30 (CFC) + 0x1e + + + 0x1F + TS31 (CFC) + 0x1f + + + 0x20 + TS32 (CFC) + 0x20 + + + 0x21 + TS33 (CFC) + 0x21 + + + 0x22 + TS34 (CFC) + 0x22 + + + 0x23 + TS35 (CFC) + 0x23 - - - - R_GPT_POEG1 - 0x40042100 - - - R_GPT_POEG2 - 0x40042200 - - - R_GPT_POEG3 - 0x40042300 - - - R_ICU - Interrupt Controller Unit - 0x40006000 - - 0x00000000 - 0x010 - registers - - - 0x00000100 - 0x01 - registers - - - 0x00000120 - 0x02 - registers - - - 0x00000130 - 0x02 - registers - - - 0x00000140 - 0x02 - registers - - - 0x000001A0 - 0x04 - registers - - - 0x00000200 - 0x02 - registers - - - 0x00000280 - 0x020 - registers - - - 0x00000300 - 0x180 - registers - - - 16 - 0x1 - IRQCR[%s] - IRQ Control Register %s - 0x000 + CTSUSRL + CTSU Status Register + CTSUSR + 0x1C + 16 + read-write + 0x0000 + 0xffff + + + CTSUSR0 + CTSU Status Register + CTSUSR + 0x1C 8 read-write 0x00 - 0xFF + 0xff + + + CTSUST + CTSU Status Register + CTSUSR + 0x1D + 8 + read-write + 0x00 + 0xff + + + CTSUSRH + CTSU Status Register + CTSUSR + 0x1E + 16 + read-write + 0x0000 + 0xffff + + + CTSUSR2 + CTSU Status Register + CTSUSRH + 0x1E + 8 + read-write + 0x00 + 0xff + + + CTSUSO + CTSU Sensor Offset Register + 0x20 + 32 + read-write + 0x00000000 + 0xffffffff - FLTEN - IRQ Digital Filter Enable - 7 - 7 + SO + CTSU Sensor Offset Adjustment + 0 + 9 + read-write + + + SNUM + CTSU Measurement Count Setting + 10 + 17 + read-write + + + SSDIV + CTSU Spectrum Diffusion Frequency Division Setting + 20 + 23 + read-write + + + SDPA + CTSU Base Clock Setting + 24 + 31 + read-write + + + + + CTSUSO0 + CTSU Sensor Offset Register + CTSUSO + 0x20 + 16 + read-write + 0x0000 + 0xffff + + + CTSUSO1 + CTSU Sensor Offset Register + CTSUSO + 0x22 + 16 + read-write + 0x0000 + 0xffff + + + CTSUSCNT + CTSU Sensor Counter Register + 0x24 + 32 + read-only + 0x00000000 + 0xffffffff + + + SENSCNT + CTSU Sensor Counter + 0 + 15 + read-only + + + + + CTSUSC + CTSU Sensor Counter Register + CTSUSCNT + 0x24 + 16 + read-only + 0x0000 + 0xffff + + + CTSUCALIB + CTSU Calibration Register + 0x28 + 32 + read-write + 0x00000000 + 0xffffffff + + + TSOD + CTSU TS Pins Fixed Output Select + 2 + 2 read-write 0 - Digital filter disabled. + Electrostatic capacitance measurement mode #0 1 - Digital filter enabled. + TS pins fix output (High output/Low output). #1 - FCLKSEL - IRQ Digital Filter Sampling Clock Select - 4 - 5 + DRV + CTSU Calibration Setting Bit 1 + 3 + 3 read-write - 00 - PCLKB - #00 - - - 01 - PCLKB/8 - #01 - - - 10 - PCLKB/32 - #10 + 0 + Electrostatic capacitance measurement mode + #0 - 11 - PCLKB/64 - #11 + 1 + Calibration setting 1 + #1 - IRQMD - IRQ Detection Sense Select - 0 - 1 + SUCLKEN + CTSU SUCLK Enable Control + 6 + 6 read-write - 00 - Falling edge - #00 - - - 01 - Rising edge - #01 - - - 10 - Rising and falling edges - #10 + 0 + SUCLK operation is disabled. + #0 - 11 - Low level - #11 + 1 + SUCLK operation is enabled. + #1 - - - - NMISR - Non-Maskable Interrupt Status Register - 0x140 - 16 - read-only - 0x0000 - 0xFFFF - - SPEST - CPU Stack pointer monitor Interrupt Status Flag - 12 - 12 - read-only + TSOC + CTSU Calibration Setting Bit 2 + 7 + 7 + read-write 0 - Interrupt not requested + Electrostatic capacitance measurement mode #0 1 - Interrupt requested. + Calibration setting 2 #1 - BUSMST - MPU Bus Master Error Interrupt Status Flag - 11 - 11 - read-only + IOC + CTSU Transfer Pins Control + 9 + 9 + read-write 0 - Interrupt not requested + Low level #0 1 - Interrupt requested. + High level #1 - BUSSST - MPU Bus Slave Error Interrupt Status Flag + CFCRDMD + CTSU CFC Counter Read Mode Select 10 10 - read-only + read-write 0 - Interrupt not requested + Read by DTC #0 1 - Interrupt requested. + Read by CPU #1 - RECCST - RAM ECC Error Interrupt Status Flag - 9 - 9 - read-only + DCOFF + CTSU Down Converter Control + 11 + 11 + read-write 0 - Interrupt not requested + Normal operation mode #0 1 - Interrupt requested. + The down converter is off. #1 - RPEST - RAM Parity Error Interrupt Status Flag - 8 - 8 - read-only + CFCMODE + CTSU CFC Current Source Switching + 22 + 22 + read-write 0 - Interrupt not requested + CFC current measurement (normal mode) #0 1 - Interrupt requested. + External current measurement for calibration #1 - NMIST - NMI Status Flag - 7 - 7 - read-only + DACCARRY + CTSU DAC Upper Current Source Carry Control + 25 + 25 + read-write 0 - Interrupt not requested + Do not carry #0 1 - Interrupt requested. + Carry #1 - OSTST - Oscillation Stop Detection Interrupt Status Flag - 6 - 6 - read-only + SUCARRY + CTSU CCO Carry Control + 27 + 27 + read-write 0 - Interrupt not requested for main oscillation stop + Do not carry #0 1 - Interrupt requested for main oscillation stop. + Carry #1 - VBATTST - VBATT monitor Interrupt Status Flag - 4 - 4 - read-only + DACCLK + CTSU DAC Modulation Circuit Clock Select + 28 + 28 + read-write 0 - Interrupt not requested + Divided PCLK specified by CTSUCRA.CLK[1:0] bits #0 1 - Interrupt requested. + SUCLK #1 - LVD2ST - Voltage-Monitoring 2 Interrupt Status Flag - 3 - 3 - read-only + CCOCLK + CTSU CCO Modulation Circuit Clock Select + 29 + 29 + read-write 0 - Interrupt not requested + Divided PCLK specified by CTSUCRA.CLK[1:0] bits #0 1 - Interrupt requested. + SUCLK #1 - LVD1ST - Voltage-Monitoring 1 Interrupt Status Flag - 2 - 2 - read-only + CCOCALIB + CTSU CCO Calibration Mode Select + 30 + 30 + read-write 0 - Interrupt not requested + Normal mode #0 1 - Interrupt requested. + Oscillator calibration mode #1 + + + + CTSUDBGR0 + CTSU Calibration Register + CTSUCALIB + 0x28 + 16 + read-write + 0x0000 + 0xffff + + + CTSUDBGR1 + CTSU Calibration Register + CTSUCALIB + 0x2A + 16 + read-write + 0x0000 + 0xffff + + + CTSUSUCLKA + CTSU Sensor Unit Clock Control Register A + 0x2C + 32 + read-write + 0x00000000 + 0xffffffff + + + CTSUSUCLK0 + CTSU Sensor Unit Clock Control Register A + CTSUSUCLKA + 0x2C + 16 + read-write + 0x0000 + 0xffff + + + CTSUSUCLK1 + CTSU Sensor Unit Clock Control Register A + CTSUSUCLKA + 0x2E + 16 + read-write + 0x0000 + 0xffff + + + CTSUSUCLKB + CTSU Sensor Unit Clock Control Register B + 0x30 + 32 + read-write + 0x00000000 + 0xffffffff + + + SUADJ2 + CTSU SUCLK Frequency Adjustment + 0 + 7 + read-write + - WDTST - WDT Underflow/Refresh Error Status Flag - 1 - 1 + SUMULTI2 + CTSU SUCLK Multiplier Rate Setting + 8 + 15 + read-write + + + SUADJ3 + CTSU SUCLK Frequency Adjustment + 16 + 23 + read-write + + + SUMULTI3 + CTSU SUCLK Multiplier Rate Setting + 24 + 31 + read-write + + + + + CTSUSUCLK2 + CTSU Sensor Unit Clock Control Register B + CTSUSUCLKB + 0x30 + 16 + read-write + 0x0000 + 0xffff + + + CTSUSUCLK3 + CTSU Sensor Unit Clock Control Register B + CTSUSUCLKB + 0x32 + 16 + read-write + 0x0000 + 0xffff + + + CTSUCFCCNT + CTSU CFC Counter Register + 0x34 + 32 + read-only + 0x00000000 + 0xffffffff + + + CFCCNT + CTSU CFC Counter + 0 + 15 read-only + + + + + CTSUCFCCNTL + CTSU CFC Counter Register + CTSUCFCCNT + 0x34 + 16 + read-only + 0x0000 + 0xffff + + + + + R_DAC + D/A Converter + 0x4005E000 + + 0x00000000 + 0x00A + registers + + + + DACR + D/A Control Register + 0x04 + 8 + read-write + 0x1F + 0xFF + + + DAE + D/A Enable + 5 + 5 + read-write 0 - Interrupt not requested + Control D/A conversion of channels 0 and 1 individually #0 - - 1 - Interrupt requested. - #1 - - IWDTST - IWDT Underflow/Refresh Error Status Flag - 0 - 0 - read-only + 2 + 1 + DAOE%s + D/A Output Enable 0 + 6 + 6 + read-write 0 - Interrupt not requested + Analog output of channel 0 (DA0) is disabled. #0 1 - Interrupt requested. + D/A conversion of channel 0 is enabled. Analog output of channel 0 (DA0) is enabled. #1 @@ -41022,238 +19347,369 @@ FMS2,1,0: - NMIER - Non-Maskable Interrupt Enable Register - 0x120 + 2 + 2 + DADR[%s] + D/A Data Register + 0x00 16 read-write 0x0000 0xFFFF - SPEEN - CPU Stack pointer monitor Interrupt Enable - 12 - 12 + DADR + D/A Data RegisterNOTE: When DADPR.DPSEL = 0, the high-order 4 bits are fixed to 0: right justified format. When DADPR.DPSEL = 1, the low-order 4 bits are fixed to 0: left justified format. + 0 + 15 + read-write + + + + + DADPR + DADR0 Format Select Register + 0x05 + 8 + read-write + 0x00 + 0xFF + + + DPSEL + DADRm Format Select + 7 + 7 read-write 0 - Disabled + Right justified format. #0 1 - Enabled. + Left justified format. #1 + + + + DAADSCR + D/A-A/D Synchronous Start Control Register + 0x06 + 8 + read-write + 0x00 + 0xFF + - BUSMEN - MPU Bus Master Error Interrupt Enable - 11 - 11 + DAADST + D/A-A/D Synchronous Conversion + 7 + 7 read-write 0 - Disabled + D/A converter operation does not synchronize with A/D converter operation (unit 1) (countermeasure against interference between D/A and A/D conversions is disabled). #0 1 - Enabled. + D/A converter operation synchronizes with A/D converter operation (unit 1) (countermeasure against interference between D/A and A/D conversions is enabled). #1 + + + + DAVREFCR + D/A VREF Control Register + 0x07 + 8 + read-write + 0x00 + 0xFF + - BUSSEN - MPU Bus Slave Error Interrupt Enable - 10 - 10 + REF + D/A Reference Voltage Select + 0 + 2 read-write - 0 - Disabled - #0 + 000 + Not selected + #000 - 1 - Enabled. - #1 + 001 + AVCC0/AVSS0 + #001 + + + 011 + Internal reference voltage/AVSS0 + #011 + + + 110 + VREFH/VREFL + #110 + + + others + Setting prohibited + true + + + + DAPC + D/A Switch Charge Pump Control Register + 0x09 + 8 + read-write + 0x00 + 0xFF + - RECCEN - RAM ECC Error Interrupt Enable - 9 - 9 + PUMPEN + Charge Pump Enable + 0 + 0 read-write 0 - Disabled + Charge pump disabled #0 1 - Enabled. + Charge pump enabled #1 + + + + DAAMPCR + D/A Output Amplifier Control Register + 0x08 + 8 + read-write + 0x1F + 0xFF + - RPEEN - RAM Parity Error Interrupt Enable - 8 - 8 + 2 + 1 + DAAMP%s + Amplifier Control + 6 + 6 read-write 0 - Disabled + Do not use channel output amplifier #0 - - 1 - Enabled. - #1 - + + + + DAASWCR + D/A Amplifier Stabilization Wait Control Register + 0x1C + 8 + read-write + 0x00 + 0xFF + - NMIEN - NMI Pin Interrupt Enable + DAASW1 + Set the DAASW1 bit to 1 in the initialization procedure to wait for stabilization of the output amplifier of D/A channel 1. When DAASW1 is set to 1, D/A conversion operates, but the conversion result D/A is not output from channel 1. When the DAASW1 bit is 0, the stabilization wait time stops, and the D/A conversion result of channel 1 is output through the output amplifier. 7 7 read-write 0 - Disabled + Amplifier stabilization wait off (output) for channel 1 #0 1 - Enabled. + Amplifier stabilization wait on (high-Z) for channel 1 #1 - OSTEN - Oscillation Stop Detection Interrupt Enable + DAASW0 + Set the DAASW0 bit to 1 in the initialization procedure to wait for stabilization of the output amplifier of D/A channel 0. When DAASW0 is set to 1, D/A conversion operates, but the conversion result D/A is not output from channel 0. When the DAASW0 bit is 0, the stabilization wait time stops, and the D/A conversion result of channel 0 is output through the output amplifier. 6 6 read-write 0 - Disabled + Amplifier stabilization wait off (output) for channel 0 #0 1 - Enabled. + Amplifier stabilization wait on (high-Z) for channel 0 #1 + + + + DAADUSR + D/A A/D Synchronous Unit Select Register + 0x10C0 + 8 + read-write + 0x00 + 0xFF + - VBATTEN - VBATT monitor Interrupt Enable - 4 - 4 + AMADSEL1 + The DAADUSR register selects the target ADC12 unit for D/A and A/D synchronous conversions. Set bit [1] to 1 to select unit 1 as the target synchronous unit for the MCU. When setting the DAADSCR.DAADST bit to 1 for synchronous conversions, select the target unit in this register in advance. Only set the DAADUSR register while the ADCSR.ADST bit of the ADC12 is set to 0 and the DAADSCR.DAADST bit is set to 0. + 6 + 6 read-write 0 - Disabled + Do not select unit 1 #0 1 - Enabled. + Select unit 1 #1 + + + + + + R_DAC8 + 8-Bit D/A Converter + 0x4009E000 + + 0x00000000 + 0x002 + registers + + + 0x00000003 + 0x01 + registers + + + 0x00000006 + 0x002 + registers + + + + DAM + D/A Converter Mode Register + 0x03 + 8 + read-write + 0x00 + 0xFF + - LVD2EN - Voltage-Monitoring 2 Interrupt Enable - 3 - 3 + DACE1 + D/A operation enable 1 + 5 + 5 read-write 0 - Disabled + D/A conversion disabled for channel 1 #0 1 - Enabled. + D/A conversion enabled for channel 1 #1 - LVD1EN - Voltage-Monitoring 1 Interrupt Enable - 2 - 2 + DACE0 + D/A operation enable 0 + 4 + 4 read-write 0 - Disabled + D/A conversion disabled for channel 0 #0 1 - Enabled. + D/A conversion enabled for channel 0 #1 - WDTEN - WDT Underflow/Refresh Error Interrupt Enable + DAMD1 + D/A operation mode select 1 1 1 read-write 0 - Disabled + Channel 1 for normal operation mode #0 1 - Enabled. + Channel 1 for real-time output mode(event link) #1 - IWDTEN - IWDT Underflow/Refresh Error Interrupt Enable + DAMD0 + D/A operation mode select 0 0 0 read-write 0 - Disabled + Channel 0 for normal operation mode #0 1 - Enabled. + Channel 0 for real-time output mode(event link) #1 @@ -41261,238 +19717,536 @@ FMS2,1,0: - NMICLR - Non-Maskable Interrupt Status Clear Register - 0x130 - 16 + 2 + 0x01 + DACS[%s] + D/A Conversion Value Setting Register %s + 0x00 + 8 read-write - 0x0000 - 0xFFFF + 0x00 + 0xFF - SPECLR - CPU Stack Pointer Monitor Interrupt Clear - 12 - 12 - write-only + DACS + DACS D/A conversion store data + 0 + 7 + read-write + + + + + DACADSCR + D/A A/D Synchronous Start Control Register + 0x06 + 8 + read-write + 0x00 + 0xFF + + + DACADST + D/A A/D Synchronous Conversion + 0 + 0 + read-write 0 - No effect. + Do not synchronize DAC8 with ADC16 operation (disable interference reduction between D/A and A/D conversion) #0 1 - Clear the NMISR.SPEST flag. + Synchronize DAC8 with ADC16 operation (enable interference reduction between D/A and A/D conversion). #1 + + + + DACPC + D/A SW Charge Pump Control Register + 0x07 + 8 + read-write + 0x00 + 0xFF + - BUSMCLR - Bus Master Error Clear - 11 - 11 - write-only + PUMPEN + Charge pump enable + 0 + 0 + read-write 0 - No effect. + Charge pump disable #0 1 - Clear the NMISR.BUSMST flag. + Charge pump enable #1 + + + + + + R_DALI0 + Digital Addressable Lighting Interface + 0x4008F000 + + 0x00000000 + 0x018 + registers + + + 0x0000001E + 0x006 + registers + + + 0x00000026 + 0x004 + registers + + + 0x0000002E + 0x006 + registers + + + 0x00000036 + 0x02 + registers + + + 0x0000003A + 0x004 + registers + + + + BTVTHR1 + DALI Bit Timing Violation Threshold Register 1 + 0x000 + 16 + read-write + 0x4F00 + 0xFFFF + + + BTV2 + Bit Timing Violation Threshold 2Specifies the bit timing violation threshold value 2.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 8 + 15 + read-write + - BUSSCLR - Bus Slave Error Clear - 10 - 10 - write-only + BTV1 + Bit Timing Violation Threshold 1Specifies the bit timing violation threshold value 1.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 6 + read-write + + + + + BTVTHR2 + DALI Bit Timing Violation Threshold Register 2 + 0x002 + 16 + read-write + 0x654F + 0xFFFF + + + BTV4 + Bit Timing Violation Threshold 4Specifies the bit timing violation threshold value 4.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 8 + 15 + read-write + + + BTV3 + Bit Timing Violation Threshold 3Specifies the bit timing violation threshold value 3.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 7 + read-write + + + + + BTVTHR3 + DALI Bit Timing Violation Threshold Register 3 + 0x004 + 16 + read-write + 0x009D + 0xFFFF + + + BTV5 + Bit Timing Violation Threshold 5Specifies the bit timing violation threshold value 5.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 7 + read-write + + + + + BTVTHR4 + DALI Bit Timing Violation Threshold Register 4 + 0x006 + 16 + read-write + 0x00DB + 0xFFFF + + + BTV6 + Bit Timing Violation Threshold 6Specifies the bit timing violation threshold value 6.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 8 + read-write + + + + + COLTHR1 + DALI Collision Threshold Register 1 + 0x008 + 16 + read-write + 0x380F + 0xFFFF + + + COL2 + Collision Threshold 2Specifies the collision threshold value 2.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 8 + 13 + read-write + + + COL1 + Collision Threshold 1Specifies the collision threshold value 1.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 5 + read-write + + + + + COLTHR2 + DALI Collision Threshold Register 2 + 0x00A + 16 + read-write + 0x443C + 0xFFFF + + + COL4 + Collision Threshold 4Specifies the collision threshold value 4.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 8 + 14 + read-write + + + COL3 + Collision Threshold 3Specifies the collision threshold value 3.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 6 + read-write + + + + + COLTHR3 + DALI Collision Threshold Register 3 + 0x00C + 16 + read-write + 0x7148 + 0xFFFF + + + COL6 + Collision Threshold 6Specifies the collision threshold value 6.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 8 + 14 + read-write + + + COL5 + Collision Threshold 5Specifies the collision threshold value 5.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 6 + read-write + + + + + COLTHR4 + DALI Collision Threshold Register 4 + 0x00E + 16 + read-write + 0x8879 + 0xFFFF + + + COL8 + Collision Threshold 8Specifies the collision threshold value 8.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 8 + 15 + read-write + + + COL7 + Collision Threshold 7Specifies the collision threshold value 7.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 7 + read-write + + + + + COLTHR5 + DALI Collision Threshold Register 5 + 0x010 + 16 + read-write + 0x008E + 0xFFFF + + + COL9 + Collision Threshold 9Specifies the collision threshold value 9.Note 1. These bits must be modified when the DALI0.CTR1.RE bit is 0 and the DALI0.CTR1.TE bit is 0. + 0 + 7 + read-write + + + + + CNFR1 + DALI Configuration Register 1 + 0x012 + 16 + read-write + 0x00FF + 0xFFFF + + + CHL + Character Length + 12 + 14 + read-write - 0 - No effect. - #0 + 000 + 8 bits + #000 + + + 001 + 16 bits + #001 + + + 010 + 24 bits + #010 + + + 011 + 32 bits + #011 - 1 - Clear the NMISR.BUSSST flag. - #1 + 100 + 20 bits + #100 - - - - RECCCLR - SRAM ECC Error Clear - 9 - 9 - write-only - - 0 - No effect. - #0 + 101 + 17 bits + #101 - 1 - Clear the NMISR.RECCST flag. - #1 + others + Setting prohibited + true - RPECLR - SRAM Parity Error Clear + CKS + Clock Select 8 - 8 - write-only + 9 + read-write - 0 - No effect. - #0 + 00 + PCLK clock (x = 0) + #00 - 1 - Clear the NMISR.RPEST flag. - #1 + 01 + PCLK/4 clock (x = 1) + #01 - - - - NMICLR - NMI Clear - 7 - 7 - write-only - - 0 - No effect. - #0 + 10 + PCLK/16 clock (x = 2) + #10 - 1 - Clear the NMISR.NMIST flag. - #1 + 11 + PCLK/64 clock (x = 3) + #11 - OSTCLR - OST Clear - 6 - 6 - write-only + BR + Clock SelectBit rate setting example is shown in Table + 0 + 7 + read-write + + + + + CNFR2 + DALI Configuration Register 2 + 0x014 + 16 + read-write + 0x0000 + 0xFFFF + + + CDM0 + Collision Detect ModeNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. + 5 + 5 + read-write 0 - No effect. + Destroy area #0 1 - Clear the NMISR.OSTST flag. + Destroy area and avoidance area (edge) #1 - VBATTCLR - VBATT Clear + CDE + Collision Detect EnableNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. 4 4 - write-only + read-write 0 - No effect. + Collision detection is disabled. #0 1 - Clear the NMISR.VBATTST flag. + Collision detection is enabled. #1 - LVD2CLR - LVD2 Clear + TXWE + DTX Width Modulation EnableNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. 3 3 - write-only + read-write 0 - No effect. + The width of DTX0 waveform is not modulated. #0 1 - Clear the NMISR.LVD2ST flag. + The width of DTX0 waveform is modulated. #1 - LVD1CLR - LVD1 Clear + SGA + Save an Edge of Gray Area ModeNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. 2 2 - write-only + read-write 0 - No effect. + The edge allowable area of the DRX0 input signal is the default. #0 1 - Clear the NMISR.LVD1ST flag. + The edge allowable area of the DRX0 input signal is extended. #1 - WDTCLR - WDT Clear + BTVM + Bit Timing Violation ModeNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. 1 1 - write-only + read-write 0 - No effect. + Edge in gray area between half bit and 2-half bit is not detected as bit timing violation. #0 1 - Clear the NMISR.WDTST flag. + Edge in gray area between half bit and 2-half bit is detected as bit timing violation. #1 - IWDTCLR - IWDT Clear + BTVE + Bit Timing Violation EnableNote: The bit must be modified only when the DALI0.STR1.BBF bit is 0. 0 0 - write-only + read-write 0 - No effect. + Bit timing violation function is disabled. #0 1 - Clear the NMISR.IWDTST flag. + Bit timing violation function is enabled. #1 @@ -41500,77 +20254,84 @@ FMS2,1,0: - NMICR - NMI Pin Interrupt Control Register - 0x100 - 8 + TXWR1 + DALI DTX Width Register 1 + 0x016 + 16 read-write - 0x00 - 0xFF + 0x003F + 0xFFFF - NFLTEN - NMI Digital Filter Enable - 7 - 7 + TXLW + DTX Low WidthDTX0 pin low level width + 0 + 6 read-write - - - 0 - Digital filter is disabled. - #0 - - - 1 - Digital filter is enabled. - #1 - - + + + + TDR1H + DALI Transmit Data Register 1H + 0x01E + 16 + read-write + 0x0000 + 0xFFFF + - NFCLKSEL - NMI Digital Filter Sampling Clock Select - 4 - 5 + DTDR + Upper 16-bit DALI transmit data + 0 + 15 read-write - - - 00 - PCLKB - #00 - - - 01 - PCLKB/8 - #01 - - - 10 - PCLKB/32 - #10 - - - 11 - PCLKB/64 - #11 - - + + + + TDR1L + DALI Transmit Data Register 1L + 0x020 + 16 + read-write + 0x0000 + 0xFFFF + - NMIMD - NMI Detection Set + DTDR + Lower 16-bit DALI transmit data 0 - 0 + 15 read-write + + + + + TRSTR1 + DALI Transmit Control Register 1 + SPDR + 0x022 + 16 + write-only + 0x0000 + 0xFFFF + + + TRST + Transmission Start Trigger + 0 + 0 + write-only 0 - Falling edge + No effect #0 1 - Rising edge + Transmission Start #1 @@ -41578,1437 +20339,1320 @@ FMS2,1,0: - 96 - 0x4 - IELSR[%s] - ICU Event Link Setting Register %s - 0x300 - 32 + CTR1 + DALI Control Register 1 + 0x026 + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - DTCE - DTC Activation Enable - 24 - 24 + FEIE + DALI_FEI Output Enabling + 12 + 12 read-write 0 - DTC activation is disabled + DALI_FEI output is disabled. #0 1 - DTC activation is enabled + DALI_FEI output is enabled. #1 - IR - Interrupt Status Flag - 16 - 16 + BPIE + DALI_BPI Output Enabling + 11 + 11 read-write 0 - No interrupt request is generated + DALI_BPI output is disabled. #0 1 - An interrupt request is generated ( 1 write to the IR bit is prohibited. ) + DALI_BPI output is enabled. #1 - IELS - ICU Event selection to NVICSet the number for the event signal to be linked . - 0 - 8 - read-write - - - 0x000 - Nothing is selected - 0x000 - - - others - See Event Table - true - - - - - - - 8 - 0x4 - DELSR[%s] - DMAC Event Link Setting Register - 0x280 - 32 - read-write - 0x0000 - 0xFFFF - - - IR - Interrupt Status Flag for DMAC NOTE: Writing 1 to the IR flag is prohibited. - 16 - 16 + CLIE + DALI_CLI Output Enabling + 10 + 10 read-write - 0x0 - No interrupt request is generated. + 0 + DALI_CLI output is disabled. #0 - 0x1 - An interrupt request is generated. + 1 + DALI_CLI output is enabled. #1 - DELS - Event selection to DMAC Start request - 0 - 8 + DEIE + DALI_DEI Output Enabling + 9 + 9 read-write - 0x000 - Nothing is selected. - 0x000 + 0 + DALI_DEI output is disabled. + #0 - others - See Event Table - true + 1 + DALI_DEI output is enabled. + #1 - - - - SELSR0 - Snooze Event Link Setting Register - 0x200 - 16 - read-write - 0x0000 - 0xFFFF - - SELS - SYS Event Link Select - 0 + SDIE + DALI_SDI Output Enabling + 8 8 read-write - - - 0x000 - Nothing is selected - 0x000 - - - - - - - WUPEN - Wake Up Interrupt Enable Register - 0x1A0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - IIC0WUPEN - IIC0 address match interrupt S/W standby returns enable - 31 - 31 - read-write 0 - S/W standby returns by IIC0 address match interrupt is disabled + DALI_SDI output is disabled. #0 1 - S/W standby returns by IIC0 address match interrupt is enabled + DALI_SDI output is enabled. #1 - AGT1CBWUPEN - AGT1 compare match B interrupt S/W standby returns enable - 30 - 30 + RE + Receive Enabling + 1 + 1 read-write 0 - S/W standby returns by AGT1 compare match B interrupt is disabled + Storing received data is disabled. #0 1 - S/W standby returns by AGT1 compare match B interrupt is enabled + Storing received data is enabled. #1 - AGT1CAWUPEN - AGT1 compare match A interrupt S/W standby returns enable - 29 - 29 + TE + Transmit Enabling + 0 + 0 read-write 0 - S/W standby returns by AGT1 compare match A interrupt is disabled + Transmit operation is disabled. #0 1 - S/W standby returns by AGT1 compare match A interrupt is enabled + Transmit operation is enabled. #1 + + + + TXDCTR1 + DALI DTX Control Register 1 + 0x028 + 16 + read-write + 0x0000 + 0xFFFF + - AGT1UDWUPEN - AGT1 underflow interrupt S/W standby returns enable - 28 - 28 + TXASE + DTX Assert EnablingNote 1. The bit must be modified only when the DALI0.CTR1.TE bit is 0. + 1 + 1 read-write 0 - S/W standby returns by AGT1 underflow interrupt is disabled + An internal transmit data is output to the DTX0 pin. #0 1 - S/W standby returns by AGT1 underflow interrupt is enabled + The level specified by TXAS bit is output to the DTX0 pin. #1 - USBFSWUPEN - USBFS interrupt S/W standby returns enable - 27 - 27 + TXAS + DTX Assert LevelNote 1. The bit must be modified only when the DALI0.CTR1.TE bit is 0. + 0 + 0 read-write 0 - S/W standby returns by USBFS interrupt is disabled + The DTX0 pin is driven low. #0 1 - S/W standby returns by USBFS interrupt is enabled + The DTX0 pin is driven high. #1 + + + + RDR1H + DALI Reception Data Register 1H + 0x02E + 16 + read-only + 0x0000 + 0xFFFF + + + DRDR + Upper 16-bit of DALI receive data + 0 + 15 + read-only + + + + + RDR1L + DALI Reception Data Register 1L + 0x030 + 16 + read-only + 0x0000 + 0xFFFF + + + DRDR + Lower 16-bit of DALI receive data + 0 + 15 + read-only + + + + + STR1 + DALI Status Register 1 + 0x032 + 16 + read-only + 0x0000 + 0xFFFF + - USBHSWUPEN - USBHS interrupt S/W standby returns enable bit - 26 - 26 - read-write - - - 0 - S/W standby returns by USBHS interrupt is disabled - #0 - - - 1 - S/W standby returns by USBHS interrupt is enabled - #1 - - + RDBL + Receive Data Bit LengthThese bits store the bit length for data received successfully + 10 + 15 + read-only - RTCPRDWUPEN - RCT period interrupt S/W standby returns enable - 25 - 25 - read-write + DAF + Destroy Area Flag + 9 + 9 + read-only 0 - S/W standby returns by RTC period interrupt is disabled + The collision did not occur in the destroy area or 1 was written to the DALI0.FECR1.DAFC bit. #0 1 - S/W standby returns by RTC period interrupt is enabled + The collision occurred in the destroy area. #1 - RTCALMWUPEN - RTC alarm interrupt S/W standby returns enable - 24 - 24 - read-write + CDF + Collision Detect Flag + 8 + 8 + read-only 0 - S/W standby returns by RTC alarm interrupt is disabled + No collision occurred or 1 was written to the DALI0.FECR1.CDFC bit. #0 1 - S/W standby returns by RTC alarm interrupt is enabled + A collision occurred. #1 - ACMPLP0WUPEN - ACMPLP0 interrupt S/W standby returns enable - 23 - 23 - read-write + O32F + Over 32-Bit Data Reception Flag + 7 + 7 + read-only 0 - S/W standby returns by ACMPLP0 interrupt is disabled + Receive data is 32 bits or less, or 1 was written to the DALI0.FECR1.O32FC bit. #0 1 - S/W standby returns by ACMPLP0 interrupt is enabled + Receive data is 33 bits or more. #1 - ACMPHS0WUPEN - ACMPHS0 interrupt S/W standby returns enable bit - 22 - 22 - read-write + BPDF + Bus Power Down Flag + 6 + 6 + read-only 0 - S/W standby returns by ACMPHS0 interrupt is disabled + No effected #0 1 - S/W standby returns by ACMPHS0 interrupt is enabled + Bus power down detected #1 - VBATTWUPEN - VBATT monitor interrupt S/W standby returns enable - 20 - 20 - read-write + BBF + Bus BUSY Flag + 5 + 5 + read-only 0 - S/W standby returns by VBATT monitor interrupt is disabled + DALI bus is IDLE #0 1 - S/W standby returns by VBATT monitor interrupt is enabled + DALI bus is BUSY #1 - LVD2WUPEN - LVD2 interrupt S/W standby returns enable - 19 - 19 - read-write + TENDF + Transmit End Flag + 4 + 4 + read-only 0 - S/W standby returns by LVD2 interrupt is disabled + 1 was written to the DALI0.FECR1.TENDFC bit. #0 1 - S/W standby returns by LVD2 interrupt is enabled + Frame transmission has been completed. #1 - LVD1WUPEN - LVD1 interrupt S/W standby returns enable - 18 - 18 - read-write + RDRF + Receive Data Register Full Flag + 3 + 3 + read-only 0 - S/W standby returns by LVD1 interrupt is disabled + The DALI0.RDR1L register was read or 1 was written to the DALI0.FECR1.RDRFC. #0 1 - S/W standby returns by LVD1 interrupt is enabled + Receive data is stored in the DALI0.RDR1L or DALI0.RDR1H register. #1 - KEYWUPEN - Key interrupt S/W standby returns enable - 17 - 17 - read-write + BTVF + Bit Timing Violation Flag + 2 + 2 + read-only 0 - S/W standby returns by KEY interrupt is disabled + No bit timing violation occurred or 1 was written to the DALI0.FECR1.BTVFC bit. #0 1 - S/W standby returns by KEY interrupt is enabled + Bit timing violation occurred #1 - IWDTWUPEN - IWDT interrupt S/W standby returns enable - 16 - 16 - read-write + OVF + Overrun Error Flag + 1 + 1 + read-only 0 - S/W standby returns by IWDT interrupt is disabled + No overrun error occurred or 1 was written to the DALI0.FECR1.OVFC bit. #0 1 - S/W standby returns by IWDT interrupt is enabled + An overrun error occurred. #1 - 16 - 0x01 - IRQWUPEN%s - IRQ interrupt S/W standby returns enable + MFEF + Manchester Flaming Error Flag 0 0 - read-write + read-only 0 - S/W standby returns by IRQ interrupt is disabled + No MFE occurred or 1 was written to the DALI0.FECR1.MFEFC bit. #0 1 - S/W standby returns by IRQ interrupt is enabled + An MFE occurred. #1 - - - - R_IIC0 - I2C Bus Interface - 0x40053000 - - 0x00000000 - 0x014 - registers - - - 0x00000016 - 0x002 - registers - - - - 3 - 0x2 - SAR[%s] - Slave Address Registers - 0x0A - 16 - - L - Slave Address Register L - 0x0 - 8 - read-write - 0x00 - 0xFF - - - SVA - A slave address is set.7-Bit Address = SVA[7:1] 10-Bit Address = { SVA9,SVA8,SVA[7:0] } - 0 - 7 - read-write - - - - - U - Slave Address Register U - 0x01 - 8 - read-write - 0x00 - 0xFF - - - SVA9 - 10-Bit Address(bit9) - 2 - 2 - read-write - - - SVA8 - 10-Bit Address(bit8) - 1 - 1 - read-write - - - FS - 7-Bit/10-Bit Address Format Selection - 0 - 0 - read-write - - - 0 - The 7-bit address format is selected. - #0 - - - 1 - The 10-bit address format is selected. - #1 - - - - - - - ICCR1 - I2C Bus Control Register 1 - 0x00 - 8 - read-write - 0x1F - 0xFF + COLR1 + DALI Collision Register 1 + 0x036 + 16 + read-only + 0x0800 + 0xFFFF - ICE - I2C Bus Interface Enable - 7 - 7 - read-write + TXDCV + DTX Collision Value + 13 + 13 + read-only 0 - Disable (SCLn and SDAn pins in inactive state) + Low #0 1 - Enable (SCLn and SDAn pins in active state) + High #1 - IICRST - I2C Bus Interface Internal ResetNote:If an internal reset is initiated using the IICRST bit for a bus hang-up occurred during communication with the master device in slave mode, the states may become different between the slave device and the master device (due to the difference in the bit counter information). - 6 - 6 - read-write + RXDCEG + DRX Collision Edge + 12 + 12 + read-only 0 - Releases the RIIC reset or internal reset. + Falling edge #0 1 - Initiates the RIIC reset or internal reset. + Rising edge #1 - CLO - Extra SCL Clock Cycle Output - 5 - 5 - read-write + RXDMON + DRX MonitorThis bit monitors the DRX0 pin value after the DRX0 pin is synchronized + 11 + 11 + read-only + + + CLDAF + Collision Last Destroy Area Flag + 10 + 10 + read-only 0 - Does not output an extra SCL clock cycle. + Collision detected is caused by a DRX0 edge occurrence. #0 1 - Outputs an extra SCL clock cycle. + Collision detected is not caused by a DRX0 edge occurrence. (Last destroy area) #1 - SOWP - SCLO/SDAO Write Protect + CDTF1 + Collision Detect Timing Flag 1 4 4 - read-write + read-only 0 - Bits SCLO and SDAO can be written + Collision detection started at the edge on a bit period boundary. #0 1 - Bits SCLO and SDAO are protected. + Collision detection started at the edge in the middle of a bit period. #1 - SCLO - SCL Output Control/Monitor - 3 + CFTF2 + Collision Detect Timing Flag 2 + 0 3 - read-write + read-only - 0 - (Read)The RIIC has driven the SCLn pin low. / (Write)The RIIC drives the SCLn pin low. - #0 + 0000 + After reset is released + #0000 - 1 - (Read)The RIIC has released the SCLn pin. / (Write)The RIIC releases the SCLn pin. - #1 + 0001 + Collision detection timing 1 + #0001 - - - - SDAO - SDA Output Control/Monitor - 2 - 2 - read-write - - 0 - (Read)The RIIC has driven the SDAn pin low. / (Write)The RIIC drives the SDAn pin low. - #0 + 0010 + Collision detection timing 2 + #0010 - 1 - (Read)The RIIC has released the SDAn pin./ (Write)The RIIC releases the SDAn pin. - #1 + 0011 + Collision detection timing 3 + #0011 + + + 0100 + Collision detection timing 4 + #0100 + + + 0101 + Collision detection timing 5 + #0101 + + + 0110 + Collision detection timing 6 + #0110 + + + 0111 + Collision detection timing 7 *1 + #0111 + + + 1000 + Collision detection timing 8 *1 + #1000 + + + 1001 + Collision detection timing 9 *1 + #1001 + + + 1010 + Collision detection timing 10 *1 + #1010 + + + others + Setting prohibited + true + + + + FECR1 + DALI Flag Error Clear Register 1 + 0x03A + 16 + write-only + 0x0000 + 0xFFFF + - SCLI - SCL Line Monitor - 1 - 1 - read-only + DAFC + Destroy Area Flag Clear + 9 + 9 + write-only 0 - SCLn line is low. + DALI0.STR1.DAF bit is not cleared. #0 1 - SCLn line is high. + DALI0.STR1.DAF bit is cleared. #1 - SDAI - SDA Line Monitor - 0 - 0 - read-only + CDFC + Collision Detect Flag Clear + 8 + 8 + write-only 0 - SDAn line is low. + DALI0.STR1.CDF bit is not cleared. #0 1 - SDAn line is high. + DALI0.STR1.CDF bit is cleared. #1 - - - - ICCR2 - I2C Bus Control Register 2 - 0x01 - 8 - read-write - 0x00 - 0xFF - - BBSY - Bus Busy Detection Flag + O32FC + Over 32-Bit Data Reception Flag Clear 7 7 - read-only + write-only 0 - The I2C bus is released (bus free state). + DALI0.STR1.O32F bit is not cleared. #0 1 - The I2C bus is occupied (bus busy state). + DALI0.STR1.O32F bit is cleared #1 - MST - Master/Slave Mode + BPDFC + Bus Power Down Flag Clear 6 6 - read-write + write-only 0 - Slave mode + DALI0.STR1.BPDF bit is not cleared. #0 1 - Master mode + DALI0.STR1.BPDF bit is cleared. #1 - TRS - Transmit/Receive Mode + BBFC + Bus BUSY Flag ClearNote1: Do not clear DALI0.STR1.BBF bit when DALI0.CTR1.TE bit or DALI0.CTR1.RE bit is 1. 5 5 - read-write - - - 0 - Receive mode - #0 - - - 1 - Transmit mode - #1 - - - - - SP - Stop Condition Issuance RequestNote: Writing to the SP bit is not possible while the setting of the BBSY flag is 0 (bus free state).Note: Do not set the SP bit to 1 while a restart condition is being issued. - 3 - 3 - read-write + write-only 0 - Does not request to issue a stop condition. + DALI0.STR1.BBF bit is not cleared. #0 1 - Requests to issue a stop condition. + DALI0.STR1.BBF bit is cleared #1 - RS - Restart Condition Issuance RequestNote: Do not set the RS bit to 1 while issuing a stop condition. - 2 - 2 - read-write + TENDFC + Transmit End Flag Clear + 4 + 4 + write-only 0 - Does not request to issue a restart condition. + DALI0.STR1.TENDF bit is not cleared. #0 1 - Requests to issue a restart condition. + DALI0.STR1.TENDF bit is cleared #1 - ST - Start Condition Issuance RequestSet the ST bit to 1 (start condition issuance request) when the BBSY flag is set to 0 (bus free state). - 1 - 1 - read-write + RDRFC + Receive Data Register Full Flag Clear + 3 + 3 + write-only 0 - Does not request to issue a start condition. + DALI0.STR1.RDRF bit is not cleared. #0 1 - Requests to issue a start condition. + DALI0.STR1.RDRF bit is cleared. #1 - - - - ICMR1 - I2C Bus Mode Register 1 - 0x02 - 8 - read-write - 0x08 - 0xFF - - MTWP - MST/TRS Write Protect - 7 - 7 - read-write + BTVFC + Bit Timing Violation Flag Clear + 2 + 2 + write-only 0 - Disables writing to the MST and TRS bits in ICCR2. + DALI0.STR1.BTVF bit is not cleared. #0 1 - Enables writing to the MST and TRS bits in ICCR2. + DALI0.STR1.BTVF bit is cleared. #1 - CKS - Internal Reference Clock (fIIC) Selection ( fIIC = PCLKB / 2^CKS ) - 4 - 6 - read-write + OVFC + Overrun Error Flag Clear + 1 + 1 + write-only - 000 - PCLKB/1 clock - #000 - - - 001 - PCLKB/2 clock - #001 - - - 010 - PCLKB/4 clock - #010 - - - 011 - PCLKB/8 clock - #011 - - - 100 - PCLKB/16 clock - #100 - - - 101 - PCLKB/32 clock - #101 - - - 110 - PCLKB/64 clock - #110 + 0 + DALI0.STR1.OVF bit is not cleared. + #0 - 111 - PCLKB/128 clock - #111 + 1 + DALI0.STR1.OVF bit is cleared + #1 - BCWP - BC Write Protect(This bit is read as 1.) - 3 - 3 + MFEFC + Manchester Flaming Error Flag Clear + 0 + 0 write-only 0 - Enables a value to be written in the BC[2:0] bits. + DALI0.STR1.MFEF bit is not cleared. #0 1 - Disables a value to be written in the BC[2:0] bits. + DALI0.STR1.MFEF bit is cleared #1 + + + + SWRR1 + DALI Software Reset Register 1 + 0x03C + 16 + write-only + 0x0000 + 0xFFFF + - BC - Bit Counter + SWR + Software ResetWriting 1 to this bit causes a software reset. 0 - 2 - read-write - - - 000 - 9 bits - #000 - - - 001 - 2 bits - #001 - - - 010 - 3 bits - #010 - - - 011 - 4 bits - #011 - - - 100 - 5 bits - #100 - - - 101 - 6 bits - #101 - - - 110 - 7 bits - #110 - - - 111 - 8 bits - #111 - - + 0 + write-only + + + + R_DEBUG + Debug Function + 0x4001B000 + + 0x00000000 + 0x04 + registers + + + 0x00000010 + 0x04 + registers + + - ICMR2 - I2C Bus Mode Register 2 - 0x03 - 8 - read-write - 0x06 - 0xFF + DBGSTR + Debug Status Register + 0 + 32 + read-only + 0x00000000 + 0xFFFFFFFF - DLCS - SDA Output Delay Clock Source Select - 7 - 7 - read-write + CDBGPWRUPREQ + Debug power-up request + 28 + 28 + read-only 0 - The internal reference clock (fIIC) is selected as the clock source of the SDA output delay counter. + 0: OCD is not requesting debug power up #0 1 - The internal reference clock divided by 2 (fIIC/2) is selected as the clock source of the SDA output delay counter. + 0: OCD is requesting debug power up #1 - SDDL - SDA Output Delay Counter - 4 - 6 - read-write - - - 000 - No output delay - #000 - - - 001 - 1 fIIC cycle (ICMR2.DLCS=0) / 1 or 2 fIIC cycles (ICMR2.DLCS=1) - #001 - - - 010 - 2 fIIC cycles (ICMR2.DLCS=0) / 3 or 4 fIIC cycles (ICMR2.DLCS=1) - #010 - - - 011 - 3 fIIC cycles (ICMR2.DLCS=0) / 5 or 6 fIIC cycles (ICMR2.DLCS=1) - #011 - - - 100 - 4 fIIC cycles (ICMR2.DLCS=0) / 7 or 8 fIIC cycles (ICMR2.DLCS=1) - #100 - - - 101 - 5 fIIC cycles (ICMR2.DLCS=0) / 9 or 10 fIIC cycles (ICMR2.DLCS=1) - #101 - - - 110 - 6 fIIC cycles (ICMR2.DLCS=0) / 11 or 12 fIIC cycles (ICMR2.DLCS=1) - #110 - - - 111 - 7 fIIC cycles (ICMR2.DLCS=0) / 13 or 14 fIIC cycles (ICMR2.DLCS=1) - #111 - - - - - TMOH - Timeout H Count Control - 2 - 2 - read-write + CDBGPWRUPACK + Debug power-up acknowledge + 29 + 29 0 - Count is disabled while the SCLn line is at a high level. + Debug power-up request is not acknowledged #0 1 - Count is enabled while the SCLn line is at a high level. + Debug power-up request is acknowledged #1 + + + + DBGSTOPCR + Debug Stop Control Register + 0x10 + 32 + read-write + 0x00000003 + 0xFFFFFFFF + - TMOL - Timeout L Count Control - 1 - 1 + DBGSTOP_RPER + Mask bit for SRAM parity error + 24 + 24 + + + 3 + 1 + DBGSTOP_LVD%s + Mask bit for LVD reset/interupt + 16 + 16 read-write 0 - Count is disabled while the SCLn line is at a low level. + Enable reset/interupt on corresponding LVD #0 1 - Count is enabled while the SCLn line is at a low level. + Mask reset/interupt on corresponding LVD #1 - TMOS - Timeout Detection Time Select + DBGSTOP_RECCR + Mask bit for SRAM ECC error + 25 + 25 + + + DBGSTOP_IWDT + Mask bit for IWDT reset/interrupt 0 0 + + + DBGSTOP_WDT + Mask bit for WDT reset/interrupt + 1 + 1 + + + DBGSTOP_CPER + Mask bit for Cache SRAM parity error reset/interrupt + 31 + 31 read-write 0 - Long mode is selected. + Enable Cache SRAM parity error reset/interrupt #0 1 - Short mode is selected. + Mask Cache SRAM parity error reset/interrupt #1 + + + + R_DMA + DMA Controller Common + 0x40005200 + + 0x00000000 + 0x01 + registers + + - ICMR3 - I2C Bus Mode Register 3 - 0x04 + DMAST + DMAC Module Activation Register + 0x00 8 read-write 0x00 0xFF - SMBS - SMBus/I2C Bus Selection - 7 - 7 + DMST + DMAC Operation Enable + 0 + 0 read-write 0 - The I2C bus is selected. + Disabled. #0 1 - The SMBus is selected. + Enabled. #1 + + + + DMECHR + DMAC Error Channel Register + 0x40 + 32 + read-write + 0x00000000 + 0xffffffff + - WAIT - WAITNote: When the value of the WAIT bit is to be read, be sure to read the ICDRR beforehand. - 6 - 6 - read-write + DMECH + DMAC Error channel + 0 + 2 + read-only + + + DMECHSAM + DMAC Error channel Security Attribution Monitor + 8 + 8 + read-only 0 - No WAIT (The period between ninth clock cycle and first clock cycle is not held low.) + secure channel #0 1 - WAIT (The period between ninth clock cycle and first clock cycle is held low.) + non-secure channel #1 - RDRFS - RDRF Flag Set Timing Selection - 5 - 5 + DMESTA + DMAC Error Status + 16 + 16 read-write 0 - The RDRF flag is set at the rising edge of the ninth SCL clock cycle. (The SCLn line is not held low at the falling edge of the eighth clock cycle.) + No DMA transfer error occurred #0 1 - The RDRF flag is set at the rising edge of the eighth SCL clock cycle. (The SCLn line is held low at the falling edge of the eighth clock cycle.) + DMA transfer error occurred #1 + + + + + + R_DMAC0 + DMA Controller + 0x40005000 + + 0x00000000 + 0x00E + registers + + + 0x00000010 + 0x02 + registers + + + 0x00000013 + 0x003 + registers + + + 0x00000018 + 0x007 + registers + + + + DMSAR + DMA Source Address Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - ACKWP - ACKBT Write Protect - 4 - 4 + DMSAR + Specifies the transfer source start address. + 0 + 31 read-write - - - 0 - Modification of the ACKBT bit is disabled. - #0 - - - 1 - Modification of the ACKBT bit is enabled. - #1 - - + + + + DMDAR + DMA Destination Address Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - ACKBT - Transmit Acknowledge - 3 - 3 + DMDAR + Specifies the transfer destination start address. + 0 + 31 + read-write + + + + + DMCRA + DMA Transfer Count Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DMCRAH + Upper bits of transfer count + 16 + 25 read-write - - - 0 - A 0 is sent as the acknowledge bit (ACK transmission). - #0 - - - 1 - A 1 is sent as the acknowledge bit (NACK transmission). - #1 - - - ACKBR - Receive Acknowledge - 2 - 2 - read-only + DMCRAL + Lower bits of transfer count + 0 + 15 + read-write + + + + + DMCRB + DMA Block Transfer Count Register + 0x0C + 16 + read-write + 0x0000 + 0xFFFF + + + DMCRB + Specifies the number of block transfer operations or repeat transfer operations. + 0 + 15 + read-write - 0 - A 0 is received as the acknowledge bit (ACK reception). - #0 + 0000 + 65,536 blocks + #0000 - 1 - A 1 is received as the acknowledge bit (NACK reception). - #1 + others + DMCRB blocks + true + + + + DMTMD + DMA Transfer Mode Register + 0x10 + 16 + read-write + 0x0000 + 0xFFFF + - NF - Noise Filter Stage Selection - 0 - 1 + MD + Transfer Mode Select + 14 + 15 read-write 00 - Noise of up to one fIIC cycle is filtered out (single-stage filter). + Normal transfer #00 01 - Noise of up to two fIIC cycles is filtered out (2-stage filter). + Repeat transfer #01 10 - Noise of up to three fIIC cycles is filtered out (3-stage filter). + Block transfer #10 11 - Noise of up to four fIIC cycles is filtered out (4-stage filter) + Setting prohibited #11 - - - - ICFER - I2C Bus Function Enable Register - 0x05 - 8 - read-write - 0x72 - 0xFF - - - FMPE - Fast-mode Plus Enable - 7 - 7 - read-write - - - 0 - No Fm+ slope control circuit is used for the SCLn pin and SDAn pin. - #0 - - - 1 - An Fm+ slope control circuit is used for the SCLn pin and SDAn pin. - #1 - - - - SCLE - SCL Synchronous Circuit Enable - 6 - 6 + DTS + Repeat Area Select + 12 + 13 read-write - 0 - No SCL synchronous circuit is used. - #0 + 00 + The destination is specified as the repeat area or block area. + #00 - 1 - An SCL synchronous circuit is used. - #1 + 01 + The source is specified as the repeat area or block area. + #01 - - - - NFE - Digital Noise Filter Circuit Enable - 5 - 5 - read-write - - 0 - No digital noise filter circuit is used. - #0 + 10 + The repeat area or block area is not specified. + #10 - 1 - A digital noise filter circuit is used. - #1 + 11 + Setting prohibited + #11 - NACKE - NACK Reception Transfer Suspension Enable - 4 - 4 + SZ + Transfer Data Size Select + 8 + 9 read-write - 0 - Transfer operation is not suspended during NACK reception (transfer suspension disabled). - #0 + 00 + 8 bits + #00 - 1 - Transfer operation is suspended during NACK reception (transfer suspension enabled). - #1 + 01 + 16 bits + #01 - - - - SALE - Slave Arbitration-Lost Detection Enable - 3 - 3 - read-write - - 0 - Slave arbitration-lost detection is disabled. - #0 + 10 + 32 bits + #10 - 1 - Slave arbitration-lost detection is enabled. - #1 + 11 + Setting prohibited + #11 - NALE - NACK Transmission Arbitration-Lost Detection Enable - 2 - 2 + DCTG + Transfer Request Source Select + 0 + 1 read-write - 0 - NACK transmission arbitration-lost detection is disabled. - #0 + 00 + Software + #00 - 1 - NACK transmission arbitration-lost detection is enabled. - #1 + 01 + Interrupts*1 from peripheral modules or external interrupt input pins + #01 - - - - MALE - Master Arbitration-Lost Detection Enable - 1 - 1 - read-write - - 0 - Master arbitration-lost detection is disabled. - #0 + 10 + Setting prohibited + #10 - 1 - Master arbitration-lost detection is enabled. - #1 + 11 + Setting prohibited + #11 - TMOE - Timeout Function Enable - 0 - 0 + TKP + Transfer Keeping + 10 + 10 read-write 0 - The timeout function is disabled. + Transfer is stopped by completion of specified total number of transfer operations. #0 1 - The timeout function is enabled. + Transfer is not stopped by completion of specified total number of transfer operations. (free-running) #1 @@ -43016,124 +21660,105 @@ FMS2,1,0: - ICSER - I2C Bus Status Enable Register - 0x06 + DMINT + DMA Interrupt Setting Register + 0x13 8 read-write - 0x09 + 0x00 0xFF - HOAE - Host Address Enable - 7 - 7 - read-write - - - 0 - Host address detection is disabled. - #0 - - - 1 - Host address detection is enabled. - #1 - - - - - DIDE - Device-ID Address Detection Enable - 5 - 5 + DTIE + Transfer End Interrupt Enable + 4 + 4 read-write 0 - Device-ID address detection is disabled. + Disabled #0 1 - Device-ID address detection is enabled. + Enabled #1 - GCAE - General Call Address Enable + ESIE + Transfer Escape End Interrupt Enable 3 3 read-write 0 - General call address detection is disabled. + Disabled #0 1 - General call address detection is enabled. + Enabled #1 - SAR2E - Slave Address Register 2 Enable + RPTIE + Repeat Size End Interrupt Enable 2 2 read-write 0 - Slave address in SARL2 and SARU2 is disabled. + Disabled #0 1 - Slave address in SARL2 and SARU2 is enabled + Enabled #1 - SAR1E - Slave Address Register 1 Enable + SARIE + Source Address Extended Repeat Area Overflow Interrupt Enable 1 1 read-write 0 - Slave address in SARL1 and SARU1 is disabled. + Disabled #0 1 - Slave address in SARL1 and SARU1 is enabled. + Enabled #1 - SAR0E - Slave Address Register 0 Enable + DARIE + Destination Address Extended Repeat Area Overflow Interrupt Enable 0 0 read-write 0 - Slave address in SARL0 and SARU0 is disabled. + Disabled #0 1 - Slave address in SARL0 and SARU0 is enabled. + Enabled #1 @@ -43141,162 +21766,219 @@ FMS2,1,0: - ICIER - I2C Bus Interrupt Enable Register - 0x07 - 8 + DMAMD + DMA Address Mode Register + 0x14 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - TIE - Transmit Data Empty Interrupt Request Enable - 7 - 7 + SM + Source Address Update Mode + 14 + 15 read-write - 0 - Transmit data empty interrupt request (IIC_TXI) is disabled. - #0 + 00 + Fixed address + #00 - 1 - Transmit data empty interrupt request (IIC_TXI) is enabled. - #1 + 01 + Offset addition + #01 + + + 10 + Incremented address + #10 + + + 11 + Decremented address. + #11 - TEIE - Transmit End Interrupt Request Enable + SARA + Source Address Extended Repeat Area Specifies the extended repeat area on the source address. For details on the settings. + 8 + 12 + read-write + + + DM + Destination Address Update Mode 6 - 6 + 7 read-write - 0 - Transmit end interrupt request (IIC_TEI) is disabled. - #0 + 00 + Fixed address + #00 - 1 - Transmit end interrupt request (IIC_TEI) is enabled. - #1 + 01 + Offset addition + #01 - - - - RIE - Receive Data Full Interrupt Request Enable - 5 - 5 - read-write - - 0 - Receive data full interrupt request (IIC_RXI) is disabled. - #0 + 10 + Incremented address + #10 - 1 - Receive data full interrupt request (IIC_RXI) is enabled. - #1 + 11 + Decremented address. + #11 - NAKIE - NACK Reception Interrupt Request Enable - 4 + DARA + Destination Address Extended Repeat Area Specifies the extended repeat area on the destination address. For details on the settings. + 0 4 read-write + + + DADR + Destination Address Update Select After Reload + 5 + 5 + read-write 0 - NACK reception interrupt request (NAKI) is disabled. + Only reloading #0 1 - NACK reception interrupt request (NAKI) is enabled. + Add index after reloading #1 - SPIE - Stop Condition Detection Interrupt Request Enable - 3 - 3 + SADR + Source Address Update Select After Reload + 13 + 13 read-write 0 - Stop condition detection interrupt request (SPI) is disabled. + Only reloading #0 1 - Stop condition detection interrupt request (SPI) is enabled. + Add index after reloading #1 + + + + DMOFR + DMA Offset Register + 0x18 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DMOFR + Specifies the offset when offset addition is selected as the address update mode for transfer source or destination. + 0 + 31 + read-write + + + + + DMCNT + DMA Transfer Enable Register + 0x1C + 8 + read-write + 0x00 + 0xFF + - STIE - Start Condition Detection Interrupt Request Enable - 2 - 2 + DTE + DMA Transfer Enable + 0 + 0 read-write + modify 0 - Start condition detection interrupt request (STI) is disabled. + Disabled #0 1 - Start condition detection interrupt request (STI) is enabled. + Enabled. #1 + + + + DMREQ + DMA Software Start Register + 0x1D + 8 + read-write + 0x00 + 0xFF + - ALIE - Arbitration-Lost Interrupt Request Enable - 1 - 1 + CLRS + DMA Software Start Bit Auto Clear Select + 4 + 4 read-write 0 - Arbitration-lost interrupt request (ALI) is disabled. + SWREQ bit is cleared after DMA transfer is started by software. #0 1 - Arbitration-lost interrupt request (ALI) is enabled. + SWREQ bit is not cleared after DMA transfer is started by software. #1 - TMOIE - Timeout Interrupt Request Enable + SWREQ + DMA Software Start 0 0 read-write + modify 0 - Timeout interrupt request (TMOI) is disabled. + DMA transfer is not requested. #0 1 - Timeout interrupt request (TMOI) is enabled. + DMA transfer is requested. #1 @@ -43304,1413 +21986,1497 @@ FMS2,1,0: - ICSR1 - I2C Bus Status Register 1 - 0x08 + DMSTS + DMA Status Register + 0x1E 8 read-write 0x00 0xFF - HOA - Host Address Detection Flag + ACT + DMA Active Flag 7 7 + read-only + + + 0 + DMAC operation suspended + #0 + + + 1 + DMAC operating. + #1 + + + + + DTIF + Transfer End Interrupt Flag + 4 + 4 read-write zeroToClear modify 0 - Host address is not detected. + No interrupt #0 1 - Host address is detected. + Interrupt occurred. #1 - DID - Device-ID Address Detection Flag - 5 - 5 + ESIF + Transfer Escape End Interrupt Flag + 0 + 0 read-write + zeroToClear + modify 0 - Device-ID command is not detected. + No interrupt #0 1 - Device-ID command is detected. + Interrupt occurred. #1 + + + + DMSRR + DMA Source Reload Address Register + 0x20 + 32 + read-write + 0x00000000 + 0xffffffff + + + DMDRR + DMA Destination Reload Address Register + 0x24 + 32 + read-write + 0x00000000 + 0xffffffff + + + DMSBS + DMA Source Buffer Size Register + 0x28 + 32 + read-write + 0x00000000 + 0xffffffff + + + DMSBSL + Functions as data transfer counter in repeat-block transfer mode + 0 + 15 + read-write + - GCA - General Call Address Detection Flag - 3 - 3 + DMSBSH + Specifies the repeat-area size in repeat-block transfer mode + 16 + 31 + read-write + + + + + DMDBS + DMA Destination Buffer Size Register + 0x2C + 32 + read-write + 0x00000000 + 0xffffffff + + + DMDBSL + Functions as data transfer counter in repeat-block transfer mode + 0 + 15 + read-write + + + DMDBSH + Specifies the repeat-area size in repeat-block transfer mode + 16 + 31 + read-write + + + + + DMBWR + DMA Bufferable Write Enable Register + 0x30 + 8 + read-write + 0x00 + 0xff + + + BWE + Bufferable Write Enable + 0 + 0 read-write 0 - General call address is not detected. + Disables Bufferable Write #0 1 - General call address is detected. + Enables Bufferable Write #1 + + + + + + R_DMAC1 + 0x40005040 + + + R_DMAC2 + 0x40005080 + + + R_DMAC3 + 0x400050C0 + + + R_DMAC4 + 0x40005100 + + + R_DMAC5 + 0x40005140 + + + R_DMAC6 + 0x40005180 + + + R_DMAC7 + 0x400051C0 + + + R_DOC + Data Operation Circuit + 0x40054100 + + 0x00000000 + 0x01 + registers + + + 0x00000002 + 0x004 + registers + + + + DOCR + DOC Control Register + 0x00 + 8 + read-write + 0x00 + 0xFF + - AAS2 - Slave Address 2 Detection Flag - 2 - 2 + DOPCFCL + DOPCF Clear + 6 + 6 read-write - zeroToClear - modify 0 - Slave address 2 is not detected. + Maintains the DOPCF flag state. #0 1 - Slave address 2 is detected + Clears the DOPCF flag. #1 - AAS1 - Slave Address 1 Detection Flag - 1 - 1 + DOPCF + Data Operation Circuit Flag + 5 + 5 + read-only + + + DCSEL + Detection Condition Select + 2 + 2 read-write - zeroToClear - modify 0 - Slave address 1 is not detected. + DOPCF is set when data mismatch is detected. #0 1 - Slave address 1 is detected. + DOPCF is set when data match is detected. #1 - AAS0 - Slave Address 0 Detection Flag + OMS + Operating Mode Select 0 - 0 + 1 read-write - zeroToClear - modify - 0 - Slave address 0 is not detected. - #0 + 00 + Data comparison mode + #00 - 1 - Slave address 0 is detected. - #1 + 01 + Data addition mode + #01 + + + 10 + Data subtraction mode + #10 + + + 11 + Setting prohibited + #11 - ICSR2 - I2C Bus Status Register 2 - 0x09 - 8 + DODIR + DOC Data Input Register + 0x02 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - TDRE - Transmit Data Empty Flag - 7 - 7 - read-only + DODIR + 16-bit read-write register in which 16-bit data for use in the operations are stored. + 0 + 15 + read-write + + + + + DODSR + DOC Data Setting Register + 0x04 + 16 + read-write + 0x0000 + 0xFFFF + + + DODSR + This register stores 16-bit data for use as a reference in data comparison mode. This register also stores the results of operations in data addition and data subtraction modes. + 0 + 15 + read-write + + + + + + + R_DRW + 2D Drawing Engine + 0x400E4000 + + 0x00000000 + 0x008 + registers + + + 0x00000010 + 0x050 + registers + + + 0x00000064 + 0x008 + registers + + + 0x00000074 + 0x010 + registers + + + 0x00000090 + 0x020 + registers + + + 0x000000B4 + 0x024 + registers + + + 0x000000DC + 0x010 + registers + + + + CONTROL + Geometry Control Register + 0x00 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + SPANSTORE + Nextline span start is always equal or left to current-line span start + 23 + 23 + write-only 0 - ICDRT contains transmit data. + disabled #0 1 - ICDRT contains no transmit data. + enabled #1 - TEND - Transmit End Flag - 6 - 6 - read-write - zeroToClear - modify + SPANABORT + Shape is horizontally convex, only a single span per scanline + 22 + 22 + write-only 0 - Data is being transmitted. + disabled #0 1 - Data has been transmitted. + enabled #1 - RDRF - Receive Data Full Flag - 5 - 5 - read-write - zeroToClear - modify + UNIONCD + Combine outputs C & D as union (output is final) + 21 + 21 + write-only 0 - ICDRR contains no receive data. + minimum/intersect #0 1 - ICDRR contains receive data. + maximum/union #1 - NACKF - NACK Detection Flag - 4 - 4 - read-write - zeroToClear - modify + UNIONAB + Combine outputs A & B as union (output is called C) + 20 + 20 + write-only 0 - NACK is not detected. + minimum/intersect #0 1 - NACK is detected. + maximum/union #1 - STOP - Stop Condition Detection Flag - 3 - 3 - read-write - zeroToClear - modify + UNION56 + Combine limter 5 & 6 as union (output is called D) + 19 + 19 + write-only 0 - Stop condition is not detected. + minimum/intersect #0 1 - Stop condition is detected. + maximum/union #1 - START - Start Condition Detection Flag - 2 - 2 - read-write - zeroToClear - modify + UNION34 + Combine limter 3 & 4 as union (output is called B) + 18 + 18 + write-only 0 - Start condition is not detected. + minimum/intersect #0 1 - Start condition is detected. + maximum/union #1 - AL - Arbitration-Lost Flag - 1 - 1 - read-write - zeroToClear - modify + UNION12 + Combine limter 1 & 2 as union (output is called A) + 17 + 17 + write-only 0 - Arbitration is not lost. + minimum/intersect #0 1 - Arbitration is lost. + maximum/union #1 - TMOF - Timeout Detection Flag - 0 - 0 - read-write - zeroToClear - modify + BAND2ENABLE + Enable band postprocess for limiter 1 (see L1BAND) + 16 + 16 + write-only 0 - Timeout is not detected. + disabled #0 1 - Timeout is detected. - #1 - - - - - - - ICBRL - I2C Bus Bit Rate Low-Level Register - 0x10 - 8 - read-write - 0xFF - 0xFF - - - BRL - Bit Rate Low-Level Period(Low-level period of SCL clock) - 0 - 4 - read-write - - - - - ICBRH - I2C Bus Bit Rate High-Level Register - 0x11 - 8 - read-write - 0xFF - 0xFF - - - BRH - Bit Rate High-Level Period(High-level period of SCL clock) - 0 - 4 - read-write - - - - - ICDRT - I2C Bus Transmit Data Register - 0x12 - 8 - read-write - 0xFF - 0xFF - - - ICDRT - 8-bit read-write register that stores transmit data. - 0 - 7 - read-write - - - - - ICDRR - I2C Bus Receive Data Register - 0x13 - 8 - read-only - 0x00 - 0xFF - - - ICDRR - 8-bit register that stores the received data - 0 - 7 - read-only - - - - - ICWUR - I2C Bus Wake Up Unit Register - 0x16 - 8 - read-write - 0x10 - 0xFF - + enabled + #1 + + + - WUE - Wakeup Function Enable - 7 - 7 - read-write + BAND1ENABLE + Enable band postprocess for limiter 1 (see L1BAND) + 15 + 15 + write-only 0 - Wakeup function disabled + disabled #0 1 - Wakeup function enabled. + enabled #1 - WUIE - Wakeup Interrupt Request Enable - 6 - 6 - read-write + LIM6THRESHOLD + Enable limiter 6 threshold mode + 14 + 14 + write-only 0 - Wakeup Interrupt Request (IIC0_WUI) disabled + disabled #0 1 - Wakeup Interrupt Request (IIC0_WUI) enabled. + enabled #1 - WUF - Wakeup Event Occurrence Flag - 5 - 5 - read-write + LIM5THRESHOLD + Enable limiter 5 threshold mode + 13 + 13 + write-only 0 - Slave address does not match during wakeup function + disabled #0 1 - Slave address matches during wakeup function. + enabled #1 - WUACK - ACK bit for Wakeup Mode - 4 - 4 - read-write + LIM4THRESHOLD + Enable limiter 4 threshold mode + 12 + 12 + write-only 0 - State of synchronous operation + disabled #0 1 - State of asynchronous operation + enabled #1 - WUAFA - Wakeup Analog Filter Additional Selection - 0 - 0 - read-write + LIM3THRESHOLD + Enable limiter 3 threshold mode + 11 + 11 + write-only 0 - Do not add the wakeup analog filter + disabled #0 1 - Add the wakeup analog filter. + enabled #1 - - - - ICWUR2 - I2C Bus Wake up Unit Register 2 - 0x17 - 8 - read-write - 0xFD - 0xFF - - WUSYF - Wake-up Function Synchronous Operation Status Flag - 2 - 2 - read-only + LIM2THRESHOLD + Enable limiter 2 threshold mode + 10 + 10 + write-only 0 - IIC asynchronous circuit enable condition + disabled #0 1 - IIC synchronous circuit enable condition. + enabled #1 - WUASYF - Wake-up Function Asynchronous Operation Status Flag - 1 - 1 - read-only + LIM1THRESHOLD + Enable limiter 1 threshold mode + 9 + 9 + write-only 0 - IIC synchronous circuit enable condition + disabled #0 1 - IIC asynchronous circuit enable condition. + enabled #1 - WUSEN - Wake-up Function Synchronous Enable - 0 - 0 - read-only + QUAD3ENABLE + Enable quadratic coupling of limiters 5 and 6 + 8 + 8 + write-only 0 - IIC asynchronous circuit enable + disabled #0 1 - IIC synchronous circuit enable + enabled #1 - - - - - - R_IIC1 - 0x40053100 - - - R_IIC2 - 0x40053200 - - - R_IRDA - IrDA Interface - 0x40070F00 - - 0x00000000 - 0x01 - registers - - - - IRCR - IrDA Control Register - 0x00 - 8 - read-write - 0x00 - 0xFF - - IRE - IrDA Enable + QUAD2ENABLE + Enable quadratic coupling of limiters 3 and 4 7 7 - read-write + write-only 0 - Serial I/O pins are used for normal serial communication. + disabled #0 1 - Serial I/O pins are used for IrDA data communication. + enabled #1 - IRTXINV - IRTXD Polarity Switching - 3 - 3 - read-write + QUAD1ENABLE + Enable quadratic coupling of limiters 1 and 2 + 6 + 6 + write-only 0 - Data to be transmitted is output to IRTXD as is. + disabled #0 1 - Data to be transmitted is output to IRTXD after the polarity is inverted. + enabled #1 - IRRXINV - IRRXD Polarity Switching - 2 - 2 - read-write + LIM6ENABLE + Enable limiter 6 + 5 + 5 + write-only 0 - IRRXD input is used as received data as is. + disabled #0 1 - IRRXD input is used as received data after the polarity is inverted. + enabled #1 - - - - - - R_IWDT - Independent Watchdog Timer - 0x40044400 - - 0x00000000 - 0x01 - registers - - - 0x00000004 - 0x02 - registers - - - - IWDTRR - IWDT Refresh Register - 0x00 - 8 - read-write - 0xFF - 0xFF - - IWDTRR - The counter is refreshed by writing 0x00 and then writing 0xFF to this register. - 0 - 7 - read-write + LIM5ENABLE + Enable limiter 5 + 4 + 4 + write-only + + + 0 + disabled + #0 + + + 1 + enabled + #1 + + - - - - IWDTSR - IWDT Status Register - 0x04 - 16 - read-write - 0x0000 - 0xFFFF - - REFEF - Refresh Error Flag - 15 - 15 - read-write - zeroToClear - modify + LIM4ENABLE + Enable limiter 4 + 3 + 3 + write-only 0 - Refresh error not occurred + disabled #0 1 - Refresh error occurred + enabled #1 - UNDFF - Underflow Flag - 14 - 14 - read-write - zeroToClear - modify + LIM3ENABLE + Enable limiter 3 + 2 + 2 + write-only 0 - Underflow not occurred + disabled #0 1 - Underflow occurred + enabled #1 - CNTVAL - Counter ValueValue counted by the counter - 0 - 13 - read-only + LIM2ENABLE + Enable limiter 2 + 1 + 1 + write-only + + + 0 + disabled + #0 + + + 1 + enabled + #1 + + - - - - - - R_JPEG - JPEG Codec - 0x400E6000 - - 0x00000000 - 0x002 - registers - - - 0x00000003 - 0x00F - registers - - - 0x00000040 - 0x014 - registers - - - 0x00000058 - 0x01C - registers - - - 0x0000008C - 0x008 - registers - - - 0x00000100 - 0x11C - registers - - - 0x00000220 - 0x0B2 - registers - - - 0x00000300 - 0x01C - registers - - - 0x00000320 - 0x0B2 - registers - - - - JCMOD - JPEG Code Mode Register - 0x000 - 8 - read-write - 0x00 - 0xFF - - DSP - Compression/Decompression Set Note: When changing between processing for compression and for decompression, be sure to reset this module in advance by setting the JCUSRST bit in the software reset control register 2 (SWRSTCR2) of the power-downmodes. - 3 - 3 - read-write + LIM1ENABLE + Enable limiter 1 + 0 + 0 + write-only 0 - Compression process + disabled #0 1 - Decompression process + enabled #1 + + + + CONTROL2 + Surface Control Register + 0x04 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + - REDU - Pixel FormatNOTE: Read-only in Decompression. - 0 - 2 - read-write + RLEPIXELWIDTH + Texel width for RLE unit + 30 + 31 + write-only - 001 - YCbCr422(Compression) / YCbCr422(Decompression) - #001 + 00 + 1 byte per texel + #00 - 000 - Setting prohibited(Compression) / YCbCr444(Decompression) - #000 + 01 + 2 byte per texel + #01 - 110 - Setting prohibited(Compression) / YCbCr411/[Decompression] - #110 + 10 + 3 byte per texel + #10 - 010 - Setting prohibited(Compression) / YCbCr420/[Decompression] - #010 + 11 + 4 byte per texel + #11 + + + + BDIA + Blend destination factor inverted in alpha channel (USEACB = 1) + 29 + 29 + write-only + - others - Setting prohibited(Compression) / Error (this module cannot process normally.)(Decompression]) - true + 0 + use blend factor as specified through BDFA + #0 + + + 1 + invert blend destination factor (1-x) + #1 - - - - JCCMD - JPEG Code Command Register - 0x001 - 8 - write-only - 0x00 - 0x00 - - BRST - Bus Reset. NOTE: When this module is in operation, the bus reset command should not be issued. - 7 - 7 + BSIA + Blend source factor inverted in alpha channel (USEACB = 1) + 28 + 28 write-only 0 - No effect. + use blend factor as specified through BSFA #0 1 - Resets the JCDTCU, JCDTCM, JCDTCD, JCDERR and JCRST registers. + invert blend source factor (1-x) #1 - JEND - Interrupt Request Clear Command This bit is valid only for the interrupt sources corresponding to bits INS6, INS5, and INS3 in JINTS0. To clear an interrupt request, set this bit to 1 - 2 - 2 + CLUTFORMAT + Format of the CLUT + 27 + 27 write-only 0 - No effect. + aRGB(8888) #0 1 - Clear all bits in JINTE0. + RGB(565) #1 - JRST - JPEG Core Process Stop Clear CommandTo clear the process-stopped state caused by requests to read the image size and pixel format (enabled by the INT3 bit in JINTE0), set this bit to 1. - 1 - 1 + COLKEYENABLE + color keying enable + 26 + 26 + write-only + + + 0 + color keying disabled + #0 + + + 1 + color keying enabled + #1 + + + + + CLUTENABLE + CLUT enable + 25 + 25 write-only 0 - No effect. + CLUT disabled #0 1 - Clear the process-stopped state caused by requests to read the image size and pixel format(enabled by the INT3 bit in JINTE0). + CLUT enabled #1 - JSRT - JPEG Core Process Start CommandTo start JPEG core processing, set this bit to 1. Do not write this bit to 1 again while this module is in operation. - 0 - 0 + RLEENABLE + RLE enable + 24 + 24 write-only 0 - No effect. + RLE disabled #0 1 - Start JPEG core processing + RLE enabled #1 - - - - JCQTN - JPEG Code Quantization Table Number Register - 0x003 - 8 - read-write - 0x00 - 0xFF - - QT3 - Quantization table number for the third color component NOTE: Read-only in Decompression. - 4 - 5 - read-write + WRITEALPHA + Writeback alpha source for framebufferSet the 'alpha source' for the framebuffer(USEACB = 0)Blend alpha in color 2 instead of framebuffer alpha((USEACB = 1))In not alpha channel blending mode (USEACB = 0):Set the 'alpha source' for the framebuffer.In alpha channel blending mode (USEACB = 1):Blend alpha in color 2 instead of framebuffer alpha00B: BC2A = 1: use alpha from framebuffer as destination (DST_A)else: BC2A = 0: use alpha in color 2 as destination (DST_A) + 22 + 23 + write-only 00 - Use quantization table No.0 (JCQTBL0) as the third color component. + use alpha from color 2 #00 01 - Use quantization table No.1 (JCQTBL1) as the third color component. + use source alpha (pixel coverage) #01 10 - Use quantization table No.2 (JCQTBL2) as the third color component. + use 0.0 as alpha #10 11 - Use quantization table No.3 (JCQTBL3) as the third color component. + use alpha from framebuffer #11 - QT2 - Quantization table number for the second color component NOTE: Read-only in Decompression. - 2 - 3 - read-write + WRITEFORMAT10 + Pixel format of the framebuffer + 20 + 21 + write-only 00 - Use quantization table No.0 (JCQTBL0) as the second color component. + 8bpp a(8)0 #00 01 - Use quantization table No.1 (JCQTBL1) as the second color component. + 16bpp RGB(565) #01 10 - Use quantization table No.2 (JCQTBL2) as the second color component. + 32bpp aRGB(8888) #10 11 - Use quantization table No.3 (JCQTBL3) as the second color component. + 16bpp aRGB(4444) #11 - QT1 - Quantization table number for the first color componentNOTE: Read-only in Decompression. - 0 - 1 - read-write + READFORMAT10 + Pixel format of the texture buffer{READFORMAT32,READFORMAT10}0000: 8 bpp a(8)0001: 16 bpp RGB(565)0010: 32 bpp aRGB(8888)0011: 16 bpp aRGB(4444)0100: 16 bpp aRGB(1555)0101: 8 bpp aCLUT(44) 4 bit alpha and 4 bit indexed color1001: 8 bpp CLUT(8)/I(8), 8 bit indexed color/luminance1010: 4 bpp CLUT(4)/I(4), 4 bit indexed color/luminance1011: 2 bpp CLUT(2)/I(2), 2 bit indexed color/luminance 1100: 1 bpp CLUT(1)/I(1), 1 bit indexed color/luminance + 18 + 19 + write-only 00 - Use quantization table No.0 (JCQTBL0) as the first color component. + 8 bpp a(8) (READFORMAT32=00) / 16 bpp aRGB(1555) (READFORMAT32=01) / 1 bpp CLUT(1)/I(1), 1 bit indexed color/luminance (READFORMAT32=11) #00 01 - Use quantization table No.1 (JCQTBL1) as the first color component. + 16 bpp RGB(565) (READFORMAT32=00) / 8 bpp aCLUT(44) 4 bit alpha and 4 bit indexed color (READFORMAT32=01) / 8 bpp CLUT(8)/I(8), 8 bit indexed color/luminance (READFORMAT32=10) #01 10 - Use quantization table No.2 (JCQTBL2) as the first color component. + 32 bpp aRGB(8888) (READFORMAT32=00) / 4 bpp CLUT(4)/I(4), 4 bit indexed color/luminance (READFORMAT32=10) #10 11 - Use quantization table No.3 (JCQTBL3) as the first color component. + 16 bpp aRGB(4444) (READFORMAT32=00) / 2 bpp CLUT(2)/I(2), 2 bit indexed color/luminance (READFORMAT32=10) #11 - - - - JCHTN - JPEG Code Huffman Table Number Register - 0x004 - 8 - read-write - 0x00 - 0xFF - - HTA3 - Huffman table number (AC) for the third color componentNOTE: Read-only in Decompression. - 5 - 5 - read-write + TEXTUREFILTERY + Linear filtering on texture V axis + 17 + 17 + write-only 0 - AC Huffman table 0(HTD3=0)/Setting prohibited(HTD3=1) + no filtering on texture V axis #0 1 - AC Huffman table 1(HTD3=1)/Setting prohibited(HTD3=0) + linear filtering on texture V axis #1 - HTD3 - Huffman table number (DC) for the third color component NOTE: Read-only in Decompression. - 4 - 4 - read-write + TEXTUREFILTERX + Linear filtering on texture U axis + 16 + 16 + write-only 0 - DC Huffman table 0(HTA3=0)/Setting prohibited(HTA3=1) + no filtering on texture U axis #0 1 - DC Huffman table 1(HTA3=1)/Setting prohibited(HTA3=0) + linear filtering on texture U axis #1 - HTA2 - Huffman table number (AC) for the second color componentNOTE: Read-only in Decompression. - 3 - 3 - read-write + TEXTURECLAMPY + Calculating V limiter outside use textureThe bit describes what happens if the V limiter (y direction in texture space) calculates a V value outside of the used texture + 15 + 15 + write-only 0 - AC Huffman table 0(HTD2=0)/Setting prohibited(HTD2=1) + Texture wrap mode: The integer part of the calculated value from the v limiter is anded with TEXVMASK. This results in a repetition of the texture in y/v direction. #0 1 - AC Huffman table 1(HTD2=1)/Setting prohibited(HTD2=0) + Texture clamp mode: The texture color at the border of the texture is taken. This results in a repetition of the texture border color in y/v direction. #1 - HTD2 - Huffman table number (DC) for the second color component NOTE: Read-only in Decompression. - 2 - 2 - read-write + TEXTURECLAMPX + Calculating U limiter outside use textureThe bit describes what happens if the U limiter (x direction in texture space) calculates a U value outside of the used texture + 14 + 14 + write-only 0 - DC Huffman table 0(HTA2=0)/Setting prohibited(HTA2=1) + Texture wrap mode: The integer part of the calculated value from the u limiter is anded with TEXUMASK. This results in a repetition of the texture in x/u direction. #0 1 - DC Huffman table 1(HTA2=1)/Setting prohibited(HTA2=0) + Texture clamp mode: The texture color at the border of the texture is taken. This results in a repetition of the texture border color in x/u direction. #1 - HTA1 - Huffman table number (AC) for the first color componentNOTE: Read-only in Decompression. - 1 - 1 - read-write + BC2 + Blend color 2 instead of framebuffer pixel + 13 + 13 + write-only 0 - AC Huffman table 0(HTD1=0)/Setting prohibited(HTD1=1) + use pixel from framebuffer as destination (DST) #0 1 - AC Huffman table 1(HTD1=1)/Setting prohibited(HTD1=0) + use color 2 as destination (DST) #1 - HTD1 - Huffman table number (DC) for the first color component NOTE: Read-only in Decompression. - 0 - 0 - read-write + BDI + Blend destination factor is inverteddst factor will be inverted (meaning 1-a or 1-1 depending on BDF) + 12 + 12 + write-only 0 - DC Huffman table 0(HTA1=0)/Setting prohibited(HTA1=1) + use blend factor as specified through BDF #0 1 - DC Huffman table 1(HTA1=1)/Setting prohibited(HTA1=0) + invert blend destinationfactor (1-x) #1 - - - - JCDRIU - JPEG Code DRI Upper Register - 0x005 - 8 - read-write - 0x00 - 0xFF - - DRIU - Upper Bytes of MCUs Preceding RST MarkerWhen both upper and lower bytes are set to 00h, neither a DRI nor an RST marker is placed.NOTE: Read-only in Decompression. - 0 - 7 - read-write + BSI + Blend source factor is invertedsrc factor will be inverted (meaning 1-a or 1-1 depending on BSF) + 11 + 11 + write-only + + + 0 + use blend factor as specified through BSF + #0 + + + 1 + invert blend source factor (1-x) + #1 + + - - - - JCDRID - JPEG Code DRI Lower Register - 0x006 - 8 - read-write - 0x00 - 0xFF - - DRID - Lower Bytes of MCUs Preceding RST MarkerWhen both upper and lower bytes are set to 00h, neither a DRI nor an RST marker is placed.NOTE: Read-only in Decompression. - 0 - 7 - read-write + BDF + Blend destination factordst factor is alpha (factor is 1 per default) + 10 + 10 + write-only + + + 0 + use 1.0 as blend destination factor + #0 + + + 1 + use alpha as blend destination factor + #1 + + - - - - JCVSZU - JPEG Code Vertical Size Upper Register - 0x007 - 8 - read-write - 0x00 - 0xFF - - VSZU - Upper Bytes of Vertical Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. - 0 - 7 - read-write + BSF + Blend source factorsrc factor is alpha (factor is 1 per default) + 9 + 9 + write-only + + + 0 + use 1.0 as blend source factor + #0 + + + 1 + use alpha as blend source factor + #1 + + - - - - JCVSZD - JPEG Code Vertical Size Lower Register - 0x008 - 8 - read-write - 0x00 - 0xFF - - VSZD - Lower Bytes of Vertical Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. - 0 - 7 - read-write + WRITEFORMAT2 + Bit 3 of framebuffer pixel formatSee WRITEFORMAT above description. + 8 + 8 + write-only - - - - JCHSZU - JPEG Code Horizontal Size Upper Register - 0x009 - 8 - read-write - 0x00 - 0xFF - - HSZU - Upper Bytes of Horizontal Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. - 0 + BDFA + Blend destinetion factor for alpha channel in alpha channel blending mode (USEACB = 1) + 7 7 - read-write + write-only + + + 0 + use 1.0 as blend destination factor for alpha channel + #0 + + + 1 + use alpha as blend destination factor for alpha channel + #1 + + - - - - JCHSZD - JPEG Coded Horizontal Size Lower Register - 0x00A - 8 - read-write - 0x00 - 0xFF - - HSZD - Lower Bytes of Horizontal Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. - 0 - 7 - read-write + BSFA + Blend source factor for alpha channel in alpha channel blending mode (USEACB = 1) + 6 + 6 + write-only + + + 0 + use 1.0 as blend source factor for alpha channel + #0 + + + 1 + use alpha as blend source factor for alpha channel + #1 + + - - - - JCDTCU - JPEG Code Data Count Upper Register - 0x00B - 8 - read-only - 0x00 - 0xFF - - DCU - Upper bytes of the counted amount of data to be compressed The values of this register are reset before compression starts.NOTE: Read-only in Decompression. - 0 - 7 - read-only + READFORMAT32 + Bit 4 and 3 of the texture buffer format.See READFORMAT above for description + 4 + 5 + write-only - - - - JCDTCM - JPEG Code Data Count Middle Register - 0x00C - 8 - read-only - 0x00 - 0xFF - - DCM - Middle bytes of the counted amount of data to be compressedThe values of this register are reset before compression starts. NOTE: Read-only in Decompression. + USEACB + Alpha blend mode + 3 + 3 + write-only + + + 0 + use WRITEALPHA[1:0] mode + #0 + + + 1 + use full alpha channel blending mode + #1 + + + + + PATTERNSOURCEL5 + Limiter 5 is used as pattern index instead of the default U limiter.Limiter 5 can be combined with limiter 6 to form a quadratic limiter which can be used to make quadratic pattern functions to draw radial patterns. + 2 + 2 + write-only + + + TEXTUREENABLE + Pixel source is read from texture and used as an alpha to blend between COLOR1 and COLOR2 + 1 + 1 + write-only + + + 0 + disabled texture + #0 + + + 1 + enabled texture + #1 + + + + + PATTERNENABLE + Pixel source is a pattern color (blend of COLOR1 and COLOR2 depending on PATTERN and pattern index) 0 - 7 - read-only + 0 + write-only + + + 0 + disabled pattern + #0 + + + 1 + enabled pattern + #1 + + - JCDTCD - JPEG Code Data Count Lower Register - 0x00D - 8 - read-only - 0x00 - 0xFF + IRQCTL + Interrupt Control Register + 0xC0 + 32 + write-only + 0x00000000 + 0xFFFFFFFF - DCD - Lower bytes of the counted amount of data to be compressedThe values of this register are reset before compression starts.NOTE: Read-only in Decompression. - 0 - 7 - read-only + BUSIRQCLR + Clear bus error interrupt BUSIRQ + 5 + 5 + write-only + + + 0 + no BUSIRQCLR clear + #0 + + + 1 + clear BUSIRQCLR + #1 + + + + + BUSIRQEN + BUSIRQ interrupt mask enable + 4 + 4 + write-only + + + 0 + disable (mask) BUSIRQ + #0 + + + 1 + enable (unmask) BUSIRQ + #1 + + - - - - JINTE0 - JPEG Interrupt Enable Register 0 - 0x00E - 8 - read-write - 0x00 - 0xFF - - INT7 - This bit enables an interrupt to be generated when the number of data in the restart interval of the Huffman-coding segment is not correct in decompression.When this bit is not set to enable interrupt generation, an error code is not returned. - 7 - 7 - read-write + DLISTIRQCLR + Clear display list interrupt DLISTIRQ + 3 + 3 + write-only 0 - Disabled + no DLISTRQCLR clear #0 1 - Enabled + clear DLISTRQCLR #1 - INT6 - This bit enables an interrupt to be generated when the total number of data in the Huffman-coding segment is not correct in decompression. When this bit is not set to enable interrupt generation, an error code is not returned. - 6 - 6 - read-write + ENUMIRQCLR + Clear enumeration interrupt ENUMIRQ + 2 + 2 + write-only 0 - Disabled + no ENUMIRQCLR clear #0 1 - Enabled + clear ENUMIRQCLR #1 - INT5 - This bit enables an interrupt to be generated when the final number of MCU data in the Huffman-coding segment is not correct in decompression. When this bit is not set to enable interrupt generation, an error code is not returned. - 5 - 5 - read-write + DLISTIRQEN + DLISTIRQ interrupt mask enable + 1 + 1 + write-only 0 - Disabled + disable (mask) DLISTIRQ #0 1 - Enabled + enable (unmask) DLISTIRQ #1 - INT3 - This bit enables an interrupt to be generated when it has been determined that the image size and the subsampling setting of the compressed data can be read through analyzing the data. - 3 - 3 - read-write + ENUMIRQEN + ENUMIRQ interrupt mask enable + 0 + 0 + write-only 0 - Disabled + disable (mask) ENUMIRQ #0 1 - Enabled + enable (unmask) ENUMIRQ #1 @@ -44718,167 +23484,86 @@ FMS2,1,0: - JINTS0 - JPEG Interrupt Status Register 0 - 0x00F - 8 - read-write - 0x00 - 0xFF + CACHECTL + Cache Control Register + 0xC4 + 32 + write-only + 0x00000000 + 0xFFFFFFFF - INS6 - This bit is set to 1 when this module completes compression process normally. - 6 - 6 - read-write - zeroToClear - modify - - - INS5 - This bit is set to 1 when a compressed data error occurs. - 5 - 5 - read-write - zeroToClear - modify - - - INS3 - This bit is set to 1 when the image size and pixel format can be read. When an interrupt occurs, this module stops processing and the state is indicated by the JCRST register. To make this module resume processing, set the JPEG core process stop clear command bit (JRST) in JCCMD. + CFLUSHTX + Flush texture cache 3 3 - read-write - zeroToClear - modify - - - - - JCDERR - JPEG Code Decode Error Register - 0x010 - 8 - read-write - 0x0A - 0xFF - - - ERR - Error Code (See tables )Identify the type of the error which has occurred in the compressed data analysis for decompression. - 0 - 3 - read-write + write-only - 0000 - Normal(Decompression error codes)/Normal(Segment error codes) - #0000 - - - 0001 - SOI not detected(Decompression error codes) - #0001 - - - 0010 - SOF1 to SOFF detected(Decompression error codes) - #0010 - - - 0011 - Unprovided pixel format detected(Decompression error codes) - #0011 - - - 0100 - SOF accuracy error(Decompression error codes) - #0100 - - - 0101 - DQT accuracy error(Decompression error codes) - #0101 - - - 0110 - Component error 1(Decompression error codes) - #0110 - - - 0111 - Component error 2(Decompression error codes) - #0111 - - - 1000 - SOF0, DQT, and DHT not detected when SOS detected(Decompression error codes) - #1000 - - - 1001 - SOS not detected(Decompression error codes) - #1001 - - - 1010 - EOI not detected (default)(Decompression error codes) - #1010 + 0 + do not flush the texture cache + #0 - 1011 - Restart interval data number error detected(Decompression error codes)/Restart interval data number error(Segment error codes) - #1011 + 1 + flush the texture cache + #1 + + + + CENABLETX + Texture cache enable + 2 + 2 + write-only + - 1100 - Image size error detected(Decompression error codes)/Image size error(Segment error codes) - #1100 + 0 + disable the texture cache + #0 - 1101 - Last MCU data number error detected(Decompression error codes)/Last MCU data number error(Segment error codes) - #1101 + 1 + enable the texture cache + #1 + + + + CFLUSHFX + Flush framebuffer cache + 1 + 1 + write-only + - 1110 - Block data number error detected(Decompression error codes)/Block data number error(Segment error codes) - #1110 + 0 + do not flush the framebuffer cache + #0 - others - Setting prohibited - true + 1 + flush the framebuffer cache + #1 - - - - JCRST - JPEG Code Reset Register - 0x011 - 8 - read-only - 0x00 - 0xFF - - RST - Operating State + CENABLEFX + Framebuffer cache enable 0 0 - read-only + write-only 0 - State other than below + disable the framebuffer cache #0 1 - Suspended state caused by interrupt sources of JINTE0 + enable the framebuffer cache #1 @@ -44886,3913 +23571,10527 @@ FMS2,1,0: - JIFECNT - JPEG Interface Compression Control Register - 0x040 + STATUS + Status Control Register + CONTROL + 0x00 32 - read-write + read-only 0x00000000 0xFFFFFFFF - JOUTSWAP - Byte/Halfword/Word Swap Output coded data in compression is swapped. - 8 + BUSERRMDL + display list bus error interrupt triggered + 10 10 - read-write + read-only - 000 - (1) (2) (3) (4) (5) (6) (7) (8) - #000 - - - 001 - (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] - #001 - - - 010 - (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] - #010 + 0 + no display list bus error occurred or interrupt disabled + #0 - 011 - (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] - #011 + 1 + display list bus error interrupt triggered + #1 + + + + BUSERRMTXMRL + texture bus error interrupt triggered + 9 + 9 + read-only + - 100 - (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] - #100 + 0 + no texture bus error occurred or interrupt disabled + #0 - 101 - (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] - #101 + 1 + texture bus error interrupt triggered + #1 + + + + BUSERRMFB + framebuffer bus error interrupt triggered + 8 + 8 + read-only + - 110 - (7) (8) (5) (6) (3) (4) (1) (2) [Word - Halfword swap] - #110 + 0 + no framebuffer bus error occured or interrupt disabled + #0 - 111 - (8) (7) (6) (5) (4) (3) (2) (1) [Word - Word - byte swap] - #111 + 1 + framebuffer bus error interrupt triggered + #1 - DINRINI - Address Initialization when Resuming Input of Image Data Lines This bit is only valid when the count mode for stopping the input of image data lines is on. Set this bit before writing 1 to the data-line resume command bit. + BUSIRQ + bus error interrupt triggered 6 6 - read-write + read-only 0 - The transfer address is not initialized when the input of image data lines is restarted + no bus error occurred or interrupt disabled #0 1 - The transfer address is initialized when the input of image data lines is restarted + bus error interrupt triggered #1 - DINRCMD - Input Image Data Lines Resume Command This bit is valid only when the count mode for stopping the input of image data lines is on. Setting this bit to 1 resumes reading input image data. This bit is always read as 0. + DLISTIRQ + display list finished interrupt triggered 5 5 - write-only - - - DINLC - Count Mode Setting for Stopping Input Image Data Lines - 4 - 4 - read-write + read-only 0 - Count mode for stopping the input of image data lines is off + display list not finished or interrupt disabled #0 1 - Count mode for stopping the input of image data lines is on + display list finished interrupt triggered #1 - DINSWAP - Byte/Halfword Swap - 0 - 2 - read-write + ENUMIRQ + enumeration finished interrupt triggered + 4 + 4 + read-only - 000 - (1) (2) (3) (4) (5) (6) (7) (8) - #000 - - - 001 - (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] - #001 - - - 010 - (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] - #010 - - - 011 - (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] - #011 - - - 100 - (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] - #100 + 0 + enumeration not finished or interrupt disabled + #0 - 101 - (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] - #101 + 1 + enumeration finished interrupt triggered + #1 + + + + DLISTACTIVE + Display list reader status + 3 + 3 + read-only + - 110 - (7) (8) (5) (6) (3) (4) (1) (2) [Word - Halfword swap] - #110 + 0 + display list reader is idle + #0 - 111 - (8) (7) (6) (5) (4) (3) (2) (1) [Word - Halfword - byte swap] - #111 + 1 + display list reader busy, no direct write access to registers allowed + #1 - - - - JIFESA - JPEG Interface Compression Source Address Register - 0x044 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ESA - Input Image Data Source Address (in 8-byte units) The lower three bits should be set to 0. - 0 - 31 - read-write - - - - - JIFESOFST - JPEG Interface Compression Line Offset Register - 0x048 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - ESMW - Input Image Data Lines Offset(in 8-byte units)The lower three bits should be set to 0. - 0 - 14 - read-write - - - - - JIFEDA - JPEG Interface Compression Destination Address Register - 0x04C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - EDA - Input Image Data Lines Offset (in 8-byte units) The lower three bits should be set to 0. - 0 - 31 - read-write - - - - - JIFESLC - JPEG Interface Compression Source Line Count Register - 0x050 - 32 - read-write - 0xFFF8FFF8 - 0xFFFFFFFF - - - LINES - Number of Input Image Data Lines to be Read (in 8-line units) The lower three bits should be set to 0. - 0 - 15 - read-write - - - - - JIFDCNT - JPEG Interface Decompression Control Register - 0x058 - 32 - read-write - 0x01000000 - 0xFFFFFFFF - - VINTER - Vertical SubsamplingSubsamples vertical output image data. - 28 - 29 - read-write + CACHEDIRTY + Framebuffer cache status + 2 + 2 + read-only - 00 - No subsampling - #00 + 0 + framebuffer cache is not dirty + #0 - 01 - Subsamples output data into 1/2. - #01 + 1 + framebuffer cache is dirty, frame should not be flipped + #1 + + + + BUSYWRITE + Framebuffer writeback status + 1 + 1 + read-only + - 10 - Subsamples output data into 1/4. - #10 + 0 + framebuffer writeback finished + #0 - 11 - Subsamples output data into 1/8. - #11 + 1 + framebuffer writeback busy, framebuffer type can not be changed + #1 - HINTER - Horizontal Subsampling Subsamples horizontal output image data. - 26 - 27 - read-write + BUSYENUM + Enumeration unit status + 0 + 0 + read-only - 00 - No subsampling - #00 + 0 + enumeration unit idle + #0 - 01 - Subsamples output data into 1/2. - #01 + 1 + enumeration unit busy, new primitive can not be started + #1 + + + + + + HWREVISION + Hardware Version and Feature Set ID Register + CONTROL2 + 0x04 + 32 + read-only + 0x0FBE0107 + 0xFFFFFFFF + + + ACBLEND + Alpha channel blending feature + 27 + 27 + read-only + - 10 - Subsamples output data into 1/4. - #10 + 0 + Alpha channel blending unavailable + #0 - 11 - Subsamples output data into 1/8. - #11 + 1 + Alpha channel blending available + #1 - OPF - Specifies output image data pixel format. - 24 + COLORKEY + Colorkey feature + 25 25 - read-write + read-only - 01 - ARGB8888 - #01 - - - 10 - RGB565 - #10 + 0 + Colorkey unavailable + #0 - others - Setting prohibited - true + 1 + Colorkey available + #1 - JINRINI - Address Initialization when Input Coded Data is Resumed This bit is only valid when the count mode for stopping the input of coded data is on. Set this bit before writing 1 to the data resume command bit. - 14 - 14 - read-write + TEXCLUT256 + Texture CLUT feature + 24 + 24 + read-only 0 - The transfer address is not initialized when the input of coded data is restarted. + Texture CLUT unavailable #0 1 - The transfer address is initialized when the input of coded data is restarted. + Texture CLUT available #1 - JINRCMD - Input Coded Data Resume CommandThis bit is valid only when the count mode for stopping the input of coded data is on. Setting this bit to 1 resumes reading input coded data. This bit is always read as 0. - 13 - 13 - write-only - - - JINC - Count Mode Setting for Stopping Input Coded Data - 12 - 12 - read-write + RLEUNIT + RLE unit feature + 23 + 23 + read-only 0 - Count mode for stopping the input of coded data is off. + RLE unit unavailable #0 1 - Count mode for stopping the input of coded data is on + RLE unit available #1 - JINSWAP - Byte/Word/Longword Swap Input coded data in decompression is swapped. - 8 - 10 - read-write + TEXCLU + Texture CLUT with 16 or 256 entries feature + 21 + 21 + read-only - 000 - (1) (2) (3) (4) (5) (6) (7) (8) - #000 - - - 001 - (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] - #001 - - - 010 - (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] - #010 + 0 + Texture CLUT with 16 or 256 entries unavailable + #0 - 011 - (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] - #011 + 1 + Texture CLUT with 16 or 256 entries available + #1 + + + + PERFCOUNT + Two performance counter feature + 20 + 20 + read-only + - 100 - (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] - #100 + 0 + Two performance counter unavailable + #0 - 101 - (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] - #101 + 1 + Two performance counter available + #1 + + + + TXCACHE + Texture cache feature + 19 + 19 + read-only + - 110 - (7) (8) (5) (6) (3) (4) (1) (2) [Word -Halfword swap] - #110 + 0 + Texture cache unavailable + #0 - 111 - (8) (7) (6) (5) (4) (3) (2) (1) [Word - Halfword - byte swap] - #111 + 1 + Texture cache available + #1 - DOUTRINI - Address Initialization when Resuming Output of Image Data Lines This bit is only valid when the count mode for stopping the output of image data lines is on. Set this bit before writing 1 to the data-line resume command bit. - 6 - 6 - read-write + FBCACHE + Framebuffer cache feature + 18 + 18 + read-only 0 - The transfer address is not initialized when the output of lines of image data is restarted. + Framebuffer cache unavailable #0 1 - The transfer address is initialized when the output of lines of image data is restarted + Framebuffer cache available #1 - DOUTRCMD - Output Image Data Lines Resume Command This bit is valid only when the count mode for stopping the output of image data lines is on. Setting this bit to 1 resumes writing image data. This bit is always read as 0. - 5 - 5 - write-only - - - DOUTLC - Count Mode for Stopping Output Image Data Lines - 4 - 4 - read-write + DLR + Display list reader feature + 17 + 17 + read-only 0 - Count mode for stopping the output of image data lines is off. + Display list reader unavailable #0 1 - Count mode for stopping the output of image data lines is on + Display list reader available #1 - DOUTSWAP - Byte/Word Swap Output image data in decompression is swapped. + REV + Revision number + 0 + 11 + read-only + + + + + COLOR1 + Base Color Register + 0x64 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + COLOR1A + Alpha channel of color 1(0x00: transparent. . . 0xFF: opaque) + 24 + 31 + write-only + + + COLOR1R + Red channel of color 1 + 16 + 23 + write-only + + + COLOR1G + Green channel of color 1 + 8 + 15 + write-only + + + COLOR1B + Blue channel of color 1 + 0 + 7 + write-only + + + + + COLOR2 + Secondary Color Register + 0x68 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + COLOR2A + Alpha channel of color 2(0x00: transparent. . . 0xFF: opaque) + 24 + 31 + write-only + + + COLOR2R + Red channel of color 2 + 16 + 23 + write-only + + + COLOR2G + Green channel of color 2 + 8 + 15 + write-only + + + COLOR2B + Blue channel of color 2 + 0 + 7 + write-only + + + + + PATTERN + Pattern Register + 0x74 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + PATTERN + Bitmap of the pattern + 0 + 7 + write-only + + + + + 6 + 0x4 + 1-6 + L%sSTART + Limiter %s Start Value Register + 0x10 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + LSTART + Start value of the n'th limiter(n=1-6) + 0 + 31 + write-only + + + + + 6 + 0x4 + 1-6 + L%sXADD + Limiter %s X-Axis Increment Register + 0x28 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + LXADD + X-axis increment + 0 + 31 + write-only + + + + + 6 + 0x4 + 1-6 + L%sYADD + Limiter %s Y-Axis Increment Register + 0x40 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + LYADD + Y-axis increment + 0 + 31 + write-only + + + + + 2 + 0x4 + 1,2 + L%sBAND + Limiter %s Band Width Parameter Register + 0x58 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + LBAND + Limiter m band width parameter + 0 + 31 + write-only + + + + + TEXORIGIN + Texture Base Address Register + 0xBC + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + TEXORIGIN + Texture base address + 0 + 31 + write-only + + + + + TEXPITCH + Texels Per Texture Line Register + 0xB4 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + TEXPITCH + Texels per texture linevalid range: 0 to 2048 + 0 + 31 + write-only + + + + + TEXMASK + Texture Size or Texture Address Mask Register + 0xB8 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + TEXVMASK + V maskSet TEXVMASK[20:0] = TEXPITCH * (texture_height - 1).In texture wrapping mode (CONTROL2.TEXTURECLAMPY = 0): texture_height must be a power of 2In texture clamping mode (CONTROL2.TEXTURECLAMPY = 1):all heights up to 1024 are allowed. + 11 + 31 + write-only + + + TEXUMASK + U maskSet TEXUMASK[10:0] = texture_width -1In texture wrapping mode (CONTROL2.TEXTURECLAMPX = 0): texture_width must be a power of 2.In texture clamping mode (CONTROL2.TEXTURECLAMPX = 1):all widths up to 2048 are allowed. + 0 + 10 + write-only + + + + + LUSTART + U Limiter Start Value Register + 0x90 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + LUSTART + U limiter start value 0 - 2 - read-write - - - 000 - (1) (2) (3) (4) (5) (6) (7) (8) - #000 - - - 001 - (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] - #001 - - - 010 - (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] - #010 - - - 011 - (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] - #011 - - - 100 - (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] - #100 - - - 101 - (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] - #101 - - - 110 - (7) (8) (5) (6) (3) (4) (1) (2) [Word - Halfword swap] - #110 - - - 111 - (8) (7) (6) (5) (4) (3) (2) (1) [Word - Halfword - byte swap] - #111 - - + 31 + write-only - JIFDSA - JPEG Interface Decompression Source Address Register - 0x05C + LUXADD + U Limiter X-Axis Increment Register + 0x94 32 - read-write + write-only 0x00000000 0xFFFFFFFF - DSA - Input Coded Data Source AddressInput Coded Data Source Address (in 8-byte units) The lower three bits should be set to 0. + LUXADD + U limiter x-axis increment 0 31 - read-write + write-only - JIFDDOFST - JPEG Interface Decompression Line Offset Register - 0x060 + LUYADD + U Limiter Y-Axis Increment Register + 0x98 32 - read-write + write-only 0x00000000 0xFFFFFFFF - DDMW - Output Image Data Lines Offset (in 8-byte units) The lower three bits should be set to 0. + LUYADD + U limiter y-axis increment 0 - 14 - read-write + 31 + write-only - JIFDDA - JPEG Interface Decompression Destination Address Register - 0x064 + LVSTARTI + V Limiter Start Value Integer Part Register + 0x9C 32 - read-write + write-only 0x00000000 0xFFFFFFFF - DDA - Output Image Data Destination Address (in 8-byte units) The lower three bits should be set to 0. + LVSTARTI + V limiter start value integer part 0 31 - read-write + write-only - JIFDSDC - JPEG Interface Decompression Source Data Count Register - 0x068 + LVSTARTF + V Limiter Start Value Fractional Part Register + 0xA0 32 - read-write - 0xFFF8FFF8 + write-only + 0x00000000 0xFFFFFFFF - JDATAS - Amount of Input Coded Data to be Read (in 8-byte units) The lower three bits should be set to 0. + LVSTARTF + V limiter start value fractional part 0 15 - read-write + write-only - JIFDDLC - JPEG Interface Decompression Destination Line Count Register - 0x06C + LVXADDI + V Limiter X-Axis Increment Integer Part Register + 0xA4 32 - read-write - 0xFFF8FFF8 + write-only + 0x00000000 0xFFFFFFFF - LINES - Number of Input Image Lines to Be ReadThe lower three bits should be set to 0. These bits are read as0.Number of input image data lines to be read, in 8-line units. + LVXADDI + V limiter x-axis increment integer part 0 - 15 - read-write + 31 + write-only - JIFDADT - JPEG Interface Decompression alpha Set Register - 0x070 + LVYADDI + V Limiter Y-Axis Increment Integer Part Register + 0xA8 32 - read-write + write-only 0x00000000 0xFFFFFFFF - ALPHA - Setting of the alpha value for output in ARGB8888 format. + LVYADDI + V limiter y-axis increment integer part 0 - 7 - read-write + 31 + write-only - JINTE1 - JPEG Interrupt Enable Register 1 - 0x08C + LVYXADDF + V Limiter Increment Fractional Parts Register + 0xAC 32 - read-write + write-only 0x00000000 0xFFFFFFFF - CBTEN - Enables or disables a data transfer processing interrupt request (JDTI) when the CBTF bit in JINTS1 is set to 1. - 6 - 6 - read-write - - - 0 - Disables an interrupt request. - #0 - - - 1 - Enables an interrupt request. - #1 - - + LVYADDF + V y limiter increment fractional part + 16 + 31 + write-only - DINLEN - Enables or disables a data transfer processing interrupt request (JDTI) when the DINLF bit in JINTS1 is set to 1. - 5 - 5 - read-write - - - 0 - Disables an interrupt request. - #0 - - - 1 - Enables an interrupt request. - #1 - - + LVXADDF + V xlimiter increment fractional part + 0 + 15 + write-only + + + + TEXCLADDR + CLUT Start Address Register + 0xDC + 32 + write-only + 0x00000000 + 0xFFFFFFFF + - DBTEN - Enables or disables a data transfer processing interrupt request (JDTI) when the DBTF bit in JINTS1 is set to 1. - 2 - 2 - read-write - - - 0 - Disables an interrupt request. - #0 - - - 1 - Enables an interrupt request. - #1 - - + CLADDR + Texture CLUT start address for indexed texture format + 0 + 7 + write-only + + + + TEXCLDATA + CLUT Data Register + 0xE0 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + - JINEN - Enables or disables a data transfer processing interrupt request (JDTI) when the JINF bit in JINTS1 is set to 1. - 1 - 1 - read-write - - - 0 - Disables an interrupt request. - #0 - - - 1 - Enables an interrupt request. - #1 - - + CLDATA + Texture CLUT data for Indexed texture format + 0 + 31 + write-only + + + + TEXCLOFFSET + CLUT Offset Register + 0xE4 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + - DOUTLEN - Enables or disables a data transfer processing interrupt request (JDTI) when the DOUTLF bit in JINTS1 is set to 1 + CLOFFSET + Texture CLUT offset for Indexed texture format. CLOFFSET[7:0] is or'ed with the original index 0 - 0 - read-write - - - 0 - Disables an interrupt request. - #0 - - - 1 - Enables an interrupt request. - #1 - - + 7 + write-only - JINTS1 - JPEG Interrupt Status Register 1 - 0x090 + COLKEY + Color Key Register + 0xE8 32 - read-write + write-only 0x00000000 0xFFFFFFFF - CBTF - This bit is set to 1 when the last output coded data is written in compression. - 6 - 6 - read-write - modify + COLKEYR + Red channel of color key + 16 + 23 + write-only - DINLF - This bit is set to 1 when the number of input image data lines indicated by JIFESLC is read in compression. This bit is valid only when the DINLC bit in JIFECNT is set to 1. - 5 - 5 - read-write - modify + COLKEYG + Green channel of color key + 8 + 15 + write-only - DBTF - This bit is set to 1 when the last output image data is written in decompression. - 2 - 2 - read-write - modify + COLKEYB + Blue channel of color key + 0 + 7 + write-only + + + + SIZE + Bounding Box Dimension Register + 0x78 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + - JINF - This bit is set to 1 when the amount of input coded data indicated by JIFDSDC is read in decompression. This bit is valid only when the JINC bit in JIFDCNT is set to 1. - 1 - 1 - read-write - modify + SIZEY + Height of the bounding box in pixelsvalid range: 0 to 1024 + 16 + 31 + write-only - DOUTLF - In decompression, this bit is set to 1 when the number of lines of output image data indicated by JIFDDLC have been written. This bit is only valid when the DOUTLC bit in JIFDCNT is set to 1. + SIZEX + Width of the bounding box in pixelsvalid range: 0 to 1024 0 - 0 - read-write - modify + 15 + write-only - 64 - 0x1 - JCQTBL0[%s] - Quantization Table 0 - 0x0100 - 8 + PITCH + Framebuffer Pitch And Spanstore Delay Register + 0x7C + 32 write-only - 0x00 - 0x00 - - - JCQTBL1[%s] - Quantization Table 1 - 0x0140 - - - JCQTBL2[%s] - Quantization Table 2 - 0x0180 - - - JCQTBL3[%s] - Quantization Table 3 - 0x01C0 + 0x00000000 + 0xFFFFFFFF + + + SSD + Spanstore delay + 16 + 31 + write-only + + + PITCH + pitch of the framebuffer. A negative width can be used to render bottom-up instead of top-down + 0 + 15 + write-only + + - 28 - 0x1 - JCHTBD0[%s] - DC Huffman Table 0 - 0x0200 - 8 - read-write - 0x00 - 0x00 - - - JCHTBD1[%s] - DC Huffman Table 1 - 0x0300 + ORIGIN + Framebuffer Base Address Register + 0x80 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + ORIGIN + Address of the first pixel in framebuffer + 0 + 31 + write-only + + - 178 - 0x1 - JCHTBA0[%s] - AC Huffman Table 0 - 0x0220 - 8 - read-write - 0x00 - 0x00 - - - JCHTBA1[%s] - DC Huffman Table 1 - 0x0320 + DLISTSTART + Display List Start Address Register + 0xC8 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + DLISTSTART + Display list start address + 0 + 31 + write-only + + - - - - R_KINT - Key Interrupt Function - 0x40080000 - - 0x00000000 - 0x01 - registers - - - 0x00000004 - 0x01 - registers - - - 0x00000008 - 0x01 - registers - - - KRCTL - KEY Return Control Register - 0x00 - 8 - read-write - 0x00 - 0xFF + PERFTRIGGER + Performance Counters Control Register + 0xD4 + 32 + write-only + 0x00000000 + 0xFFFFFFFF - KRMD - Usage of Key Interrupt Flags(KR0 to KR7) - 7 - 7 - read-write + PERFTRIGGER2 + Selects the internal event that will increment PERFCOUNT2 register + 16 + 31 + write-only - 0 - Do not use key interrupt flags - #0 + 0x00 + disable performance counter + 0x00 - 1 - Use key interrupt flags. - #1 + 0x01 + 2D Drawing Engine active cycles + 0x01 - - - - KREG - Detection Edge Selection (KRF0 to KRF7) - 0 - 0 - read-write - - 0 - Falling edge - #0 + 0x02 + framebuffer read access + 0x02 - 1 - Rising edge - #1 + 0x03 + framebuffer write access + 0x03 - - - - - - KRF - KEY Return Flag Register - 0x04 - 8 - read-write - 0x00 - 0xFF - zeroToClear - modify - - - KRF7 - Key interrupt flag 7 - 7 - 7 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x04 + texture read access + 0x04 - 1 - Interrupt detected. - #1 + 0x05 + invisible pixels (enumerated but selected with alpha 0percent) + 0x05 - - - - KRF6 - Key interrupt flag 6 - 6 - 6 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x06 + invisible pixels while internal FIFO is empty (lost cycles) + 0x06 - 1 - Interrupt detected. - #1 + 0x07 + display list reader active cycles + 0x07 - - - - KRF5 - Key interrupt flag 5 - 5 - 5 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x08 + framebuffer read hits + 0x08 - 1 - Interrupt detected. - #1 + 0x09 + framebuffer read misses + 0x09 - - - - KRF4 - Key interrupt flag 4 - 4 - 4 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x0A + framebuffer write hits + 0x0A - 1 - Interrupt detected. - #1 + 0x0B + framebuffer write misses + 0x0B - - - - KRF3 - Key interrupt flag 3 - 3 - 3 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x0C + texture read hits + 0x0C - 1 - Interrupt detected. - #1 + 0x0D + texture read misses + 0x0D - - - - KRF2 - Key interrupt flag 2 - 2 - 2 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x1F + every clock cycle (for use as timer) + 0x1F - 1 - Interrupt detected. - #1 + others + Setting prohibited + true - KRF1 - Key interrupt flag 1 - 1 - 1 - read-write - zeroToClear - modify + PERFTRIGGER1 + Selects the internal event that will increment PERFCOUNT1 register. + 0 + 15 + write-only - 0 - No interrupt detected - #0 + 0x00 + disable performance counter + 0x00 - 1 - Interrupt detected. - #1 + 0x01 + 2D Drawing Engine active cycles + 0x01 - - - - KRF0 - Key interrupt flag 0 - 0 - 0 - read-write - zeroToClear - modify - - 0 - No interrupt detected - #0 + 0x02 + framebuffer read access + 0x02 - 1 - Interrupt detected. - #1 + 0x03 + framebuffer write access + 0x03 - - - - - - KRM - KEY Return Mode Register - 0x08 - 8 - read-write - 0x00 - 0xFF - - - KRM7 - Key interrupt mode control 7 - 7 - 7 - read-write - - 0 - Does not detect key interrupt signal - #0 + 0x04 + texture read access + 0x04 - 1 - Detect key interrupt signal. - #1 + 0x05 + invisible pixels (enumerated but selected with alpha 0percent) + 0x05 - - - - KRM6 - Key interrupt mode control 6 - 6 - 6 - read-write - - 0 - Does not detect key interrupt signal - #0 + 0x06 + invisible pixels while internal FIFO is empty (lost cycles) + 0x06 - 1 - Detect key interrupt signal. - #1 + 0x07 + display list reader active cycles + 0x07 - - - - KRM5 - Key interrupt mode control 5 - 5 - 5 - read-write - - 0 - Does not detect key interrupt signal - #0 + 0x08 + framebuffer read hits + 0x08 - 1 - Detect key interrupt signal. - #1 + 0x09 + framebuffer read misses + 0x09 - - - - KRM4 - Key interrupt mode control 4 - 4 - 4 - read-write - - 0 - Does not detect key interrupt signal - #0 + 0x0A + framebuffer write hits + 0x0A - 1 - Detect key interrupt signal. - #1 + 0x0B + framebuffer write misses + 0x0B - - - - KRM3 - Key interrupt mode control 3 - 3 - 3 - read-write - - 0 - Does not detect key interrupt signal - #0 + 0x0C + texture read hits + 0x0C - 1 - Detect key interrupt signal. - #1 + 0x0D + texture read misses + 0x0D - - - - KRM2 - Key interrupt mode control 2 - 2 - 2 - read-write - - 0 - Does not detect key interrupt signal - #0 + 0x1F + every clock cycle (for use as timer) + 0x1F - 1 - Detect key interrupt signal. - #1 + others + Setting prohibited + true + + + + 2 + 0x4 + 1,2 + PERFCOUNT%s + Performance Counter %s + 0xCC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PERFCOUNT + Counter value.The counter is reset by writing PERFCOUNT = 0000 0000H. + 0 + 31 + read-write + + + + + + + R_DTC + Data Transfer Controller + 0x40005400 + + 0x00000000 + 0x01 + registers + + + 0x00000004 + 0x04 + registers + + + 0x0000000C + 0x01 + registers + + + 0x0000000E + 0x02 + registers + + + + DTCCR + DTC Control Register + 0x00 + 8 + read-write + 0x08 + 0xFF + - KRM1 - Key interrupt mode control 1 - 1 - 1 + RRS + DTC Transfer Information Read Skip Enable. + 4 + 4 read-write 0 - Does not detect key interrupt signal + Do not skip transfer information read #0 1 - Detect key interrupt signal. + Skip transfer information read when vector numbers match #1 + + + + DTCVBR + DTC Vector Base Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - KRM0 - Key interrupt mode control 0 + DTCVBR + DTC Vector Base Address.Note: A value cannot be set in the lower-order 10 bits. These bits are fixed to 0. + 0 + 31 + read-write + + + + + DTCST + DTC Module Start Register + 0x0C + 8 + read-write + 0x00 + 0xFF + + + DTCST + DTC Module Start 0 0 read-write 0 - Does not detect key interrupt signal + DTC module stop #0 1 - Detect key interrupt signal. + DTC module start #1 - - - - R_MMF - Memory Mirror Function - 0x40001000 - - 0x00000000 - 0x008 - registers - - - MMSFR - MemMirror Special Function Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF + DTCSTS + DTC Status Register + 0x0E + 16 + read-only + 0x0000 + 0xFFFF - KEY - MMSFR Key Code - 24 - 31 - write-only + ACT + DTC Active Flag + 15 + 15 + read-only - 0xDB - Writing to the MEMMIRADDR bits are valid, when the KEY bits are written 0xDB. - 0xDB + 0 + DTC transfer operation is not in progress. + #0 - others - Writing to the MEMMIRADDR bits are invalid. - true + 1 + DTC transfer operation is in progress. + #1 - MEMMIRADDR - Specifies the memory mirror address.NOTE: A value cannot be set in the low-order 7 bits. These bits are fixed to 0. - 7 - 22 - read-write + VECN + DTC-Activating Vector Number MonitoringThese bits indicate the vector number for the activating source when DTC transfer is in progress.The value is only valid if DTC transfer is in progress (the value of the ACT flag is 1) + 0 + 7 + read-only - MMEN - MemMirror Enable Register - 0x04 - 32 + DTCCR_SEC + DTC Control Register for secure Region + 0x10 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x08 + 0xff - KEY - MMEN Key Code - 24 - 31 - write-only + RRSS + DTC Transfer Information Read Skip Enable for Secure + 4 + 4 + read-write - 0xDB - Writing to the EN bit is valid, when the KEY bits are written 0xDB. - 0xDB - - - others - Writing to the EN bit is invalid. - true + 0 + Transfer information read is not skipped. + #0 - - - - EN - Memory Mirror Function Enable - 0 - 0 - read-write - 1 - Memory Mirror Function is enabled. + Transfer information read is skipped when vector numbers match. #1 - - 0 - Memory Mirror Function is disabled. - #0 - - - - - R_MPU_MMPU - Bus Master MPU - 0x40000000 - - 0x00000000 - 0x02 - registers - - - 0x00000102 - 0x02 - registers - - - 0x00000200 - 0x02 - registers - - - 0x00000204 - 0x008 - registers - - - 0x00000210 - 0x02 - registers - - - 0x00000214 - 0x008 - registers - - - 0x00000220 - 0x02 - registers - - - 0x00000224 - 0x008 - registers - - - 0x00000230 - 0x02 - registers - - - 0x00000234 - 0x008 - registers - - - 0x00000240 - 0x02 - registers - - - 0x00000244 - 0x008 - registers - - - 0x00000250 - 0x02 - registers - - - 0x00000254 - 0x008 - registers - - - 0x00000260 - 0x02 - registers - - - 0x00000264 - 0x008 - registers - - - 0x00000270 - 0x02 - registers - - - 0x00000274 - 0x008 - registers - - - 0x00000280 - 0x02 - registers - - - 0x00000284 - 0x008 - registers - - - 0x00000290 - 0x02 - registers - - - 0x00000294 - 0x008 - registers - - - 0x000002A0 - 0x02 - registers - - - 0x000002A4 - 0x008 - registers - - - 0x000002B0 - 0x02 - registers - - - 0x000002B4 - 0x008 - registers - - - 0x000002C0 - 0x02 - registers - - - 0x000002C4 - 0x008 - registers - - - 0x000002D0 - 0x02 - registers - - - 0x000002D4 - 0x008 - registers - - - 0x000002E0 - 0x02 - registers - - - 0x000002E4 - 0x008 - registers - - - 0x000002F0 - 0x02 - registers - - - 0x000002F4 - 0x008 - registers - - - 0x00000300 - 0x02 - registers - - - 0x00000304 - 0x008 - registers - - - 0x00000310 - 0x02 - registers - - - 0x00000314 - 0x008 - registers - - - 0x00000320 - 0x02 - registers - - - 0x00000324 - 0x008 - registers - - - 0x00000330 - 0x02 - registers - - - 0x00000334 - 0x008 - registers - - - 0x00000340 - 0x02 - registers - - - 0x00000344 - 0x008 - registers - - - 0x00000350 - 0x02 - registers - - - 0x00000354 - 0x008 - registers - - - 0x00000360 - 0x02 - registers - - - 0x00000364 - 0x008 - registers - - - 0x00000370 - 0x02 - registers - - - 0x00000374 - 0x008 - registers - - - 0x00000380 - 0x02 - registers - - - 0x00000384 - 0x008 - registers - - - 0x00000390 - 0x02 - registers - - - 0x00000394 - 0x008 - registers - - - 0x000003A0 - 0x02 - registers - - - 0x000003A4 - 0x008 - registers - - - 0x000003B0 - 0x02 - registers - - - 0x000003B4 - 0x008 - registers - - - 0x000003C0 - 0x02 - registers - - - 0x000003C4 - 0x008 - registers - - - 0x000003D0 - 0x02 - registers - - - 0x000003D4 - 0x008 - registers - - - 0x000003E0 - 0x02 - registers - - - 0x000003E4 - 0x008 - registers - - - 0x000003F0 - 0x02 - registers - - - 0x000003F4 - 0x008 - registers - - - 0x00000400 - 0x02 - registers - - - 0x00000502 - 0x02 - registers - - - 0x00000600 - 0x02 - registers - - - 0x00000604 - 0x008 - registers - - - 0x00000610 - 0x02 - registers - - - 0x00000614 - 0x008 - registers - - - 0x00000620 - 0x02 - registers - - - 0x00000624 - 0x008 - registers - - - 0x00000630 - 0x02 - registers - - - 0x00000634 - 0x008 - registers - - - 0x00000640 - 0x02 - registers - - - 0x00000644 - 0x008 - registers - - - 0x00000650 - 0x02 - registers - - - 0x00000654 - 0x008 - registers - - - 0x00000660 - 0x02 - registers - - - 0x00000664 - 0x008 - registers - - - 0x00000670 - 0x02 - registers - + + DTCVBR_SEC + DTC Vector Base Register for secure Region + 0x14 + 32 + read-write + 0x00000000 + 0xffffffff + + + DTEVR + DTC Error Vector Register + 0x20 + 32 + read-write + 0x00000000 + 0xffffffff + + + DTEV + DTC Error Vector Number + 0 + 7 + read-only + + + DTEVSAM + DTC Error Vector Number SA Monitor + 8 + 8 + read-only + + + 0 + Secure vector number + #0 + + + 1 + Non-Secure vector number + #1 + + + + + DTESTA + DTC Error Status Flag + 16 + 16 + read-write + + + 0 + No DTC transfer error occurred + #0 + + + 1 + DTC transfer error occurred + #1 + + + + + + + + + R_ELC + Event Link Controller + 0x40041000 - 0x00000674 - 0x008 + 0x00000000 + 0x01 registers - 0x00000680 - 0x02 + 0x00000002 + 0x01 registers - 0x00000684 - 0x008 + 0x00000004 + 0x01 registers - 0x00000690 + 0x00000010 0x02 registers - 0x00000694 - 0x008 - registers - - - 0x000006A0 + 0x00000014 0x02 registers - 0x000006A4 - 0x008 - registers - - - 0x000006B0 + 0x00000018 0x02 registers - 0x000006B4 - 0x008 - registers - - - 0x000006C0 + 0x0000001C 0x02 registers - 0x000006C4 - 0x008 - registers - - - 0x000006D0 + 0x00000020 0x02 registers - 0x000006D4 - 0x008 - registers - - - 0x000006E0 + 0x00000024 0x02 registers - 0x000006E4 - 0x008 - registers - - - 0x000006F0 + 0x00000028 0x02 registers - 0x000006F4 - 0x008 - registers - - - 0x00000700 + 0x0000002C 0x02 registers - 0x00000704 - 0x008 - registers - - - 0x00000710 + 0x00000030 0x02 registers - 0x00000714 - 0x008 - registers - - - 0x00000720 + 0x00000034 0x02 registers - 0x00000724 - 0x008 - registers - - - 0x00000730 + 0x00000038 0x02 registers - 0x00000734 - 0x008 - registers - - - 0x00000740 + 0x0000003C 0x02 registers - 0x00000744 - 0x008 - registers - - - 0x00000750 + 0x00000040 0x02 registers - 0x00000754 - 0x008 - registers - - - 0x00000760 + 0x00000044 0x02 registers - 0x00000764 - 0x008 - registers - - - 0x00000770 + 0x00000048 0x02 registers - 0x00000774 - 0x008 - registers - - - 0x00000780 + 0x0000004C 0x02 registers - 0x00000784 - 0x008 - registers - - - 0x00000790 + 0x00000050 0x02 registers - 0x00000794 - 0x008 - registers - - - 0x000007A0 + 0x00000054 0x02 registers - 0x000007A4 - 0x008 - registers - - - 0x000007B0 + 0x00000058 0x02 registers - 0x000007B4 - 0x008 - registers - - - 0x000007C0 + 0x0000005C 0x02 registers - 0x000007C4 - 0x008 - registers - - - 0x000007D0 + 0x00000060 0x02 registers - 0x000007D4 - 0x008 - registers - - - 0x000007E0 + 0x00000064 0x02 registers - 0x000007E4 - 0x008 - registers - - - 0x000007F0 + 0x00000068 0x02 registers + + + 2 + 0x2 + ELSEGR[%s] + Event Link Software Event Generation Register + 0x02 + + BY + Event Link Software Event Generation Register + 0x00 + 8 + read-write + 0x80 + 0xFF + + + WI + ELSEGR Register Write Disable + 7 + 7 + write-only + + + 0 + Write to ELSEGR register is enabled. + #0 + + + 1 + Write to ELSEGR register is disabled. + #1 + + + + + WE + SEG Bit Write Enable + 6 + 6 + read-write + + + 0 + Write to SEG bit is disabled. + #0 + + + 1 + Write to SEG bit is enabled. + #1 + + + + + SEG + Software Event Generation + 0 + 0 + write-only + + + 0 + Normal operation + #0 + + + 1 + Software event is generated. + #1 + + + + + + + + 23 + 0x4 + + + GPTA + GPTA + 0 + + + GPTB + GPTB + 1 + + + GPTC + GPTC + 2 + + + GPTD + GPTD + 3 + + + GPTE + GPTE + 4 + + + GPTF + GPTF + 5 + + + GPTG + GPTG + 6 + + + GPTH + GPTH + 7 + + + ADCA0 + ADCA0 + 8 + + + ADCB0 + ADCB0 + 9 + + + ADCA1 + ADCA1 + 10 + + + ADCB1 + ADCB1 + 11 + + + DA0 + DA0 + 12 + + + DA1 + DA1 + 13 + + + PORT1 + PORT1 + 14 + + + PORT2 + PORT2 + 15 + + + PORT3 + PORT3 + 16 + + + PORT4 + PORT4 + 17 + + + CTSU + CTSU + 18 + + + DA80 + DA80 + 19 + + + DA81 + DA81 + 20 + + + DA82 + DA82 + 21 + + + SDADC0 + SDADC0 + 22 + + + ELSR[%s] + Event Link Setting Register %s + 0x10 + + HA + Event Link Setting Register + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + + + ELS + Event Link Select + 0 + 8 + read-write + + + 0x000 + Event output to the corresponding peripheral module is disabled. + 0x000 + + + others + Set the number for the event signal to be linked. + true + + + + + + + + ELCR + Event Link Controller Register + 0x00 + 8 + read-write + 0x00 + 0xFF + + + ELCON + All Event Link Enable + 7 + 7 + read-write + + + 0 + ELC function is disabled. + #0 + + + 1 + ELC function is enabled. + #1 + + + + + + + ELCSARA + Event Link Controller Security Attribution Register A + 0x74 + 16 + read-write + 0xFFFF + 0xFFFF + + + ELSEGR0 + Event Link Software Event Generation Register 0 Security Attribution + 0 + 0 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSEGR1 + Event Link Software Event Generation Register 1Security Attribution + 1 + 1 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELCR + Event Link Controller RegisterSecurity Attribution + 2 + 2 + read-write + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + Reserved + These bits are read as 1111111111111. The write value should be 1111111111111. + 3 + 15 + read-write + + + + + ELCSARB + Event Link Controller Security Attribution Register B + 0x78 + 16 + read-write + 0xFFFF + 0xFFFF + + + ELSR0 + Event Link Setting Register 0Security Attribution + 0 + 0 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR1 + Event Link Setting Register 1Security Attribution + 1 + 1 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR2 + Event Link Setting Register 2Security Attribution + 2 + 2 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR3 + Event Link Setting Register 3Security Attribution + 3 + 3 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR4 + Event Link Setting Register 4Security Attribution + 4 + 4 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR5 + Event Link Setting Register 5Security Attribution + 5 + 5 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR6 + Event Link Setting Register 6Security Attribution + 6 + 6 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR7 + Event Link Setting Register 7Security Attribution + 7 + 7 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR8 + Event Link Setting Register 8Security Attribution + 8 + 8 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR9 + Event Link Setting Register 9Security Attribution + 9 + 9 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR10 + Event Link Setting Register 10Security Attribution + 10 + 10 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR11 + Event Link Setting Register 11Security Attribution + 11 + 11 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR12 + Event Link Setting Register 12Security Attribution + 12 + 12 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR13 + Event Link Setting Register 13Security Attribution + 13 + 13 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR14 + Event Link Setting Register 14Security Attribution + 14 + 14 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR15 + Event Link Setting Register 15Security Attribution + 15 + 15 + read-write + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + + + ELCSARC + Event Link Controller Security Attribution Register C + 0x7C + 16 + read-write + 0xFFFF + 0xFFFF + + + ELSR16 + Event Link Setting Register 16Security Attribution + 0 + 0 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR17 + Event Link Setting Register 17Security Attribution + 1 + 1 + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + ELSR18 + Event Link Setting Register 18Security Attribution + 2 + 2 + read-write + + + 0 + Secure + #0 + + + 1 + NonSecure + #1 + + + + + Reserved + These bits are read as 1111111111111. The write value should be 1111111111111. + 3 + 15 + read-write + + + + + + + R_ETHERC0 + Ethernet MAC Controller + 0x40064100 - 0x000007F4 - 0x008 + 0x00000000 + 0x04 registers - 0x00000800 - 0x02 + 0x00000008 + 0x04 registers - 0x00000902 - 0x02 + 0x00000010 + 0x04 registers - 0x00000A00 - 0x02 + 0x00000018 + 0x04 registers - 0x00000A04 - 0x008 + 0x00000020 + 0x04 registers - 0x00000A10 - 0x02 + 0x00000028 + 0x04 registers - 0x00000A14 - 0x008 + 0x00000040 + 0x04 registers - 0x00000A20 - 0x02 + 0x00000050 + 0x00C registers - 0x00000A24 - 0x008 + 0x00000060 + 0x010 registers - 0x00000A30 - 0x02 + 0x000000C0 + 0x04 registers - 0x00000A34 - 0x008 + 0x000000C8 + 0x04 registers - 0x00000A40 - 0x02 + 0x000000D0 + 0x010 registers - 0x00000A44 - 0x008 + 0x000000E4 + 0x018 registers + + + ECMR + ETHERC Mode Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TPC + PAUSE Frame Transmit + 20 + 20 + read-write + + + 0 + PAUSE frame is transmitted even during a PAUSE period. + #0 + + + 1 + PAUSE frame is not transmitted during a PAUSE period. + #1 + + + + + ZPF + 0 Time PAUSE Frame Enable + 19 + 19 + read-write + + + 0 + PAUSE frame that contains the pause_time parameter of 0 is not used. + #0 + + + 1 + PAUSE frame that contains the pause_time parameter of 0 is used. + #1 + + + + + PFR + PAUSE Frame Receive Mode + 18 + 18 + read-write + + + 0 + PAUSE frame is not transferred to the EDMAC. + #0 + + + 1 + PAUSE frame is transferred to the EDMAC. + #1 + + + + + RXF + Receive Flow Control Operating Mode + 17 + 17 + read-write + + + 0 + PAUSE frame detection is disabled. + #0 + + + 1 + PAUSE frame detection is enabled. + #1 + + + + + TXF + Transmit Flow Control Operating Mode + 16 + 16 + read-write + + + 0 + Automatic PAUSE frame transmission is disabled.(PAUSE frame is not automatically transmitted.) + #0 + + + 1 + Automatic PAUSE frame transmission is enabled.(PAUSE frame is automatically transmitted as required.) + #1 + + + + + PRCEF + CRC Error Frame Receive Mode + 12 + 12 + read-write + + + 0 + EDMAC is notified of a CRC error. + #0 + + + 1 + EDMAC is not notified of a CRC error. + #1 + + + + + MPDE + Magic Packet Detection Enable + 9 + 9 + read-write + + + 0 + Magic Packet detection is disabled. + #0 + + + 1 + Magic Packet detection is enabled. + #1 + + + + + RE + Reception Enable + 6 + 6 + read-write + + + 0 + Receive function is disabled. + #0 + + + 1 + Receive function is enabled. + #1 + + + + + TE + Transmission Enable + 5 + 5 + read-write + + + 0 + Transmit function is disabled. + #0 + + + 1 + Transmit function is enabled. + #1 + + + + + ILB + Internal Loopback Mode + 3 + 3 + read-write + + + 0 + Normal data transmission or reception is performed. + #0 + + + 1 + Data is looped back in the ETHERC when full-duplex mode is selected. + #1 + + + + + RTM + Bit Rate + 2 + 2 + read-write + + + 0 + 10 Mbps + #0 + + + 1 + 100 Mbps + #1 + + + + + DM + Duplex Mode + 1 + 1 + read-write + + + 0 + Half-duplex mode + #0 + + + 1 + Full-duplex mode + #1 + + + + + PRM + Promiscuous Mode + 0 + 0 + read-write + + + 0 + Promiscuous mode is disabled. + #0 + + + 1 + Promiscuous mode is enabled. + #1 + + + + + + + RFLR + Receive Frame Maximum Length Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RFL + Receive Frame Maximum LengthThe set value becomes the maximum frame length. The minimum value that can be set is 1,518 bytes, and the maximum value that can be set is 2,048 bytes. Values that are less than 1,518 bytes are regarded as 1,518 bytes, and values larger than 2,048 bytes are regarded as 2,048 bytes. + 0 + 11 + read-write + + + + + ECSR + ETHERC Status Register + 0x10 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BFR + Continuous Broadcast Frame Reception Flag + 5 + 5 + read-write + oneToClear + modify + + + 0 + Continuous reception of broadcast frames has not been detected. + #0 + + + 1 + Continuous reception of broadcast frames has been detected. + #1 + + + + + PSRTO + PAUSE Frame Retransmit Over Flag + 4 + 4 + read-write + oneToClear + modify + + + 0 + PAUSE frame retransmit count has not reached the upper limit. + #0 + + + 1 + PAUSE frame retransmit count has reached the upper limit. + #1 + + + + + LCHNG + LCHNG Link Signal Change Flag + 2 + 2 + read-write + oneToClear + modify + + + 0 + Change in the ETn_LINKSTA signal has not been detected. + #0 + + + 1 + Change in the ETn_LINKSTA signal has been detected (high to low, or low to high). + #1 + + + + + MPD + Magic Packet Detect Flag + 1 + 1 + read-write + oneToClear + modify + + + 0 + Magic Packet has not been detected. + #0 + + + 1 + Magic Packet has been detected. + #1 + + + + + ICD + False Carrier Detect Flag + 0 + 0 + read-write + oneToClear + modify + + + 0 + PHY-LSI has not detected a false carrier on the line. + #0 + + + 1 + PHY-LSI has detected a false carrier on the line. + #1 + + + + + + + ECSIPR + ETHERC Interrupt Enable Register + 0x18 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BFSIPR + Continuous Broadcast Frame Reception Interrupt Enable + 5 + 5 + read-write + + + 0 + Notification of continuous broadcast frame reception interrupt is disabled. + #0 + + + 1 + Notification of continuous broadcast frame reception interrupt is enabled. + #1 + + + + + PSRTOIP + PAUSE Frame Retransmit Over Interrupt Enable + 4 + 4 + read-write + + + 0 + Notification of PAUSE frame retransmit over interrupt is disabled. + #0 + + + 1 + Notification of PAUSE frame retransmit over interrupt is enabled. + #1 + + + + + LCHNGIP + LINK Signal Change Interrupt Enable + 2 + 2 + read-write + + + 0 + Notification of ETn_LINKSTA signal change interrupt is disabled. + #0 + + + 1 + Notification of ETn_LINKSTA signal change interrupt is enabled. + #1 + + + + + MPDIP + Magic Packet Detect Interrupt Enable + 1 + 1 + read-write + + + 0 + Notification of the Magic Packet detect interrupt is disabled. + #0 + + + 1 + Notification of the Magic Packet detect interrupt is enabled. + #1 + + + + + ICDIP + False Carrier Detect Interrupt Enable + 0 + 0 + read-write + + + 0 + Notification of the false carrier detect interrupt is disabled. + #0 + + + 1 + Notification of the false carrier detect interrupt is enabled. + #1 + + + + + + + PIR + PHY Interface Register + 0x20 + 32 + read-write + 0x00000000 + 0xFFFFFFF7 + + + MDI + MII/RMII Management Data-InThis bit indicates the level of the ETn_MDIO pin. The write value should be 0. + 3 + 3 + read-only + + + MDO + MII/RMII Management Data-OutThe MDO bit value is output from the ETn_MDIO pin when the MMD bit is 1 (write). The value is not output when the MMD bit is 0 (read). + 2 + 2 + read-write + + + MMD + MII/RMII Management Mode + 1 + 1 + read-write + + + 0 + Read + #0 + + + 1 + Write + #1 + + + + + MDC + MII/RMII Management Data ClockThe MDC bit value is output from the ETn_MDC pin to supply the management data clock to the MII or RMII. + 0 + 0 + read-write + + + + + PSR + PHY Status Register + 0x28 + 32 + read-only + 0x00000000 + 0xFFFFFFFE + + + LMON + ETn_LINKSTA Pin Status FlagThe link status can be read by connecting the link signal output from the PHY-LSI to the ETn_LINKSTA pin. For details on the polarity, refer to the specifications of the connected PHY-LSI. + 0 + 0 + read-only + + + + + RDMLR + Random Number Generation Counter Upper Limit Setting Register + 0x40 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RMD + Random Number Generation Counter + 0 + 19 + read-write + + + 00000h + Normal operation + 0x00000 + + + others + Setting prohibited + true + + + + + + + IPGR + IPG Register + 0x50 + 32 + read-write + 0x00000014 + 0xFFFFFFFF + + + IPG + Interpacket Gap Range:"16bit time(0x00)"-"140bit time(0x1F)" + 0 + 4 + read-write + + + 14h + 96 bit time (initial value) + 0x14 + + + others + (IPGx4+16) bit time + true + + + + + + + APR + Automatic PAUSE Frame Register + 0x54 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + AP + Automatic PAUSE Time SettingThese bits set the value of the pause_time parameter for a PAUSE frame that is automatically transmitted. Transmission is not performed until the set value multiplied by 512 bit time has elapsed. + 0 + 15 + read-write + + + + + MPR + Manual PAUSE Frame Register + 0x58 + 32 + write-only + 0x00000000 + 0xFFFF0000 + + + MP + Manual PAUSE Time SettingThese bits set the value of the pause_time parameter for a PAUSE frame that is manually transmitted. Transmission is not performed until the set value multiplied by 512 bit time has elapsed. The read value is undefined. + 0 + 15 + write-only + + + + + RFCF + Received PAUSE Frame Counter + 0x60 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + RPAUSE + Received PAUSE Frame CountNumber of received PAUSE frames + 0 + 7 + read-only + + + + + TPAUSER + PAUSE Frame Retransmit Count Setting Register + 0x64 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TPAUSE + Automatic PAUSE Frame Retransmit Setting + 0 + 15 + read-write + + + 0x0000 + Number of retransmissions is unlimited + 0x0000 + + + others + Maximum number of retransmissions is (TPAUSE) + true + + + + + + + TPAUSECR + PAUSE Frame Retransmit Counter + 0x68 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + + BCFRR + Broadcast Frame Receive Count Setting Register + 0x6C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BCF + Broadcast Frame Continuous Receive Count Setting + 0 + 15 + read-write + + + 0000h + Number of receptions is unlimited. + 0x0000 + + + others + Receive (BFC) frame. + true + + + + + + + MAHR + MAC Address Upper Bit Register + 0xC0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MAHR + MAC Address Upper Bit RegisterThe MAHR register sets the upper 32 bits (b47 to b16) of the 48-bit MAC address. + 0 + 31 + read-write + + + + + MALR + MAC Address Lower Bit Register + 0xC8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MALR + MAC Address Lower Bit RegisterThe MALR register sets the lower 16 bits of the 48-bit MAC address. + 0 + 15 + read-write + + + + + TROCR + Transmit Retry Over Counter Register + 0xD0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TROCR + Transmit Retry Over Counter RegisterThe TROCR register is a counter indicating the number of frames that fail to be retransmitted. + 0 + 31 + read-write + clear + + + + + CDCR + Late Collision Detect Counter Register + 0xD4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + + LCCR + Lost Carrier Counter Register + 0xD8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + LCCR + Lost Carrier Counter RegisterThe LCCR register is a counter indicating the number of times a loss of carrier is detected during frame transmission. + 0 + 31 + read-write + clear + + + + + CNDCR + Carrier Not Detect Counter Register + 0xDC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CNDCR + Carrier Not Detect Counter RegisterThe CNDCR register is a counter indicating the number of times a carrier is not detected during preamble transmission. + 0 + 31 + read-write + clear + + + + + CEFCR + CRC Error Frame Receive Counter Register + 0xE4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CEFCR + CRC Error Frame Receive Counter RegisterThe CEFCR register is a counter indicating the number of received frames where a CRC error has been detected. + 0 + 31 + read-write + clear + + + + + FRECR + Frame Receive Error Counter Register + 0xE8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FRECR + Frame Receive Error Counter RegisterThe FRECR register is a counter indicating the number of times a frame receive error has occurred. + 0 + 31 + read-write + clear + + + + + TSFRCR + Too-Short Frame Receive Counter Register + 0xEC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TSFRCR + Too-Short Frame Receive Counter RegisterThe TSFRCR register is a counter indicating the number of times a short frame that is shorter than 64 bytes has been received. + 0 + 31 + read-write + clear + + + + + TLFRCR + Too-Long Frame Receive Counter Register + 0xF0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TLFRCR + Too-Long Frame Receive Counter RegisterThe TLFRCR register is a counter indicating the number of times a long frame that is longer than the RFLR register value has been received. + 0 + 31 + read-write + clear + + + + + RFCR + Received Alignment Error Frame Counter Register + 0xF4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RFCR + Received Alignment Error Frame Counter RegisterThe RFCR register is a counter indicating the number of times a frame has been received with the alignment error (frame is not an integral number of octets). + 0 + 31 + read-write + clear + + + + + MAFCR + Multicast Address Frame Receive Counter Register + 0xF8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MAFCR + Multicast Address Frame Receive Counter RegisterThe MAFCR register is a counter indicating the number of times a frame where the multicast address is set has been received. + 0 + 31 + read-write + clear + + + + + + + R_ETHERC_EDMAC + Ethernet DMA Controller + 0x40064000 - 0x00000A50 - 0x02 + 0x00000000 + 0x04 registers - 0x00000A54 - 0x008 + 0x00000008 + 0x04 registers - 0x00000A60 - 0x02 + 0x00000010 + 0x04 registers - 0x00000A64 - 0x008 + 0x00000018 + 0x04 registers - 0x00000A70 - 0x02 + 0x00000020 + 0x04 registers - 0x00000A74 - 0x008 + 0x00000028 + 0x04 registers - 0x00000A80 - 0x02 + 0x00000030 + 0x04 registers - 0x00000A84 - 0x008 + 0x00000038 + 0x04 registers - 0x00000A90 - 0x02 + 0x00000040 + 0x04 registers - 0x00000A94 - 0x008 + 0x00000048 + 0x04 registers - 0x00000AA0 - 0x02 + 0x00000050 + 0x04 registers - 0x00000AA4 - 0x008 + 0x00000058 + 0x04 registers - 0x00000AB0 - 0x02 + 0x00000064 + 0x010 registers - 0x00000AB4 + 0x00000078 0x008 registers - 0x00000AC0 - 0x02 - registers - - - 0x00000AC4 + 0x000000C8 0x008 registers - 0x00000AD0 - 0x02 - registers - - - 0x00000AD4 + 0x000000D4 0x008 registers + + + EDMR + EDMAC Mode Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DE + Big Endian Mode/Little Endian ModeNOTE: This setting applies to data for the transmit/receive buffer. It does not apply to transmit/receive descriptors and registers. + 6 + 6 + read-write + + + 0 + Big endian mode + #0 + + + 1 + Little endian mode + #1 + + + + + DL + Transmit/Receive DescriptorLength + 4 + 5 + read-write + + + 00 + 16 bytes + #00 + + + 01 + 32 bytes + #01 + + + 10 + 64 bytes + #10 + + + 11 + 16 bytes + #11 + + + + + SWR + Software Reset + 0 + 0 + write-only + + + 0 + no effect. + #0 + + + 1 + the corresponding channels of the EDMAC and ETHERC are reset. Registers TDLAR, RDLAR, RMFCR, TFUCR, and RFOCR are not reset. + #1 + + + + + + + EDTRR + EDMAC Transmit Request Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TR + Transmit Request + 0 + 0 + write-only + + + 0 + no effect. + #0 + + + 1 + When 1 is written, the EDMAC reads the corresponding descriptor and transmits frames where the TD0.TACT bit is 1. The TR bit becomes 0 after all the valid frames are transmitted. + #1 + + + + + + + EDRRR + EDMAC Receive Request Register + 0x10 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RR + Receive Request + 0 + 0 + read-write + + + 0 + Receive function is disabled. + #0 + + + 1 + Receive descriptor is read, and the receive function is enabled. + #1 + + + + + + + TDLAR + Transmit Descriptor List Start Address Register + 0x18 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TDLAR + The start address of the transmit descriptor list is set. Set the start address according to the descriptor length selected by the EDMR.DL[1:0] bits.16-byte boundary: Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte boundary: Lower 6 bits = 000000b + 0 + 31 + read-write + + + + + RDLAR + Receive Descriptor List Start Address Register + 0x20 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RDLAR + The start address of the receive descriptor list is set. Set the start address according to the descriptor length selected by the EDMR.DL[1:0] bits.16-byte boundary: Lower 4 bits = 0000b32-byte boundary: Lower 5 bits = 00000b64-byte boundary: Lower 6 bits = 000000b + 0 + 31 + read-write + + + + + EESR + ETHERC/EDMAC Status Register + 0x28 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TWB + Write-Back Complete Flag + 30 + 30 + read-write + oneToClear + modify + + + 0 + Write-back has not been completed, or no transmission has been requested. + #0 + + + 1 + Write-back to the transmit descriptor has been completed. + #1 + + + + + TABT + Transmit Abort Detect Flag + 26 + 26 + read-write + oneToClear + modify + + + 0 + Frame transmission has not been aborted or no transmission has been requested. + #0 + + + 1 + Frame transmission has been aborted. + #1 + + + + + RABT + Receive Abort Detect Flag + 25 + 25 + read-write + oneToClear + modify + + + 0 + Frame reception has not been aborted or no reception has been requested. + #0 + + + 1 + Frame reception has been aborted. + #1 + + + + + RFCOF + Receive Frame Counter Overflow Flag + 24 + 24 + read-write + oneToClear + modify + + + 0 + Receive frame counter has not overflowed. + #0 + + + 1 + Receive frame counter has overflowed. + #1 + + + + + ADE + Address Error Flag + 23 + 23 + read-write + oneToClear + modify + + + 0 + Invalid memory address has not been detected (normal operation). + #0 + + + 1 + Invalid memory address has been detected. + #1 + + + + + ECI + ETHERC Status Register Source FlagNOTE: When the source in the ETHERCn.ECSR register is cleared, the ECI flag is also cleared. + 22 + 22 + read-only + + + 0 + ETHERC status interrupt source has not been detected. + #0 + + + 1 + ETHERC status interrupt source has been detected. + #1 + + + + + TC + Frame Transfer Complete Flag + 21 + 21 + read-write + oneToClear + modify + + + 0 + Transfer have not been completed, or no transfer has been requested. + #0 + + + 1 + All frames indicated by the transmit descriptor have been completely transferred to the transmit FIFO. + #1 + + + + + TDE + Transmit Descriptor Empty Flag + 20 + 20 + read-write + oneToClear + modify + + + 0 + The EDMAC detects that the transmit descriptor valid bit (TDn.TACT) is 1. + #0 + + + 1 + The EDMAC detects that the transmit descriptor valid bit (TDn.TACT) is 0. + #1 + + + + + TFUF + Transmit FIFO Underflow Flag + 19 + 19 + read-write + oneToClear + modify + + + 0 + Underflow has not occurred. + #0 + + + 1 + Underflow has occurred. + #1 + + + + + FR + Frame Receive Flag + 18 + 18 + read-write + oneToClear + modify + + + 0 + Frame has not been received. + #0 + + + 1 + Frame has been received. Update of the receive descriptor is complete. + #1 + + + + + RDE + Receive Descriptor Empty Flag + 17 + 17 + read-write + oneToClear + modify + + + 0 + The EDMAC detects that the receive descriptor valid bit (RDn.RACT) is 1. + #0 + + + 1 + The EDMAC detects that the receive descriptor valid bit (RDn.RACT) is 0. + #1 + + + + + RFOF + Receive FIFO Overflow Flag + 16 + 16 + read-write + oneToClear + modify + + + 0 + Overflow has not occurred. + #0 + + + 1 + Overflow has occurred. + #1 + + + + + CND + Carrier Not Detect Flag + 11 + 11 + read-write + oneToClear + modify + + + 0 + A carrier has been detected when transmission starts. + #0 + + + 1 + A carrier has not been detected during preamble transmission. + #1 + + + + + DLC + Loss of Carrier Detect Flag + 10 + 10 + read-write + oneToClear + modify + + + 0 + Loss of carrier has not been detected. + #0 + + + 1 + Loss of carrier has been detected during frame transmission. + #1 + + + + + CD + Late Collision Detect Flag + 9 + 9 + read-write + oneToClear + modify + + + 0 + Late collision has not been detected. + #0 + + + 1 + Late collision has been detected during frame transmission. + #1 + + + + + TRO + Transmit Retry Over Flag + 8 + 8 + read-write + oneToClear + modify + + + 0 + Transmit retry-over condition has not been detected. + #0 + + + 1 + Transmit retry-over condition has been detected. + #1 + + + + + RMAF + Multicast Address Frame Receive Flag + 7 + 7 + read-write + oneToClear + modify + + + 0 + Multicast address frame has not been received. + #0 + + + 1 + Multicast address frame has been received. + #1 + + + + + RRF + Alignment Error Flag + 4 + 4 + read-write + oneToClear + modify + + + 0 + Alignment error has not been detected. + #0 + + + 1 + Alignment error has been detected. + #1 + + + + + RTLF + Frame-Too-Long Error Flag + 3 + 3 + read-write + oneToClear + modify + + + 0 + Frame-too-long error has not been detected. + #0 + + + 1 + Frame-too-long error has been detected. + #1 + + + + + RTSF + Frame-Too-Short Error Flag + 2 + 2 + read-write + oneToClear + modify + + + 0 + Frame-too-short error has not been detected. + #0 + + + 1 + Frame-too-short error has been detected. + #1 + + + + + PRE + PHY-LSI Receive Error Flag + 1 + 1 + read-write + oneToClear + modify + + + 0 + PHY-LSI receive error has not been detected. + #0 + + + 1 + PHY-LSI receive error has been detected. + #1 + + + + + CERF + CRC Error Flag + 0 + 0 + read-write + oneToClear + modify + + + 0 + CRC error has not been detected. + #0 + + + 1 + CRC error has been detected. + #1 + + + + + + + EESIPR + ETHERC/EDMAC Status Interrupt Enable Register + 0x30 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TWBIP + Write-Back Complete Interrupt Request Enable + 30 + 30 + read-write + + + 0 + Write-back complete interrupt request is disabled. + #0 + + + 1 + Write-back complete interrupt request is enabled. + #1 + + + + + TABTIP + Transmit Abort Detect Interrupt Request Enable + 26 + 26 + read-write + + + 0 + Transmit abort detect interrupt request is disabled. + #0 + + + 1 + Transmit abort detect interrupt request is enabled. + #1 + + + + + RABTIP + Receive Abort Detect Interrupt Request Enable + 25 + 25 + read-write + + + 0 + Receive abort detect interrupt request is disabled. + #0 + + + 1 + Receive abort detect interrupt request is enabled. + #1 + + + + + RFCOFIP + Receive Frame Counter Overflow Interrupt Request Enable + 24 + 24 + read-write + + + 0 + Receive frame counter overflow interrupt request is disabled. + #0 + + + 1 + Receive frame counter overflow interrupt request is enabled. + #1 + + + + + ADEIP + Address Error Interrupt Request Enable + 23 + 23 + read-write + + + 0 + Address error interrupt request is disabled. + #0 + + + 1 + Address error interrupt request is enabled. + #1 + + + + + ECIIP + ETHERC Status Register Source Interrupt Request Enable + 22 + 22 + read-write + + + 0 + ETHERC status interrupt request is disabled. + #0 + + + 1 + ETHERC status interrupt request is enabled. + #1 + + + + + TCIP + Frame Transfer Complete Interrupt Request Enable + 21 + 21 + read-write + + + 0 + Frame transmission complete interrupt request is disabled. + #0 + + + 1 + Frame transmission complete interrupt request is enabled. + #1 + + + + + TDEIP + Transmit Descriptor Empty Interrupt Request Enable + 20 + 20 + read-write + + + 0 + Transmit descriptor empty interrupt request is disabled. + #0 + + + 1 + Transmit descriptor empty interrupt request is enabled. + #1 + + + + + TFUFIP + Transmit FIFO Underflow Interrupt Request Enable + 19 + 19 + read-write + + + 0 + Underflow interrupt request is disabled. + #0 + + + 1 + Underflow interrupt request is enabled. + #1 + + + + + FRIP + Frame Receive Interrupt Request Enable + 18 + 18 + read-write + + + 0 + Frame reception interrupt request is disabled. + #0 + + + 1 + Frame reception interrupt request is enabled. + #1 + + + + + RDEIP + Receive Descriptor Empty Interrupt Request Enable + 17 + 17 + read-write + + + 0 + Receive descriptor empty interrupt request is disabled. + #0 + + + 1 + Receive descriptor empty interrupt request is enabled. + #1 + + + + + RFOFIP + Receive FIFO Overflow Interrupt Request Enable + 16 + 16 + read-write + + + 0 + Overflow interrupt request is disabled. + #0 + + + 1 + Overflow interrupt request is enabled. + #1 + + + + + CNDIP + Carrier Not Detect Interrupt Request Enable + 11 + 11 + read-write + + + 0 + Carrier not detect interrupt request is disabled. + #0 + + + 1 + Carrier not detect interrupt request is enabled. + #1 + + + + + DLCIP + Loss of Carrier Detect Interrupt Request Enable + 10 + 10 + read-write + + + 0 + Loss of carrier detect interrupt request is disabled. + #0 + + + 1 + Loss of carrier detect interrupt request is enabled. + #1 + + + + + CDIP + Late Collision Detect Interrupt Request Enable + 9 + 9 + read-write + + + 0 + Late collision detect interrupt request is disabled. + #0 + + + 1 + Late collision detect interrupt request is enabled. + #1 + + + + + TROIP + Transmit Retry Over Interrupt Request Enable + 8 + 8 + read-write + + + 0 + Transmit retry over interrupt request is disabled. + #0 + + + 1 + Transmit retry over interrupt request is enabled. + #1 + + + + + RMAFIP + Multicast Address Frame Receive Interrupt Request Enable + 7 + 7 + read-write + + + 0 + Multicast address frame receive interrupt request is disabled. + #0 + + + 1 + Multicast address frame receive interrupt request is enabled. + #1 + + + + + RRFIP + Alignment Error Interrupt Request Enable + 4 + 4 + read-write + + + 0 + Alignment error interrupt request is disabled. + #0 + + + 1 + Alignment error interrupt request is enabled. + #1 + + + + + RTLFIP + Frame-Too-Long Error Interrupt Request Enable + 3 + 3 + read-write + + + 0 + Frame-too-long error interrupt request is disabled. + #0 + + + 1 + Frame-too-long error interrupt request is enabled. + #1 + + + + + RTSFIP + Frame-Too-Short Error Interrupt Request Enable + 2 + 2 + read-write + + + 0 + Frame-too-short error interrupt request is disabled. + #0 + + + 1 + Frame-too-short error interrupt request is enabled. + #1 + + + + + PREIP + PHY-LSI Receive Error Interrupt Request Enable + 1 + 1 + read-write + + + 0 + PHY-LSI receive error interrupt request is disabled. + #0 + + + 1 + PHY-LSI receive error interrupt request is enabled. + #1 + + + + + CERFIP + CRC Error Interrupt Request Enable + 0 + 0 + read-write + + + 0 + CRC error interrupt request is disabled. + #0 + + + 1 + CRC error interrupt request is enabled. + #1 + + + + + + + TRSCER + ETHERC/EDMAC Transmit/Receive Status Copy Enable Register + 0x38 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RMAFCE + RMAF Flag Copy Enable + 7 + 7 + read-write + + + 0 + The EDMACn.EESR.RMAF flag status is reflected in the RDn.RFE bit of the receive descriptor. + #0 + + + 1 + The EDMACn.EESR.RMAF flag status is not reflected in the RDn.RFE bit of the receive descriptor. + #1 + + + + + RRFCE + RRF Flag Copy Enable + 4 + 4 + read-write + + + 0 + The EDMACn.EESR.RRF flag status is reflected in the RDn.RFE bit of the receive descriptor. + #0 + + + 1 + The EDMACn.EESR.RRF flag status is not reflected in the RDn.RFE bit of the receive descriptor. + #1 + + + + + + + RMFCR + Missed-Frame Counter Register + 0x40 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MFC + Missed-Frame CounterThese bits indicate the number of frames that are discarded and not transferred to the receive buffer during reception. + 0 + 15 + read-write + clear + + + + + TFTR + Transmit FIFO Threshold Register + 0x48 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TFT + Transmit FIFO Threshold00Dh to 200h: The threshold is the set value multiplied by 4. Example: 00Dh: 52 bytes 040h: 256 bytes 100h: 1024 bytes 200h: 2048 bytes + 0 + 10 + read-write + + + 0x000 + 0x200 + + + + + 0x000 + Store and forward mode + 0x000 + + + others + The threshold is the set value multiplied by 4. (001h to 00Ch and 201h to 7FFh: Setting prohibited) + true + + + + + + + FDR + Transmit FIFO Threshold Register + 0x50 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TFD + Receive FIFO Depth + 8 + 12 + read-write + + + 01111 + 4096 bytes + #01111 + + + others + Settings other than above are prohibited. + true + + + + + RFD + Transmit FIFO Depth + 0 + 4 + read-write + + + 00111 + 2048 bytes + #00111 + + + others + Settings other than above are prohibited. + true + + + + + + + RMCR + Receive Method Control Register + 0x58 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RNR + Receive Request Reset + 0 + 0 + read-write + + + 0 + EDRRR.RR bit (receive request bit) is set to 0 when one frame has been received. + #0 + + + 1 + EDRRR.RR bit (receive request bit) is not set to 0 when one frame has been received. + #1 + + + + + + + TFUCR + Transmit FIFO Underflow Counter + 0x64 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + UNDER + Transmit FIFO Underflow CountThese bits indicate how many times the transmit FIFO has underflowed. The counter stops when the counter value reaches FFFFh. + 0 + 15 + read-write + + + + + RFOCR + Receive FIFO Overflow Counter + 0x68 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + OVER + Receive FIFO Overflow CountThese bits indicate how many times the receive FIFO has overflowed. The counter stops when the counter value reaches FFFFh. + 0 + 15 + read-write + + + + + IOSR + Independent Output Signal Setting Register + 0x6C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ELB + External Loopback Mode + 0 + 0 + read-write + + + 0 + The ETn_EXOUT pin outputs low. + #0 + + + 1 + The ETn_EXOUT pin outputs high. + #1 + + + + + + + FCFTR + Flow Control Start FIFO Threshold Setting Register + 0x70 + 32 + read-write + 0x00070007 + 0xFFFFFFFF + + + RFFO + Receive FIFO Frame PAUSE Output Threshold(When ((RFFO+1)x2) receive frames have been stored in the receive FIFO.) + 16 + 18 + read-write + + + 000 + When 2 receive frames have been stored in the receive FIFO. + #000 + + + 001 + When 4 receive frames have been stored in the receive FIFO. + #001 + + + 010 + When 6 receive frames have been stored in the receive FIFO. + #010 + + + 011 + When 8 receive frames have been stored in the receive FIFO. + #011 + + + 100 + When 10 receive frames have been stored in the receive FIFO. + #100 + + + 101 + When 12 receive frames have been stored in the receive FIFO. + #101 + + + 110 + When 14 receive frames have been stored in the receive FIFO. + #110 + + + 111 + When 16 receive frames have been stored in the receive FIFO. + #111 + + + + + RFDO + Receive FIFO Data PAUSE Output Threshold(When (RFDO+1)x256-32 bytes of data is stored in the receive FIFO.) + 0 + 2 + read-write + + + 000 + When 224 ( 256 - 32) bytes of data is stored in the receive FIFO. + #000 + + + 001 + When 480 ( 512 - 32) bytes of data is stored in the receive FIFO. + #001 + + + 010 + When 736 ( 768 - 32) bytes of data is stored in the receive FIFO. + #010 + + + 011 + When 992 (1024 - 32) bytes of data is stored in the receive FIFO. + #011 + + + 100 + When 1248 (1280 - 32) bytes of data is stored in the receive FIFO. + #100 + + + 101 + When 1504 (1536 - 32) bytes of data is stored in the receive FIFO. + #101 + + + 110 + When 1760 (1792 - 32) bytes of data is stored in the receive FIFO. + #110 + + + 111 + When 2016 (2048 - 32) bytes of data is stored in the receive FIFO. + #111 + + + + + + + RPADIR + Receive Data Padding Insert Register + 0x78 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PADS + Padding Size + 16 + 17 + read-write + + + 00 + No padding is inserted. + #00 + + + 01 + 1 byte is inserted. + #01 + + + 10 + 2 bytes are inserted. + #10 + + + 11 + 3 bytes are inserted. + #11 + + + + + PADR + Padding Slot + 0 + 5 + read-write + + + 00h + Padding is inserted at the head of received data. + 0x00 + + + others + Padding is inserted between the (PADR)th byte and (PADR+1)th byte of received data. + true + + + + + + + TRIMD + Transmit Interrupt Setting Register + 0x07C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TIM + Transmit Interrupt Mode + 4 + 4 + read-write + + + 0 + Transmission complete interrupt mode: An interrupt occurs when a frame has been transmitted. + #0 + + + 1 + Write-back complete interrupt mode: An interrupt occurs when write-back to the transmit descriptor has been completed. + #1 + + + + + TIS + Transmit Interrupt EnableSet the EESR.TWB flag to 1 in the mode selected by the TIM bit to notify an interrupt. + 0 + 0 + read-write + + + 0 + Transmit Interrupt is disabled. + #0 + + + 1 + Transmit Interrupt is enabled. + #1 + + + + + + + RBWAR + Receive Buffer Write Address Register + 0xC8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RBWAR + Receive Buffer Write Address RegisterThe RBWAR register indicates the last address that the EDMAC has written data to when writing to the receive buffer.Refer to the address indicated by the RBWAR register to recognize which address in the receive buffer the EDMAC is writing data to. Note that the address that the EDMAC is outputting to the receive buffer may not match the read value of the RBWAR register during data reception. + 0 + 31 + read-only + + + + + RDFAR + Receive Descriptor Fetch Address Register + 0xCC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RDFAR + Receive Descriptor Fetch Address RegisterThe RDFAR register indicates the start address of the last fetched receive descriptor when the EDMAC fetches descriptor information from the receive descriptor.Refer to the address indicated by the RDFAR register to recognize which receive descriptor information the EDMAC is using for the current processing. Note that the address of the receive descriptor that the EDMAC fetches may not match the read value of the RDFAR register during data reception. + 0 + 31 + read-only + + + + + TBRAR + Transmit Buffer Read Address Register + 0x0D4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TBRAR + Transmit Buffer Read Address RegisterThe TBRAR register indicates the last address that the EDMAC has read data from when reading data from the transmit buffer.Refer to the address indicated by the TBRAR register to recognize which address in the transmit buffer the EDMAC is reading from. Note that the address that the EDMAC is outputting to the transmit buffer may not match the read value of the TBRAR register. + 0 + 31 + read-only + + + + + TDFAR + Transmit Descriptor Fetch Address Register + 0xD8 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + TDFAR + Transmit Descriptor Fetch Address RegisterThe TDFAR register indicates the start address of the last fetched transmit descriptor when the EDMAC fetches descriptor information from the transmit descriptor.Refer to the address indicated by the TDFAR register to recognize which transmit descriptor information the EDMAC is using for the current processing. Note that the address of the transmit descriptor that the EDMAC fetches may not match the read value of the TDFAR register. + 0 + 31 + read-only + + + + + + + R_ETHERC_EPTPC + Ethernet PTP Controller + 0x40065800 - 0x00000AE0 - 0x02 - registers - - - 0x00000AE4 + 0x00000000 0x008 registers - 0x00000AF0 - 0x02 + 0x00000010 + 0x010 registers - 0x00000AF4 + 0x00000040 0x008 registers - 0x00000B00 - 0x02 + 0x00000050 + 0x01C registers - 0x00000B04 - 0x008 + 0x00000080 + 0x04 registers - 0x00000B10 - 0x02 + 0x00000090 + 0x00C registers - 0x00000B14 - 0x008 + 0x000000A0 + 0x00C registers - 0x00000B20 - 0x02 + 0x000000C0 + 0x018 registers - 0x00000B24 - 0x008 + 0x000000E0 + 0x018 registers - 0x00000B30 - 0x02 + 0x00000100 + 0x014 registers - 0x00000B34 - 0x008 + 0x00000120 + 0x024 registers - 0x00000B40 - 0x02 + 0x00000160 + 0x018 registers - 0x00000B44 - 0x008 + 0x000001C0 + 0x018 registers + + + 2 + 0x8 + F[%s] + Frame Reception Filter Setting Registers + 0x160 + + 2 + 0x8 + 0-1 + MACRU + Frame Reception Filter MAC Address Setting Registers + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FMACRU + These bits hold the setting for the higher-order 24 bits of the destination MAC address for received multicast frames. + 0 + 23 + read-write + + + + + 2 + 0x8 + 0-1 + MACRL + Frame Reception Filter MAC Address Setting Registers + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FMACRL + These bits hold the setting for the lower-order 24 bits of the destination MAC address for received multicast frames. + 0 + 23 + read-write + + + + + + SYSR + SYNFP Status Register + 0x000 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GENDN + Generation Stop Completion Detection Flag + 17 + 17 + read-write + oneToClear + modify + + + 0 + Stopping generation has not been completed. + #0 + + + 1 + Stopping generation has been completed. + #1 + + + + + RESDN + Response Stop Completion Detection Flag + 16 + 16 + read-write + oneToClear + modify + + + 0 + Stopping responses has not been completed. + #0 + + + 1 + Stopping responses has been completed. + #1 + + + + + INFABT + Control Information Abnormality Detection Flag + 14 + 14 + read-write + oneToClear + modify + + + 0 + No abnormality in control information + #0 + + + 1 + Abnormality in control information + #1 + + + + + RECLP + Loop Reception Detection Flag + 12 + 12 + read-write + oneToClear + modify + + + 0 + A received message has not returned through a loop. + #0 + + + 1 + A received message has returned through a loop. + #1 + + + + + DRQOVR + Delay_Req Reception FIFO Overflow Detection Flag + 6 + 6 + read-write + oneToClear + modify + + + 0 + The received Delay_Req has not caused the reception FIFO to overflow. + #0 + + + 1 + The received Delay_Req has caused the reception FIFO to overflow. + #1 + + + + + INTDEV + Receive logMessageInterval Value Out-of-Range Flag + 5 + 5 + read-write + oneToClear + modify + + + 0 + The received logMessageInterval value is within the range. + #0 + + + 1 + The received logMessageInterval value is out of the range. + #1 + + + + + DRPTO + Delay_Resp/Pdelay_Resp Reception Timeout Detection Flag + 4 + 4 + read-write + oneToClear + modify + + + 0 + A Delay_Resp/Pdelay_Resp timeout has not occurred. + #0 + + + 1 + A Delay_Resp/Pdelay_Resp timeout has occurred. + #1 + + + + + MPDUD + meanPathDelay Value Update Flag + 2 + 2 + read-write + oneToClear + modify + + + 0 + The meanPathDelay value has not been updated. + #0 + + + 1 + The meanPathDelay value has been updated. + #1 + + + + + INTCHG + Receive logMessageInterval Value Change Detection Flag + 1 + 1 + read-write + oneToClear + modify + + + 0 + No change in the received logMessageInterval value. + #0 + + + 1 + A change in the received logMessageInterval value. + #1 + + + + + OFMUD + offsetFromMaster Value Update Flag + 0 + 0 + read-write + oneToClear + modify + + + 0 + The offsetFromMaster value has not been updated. + #0 + + + 1 + The offsetFromMaster value has been updated. + #1 + + + + + + + SYIPR + SYNFP Status Notification Permission Register + 0x004 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GENDN + SYSR.GENDN Status Notification Permission + 17 + 17 + read-write + + + 0 + Prohibits notification of the state of SYSR.GENDN. + #0 + + + 1 + Permits notification of the state of SYSR.GENDN. + #1 + + + + + RESDN + SYSR.RESDN Status Notification Permission + 16 + 16 + read-write + + + 0 + Prohibits notification of the state of SYSR.RESDN. + #0 + + + 1 + Permits notification of the state of SYSR.RESDN. + #1 + + + + + INFABT + SYSR.INFABT Status Notification Permission + 14 + 14 + read-write + + + 0 + Prohibits notification of the state of SYSR.INFABT. + #0 + + + 1 + Permits notification of the state of SYSR.INFABT. + #1 + + + + + RECLP + SYSR.RECLP Status Notification Permission + 12 + 12 + read-write + + + 0 + Prohibits notification of the state of SYSR.RECLP. + #0 + + + 1 + Permits notification of the state of SYSR.RECLP. + #1 + + + + + DRQOVR + SYSR.DRQOVR Status Notification Permission + 6 + 6 + read-write + + + 0 + Prohibits notification of the state of SYSR.DRQOVR. + #0 + + + 1 + Permits notification of the state of SYSR.DRQOVR. + #1 + + + + + INTDEV + SYSR.INTDEV Status Notification Permission + 5 + 5 + read-write + + + 0 + Prohibits notification of the state of SYSR.INTDEV. + #0 + + + 1 + Permits notification of the state of SYSR.INTDEV. + #1 + + + + + DRPTO + SYSR.DRPTO Status Notification Permission + 4 + 4 + read-write + + + 0 + Prohibits notification of the state of SYSR.DRPTO. + #0 + + + 1 + Permits notification of the state of SYSR.DRPTO. + #1 + + + + + MPDUD + SYSR.MPDUD Status Notification Permission + 2 + 2 + read-write + + + 0 + Prohibits notification of the state of SYSR.MPDUD. + #0 + + + 1 + Permits notification of the state of SYSR.MPDUD. + #1 + + + + + INTCHG + SYSR.INTCHG Status Notification Permission + 1 + 1 + read-write + + + 0 + Prohibits notification of the state of SYSR.INTCHG. + #0 + + + 1 + Permits notification of the state of SYSR.INTCHG. + #1 + + + + + OFMUD + SYSR.OFMUD Status Notification Permission + 0 + 0 + read-write + + + 0 + Prohibits notification of the state of SYSR.OFMUD. + #0 + + + 1 + Permits notification of the state of SYSR.OFMUD. + #1 + + + + + + + SYMACRU + SYNFP MAC Address Registers + 0x010 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYMACRU + These bits hold the setting for the higher-order 24 bits of the local MAC address. + 0 + 23 + read-write + + + + + SYMACRL + SYNFP MAC Address Registers + 0x014 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYMACRL + These bits hold the setting for the lower-order 24 bits of the local MAC address. + 0 + 23 + read-write + + + + + SYLLCCTLR + SYNFP LLC-CTL Value Register + 0x018 + 32 + read-write + 0x00000003 + 0xFFFFFFFF + + + CTL + LLC-CTL FieldThese bits specify the value used for the control field in the LLC sublayer when generating IEEE802.3 frames. + 0 + 7 + read-write + + + + + SYIPADDRR + SYNFP Local IP Address Register + 0x01C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYIPADDRR + These bits hold the setting for the local IP address. + 0 + 31 + read-write + + + + + SYSPVRR + SYNFP Specification Version Setting Register + 0x040 + 32 + read-write + 0x00000002 + 0xFFFFFFFF + + + TRSP + transportSpecific Field ValueThese bits are used to set the transportSpecific field value of the PTP v2 header.When a message is received, this value is compared with the transportSpecific field of the received frame.In generating messages, the value is used for the transportSpecific field of the frame for transmission.Set these bits to 0000b (IEEE 1588). + 4 + 7 + read-write + + + VER + versionPTP Field ValueThese bits are used to set the versionPTP field value of the PTP v2 header.When a message is received, this value is compared with the versionPTP field of the received frame.In generating messages, the value is used for the versionPTP field of the frame for transmission.Set these bits to 0010b (PTP v2). + 0 + 3 + read-write + + + + + SYDOMR + SYNFP Domain Number Setting Register + 0x044 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DNUM + domainNumber Field Value SettingThese bits are used to set the domainNumber field value of the PTP v2 header.When a message is received, this value is compared with the domainNumber field of the received frame as a condition for PTP reception processing.In generating messages, the value is used for the domainNumber field of the frame for transmission. + 0 + 7 + read-write + + + + + ANFR + Announce Message Flag Field Setting Register + 0x050 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FLAG14 + PTP profile Specific 2 + 14 + 14 + read-write + + + 0 + PTP profile Specific 2 is set to FALSE. + #0 + + + 1 + PTP profile Specific 2 is set to TRUE. + #1 + + + + + FLAG13 + PTP profile Specific 1 + 13 + 13 + read-write + + + 0 + PTP profile Specific 1 is set to FALSE. + #0 + + + 1 + PTP profile Specific 1 is set to TRUE. + #1 + + + + + FLAG10 + unicastFlag + 10 + 10 + read-write + + + 0 + unicastFlag is set to FALSE. + #0 + + + 1 + unicastFlag is set to TRUE. + #1 + + + + + FLAG8 + alternateMasterFlag + 8 + 8 + read-write + + + 0 + alternateMasterFlag is set to FALSE. + #0 + + + 1 + alternateMasterFlag is set to TRUE. + #1 + + + + + FLAG5 + frequencyTraceableThis bit is used to set the logical value of the frequencyTraceable member of timePropertiesDS. + 5 + 5 + read-write + + + 0 + frequencyTraceable is set to FALSE. + #0 + + + 1 + frequencyTraceable is set to TRUE. + #1 + + + + + FLAG4 + timeTraceableThis bit is used to set the logical value of the timeTraceable member of timePropertiesDS. + 4 + 4 + read-write + + + 0 + timeTraceable is set to FALSE. + #0 + + + 1 + timeTraceable is set to TRUE. + #1 + + + + + FLAG3 + ptpTimescaleThis bit is used to set the logical value of the ptpTimescale member of timePropertiesDS. + 3 + 3 + read-write + + + 0 + ptpTimescale is set to FALSE. + #0 + + + 1 + ptpTimescale is set to TRUE. + #1 + + + + + FLAG2 + currentUtcOffsetValidThis bit is used to set the logical value of the currentUtcOffsetValid member of timePropertiesDS. + 2 + 2 + read-write + + + 0 + currentUtcOffsetValid is set to FALSE. + #0 + + + 1 + currentUtcOffsetValid is set to TRUE. + #1 + + + + + FLAG1 + leap59This bit is used to set the logical value of the leap59 member of timePropertiesDS. + 1 + 1 + read-write + + + 0 + leap59 is set to FALSE. + #0 + + + 1 + leap59 is set to TRUE. + #1 + + + + + FLAG0 + leap61This bit is used to set the logical value of the leap61 member of timePropertiesDS. + 0 + 0 + read-write + + + 0 + leap61 is set to FALSE. + #0 + + + 1 + leap61 is set to TRUE. + #1 + + + + + + + SYNFR + Sync Message Flag Field Setting Register + 0x054 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FLAG14 + PTP profile Specific 2 + 14 + 14 + read-write + + + 0 + PTP profile Specific 2 is set to FALSE. + #0 + + + 1 + PTP profile Specific 2 is set to TRUE. + #1 + + + + + FLAG13 + PTP profile Specific 1 + 13 + 13 + read-write + + + 0 + PTP profile Specific 1 is set to FALSE. + #0 + + + 1 + PTP profile Specific 1 is set to TRUE. + #1 + + + + + FLAG10 + unicastFlag + 10 + 10 + read-write + + + 0 + unicastFlag is set to FALSE. + #0 + + + 1 + unicastFlag is set to TRUE. + #1 + + + + + FLAG9 + twoStepFlag + 9 + 9 + read-write + + + 0 + Set this bit to 0 (FALSE). + #0 + + + 1 + Setting prohibited + #1 + + + + + FLAG8 + alternateMasterFlag + 8 + 8 + read-write + + + 0 + alternateMasterFlag is set to FALSE. + #0 + + + 1 + alternateMasterFlag is set to TRUE. + #1 + + + + + + + DYRQFR + Delay_Req Message Flag Field Setting Register + 0x058 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FLAG14 + PTP profile Specific 2 + 14 + 14 + read-write + + + 0 + PTP profile Specific 2 is set to FALSE. + #0 + + + 1 + PTP profile Specific 2 is set to TRULE. + #1 + + + + + FLAG13 + PTP profile Specific 1 + 13 + 13 + read-write + + + 0 + PTP profile Specific 1 is set to FALSE. + #0 + + + 1 + PTP profile Specific 1 is set to TRULE. + #1 + + + + + FLAG10 + unicastFlag + 10 + 10 + read-write + + + 0 + unicastFlag is set to FALSE. + #0 + + + 1 + unicastFlag is set to TRULE. + #1 + + + + + + + DYRPFR + Delay_Resp Message Flag Field Setting Register + 0x05C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FLAG14 + PTP profile Specific 2 + 14 + 14 + read-write + + + 0 + PTP profile Specific 2 is set to FALSE. + #0 + + + 1 + PTP profile Specific 2 is set to TRUE. + #1 + + + + + FLAG13 + PTP profile Specific 1 + 13 + 13 + read-write + + + 0 + PTP profile Specific 1 is set to FALSE. + #0 + + + 1 + PTP profile Specific 1 is set to TRUE. + #1 + + + + + FLAG10 + unicastFlag + 10 + 10 + read-write + + + 0 + unicastFlag is set to FALSE. + #0 + + + 1 + unicastFlag is set to TRUE. + #1 + + + + + FLAG9 + woStepFlag + 9 + 9 + read-write + + + 0 + Set this bit to 0 (FALSE). + #0 + + + 1 + Setting prohibited + #1 + + + + + FLAG8 + alternateMasterFlag + 8 + 8 + read-write + + + 0 + alternateMasterFlag is set to FALSE. + #0 + + + 1 + alternateMasterFlag is set to TRUE. + #1 + + + + + + + SYCIDRU + SYNFP Local Clock ID Registers + 0x060 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYCIDRU + These bits hold the setting for the higher-order 32 bits of the clock-ID of your port. + 0 + 31 + read-write + + + + + SYCIDRL + SYNFP Local Clock ID Registers + 0x064 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYCIDRL + These bits hold the setting for the lower-order 32 bits of the clock-ID of your port. + 0 + 31 + read-write + + + + + SYPNUMR + SYNFP Local Port Number Register + 0x068 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PNUM + Local Port Number SettingThese bits hold the setting for the port number of the local port. + 0 + 15 + read-write + + + + + SYRVLDR + SYNFP Register Value Load Directive Register + 0x080 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + ANUP + Announce Message Generation Information Update + 2 + 2 + write-only + + + 0 + no effect + #0 + + + 1 + Setting this bit to 1 leads to simultaneous reflection in the Announce message generation block of the values of the registers required for the generation of Announce messages. + #1 + + + + + STUP + State Update + 1 + 1 + write-only + + + 0 + no effect + #0 + + + 1 + Setting this bit to 1 leads to simultaneous reflection in the SYNFP module of the values of the registers related to the reception and transmission of PTP messages. + #1 + + + + + BMUP + BMC Update + 0 + 0 + write-only + + + 0 + no effect + #0 + + + 1 + Setting this bit to 1 leads to simultaneous reflection in the SYNFP module of the values of the registers holding the MasterClock identifying information. + #1 + + + + + + + SYRFL1R + SYNFP Reception Filter Register 1 + 0x090 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PDFUP2 + Pdelay_Resp_Follow_Up Message Processing + 30 + 30 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP does not process messages. + #1 + + + + + PDFUP1 + Pdelay_Resp_Follow_Up Message Processing + 29 + 29 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + PDFUP0 + Pdelay_Resp_Follow_Up Message Processing + 28 + 28 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + PDRP2 + Pdelay_Resp Message Processing + 26 + 26 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP processes messages. + #1 + + + + + PDRP1 + Pdelay_Resp Message Processing + 25 + 25 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + PDRP0 + Pdelay_Resp Message Processing + 24 + 24 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + PDRQ2 + Pdelay_Req Message Processing + 22 + 22 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP processes messages. + #1 + + + + + PDRQ1 + Pdelay_Req Message Processing + 21 + 21 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + PDRQ0 + Pdelay_Req Message Processing + 20 + 20 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + DRP2 + Delay_Resp Message Processing + 18 + 18 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP processes messages. + #1 + + + + + DRP1 + Delay_Resp Message Processing + 17 + 17 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + DRP0 + Delay_Resp Message Processing + 16 + 16 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + DRQ2 + Delay_Req Message Processing + 14 + 14 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP processes messages. + #1 + + + + + DRQ1 + Delay_Req Message Processing + 13 + 13 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + DRQ0 + Delay_Req Message Processing + 12 + 12 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + FUP2 + Follow_Up Message Processing + 10 + 10 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP processes messages. + #1 + + + + + FUP1 + Follow_Up Message Processing + 9 + 9 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + FUP0 + Follow_Up Message Processing + 8 + 8 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + SYNC2 + Sync Message Processing + 6 + 6 + read-write + + + 0 + The SYNFP does not process messages. + #0 + + + 1 + The SYNFP processes messages. + #1 + + + + + SYNC1 + Sync Message Processing + 5 + 5 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + SYNC0 + Sync Message Processing + 4 + 4 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + ANCE1 + Announce Message Processing + 1 + 1 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + ANCE0 + Announce Message Processing + 0 + 0 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + + + SYRFL2R + SYNFP Reception Filter Register 2 + 0x094 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ILL1 + Illegal Message Processing Setting + 29 + 29 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + ILL0 + Illegal Message Processing Setting + 28 + 28 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + SIG1 + Signaling Message Processing Setting + 5 + 5 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + SIG0 + Signaling Message Processing Setting + 4 + 4 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + MAN1 + Management Message Processing Setting + 1 + 1 + read-write + + + 0 + The PRC-TC does not relay messages between ports 0 and 1. + #0 + + + 1 + The PRC-TC relays messages between ports 0 and 1. + #1 + + + + + MAN0 + Management Message Processing Setting + 0 + 0 + read-write + + + 0 + Messages are not transferred to the PTPEDMAC. + #0 + + + 1 + Messages are transferred to the PTPEDMAC. + #1 + + + + + + + SYTRENR + SYNFP Transmission Enable Register + 0x098 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PDRQ + Pdelay_Req Message Transmission Enable + 12 + 12 + read-write + + + 0 + Pdelay_Req messages are not transmitted. + #0 + + + 1 + Pdelay_Req messages are transmitted. + #1 + + + + + DRQ + Delay_Req Message Transmission Enable + 8 + 8 + read-write + + + 0 + Delay_Req messages are not transmitted. + #0 + + + 1 + Delay_Req messages are transmitted. + #1 + + + + + SYNC + Sync Message Transmission Enable + 4 + 4 + read-write + + + 0 + Sync messages are not transmitted. + #0 + + + 1 + Sync messages are transmitted. + #1 + + + + + ANCE + Announce Message Transmission Enable + 0 + 0 + read-write + + + 0 + Announce messages are not transmitted. + #0 + + + 1 + Announce messages are transmitted. + #1 + + + + + + + MTCIDU + Master Clock ID Registers + 0x0A0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MTCIDU + These bits hold the setting for the higher-order 32 bits of the clock-ID of the master clock. + 0 + 31 + read-write + + + + + MTCIDL + Master Clock ID Registers + 0x0A4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MTCIDL + These bits hold the setting for the lower-order 32 bits of the clock-ID of the master clock. + 0 + 31 + read-write + + + + + MTPID + Master clock port number register + 0x0A8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PNUM + Master Clock Port Number SettingThese bits hold the setting for the port number of the master clock. + 0 + 15 + read-write + + + + + SYTLIR + SYNFP Transmission Interval Setting Register + 0x0C0 + 32 + read-write + 0x00000001 + 0xFFFFFFFF + + + DREQ + Delay_Req Transmission Interval Average Value/ Pdelay_Req Transmission Interval SettingThe bits set the average interval for the transmission of Delay_Req messages and the interval for the transmission of Pdelay_Req messages.The setting is also placed in the logMessageInterval field of Delay_Resp messages. + 16 + 23 + read-write + + + SYNC + Sync Message Transmission Interval SettingThese bits set the interval for the transmission of Sync messages. The setting is also placed in the logMessageInterval field of transmitted Sync messages. + 8 + 15 + read-write + + + ANCE + Announce Message Transmission Interval SettingThese bits set the interval for the transmission of Announce messages. + 0 + 7 + read-write + + + + + SYRLIR + SYNFP Received logMessageInterval Value Indication Register + 0x0C4 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + DRESP + Delay_Resp Message logMessageInterval Field IndicationThese bits indicate the logMessageInterval field value of a received Delay_Resp message. + 16 + 23 + read-only + + + SYNC + Sync Message logMessageInterval Field IndicationThese bits indicate the logMessageInterval field value of a received Sync message. + 8 + 15 + read-only + + + ANCE + Announce Message logMessageInterval Field IndicationThese bits indicate the logMessageInterval field value of a received Announce message. + 0 + 7 + read-only + + + + + OFMRU + offsetFromMaster Value Registers + 0x0C8 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + OFMRU + These bits indicate the higher-order 32 bits of the calculated offsetFromMaster value. + 0 + 31 + read-only + + + + + OFMRL + offsetFromMaster Value Registers + 0x0CC + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + OFMRL + These bits indicate the lower-order 32 bits of the calculated offsetFromMaster value. + 0 + 31 + read-only + + + + + MPDRU + meanPathDelay Value Registers + 0x0D0 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + MPDRU + These bits indicate the higher-order 32 bits of the calculated meanPathDelay value. + 0 + 31 + read-only + + + + + MPDRL + meanPathDelay Value Registers + 0x0D4 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + MPDRL + These bits indicate the lower-order 32 bits of the calculated meanPathDelay value. + 0 + 31 + read-only + + + + + GMPR + grandmasterPriority Field Setting Register + 0x0E0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GMPR1 + grandmasterPriority1 Field Value SettingThese bits are used to set the value of the grandmasterPriority1 fields of Announce messages. + 16 + 23 + read-write + + + GMPR2 + grandmasterPriority2 Field Value SettingThese bits are used to set the value of the grandmasterPriority2 fields of Announce messages. + 0 + 7 + read-write + + + + + GMCQR + grandmasterClockQuality Field Setting Register + 0x0E4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GMCQR + These bits are used to set the value of the grandmasterClockQuality fields of Announce messages. The correspondence between bits and the grandmasterClockQuality fields is as listed below.b31 to b24: clockClassb23 to b16: clockAccuracyb15 to b0: offsetScaledLogVariance + 0 + 31 + read-write + + + + + GMIDRU + grandmasterIdentity Field Setting Registers + 0x0E8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GMIDRU + These bits hold the setting for the higher-order 32 bits of the value of the grandmasterIdentity fields of Announce messages. + 0 + 31 + read-write + + + + + GMIDRL + grandmasterIdentity Field Setting Registers + 0x0EC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GMIDRL + These bits hold the setting for the lower-order 32 bits of the value of the grandmasterIdentity fields of Announce messages. + 0 + 31 + read-write + + + + + CUOTSR + currentUtcOffset/timeSource Field Setting Register + 0x0F0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CUTO + currentUtcOffset Field SettingThese bits set the value of the currentUtcOffset fields of Announce messages. + 16 + 31 + read-write + + + TSRC + timeSource Field SettingThese bits set the value of the timeSource fields of Announce messages. + 0 + 7 + read-write + + + + + SRR + stepsRemoved Field Setting Register + 0x0F4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SRMV + stepsRemoved Field Value SettingThese bits set the value of the stepsRemoved fields of Announce messages. + 0 + 15 + read-write + + + + + PPMACRU + PTP-primary Message Destination MAC Address Setting Registers + 0x100 + 32 + read-write + 0x00011B19 + 0xFFFFFFFF + + + PPMACRU + These bits hold the setting for the higher-order 24 bits of the destination MAC address for PTP-primary messages. + 0 + 23 + read-write + + + + + PPMACRL + PTP-primary Message Destination MAC Address Setting Registers + 0x104 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PPMACRL + These bits hold the setting for the lower-order 24 bits of the destination MAC address for PTP-primary messages. + 0 + 23 + read-write + + + + + PDMACRU + PTP-pdelay Message MAC Address Setting Registers + 0x108 + 32 + read-write + 0x000180C2 + 0xFFFFFFFF + + + PDMACRU + These bits hold the setting for the higher-order 24 bits of the destination MAC address for PTP-pdelay messages. + 0 + 23 + read-write + + + + + PDMACRL + PTP-pdelay Message MAC Address Setting Registers + 0x10C + 32 + read-write + 0x0000000E + 0xFFFFFFFF + + + PDMACRL + These bits hold the setting for the lower-order 24 bits of the destination MAC address for PTP-pdelay messages. + 0 + 23 + read-write + + + + + PETYPER + PTP Message EtherType Setting Register + 0x110 + 32 + read-write + 0x000088F7 + 0xFFFFFFFF + + + TYPE + PTP Message EtherType Value SettingThese bits hold the setting for the EtherType field value for frames in the Ethernet II format. + 0 + 15 + read-write + + + + + PPIPR + PTP-primary Message Destination IP Address Setting Register + 0x120 + 32 + read-write + 0xE0000181 + 0xFFFFFFFF + + + PPIPR + These bits hold the setting for the destination IP address for PTPprimary messages. + 0 + 31 + read-write + + + + + PDIPR + PTP-pdelay Message Destination IP Address Setting Register + 0x124 + 32 + read-write + 0xE000006B + 0xFFFFFFFF + + + PDIPR + These bits hold the setting for the destination IP address for PTPpdelay messages. + 0 + 31 + read-write + + + + + PETOSR + PTP Event Message TOS Setting Register + 0x128 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + EVTO + PTP Event Message TOS Field Value SettingThese bits hold the setting for the value of the TOS field within the IPv4 headers of PTP event messages. + 0 + 7 + read-write + + + + + PGTOSR + PTP general Message TOS Setting Register + 0x12C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GETO + PTP general Message TOS Field Value SettingThese bits hold the setting for the value of the TOS field within the IPv4 headers of PTP general messages. + 0 + 7 + read-write + + + + + PPTTLR + PTP-primary Message TTL Setting Register + 0x130 + 32 + read-write + 0x00000080 + 0xFFFFFFFF + + + PRTL + PTP-primary Message TTL Field Value SettingThese bits hold the setting for the value of the TTL field within the IPv4 headers of PTP-primary messages. + 0 + 7 + read-write + + + + + PDTTLR + PTP-pdelay Message TTL Setting Register + 0x134 + 32 + read-write + 0x00000001 + 0xFFFFFFFF + + + PDTL + PTP-pdelay Message TTL Field ValueThese bits hold the setting for the value of the TTL field within the IPv4 headers of PTP-pdelay messages. + 0 + 7 + read-write + + + + + PEUDPR + PTP Event Message UDP Destination Port Number Setting Register + 0x138 + 32 + read-write + 0x0000013F + 0xFFFFFFFF + + + EVUPT + PTP Event Message Destination Port Number SettingThese bits hold the setting for the value of the destination port number field within the UDP headers of PTP event messages. + 0 + 15 + read-write + + + + + PGUDPR + PTP general Message UDP Destination Port Number Setting Register + 0x13C + 32 + read-write + 0x00000140 + 0xFFFFFFFF + + + GEUPT + PTP general Message Destination Port NumberThese bits hold the setting for the value of the destination port number field within the UDP headers of PTP general messages. + 0 + 15 + read-write + + + + + FFLTR + Frame Reception Filter Setting Register + 0x140 + 32 + read-write + 0x00010000 + 0xFFFFFFFF + + + EXTPRM + Extended Promiscuous ModeSetting + 16 + 16 + read-write + + + 0 + Normal operation (unicast frames addressed to the EPTPC are received, filtering of PTP frames is applied, multicast filtering is applied, and all broadcast frames are received). + #0 + + + 1 + Extended promiscuous mode (all frames are received) + #1 + + + + + ENB + Reception Filter EnableNOTE: The setting of these bits is only effective when EXTPRM=0. + 2 + 2 + read-write + + + 0 + Filtering is disabled (all multicast frames are received). + #0 + + + 1 + See PRT and SEL bit. + #1 + + + + + PRT + Frame Reception EnableNOTE: The setting of these bits is only effective when EXTPRM=0 and ENB=1. + 1 + 1 + read-write + + + 0 + Do not receive multicast frames. + #0 + + + 1 + See SEL bit. + #1 + + + + + SEL + Receive MAC Address SelectNOTE: The setting of these bits is only effective when EXTPRM=0, ENB=1and RPT=1. + 0 + 0 + read-write + + + 0 + Only receive multicast frames matching the MAC address setting in FMAC0R(U/L). + #0 + + + 1 + Only receive multicast frames matching the MAC address setting in FMAC1R(U/L). + #1 + + + + + + + DASYMRU + Asymmetric Delay Setting Registers + 0x1C0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DASYMRU + These bits hold the setting for the higher-order 16 bits of the asymmetric delay value. + 0 + 15 + read-write + + + + + DASYMRL + Asymmetric Delay Setting Registers + 0x1C4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DASYMRL + These bits hold the setting for the lower-order 32 bits of the asymmetric delay value. + 0 + 31 + read-write + + + + + TSLATR + Timestamp Latency Setting Register + 0x1C8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + INGP + Output Port Timestamp Latency SettingThese bits hold the setting for the time stamp latency (ns) for the output ports. + 16 + 31 + read-write + + + EGP + Input Port Timestamp Latency SettingThese bits hold the setting for the time stamp latency (ns) for the input ports. + 0 + 15 + read-write + + + + + SYCONFR + SYNFP Operation Setting Register + 0x1CC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TCMOD + TC Mode Setting + 20 + 20 + read-write + + + 0 + E2E TC + #0 + + + 1 + P2P TC + #1 + + + + + FILDIS + Receive Message domainNumber Filter Disable + 16 + 16 + read-write + + + 0 + Filtering conditions for the reception of PTP messages include comparison with the domainNumber field. + #0 + + + 1 + Filtering conditions for the reception of PTP messages do not include comparison with the domainNumber field. + #1 + + + + + SBDIS + Sync Message Transmission Bandwidth Securing Disable + 12 + 12 + read-write + + + 0 + Securing of the bandwidth for the transmission of SYNC messages is enabled (transfer by the EDMAC is given lower priority). + #0 + + + 1 + Securing of the bandwidth for the transmission of SYNC messages is disabled (transfer by the EDMAC is given higher priority). + #1 + + + + + TCYC + PTP Message Transmission Interval SettingThese bits are used to set the time from the completion of one transmission to the start of the next in cycles of the transmission clock. A value n in these bits means that a transmission interval of n cycles will be secured.No interval is secured if the setting is 00h.We recommend the setting 28h (40 cycles). + 0 + 7 + read-write + + + + + SYFORMR + SYNFP Frame Format Setting Register + 0x1D0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FORM1 + Ethernet Frame Format Setting + 1 + 1 + read-write + + + 0 + Set this bit to 0 (Ethernet II frame format). + #0 + + + 1 + Setting prohibited + #1 + + + + + FORM0 + Ethernet/UDP Encapsulation + 0 + 0 + read-write + + + 0 + PTP directly over Ethernet + #0 + + + 1 + PTP over UDP/IPv4 + #1 + + + + + + + RSTOUTR + Response Message Reception Timeout Register + 0x1D4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RSTOUTR + Response Message Reception Timeout Time SettingA response message not being received within n x 1024 (ns), where n is the setting, is judged to represent a timeout. + 0 + 31 + read-write + + + + + + + R_ETHERC_EPTPC1 + 0x40065C00 + + + R_ETHERC_EPTPC_CFG + Ethernet PTP Configuration + 0x40064500 - 0x00000B50 - 0x02 + 0x00000000 + 0x00C registers + + + PTRSTR + EPTPC Reset Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RESET + EPTPC Software Reset + 0 + 0 + read-write + + + 0 + Do not reset the EPTPC + #0 + + + 1 + Reset the EPTPC. Do not access the EPTPC-related registers other than this register while a software reset is being issued. + #1 + + + + + + + STCSELR + STCA Clock Select Register + 0x04 + 32 + read-write + 0x00000006 + 0xFFFFFFFF + + + SCLKSEL + STCA Clock Select + 8 + 10 + read-write + + + 000 + PCLKA clock divided by 1 to 6 + #000 + + + 010 + Input clock from the REF50CK0 pin + #010 + + + 011 + Input clock from the REF50CK1 pin + #011 + + + others + Settings other than above are prohibited. + true + + + + + SCLKDIV + PCLKA Clock Frequency Division + 0 + 2 + read-write + + + 001 + 1 + #001 + + + 010 + 1/2 + #010 + + + 011 + 1/3 + #011 + + + 100 + 1/4 + #100 + + + 101 + 1/5 + #101 + + + 110 + 1/6 + #110 + + + others + Settings other than above are prohibited. + true + + + + + + + BYPASS + Bypass 1588 module Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BYPASS1 + Bypass 1588 module for Ether 1ch + 16 + 16 + read-write + + + 0 + to use 1588 module for Ether 1ch + #0 + + + 1 + to bypass 1588 module for Ether 1ch + #1 + + + + + BYPASS0 + Bypass 1588 module for Ether 0ch + 0 + 0 + read-write + + + 0 + to use 1588 module for Ether 0ch + #0 + + + 1 + to bypass 1588 module for Ether 0ch + #1 + + + + + + + + + R_ETHERC_EPTPC_COMMON + Ethernet PTP Controller Common + 0x40065000 - 0x00000B54 + 0x00000000 0x008 registers - 0x00000B60 - 0x02 - registers - - - 0x00000B64 + 0x00000010 0x008 registers - 0x00000B70 - 0x02 - registers - - - 0x00000B74 + 0x00000040 0x008 registers - 0x00000B80 - 0x02 - registers - - - 0x00000B84 - 0x008 + 0x00000050 + 0x00C registers - 0x00000B90 - 0x02 + 0x00000060 + 0x010 registers - 0x00000B94 + 0x00000080 0x008 registers - 0x00000BA0 - 0x02 - registers - - - 0x00000BA4 - 0x008 + 0x00000090 + 0x010 registers - 0x00000BB0 - 0x02 + 0x000000B0 + 0x00C registers - 0x00000BB4 - 0x008 + 0x00000124 + 0x020 registers - 0x00000BC0 - 0x02 + 0x00000170 + 0x00C registers - 0x00000BC4 - 0x008 + 0x00000210 + 0x00C registers - 0x00000BD0 - 0x02 + 0x000002D0 + 0x00C registers - 0x00000BD4 - 0x008 + 0x00000300 + 0x060 registers - 0x00000BE0 - 0x02 + 0x0000037C + 0x04 registers - 0x00000BE4 + 0x00000400 0x008 registers - 0x00000BF0 - 0x02 + 0x00000410 + 0x014 registers - 0x00000BF4 + 0x00000430 0x008 registers - 3 - 0x400 - - - A - A - 0 - - - B - B - 1 - - - C - C - 2 - - - MMPU[%s] - Bus Master MPU Registers - 0x0000 + 6 + 0x10 + TM[%s] + Timer Setting Registers + 0x300 - CTL - Bus Master MPU Control Register - 0x000 - 16 + STTRU + Timer Start Time Setting Register + 0x00 + 32 read-write - 0x0000 - 0xFFFF + 0x00000000 + 0xFFFFFFFF - KEY - Write Keyword The data written to these bits are not stored. - 8 - 15 - write-only - - - 0xA5 - Writing to the OAD and ENABLE bit is valid, when the KEY bits are written 0xA5. - 0xA5 - - - others - Writing to the OAD and ENABLE bit is invalid. - true - - + TMSTTRU + These bits hold the setting for the higher-order 32 bits of the start time of the pulse output timer in nanoseconds. + 0 + 31 + read-write + + + + STTRL + Timer Start Time Setting Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - OAD - Operation after detection - 1 - 1 + TMSTTRL + These bits hold the setting for the lower-order 32 bits of the start time of the pulse output timer in nanoseconds. + 0 + 31 + read-write + + + + + CYCR + Timer Cycle Setting Registers + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TMCYCR + These bits set the cycle of the pulse output timer in nanoseconds. Set a value that is equivalent to at least four cycles of the STCA clock. + 0 + 29 read-write - - - 0 - Non-maskable interrupt. - #0 - - - 1 - Internal reset. - #1 - - + + + + PLSR + Timer Pulse Width Setting Register + 0x0C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - ENABLE - Master Group enable + TMPLSR + These bits set the width at high level of the pulse signal from the timer in nanoseconds. Set a value that is equivalent to at least two cycles of the STCA clock. 0 - 0 + 28 read-write - - - 0 - Master Group is disabled. Permission of all regions. - #0 - - - 1 - Master Group is enabled. Protection of all regions. - #1 - - + + + 2 + 0x8 + PR[%s] + Local MAC Address Registers + 0x410 - PT - Protection of Register - 0x102 - 16 + MACRU + Channel Local MAC Address Register + 0x00 + 32 read-write - 0x0000 - 0xFFFF + 0x00000000 + 0xFFFFFFFF - KEY - Write Keyword The data written to these bits are not stored. - 8 - 15 - write-only - - - 0xA5 - Writing to the PROTECT bit is valid, when the KEY bits are written 0xA5. - 0xA5 - - - others - Writing to the PROTECT bit is invalid. - true - - + PRMACRU + These bits hold the setting for the higher-order 24 bits of the local MAC address for Ethernet port 0. + 0 + 23 + read-write + + + + MACRL + Channel Local MAC Address Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - PROTECT - Protection of region register + PRMACRL + These bits hold the setting for the higher-order 24 bits of the local MAC address for Ethernet port 0. 0 - 0 + 23 read-write - - - 0 - All Bus Master MPU register writing is possible. - #0 - - - 1 - All Bus Master MPU register writing is protected. Read is possible. - #1 - - - - 32 - 0x10 - REGION[%s] - Address Region registers - 0x0200 - - C - Access Control Register - 0x00 - 16 + + + MIESR + MINT Interrupt Source Status Register + 0x000 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CYC5 + Pulse Output Timer 5 Rising Edge Detection Flag + 21 + 21 + read-write + oneToClear + modify + + + 0 + A rising edge in the periodic pulse signal from pulse output timer 5 is not detected. + #0 + + + 1 + A rising edge in the periodic pulse signal from pulse output timer 5 is detected. + #1 + + + + + CYC4 + Pulse Output Timer 4 Rising Edge Detection Flag + 20 + 20 + read-write + oneToClear + modify + + + 0 + A rising edge in the periodic pulse signal from pulse output timer 4 is not detected. + #0 + + + 1 + A rising edge in the periodic pulse signal from pulse output timer 4 is detected. + #1 + + + + + CYC3 + Pulse Output Timer 3 Rising Edge Detection Flag + 19 + 19 + read-write + oneToClear + modify + + + 0 + A rising edge in the periodic pulse signal from pulse output timer 3 is not detected. + #0 + + + 1 + A rising edge in the periodic pulse signal from pulse output timer 3 is detected. + #1 + + + + + CYC2 + Pulse Output Timer 2 Rising Edge Detection Flag + 18 + 18 + read-write + oneToClear + modify + + + 0 + A rising edge in the periodic pulse signal from pulse output timer 2 is not detected. + #0 + + + 1 + A rising edge in the periodic pulse signal from pulse output timer 2 is detected. + #1 + + + + + CYC1 + Pulse Output Timer 1 Rising Edge Detection Flag + 17 + 17 + read-write + oneToClear + modify + + + 0 + A rising edge in the periodic pulse signal from pulse output timer 1 is not detected. + #0 + + + 1 + A rising edge in the periodic pulse signal from pulse output timer 1 is detected. + #1 + + + + + CYC0 + Pulse Output Timer 0 Rising Edge Detection Flag + 16 + 16 + read-write + oneToClear + modify + + + 0 + A rising edge in the periodic pulse signal from pulse output timer 0 is not detected. + #0 + + + 1 + A rising edge in the periodic pulse signal from pulse output timer 0 is detected. + #1 + + + + + PRC + PRC-TC Status Flag + 3 + 3 + read-only + + + 0 + No change in the state of the PRC-TC module + #0 + + + 1 + A change in the state of the PRC-TC module + #1 + + + + + SY1 + SYNFP1 Status Flag + 2 + 2 + read-only + + + 0 + No change in the state of the SYNFP1 module + #0 + + + 1 + A change in the state of the SYNFP1 module + #1 + + + + + SY0 + SYNFP0 Status Flag + 1 + 1 + read-only + + + 0 + No change in the state of the SYNFP0 module + #0 + + + 1 + A change in the state of the SYNFP0 module + #1 + + + + + ST + STCA Status Flag + 0 + 0 + read-only + + + 0 + No change in the state of the STCA module + #0 + + + 1 + A change in the state of the STCA module + #1 + + + + + + + MIEIPR + MINT Interrupt Request Permission Register + 0x004 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CYC5 + Pulse Output Timer 5 Rising Edge Detection Interrupt Request Permission + 21 + 21 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 5. + #0 + + + 1 + Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 5. + #1 + + + + + CYC4 + Pulse Output Timer 4 Rising Edge Detection Interrupt Request Permission + 20 + 20 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 4. + #0 + + + 1 + Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 4. + #1 + + + + + CYC3 + Pulse Output Timer 3 Rising Edge Detection Interrupt Request Permission + 19 + 19 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 3. + #0 + + + 1 + Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 3. + #1 + + + + + CYC2 + Pulse Output Timer 2 Rising Edge Detection Interrupt Request Permission + 18 + 18 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 2. + #0 + + + 1 + Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 2. + #1 + + + + + CYC1 + Pulse Output Timer 1 Rising Edge Detection Interrupt Request Permission + 17 + 17 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 1. + #0 + + + 1 + Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 1. + #1 + + + + + CYC0 + Pulse Output Timer 0 Rising Edge Detection Interrupt Request Permission + 16 + 16 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 0. + #0 + + + 1 + Permits the generation of MINT interrupt requests in response to detection of a rising edge of pulse output timer 0. + #1 + + + + + PRC + PRC-TC Status Interrupt Request Permission + 3 + 3 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests by the PRC-TC status flag. + #0 + + + 1 + Permits the generation of MINT interrupt requests by the PRCTC status flag. + #1 + + + + + SY1 + SYNFP1 Status Interrupt Request Permission + 2 + 2 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests by the SYNFP1 status flag. + #0 + + + 1 + Permits the generation of MINT interrupt requests by the SYNFP1 status flag. + #1 + + + + + SY0 + SYNFP0 Status Interrupt Request Permission + 1 + 1 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests by the SYNFP0 status flag. + #0 + + + 1 + Permits the generation of MINT interrupt requests by the SYNFP0 status flag. + #1 + + + + + ST + STCA Status Interrupt Request Permission + 0 + 0 + read-write + + + 0 + Prohibits the generation of MINT interrupt requests by the STCA status flag. + #0 + + + 1 + Permits the generation of MINT interrupt requests by the STCA status flag. + #1 + + + + + + + ELIPPR + ELC Output/ETHER_IPLS Interrupt Request Permission Register + 0x010 + 32 + read-write + 0x00003F3F + 0xFFFFFFFF + + + PLSN + Pulse Output Timer Falling Edge Detection IPLS Interrupt Request Permission + 24 + 24 + read-write + + + 0 + Prohibits IPLS interrupt requests due to falling edges of signals from the selected pulse output timer. + #0 + + + 1 + Permits IPLS interrupt requests due to falling edges of signals from the selected pulse output timer. + #1 + + + + + PLSP + Pulse Output Timer Rising Edge Detection IPLS Interrupt Request Permission + 16 + 16 + read-write + + + 0 + Prohibits IPLS interrupt requests due to rising edges of signals from the selected pulse output timer. + #0 + + + 1 + Permits IPLS interrupt requests due to rising edges of signals from the selected pulse output timer. + #1 + + + + + CYCN5 + Pulse Output Timer 5 Falling Edge Detection Event Output Enable + 13 + 13 + read-write + + + 0 + Falling edges of the signal from pulse output timer 5 are not conveyed to the ELC as event signals. + #0 + + + 1 + Falling edges of the signal from pulse output timer 5 are conveyed to the ELC as event signals. + #1 + + + + + CYCN4 + Pulse Output Timer 4 Falling Edge Detection Event Output Enable + 12 + 12 + read-write + + + 0 + Falling edges of the signal from pulse output timer 4 are not conveyed to the ELC as event signals. + #0 + + + 1 + Falling edges of the signal from pulse output timer 4 are conveyed to the ELC as event signals. + #1 + + + + + CYCN3 + Pulse Output Timer 3 Falling Edge Detection Event Output Enable + 11 + 11 + read-write + + + 0 + Falling edges of the signal from pulse output timer 3 are not conveyed to the ELC as event signals. + #0 + + + 1 + Falling edges of the signal from pulse output timer 3 are conveyed to the ELC as event signals. + #1 + + + + + CYCN2 + Pulse Output Timer 2 Falling Edge Detection Event Output Enable + 10 + 10 + read-write + + + 0 + Falling edges of the signal from pulse output timer 2 are not conveyed to the ELC as event signals. + #0 + + + 1 + Falling edges of the signal from pulse output timer 2 are conveyed to the ELC as event signals. + #1 + + + + + CYCN1 + Pulse Output Timer 1 Falling Edge Detection Event Output Enable + 9 + 9 + read-write + + + 0 + Falling edges of the signal from pulse output timer 1 are not conveyed to the ELC as event signals. + #0 + + + 1 + Falling edges of the signal from pulse output timer 1 are conveyed to the ELC as event signals. + #1 + + + + + CYCN0 + Pulse Output Timer 0 Falling Edge Detection Event Output Enable + 8 + 8 + read-write + + + 0 + Falling edges of the signal from pulse output timer 0 are not conveyed to the ELC as event signals. + #0 + + + 1 + Falling edges of the signal from pulse output timer 0 are conveyed to the ELC as event signals. + #1 + + + + + CYCP5 + Pulse Output Timer 5 Rising Edge Detection Event Output Enable + 5 + 5 + read-write + + + 0 + Rising edges of the signal from pulse output timer 5 are not conveyed to the ELC as event signals. + #0 + + + 1 + Rising edges of the signal from pulse output timer 5 are conveyed to the ELC as event signals. + #1 + + + + + CYCP4 + Pulse Output Timer 4 Rising Edge Detection Event Output Enable + 4 + 4 + read-write + + + 0 + Rising edges of the signal from pulse output timer 4 are not conveyed to the ELC as event signals. + #0 + + + 1 + Rising edges of the signal from pulse output timer 4 are conveyed to the ELC as event signals. + #1 + + + + + CYCP3 + Pulse Output Timer 3 Rising Edge Detection Event Output Enable + 3 + 3 + read-write + + + 0 + Rising edges of the signal from pulse output timer 3 are not conveyed to the ELC as event signals. + #0 + + + 1 + Rising edges of the signal from pulse output timer 3 are conveyed to the ELC as event signals. + #1 + + + + + CYCP2 + Pulse Output Timer 2 Rising Edge Detection Event Output Enable + 2 + 2 + read-write + + + 0 + Rising edges of the signal from pulse output timer 2 are not conveyed to the ELC as event signals. + #0 + + + 1 + Rising edges of the signal from pulse output timer 2 are conveyed to the ELC as event signals. + #1 + + + + + CYCP1 + Pulse Output Timer 1 Rising Edge Detection Event Output Enable + 1 + 1 + read-write + + + 0 + Rising edges of the signal from pulse output timer 1 are not conveyed to the ELC as event signals. + #0 + + + 1 + Rising edges of the signal from pulse output timer 1 are conveyed to the ELC as event signals. + #1 + + + + + CYCP0 + Pulse Output Timer 0 Rising Edge Detection Event Output Enable + 0 + 0 + read-write + + + 0 + Rising edges of the signal from pulse output timer 0 are not conveyed to the ELC as event signals. + #0 + + + 1 + Rising edges of the signal from pulse output timer 0 are conveyed to the ELC as event signals. + #1 + + + + + + + ELIPACR + ELC Output/IPLS Interrupt Permission Automatic Clearing Register + 0x014 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PLSN + ELIPPR.PLSN Bit Automatic Clearing + 24 + 24 + read-write + + + 0 + Disables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. + #0 + + + 1 + Enables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. + #1 + + + + + PLSP + ELIPPR.PLSP Bit Automatic Clearing + 16 + 16 + read-write + + + 0 + Disables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. + #0 + + + 1 + Enables automatic clearing of the enable bit for IPLS interrupt requests in response to detection of rising edges of the pulse output timer. + #1 + + + + + CYCN5 + ELIPPR.CYCN5 Bit Automatic Clearing + 13 + 13 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 5. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 5. + #1 + + + + + CYCN4 + ELIPPR.CYCN4 Bit Automatic Clearing + 12 + 12 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 4. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 4. + #1 + + + + + CYCN3 + ELIPPR.CYCN3 Bit Automatic Clearing + 11 + 11 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 3. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 3. + #1 + + + + + CYCN2 + ELIPPR.CYCN2 Bit Automatic Clearing + 10 + 10 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 2. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 2. + #1 + + + + + CYCN1 + ELIPPR.CYCN1 Bit Automatic Clearing + 9 + 9 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 1. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 1. + #1 + + + + + CYCN0 + ELIPPR.CYCN0 Bit Automatic Clearing + 8 + 8 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of falling edges of pulse output timer 0. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of falling edges of pulse output timer 0. + #1 + + + + + CYCP5 + ELIPPR.CYCP5 Bit Automatic Clearing + 5 + 5 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 5. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 5. + #1 + + + + + CYCP4 + ELIPPR.CYCP4 Bit Automatic Clearing + 4 + 4 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 4. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 4. + #1 + + + + + CYCP3 + ELIPPR.CYCP3 Bit Automatic Clearing + 3 + 3 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 3. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 3. + #1 + + + + + CYCP2 + ELIPPR.CYCP2 Bit Automatic Clearing + 2 + 2 + read-write + + + 0 + Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 2. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 2. + #1 + + + + + CYCP1 + ELIPPR.CYCP1 Bit Automatic Clearing + 1 + 1 read-write - 0x0000 - 0xFFFF - - - WP - Write protection - 2 - 2 - read-write - - - 0 - Write permission - #0 - - - 1 - Write protection - #1 - - - - - RP - Read protection - 1 - 1 - read-write - - - 0 - Read permission - #0 - - - 1 - Read protection - #1 - - - - - ENABLE - Region enable - 0 - 0 - read-write - - - 0 - Group m Region n unit is disabled - #0 - - - 1 - Group m Region n unit is enabled - #1 - - - - - - - S - Start Address Register - 0x04 - 32 + + + 0 + Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 1. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 1. + #1 + + + + + CYCP0 + ELIPPR.CYCP0 Bit Automatic Clearing + 0 + 0 read-write - 0x00000000 - 0xFFFFFFFF - - - MMPUSmn - Address where the region starts, for use in region determination.NOTE: The low-order 2 bits are fixed to 0. - 0 - 31 - read-write - - - - - E - End Address Register - 0x08 - 32 + + + 0 + Disables automatic clearing of the enable bit for the output of rising edges of pulse output timer 0. + #0 + + + 1 + Enables automatic clearing of the enable bit for the output of rising edges of pulse output timer 0. + #1 + + + + + + + STSR + STCA Status Register + 0x040 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + W10D + Worst 10 Acquisition Completion Flag + 4 + 4 read-write - 0x00000003 - 0xFFFFFFFF - - - MMPUEmn - Region end address registerAddress where the region end, for use in region determination.NOTE: The low-order 2 bits are fixed to 1. - 0 - 31 - read-write - - - - - - - - - R_MPU_SMPU - Bus Slave MPU - 0x40000C00 - - 0x00000000 - 0x02 - registers - - - 0x00000010 - 0x02 - registers - - - 0x00000014 - 0x02 - registers - - - 0x00000018 - 0x02 - registers - - - 0x0000001C - 0x02 - registers - - - 0x00000020 - 0x02 - registers - - - 0x00000024 - 0x02 - registers - - - 0x00000028 - 0x02 - registers - - - 0x0000002C - 0x02 - registers - - - 0x00000030 - 0x02 - registers - - - 0x00000034 - 0x02 - registers - - - - 10 - 0x4 - - - MBIU - MBIU - 0 - - - FBIU - FBIU - 1 - - - R_SRAM - R_SRAM - 2 - - - SRAM1 - SRAM1 - 3 - - - P0BIU - P0BIU - 4 - - - P2BIU - P2BIU - 5 - - - P6BIU - P6BIU - 6 - - - B7BIU - B7BIU - 7 - - - EXBIU - EXBIU - 8 - - - EXBIU2 - EXBIU2 - 9 - - - SMPU[%s] - Access Control Structure for MBIU - 0x10 - - R - Access Control Register for MBIU - 0x00 - 16 - read-write - 0x2000 - 0xFFFF - - - WPSRAMHS - SRAMHS Write Protection - 15 - 15 - read-write - - - 0 - Memory protection for SRAMHS writes from master group A, B, and C disabled - #0 - - - 1 - Memory protection for SRAMHS writes from master group A, B, and C enabled. - #1 - - - - - RPSRAMHS - SRAMHS Read Protection - 14 - 14 - read-write - - - 0 - Memory protection for SRAMHS reads from master group A, B, and C disabled - #0 - - - 1 - Memory protection for SRAMHS reads from master group A, B, and C enabled. - #1 - - - - - WPFLI - Code Flash Memory Write Protection (Note: This bit is read as 1. The write value should be 1.) - 13 - 13 - read-write - - - 0 - Setting prohibited - #0 - - - 1 - Memory protection for code flash memory writes from master group A, B, and C enabled. - #1 - - - - - RPFLI - Code Flash Memory Read Protection - 12 - 12 - read-write - - - 0 - Memory protection for code flash memory reads from master group A, B, and C disabled - #0 - - - 1 - Memory protection for code flash memory reads from master group A, B, and C enabled. - #1 - - - - - WPGRPC - Master Group C Write protection - 7 - 7 - read-write - - - 0 - Memory protection for master group C writes disabled - #0 - - - 1 - Memory protection for master group C writes enabled. - #1 - - - - - RPGRPC - Master Group C Read protection - 6 - 6 - read-write - - - 0 - Memory protection for master group C reads disabled - #0 - - - 1 - Memory protection for master group C reads enabled. - #1 - - - - - WPGRPB - Master Group B Write protection - 5 - 5 - read-write - - - 0 - Memory protection for master group B writes disabled - #0 - - - 1 - Memory protection for master group B writes enabled. - #1 - - - - - RPGRPB - Master Group B Read protection - 4 - 4 - read-write - - - 0 - Memory protection for master group B reads disabled - #0 - - - 1 - Memory protection for master group B reads enabled. - #1 - - - - - WPGRPA - Master Group A Write protection - 3 - 3 - read-write - - - 0 - Memory protection for master group A writes disabled - #0 - - - 1 - Memory protection for master group A writes enabled. - #1 - - - - - RPGRPA - Master Group A Read protection - 2 - 2 - read-write - - - 0 - Memory protection for master group A reads disabled - #0 - - - 1 - Memory protection for master group A reads enabled. - #1 - - - - - - + oneToClear + + + 0 + Ten worst values not acquired yet + #0 + + + 1 + Ten worst values acquired + #1 + + + + + SYNTOUT + Sync Message Reception Timeout Detection Flag + 3 + 3 + read-write + oneToClear + + + 0 + Sync message reception timeout not detected + #0 + + + 1 + Sync message reception timeout detected + #1 + + + + + SYNCOUT + Synchronization Loss Detection Flag + 1 + 1 + read-write + oneToClear + + + 0 + Loss of synchronization not detected + #0 + + + 1 + Loss of synchronization detected + #1 + + + + + SYNC + Synchronized State Detection Flag + 0 + 0 + read-write + oneToClear + + + 0 + Synchronization not detected + #0 + + + 1 + Synchronization detected + #1 + + + + + - SMPUCTL - Slave MPU Control Register - 0x00 - 16 + STIPR + STCA Status Notification Permission Register + 0x044 + 32 read-write - 0x0000 - 0xFFFF + 0x00000000 + 0xFFFFFFFF - KEY - Key Code This bit is used to enable or disable rewriting of the PROTECT and OAD bit. - 8 - 15 - write-only + W10D + W10D Status Notification Enable + 4 + 4 + read-write - 0xA5 - Writing to the PROTECT and OAD bit is valid, when the KEY bits are written 0xA5. - 0xA5 + 0 + Disable notification of the STSR.W10D state + #0 - others - Writing to the PROTECT and OAD bit is invalid. - true + 1 + Enable notification of the STSR.W10D state + #1 - PROTECT - Protection of register + SYNTOUT + SYNTOUT Status Notification Enable + 3 + 3 + read-write + + + 0 + Disable notification of the STSR.SYNTOUT state + #0 + + + 1 + Enable notification of the STSR.SYNTOUT state + #1 + + + + + SYNCOUT + SYNCOUT Status Notification Enable 1 1 read-write 0 - All Bus Slave register writing is possible. + Disable notification of the STSR.SYNCOUT state #0 1 - All Bus Slave register writing is protected. Read is possible. + Enable notification of the STSR.SYNCOUT state #1 - OAD - Master Group enable + SYNC + SYNC Status Notification Enable 0 0 read-write 0 - Non-maskable interrupt. + Disable notification of the STSR.SYNC state #0 1 - Internal reset. + Enable notification of the STSR.SYNC state #1 - - - - R_MPU_SPMON - CPU Stack Pointer Monitor - 0x40000D00 - - 0x00000000 - 0x02 - registers - - - 0x00000004 - 0x00E - registers - - - 0x00000014 - 0x00C - registers - - - - 2 - 0x10 - - - M - M - 0 - - - P - P - 1 - - - SP[%s] - Stack Pointer Monitor - 0x0000 - - OAD - Stack Pointer Monitor Operation After Detection Register - 0x00 - 16 - read-write - 0x0000 - 0xFFFF - - - KEY - Write Keyword The data written to these bits are not stored. - 8 - 15 - write-only - - - 0xA5 - Writing to the OAD bit is valid, when the KEY bits are written 0xA5. - 0xA5 - - - others - Writing to the OAD bit is invalid. - true - - - - - OAD - Operation after detection - 0 - 0 - read-write - - - 0 - Non-maskable interrupt - #0 - - - 1 - Reset. - #1 - - - - - - - CTL - Stack Pointer Monitor Access Control Register - 0x04 - 16 - read-write - 0x0000 - 0xFEFF - - - ERROR - Stack Pointer Monitor Error Flag - 8 - 8 - read-write - - - 0 - Stack pointer has not overflowed or underflowed - #0 - - - 1 - Stack pointer has overflowed or underflowed - #1 - - - - - ENABLE - Stack Pointer Monitor Enable - 0 - 0 - read-write - - - 0 - Stack pointer monitor is disabled - #0 - - - 1 - Stack pointer monitor is enabled. - #1 - - - - - - - PT - Stack Pointer Monitor Protection Register - 0x06 - 16 - read-write - 0x0000 - 0xFFFF - - - KEY - Write Keyword The data written to these bits are not stored. - 8 - 15 - write-only - - - 0xA5 - Writing to the PROTECT bit is valid, when the KEY bits are written 0xA5. - 0xA5 - - - others - Writing to the PROTECT bit is invalid. - true - - - - - PROTECT - Protection of register (MSPMPUAC, MSPMPUSA and MSPMPUSE) - 0 - 0 - read-write - - - 0 - Stack Pointer Monitor register writing is possible. - #0 - - - 1 - Stack Pointer Monitor register writing is protected. - #1 - - - - - - - SA - Stack Pointer Monitor Start Address Register - 0x08 - 32 - read-write - 0x00000000 - 0x00000003 - - - MSPMPUSA - Region start address register Address where the region starts, for use in region determination.NOTE: Range: 0x1FF00000-0x200FFFFC The low-order 2 bits are fixed to 0. - 0 - 31 - read-write - - - 0x1FF00000 - 0x200FFFFC - - - - - - - EA - Stack Pointer Monitor End Address Register - 0x0C - 32 - read-write - 0x00000003 - 0x00000003 - - - MSPMPUEA - Region end address register Address where the region starts, for use in region determination.NOTE: Range: 0x1FF00003-0x200FFFFF The low-order 2 bits are fixed to 1. - 0 - 31 - read-write - - - 0x1FF00003 - 0x200FFFFF - - - - - - - - - - R_MSTP - System-Module Stop - 0x40047000 - - 0x00000000 - 0x00C - registers - - - MSTPCRB - Module Stop Control Register B - 0x00 + STCFR + STCA Clock Frequency Setting Register + 0x050 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + STCF + STCA Clock Frequency + 0 + 1 + read-write + + + 00 + 20MHz + #00 + + + 01 + 25MHz + #01 + + + 10 + 50MHz + #10 + + + 11 + 100 MHz + #11 + + + + + + + STMR + STCA Operating Mode Register + 0x054 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ALEN1 + Alarm Detection Enable 1 + 29 + 29 + read-write + + + 0 + The STSR.SYNTOUT flag is not set to 1 on detection of the Sync message reception timeout interrupt. + #0 + + + 1 + The STSR.SYNTOUT flag is not set to 1 on detection of the Sync message reception timeout interrupt. + #1 + + + + + ALEN0 + Alarm Detection Enable 0 + 28 + 28 + read-write + + + 0 + The STSR.SYNC or SYNCOUT flag is not set to 1 on detection of synchronization or loss of synchronization. + #0 + + + 1 + The STSR.SYNC or SYNCOUT flag is set to 1 on detection of synchronization or loss of synchronization. + #1 + + + + + DVTH + Synchronization Loss Detection Threshold Setting + 20 + 23 + read-write + + + 0x0 + None + 0x0 + + + others + (DVTH) time + true + + + + + SYTH + Synchronized State Detection Threshold Setting + 16 + 19 + read-write + + + 0x0 + None + 0x0 + + + others + (SYTH) time + true + + + + + W10S + Worst 10 Acquisition Control Select + 15 + 15 + read-write + + + 0 + Measurement is started by hardware and the value acquired in the PW10VR or MW10R register is used as the limit for filtering. + #0 + + + 1 + Measurement is started by the GETW10R.GW10 bit. Also, the value set in the PLIMITR or MLIMITR register is used as the limit for filtering. + #1 + + + + + CMOD + Time Synchronization Correction Mode + 13 + 13 + read-write + + + 0 + Mode 1 + #0 + + + 1 + Mode 2 + #1 + + + + + WINT + Worst 10 Acquisition Time + 0 + 7 + read-write + + + 0x00 + The worst 10 values are not acquired. + 0x00 + + + others + Sync message reception: (WINT) time + true + + + + + + + SYNTOR + Sync Message Reception Timeout Register + 0x058 32 read-write - 0xFFFFFFFF + 0x00000000 0xFFFFFFFF - MSTPB31 - Serial Communication Interface 0 Module Stop - 31 + SYNTOR + A Sync message not being received within 1024 x n (ns), where n is the setting, leads to a timeout for reception of Sync messages, leading to the STSR.SYNTOUT flag being set to 1. + 0 31 read-write + + + + + IPTSELR + IPLS Interrupt Request Timer Select Register + 0x060 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + IPTSEL5 + Pulse Output Timer 5 Select + 5 + 5 + read-write 0 - Cancel the module-stop state + Pulse output timer 5 is not selected as a source of IPLS interrupt requests. #0 1 - Enter the module-stop state + Pulse output timer 5 is selected as a source of IPLS interrupt requests. #1 - MSTPB30 - Serial Communication Interface 1 Module Stop - 30 - 30 + IPTSEL4 + Pulse Output Timer 4 Select + 4 + 4 read-write 0 - Cancel the module-stop state + Pulse output timer 4 is not selected as a source of IPLS interrupt requests. #0 1 - Enter the module-stop state + Pulse output timer 4 is selected as a source of IPLS interrupt requests. #1 - MSTPB29 - Serial Communication Interface 2 Module Stop - 29 - 29 + IPTSEL3 + Pulse Output Timer 3 Select + 3 + 3 read-write 0 - Cancel the module-stop state + Pulse output timer 3 is not selected as a source of IPLS interrupt requests. #0 1 - Enter the module-stop state + Pulse output timer 3 is selected as a source of IPLS interrupt requests. #1 - MSTPB28 - Serial Communication Interface 3 Module Stop - 28 - 28 + IPTSEL2 + Pulse Output Timer 2 Select + 2 + 2 read-write 0 - Cancel the module-stop state + Pulse output timer 2 is not selected as a source of IPLS interrupt requests. #0 1 - Enter the module-stop state + Pulse output timer 2 is selected as a source of IPLS interrupt requests. #1 - MSTPB27 - Serial Communication Interface 4 Module Stop - 27 - 27 + IPTSEL1 + Pulse Output Timer 1 Select + 1 + 1 read-write 0 - Cancel the module-stop state + Pulse output timer 1 is not selected as a source of IPLS interrupt requests. #0 1 - Enter the module-stop state + Pulse output timer 1 is selected as a source of IPLS interrupt requests. #1 - MSTPB26 - Serial Communication Interface 5 Module Stop - 26 - 26 + IPTSEL0 + Pulse Output Timer 0 Select + 0 + 0 read-write 0 - Cancel the module-stop state + Pulse output timer 0 is not selected as a source of IPLS interrupt requests. #0 1 - Enter the module-stop state + Pulse output timer 0 is selected as a source of IPLS interrupt requests. #1 + + + + MITSELR + MINT Interrupt Request Timer Select Register + 0x064 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPB25 - Serial Communication Interface 6 Module Stop - 25 - 25 + MINTEN5 + Pulse Output Timer 5 MINT Interrupt Output Enable + 5 + 5 read-write 0 - Cancel the module-stop state + Output of rising edges by pulse output timer 5 is not reflected by the MIESR.CYC5 flag as a MINT interrupt source. #0 1 - Enter the module-stop state + Output of rising edges by pulse output timer 5 is reflected by the MIESR.CYC5 flag as a MINT interrupt source. #1 - MSTPB24 - Serial Communication Interface 7 Module Stop - 24 - 24 + MINTEN4 + Pulse Output Timer 4 MINT Interrupt Output Enable + 4 + 4 read-write 0 - Cancel the module-stop state + Output of rising edges by pulse output timer 4 is not reflected by the MIESR.CYC4 flag as a MINT interrupt source. #0 1 - Enter the module-stop state + Output of rising edges by pulse output timer 4 is reflected by the MIESR.CYC4 flag as a MINT interrupt source. #1 - MSTPB23 - Serial Communication Interface 8 Module Stop - 23 - 23 + MINTEN3 + Pulse Output Timer 3 MINT Interrupt Output Enable + 3 + 3 read-write 0 - Cancel the module-stop state + Output of rising edges by pulse output timer 3 is not reflected by the MIESR.CYC3 flag as a MINT interrupt source. #0 1 - Enter the module-stop state + Output of rising edges by pulse output timer 3 is reflected by the MIESR.CYC3 flag as a MINT interrupt source. #1 - MSTPB22 - Serial Communication Interface 9 Module Stop - 22 - 22 + MINTEN2 + Pulse Output Timer 2 MINT Interrupt Output Enable + 2 + 2 read-write 0 - Cancel the module-stop state + Output of rising edges by pulse output timer 2 is not reflected by the MIESR.CYC2 flag as a MINT interrupt source. #0 1 - Enter the module-stop state + Output of rising edges by pulse output timer 2 is reflected by the MIESR.CYC2 flag as a MINT interrupt source. #1 - Reserved - These bits are read as 11. The write value should be 11. - 20 - 21 - read-write - - - MSTPB19 - Serial Peripheral Interface 0 Module Stop - 19 - 19 + MINTEN1 + Pulse Output Timer 1 MINT Interrupt Output Enable + 1 + 1 read-write 0 - Cancel the module-stop state + Output of rising edges by pulse output timer 1 is not reflected by the MIESR.CYC1 flag as a MINT interrupt source. #0 1 - Enter the module-stop state + Output of rising edges by pulse output timer 1 is reflected by the MIESR.CYC1 flag as a MINT interrupt source. #1 - MSTPB18 - Serial Peripheral Interface Module Stop - 18 - 18 + MINTEN0 + Pulse Output Timer 0 MINT Interrupt Output Enable + 0 + 0 read-write 0 - Cancel the module-stop state + Output of rising edges by pulse output timer 0 is not reflected by the MIESR.CYC0 flag as a MINT interrupt source. #0 1 - Enter the module-stop state + Output of rising edges by pulse output timer 0 is reflected by the MIESR.CYC0 flag as a MINT interrupt source. #1 + + + + ELTSELR + ELC Output Timer Select Register + 0x068 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - Reserved - These bits are read as 11. The write value should be 11. - 16 - 17 - read-write - - - MSTPB15 - ETHERC0 and EDMAC0 Module Stop - 15 - 15 + ELTDIS5 + Pulse Output Timer 5 Event Generation Disable + 5 + 5 read-write 0 - Cancel the module-stop state + Pulse output timer 5 is used for the generation of event signals for the ELC. #0 1 - Enter the module-stop state + Pulse output timer 5 is not used for the generation of event signals for the ELC. #1 - MSTPB14 - ETHERC1 and EDMAC1 Module Stop - 14 - 14 + ELTDIS4 + Pulse Output Timer 4 Event Generation Disable + 4 + 4 read-write 0 - Cancel the module-stop state + Pulse output timer 4 is used for the generation of event signals for the ELC. #0 1 - Enter the module-stop state + Pulse output timer 4 is not used for the generation of event signals for the ELC. #1 - MSTPB13 - EPTPC and PTPEDMAC Module Stop - 13 - 13 + ELTDIS3 + Pulse Output Timer 3 Event Generation Disable + 3 + 3 read-write 0 - Cancel the module-stop state + Pulse output timer 3 is used for the generation of event signals for the ELC. #0 1 - Enter the module-stop state + Pulse output timer 3 is not used for the generation of event signals for the ELC. #1 - MSTPB12 - Universal Serial Bus 2.0 HS Interface Module Stop - 12 - 12 + ELTDIS2 + Pulse Output Timer 2 Event Generation Disable + 2 + 2 read-write 0 - Cancel the module-stop state + Pulse output timer 2 is used for the generation of event signals for the ELC. #0 1 - Enter the module-stop state + Pulse output timer 2 is not used for the generation of event signals for the ELC. #1 - MSTPB11 - Universal Serial Bus 2.0 FS Interface Module Stop - 11 - 11 + ELTDIS1 + Pulse Output Timer 1 Event Generation Disable + 1 + 1 read-write 0 - Cancel the module-stop state + Pulse output timer 1 is used for the generation of event signals for the ELC. #0 1 - Enter the module-stop state + Pulse output timer 1 is not used for the generation of event signals for the ELC. #1 - Reserved - This bit is read as 1. The write value should be 1. - 10 - 10 - read-write - - - MSTPB9 - I2C Bus Interface 0 Module Stop - 9 - 9 + ELTDIS0 + Pulse Output Timer 0 Event Generation Disable + 0 + 0 read-write 0 - Cancel the module-stop state + Pulse output timer 0 is used for the generation of event signals for the ELC. #0 1 - Enter the module-stop state + Pulse output timer 0 is not used for the generation of event signals for the ELC. #1 + + + + STCHSELR + Time Synchronization Channel Select Register + 0x06C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPB8 - I2C Bus Interface 1 Module Stop - 8 - 8 + SYSEL + Timer Information Input SelectNOTE: Do not change the value of this bit while the SYNSTARTR.STR bit is 1. + 0 + 0 read-write 0 - Cancel the module-stop state + Time information from synchronization from the SYNFP0 module is used. #0 1 - Enter the module-stop state + Time information from synchronization from the SYNFP1 module is used. #1 + + + + SYNSTARTR + Slave Time Synchronization Start Register + 0x080 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPB7 - I2C Bus Interface 2 Module Stop - 7 - 7 + STR + Slave Time Synchronization Control + 0 + 0 read-write 0 - Cancel the module-stop state + Slave time synchronization is stopped. #0 1 - Enter the module-stop state + Slave time synchronization is started. #1 + + + + LCIVLDR + Local Time Counter Initial Value Load Directive Register + 0x084 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + - MSTPB6 - Queued Serial Peripheral Interface Module Stop - 6 - 6 - read-write + LOAD + Local Time Counter Initial Value Load Directive + 0 + 0 + write-only 0 - Cancel the module-stop state + The initial value is not loaded into the local time counter. #0 1 - Enter the module-stop state + The initial value is loaded into the local time counter. #1 + + + + SYNTDARU + Synchronization Loss Detection Threshold Registers + 0x090 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYNTDARU + These bits hold the setting for the higher-order 32 bits of the threshold for detection of loss of synchronization. + 0 + 31 + read-write + + + + + SYNTDARL + Synchronization Loss Detection Threshold Registers + 0x094 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYNTDARL + These bits hold the setting for the lower-order 32 bits of the threshold for detection of loss of synchronization. + 0 + 31 + read-write + + + + + SYNTDBRU + Synchronization Detection Threshold Registers + 0x098 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYNTDBRU + These bits hold the setting for the higher-order 32 bits of the threshold for detection of synchronization. + 0 + 31 + read-write + + + + + SYNTDBRL + Synchronization Detection Threshold Registers + 0x09C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SYNTDBRL + These bits hold the setting for the lower-order 32 bits of the threshold for detection of synchronization. + 0 + 31 + read-write + + + + + LCIVRU + Local Time Counter Initial Value Registers + 0x0B0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + LCIVRU + These bits hold the setting for the higher-order 16 bits of the integer portion of the initial value for the local timer counter. + 0 + 15 + read-write + + + + + LCIVRM + Local Time Counter Initial Value Registers + 0x0B4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + LCIVRM + These bits hold the setting for the lower-order 32 bits of the integer portion of the initial value for the local timer counter. + 0 + 31 + read-write + + + + + LCIVRL + Local Time Counter Initial Value Registers + 0x0B8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + LCIVRL + These bits hold the setting for the fractional portion of the initial value of the local timer counter in nanoseconds. + 0 + 31 + read-write + + + + + GETW10R + Worst 10 Acquisition Directive Register + 0x124 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPB5 - IrDA Module Stop - 5 - 5 + GW10 + Worst 10 Acquisition Directive + 0 + 0 read-write 0 - Cancel the module-stop state + The worst-10 values are not acquired. #0 1 - Enter the module-stop state + Starts acquisition of the worst-10 values. #1 + + + + PLIMITRU + Positive Gradient Limit Registers + 0x128 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - Reserved - These bits are read as 11. The write value should be 11. - 3 - 4 + PLIMITRU + These bits hold the setting for the higher-order 31 bits of the limit for the positive gradient. + 0 + 30 read-write + + + + PLIMITRM + Positive Gradient Limit Registers + 0x12C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPB2 - RCAN0 Module Stop - 2 - 2 + PLIMITRM + These bits hold the setting for the middle-order 32 bits of the limit for the positive gradient. + 0 + 31 read-write - - - 0 - Cancel the module-stop state - #0 - - - 1 - Enter the module-stop state - #1 - - + + + + PLIMITRL + Positive Gradient Limit Registers + 0x130 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPB1 - RCAN1 Module Stop - 1 - 1 + PLIMITRL + These bits hold the setting for the lower-order 32 bits of the limit for the positive gradient. + 0 + 31 read-write - - - 0 - Cancel the module-stop state - #0 - - - 1 - Enter the module-stop state - #1 - - + + + + MLIMITRU + Negative Gradient Limit Registers + 0x134 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - Reserved - This bit is read as 1. The write value should be 1. + MLIMITRU + These bits hold the setting for the higher-order 31 bits of the limit for the negative gradient. 0 - 0 + 30 read-write - MSTPCRC - Module Stop Control Register C - 0x04 + MLIMITRM + Negative Gradient Limit Registers + 0x138 32 read-write - 0xFFFFFFFF + 0x00000000 0xFFFFFFFF - MSTPC31 - AES Module Stop - 31 + MLIMITRM + These bits hold the setting for the middle-order 32 bits of the limit for the negative gradient. + 0 31 read-write - - - 0 - Cancel the module-stop state - #0 - - - 1 - Enter the module-stop state - #1 - - + + + + MLIMITRL + Negative Gradient Limit Registers + 0x13C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPC28 - Random Number Generator Module Stop - 28 - 28 + MLIMITRL + These bits hold the setting for the lower-order 32 bits of the limit for the negative gradient. + 0 + 31 read-write - - - 0 - Cancel the module-stop state - #0 - - - 1 - Enter the module-stop state. - #1 - - + + + + GETINFOR + Statistical Information Retention Control Register + 0x140 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPC14 - Event Link Controller Module Stop - 14 - 14 + INFO + Information Retention ControlNOTE: Once information fetching is directed, values of various statistical information read before completion of information fetching are not guaranteed. + 0 + 0 read-write 0 - Cancel the module-stop state + Has no effects.(write) / Information retention is completed.(read) #0 1 - Enter the module-stop state + Information is retained.(write) / Processing for information retention is in progress.(read) #1 + + + + LCCVRU + Local Time Counters + 0x170 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + - MSTPC13 - Data Operation Circuit Module Stop - 13 - 13 + LCCVRU + These bits are for reading the higher-order 16 bits of the integer portion of the local timer counter's value. + 0 + 15 + read-only + + + + + LCCVRM + Local Time Counters + 0x174 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + LCCVRM + These bits are for reading the lower-order 32 bits of the integer portion of the local timer counter's value. + 0 + 31 + read-only + + + + + LCCVRL + Local Time Counters + 0x178 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + LCCVRL + These bits are for reading the fractional portion of the local timer counter's value (in nanoseconds). + 0 + 31 + read-only + + + + + PW10VRU + Positive Gradient Worst 10 Value Registers + 0x210 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + PW10VRU + These bits are for reading the higher-order 32 bits of the positive gradient value. + 0 + 31 + read-only + + + + + PW10VRM + Positive Gradient Worst 10 Value Registers + 0x214 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + PW10VRM + These bits are for reading the middle-order 32 bits of the positive gradient value. + 0 + 31 + read-only + + + + + PW10VRL + Positive Gradient Worst 10 Value Registers + 0x218 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + PW10VRL + These bits are for reading the lower-order 32 bits of the positive gradient value. + 0 + 31 + read-only + + + + + MW10RU + Negative Gradient Worst 10 Value Registers + 0x2D0 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + MW10RU + These bits are for reading the higher-order 32 bits of the negative gradient value. + 0 + 31 + read-only + + + + + MW10RM + Negative Gradient Worst 10 Value Registers + 0x2D4 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + MW10RM + These bits are for reading the middle-order 32 bits of the negative gradient value. + 0 + 31 + read-only + + + + + MW10RL + Negative Gradient Worst 10 Value Registers + 0x2D8 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + MW10RL + These bits are for reading the lower-order 32 bits of the negative gradient value. + 0 + 31 + read-only + + + + + TMSTARTR + Timer Start Register + 0x37C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + EN5 + Pulse Output Timer 5 Start + 5 + 5 read-write 0 - Cancel the module-stop state + Stops pulse output timer 5. #0 1 - Enter the module-stop state + Starts pulse output timer 5. #1 - MSTPC4 - Segment LCD Controller Module Stop + EN4 + Pulse Output Timer 4 Start 4 4 read-write 0 - Cancel the module-stop state + Stops pulse output timer 4. #0 1 - Enter the module-stop state + Starts pulse output timer 4. #1 - MSTPC3 - Capacitive Touch Sensing Unit Module Stop + EN3 + Pulse Output Timer 3 Start 3 3 read-write 0 - Cancel the module-stop state + Stops pulse output timer 3. #0 1 - Enter the module-stop state + Starts pulse output timer 3. #1 - MSTPC2 - Parallel Data Capture Module Stop + EN2 + Pulse Output Timer 2 Start 2 2 read-write 0 - Cancel the module-stop state + Stops pulse output timer 2. #0 1 - Enter the module-stop state + Starts pulse output timer 2. #1 - MSTPC1 - CRC Calculator Module Stop + EN1 + Pulse Output Timer 1 Start 1 1 read-write 0 - Cancel the module-stop state + Stops pulse output timer 1. #0 1 - Enter the module-stop state + Starts pulse output timer 1. #1 - MSTPC0 - CAC Module Stop + EN0 + Pulse Output Timer 0 Start 0 0 read-write 0 - Cancel the module-stop state + Stops pulse output timer 0. #0 1 - Enter the module-stop state + Starts pulse output timer 0. #1 @@ -48800,389 +34099,299 @@ FMS2,1,0: - MSTPCRD - Module Stop Control Register D - 0x08 + PRSR + PRC-TC Status Register + 0x400 32 read-write - 0xFFFFFFFF + 0x00000000 0xFFFFFFFF - MSTPD31 - Operational Amplifier Module Stop - 31 - 31 + URE1 + Relay Packet Underflow Detection Flag 1 + 29 + 29 read-write + oneToClear 0 - Cancel the module-stop state + No underflow in transfer of data from SYNFP0 to SYNFP1. #0 1 - Enter the module-stop state + An underflow has been detected in transfer of data from SYNFP0 to SYNFP1. #1 - MSTPD29 - Comparator-LP Module Stop - 29 - 29 + URE0 + Relay Packet Underflow Detection Flag 0 + 28 + 28 read-write + oneToClear 0 - Cancel the module-stop state + No underflow in transfer of data from SYNFP1 to SYNFP0. #0 1 - Enter the module-stop state + An underflow has been detected in transfer of data from SYNFP1 to SYNFP0. #1 - MSTPD28 - ACMPHS0 Module Stop - 28 - 28 + MACE + Originating MAC Address Mismatch Detection Flag + 8 + 8 read-write + oneToClear + modify 0 - Cancel the module-stop state + A MAC address mismatch has not been detected. #0 1 - Enter the module-stop state + A MAC address mismatch has been detected. #1 - MSTPD20 - 12-bit D/A Converter Module Stop - 20 - 20 + OVRE3 + Relay Packet Overflow Detection Flag 3 + 3 + 3 read-write + oneToClear + modify 0 - Cancel the module-stop state + No overflow in transfer of data from SYNFP0 to SYNFP1. #0 1 - Enter the module-stop state + An overflow has been detected in transfer of data from SYNFP0 to SYNFP1. #1 - MSTPD19 - 8-Bit D/A Converter Module Stop - 19 - 19 + OVRE2 + Relay Packet Overflow Detection Flag 2 + 2 + 2 read-write + oneToClear + modify 0 - Cancel the module-stop state + No overflow in transfer of data from SYNFP1 to SYNFP0. #0 1 - Enter the module-stop state + An overflow has been detected in transfer of data from SYNFP1 to SYNFP0. #1 - MSTPD17 - 24-bit Sigma-Delta A/DConverter Module Stop - 17 - 17 + OVRE1 + Relay Packet Overflow Detection Flag 1 + 1 + 1 read-write + oneToClear + modify 0 - Cancel the module-stop state + No overflow in transfer of data from SYNFP0 to PTPEDMAC. #0 1 - Enter the module-stop state + An overflow has been detected in transfer of data from SYNFP0 to PTPEDMAC. #1 - MSTPD16 - 16-Bit A/D Converter Module Stop - 16 - 16 + OVRE0 + Relay Packet Overflow Detection Flag 0 + 0 + 0 read-write + oneToClear + modify 0 - Cancel the module-stop state + No overflow in transfer of data from SYNFP1 to PTPEDMAC. #0 1 - Enter the module-stop state + An overflow has been detected in transfer of data from SYNFP1 to PTPEDMAC. #1 + + + + PRIPR + PRC-TC Status Notification Permission Register + 0x404 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - MSTPD14 - POEG Module Stop - 14 - 14 + URE1 + PRSR.URE1 Status Notification Permission + 29 + 29 read-write 0 - Cancel the module-stop state + Prohibits notification of the state of PRSR.URE1. #0 1 - Enter the module-stop state + Permits notification of the state of PRSR.URE1. #1 - MSTPD6 - GPT ch6 - ch1 Module Stop - 6 - 6 + URE0 + PRSR.URE0 Status Notification Permission + 28 + 28 read-write 0 - Cancel the module-stop state + Prohibits notification of the state of PRSR.URE0. #0 1 - Enter the module-stop state + Permits notification of the state of PRSR.URE0. #1 - MSTPD5 - GPT ch0 Module Stop - 5 - 5 + MACE + PRSR.MACE Status Notification Permission + 8 + 8 read-write 0 - Cancel the module-stop state + Prohibits notification of the state of PRSR.MACE #0 1 - Enter the module-stop state + Permits notification of the state of PRSR.MACE #1 - MSTPD3 - AGT0 Module StopNote: AGT0 is in the module stop state when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. In case the count source is sub-clock or LOCO, this bit should be set to 1 except when accessing the registers of AGT0. + OVRE3 + PRSR.OVRE3 Status Notification Permission 3 3 read-write 0 - Cancel the module-stop state + Prohibits notification of the state of PRSR.OVRE3. #0 1 - Enter the module-stop state + Permits notification of the state of PRSR.OVRE3. #1 - MSTPD2 - AGT1 Module StopNote: AGT1 is in the module stop state when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. In case the count source is sub-clock or LOCO, this bit should be set to 1 except when accessing the registers of AGT1. + OVRE2 + PRSR.OVRE2 Status Notification Permission 2 2 read-write 0 - Cancel the module-stop state + Prohibits notification of the state of PRSR.OVRE2. #0 1 - Enter the module-stop state + Permits notification of the state of PRSR.OVRE2. #1 - - - - - - R_OPAMP - Operational Amplifier - 0x40086000 - - 0x00000008 - 0x005 - registers - - - 0x0000000E - 0x00C - registers - - - 0x0000001F - 0x007 - registers - - - - 4 - 0x3 - AMP[%s] - Input and Output Selectors for Operational Amplifier %s - 0x0E - read-write - - OS - Output Select Register - 0 - 8 - read-write - 0x00 - 0xFF - - - - PS - Plus Input Select Register - 2 - 8 - read-write - 0x00 - 0xFF - - - - MS - Minus Input Select Register - 1 - 8 - read-write - 0x00 - 0xFF - - - - - 3 - 2 - AMPOT[%s] - Operational Amplifier n Offset Trimming Registers - 0x20 - read-write - - P - Operational Amplifier n Offset Trimming Pch Register - 0 - 8 - read-write - 0 - 0xD0 - - - TRMP - AMPn input offset trimming Pch side - 0 - 4 - read-write - - - - - N - Operational Amplifier n Offset Trimming Nch Register - 1 - 8 - - - TRMN - AMPn input offset trimming Nch side - 0 - 4 - - - - - - AMPMC - Operational amplifier mode control register - 0x08 - 8 - read-write - 0x00 - 0xFF - - AMPSP - Operation mode selection - 7 - 7 + OVRE1 + PRSR.OVRE1 Status Notification Permission + 1 + 1 read-write 0 - Low-power mode (low-speed). + Prohibits notification of the state of PRSR.OVRE1. #0 1 - High-speed mode. + Permits notification of the state of PRSR.OVRE1. #1 - 3 - 1 - AMPPC%s - Operational amplifier precharge control status + OVRE0 + PRSR.OVRE0 Status Notification Permission 0 0 read-write 0 - Precharging is stopped. + Prohibits notification of the state of PRSR.OVRE0. #0 1 - Precharging is enabled. + Permits notification of the state of PRSR.OVRE0. #1 @@ -49190,81 +34399,39 @@ FMS2,1,0: - AMPTRM - Operational amplifier trigger mode control register - 0x09 - 8 + TRNDISR + Packet Transmission Control Register + 0x420 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xFFFFFFFF - 4 - 2 - AMPTRM%s - Operational amplifier function activation/stop trigger control + TDIS + Packet Transmission Control 0 1 read-write 00 - Software trigger mode. + PTP packets are transmitted through both Ethernet port 0 and Ethernet port 1. #00 01 - An activation and A/D trigger mode. + PTP packets are only transmitted through Ethernet port 0. #01 10 - Setting prohibited. + PTP packets are only transmitted through Ethernet port 1. #10 11 - An activation and A/D trigger mode. - #11 - - - - - - - AMPTRS - Operational Amplifier Activation Trigger Select Register - 0x0A - 8 - read-write - 0x00 - 0xFF - - - AMPTRS - ELC trigger selection Do not change the value of the AMPTRS register after setting the AMPTRM register. - 0 - 1 - read-write - - - 00 - Operational amplifier 0: Operational amplifier An activation trigger 0.Operational amplifier 1: Operational amplifier An activation trigger 1.Operational amplifier 2: Operational amplifier An activation trigger 2.Operational amplifier 3: Operational amplifier An activation trigger 3 - #00 - - - 01 - Operational amplifier 0: Operational amplifier An activation trigger 0.Operational amplifier 1: Operational amplifier An activation trigger 0.Operational amplifier 2: Operational amplifier An activation trigger 1.Operational amplifier 3: Operational amplifier An activation trigger 1 - #01 - - - 10 Setting prohibited - #10 - - - 11 - Operational amplifier 0: Operational amplifier An activation trigger 0.Operational amplifier 1: Operational amplifier An activation trigger 0.Operational amplifier 2: Operational amplifier An activation trigger 0.Operational amplifier 3: Operational amplifier An activation trigger 0 #11 @@ -49272,82 +34439,67 @@ FMS2,1,0: - AMPC - Operational amplifier control register - 0x0B - 8 + TRNMR + Relay Mode Register + 0x430 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xFFFFFFFF - IREFE - Operation control of operational amplifier reference current circuit - 7 - 7 + FWD1 + Channel 1 Relay Enable + 9 + 9 read-write 0 - Operational amplifier reference current circuit is stopped. + Unicast, multicast (other than PTP packets), and broadcast messages from the other node are not relayed from port 1 to port 0. #0 1 - Operation of operational amplifier reference current circuit is enabled. + Unicast, multicast (other than PTP packets), and broadcast messages from the other node are relayed from port 1 to port 0. #1 - 4 - 1 - AMPE%s - Operation control of operational amplifier - 0 - 0 + FWD0 + Channel 0 Relay Enable + 8 + 8 read-write 0 - Operation amplifier is stopped. + Unicast, multicast (other than PTP packets), and broadcast messages from the other node are not relayed from port 0 to port 1. #0 1 - Software trigger mode: Operation of operational amplifier is enabled Operation of the operational amplifier reference current circuit is also enabled regardless of the IREFE bit se An activation trigger mode or An activation and A/D trigger mode: Wait for An activation is enabled. + Unicast, multicast (other than PTP packets), and broadcast messages from the other node are relayed from port 0 to port 1. #1 - - - - AMPMON - Operational amplifier monitor register - 0x0C - 8 - read-only - 0x00 - 0xFF - - 4 - 1 - AMPMON%s - Operational amplifier status + MOD + Cut-Through Mode 0 0 - read-only + read-write 0 - Operational amplifier is stopped. + Store-and-forward #0 1 - Operational amplifier is operating. + Cut-through #1 @@ -49355,363 +34507,386 @@ FMS2,1,0: - AMPCPC - Operational amplifier switch charge pump control register - 0x1A - 8 + TRNCTTDR + Cut-Through Transfer Start Threshold Register + 0x434 + 32 read-write - 0x00 - 0xFF + 0x00000060 + 0xFFFFFFFF - 3 - 1 - PUMP%sEN - charge pump for AMP%s enable/disable + THVAL + FIFO Read Start ThresholdThreshold for starting to read data from the relay FIFO in cut-through mode (specified as the number of bytes)NOTE1: A value cannot be set in the lower-order 2 bits. These bits are fixed to 0.NOTE2: A value of less than 96 bytes cannot be set. 0 - 0 + 10 read-write - - - 0 - charge pump for AMP is disabled. - #0 - - - 1 - charge pump for AMP is enabled. - #1 - - + + + + R_FACI_HP_CMD + Flash Application Command Interface Command-Issuing Area + 0x407E0000 + + 0x00000000 + 4 + registers + + - AMPUOTE - Operational Amplifier User Offset Trimming Enable Register - 0x1F + FACI_CMD16 + FACI Command Issuing Area (halfword access) + 0 + 16 + read-write + 0x0000 + 0xFFFF + + + FACI_CMD8 + FACI Command Issuing Area (halfword access) + FACI_CMD16 + 0 8 read-write 0x00 0xFF - - - 3 - 1 - AMP%sTE - AMP%sOT write enable - 0 - 0 - read-write - - - 0 - Not possible to write the AMPnOTP and AMPnOTN registers - #0 - - - 1 - Possible to write the AMPnOTP and AMPnOTN registers - #1 - - - - - R_PDC - Parallel Data Capture Unit - 0x40094000 + R_FACI_HP + Flash Application Command Interface + 0x407FE000 0x00000000 - 0x01C + 0x100 registers - PCCR0 - PDC Control Register 0 - 0x000 - 32 + FASTAT + Flash Access Status + 0x0010 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x00 + 0xFF - EDS - Endian Select - 14 - 14 - read-write - - - 0 - Little endian - #0 - - - 1 - Big endian - #1 - - - - - PCKDIV - PCKO Frequency Division Ratio Select - 11 - 13 - read-write - - - 000 - PCKO/2 - #000 - - - 001 - PCKO/4 - #001 - - - 010 - PCKO/6 - #010 - - - 011 - PCKO/8 - #011 - - - 100 - PCKO/10 - #100 - - - 101 - PCKO/12 - #101 - - - 110 - PCKO/14 - #110 - - - 111 - PCKO/16 - #111 - - - - - PCKOE - PCKO Output Enable - 10 - 10 + CFAE + Code Flash Access Error + 7 + 7 read-write + zeroToClear + modify 0 - PCKO output is disabled (fixed to the high level) + No code flash access error has occurred. #0 1 - PCKO output is enabled. + Code flash access error has occurred. #1 - HERIE - Horizontal Byte Number Setting Error Interrupt Enable - 9 - 9 + CMDLK + Command Lock + 4 + 4 + read-only + + + DFAE + Data Flash Access Error + 3 + 3 + read-write + zeroToClear + modify + + + ECRCT + 0 + 0 + read-only + + + + + FAEINT + Flash Access Error Interrupt Enable + 0x0014 + 8 + read-write + 0x99 + 0xFF + + + CFAEIE + Code Flash Access Error Interrupt Enable + 7 + 7 read-write 0 - Generation of horizontal byte number setting error interrupt requests is disabled. + Does not generate "intflerr" interrupt request when CFAE = "1". #0 1 - Generation of horizontal byte number setting error interrupt requests is enabled. + Generates "intflerr" interrupt request when CFAE = "1". #1 - VERIE - Vertical Line Number Setting Error Interrupt Enable - 8 - 8 + CMDLKIE + Command Lock Interrupt Enable + 4 + 4 read-write 0 - Generation of vertical line number setting error interrupt requests is disabled. + Does not generate "intflerr" interrupt request when CMDLK = "1". #0 1 - Generation of vertical line number setting error interrupt requests is enabled. + Generates "intflerr" interrupt request when CMDLK = "1". #1 - UDRIE - Underrun Interrupt Enable - 7 - 7 + DFAEIE + Data Flash Access Error Interrupt Enable + 3 + 3 read-write 0 - Generation of underrun interrupt requests is disabled. + Does not generate "intflerr" interrupt request when DFAE = "1". #0 1 - Generation of underrun interrupt requests is enabled. + Generates "intflerr" interrupt request when DFAE = "1". #1 - OVIE - Overrun Interrupt Enable - 6 - 6 + ECRCTIE + Error Correct Interrupt Enable + 0 + 0 read-write 0 - Generation of overrun interrupt requests is disabled. + Does not generate "intflerr" interrupt request when ECRCT = "1". #0 1 - Generation of overrun interrupt requests is enabled. + Generates "intflerr" interrupt request when ECRCT = "1". #1 + + + + FRDYIE + Flash Ready Interrupt Enable + 0x0018 + 8 + read-write + 0x00 + 0xFF + - FEIE - Frame End Interrupt Enable - 5 - 5 + FRDYIE + FRDY Interrupt Enable + 0 + 0 read-write 0 - Generation of frame end interrupt requests is disabled. + Does not generate "intflend" interrupt request when FRDY is changed from "0" to "1". #0 1 - Generation of frame end interrupt requests is enabled. + Generates "intflend" interrupt request when FRDY is changed from "0" to "1". #1 + + + + FSADDR + Flash Start Address + 0x0030 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - DFIE - Receive Data Ready Interrupt Enable - 4 - 4 + FSA + Start Address of Flash Sequencer Command Target Area + These bits can be written when FRDY bit of FSTATR register is "1". Writing to these bits in FRDY = "0" is ignored. + 0 + 31 read-write - 0 - Generation of receive data ready interrupt requests is disabled. - #0 - - - 1 - Generation of receive data ready interrupt requests is enabled. - #1 + others + Specifies start address for each command processing. + true + + + + FEADDR + Flash End Address + 0x0034 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - PRST - PDC Reset - 3 - 3 + FEA + End Address of Flash Sequencer Command Target Area + Specifies end address of target area in "Blank Check" command. + These bits can be written when FRDY bit of FSTATR register is "1". Writing to these bits in FRDY = "0" is ignored. + 0 + 31 + read-write + + + + + FMEPROT + Flash P/E Mode Entry Protection Register + 0x0044 + 16 + read-write + 0x0001 + 0xFFFF + + + KEY + KEY Code + 8 + 15 write-only - 0 - PDC reset is not applied. - #0 + 0xD9 + Writing to the other bits in this register is enabled. + 0xD9 - 1 - PDC is reset. - #1 + others + Writing to the other bits in this register is disabled. + true - HPS - HSYNC Signal Polarity Select - 2 - 2 + CEPROT + Code Flash P/E Mode Entry Protection +Writing to this bit is only possible when the FRDY bit in the FSTATR register is 1. Writing to this bit while the FRDY bit = 0 is +ignored. +Writing to this bit is only possible when 16 bits are written and the value written to the KEY bits is D9h. +Written values are not retained by these bits (always read as 0x00). +Only secure access can write to this register. Both secure access and non-secure read access are allowed. Non-secure write +access is denied, but TrustZone access error is note generated. + + 0 + 0 read-write 0 - HSYNC signal is active high. + FENTRYC bit is not protected #0 1 - HSYNC signal is active low. + FENTRYC bit is protected. #1 + + + + FBPROT0 + Flash Block Protection Register + 0x0078 + 16 + read-write + 0x0000 + 0xFFFF + - VPS - VSYNC Signal Polarity Select - 1 - 1 - read-write + KEY + KEY Code + 8 + 15 + write-only - 0 - VSYNC signal is active high. - #0 + 0x78 + Writing to the other bits in this register is enabled. + 0x78 - 1 - VSYNC signal is active low. - #1 + others + Writing to the other bits in this register is disabled. + true - PCKE - Channel 0 GTCNT Count Clear + BPCN0 + Block Protection for Non-secure Cancel +This bit can be written when the FRDY bit in the FSTATR register is 1. Writing to this bit is ignored when the FRDY bit is 0. +Writing to this bit is only possible when 16 bits are written and the value written to the KEY[7:0] bits is 0x78. +Written values are not retained by these bits (always read as 0x00). + 0 0 read-write 0 - Operations for reception are stopped. + FENTRYC bit is not protected #0 1 - Operations for reception are ongoing. + FENTRYC bit is protected. #1 @@ -49719,29 +34894,52 @@ FMS2,1,0: - PCCR1 - PDC Control Register 1 - 0x004 - 32 + FBPROT1 + Flash Block Protection for Secure Register + 0x007C + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - PCE - PDC Operation Enable + KEY + KEY Code + 8 + 15 + write-only + + + 0xB1 + Writing to the other bits in this register is enabled. + 0xB1 + + + others + Writing to the other bits in this register is disabled. + true + + + + + BPCN1 + Block Protection for Secure Cancel +Writing to this bit is only possible when the FRDY bit in the FSTATR register is 1. Writing to this bit while FRDY bit = 0 is ignored. +Writing to this bit is only possible when 16 bits are written and the value written to the KEY[7:0] bits is 0xB1. +Written values are not retained by these bits (always read as 0x00). + 0 0 read-write 0 - Operations for reception are disabled. + FENTRYC bit is not protected #0 1 - Operations for reception are enabled. + FENTRYC bit is protected. #1 @@ -49749,331 +34947,252 @@ FMS2,1,0: - PCSR - PDC Status Register - 0x008 + FSTATR + Flash Status + 0x0080 32 - read-write - 0x00000002 + read-only + 0x00000000 0xFFFFFFFF - HERF - Horizontal Byte Number Setting Error Flag - 6 - 6 - read-write - zeroToClear - modify + ILGCOMERR + Illegal Command Error + 23 + 23 + read-only 0 - Horizontal byte number setting error has not been generated. + A status clear or forced stop command processing is complete #0 1 - Horizontal byte number setting error has been generated. + An error has occurred. #1 - VERF - Vertical Line Number Setting Error Flag - 5 - 5 - read-write - zeroToClear - modify + FESETERR + FENTRY Setting Error + 22 + 22 + read-only 0 - Vertical line number setting error has not been generated. + A status clear or forced stop command processing is complete #0 1 - Vertical line number setting error has been generated. + An error has occurred. #1 - UDRF - Underrun Flag - 4 - 4 + SECERR + Security Error + 21 + 21 read-write - zeroToClear - modify 0 - Underrun has not been generated. + A status clear or forced stop command processing is complete #0 1 - Underrun has been generated. + An error has occurred. #1 - OVRF - Overrun Flag - 3 - 3 - read-write - zeroToClear - modify + OTERR + Other Error + 20 + 20 + read-only 0 - FIFO overrun has not been generated. + A status clear or forced stop command processing is complete #0 1 - FIFO overrun has been generated. + An error has occurred. #1 - FEF - Frame End Flag - 2 - 2 - read-write - zeroToClear - modify + FRDY + Flash Ready + 15 + 15 + read-only 0 - Frame end has not been generated. + "Program", "DMA Program", "Erase", "Program" or "Erase" command suspension, "Forced Stop", "Blank Check", "Config Program", "Config Clear", "Lock Bit Program", "Lock Bit Read", or "OTP Program" is processing. #0 1 - Frame end has been generated. + None of the above is in progress. #1 - FEMPF - FIFO Empty Flag - 1 - 1 + ILGLERR + Illegal Command Error + 14 + 14 read-only 0 - FIFO is not empty. + Flash sequencer has not detected any illegal command or illegal flash memory access. #0 1 - FIFO is empty. + Flash sequencer has detected an illegal command or illegal flash memory access #1 - FBSY - Frame Busy Flag - 0 - 0 + ERSERR + Erasure Error + 13 + 13 read-only 0 - Operations for reception are stopped. + Erasure processing has been completed successfully #0 1 - Operations for reception are ongoing. + An error has occurred during erasure #1 - - - - PCMONR - PDC Pin Monitor Register - 0x00C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - HSYNC - HSYNC Signal Status Flag - 1 - 1 + PRGERR + Programming Error + 12 + 12 read-only 0 - HSYNC signal is at the low level. + Programming has been completed successfully #0 1 - HSYNC signal is at the high level. + An error has occurred during programming #1 - VSYNC - VSYNC Signal Status Flag - 0 - 0 + SUSRDY + Suspend Ready + 11 + 11 read-only 0 - VSYNC signal is at the low level. + Flash sequencer cannot accept "Program/Erase Suspend" command. #0 1 - VSYNC signal is at the high level. + Flash sequencer can accept "Program/Erase Suspend" command. #1 - - - - PCDR - PDC Receive Data Register - 0x010 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - PCDR - The PDC includes a 32-bit-wide, 22-stage FIFO for the storage of captured data. The PCDR register is a 4-byte space to which the FIFO is mapped, and four bytes of data are read from the PCDR register at a time. - 0 - 31 + DBFULL + Data Buffer Full + 10 + 10 read-only + + + 0 + Data Buffer is not full + #0 + + - - - - VCR - Vertical Capture Register - 0x014 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - VSZ - Vertical Capture Size Number of lines to be captured. - 16 - 27 - read-write - - - VST - Vertical Capture Start Line PositionNumber of the line where capture is to start. - 0 - 11 - read-write - - - - - HCR - Horizontal Capture Register - 0x018 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - HSZ - Horizontal Capture Size Number of bytes to capture horizontally. - 16 - 27 - read-write - - - HST - Horizontal Capture Start Byte Position Horizontal position in bytes where capture is to start. - 0 - 11 - read-write - - - - - - - R_PORT0 - I/O Ports - 0x40040000 - - 0x00000000 - 0x010 - registers - - - - PCNTR1 - Port Control Register 1 - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - PODR - Pmn Output Data - 16 - 31 - read-write + ERSSPD + Erasure-Suspended Status + 9 + 9 + read-only + + + 0 + Flash sequencer is in status other than the below mentioned. + #0 + + + 1 + Flash sequencer is in erasure suspension process or erasure-suspended status. + #1 + + + + + PRGSPD + Programming-Suspended Status + 8 + 8 + read-only 0 - Low output + Flash sequencer is in status other than the below mentioned. #0 1 - High output. + Flash sequencer is in programming suspension process or programming-suspended status. #1 - PDR - Pmn Direction - 0 - 15 - read-write + FLWEERR + Flash Write/Erase Protect Error Flag + 6 + 6 + read-only 0 - Input (functions as an input pin) + An error has not occurred #0 1 - Output (functions as an output pin). + An error has occurred. #1 @@ -50081,32 +35200,71 @@ FMS2,1,0: - PODR - Output data register - PCNTR1 - 0x00 + FENTRYR + Program/Erase Mode Entry + 0x0084 16 read-write 0x0000 0xFFFF - 16 - 1 - PODR%s - Pmn Output Data + KEY + KEY Code + 8 + 15 + write-only + + + 0xAA + Writing to the other bits in this register is enabled. + 0xAA + + + others + Writing to the other bits in this register is disabled. + true + + + + + FENTRYD + Data Flash P/E Mode Entry + These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. + Writing to these bits is enabled only when this register is accessed in 16-bit size and H'AA is written to KEY bits. + 7 + 7 + read-write + + + 0 + Data flash is in "Read Mode" + #0 + + + 1 + Data flash is in "P/E Mode" + #1 + + + + + FENTRYC + Code Flash P/E Mode Entry + These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. + Writing to these bits is enabled only when this register is accessed in 16-bit size and H'AA is written to KEY bits 0 0 read-write 0 - Low output + Code flash is in "Read Mode" #0 1 - High output. + Code flash is in "P/E Mode" #1 @@ -50114,32 +35272,50 @@ FMS2,1,0: - PDR - Data direction register - PCNTR1 - 0x02 + FSUINITR + Flash Sequencer Set-up Initialize + 0x008C 16 read-write 0x0000 0xFFFF - 16 - 1 - PDR%s - Pmn Direction + KEY + KEY Code + 8 + 15 + write-only + + + 0x2D + Writing to the other bits in this register is enabled. + 0x2D + + + others + Writing to the other bits in this register is disabled. + true + + + + + SUINIT + Set-up Initialization + This bit can be written when FRDY bit of FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. + Writing to these bits is enabled only when this register is accessed in 16-bit size and H'2D is written to KEY bits. 0 0 read-write 0 - Input (functions as an input pin) + Set-up registers keep its' value. #0 1 - Output (functions as an output pin). + Set-up registers are initialized. #1 @@ -50147,81 +35323,113 @@ FMS2,1,0: - PCNTR2 - Port Control Register 2 - 0x04 - 32 + FCMDR + Flash Sequencer Command + 0x00A0 + 16 read-only - 0x00000000 - 0xFFFF0000 + 0x0000 + 0xFFFF - EIDR - Pmn Event Input Data - 16 - 31 + CMDR + Command Register + 8 + 15 read-only - 0 - Low input - #0 - - - 1 - High input. - #1 + others + These bits store the latest command accepted by FACI. + true - PIDR - Pmn Input Data + PCMDR + Previous Command Register 0 - 15 + 7 read-only - 0 - Low input - #0 - - - 1 - High input. - #1 + others + These bits store previous command accepted by FACI. + true - EIDR - Event input data register - PCNTR2 - 0x04 + FPESTAT + Program/Erase Error Status + 0x00C0 16 read-only 0x0000 0xFFFF - 16 - 1 - EIDR%s - Pmn Event Input Data + PEERRST + P/E Error Status 0 - 0 + 7 read-only + + + 0x01 + A write attempt made to an area protected by the lock bits + 0x01 + + + 0x02 + A write error caused by other source than the above + 0x02 + + + 0x11 + An erase attempt made to an area protected by the lock bits + 0x11 + + + 0x12 + An erase error caused by other source than the above + 0x12 + + + others + Reserved + true + + + + + + + FBCCNT + Blank Check Control + 0x00D0 + 8 + read-write + 0x00 + 0xFF + + + BCDIR + Blank Check Direction + 0 + 0 + read-write 0 - Low input + Blank check is executed from smaller address to larger address. (Incremental mode) #0 1 - High input. + Blank check is executed from larger address to smaller address. (Decremental mode) #1 @@ -50229,32 +35437,29 @@ FMS2,1,0: - PIDR - Input data register - PCNTR2 - 0x06 - 16 + FBCSTAT + Blank Check Status + 0x00D4 + 8 read-only - 0x0000 - 0x0000 + 0x00 + 0xFF - 16 - 1 - PIDR%s - Pmn Input Data + BCST + Blank Check Status Bit 0 0 read-only 0 - Low input + The target area is erased (blank). #0 1 - High input. + The target area is filled with 0s and/or 1s. #1 @@ -50262,81 +35467,113 @@ FMS2,1,0: - PCNTR3 - Port Control Register 3 - 0x08 + FPSADDR + Programmed Area Start Address + 0x00D8 32 - write-only + read-only 0x00000000 0xFFFFFFFF - PORR - Pmn Output Reset - 16 + PSADR + Programmed Area Start Address + NOTE: Indicates address of the first programmed data which is found in "Blank Check" command execution. + 0 + 18 + read-only + + + + + FAWMON + Flash Access Window Monitor + 0x0DC + 32 + read-only + 0x00000000 + 0x00000000 + + + BTFLG + Flag of Start-Up area select for Boot Swap + 31 31 - write-only + read-only 0 - No affect to output + The start-up area is the alternate area (sector 1) #0 1 - Low output. + The start-up area is the default area (sector 0) #1 - POSR - Pmn Output Set - 0 + FAWE + End Sector Address for Access Window + NOTE: These bits indicate the end sector address for setting the access window that is located in the configuration area. + 16 + 26 + read-only + + + FSPR + Protection Flag of programming the Access Window, Boot Flag and Temporary Boot Swap Control and "Config Clear" command execution + 15 15 - write-only + read-only 0 - No affect to output + Protected state #0 1 - High output. + Non-protected state #1 + + FAWS + Start Sector Address for Access Window + NOTE: These bits indicate the start sector address for setting the access window that is located in the configuration area. + 0 + 10 + read-only + - PORR - Output set register - PCNTR3 - 0x08 + FCPSR + FCU Process Switch + 0x00E0 16 - write-only + read-write 0x0000 0xFFFF - 16 - 1 - PORR%s - Pmn Output Reset + ESUSPMD + Erasure-Suspended Mode 0 0 - write-only + read-write 0 - No affect to output + Suspension-priority mode #0 1 - Low output. + Erasure-priority mode #1 @@ -50344,81 +35581,231 @@ FMS2,1,0: - POSR - Output reset register - PCNTR3 - 0x0A + FPCKAR + Flash Sequencer Processing Clock Frequency Notification + 0x00E4 16 - write-only + read-write 0x0000 0xFFFF - 16 - 1 - POSR%s - Pmn Output Set + KEY + KEY Code + 8 + 15 + write-only + + + 0x1E + Writing to the other bits in this register is enabled. + 0x1E + + + others + Writing to the other bits in this register is disabled. + true + + + + + PCKA + Flash Sequencer Processing Clock Frequency + These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. + Writing to these bits is enabled only when this register is accessed in 16-bit size and H'1E is written to KEY bits. 0 - 0 + 7 + read-write + + + others + Notifies operating frequency of clkf. + true + + + + + + + FSUACR + Flash Start-Up Area Control Register + 0x00E8 + 16 + read-write + 0x0000 + 0xFFFF + + + KEY + KEY Code + 8 + 15 write-only - 0 - No affect to output - #0 + 0x66 + Writing to the other bits in this register is enabled. + 0x66 - 1 - High output. - #1 + others + Writing to the other bits in this register is disabled. + true + + + + + SAS + Start Up Area Select + These bits can be written when FRDY bit in FSTATR register is "1". Writing to this bit in FRDY = "0" is ignored. + Writing to these bits is enabled only when this register is accessed in 16-bit size and H'66 is written to KEY bits. + 0 + 1 + read-write + + + 10 + The start-up area is temporarily switched to the default area (sector 0) regardless of the BTFLG bit. When a reset is generated after setting, the start-up area is selected according to the BTFLG bit. + #10 + + + 11 + The start-up area is temporarily switched to the alternate area (sector 1) regardless of the BTFLG bit. When a reset is generated after setting, the start-up area is selected according to the BTFLG bit. + #11 + + + others + The start-up area is selected according to the start-up area setting of the configuration area (BTFLG bit). + true + + + + R_FACI_LP + Flash Application Command Interface + 0x407EC000 + + 0x00000000 + 0x400 + registers + + + + DFLCTL + Flash P/E Mode Control Register + 0x090 + 8 + read-write + 0x00 + 0xFF + - PCNTR4 - Port Control Register 4 - 0x0C - 32 + FPMCR + Flash P/E Mode Control Register + 0x100 + 8 read-write - 0x00000000 - 0xFFFFFFFF + 0x08 + 0xFF - EORR - Pmn Event Output Reset - 16 - 31 + FMS2 + Flash Operating Mode Select 2. +Refer to the description of the FMS0 bit. + 7 + 7 + read-write + + + VLPE + Low-Voltage P/E Mode Enable + 6 + 6 + read-write + + + 0 + Low-voltage programming is disabled + #0 + + + 1 + Low-voltage programming is enabled + #1 + + + + + FMS1 + The bit to make data flash a programming mode +Refer to the description of the FMS0 bit. + 4 + 4 + read-write + + + RPDIS + Code Flash P/E Disable + 3 + 3 read-write 0 - No affect to output + The programming of the code flash is enabled #0 1 - Low output + The programming of the code flash is disabled #1 - EOSR - Pmn Event Output Set + FMS0 + Flash Operating Mode Select 0 +FMS2,1,0: + 000: Read mode + 011: Discharge mode 1 + 111: Discharge mode 2 + 101: Code Flash P/E mode + 010: Data flash P/E mode + Others: Setting prohibited. + 1 + 1 + read-write + + + + + FASR + Flash Area Select Register + 0x104 + 8 + read-write + 0x00 + 0xFF + + + EXS + Extra area select 0 - 15 + 0 read-write 0 - No affect to output + User area or data area #0 1 - High output. + Extra area #1 @@ -50426,1200 +35813,622 @@ FMS2,1,0: - EORR - Event output set register - PCNTR4 - 0x0C + FSARL + Flash Processing Start Address Register L + 0x108 16 read-write 0x0000 0xFFFF - 16 - 1 - EORR%s - Pmn Event Output Reset + FSAR15_0 + Start address 0 - 0 + 15 read-write - - - 0 - No affect to output - #0 - - - 1 - Low output - #1 - - - EOSR - Event output reset register - PCNTR4 - 0x0E + FSARH + Flash Processing Start Address Register H + 0x110 16 read-write 0x0000 0xFFFF - 16 - 1 - EOSR%s - Pmn Event Output Set + FSAR31_25 + Start address + 9 + 15 + read-write + + + FSAR20_16 + Start address 0 - 0 + 4 read-write - - - 0 - No affect to output - #0 - - - 1 - High output. - #1 - - - - - - R_PORT1 - 0x40040020 - - - R_PORT2 - 0x40040040 - - - R_PORT3 - 0x40040060 - - - R_PORT4 - 0x40040080 - - - R_PORT5 - 0x400400A0 - - - R_PORT6 - 0x400400C0 - - - R_PORT7 - 0x400400E0 - - - R_PORT8 - 0x40040100 - - - R_PORT9 - 0x40040120 - - - R_PORT10 - 0x40040140 - - - R_PORT11 - 0x40040160 - - - R_PFS - I/O Ports-PFS - 0x40040800 - - 0x00000000 - 0x040 - registers - - - - 12 - 0x40 - PORT[%s] - Port %s - - 16 - 4 - PIN[%s] - Pin Function Selects - 0 - - PmnPFS_BY - Pin Function Control Register - 0x003 - 8 - read-write - 0x00 - 0xFD - - - NCODR - N-Channel Open Drain Control - 6 - 6 - read-write - - - 0 - CMOS output - #0 - - - 1 - NMOS open-drain output - #1 - - - - - PIM - Port Input Mode Control - 5 - 5 - read-write - - - 0 - CMOS input - #0 - - - 1 - TTL input - #1 - - - - - PCR - Pull-up Control - 4 - 4 - read-write - - - 0 - Disables an input pull-up. - #0 - - - 1 - Enables an input pull-up. - #1 - - - - - PDR - Port Direction - 2 - 2 - read-write - - - 0 - Input (Functions as an input pin.) - #0 - - - 1 - Output (Functions as an output pin.) - #1 - - - - - PIDR - Port Input Data - 1 - 1 - read-only - - - 0 - Low input - #0 - - - 1 - High input - #1 - - - - - PODR - Port Output Data - 0 - 0 - read-write - - - 0 - Low output - #0 - - - 1 - High output - #1 - - - - - - - PmnPFS_HA - Pin Function Control Register - 0x002 - 16 - read-write - 0x0000 - 0xFFFD - - - ASEL - Analog Input enable - 15 - 15 - read-write - - - 0 - Used other than as analog pin - #0 - - - 1 - Used as analog pin - #1 - - - - - ISEL - IRQ input enable - 14 - 14 - read-write - - - 0 - Not used as IRQn input pin - #0 - - - 1 - Used as IRQn input pin - #1 - - - - - EOFR - Event on Falling/Rising - 12 - 13 - read-write - - - 00 - Do not care - #00 - - - 01 - Detect rising edge - #01 - - - 10 - Detect falling edge - #10 - - - 11 - Detect rising and falling edge - #11 - - - - - DSCR - Drive Strength Control Register - 10 - 11 - read-write - - - 00 - Normal drive output - #00 - - - 01 - Middle drive output - #01 - - - 10 - Middle drive with IIC - #10 - - - 11 - High-drive output - #11 - - - - - - - PmnPFS - Pin Function Control Register - 0x000 - 32 - read-write - 0x00000000 - 0xFFFFFFFD - - - PSEL - Port Function SelectThese bits select the peripheral function. For individual pin functions, see the MPC table - 24 - 28 - read-write - - - PMR - Port Mode Control - 16 - 16 - read-write - - - 0 - Uses the pin as a general I/O pin. - #0 - - - 1 - Uses the pin as an I/O port for peripheral functions. - #1 - - - - - - - - - - - R_PMISC - I/O Ports-MISC - 0x40040D00 - - 0x00000003 - 0x01 - registers - - - PFENET - Ethernet Control Register - 0x00 + FCR + Flash Control Register + 0x114 8 read-write 0x00 0xFF - Reserved - These bits are read as 00. The write value should be 00. - 6 + OPST + Processing Start + 7 7 read-write - - - PHYMODE1 - Ethernet Mode Setting ch1 - 5 - 5 - read-write 0 - RMII mode (ETHERC channel 1) + Processing stops. #0 1 - MII mode (ETHERC channel 1) + Processing starts. #1 - PHYMODE0 - Ethernet Mode Setting ch0 + STOP + Forced Processing Stop + 6 + 6 + read-write + + + DRC + Data Read Completion 4 4 read-write 0 - RMII mode (ETHERC channel 0) + Data is not read or next data is requested. #0 1 - MII mode (ETHERC channel 0) + Data reading is completed. #1 - Reserved - These bits are read as 0000. The write value should be 0000. + CMD + Software Command Setting 0 3 read-write + + + 0001 + Program + #0001 + + + 0011 + Blank check + #0011 + + + 0100 + Block erase + #0100 + + + 0101 + Consecutive read + #0101 + + + 0111 + Chip erase + #0111 + + + others + Setting prohibited + true + + - PWPR - Write-Protect Register - 3 - 8 + FEARL + Flash Processing End Address Register L + 0x118 + 16 read-write + 0x0000 + 0xFFFF - PFSWE - PmnPFS Register Write - 6 - 6 + FEAR15_0 + End address + 0 + 15 + read-write + + + + + FEARH + Flash Processing End Address Register H + 0x120 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FEAR31_25 + End address + 9 + 15 read-write - - - 0 - Writing to the PmnPFS register is disabled - #0 - - - 1 - Writing to the PmnPFS register is enabled. - #1 - - - B0WI - PFSWE Bit Write Disable - 7 - 7 - - - 0 - Writing to the PFSWE bit is enabled - #0 - - - 1 - Writing to the PFSWE bit is disabled. - true - - + FEAR20_16 + End address + 0 + 4 + read-write - - - - R_QSPI - Quad Serial Peripheral Interface - 0x64000000 - - 0x00000000 - 0x01C - registers - - - 0x00000020 - 0x00C - registers - - - 0x00000030 - 0x008 - registers - - - 0x00000804 - 0x04 - registers - - - SFMSMD - Transfer Mode Control Register - 0x000 + FRESETR + Flash Reset Register + 0x124 32 read-write 0x00000000 0xFFFFFFFF - SFMCCE - Read instruction code selection. - 15 - 15 + FRESET + Software Reset of the registers + 0 + 0 read-write 0 - Default instruction code set for each instruction + No effect #0 1 - Instruction code written in the SFMSIC register + The registers relates to the flash programming are reset. #1 + + + + FSTATR00 + Flash Status Register00 + 0x128 + 32 + read-only + 0x00000000 + 0xFFFFFFEF + - SFMOSW - Setup time adjustment for serial transmission - 11 - 11 - read-write + EILGLERR + Extra Area Illegal Command Error Flag + 5 + 5 + read-only 0 - Does not extend the low-level width of SCK at transmission time + No illegal command or illegal access to the extra area is detected. #0 1 - Extends the low-level width of SCK by 1*PCLKA at transmission time + An illegal command or illegal access to the extra area is detected. #1 - SFMOHW - Hold time adjustment for serial transmission - 10 - 10 - read-write + ILGLERR + Illegal Command Error Flag + 4 + 4 + read-only 0 - Does not extend the high-level width of SCK at transmission time + No illegal software command or illegal access is detected. #0 1 - Extends the high-level width of SCK by 1*PCLKA at transmission time + An illegal command or illegal access is detected. #1 - SFMOEX - Extension of the I/O buffer output enable signal for the serial interface - 9 - 9 - read-write + BCERR0 + Blank Check Error Flag0 + 3 + 3 + read-only 0 - Does not extend the output enable signal + Blank checking terminates normally. #0 1 - Extends the output enable signal by 1*QSPCLK + An error occurs during blank checking. #1 - SFMMD3 - SPI mode selection. An initial value is determined by input to CFGMD3. - 8 - 8 - read-write + PRGERR01 + Program Error Flag 01 + 2 + 2 + read-only 0 - SPI mode 0 + Programming by the FEXCR register terminates normally. #0 1 - SPI mode 3 + An error occurs during programming. #1 - SFMPAE - Selection of the function for stopping prefetch at locations other than on byte boundaries - 7 - 7 - read-write + PRGERR0 + Program Error Flag0 + 1 + 1 + read-only 0 - Disables prefetch stopping at locations other than on byte boundaries + Programming terminates normally. #0 1 - Enables prefetch stopping at locations other than on byte boundaries + An error occurs during programming. #1 - SFMPFE - Selection of the prefetch function - 6 - 6 - read-write + ERERR0 + Erase Error Flag0 + 0 + 0 + read-only 0 - Disables prefetch + Erasure terminates normally. #0 1 - Enables prefetch + An error occurs during erasure. #1 - - SFMSE - Selection of the prefetch function - 4 - 5 - read-write - - - 00 - Does not extend QSSL - #00 - - - 01 - Extends QSSL by 33*QSPCLK - #01 - - - 10 - Extends QSSL by 129*QSPCLK - #10 - - - 11 - Extends QSSL infinitely - #11 - - - - - SFMRM - Serial interface read mode selection - 0 - 2 - read-write - - - 000 - Standard Read - #000 - - - 001 - Fast Read - #001 - - - 010 - Fast Read Dual Output - #010 - - - 011 - Fast Read Dual I/O - #011 - - - 100 - Fast Read Quad Output - #100 - - - 101 - Fast Read Quad I/O - #101 - - - 110 - Setting prohibited - #110 - - - 111 - Setting prohibited - #111 - - - - SFMSSC - Chip Selection Control Register - 0x004 + FSTATR1 + Flash Status Register1 + 0x12C 32 - read-write - 0x00000037 - 0xFFFFFFFF + read-only + 0x00000000 + 0xFFFFFFFB - SFMSLD - QSSL signal output timing selection - 5 - 5 - read-write + EXRDY + End status signal of a Extra programming sequencer + 7 + 7 + read-only 0 - Outputs QSSL 0.5*SCK before the first rising edge of QSPCLK + Other than below #0 1 - Outputs QSSL 1.5*SCK before the first rising edge of QSPCLK + The software command of the FEXCR register is terminated. #1 - SFMSHD - QSSL signal release timing selection - 4 - 4 - read-write + FRDY + End status signal of a sequencer + 6 + 6 + read-only 0 - Releases QSSL 0.5*SCK after the last rising edge of QSPCLK + Other than below #0 1 - Releases QSSL 1.5*SCK after the last rising edge of QSPCLK + The software command of the FCR register is terminated. #1 - SFMSW - Selection of a minimum high-level width of the QSSL signal - 0 - 3 - read-write + DRRDY + Data read request + 1 + 1 + read-only - 0000 - 1 x QSPCLK - #0000 - - - 0001 - 2 x QSPCLK - #0001 - - - 0010 - 3 x QSPCLK - #0010 - - - 0011 - 4 x QSPCLK - #0011 - - - 0100 - 5 x QSPCLK - #0100 - - - 0101 - 6 x QSPCLK - #0101 - - - 0110 - 7 x QSPCLK - #0110 - - - 0111 - 8 x QSPCLK - #0111 - - - 1000 - 9 x QSPCLK - #1000 - - - 1001 - 10 x QSPCLK - #1001 - - - 1010 - 11 x QSPCLK - #1010 - - - 1011 - 12 x QSPCLK - #1011 - - - 1100 - 13 x QSPCLK - #1100 - - - 1101 - 14 x QSPCLK - #1101 - - - 1110 - 15 x QSPCLK - #1110 + 0 + Other than below + #0 - 1111 - 16 x QSPCLK - #1111 + 1 + The read processing of the consecutive read command at each address is terminated and read data is stored to the FRBH and FRBL registers. + #1 - SFMSKC - Clock Control Register - 0x008 + FWBL0 + Flash Write Buffer Register L0 + 0x130 32 read-write - 0x00000008 + 0x00000000 0xFFFFFFFF - SFMDTY - Selection of a duty ratio correction function for the SCK signal - 5 - 5 + WDATA + Program data of the program command + 0 + 15 read-write - - - 0 - Serial interface reference cycle selection (* Pay attention to the irregularity.) - #0 - - - 1 - Delays the rising of the SCK signal by 0.5*PCLKA.(* Valid with PCLKA multiplied by an odd number) - #1 - - + + + + FWBH0 + Flash Write Buffer Register H0 + 0x138 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - SFMDV - Serial interface reference cycle selection (* Pay attention to the irregularity.)NOTE: When PCLKA multiplied by an odd number is selected, the high-level width of the SCK signal is longer than the low-level width by 1 x PCLKA before duty ratio correction. + WDATA + Program data of the program command 0 - 4 - read-write - - - 10000 - 18 x PCLKA - #10000 - - - 10001 - 20 x PCLKA - #10001 - - - 10010 - 22 x PCLKA - #10010 - - - 10011 - 24 x PCLKA - #10011 - - - 10100 - 26 x PCLKA - #10100 - - - 10101 - 28 x PCLKA - #10101 - - - 10110 - 30 x PCLKA - #10110 - - - 10111 - 32 x PCLKA - #10111 - - - 11000 - 34 x PCLKA - #11000 - - - 11001 - 36 x PCLKA - #11001 - - - 11010 - 38 x PCLKA - #11010 - - - 11011 - 40 x PCLKA - #11011 - - - 11100 - 42 x PCLKA - #11100 - - - 11101 - 44 x PCLKA - #11101 - - - 11110 - 46 x PCLKA - #11110 - - - 11111 - 48 x PCLKA - #11111 - - - others - ( SFMDV + 2 ) x PCLKA - true - - + 15 - SFMSST - Status Register - 0x00C + FSTATR01 + Flash Status Register01 + 0x13C 32 read-only - 0x00000080 + 0x00000000 0xFFFFFFFF - PFOFF - Prefetch function operation state - 7 - 7 - read-only + BCERR1 + Blank Check Error Flag1 + 3 + 3 0 - The prefetch function is operating. + Blank checking terminates normally. #0 1 - The prefetch function is not enabled or is not operating. + An error occurs during blank checking. #1 - PFFUL - Prefetch buffer state - 6 - 6 - read-only + PRGERR1 + Program Error Flag1 + 1 + 1 0 - The prefetch buffer has a free space. + Programming terminates normally. #0 1 - The prefetch buffer is full. + An error occurs during programming. #1 - PFCNT - Number of bytes of prefetched dataRange: 00000 - 10010 (No combination other than the above is available.) + ERERR1 + Erase Error Flag1 0 - 4 - read-only + 0 - 00000 - Nodata has been prefetched. - #00000 + 0 + Erasure terminates normally. + #0 - others - Data of (PFCNT) bytes hs been prefetched. - true + 1 + An error occurs during erasure. + #1 - SFMCOM - Communication Port Register - 0x010 + FWBL1 + Flash Write Buffer Register L1 + 0x140 32 read-write 0x00000000 - 0xFFFFFF00 + 0xFFFFFFFF - SFMD - Port for direct communication with the SPI bus.Input/output to and from this port is converted to a SPIbus cycle. This port is accessible in the direct communication mode (DCOM=1) only.Access to this port is ignored in the ROM access mode. + WDATA47_32 + Program data of the program command 0 - 7 + 15 read-write - SFMCMD - Communication Mode Control Register - 0x014 + FWBH1 + Flash Write Buffer Register H1 + 0x144 32 read-write 0x00000000 0xFFFFFFFF - DCOM - Selection of a mode of communication with the SPI bus + WDATA63_48 + Program data of the program command 0 - 0 - read-write - - - 0 - ROM access mode - #0 - - - 1 - Direct communication mode - #1 - - + 15 - SFMCST - Communication Status Register - 0x018 + FRBL1 + Flash Read Buffer Register L1 + 0x148 32 - read-write + read-only 0x00000000 0xFFFFFFFF - EROMR - Status of ROM access detection in the direct communication modeNOTE: Writing of 0 only is possible. Writing of 1 is ignored. - 7 - 7 + RDATA47_32 + Read data of the consecutive read command + 0 + 15 read-only - - - 0 - ROM access is not detected in direct communication mode - #0 - - - 1 - ROM access is detected in direct communication mode - #1 - - + + + + FRBH1 + Flash Read Buffer Register H1 + 0x14C + 32 + read-only + 0x00000000 + 0xFFFFFFFF + - COMBSY - SPI bus cycle completion state in direct communication + RDATA63_48 + Read data of the consecutive read command + 0 + 15 + read-only + + + + + FPR + Protection Unlock Register + 0x180 + 32 + write-only + 0x00000000 + 0xFFFFFF00 + + + FPR + Protection Unlock Register + 0 + 7 + write-only + + + + + FPSR + Protection Unlock Status Register + 0x184 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + PERR + Protect Error Flag 0 0 read-only 0 - There is no serial transfer being processed. + No error #0 1 - There is a serial transfer being processed. + An error occurs. #1 @@ -51627,2916 +36436,6945 @@ FMS2,1,0: - SFMSIC - Instruction Code Register - 0x020 + FRBL0 + Flash Read Buffer Register L0 + 0x188 32 - read-write + read-only 0x00000000 0xFFFFFFFF - SFMCIC - Serial ROM instruction code to substitute + RDATA + Read data of the consecutive read command + 0 + 15 + + + + + FRBH0 + Flash Read Buffer Register H0 + 0x190 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + RDATA + Read data of the consecutive read command + 0 + 15 + + + + + FSCMR + Flash Start-Up Setting Monitor Register + 0x1C0 + 32 + read-only + 0x00000000 + 0xFFFFBEFF + + + FSPR + Access Window Protection Flag + 14 + 14 + read-only + + + SASMF + Start-up Area Setting Monitor Flag + 8 + 8 + read-only + + + + + FAWSMR + Flash Access Window Start Address Monitor Register + 0x1C8 + 32 + read-only + 0x00000000 + 0xFFFFF000 + + + FAWS + Flash Access Window Start Address + 0 + 11 + read-only + + + + + FAWEMR + Flash Access Window End Address Monitor Register + 0x1D0 + 32 + read-only + 0x00000000 + 0xFFFFF000 + + + FAWE + Flash Access Window End Address 0 + 11 + read-only + + + + + FISR + Flash Initial Setting Register + 0x1D8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SAS + Temporary boot swap mode + 6 7 - read-write + + + 10 + The start-up area is switched to the default area temporarily. + #10 + + + 11 + The start-up area is switched to the alternate area temporarily. + #11 + + + others + The start-up area is selected according to the start-up area settings of the extra area. + true + + + + + PCKA + Peripheral Clock Notification + 0 + 5 - SFMSAC - Address Mode Control Register - 0x024 + FEXCR + Flash Extra Area Control Register + 0x1DC 32 read-write - 0x00000002 + 0x00000000 0xFFFFFFFF - SFM4BC - Selection of a default instruction code, when Serial Interface address width is selected 4 bytes. - 4 - 4 + OPST + Software Command Setting + 7 + 7 read-write 0 - Does not use 4 Byte address read Instruction code + Processing stops. #0 1 - Use 4 Byte address read Instruction code + Processing starts. #1 - SFMAS - Selection the number of address bits of the serial interface + CMD + Processing Start) 0 - 1 + 2 read-write - 00 - 1byte - #00 + 001 + Start-up area selection and security setting + #001 - 01 - 2bytes - #01 + 010 + Access window information program + #010 - 10 - 3bytes - #10 + 011 + OCDID1 program + #011 - 11 - 4 bytes - #11 + 100 + OCDID2 program + #100 + + + 101 + OCDID3 program + #101 + + + 110 + OCDID4 program + #110 + + + 111 + Extra area clear + #111 + + + others + Setting prohibited + true - SFMSDC - Dummy Cycle Control Register - 0x028 - 32 + FEAML + Flash Error Address Monitor Register L + 0x1E0 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + FEAM + Flash Error Address Monitor Register + 0 + 15 + + + + + FEAMH + Flash Error Address Monitor Register H + 0x1E8 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + FEAM + Flash Error Address Monitor Register + 0 + 15 + + + + + FSTATR2 + Flash Status Register2 + 0x1F0 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + EILGLERR + Extra Area Illegal Command Error Flag + 5 + 5 + read-only + + + ILGLERR + Illegal Command Error Flag + 4 + 4 + read-only + + + BCERR + Blank Check Error Flag + 3 + 3 + read-only + + + PRGERR01 + Program Error Flag 01 + 2 + 2 + read-write + + + PRGERR1 + Program Error Flag + 1 + 1 + read-only + + + ERERR + Erase Error Flag + 0 + 0 + read-only + + + + + FENTRYR_MF4 + Flash P/E Mode Entry Register for MF4 + 0x3FB0 + 16 + read-write + 0x0000 + 0xFFFF + + + FENTRYR + Flash P/E Mode Entry Register + 0x3FB2 + 16 + read-write + 0x0000 + 0xFFFF + + + FLWAITR + Flash Wait Cycle Register + 0x3FC0 + 8 + read-write + 0x00 + 0xFF + + + PFBER + Prefetch Buffer Enable Register + 0x3FC8 + 8 + read-write + 0x00 + 0xFF + + + + + R_FCACHE + Flash Memory Cache + 0x4001C000 + + 0x00000100 + 0x02 + registers + + + 0x00000104 + 0x02 + registers + + + 0x0000011C + 0x01 + registers + + + + FCACHEE + Flash Cache Enable Register + 0x100 + 16 read-write - 0x0000FF00 - 0xFFFFFFFF + 0x0000 + 0xFFFF - SFMXD - Mode data for serial ROM. (Control XIP mode) - 8 - 15 + FCACHEEN + FCACHE Enable + 0 + 0 read-write 0 - XIP mode is prohibited + Disable FCACHE #0 1 - XIP mode is permitted + Enable FCACHE #1 + + + + FCACHEIV + Flash Cache Invalidate Register + 0x104 + 16 + read-write + 0x0000 + 0xFFFF + - SFMXEN - XIP mode permission - 7 - 7 + FCACHEIV + Flash Cache Invalidate Register + 0 + 0 read-write 0 - XIP mode is prohibited - #0 - - - 1 - XIP mode is permitted - #1 - - - - - SFMXST - XIP mode status - 6 - 6 - read-only - - - 0 - Normal (non-XIP) mode is operating + Do not invalidate reads, setting ignored on writes #0 1 - XIP mode is operating + Invalidate on reads and writes. #1 + + + + FLWT + Flash Wait Cycle Register + 0x11C + 8 + read-write + - SFMDN - Selection of the number of dummy cycles of Fast Read instructions + FLWT + Flash Wait Cycle 0 - 3 + 2 read-write - 0000 - Default dummy cycles of each instruction. - #0000 + 000 + 0 waits (ICLK <= 80 MHz) + #000 - others - ( SFMDN + 2 ) x SCK - true + 001 + 1 wait (80 MHz < ICLK <= 160 MHz) + #001 + + + 010 + 2 waits (160 MHz < ICLK <= 240 MHz). + #010 - SFMSPC - SPI Protocol Control Register - 0x030 - 32 + FSAR + Flash Security Attribution Register + 0x140 + 16 read-write - 0x00000010 - 0xFFFFFFFF + 0xffff + 0xffff - SFMSDE - Selection of the minimum time of input output switch, when Dual SPI protocol or Quad SPI protocol is selected. - 4 - 4 + FLWTSA + FLWT Security Attribution + 0 + 0 read-write 0 - Does not allocate minimum switch time + Secure #0 1 - Allocate the minimum switch time equivalent to 1*QSPXLK + Non-Secure #1 - SFMSPI - Selection of SPI protocolNOTE: Serial ROM's SPI protocol is required to be set by software separately. - 0 - 1 - read-write - - - 00 - Extended SPI protocol - #00 - - - 01 - Dual SPI protocol - #01 - - - 10 - Quad SPI protocol - #10 - - - 11 - Setting prohibited. - #11 - - - - - - - SFMPMD - Port Control Register - 0x034 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SFMWPL - Specify level of WP pin - 2 - 2 + FCKMHZSA + FCKMHZ Security Attribution + 8 + 8 read-write 0 - Low level + Secure #0 1 - High level + Non-Secure #1 - - SFMCNT1 - External QSPI Address Register 1 - 0x804 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - QSPI_EXT - BANK Switching AddressWhen accessing from 0x6000_0000 to 0x63FF_FFFF, Addres bus is Set QSPI_EXT[5:0] to high-order 6bits of SHADDR[31:0]NOTE: Setting 6'h3F is prihibited. - 26 - 31 - read-write - - - - R_RTC - Realtime Clock - 0x40044000 + R_GLCDC + Graphics LCD Controller + 0x400E0000 0x00000000 - 0x01 - registers - - - 0x00000002 - 0x01 - registers - - - 0x00000004 - 0x01 - registers - - - 0x00000006 - 0x01 - registers - - - 0x00000008 - 0x01 - registers - - - 0x0000000A - 0x01 - registers - - - 0x0000000C - 0x01 - registers - - - 0x0000000E - 0x003 - registers - - - 0x00000012 - 0x01 - registers - - - 0x00000014 - 0x01 - registers - - - 0x00000016 - 0x01 - registers - - - 0x00000018 - 0x01 - registers - - - 0x0000001A - 0x01 - registers - - - 0x0000001C - 0x003 - registers - - - 0x00000022 - 0x01 - registers - - - 0x00000024 - 0x01 - registers - - - 0x00000028 - 0x01 - registers - - - 0x0000002A - 0x005 - registers - - - 0x00000040 - 0x01 - registers - - - 0x00000042 - 0x01 - registers - - - 0x00000044 - 0x01 - registers - - - 0x00000052 - 0x01 - registers - - - 0x00000054 - 0x01 + 0x101C registers - 0x00000056 - 0x01 + 0x00001100 + 0x014 registers - 0x0000005A - 0x01 + 0x00001118 + 0x02C registers - 0x0000005C - 0x01 + 0x0000114C + 0x00C registers - 0x00000062 - 0x01 + 0x00001200 + 0x014 registers - 0x00000064 - 0x01 + 0x00001218 + 0x02C registers - 0x00000066 - 0x01 + 0x0000124C + 0x00C registers - 0x0000006A - 0x01 + 0x00001300 + 0x03C registers - 0x0000006C - 0x01 + 0x00001340 + 0x03C registers - 0x00000072 - 0x01 + 0x00001380 + 0x03C registers - 0x00000074 - 0x01 + 0x000013C0 + 0x018 registers - 0x00000076 - 0x01 + 0x000013E4 + 0x04 registers - 0x0000007A - 0x01 + 0x00001404 + 0x028 registers - 0x0000007C - 0x01 + 0x00001440 + 0x014 registers + + BG + Background Registers + 0x1000 + + EN + Background Plane Setting Operation Control Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SWRST + Entire module SW reset control + 16 + 16 + read-write + + + 1 + Releases the entire module from the SW reset state. + #1 + + + 0 + Places the entire module in the SW reset state. + #0 + + + + + VEN + Control of LCDC internal register value reflection to internal operations + 8 + 8 + read-write + oneToSet + modify + + + 1 + Enables + #1 + + + 0 + Disables(Cleared to 0 by an internal source) + #0 + + + + + EN + Background plane generation module operation enable + 0 + 0 + read-write + + + 1 + Enables operation. + #1 + + + 0 + Disables operation. + #0 + + + + + + + PERI + Background Plane Setting Free-Running Period Register + 0x04 + 32 + read-write + 0x00170017 + 0xFFFFFFFF + + + FV + Background plane vertical synchronization signal period on the basis of line. + 16 + 26 + read-write + + + 0x013 + 0x3FF + + + + + FV + FV lines.The valid range is 0x013 to 0x3FF. + true + + + + + FH + Background plane horizontal synchronization signal period on the basis of pixel clock (PXCLK). + 0 + 10 + read-write + + + 0x017 + 0x3FF + + + + + FH + FH lines. The valid range is 0x017 to 0x3FF. + true + + + + + + + SYNC + Background Plane Setting Synchronization Position Register + 0x08 + 32 + read-write + 0x00010001 + 0xFFFFFFFF + + + VP + Background plane vertical synchronization signal assertion position on the basis of line. + 16 + 19 + read-write + + + 0x0 + Setting prohibited + 0x0 + + + others + (VP)th line + true + + + + + HP + Background plane horizontal synchronization signal assertion position on the basis of pixel clock (PXCLK). + 0 + 3 + read-write + + + 0x0 + Setting prohibited + 0x0 + + + others + (HP)th line (pixels) + true + + + + + + + VSIZE + Background Plane Setting Full Image Vertical Size Register + 0x0C + 32 + read-write + 0x00070010 + 0xFFFFFFFF + + + VP + Background plane vertical valid pixel start position on the basis of line + 16 + 26 + read-write + + + 0x0003 + 0x3EF + + + + + VP + VP lines. The valid range is 0x003 to 0x3EF. + true + + + + + VW + Background plane vertical valid pixel width on the basis of line + 0 + 10 + read-write + + + 0x0010 + 0x03FC + + + + + VW + VW lines. The valid range is 0x010 to 0x3F0. + true + + + + + + + HSIZE + Background Plane Setting Full Image Horizontal Size Register + 0x10 + 32 + read-write + 0x00060010 + 0xFFFFFFFF + + + HP + Background plane horizontal valid pixel start position on the basis of pixel clock (PXCLK). + 16 + 26 + read-write + + + 0x006 + 0x3EE + + + + + HP + HP cycle(pixel). The valid range is 0x006 to 0x3EE. + true + + + + + HW + + Background plane horizontall valid pixel width on the basis of pixel clock (PXCLK) + Note: When serial RGB is selected as the output format for the output control block, add two to the horizontal enable signal width and set the resulting value to this field. + + 0 + 10 + read-write + + + 0x010 + 0x3F8 + + + + + HW + HW cycles. The valid range is 0x010 to 0x3F8. + true + + + + + + + BGC + Background Plane Setting Background Color Register + 0x14 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + R + + R value for background plane valid pixel area. + Unsigned; 8-bit integer. + + 16 + 23 + read-write + + + G + + G value for background plane valid pixel area + Unsigned; 8-bit integer + + 8 + 15 + read-write + + + B + + B value for background plane valid pixel area + Unsigned; 8-bit integer + + 0 + 7 + read-write + + + + + MON + Background Plane Setting Status Monitor Register + 0x18 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SWRST + Entire module SW reset state monitor. + 16 + 16 + read-only + + + 1 + The entire module is released from the SW reset state. + #1 + + + 0 + The entire module is in the SW reset state. + #0 + + + + + VEN + + Entire module internal operation reflection control signal monitor. + The signal state for controlling reflection of the register values to the internal operations upon assertion of the vertical synchronization signal. + + 8 + 8 + read-only + + + 1 + The signal for controlling reflection of the register values to the internal operations upon assertion of the vertical synchronization signal is asserted. + #1 + + + 0 + The signal for controlling reflection of the register values to the internal operations upon assertion of the vertical synchronization signal is negated. + #0 + + + + + EN + Background plane generation module operation state monitor. + 0 + 0 + read-only + + + 1 + Operation is in progress. + #1 + + + 0 + Operation is stopped. + #0 + + + + + + + + 2 + 0x100 + GR[%s] + Layer Registers + 0x1100 + + VEN + Graphics Register Update Control Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PVEN + + Control of graphics n module register value reflection to internal operations. + Reflection of the register values to the internal operation at the assertion of the vertical synchronization signal (VS). + + 0 + 0 + read-write + zeroToClear + modify + + + 1 + Enables reflection of the register values to the internal operation at the assertion of the vertical synchronization signal (VS). + #1 + + + 0 + Disables reflection of the register values to the internal operation at the assertion of the vertical synchronization signal (VS). + #0 + + + + + + + FLMRD + Graphics Frame Buffer Read Control Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + RENB + Graphics data (frame buffer data) read enable. + 0 + 0 + read-write + + + 1 + Enables reading. + #1 + + + 0 + Disables reading. + #0 + + + + + + + FLM1 + Graphics Frame Buffer Control Register 1 + 0x08 + 32 + read-only + 0x00000003 + 0xFFFFFFFF + + + BSTMD + + Burst transfer control for graphics data (frame buffer data) + access + + 0 + 1 + read-only + + + 11 + 16-beat increment burst transfer (64-byte boundary) + #11 + + + others + Setting prohibited. + true + + + + + + + FLM2 + Graphics Frame Buffer Control Register 2 + 0x0C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BASE + + Base address for accessing graphics data (frame buffer data) + Set the head address in the frame buffer where graphics data is to be stored. GRn_FLM2.BASE[5:0] should be fixed to 0 during 64-byte burst transfer. + + 0 + 31 + read-write + + + + + FLM3 + Graphics Frame Buffer Control Register 3 + 0x10 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + LNOFF + + Macro line offset address for accessing graphics data + (frame buffer data) + Signed; 16-bit integer + + 16 + 31 + read-write + + + + + FLM5 + Graphics Frame Buffer Control Register 5 + 0x18 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + LNNUM + Number of lines per frame for accessing graphics data (frame buffer data). + 16 + 26 + read-write + + + 0x00F + 0x3FF + + + + + LNNUM + LNNUM lines. The valid range is 0x00F to 0x3FF. + true + + + + + DATANUM + Number of data transfer times per line for accessing graphics data (frame buffer data), where one transfer is defined as 16-beat burst access (64-byte boundary) + 0 + 15 + read-write + + + DATAUM + DATAUM+1 times. + true + + + + + + + FLM6 + Graphics Frame Buffer Control Register 6 + 0x1C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FORMAT + Data format for accessing graphics data (frame buffer data). + 28 + 30 + read-write + + + 111 + CLUT11bit/pix) + #111 + + + 110 + CLUT4 (4 bits/pix) + #110 + + + 101 + CLUT8 (8 bits/pix) + #101 + + + 100 + ARGB8888 (32 bits/pix) + #100 + + + 011 + ARGB4444 (16 bits/pix) + #011 + + + 010 + ARGB1555 (16 bits/pix, 1 bit of A is LUT data) + #010 + + + 001 + RGB888 (32 bits/pix, 8 bits on the MSB side are invalid) + #001 + + + 000 + RGB565 (16 bits/pix) + #000 + + + others + Setting prohibited. + true + + + + + + + AB1 + Graphics Alpha Blending Control Register 1 + 0x20 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ARCON + Rectangular area alpha blending control. + 12 + 12 + read-write + + + 1 + On + #1 + + + 0 + Off + #0 + + + + + ARCDISPON + Image area border display control for rectangular area alpha blending. + 8 + 8 + read-write + + + 1 + Display on + #1 + + + 0 + Display off + #0 + + + + + GRCDISPON + Graphics image area border display control. + 4 + 4 + read-write + + + 1 + Display on + #1 + + + 0 + Display off + #0 + + + + + DISPSEL + Graphics display plane control. + 0 + 1 + read-write + + + 11 + Blended display of lower-layer graphics (input image from the previous stage) and current graphics (graphics data read from the AHB bus) + #11 + + + 10 + Current graphics display + #10 + + + 01 + Lower-layer graphics display + #01 + + + 00 + Background color display (value set by the GRn_BASE register). + #00 + + + + + + + AB2 + Graphics Alpha Blending Control Register 2 + 0x24 + 32 + read-write + 0x00060010 + 0xFFFFFFFF + + + GRCVS + Vertical start position of graphics image area. + 16 + 26 + read-write + + + 0x002 + 0x3EE + + + + + GRCVS + GRCVS lines. The valid range is 0x002 to 0x3EE. + true + + + + + GRCVW + Vertical width of graphics image area. + 0 + 10 + read-write + + + 0x010 + 0x3FC + + + + + GRCVW + GRCVW lines. The valid range is 0x010 to 0x3F0. + true + + + + + + + AB3 + Graphics Alpha Blending Control Register 3 + 0x28 + 32 + read-write + 0x00050010 + 0xFFFFFFFF + + + GRCHS + Horizontal start position of graphics image area. + 16 + 26 + read-write + + + 0x005 + 0x3ED + + + + + GRCHS + GRCHS lines. The valid range is 0x005 to 0x3ED. + true + + + + + GRCHW + Horizontal width of graphics image area. + 0 + 10 + read-write + + + 0x010 + 0x3F0 + + + + + GRCHW + GRCHW pixels. The valid range is 0x010 to 0x3F0. + true + + + + + + + AB4 + Graphics Alpha Blending Control Register 4 + 0x2C + 32 + read-write + 0x00060010 + 0xFFFFFFFF + + + ARCVS + Vertical start position of rectangular area alpha blending image area + 16 + 26 + read-write + + + 0x002 + 0x3EE + + + + + ARCVS + ARCVS linels. The valid range is 0x002 to 0x3EE. + true + + + + + ARCVW + Vertical width of rectangular area alpha blending image area. + 0 + 10 + read-write + + + 0x001 + 0x3FC + + + + + ARCVW + ARCVW linels. The valid range is 0x001 to 0x3F0. + true + + + + + + + AB5 + Graphics Alpha Blending Control Register 5 + 0x30 + 32 + read-write + 0x00050010 + 0xFFFFFFFF + + + ARCHS + Horizontal start position of rectangular area alpha blending image area. + 16 + 26 + read-write + + + 0x005 + 0x3ED + + + + + ARCHS + ARCHS pixel. The valid range is 0x005 to 0x3ED. + true + + + + + ARCHW + Horizontal width of rectangular area alpha blending image area. + 0 + 10 + read-write + + + 0x001 + 0x3F8 + + + + + ARCHW + ARCHW pixels. The valid range is 0x001 to 0x3F0. + true + + + + + + + AB6 + Graphics Alpha Blending Control Register 6 + 0x34 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ARCCOEF + + Alpha coefficient for alpha blending in rectangular area (-255 to 255). + [8]: Sign (0: addition, 1: subtraction) + [7:0]: Variation (absolute value) + + 16 + 24 + read-write + + + ARCRATE + Frame rate for alpha blending in rectangular area. + 0 + 7 + read-write + + + ARCRATE + ARCRATE+1 frames + true + + + + + + + AB7 + Graphics Alpha Blending Control Register 7 + 0x38 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ARCDEF + Initial alpha value for alpha blending in rectangular area. + 16 + 23 + read-write + + + CKON + RGB-index chroma-key processing control. + 0 + 0 + read-write + + + 1 + Enables chroma-key processing + #1 + + + 0 + Disables chroma-key processing + #0 + + + + + + + AB8 + Graphics Alpha Blending Control Register 8 + 0x3C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CKKG + + G signal for RGB-index chroma-key processing + Unsigned; 8 bits. + + 16 + 23 + read-write + + + CKKB + + B signal for RGB-index chroma-key processing + Unsigned; 8 bits. + + 8 + 15 + read-write + + + CKKR + + R signal for RGB-index chroma-key processing + Unsigned; 8 bits. + + 0 + 7 + read-write + + + + + AB9 + Graphics Alpha Blending Control Register 9 + 0x40 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CKA + A value after RGB-index chroma-key processing replacement. + 24 + 31 + read-write + + + CKG + + G value after RGB-index chroma-key processing replacement + Unsigned; 8 bits. + + 16 + 23 + read-write + + + CKB + + B value after RGB-index chroma-key processing replacement + Unsigned; 8 bits. + + 8 + 15 + read-write + + + CKR + + R value after RGB-index chroma-key processing replacement + Unsigned; 8 bits. + + 0 + 7 + read-write + + + + + BASE + Graphics Background Color Control Register + 0x4C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + G + + Background color G value + Unsigned; 8 bits + + 16 + 23 + read-write + + + B + + Background color B value + Unsigned; 8 bits + + 8 + 15 + read-write + + + R + + Background color R value + Unsigned; 8 bits + + 0 + 7 + read-write + + + + + CLUTINT + Graphics CLUT Table Interrupt Control Register + 0x50 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SEL + CLUT table control + 16 + 16 + read-write + + + 1 + Uses CLUT1 plane for internal operations. + #1 + + + 0 + Uses CLUT0 plane for internal operations. + #0 + + + others + Setting prohibited + true + + + + + LINE + Number of detection lines + 0 + 10 + read-write + + + 0x000 + 0x400 + + + + + LINE + LINE+1 lines. The valid range is 0x000 to 0x400. + true + + + + + + + MON + Graphics Status Monitor Register + 0x54 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + UNDFLST + Status monitor for underflow + 16 + 16 + read-only + + + 1 + An underflow occurs in internal operations. + #1 + + + 0 + No underflow occurs in internal operations. + #0 + + + + + ARCST + Status monitor for alpha blending in rectangular area + 0 + 0 + read-only + + + 1 + Fade-in/fade-out is in progress. + #1 + + + 0 + Fade-in/fade-out is not in progress. + #0 + + + + + + 3 - 0x2 - RTCCR[%s] - Time Capture Control Register - 0x40 + 0x40 + GAM[%s] + Gamma Settings + 0x1300 + + LATCH + Gamma Register Update Control Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + VEN + + Control of gamma correction x module register value reflection to internal operations. + The register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). + + 0 + 0 + read-write + zeroToClear + modify + + + 1 + Enables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). + #1 + + + 0 + Disables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). + #0 + + + + + + + GAM_SW + Gamma Correction Block Function Switch Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + GAMON + Gamma correction on/off control + 0 + 0 + read-write + + + 1 + Turns on gamma correction. + #1 + + + 0 + Turns off gamma correction. + #0 + + + + + + + 8 + 0x04 + LUT[%s] + Gamma Correction Block Table Setting Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + 2 + 16 + HIGH,LOW + _%s + + Gain value of area 0. + Unsigned 11-bit fixed point. + + 0 + 10 + read-write + + + GAIN00 + GAIN00/1024 + true + + + + + + + 5 + 0x04 + AREA[%s] + Gamma Correction Block Area Setting Register + 0x28 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + 3 + 10 + HIGH,MID,LOW + _%s + + Start threshold of area 1 + Unsigned 10-bit integer + + 0 + 9 + read-write + + + + + + OUT + Output Control Registers + 0x13C0 + + VLATCH + Output Control Block Register Update Control Register + 0x0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + VEN + + Control of output control module register value reflection to internal operations. + The register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). + + 0 + 0 + read-write + zeroToClear + modify + + + 1 + Enables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). + #1 + + + 0 + Disables the register values to be reflected to the internal operations at the assertion of the vertical synchronization signal (VS). + #0 + + + + + + + SET + Output Control Block Output Interface Register + 0x4 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + ENDIANON + Bit endian change control + 28 + 28 + read-write + + + 1 + Ascending order (big endian) + #1 + + + 0 + Descending order (little endian) + #0 + + + + + SWAPON + Pixel order control + 24 + 24 + read-write + + + 1 + In the order of BGR + #1 + + + 0 + In the order of RGB + #0 + + + + + FORMAT + Output format select + 12 + 13 + read-write + + + 11 + Serial RGB; select RGB888 as dither output format. + #11 + + + 10 + RGB565; select RGB565 as dither output format. + #10 + + + 01 + RGB666; select RGB666 as dither output format. + #01 + + + 00 + RGB888; select RGB888 as dither output format. + #00 + + + + + FRQSEL + Clock frequency division control + 8 + 9 + read-write + + + 11 + Setting prohibited + #11 + + + 10 + Quarter frequency (serial RGB) + #10 + + + 01 + Setting prohibited + #01 + + + 00 + No frequency division, parallel RGB + #00 + + + + + DIRSEL + Invalid data position control in serial RGB format + 4 + 4 + read-write + + + 1 + Invalid data is output prior to valid (RGB) data. + #1 + + + 0 + Invalid data is output following valid (RGB) data. + #0 + + + + + PHASE + Data delay in serial RGB format (based on OUTCLK) + 0 + 1 + read-write + + + 11 + 3 cycles + #11 + + + 10 + 2 cycles + #10 + + + 01 + 1 cycle + #01 + + + 00 + 0 cycle + #00 + + + + + + + BRIGHT1 + Output Control Block Brightness Correction Register 1 + 0x8 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BRTG + + Brightness (DC) adjustment of G signal + Unsigned; 10 bits; +512 with offset; integer + + 0 + 9 + read-write + + + + + BRIGHT2 + Output Control Block Brightness Correction Register 2 + 0xC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BRTB + + Brightness (DC) adjustment of B signal + Unsigned; 10 bits; +512 with offset; integer + + 16 + 25 + read-write + + + BRTR + + Brightness (DC) adjustment of R signal + Unsigned; 10 bits; +512 with offset; integer + + 0 + 9 + read-write + + + + + CONTRAST + Output Control Block Contrast Correction Register + 0x10 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CONTG + + Contrast (GAIN) adjustment of G signal + Unsigned; 8 bits fixed point. + + 16 + 23 + read-write + + + CONTG + CONTG/128 + true + + + + + CONTB + + Contrast (GAIN) adjustment of B signal + Unsigned; 8 bits fixed point + + 8 + 15 + read-write + + + CONTB + CONTB/128 + true + + + + + CONTR + + Contrast (GAIN) adjustment of R signal + Unsigned; 8 bits fixed point + + 0 + 7 + read-write + + + CONTR + CONTR/128 + true + + + + + - RTCCR - Time Capture Control Register - 0 - 8 + PDTHA + Output Control Block Panel Dither Correction Register + 0x14 + 32 read-write - 0x00 - 0x00 + 0x00000000 + 0xFFFFFFFF - TCNF - Time Capture Noise Filter Control - 4 - 5 + SEL + Operation mode + 20 + 21 read-write + + 11 + Setting prohibited + #11 + + + 10 + 2x2 pattern dither + #10 + + + 01 + Round-off + #01 + 00 - The noise filter is off. + Truncate #00 + + + + FORM + Output format select + 16 + 17 + read-write + + + 11 + Setting prohibited + #11 + + + 10 + RGB565; select RGB565 as output interface format. + #10 + 01 - Setting prohibited + RGB666; select RGB666 as output interface format. #01 - 10 - The noise filter is on (count source). - #10 + 00 + RGB888; select RGB888 or serial RGB as output interface format. + #00 + + + + + PA + + Pattern value (A) of 2 x 2 pattern dither + Unsigned 2-bit integer + + 12 + 13 + read-write + + + PB + + Pattern value (B) of 2 x 2 pattern dither + Unsigned 2-bit integer + + 8 + 9 + read-write + + + PC + + Pattern value (C) of 2 x 2 pattern dither + Unsigned 2-bit integer + + 4 + 5 + read-write + + + PD + + Pattern value (D) of 2 x 2 pattern dither + Unsigned 2-bit integer + + 0 + 1 + read-write + + + + + CLKPHASE + Output Control Block Output Phase Control Register + 0x24 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + FRONTGAM + Correction control + 12 + 12 + read-write + + + 1 + Gamma correction is followed by brightness/contrast correction. + #1 + + + 0 + Brightness/contrast correction is followed by gamma correction. + #0 + + + + + LCDEDGE + LCD_DATA Output Phase Control + 8 + 8 + read-write + + + 0 + In synchronization with the rising edge of LCD_CLK. + #0 + + + 1 + In synchronization with the falling edge of LCD_CLK + #1 + + + + + TCON0EDGE + LCD_TCON0 Output Phase Control + 6 + 6 + read-write + + + 1 + In synchronization with the falling edge of LCD_CLK. + #1 + + + 0 + In synchronization with the rising edge of LCD_CLK. + #0 + + + + + TCON1EDGE + LCD_TCON1 Output Phase Control + 5 + 5 + read-write + + + 1 + In synchronization with the falling edge of LCD_CLK. + #1 + + + 0 + In synchronization with the rising edge of LCD_CLK. + #0 + + + + + TCON2EDGE + LCD_TCON2 Output Phase Control + 4 + 4 + read-write + + + 1 + In synchronization with the falling edge of LCD_CLK. + #1 + + + 0 + In synchronization with the rising edge of LCD_CLK. + #0 + + + + + TCON3EDGE + LCD_TCON3 Output Phase Control + 3 + 3 + read-write + + + 1 + In synchronization with the falling edge of LCD_CLK. + #1 + + + 0 + In synchronization with the rising edge of LCD_CLK. + #0 + + + + + + + + TCON + Timing Control Registers + 0x1400 + + TIM + TCON Reference Timing Setting Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + HALF + + Vertical synchronization signal generation change timing + Sets the delay from the assertion of the internal horizontal synchronization signal in terms of pixels. + + 16 + 26 + read-write + + + 0x000 + 0x3FF + + + + + HALF + HALF pixels. The valid range is 0x000 to 0x3FF. + true + + + + + OFFSET + + Horizontal synchronization signal generation reference timing + Sets the offset from the assertion of the internal horizontal synchronization signal in terms of pixels. + + 0 + 10 + read-write + + + 0x000 + 0x3FF + + + + + OFFSET + OFFSET+1 pixels. The valid range is 0x000 to 0x3FF. + true + + + + + + + 2 + 0x8 + A,B + STV%s1 + TCON Vertical Timing Setting Register %s1 + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + VS + STVx1 first change timing + 16 + 26 + read-write + + + 0x000 + 0x7FF + + + + + VS + VS pixels. The valid range is 0x000 to 0x3FF. + true + + + + + VW + + STVx1 second change timing + Sets the signal assertion width. + + 0 + 10 + read-write + + + 0x000 + 0x7FF + + + + + VW + VW pixels. The valid range is 0x000 to 0x3FF. + true + + + + + + + 2 + 0x8 + A,B + STV%s2 + TCON Vertical Timing Setting Register %s2 + 0x0C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + INV + STVx signal polarity inversion control + 4 + 4 + read-write + + + 1 + Inverted + #1 + + + 0 + Not inverted + #0 + + + + + SEL + Output signal select control for VSOUT (controlled by TCON_STVA2 register)/VEOUT (controlled by the TCON_STVB2 register) pin + 0 + 2 + read-write + + + 111 + DE + #111 + + + 110 + Setting prohibited + #110 + + + 101 + Setting prohibited + #101 + + + 100 + Setting prohibited + #100 + + + 011 + STHB + #011 + + + 010 + STHA + #010 + + + 001 + STVB + #001 + + + 000 + STVA + #000 + + + + + + + 2 + 0x8 + A,B + STH%s1 + TCON Horizontal Timing Setting Register STH%s1 + 0x18 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + HS + STHx1 first change timing + 16 + 26 + read-write + + + 0x000 + 0x3FF + + + + + HS + HS lines. The valid range is 0x000 to 0x3FF. + true + + + + + HW + + STHx1 second change timing. + Sets the signal assertion width. + + 0 + 10 + read-write + + + 0x000 + 0x3FF + + + + + HW + HW pixels. The valid range is 0x000 to 0x3FF. + true + + + + + + + 2 + 0x8 + A,B + STH%s2 + TCON Horizontal Timing Setting Register STH%s2 + 0x1C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + HSSEL + STHx signal generation reference timing control. + 8 + 8 + read-write + + + 1 + Reference timing is the offset set with the TCON_TIM.OFFSET[10:0] (horizontal synchronization generation reference timing) field + #1 - 11 - The noise filter is on (count source by divided by 32). - #11 + 0 + Reference timing is the input horizontal synchronization signal (HSIN) + #0 - TCST - Time Capture Status - 2 - 2 - read-only + INV + STVx signal polarity inversion control. + 4 + 4 + read-write - - 0 - No event is detected. - #0 - 1 - An event is detected. + Inverted #1 + + 0 + Not inverted + #0 + - TCCT - Time Capture Control + SEL + Output signal select control for LCD_TCON2 (controlled by TCON_STHA2 register)/LCD_TCON3 (controlled by the TCON_STHB2 register) pin. 0 - 1 + 2 read-write - 00 - No event is detected. - #00 + 111 + DE + #111 - 01 - Rising edge is detected. - #01 + 110 + Setting prohibited + #110 - 10 - Falling edge is detected. - #10 + 101 + Setting prohibited + #101 - 11 - Both edges are detected. - #11 + 100 + Setting prohibited + #100 + + + 011 + STHB + #011 + + + 010 + STHA + #010 + + + 001 + STVB + #001 + + + 000 + STVA + #000 - - - 3 - 0x10 - CP[%s] - Capture registers - 0x50 - RSEC - Second Capture Register - 0x02 - 8 - read-only - 0x00 - 0x00 + DE + TCON Data Enable Polarity Setting Register + 0x28 + 32 + read-write + 0x00000000 + 0xFFFFFFFF - SEC10 - 10-Second Capture Capture value for the tens place of seconds - 4 - 6 - read-only - - - SEC1 - 1-Second Capture Capture value for the ones place of seconds + INV + DE signal polarity inversion control. 0 - 3 - read-only + 0 + read-write + + + 1 + Inverted + #1 + + + 0 + Not inverted + #0 + + + + + SYSCNT + GLCDC System Control Registers + 0x1440 - BCNT0 - BCNT0 Capture Register - RSEC - 0x02 - 8 - read-only - 0x00 - 0x00 + DTCTEN + System control block State Detection Control Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF - BCNT0CP - BCNT0CP is a read-only register that captures the BCNT0 value when a time capture event is detected. - 0 - 7 - read-only + L2UNDFDTC + Graphics 2 underflow detection control + 2 + 2 + read-write + + + 1 + Enables detection. + #1 + + + 0 + Disables detection. + #0 + + - - - - RMIN - Minute Capture Register - 0x04 - 8 - read-only - 0x00 - 0x00 - - MIN10 - 10-Minute Capture Capture value for the tens place of minutes - 4 - 6 - read-only + L1UNDFDTC + Graphics 1 underflow detection control + 1 + 1 + read-write + + + 1 + Enables detection. + #1 + + + 0 + Disables detection. + #0 + + - MIN1 - 1-Minute Capture Capture value for the ones place of minutes + VPOSDTC + Specified line detection control 0 - 3 - read-only + 0 + read-write + + + 1 + Enables detection. + #1 + + + 0 + Disables detection. + #0 + + - BCNT1 - BCNT1 Capture Register - RMIN + INTEN + System control block Interrupt Request Enable Control Register 0x04 - 8 - read-only - 0x00 - 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF - BCNT1CP - BCNT1CP is a read-only register that captures the BCNT1 value when a time capture event is detected. + L2UNDFINTEN + Interrupt request signal GLCDC_L2UNDF enable control. + 2 + 2 + read-write + + + 1 + Enables GLCDC_L2UNDF output + #1 + + + 0 + Disables GLCDC_L2UNDF output + #0 + + + + + L1UNDFINTEN + Interrupt request signal GLCDC_L1UNDF enable control. + 1 + 1 + read-write + + + 1 + Enables GLCDC_L1UNDF output + #1 + + + 0 + Disables GLCDC_L1UNDF output + #0 + + + + + VPOSINTEN + Interrupt request signal GLCDC_VPOS enable control. 0 - 7 - read-only + 0 + read-write + + + 1 + Enables GLCDC_VPOS output + #1 + + + 0 + Disables GLCDC_VPOS output + #0 + + - RHR - Hour Capture Register - 0x06 - 8 - read-only - 0x00 - 0x00 + STCLR + System control block Status Clear Register + 0x08 + 32 + read-write + 0x00000000 + 0xFFFFFFFF - PM - A.m./p.m. select for time counter setting. - 6 - 6 - read-only + L2UNDFCLR + Graphics 2 underflow detection flag clear field + 2 + 2 + read-write + + 1 + Clears the graphics 2 underflow detection flag. + #1 + 0 - a.m. + No operation #0 + + + + L1UNDFCLR + Graphics 1 underflow detection flag clear field + 1 + 1 + read-write + 1 - p.m. + Clears the graphics 1 underflow detection flag. #1 + + 0 + No operation + #0 + - HR10 - 10-Minute Capture Capture value for the tens place of minutes - 4 - 5 - read-only - - - HR1 - 1-Minute Capture Capture value for the ones place of minutes + VPOSCLR + Graphics 2 specified line detection flag clear field 0 - 3 - read-only + 0 + read-write + + + 1 + Clears the specified line detection flag. + #1 + + + 0 + No operation + #0 + + - BCNT2 - BCNT2 Capture Register - RHR - 0x06 - 8 + STMON + System control block Status Monitor Register + 0x0c + 32 read-only - 0x00 - 0x00 + 0x00000000 + 0xFFFFFFFF - BCNT2CP - BCNT2CP is a read-only register that captures the BCNT2 value when a time capture event is detected. - 0 - 7 + L2UNDF + Graphics 2 underflow detection flag + 2 + 2 read-only + + + 1 + An underflow has been detected in graphics 2. + #1 + + + 0 + No underflow has been detected in graphics 2. + #0 + + - - - - RDAY - Date Capture Register - 0x0A - 8 - read-only - 0x00 - 0x00 - - DATE10 - 10-Day Capture Capture value for the tens place of minutes - 4 - 5 + L1UNDF + Graphics 1 underflow detection flag + 1 + 1 read-only + + + 1 + An underflow has been detected in graphics 1. + #1 + + + 0 + No underflow has been detected in graphics 1. + #0 + + - DATE1 - 1-Day Capture Capture value for the ones place of minutes + VPOS + Graphics 2 specified line detection flag 0 - 3 + 0 read-only + + + 1 + A specified line notification has been detected in graphics 2. + #1 + + + 0 + No specified line notification has been detected in graphics 2. + #0 + + - BCNT3 - BCNT3 Capture Register - RDAY - 0x0A - 8 - read-only - 0x00 - 0x00 + PANEL_CLK + System control block Version and Panel Clock Control Register + 0x10 + 32 + read-write + 0x01000000 + 0xFFFFFFFF - BCNT3CP - BCNT3CP is a read-only register that captures the BCNT3 value when a time capture event is detected. - 0 - 7 + VER + + Version information + Version information of the GLCDC + + 16 + 31 read-only - - - - RMON - Month Capture Register - 0x0C - 8 - read-only - 0x00 - 0x00 - - MON10 - 10-Month Capture Capture value for the tens place of months - 4 - 4 - read-only + PIXSEL + + Pixel clock select control. + Must be set to the same value as OUT_SET.FRQSEL[1]. + + 12 + 12 + read-write + + + 0 + No frequency division, parallel RGB + #0 + + + 1 + Quarter frequency,serial RGB + #1 + + + + + CLKSEL + Panel clock supply source select + 8 + 8 + read-write + + + 0 + External clock select + #0 + + + 1 + PLL output select + #1 + + + + + CLKEN + + Panel clock output enable control + Note: Before changing the PIXSEL,CLKSEL or DCDR bit, this bit must be set to 0. + + 6 + 6 + read-write + + + 0 + Disable panel clock output + #0 + + + 1 + Enable panel clock output + #1 + + - MON1 - 1-Month Capture Capture value for the ones place of months + DCDR + + Clock division ratio setting control + Refer toTable 2.7.1 for details about setting value. + Note: Settings that are not listed in table 2.7.1 are prohibited. + 0 - 3 - read-only + 5 + read-write - R64CNT - 64-Hz Counter - 0x00 - 8 - read-only - 0x00 - 0x80 + 256 + 0x4 + GR1_CLUT0[%s] + Color Palette 0 Plane for Graphics 1 Plane + 0x0000 + 32 + read-write + 0x00000000 + 0x00000000 + + + A + Alpha Blending Value of Color Palette n Plane for Graphics m Plane + 24 + 31 + read-write + + + R + R Value of Color Palette n Plane for Graphics m Plane + 16 + 23 + read-write + + + G + G Value of Color Palette n Plane for Graphics m Plane + 8 + 15 + read-write + + + B + B Value of Color Palette n Plane for Graphics m Plane + 0 + 7 + read-write + + + + + GR1_CLUT1[%s] + Color Palette 1 Plane for Graphics 1 Plane + 0x0400 + + + + GR2_CLUT0[%s] + Color Palette 0 Plane for Graphics 2 Plane + 0x0800 + + + + GR2_CLUT1[%s] + Color Palette 1 Plane for Graphics 2 Plane + 0x0C00 + + + + + + R_GPT0 + General PWM Timer + 0x40078000 + + 0x00000000 + 0x0A4 + registers + + + + GTWP + General PWM Timer Write-Protection Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PRKEY + GTWP Key Code + 8 + 15 + write-only + + + 0xA5 + Written to these bits, the WP bits write is permitted. + 0xA5 + + + others + The WP bits write is not permitted. + true + + + + + WP + Register Write Disable + 0 + 0 + read-write + + + 0 + Write to the register is enabled + #0 + + + 1 + Write to the register is disabled + #1 + + + + + STRWP + GTSTR.CSTRT Bit Write Disable + 1 + 1 + read-write + + + 0 + Write to the bit is enabled + #0 + + + 1 + Write to the bit is disabled + #1 + + + + + STPWP + GTSTP.CSTOP Bit Write Disable + 2 + 2 + read-write + + + 0 + Write to the bit is enabled + #0 + + + 1 + Write to the bit is disabled + #1 + + + + + CLRWP + GTCLR.CCLR Bit Write Disable + 3 + 3 + read-write + + + 0 + Write to the bit is enabled + #0 + + + 1 + Write to the bit is disabled + #1 + + + + + CMNWP + Common Register Write Disabled + 4 + 4 + read-write + + + 0 + Write to the register is enabled + #0 + + + 1 + Write to the register is disabled + #1 + + + + + + + GTSTR + General PWM Timer Software Start Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + 14 + 1 + CSTRT%s + Channel GTCNT Count StartRead data shows each channel's counter status (GTCR.CST bit). 0 means counter stop. 1 means counter running. + 0 + 0 + read-write + + + 0 + No effect (write) / counter stop (read) + #0 + + + 1 + GTCNT counter starts (write) / Counter running (read) + #1 + + + + + + + GTSTP + General PWM Timer Software Stop Register + 0x08 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + 14 + 1 + CSTOP%s + Channel GTCNT Count StopRead data shows each channel's counter status (GTCR.CST bit). 0 means counter runnning. 1 means counter stop. + 0 + 0 + read-write + + + 0 + No effect (write) / counter running (read) + #0 + + + 1 + GPT GTCNT counter stops (write) / Counter stop (read) + #1 + + + + + + + GTCLR + General PWM Timer Software Clear Register + 0x0C + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + 14 + 1 + CCLR%s + Channel GTCNT Count Clear + 0 + 0 + write-only + + + 0 + No effect + #0 + + + 1 + GPT GTCNT counter clears + #1 + + + + + + + GTSSR + General PWM Timer Start Source Select Register + 0x10 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CSTRT + Software Source Counter Start Enable + 31 + 31 + read-write + + + 0 + Counter start is disable by the GTSTR register + #0 + + + 1 + Counter start is enable by the GTSTR register + #1 + + + + + 8 + 1 + A,B,C,D,E,F,G,H + SSELC%s + ELC_GPT Event Source Counter Start Enable + 16 + 16 + read-write + + + 0 + Counter start is disable at the ELC_GPT input + #0 + + + 1 + Counter start is enable at the ELC_GPT input + #1 + + + + + SSCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Start Enable + 15 + 15 + read-write + + + 0 + Counter start is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter start is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + SSCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Start Enable + 14 + 14 + read-write + + + 0 + Counter start is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter start is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + SSCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Start Enable + 13 + 13 + read-write + + + 0 + Counter start is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter start is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + SSCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Start Enable + 12 + 12 + read-write + + + 0 + Counter start is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter start is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + SSCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Start Enable + 11 + 11 + read-write + + + 0 + Counter start is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter start is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + SSCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Start Enable + 10 + 10 + read-write + + + 0 + Counter start is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter start is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + SSCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Start Enable + 9 + 9 + read-write + + + 0 + Counter start is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter start is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + SSCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Start Enable + 8 + 8 + read-write + + + 0 + Counter start is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter start is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + 4 + 2 + A,B,C,D + SSGTRG%sF + GTETRG Pin Falling Input Source Counter Start Enable + 1 + 1 + read-write + + + 0 + Counter start is disable at the falling edge of GTETRG input + #0 + + + 1 + Counter start is enable at the falling edge of GTETRG input + #1 + + + + + 4 + 2 + A,B,C,D + SSGTRG%sR + GTETRG Pin Rising Input Source Counter Start Enable + 0 + 0 + read-write + + + 0 + Counter start is disable at the rising edge of GTETRG input + #0 + + + 1 + Counter start is enable at the rising edge of GTETRG input + #1 + + + + + + + GTPSR + General PWM Timer Stop Source Select Register + 0x14 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CSTOP + Software Source Counter Stop Enable + 31 + 31 + read-write + + + 0 + Counter stop is disable by the GTSTP register + #0 + + + 1 + Counter stop is enable by the GTSTP register + #1 + + + + + 8 + 1 + A,B,C,D,E,F,G,H + PSELC%s + ELC_GPTA Event Source Counter Stop Enable + 16 + 16 + read-write + + + 0 + Counter stop is disable at the ELC_GPTA input + #0 + + + 1 + Counter stop is enable at the ELC_GPTA input + #1 + + + + + PSCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Stop Enable + 15 + 15 + read-write + + + 0 + Counter stop is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter stop is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + PSCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Stop Enable + 14 + 14 + read-write + + + 0 + Counter stop is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter stop is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + PSCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Stop Enable + 13 + 13 + read-write + + + 0 + Counter stop is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter stop is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + PSCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Stop Enable + 12 + 12 + read-write + + + 0 + Counter stop is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter stop is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + PSCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Stop Enable + 11 + 11 + read-write + + + 0 + Counter stop is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter stop is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + PSCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Stop Enable + 10 + 10 + read-write + + + 0 + Counter stop is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter stop is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + PSCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Stop Enable + 9 + 9 + read-write + + + 0 + Counter stop is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter stop is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + PSCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Stop Enable + 8 + 8 + read-write + + + 0 + Counter stop is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter stop is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + 4 + 2 + A,B,C,D + PSGTRG%sF + GTETRG Pin Falling Input Source Counter Stop Enable + 1 + 1 + read-write + + + 0 + Counter stop is disable at the falling edge of GTETRG input + #0 + + + 1 + Counter stop is enable at the falling edge of GTETRG input + #1 + + + + + 4 + 2 + A,B,C,D + PSGTRG%sR + GTETRG Pin Rising Input Source Counter Stop Enable + 0 + 0 + read-write + + + 0 + Counter stop is disable at the rising edge of GTETRG input + #0 + + + 1 + Counter stop is enable at the rising edge of GTETRG input + #1 + + + + + + + GTCSR + General PWM Timer Clear Source Select Register + 0x18 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CCLR + Software Source Counter Clear Enable + 31 + 31 + read-write + + + 0 + Counter clear is disable by the GTCLR register + #0 + + + 1 + Counter clear is enable by the GTCLR register + #1 + + + + + 8 + 1 + A,B,C,D,E,F,G,H + CSELC%s + ELC_GPTA Event Source Counter Clear Enable + 16 + 16 + read-write + + + 0 + Counter clear is disable at the ELC_GPTA input + #0 + + + 1 + Counter clear is enable at the ELC_GPTA input + #1 + + + + + CSCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Clear Enable + 15 + 15 + read-write + + + 0 + Counter clear is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter clear is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + CSCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Clear Enable + 14 + 14 + read-write + + + 0 + Counter clear is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter clear is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + CSCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Clear Enable + 13 + 13 + read-write + + + 0 + Counter clear is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter clear is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + CSCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Clear Enable + 12 + 12 + read-write + + + 0 + Counter clear is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter clear is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + CSCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Clear Enable + 11 + 11 + read-write + + + 0 + Counter clear is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter clear is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + CSCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Clear Enable + 10 + 10 + read-write + + + 0 + Counter clear is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter clear is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + CSCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Clear Enable + 9 + 9 + read-write + + + 0 + Counter clear is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter clear is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + CSCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Clear Enable + 8 + 8 + read-write + + + 0 + Counter clear is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter clear is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + 4 + 2 + A,B,C,D + CSGTRG%sF + GTETRG Pin Falling Input Source Counter Clear Enable + 1 + 1 + read-write + + + 0 + Counter clear is disable at the falling edge of GTETRG input + #0 + + + 1 + Counter clear is enable at the falling edge of GTETRG input + #1 + + + + + 4 + 2 + A,B,C,D + CSGTRG%sR + GTETRG Pin Rising Input Source Counter Clear Enable + 0 + 0 + read-write + + + 0 + Counter clear is disable at the rising edge of GTETRG input + #0 + + + 1 + Counter clear is enable at the rising edge of GTETRG input + #1 + + + + + + + GTUPSR + General PWM Timer Up Count Source Select Register + 0x1C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + 8 + 1 + A,B,C,D,E,F,G,H + USELC%s + ELC_GPT Event Source Counter Count Up Enable + 16 + 16 + read-write + + + 0 + Counter count up is disable at the ELC_GPT input + #0 + + + 1 + Counter count up is enable at the ELC_GPT input + #1 + + + + + USCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Count Up Enable + 15 + 15 + read-write + + + 0 + Counter count up is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter count up is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + USCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Count Up Enable + 14 + 14 + read-write + + + 0 + Counter count up is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter count up is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + USCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Count Up Enable + 13 + 13 + read-write + + + 0 + Counter count up is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter count up is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + USCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Count Up Enable + 12 + 12 + read-write + + + 0 + Counter count up is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter count up is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + USCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Count Up Enable + 11 + 11 + read-write + + + 0 + Counter count up is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter count up is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + USCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Count Up Enable + 10 + 10 + read-write + + + 0 + Counter count up is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter count up is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + USCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Count Up Enable + 9 + 9 + read-write + + + 0 + Counter count up is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter count up is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + USCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Count Up Enable + 8 + 8 + read-write + + + 0 + Counter count up is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter count up is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + 4 + 2 + A,B,C,D + USGTRG%sF + GTETRG Pin Falling Input Source Counter Count Up Enable + 1 + 1 + read-write + + + 0 + Counter count up is disable at the falling edge of GTETRG input + #0 + + + 1 + Counter count up is enable at the falling edge of GTETRG input + #1 + + + + + 4 + 2 + A,B,C,D + USGTRG%sR + GTETRG Pin Rising Input Source Counter Count Up Enable + 0 + 0 + read-write + + + 0 + Counter count up is disable at the rising edge of GTETRG input + #0 + + + 1 + Counter count up is enable at the rising edge of GTETRG input + #1 + + + + + + + GTDNSR + General PWM Timer Down Count Source Select Register + 0x20 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + 8 + 1 + A,B,C,D,E,F,G,H + DSELC%s + ELC_GPT Event Source Counter Count Down Enable + 16 + 16 + read-write + + + 0 + Counter count down is disable at the ELC_GPT input + #0 + + + 1 + Counter count down is enable at the ELC_GPT input + #1 + + + + + DSCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source Counter Count Down Enable + 15 + 15 + read-write + + + 0 + Counter count down is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter count down is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + DSCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source Counter Count Down Enable + 14 + 14 + read-write + + + 0 + Counter count down is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter count down is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + DSCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source Counter Count Down Enable + 13 + 13 + read-write + + + 0 + Counter count down is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + Counter count down is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + + + + DSCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source Counter Count Down Enable + 12 + 12 + read-write + + + 0 + Counter count down is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + Counter count down is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + + + + DSCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source Counter Count Down Enable + 11 + 11 + read-write + + + 0 + Counter count down is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter count down is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + DSCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source Counter Count Down Enable + 10 + 10 + read-write + + + 0 + Counter count down is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter count down is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + DSCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source Counter Count Down Enable + 9 + 9 + read-write + + + 0 + Counter count down is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + Counter count down is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + DSCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source Counter Count Down Enable + 8 + 8 + read-write + + + 0 + Counter count down is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + Counter count down is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + 4 + 2 + A,B,C,D + DSGTRG%sF + GTETRG Pin Falling Input Source Counter Count Down Enable + 1 + 1 + read-write + + + 0 + Counter count down is disable at the falling edge of GTETRG input + #0 + + + 1 + Counter count down is enable at the falling edge of GTETRG input + #1 + + + + + 4 + 2 + A,B,C,D + DSGTRG%sR + GTETRG Pin Rising Input Source Counter Count Down Enable + 0 + 0 + read-write + + + 0 + Counter count down is disable at the rising edge of GTETRG input + #0 + + + 1 + Counter count down is enable at the rising edge of GTETRG input + #1 + + + + + + + GTICASR + General PWM Timer Input Capture Source Select Register A + 0x24 + 32 + read-write + 0x00000000 + 0xFFFFFFFF - F1HZ - 1Hz - 6 - 6 - read-only + 8 + 1 + A,B,C,D,E,F,G,H + ASELC%s + ELC_GPT Event Source GTCCRA Input Capture Enable + 16 + 16 + read-write + + + 0 + GTCCRA input capture is disable at the ELC_GPT input + #0 + + + 1 + GTCCRA input capture is enable at the ELC_GPT input + #1 + + - F2HZ - 2Hz - 5 - 5 - read-only + ASCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source GTCCRA Input Capture Enable + 15 + 15 + read-write + + + 0 + GTCCRA input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + GTCCRA input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + - F4HZ - 4Hz - 4 - 4 - read-only + ASCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source GTCCRA Input Capture Enable + 14 + 14 + read-write + + + 0 + GTCCRA input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + GTCCRA input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + - F8HZ - 8Hz - 3 - 3 - read-only + ASCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source GTCCRA Input Capture Enable + 13 + 13 + read-write + + + 0 + GTCCRA input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + GTCCRA input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + - F16HZ - 16Hz - 2 - 2 - read-only + ASCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source GTCCRA Input Capture Enable + 12 + 12 + read-write + + + 0 + GTCCRA input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + GTCCRA input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + - F32HZ - 32Hz + ASCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source GTCCRA Input Capture Enable + 11 + 11 + read-write + + + 0 + GTCCRA input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + GTCCRA input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + ASCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source GTCCRA Input Capture Enable + 10 + 10 + read-write + + + 0 + GTCCRA input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + GTCCRA input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + ASCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source GTCCRA Input Capture Enable + 9 + 9 + read-write + + + 0 + GTCCRA input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + GTCCRA input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + ASCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source GTCCRA Input Capture Enable + 8 + 8 + read-write + + + 0 + GTCCRA input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + GTCCRA input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + + + + 4 + 2 + A,B,C,D + ASGTRG%sF + GTETRG Pin Falling Input Source GTCCRA Input Capture Enable 1 1 - read-only + read-write + + + 0 + GTCCRA input capture is disable at the falling edge of GTETRG input + #0 + + + 1 + GTCCRA input capture is enable at the falling edge of GTETRG input + #1 + + - F64HZ - 64Hz + 4 + 2 + A,B,C,D + ASGTRG%sR + GTETRG Pin Rising Input Source GTCCRA Input Capture Enable 0 0 - read-only + read-write + + + 0 + GTCCRA input capture is disable at the rising edge of GTETRG input + #0 + + + 1 + GTCCRA input capture is enable at the rising edge of GTETRG input + #1 + + - RSECCNT - Second Counter - 0x02 - 8 + GTICBSR + General PWM Timer Input Capture Source Select Register B + 0x28 + 32 read-write - 0x00 - 0x00 + 0x00000000 + 0xFFFFFFFF - SEC10 - 10-Second Count Counts from 0 to 5 for 60-second counting. - 4 - 6 + 8 + 1 + A,B,C,D,E,F,G,H + BSELC%s + ELC_GPT Event Source GTCCRB Input Capture Enable + 16 + 16 read-write + + + 0 + GTCCRB input capture is disable at the ELC_GPT input + #0 + + + 1 + GTCCRB input capture is enable at the ELC_GPT input + #1 + + - SEC1 - 1-Second Count Counts from 0 to 9 every second. When a carry is generated, 1 is added to the tens place. - 0 - 3 + BSCBFAH + GTIOCB Pin Falling Input during GTIOCA Value High Source GTCCRB Input Capture Enable + 15 + 15 read-write + + + 0 + GTCCRB input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + GTCCRB input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 1 + #1 + + - - - - BCNT0 - Binary Counter 0 - RSECCNT - 0x02 - 8 - read-write - 0x00 - 0x00 - - BCNT0 - The BCNT0 counter is a readable/writable 32-bit binary counter b7 to b0. - 0 - 7 + BSCBFAL + GTIOCB Pin Falling Input during GTIOCA Value Low Source GTCCRB Input Capture Enable + 14 + 14 read-write + + + 0 + GTCCRB input capture is disable at the falling edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + GTCCRB input capture is enable at the falling edge of GTIOCB input when GTIOCA input is 0 + #1 + + - - - - RMINCNT - Minute Counter - 0x04 - 8 - read-write - 0x00 - 0x00 - - MIN10 - 10-Minute Count Counts from 0 to 5 for 60-minute counting. - 4 - 6 + BSCBRAH + GTIOCB Pin Rising Input during GTIOCA Value High Source GTCCRB Input Capture Enable + 13 + 13 read-write + + + 0 + GTCCRB input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 1 + #0 + + + 1 + GTCCRB input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 1 + #1 + + - MIN1 - 1-Minute Count Counts from 0 to 9 every minute. When a carry is generated, 1 is added to the tens place. - 0 - 3 + BSCBRAL + GTIOCB Pin Rising Input during GTIOCA Value Low Source GTCCRB Input Capture Enable + 12 + 12 read-write + + + 0 + GTCCRB input capture is disable at the rising edge of GTIOCB input when GTIOCA input is 0 + #0 + + + 1 + GTCCRB input capture is enable at the rising edge of GTIOCB input when GTIOCA input is 0 + #1 + + - - - - BCNT1 - Binary Counter 1 - RMINCNT - 0x04 - 8 - read-write - 0x00 - 0x00 - - BCNT1 - The BCNT1 counter is a readable/writable 32-bit binary counter b15 to b8. - 0 - 7 + BSCAFBH + GTIOCA Pin Falling Input during GTIOCB Value High Source GTCCRB Input Capture Enable + 11 + 11 read-write + + + 0 + GTCCRB input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + GTCCRB input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 1 + #1 + + - - - - RHRCNT - Hour Counter - 0x06 - 8 - read-write - 0x00 - 0x00 - - PM - Time Counter Setting for a.m./p.m. - 6 - 6 + BSCAFBL + GTIOCA Pin Falling Input during GTIOCB Value Low Source GTCCRB Input Capture Enable + 10 + 10 read-write 0 - a.m. + GTCCRB input capture is disable at the falling edge of GTIOCA input when GTIOCB input is 0 #0 1 - p.m. + GTCCRB input capture is enable at the falling edge of GTIOCA input when GTIOCB input is 0 #1 - HR10 - 10-Hour Count Counts from 0 to 2 once per carry from the ones place. - 4 - 5 + BSCARBH + GTIOCA Pin Rising Input during GTIOCB Value High Source GTCCRB Input Capture Enable + 9 + 9 + read-write + + + 0 + GTCCRB input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 1 + #0 + + + 1 + GTCCRB input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 1 + #1 + + + + + BSCARBL + GTIOCA Pin Rising Input during GTIOCB Value Low Source GTCCRB Input Capture Enable + 8 + 8 read-write + + + 0 + GTCCRB input capture is disable at the rising edge of GTIOCA input when GTIOCB input is 0 + #0 + + + 1 + GTCCRB input capture is enable at the rising edge of GTIOCA input when GTIOCB input is 0 + #1 + + - HR1 - 1-Hour Count Counts from 0 to 9 once per hour. When a carry is generated, 1 is added to the tens place. + 4 + 2 + A,B,C,D + BSGTRG%sF + GTETRG Pin Falling Input Source GTCCRB Input Capture Enable + 1 + 1 + read-write + + + 0 + GTCCRB input capture is disable at the falling edge of GTETRG input + #0 + + + 1 + GTCCRB input capture is enable at the falling edge of GTETRG input + #1 + + + + + 4 + 2 + A,B,C,D + BSGTRG%sR + GTETRG Pin Rising Input Source GTCCRB Input Capture Enable 0 - 3 + 0 read-write + + + 0 + GTCCRB input capture is disable at the rising edge of GTETRG input + #0 + + + 1 + GTCCRB input capture is enable at the rising edge of GTETRG input + #1 + + - BCNT2 - Binary Counter 2 - RHRCNT - 0x06 - 8 + GTCR + General PWM Timer Control Register + 0x2C + 32 read-write - 0x00 - 0x00 + 0x00000000 + 0xFFFFFFFF - BCNT2 - The BCNT2 counter is a readable/writable 32-bit binary counter b23 to b16. - 0 - 7 + TPCS + Timer Prescaler Select + 23 + 26 read-write + + + 0000 + PCLK/1 + #0000 + + + 0001 + PCLK/2 + #0001 + + + 0010 + PCLK/4 + #0010 + + + 0011 + PCLK/8 + #0011 + + + 0100 + PCLK/16 + #0100 + + + 0101 + PCLK/32 + #0101 + + + 0110 + PCLK/64 + #0110 + + + 1000 + PCLK/256 + #1000 + + + 1010 + PCLK/1024 + #1010 + + + 1100 + GTETRGA + #1100 + + + 1101 + GTETRGB + #1101 + + + 1110 + GTETRGC + #1110 + + + 1111 + GTETRGD + #1111 + + + others + Setting prohibied + true + + - - - - RWKCNT - Day-of-Week Counter - 0x08 - 8 - read-write - 0x00 - 0x00 - - DAYW - Day-of-Week Counting - 0 - 2 + MD + Mode Select + 16 + 18 read-write 000 - Sunday + Saw-wave PWM mode (single buffer or double buffer possible) #000 001 - Monday + Saw-wave one-shot pulse mode (fixed buffer operation) #001 010 - Tuesday + Setting prohibited #010 011 - Wednesday + Setting prohibited #011 100 - Thursday + Triangle-wave PWM mode 1 (16-bit transfer at crest) (single buffer or double buffer possible) #100 101 - Friday + Triangle-wave PWM mode 2 (16-bit transfer at crest and trough) (single buffer or double buffer possible) #101 110 - Saturday + Triangle-wave PWM mode 3 (32-bit transfer at trough) fixed buffer operation) #110 111 - Setting Prohibited + Setting prohibited #111 - - - - BCNT3 - Binary Counter 3 - RWKCNT - 0x08 - 8 - read-write - 0x00 - 0x00 - - - BCNT3 - The BCNT3 counter is a readable/writable 32-bit binary counter b31 to b24. - 0 - 7 - read-write - - - - - RDAYCNT - Day Counter - 0x0A - 8 - read-write - 0x00 - 0xC0 - - - DATE10 - 10-Day Count Counts from 0 to 3 once per carry from the ones place. - 4 - 5 - read-write - - - DATE1 - 1-Day Count Counts from 0 to 9 once per day. When a carry is generated, 1 is added to the tens place. - 0 - 3 - read-write - - - - - RMONCNT - Month Counter - 0x0C - 8 - read-write - 0x00 - 0xE0 - - - MON10 - 10-Month Count Counts from 0 to 1 once per carry from the ones place. - 4 - 4 - read-write - - - MON1 - 1-Month Count Counts from 0 to 9 once per month. When a carry is generated, 1 is added to the tens place. - 0 - 3 - read-write - - - - - RYRCNT - Year Counter - 0x0E - 16 - read-write - 0x0000 - 0xFF00 - - - YR10 - 10-Year Count Counts from 0 to 9 once per carry from ones place. When a carry is generated in the tens place, 1 is added to the hundreds place. - 4 - 7 - read-write - - YR1 - 1-Year Count Counts from 0 to 9 once per year. When a carry is generated, 1 is added to the tens place. + CST + Count Start 0 - 3 + 0 read-write + + + 0 + Count operation is stopped + #0 + + + 1 + Count operation is performed + #1 + + - RSECAR - Second Alarm Register - 0x10 - 8 + GTUDDTYC + General PWM Timer Count Direction and Duty Setting Register + 0x30 + 32 read-write - 0x00 - 0x00 + 0x00000001 + 0xFFFFFFFF - ENB - Compare enable - 7 - 7 + OBDTYR + GTIOCB Output Value Selecting after Releasing 0 percent/100 percent Duty Setting + 27 + 27 read-write 0 - The register value is not compared with the RSECCNT counter value. + Apply output value set in 0 percent/100 percent duty to GTIOB[3:2] function after releasing 0 percent/100 percent duty setting. #0 1 - The register value is compared with the RSECCNT counter value. + Apply masked compare match output value to GTIOB[3:2] function after releasing 0 percent/100 percent duty setting. #1 - SEC10 - 10-Seconds Value for the tens place of seconds - 4 - 6 + OBDTYF + Forcible GTIOCB Output Duty Setting + 26 + 26 read-write + + + 0 + Not forcibly set + #0 + + + 1 + Forcibly set + #1 + + - SEC1 - 1-Second Value for the ones place of seconds - 0 - 3 - write-only - - - - - BCNT0AR - Binary Counter 0 Alarm Register - RSECAR - 0x10 - 8 - read-write - 0x00 - 0x00 - - - BCNT0AR - he BCNT0AR counter is a readable/writable alarm register corresponding to 32-bit binary counter b7 to b0. - 0 - 7 + OBDTY + GTIOCB Output Duty Setting + 24 + 25 read-write + + + 00 + GTIOCB pin duty is depend on compare match + #00 + + + 01 + GTIOCB pin duty is depend on compare match + #01 + + + 10 + GTIOCB pin duty 0 percent + #10 + + + 11 + GTIOCB pin duty 100 percent + #11 + + - - - - RMINAR - Minute Alarm Register - 0x12 - 8 - read-write - 0x00 - 0x00 - - ENB - Compare enable - 7 - 7 + OADTYR + GTIOCA Output Value Selecting after Releasing 0 percent/100 percent Duty Setting + 19 + 19 read-write 0 - The register value is not compared with the RMINCNT counter value. + Apply output value set in 0 percent/100 percent duty to GTIOA[3:2] function after releasing 0 percent/100 percent duty setting. #0 1 - The register value is compared with the RMINCNT counter value. + Apply masked compare match output value to GTIOA[3:2] function after releasing 0 percent/100 percent duty setting. #1 - MIN10 - 10-Minute Count Value for the tens place of minutes - 4 - 6 - read-write - - - MIN1 - 1-Minute Count Value for the ones place of minutes - 0 - 3 + OADTYF + Forcible GTIOCA Output Duty Setting + 18 + 18 read-write + + + 0 + Not forcibly set + #0 + + + 1 + Forcibly set + #1 + + - - - - BCNT1AR - Binary Counter 1 Alarm Register - RMINAR - 0x12 - 8 - read-write - 0x00 - 0x00 - - BCNT1AR - he BCNT1AR counter is a readable/writable alarm register corresponding to 32-bit binary counter b15 to b8. - 0 - 7 + OADTY + GTIOCA Output Duty Setting + 16 + 17 read-write + + + 00 + GTIOCA pin duty is depend on compare match + #00 + + + 01 + GTIOCA pin duty is depend on compare match + #01 + + + 10 + GTIOCA pin duty 0 percent + #10 + + + 11 + GTIOCA pin duty 100 percent + #11 + + - - - - RHRAR - Hour Alarm Register - 0x14 - 8 - read-write - 0x00 - 0x00 - - ENB - Compare enable - 7 - 7 + UDF + Forcible Count Direction Setting + 1 + 1 read-write 0 - The register value is not compared with the RHRCNT counter value. + Not forcibly set #0 1 - The register value is compared with the RHRCNT counter value. + Forcibly set #1 - PM - Time Counter Setting for a.m./p.m. - 6 - 6 + UD + Count Direction Setting + 0 + 0 read-write 0 - a.m. + GTCNT counts down. #0 1 - p.m. + GTCNT counts up. #1 - - HR10 - 10-Hour Count Value for the tens place of hours - 4 - 5 - read-write - - - HR1 - 1-Hour Count Value for the ones place of hours - 0 - 3 - read-write - - BCNT2AR - Binary Counter 2 Alarm Register - RHRAR - 0x14 - 8 + GTIOR + General PWM Timer I/O Control Register + 0x34 + 32 read-write - 0x00 - 0x00 + 0x00000000 + 0xFFFFFFFF - BCNT2AR - The BCNT2AR counter is a readable/writable 32-bit binary counter b23 to b16. - 0 - 7 + NFCSB + Noise Filter B Sampling Clock Select + 30 + 31 read-write + + + 00 + PCLK/1 + #00 + + + 01 + PCLK/4 + #01 + + + 10 + PCLK/16 + #10 + + + 11 + PCLK/64 + #11 + + - - - - RWKAR - Day-of-Week Alarm Register - 0x16 - 8 - read-write - 0x00 - 0x00 - - ENB - Compare enable - 7 - 7 + NFBEN + Noise Filter B Enable + 29 + 29 read-write 0 - The register value is not compared with the RWKCNT counter value. + The noise filter for the GTIOCB pin is disabled. #0 1 - The register value is compared with the RWKCNT counter value. + The noise filter for the GTIOCB pin is enabled. #1 - DAYW - Day-of-Week Counting - 0 - 2 + OBDF + GTIOCB Pin Disable Value Setting + 25 + 26 read-write - 000 - Sunday - #000 - - - 001 - Monday - #001 - - - 010 - Tuesday - #010 - - - 011 - Wednesday - #011 - - - 100 - Thursday - #100 + 00 + Output disable is prohibited. + #00 - 101 - Friday - #101 + 01 + GTIOCB pin is set to Hi-Z when output disable is performed. + #01 - 110 - Saturday - #110 + 10 + GTIOCB pin is set to 0 when output disable is performed. + #10 - 111 - Setting Prohibited - #111 + 11 + GTIOCB pin is set to 1 when output disable is performed. + #11 - - - - BCNT3AR - Binary Counter 3 Alarm Register - RWKAR - 0x16 - 8 - read-write - 0x00 - 0x00 - - - BCNT3AR - The BCNT3AR counter is a readable/writable 32-bit binary counter b31 to b24. - 0 - 7 - read-write - - - - - RDAYAR - Date Alarm Register - 0x18 - 8 - read-write - 0x00 - 0x00 - - ENB - Compare enable - 7 - 7 + OBE + GTIOCB Pin Output Enable + 24 + 24 read-write 0 - The register value is not compared with the RDAYCNT counter value. + Output is disabled #0 1 - The register value is compared with the RDAYCNT counter value. + Output is enabled #1 - DATE10 - 10 Days Value for the tens place of days - 4 - 5 - read-write - - - DATE1 - 1 Day Value for the ones place of days - 0 - 3 - read-write - - - - - BCNT0AER - Binary Counter 0 Alarm Enable Register - RDAYAR - 0x18 - 8 - read-write - 0x00 - 0x00 - - - ENB - The BCNT0AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b7 to b0. - 0 - 7 - read-write - - - - - RMONAR - Month Alarm Register - 0x1A - 8 - read-write - 0x00 - 0x00 - - - ENB - Compare enable - 7 - 7 + OBHLD + GTIOCB Pin Output Setting at the Start/Stop Count + 23 + 23 read-write 0 - The register value is not compared with the RMONCNT counter value. + The GTIOCB pin output level at start/stop of counting depends on the register setting. #0 1 - The register value is compared with the RMONCNT counter value. + The GTIOCB pin output level is retained at start/stop of counting. #1 - MON10 - 10 Months Value for the tens place of months - 4 - 4 - read-write - - - MON1 - 1 Month Value for the ones place of months - 0 - 3 - read-write - - - - - BCNT1AER - Binary Counter 1 Alarm Enable Register - RMONAR - 0x1A - 8 - read-write - 0x00 - 0x00 - - - ENB - The BCNT1AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b15 to b8. - 0 - 7 - read-write - - - - - RYRAR - Year Alarm Register - 0x1C - 16 - read-write - 0x0000 - 0xFF00 - - - YR10 - 10 Years Value for the tens place of years - 4 - 7 - read-write - - - YR1 - 1 Year Value for the ones place of years - 0 - 3 - read-write - - - - - BCNT2AER - Binary Counter 2 Alarm Enable Register - RYRAR - 0x1C - 16 - read-write - 0x0000 - 0xFF00 - - - ENB - The BCNT2AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b23 to b16. - 0 - 7 - read-write - - - - - RYRAREN - Year Alarm Enable Register - 0x1E - 8 - read-write - 0x00 - 0x00 - - - ENB - Compare enable - 7 - 7 + OBDFLT + GTIOCB Pin Output Value Setting at the Count Stop + 22 + 22 read-write 0 - The register value is not compared with the RYRCNT counter value. + The GTIOCB pin outputs low when counting is stopped. #0 1 - The register value is compared with the RYRCNT counter value. + The GTIOCB pin outputs high when counting is stopped. #1 - - - - BCNT3AER - Binary Counter 3 Alarm Enable Register - RYRAREN - 0x1E - 8 - read-write - 0x00 - 0x00 - - - ENB - The BCNT3AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b31 to b24. - 0 - 7 - read-write - - - - - RCR1 - RTC Control Register 1 - 0x22 - 8 - read-write - 0x00 - 0x0A - - PES - Periodic Interrupt Select - 4 - 7 + GTIOB + GTIOCB Pin Function Select + 16 + 20 read-write - 0110 - A periodic interrupt is generated every 1/256 second((RCR4.RCKSEL = 0)./A periodic interrupt is generated every 1/128 second((RCR4.RCKSEL = 1). - #0110 + 00000 + Initial output is Low. Output retained at cycle end. Output retained at GTCCRB compare match. + #00000 - 0111 - A periodic interrupt is generated every 1/128 second. - #0111 + 00001 + Initial output is Low. Output retained at cycle end. Low output at GTCCRB compare match. + #00001 - 1000 - A periodic interrupt is generated every 1/64 second. - #1000 + 00010 + Initial output is Low. Output retained at cycle end. High output at GTCCRB compare match. + #00010 - 1001 - A periodic interrupt is generated every 1/32 second. - #1001 + 00011 + Initial output is Low. Output retained at cycle end. Output toggled at GTCCRB compare match. + #00011 - 1010 - A periodic interrupt is generated every 1/16 second. - #1010 + 00100 + Initial output is Low. Low output at cycle end. Output retained at GTCCRB compare match. + #00100 - 1011 - A periodic interrupt is generated every 1/8 second. - #1011 + 00101 + Initial output is Low. Low output at cycle end. Low output at GTCCRB compare match. + #00101 - 1100 - A periodic interrupt is generated every 1/4 second. - #1100 + 00110 + Initial output is Low. Low output at cycle end. High output at GTCCRB compare match. + #00110 - 1101 - A periodic interrupt is generated every 1/2 second. - #1101 + 00111 + Initial output is Low. Low output at cycle end. Output toggled at GTCCRB compare match. + #00111 - 1110 - A periodic interrupt is generated every 1 second. - #1110 + 01000 + Initial output is Low. High output at cycle end. Output retained at GTCCRB compare match. + #01000 - 1111 - A periodic interrupt is generated every 2 seconds. - #1111 + 01001 + Initial output is Low. High output at cycle end. Low output at GTCCRB compare match. + #01001 - others - No periodic interrupts are generated. - true + 01010 + Initial output is Low. High output at cycle end. High output at GTCCRB compare match. + #01010 + + + 01011 + Initial output is Low. High output at cycle end. Output toggled at GTCCRB compare match. + #01011 + + + 01100 + Initial output is Low. Output toggled at cycle end. Output retained at GTCCRB compare match. + #01100 + + + 01101 + Initial output is Low. Output toggled at cycle end. Low output at GTCCRB compare match. + #01101 + + + 01110 + Initial output is Low. Output toggled at cycle end. High output at GTCCRB compare match. + #01110 + + + 01111 + Initial output is Low. Output toggled at cycle end. Output toggled at GTCCRB compare match. + #01111 + + + 10000 + Initial output is High. Output retained at cycle end. Output retained at GTCCRB compare match. + #10000 + + + 10001 + Initial output is High. Output retained at cycle end. Low output at GTCCRB compare match. + #10001 + + + 10010 + Initial output is High. Output retained at cycle end. High output at GTCCRB compare match. + #10010 + + + 10011 + Initial output is High. Output retained at cycle end. Output toggled at GTCCRB compare match. + #10011 + + + 10100 + Initial output is High. Low output at cycle end. Output retained at GTCCRB compare match. + #10100 + + + 10101 + Initial output is High. Low output at cycle end. Low output at GTCCRB compare match. + #10101 + + + 10110 + Initial output is High. Low output at cycle end. High output at GTCCRB compare match. + #10110 + + + 10111 + Initial output is High. Low output at cycle end. Output toggled at GTCCRB compare match. + #10111 + + + 11000 + Initial output is High. High output at cycle end. Output retained at GTCCRB compare match. + #11000 + + + 11001 + Initial output is High. High output at cycle end. Low output at GTCCRB compare match. + #11001 + + + 11010 + Initial output is High. High output at cycle end. High output at GTCCRB compare match. + #11010 + + + 11011 + Initial output is High. High output at cycle end. Output toggled at GTCCRB compare match. + #11011 + + + 11100 + Initial output is High. Output toggled at cycle end. Output retained at GTCCRB compare match. + #11100 + + + 11101 + Initial output is High. Output toggled at cycle end. Low output at GTCCRB compare match. + #11101 + + + 11110 + Initial output is High. Output toggled at cycle end. High output at GTCCRB compare match. + #11110 + + + 11111 + Initial output is High. Output toggled at cycle end. Output toggled at GTCCRB compare match. + #11111 - RTCOS - RTCOUT Output Select - 3 - 3 + NFCSA + Noise Filter A Sampling Clock Select + 14 + 15 read-write - 0 - RTCOUT outputs 1 Hz. - #0 + 00 + PCLK/1 + #00 - 1 - RTCOUT outputs 64 Hz. - #1 + 01 + PCLK/4 + #01 + + + 10 + PCLK/16 + #10 + + + 11 + PCLK/64 + #11 - PIE - Periodic Interrupt Enable - 2 - 2 + NFAEN + Noise Filter A Enable + 13 + 13 read-write 0 - A periodic interrupt request is disabled. + The noise filter for the GTIOCA pin is disabled. #0 1 - A periodic interrupt request is enabled. + The noise filter for the GTIOCA pin is enabled. #1 - CIE - Carry Interrupt Enable - 1 - 1 + OADF + GTIOCA Pin Disable Value Setting + 9 + 10 read-write - 0 - A carry interrupt request is disabled. - #0 + 00 + Output disable is prohibited. + #00 - 1 - A carry interrupt request is enabled. - #1 + 01 + GTIOCA pin is set to Hi-Z when output disable is performed. + #01 + + + 10 + GTIOCA pin is set to 0 when output disable is performed. + #10 + + + 11 + GTIOCA pin is set to 1 when output disable is performed. + #11 - AIE - Alarm Interrupt Enable - 0 - 0 + OAE + GTIOCA Pin Output Enable + 8 + 8 read-write 0 - An alarm interrupt request is disabled. + Output is disabled #0 1 - An alarm interrupt request is enabled. + Output is enabled #1 - - - - RCR2 - RTC Control Register 2 - 0x24 - 8 - read-write - 0x00 - 0x0E - - CNTMD - Count Mode Select + OAHLD + GTIOCA Pin Output Setting at the Start/Stop Count 7 7 read-write 0 - The calendar count mode. + The GTIOCA pin output level at start/stop of counting depends on the register setting. #0 1 - The binary count mode. + The GTIOCA pin output level is retained at start/stop of counting. #1 - HR24 - Hours Mode + OADFLT + GTIOCA Pin Output Value Setting at the Count Stop 6 6 read-write 0 - The RTC operates in 12-hour mode. + The GTIOCA pin outputs low when counting is stopped. #0 1 - The RTC operates in 24-hour mode. + The GTIOCA pin outputs high when counting is stopped. #1 - AADJP - Automatic Adjustment Period Select (When the LOCO clock is selected, the setting of this bit is disabled.) - 5 - 5 + GTIOA + GTIOCA Pin Function Select + 0 + 4 read-write - 0 - The RADJ.ADJ[5:0] setting value is adjusted from the count value of the prescaler every minute. - #0 + 00000 + Initial output is Low. Output retained at cycle end. Output retained at GTCCRA compare match. + #00000 - 1 - The RADJ.ADJ[5:0] setting value is adjusted from the count value of the prescaler every 10 seconds. - #1 + 00001 + Initial output is Low. Output retained at cycle end. Low output at GTCCRA compare match. + #00001 - - - - AADJE - Automatic Adjustment Enable (When the LOCO clock is selected, the setting of this bit is disabled.) - 4 - 4 - read-write - - 0 - Automatic adjustment is disabled. - #0 + 00010 + Initial output is Low. Output retained at cycle end. High output at GTCCRA compare match. + #00010 - 1 - Automatic adjustment is enabled. - #1 + 00011 + Initial output is Low. Output retained at cycle end. Output toggled at GTCCRA compare match. + #00011 - - - - RTCOE - RTCOUT Output Enable - 3 - 3 - read-write - - 0 - RTCOUT output disabled. - #0 + 00100 + Initial output is Low. Low output at cycle end. Output retained at GTCCRA compare match. + #00100 - 1 - RTCOUT output enabled. - #1 + 00101 + Initial output is Low. Low output at cycle end. Low output at GTCCRA compare match. + #00101 - - - - ADJ30 - 30-Second Adjustment - 2 - 2 - read-write - - 0 - Writing is invalid.(write) / In normal time operation, or 30-second adjustment has completed.(read) - #0 + 00110 + Initial output is Low. Low output at cycle end. High output at GTCCRA compare match. + #00110 - 1 - 30-second adjustment is executed.(write) / During 30-second adjustment.(read) - #1 + 00111 + Initial output is Low. Low output at cycle end. Output toggled at GTCCRA compare match. + #00111 - - - - RESET - RTC Software Reset - 1 - 1 - read-write - - 0 - Writing is invalid.(write) / In normal time operation, or an RTC software reset has completed.(read) - #0 + 01000 + Initial output is Low. High output at cycle end. Output retained at GTCCRA compare match. + #01000 - 1 - The prescaler and the target registers for RTC software reset *1 are initialized.(write) / During an RTC software reset.(read) - #1 + 01001 + Initial output is Low. High output at cycle end. Low output at GTCCRA compare match. + #01001 - - - - START - Start - 0 - 0 - read-write - - 0 - Prescaler and time counter are stopped. - #0 + 01010 + Initial output is Low. High output at cycle end. High output at GTCCRA compare match. + #01010 - 1 - Prescaler and time counter operate normally. - #1 + 01011 + Initial output is Low. High output at cycle end. Output toggled at GTCCRA compare match. + #01011 - - - - - - RCR4 - RTC Control Register 4 - 0x28 - 8 - read-write - 0x00 - 0xFE - - - RCKSEL - Count Source Select - 0 - 0 - read-write - - 0 - Sub-clock oscillator is selected. - #0 + 01100 + Initial output is Low. Output toggled at cycle end. Output retained at GTCCRA compare match. + #01100 - 1 - LOCO clock oscillator is selected. - #1 + 01101 + Initial output is Low. Output toggled at cycle end. Low output at GTCCRA compare match. + #01101 - - - - ROPSEL - RTC Operation Mode Select - 7 - 7 - read-write - - 0 - Normal operation mode is selected. - #0 + 01110 + Initial output is Low. Output toggled at cycle end. High output at GTCCRA compare match. + #01110 - 1 - Low-consumption clock mode is selected. - #1 + 01111 + Initial output is Low. Output toggled at cycle end. Output toggled at GTCCRA compare match. + #01111 - - - - - - RFRH - Frequency Register H - 0x2A - 16 - read-write - 0x0000 - 0xFFFE - - - RFC16 - Frequency Comparison Value (b16) To generate the operating clock from the LOCOclock, this bit sets the comparison value of the 128-Hz clock cycle. - 0 - 0 - read-write - - - - - RFRL - Frequency Register L - 0x2C - 16 - read-write - 0x0000 - 0x0000 - - - RFC - Frequency Comparison Value(b15-b0) To generate the operating clock from the main clock, this bit sets the comparison value of the 128-Hz clock cycle. - 0 - 15 - read-write - - - - - RADJ - Time Error Adjustment Register - 0x2E - 8 - read-write - 0x00 - 0x00 - - - PMADJ - Plus-Minus - 6 - 7 - read-write - - 00 - Adjustment is not performed. - #00 + 10000 + Initial output is High. Output retained at cycle end. Output retained at GTCCRA compare match. + #10000 - 01 - Adjustment is performed by the addition to the prescaler. - #01 + 10001 + Initial output is High. Output retained at cycle end. Low output at GTCCRA compare match. + #10001 - 10 - Adjustment is performed by the subtraction from the prescaler. - #10 + 10010 + Initial output is High. Output retained at cycle end. High output at GTCCRA compare match. + #10010 - 11 - Setting prohibited - #11 + 10011 + Initial output is High. Output retained at cycle end. Output toggled at GTCCRA compare match. + #10011 + + + 10100 + Initial output is High. Low output at cycle end. Output retained at GTCCRA compare match. + #10100 + + + 10101 + Initial output is High. Low output at cycle end. Low output at GTCCRA compare match. + #10101 + + + 10110 + Initial output is High. Low output at cycle end. High output at GTCCRA compare match. + #10110 + + + 10111 + Initial output is High. Low output at cycle end. Output toggled at GTCCRA compare match. + #10111 + + + 11000 + Initial output is High. High output at cycle end. Output retained at GTCCRA compare match. + #11000 + + + 11001 + Initial output is High. High output at cycle end. Low output at GTCCRA compare match. + #11001 + + + 11010 + Initial output is High. High output at cycle end. High output at GTCCRA compare match. + #11010 + + + 11011 + Initial output is High. High output at cycle end. Output toggled at GTCCRA compare match. + #11011 + + + 11100 + Initial output is High. Output toggled at cycle end. Output retained at GTCCRA compare match. + #11100 + + + 11101 + Initial output is High. Output toggled at cycle end. Low output at GTCCRA compare match. + #11101 + + + 11110 + Initial output is High. Output toggled at cycle end. High output at GTCCRA compare match. + #11110 + + + 11111 + Initial output is High. Output toggled at cycle end. Output toggled at GTCCRA compare match. + #11111 - - ADJ - Adjustment Value These bits specify the adjustment value from the prescaler. - 0 - 5 - read-write - - - - - R_SCI0 - Serial Communications Interface - 0x40070000 - - 0x00000000 - 0x01D - registers - - - SMR - Serial Mode Register (SCMR.SMIF = 0) - 0x00 - 8 + GTINTAD + General PWM Timer Interrupt Output Setting Register + 0x38 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xFFFFFFFF - CM - Communication Mode - 7 - 7 + GRPABL + Same Time Output Level Low Disable Request Enable + 30 + 30 read-write 0 - Asynchronous mode or simple I2C mode + Same time output level low disable request is disabled. #0 1 - Clock synchronous mode + Same time output level low disable request is enabled. #1 - CHR - Character Length(Valid only in asynchronous mode) - 6 - 6 + GRPABH + Same Time Output Level High Disable Request Enable + 29 + 29 read-write 0 - Transmit/receive in 9-bit data length(SCMR.CHR1=0) / in 8bit data length(SCMR.CHR1=1) + Same time output level high disable request is disabled. #0 1 - Transmit/receive in 9-bit data length(SCMR.CHR1=0) / in 7bit data length(SCMR.CHR1=1) + Same time output level high disable request is enabled. #1 - PE - Parity Enable(Valid only in asynchronous mode) - 5 - 5 + GRPDTE + Dead Time Error Output Disable Request Enable + 28 + 28 read-write 0 - Parity bit addition is not performed (transmitting) / Parity bit checking is not performed ( receiving ) + Disable dead time error output disable request #0 1 - The parity bit is added (transmitting) / The parity bit is checked (receiving) + Enable dead time error output disable request #1 - PM - Parity Mode (Valid only when the PE bit is 1) - 4 - 4 + GRP + Output Disable Source Select + 24 + 25 read-write - 0 - Selects even parity - #0 + 00 + Group A output disable request + #00 - 1 - Selects odd parity - #1 + 01 + Group B output disable request + #01 + + + 10 + Group C output disable request + #10 + + + 11 + Group D output disable request + #11 + + + others + Setting prohibited + true - STOP - Stop Bit Length(Valid only in asynchronous mode) - 3 - 3 + GTINTPC + Period Count Function Finish Interrupt Enable + 31 + 31 read-write 0 - 1 stop bit + Interrupt request is disabled #0 1 - 2 stop bits + Interrupt request is enabled #1 + + + + GTST + General PWM Timer Status Register + 0x3C + 32 + read-write + 0x00008000 + 0xFFFFFFFF + - MP - Multi-Processor Mode(Valid only in asynchronous mode) - 2 - 2 - read-write + OABLF + Same Time Output Level Low Disable Request Enable + 30 + 30 + read-only 0 - Multi-processor communications function is disabled + GTIOCA pin and GTIOCB pin don't output 0 at the same time. #0 1 - Multi-processor communications function is enabled + GTIOCA pin and GTIOCB pin output 0 at the same time. #1 - CKS - Clock Select - 0 - 1 - read-write + OABHF + Same Time Output Level High Disable Request Enable + 29 + 29 + read-only - 00 - PCLK clock - #00 - - - 01 - PCLK/4 clock - #01 - - - 10 - PCLK/16 clock - #10 + 0 + GTIOCA pin and GTIOCB pin don't output 1 at the same time. + #0 - 11 - PCLK/64 clock - #11 + 1 + GTIOCA pin and GTIOCB pin output 1 at the same time. + #1 - - - - SMR_SMCI - Serial mode register (SCMR.SMIF = 1) - SMR - 0x00 - 8 - read-write - 0x00 - 0xFF - - GM - GSM Mode - 7 - 7 - read-write + DTEF + Dead Time Error Flag + 28 + 28 + read-only 0 - Normal mode operation + No dead time error has occurred. #0 1 - GSM mode operation + A dead time error has occurred. #1 - BLK - Block Transfer Mode - 6 - 6 - read-write + ODF + Output Disable Flag + 24 + 24 + read-only 0 - Normal mode operation + No output disable request is generated. #0 1 - Block transfer mode operation + An output disable request is generated. #1 - PE - Parity Enable(Valid only in asynchronous mode) - 5 - 5 + ADTRBDF + GTADTRB Compare Match(Down-Counting) A/D Convertor Start Request Flag + 19 + 19 read-write 0 - Setting Prohibited + No compare match of GTADTRB at down-counting is generated. #0 1 - Set this bit to 1 in smart card interface mode. + A compare match of GTADTRB at down-counting is generated. #1 - PM - Parity Mode (Valid only when the PE bit is 1) - 4 - 4 + ADTRBUF + GTADTRB Compare Match(Up-Counting) A/D Convertor Start Request Flag + 18 + 18 read-write 0 - Selects even parity + No compare match of GTADTRB at up-counting is generated. #0 1 - Selects odd parity + A compare match of GTADTRB at up-counting is generated. #1 - BCP - Base Clock Pulse(Valid only in asynchronous mode) - 2 - 3 + ADTRADF + GTADTRA Compare Match(Down-Counting) A/D Convertor Start Request Flag + 17 + 17 read-write - 00 - 93 clock cycles(S=93) (SCMR.BCP2=0) / 32 clock cycles(S=32) (SCMR.BCP2=1) - #00 - - - 01 - 128 clock cycles(S=128) (SCMR.BCP2=0) / 64 clock cycles(S=64) (SCMR.BCP2=1) - #01 - - - 10 - 186 clock cycles(S=186) (SCMR.BCP2=0) / 372 clock cycles(S=372) (SCMR.BCP2=1) - #10 + 0 + No compare match of GTADTRA at down-counting is generated. + #0 - 11 - 512 clock cycles(S=512) (SCMR.BCP2=0) / 256 clock cycles(S=256) (SCMR.BCP2=1) - #11 + 1 + A compare match of GTADTRA at down-counting is generated. + #1 - CKS - Clock Select - 0 - 1 + ADTRAUF + GTADTRA Compare Match (Up-Counting) A/D Converter Start Request Interrupt Enable + 16 + 16 read-write - 00 - PCLK clock - #00 + 0 + No compare match of GTADTRA at up-counting is generated. + #0 - 01 - PCLK/4 clock - #01 + 1 + A compare match of GTADTRA at up-counting is generated. + #1 + + + + TUCF + Count Direction Flag + 15 + 15 + read-only + - 10 - PCLK/16 clock - #10 + 0 + The GTCNT counter counts downward. + #0 - 11 - PCLK/64 clock - #11 + 1 + The GTCNT counter counts upward. + #1 - - - - BRR - Bit Rate Register - 0x01 - 8 - read-write - 0xFF - 0xFF - - BRR - BRR is an 8-bit register that adjusts the bit rate. - 0 - 7 - read-write + ITCNT + GTCIV/GTCIU Interrupt Skipping Count Counter(Counter for counting the number of times a timer interrupt has been skipped.) + 8 + 10 + read-only - - - - SCR - Serial Control Register (SCMR.SMIF = 0) - 0x02 - 8 - read-write - 0x00 - 0xFF - - TIE - Transmit Interrupt Enable + TCFPU + Underflow Flag 7 7 read-write 0 - SCI_TXI interrupt request is disabled + No underflow (trough) has occurred. #0 1 - SCI_TXI interrupt request is enabled + An underflow (trough) has occurred. #1 - RIE - Receive Interrupt Enable + TCFPO + Overflow Flag 6 6 read-write 0 - SCI_RXI and SCI_ERI interrupt requests are disabled + No overflow (crest) has occurred. #0 1 - SCI_RXI and SCI_ERI interrupt requests are enabled + An overflow (crest) has occurred. #1 - TE - Transmit Enable + TCFF + Input Compare Match Flag F 5 5 read-write 0 - Serial transmission is disabled + No compare match of GTCCRF is generated. #0 1 - Serial transmission is enabled + A compare match of GTCCRF is generated. #1 - RE - Receive Enable + TCFE + Input Compare Match Flag E 4 4 read-write 0 - Serial reception is disabled + No compare match of GTCCRE is generated. #0 1 - Serial reception is enabled + A compare match of GTCCRE is generated. #1 - MPIE - Multi-Processor Interrupt Enable(Valid in asynchronous mode when SMR.MP = 1) + TCFD + Input Compare Match Flag D 3 3 read-write 0 - Normal reception + No compare match of GTCCRD is generated. #0 1 - When the data with the multi-processor bit set to 0 is received, the data is not read, and setting the status flags RDRF,ORER and FER in SSR to 1 is disabled. When the data with the multiprocessor bit set to 1 is received, the MPIE bit is automatically cleared to 0, and normal reception is resumed. + A compare match of GTCCRD is generated. #1 - TEIE - Transmit End Interrupt Enable + TCFC + Input Compare Match Flag C 2 2 read-write 0 - SCI_TEI interrupt request is disabled + No compare match of GTCCRC is generated. #0 1 - SCI_TEI interrupt request is enabled + A compare match of GTCCRC is generated. #1 - CKE - Clock Enable - 0 + TCFB + Input Capture/Compare Match Flag B + 1 1 read-write - 00 - The SCKn pin is available for use as an I/O port in accord with the I/O port settings.(Asynchronous mode) / The SCKn pin functions as the clock output pin(Clock synchronous mode) - #00 - - - 01 - The clock with the same frequency as the bit rate is output from the SCKn pin.(Asynchronous mode) / The SCKn pin functions as the clock output pin(Clock synchronous mode) - #01 + 0 + No input capture/compare match of GTCCRB is generated. + #0 - others - The clock with a frequency 16 times the bit rate should be input from the SCKn pin. (when SEMR.ABCS bit is 0) Input a clock signal with a frequency 8 times the bit rate when the SEMR.ABCS bit is 1.(Asynchronous mode) / The SCKn pin functions as the clock input pin(Clock synchronous mode) - true + 1 + An input capture/compare match of GTCCRB is generated. + #1 - - - - SCR_SMCI - Serial Control Register (SCMR.SMIF =1) - SCR - 0x02 - 8 - read-write - 0x00 - 0xFF - - TIE - Transmit Interrupt Enable - 7 - 7 + TCFA + Input Capture/Compare Match Flag A + 0 + 0 read-write 0 - A SCI_TXI interrupt request is disabled + No input capture/compare match of GTCCRA is generated. #0 1 - A SCI_TXI interrupt request is enabled + An input capture/compare match of GTCCRA is generated. #1 - RIE - Receive Interrupt Enable - 6 - 6 + PCF + Period Count Function Finish Flag + 31 + 31 read-write 0 - SCI_RXI and SCI_ERI interrupt requests are disabled + No period count function finish has occurred #0 1 - SCI_RXI and SCI_ERI interrupt requests are enabled + A period count function finish has occurred #1 + + + + GTBER + General PWM Timer Buffer Enable Register + 0x40 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - TE - Transmit Enable - 5 - 5 + ADTDB + GTADTRB Double Buffer Operation + 30 + 30 read-write 0 - Serial transmission is disabled + Single buffer operation (GTADTBRB --> GTADTRB) #0 1 - Serial transmission is enabled + Double buffer operation (GTADTDBRB --> GTADTBRB --> GTADTDRB) #1 - RE - Receive Enable - 4 - 4 + ADTTB + GTADTRB Buffer Transfer Timing Select in the Triangle wavesNOTE: In the Saw waves, values other than 0 0: Transfer at an underflow (in down-counting) or overflow (in up-counting) is performed. + 28 + 29 + read-write + + + 00 + No transfer + #00 + + + 01 + Transfer at crest + #01 + + + 10 + Transfer at trough + #10 + + + 11 + Transfer at both crest and trough + #11 + + + + + ADTDA + GTADTRA Double Buffer Operation + 26 + 26 read-write 0 - Serial reception is disabled + Single buffer operation (GTADTBRA --> GTADTRA) #0 1 - Serial reception is enabled + Double buffer operation (GTADTDBRA --> GTADTBRA --> GTADTDRA) #1 - MPIE - Multi-Processor Interrupt Enable - 3 - 3 - read-write - - - TEIE - Transmit End Interrupt Enable - 2 - 2 - read-write - - - CKE - Clock Enable - 0 - 1 + ADTTA + GTADTRA Buffer Transfer Timing Select in the Triangle wavesNOTE: In the Saw waves, values other than 0 0: Transfer at an underflow (in down-counting) or overflow (in up-counting) is performed. + 24 + 25 read-write 00 - Output disabled(SMR_SMCI.GM=0) / Output fixed low(SMR_SMCI.GM=1) + No transfer #00 01 - Clock Output + Transfer at crest #01 10 - Setting prohibited(SMR_SMCI.GM=0) / Output fixed High(SMR_SMCI.GM=1) + Transfer at trough #10 11 - Setting prohibited(SMR_SMCI.GM=0) / Clock Output(SMR_SMCI.GM=1) + Transfer at both crest and trough #11 - - - - TDR - Transmit Data Register - 0x03 - 8 - read-write - 0xFF - 0xFF - - - TDR - TDR is an 8-bit register that stores transmit data. - 0 - 7 - read-write - - - - - SSR - Serial Status Register(SCMR.SMIF = 0 and FCR.FM=0) - 0x04 - 8 - read-write - 0x84 - 0xFF - - TDRE - Transmit Data Empty Flag - 7 - 7 - read-write - zeroToClear - modify + CCRSWT + GTCCRA and GTCCRB Forcible Buffer OperationThis bit is read as 0. + 22 + 22 + write-only 0 - Transmit data is in TDR register + no effect #0 1 - No transmit data is in TDR register + Forcibly performs buffer transfer of GTCCRA and GTCCRB. This bit automatically returns to 0 after the writing of 1. #1 - RDRF - Receive Data Full Flag - 6 - 6 + PR + GTPR Buffer Operation + 20 + 21 + read-write + + + 00 + Buffer operation is not performed + #00 + + + 01 + Single buffer operation (GTPBR --> GTPR) + #01 + + + others + Setting prohibited + true + + + + + CCRB + GTCCRB Buffer Operation + 18 + 19 read-write - zeroToClear - modify - 0 - No received data is in RDR register - #0 + 00 + Buffer operation is not performed + #00 + + + 01 + Single buffer operation (GTCCRB <--> GTCCRE) + #01 + + + 10 + Double buffer operation (GTCCRB <--> GTCCRE <--> GTCCRF) + #10 - 1 - Received data is in RDR register - #1 + 11 + Double buffer operation (GTCCRB <--> GTCCRE <--> GTCCRF) + #11 - ORER - Overrun Error Flag - 5 - 5 + CCRA + GTCCRA Buffer Operation + 16 + 17 read-write - zeroToClear - modify - 0 - No overrun error occurred - #0 + 00 + Buffer operation is not performed + #00 - 1 - An overrun error has occurred - #1 + 01 + Single buffer operation (GTCCRA <--> GTCCRC) + #01 - - - - FER - Framing Error Flag - 4 - 4 - read-write - zeroToClear - modify - - 0 - No framing error occurred - #0 + 10 + Double buffer operation (GTCCRA <--> GTCCRC <--> GTCCRD) + #10 - 1 - A framing error has occurred - #1 + 11 + Double buffer operation (GTCCRA <--> GTCCRC <--> GTCCRD) + #11 - PER - Parity Error Flag + BD3 + BD[3]: GTDV Buffer Operation DisableBD[2] 3 3 read-write - zeroToClear - modify 0 - No parity error occurred + Enable buffer operation #0 1 - A parity error has occurred + Disable buffer operation #1 - TEND - Transmit End Flag + BD2 + BD[2]: GTADTR Buffer Operation DisableBD 2 2 - read-only + read-write 0 - A character is being transmitted. + Enable buffer operation #0 1 - Character transfer has been completed. + Disable buffer operation #1 - MPB - Multi-Processor + BD1 + BD[1]: GTPR Buffer Operation Disable 1 1 - read-only + read-write 0 - Data transmission cycles + Buffer operation is enabled #0 1 - ID transmission cycles + Buffer operation is disabled #1 - MPBT - Multi-Processor Bit Transfer + BD0 + BD[0]: GTCCR Buffer Operation Disable 0 0 read-write 0 - Data transmission cycles + Buffer operation is enabled #0 1 - ID transmission cycles + Buffer operation is disabled #1 @@ -54544,158 +43382,240 @@ FMS2,1,0: - SSR_FIFO - Serial Status Register(SCMR.SMIF = 0 and FCR.FM=1) - SSR - 0x04 - 8 + GTITC + General PWM Timer Interrupt and A/D Converter Start Request Skipping Setting Register + 0x44 + 32 read-write - 0x80 - 0xFD + 0x00000000 + 0xFFFFFFFF - TDFE - Transmit FIFO data empty flag - 7 - 7 + ADTBL + GTADTRB A/D Converter Start Request Link + 14 + 14 read-write - zeroToClear - modify 0 - The quantity of transmit data written in FTDR exceeds the specified transmit triggering number. + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - The quantity of transmit data written in FTDR is equal to or less than the specified transmit triggering number + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. #1 - RDF - Receive FIFO data full flag - 6 - 6 + ADTAL + GTADTRA A/D Converter Start Request Link + 12 + 12 read-write - zeroToClear - modify 0 - The quantity of receive data written in FRDR falls below the specified receive triggering number. + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - The quantity of receive data written in FRDR is equal to or greater than the specified receive triggering number. + Link with GPTn_OVF/GPTn_UDF interrupt skipping function #1 - ORER - Overrun Error Flag + IVTT + GPT_OVF/GPT_UDF Interrupt Skipping Count Select + 8 + 10 + read-write + + + 000 + No skipping + #000 + + + 001 + Skipping count of 1 + #001 + + + 010 + Skipping count of 2 + #010 + + + 011 + Skipping count of 3 + #011 + + + 100 + Skipping count of 4 + #100 + + + 101 + Skipping count of 5 + #101 + + + 110 + Skipping count of 6 + #110 + + + 111 + Skipping count of 7. + #111 + + + + + IVTC + GPT_OVF/GPT_UDF Interrupt Skipping Function Select + 6 + 7 + read-write + + + 00 + Do not perform skipping + #00 + + + 01 + Count and skip both overflow and underflow for saw waves and crest for triangle waves + #01 + + + 10 + Count and skip both overflow and underflow for saw waves and trough for triangle waves + #10 + + + 11 + Count and skip both overflow and underflow for saw waves and both crest and trough for triangle waves. + #11 + + + + + ITLF + GTCCRF Compare Match Interrupt Link 5 5 read-write - zeroToClear - modify 0 - No overrun error occurred + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - An overrun error has occurred + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. #1 - FER - Framing Error Flag + ITLE + GTCCRE Compare Match Interrupt Link 4 4 read-write - zeroToClear - modify 0 - No framing error occurred. + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - A framing error has occurred. + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. #1 - PER - Parity Error Flag + ITLD + GTCCRD Compare Match Interrupt Link 3 3 read-write - zeroToClear - modify 0 - No parity error occurred. + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - A parity error has occurred. + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. #1 - TEND - Transmit End Flag + ITLC + GTCCRC Compare Match Interrupt Link 2 2 read-write - zeroToClear - modify 0 - A character is being transmitted or standing by for transmission. + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - Character transfer has been completed. + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. #1 - DR - Receive Data Ready flag(Valid only in asynchronous mode(including multi-processor) and FIFO selected) + ITLB + GTCCRB Compare Match/Input Capture Interrupt Link + 1 + 1 + read-write + + + 0 + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function + #0 + + + 1 + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. + #1 + + + + + ITLA + GTCCRA Compare Match/Input Capture Interrupt Link 0 0 read-write - zeroToClear - modify 0 - Receiving is in progress, or no received data has remained in FRDR after normally completed receiving.(receive FIFO is empty) + Do not link with GPTn_OVF/GPTn_UDF interrupt skipping function #0 1 - Next receive data has not been received for a period after normal completed receiving, , when data is stored in FIFO to equal or less than receive triggering number. + Link with GPTn_OVF/GPTn_UDF interrupt skipping function. #1 @@ -54703,273 +43623,460 @@ FMS2,1,0: - SSR_SMCI - Serial Status Register(SCMR.SMIF = 1) - SSR - 0x04 - 8 + GTCNT + General PWM Timer Counter + 0x48 + 32 read-write - 0x84 - 0xFF + 0x00000000 + 0xFFFFFFFF - TDRE - Transmit Data Empty Flag - 7 - 7 + GTCNT + Counter + 0 + 31 + read-write + + + + + 6 + 4 + + + A + A + 0 + + + B + B + 1 + + + C + C + 2 + + + E + E + 3 + + + D + D + 4 + + + F + F + 5 + + + GTCCR[%s] + General PWM Timer Compare Capture Register + 0x4C + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTCCR + Compare Capture Register A + 0 + 31 + read-write + + + + + GTPR + General PWM Timer Cycle Setting Register + 0x64 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTPR + Cycle Setting Register + 0 + 31 + read-write + + + + + GTPBR + General PWM Timer Cycle Setting Buffer Register + 0x68 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTPBR + Cycle Setting Buffer Register + 0 + 31 + read-write + + + + + GTPDBR + General PWM Timer Cycle Setting Double-Buffer Register + 0x6C + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTPDBR + Cycle Setting Double-Buffer Register + 0 + 31 + read-write + + + + + GTADTRA + A/D Converter Start Request Timing Register A + 0x70 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTADTRA + A/D Converter Start Request Timing Register A + 0 + 31 + read-write + + + + + GTADTRB + A/D Converter Start Request Timing Register B + 0x7C + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTADTRB + A/D Converter Start Request Timing Register B + 0 + 31 + read-write + + + + + GTADTBRA + A/D Converter Start Request Timing Buffer Register A + 0x74 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTADTBRA + A/D Converter Start Request Timing Buffer Register A + 0 + 31 + read-write + + + + + GTADTBRB + A/D Converter Start Request Timing Buffer Register B + 0x80 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTADTBRB + A/D Converter Start Request Timing Buffer Register B + 0 + 31 + read-write + + + + + GTADTDBRA + A/D Converter Start Request Timing Double-Buffer Register A + 0x78 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTADTDBRA + A/D Converter Start Request Timing Double-Buffer Register A + 0 + 31 + read-write + + + + + GTADTDBRB + A/D Converter Start Request Timing Double-Buffer Register B + 0x84 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + GTADTDBRB + A/D Converter Start Request Timing Double-Buffer Register B + 0 + 31 read-write - zeroToClear - modify - - - 0 - Transmit data is in TDR register - #0 - - - 1 - No transmit data is in TDR register - #1 - - + + + + GTDTCR + General PWM Timer Dead Time Control Register + 0x88 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - RDRF - Receive Data Full Flag - 6 - 6 + TDFER + GTDVD Setting + 8 + 8 read-write - zeroToClear - modify 0 - No received data is in RDR register + Set GTDVU and GTDVD separately #0 1 - Received data is in RDR register + Automatically set the value written to GTDVU to GTDVD #1 - ORER - Overrun Error Flag + TDBDE + GTDVD Buffer Operation Enable 5 5 read-write - zeroToClear - modify 0 - No overrun error occurred + Disable GTDVD buffer operation #0 1 - An overrun error has occurred + Enable GTDVD buffer operation #1 - ERS - Error Signal Status Flag + TDBUE + GTDVU Buffer Operation Enable 4 4 read-write - zeroToClear - modify 0 - Low error signal not responded + Disable GTDVU buffer operation #0 1 - Low error signal responded + Enable GTDVU buffer operation #1 - PER - Parity Error Flag - 3 - 3 + TDE + Negative-Phase Waveform Setting + 0 + 0 read-write - zeroToClear - modify - - - 0 - No parity error occurred - #0 - - - 1 - A parity error has occurred - #1 - - - - - TEND - Transmit End Flag - 2 - 2 - read-only 0 - A character is being transmitted. + GTCCRB is set without using GTDVU and GTDVD. #0 1 - Character transfer has been completed. + GTDVU and GTDVD are used to set the compare match value for negative-phase waveform with dead time automatically in GTCCRB. #1 + + + + GTDVU + General PWM Timer Dead Time Value Register U + 0x8C + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + - MPB - Multi-ProcessorThis bit should be 0 in smart card interface mode. - 1 - 1 - read-only - - - MPBT - Multi-Processor Bit TransferThis bit should be 0 in smart card interface mode. + GTDVU + Dead Time Value Register U 0 - 0 + 31 read-write - RDR - Receive Data Register - 0x05 - 8 - read-only - 0x00 - 0xFF + GTDVD + General PWM Timer Dead Time Value Register D + 0x90 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF - RDR - RDR is an 8-bit register that stores receive data. + GTDVD + Dead Time Value Register D 0 - 7 - read-only + 31 + read-write - SCMR - Smart Card Mode Register - 0x06 - 8 + GTDBU + General PWM Timer Dead Time Buffer Register U + 0x94 + 32 read-write - 0xF2 - 0xFF + 0xFFFFFFFF + 0xFFFFFFFF - BCP2 - Base Clock Pulse 2Selects the number of base clock cycles in combination with the SMR.BCP[1:0] bits - 7 - 7 + GTDVU + Dead Time Buffer Register U + 0 + 31 read-write - - - 0 - S=93(SMR.BCP[1:0]=00), 128(SMR.BCP[1:0]=01), 186(SMR.BCP[1:0]=10), 512(SMR.BCP[1:0]=11) - #0 - - - 1 - S=32(SMR.BCP[1:0]=00), 64(SMR.BCP[1:0]=01), 372(SMR.BCP[1:0]=10), 256(SMR.BCP[1:0]=11) - #1 - - + + + + GTDBD + General PWM Timer Dead Time Buffer Register D + 0x98 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + - CHR1 - Character Length 1(Only valid in asynchronous mode) - 4 - 4 + GTDBD + Dead Time Buffer Register D + 0 + 31 read-write - - - 0 - Transmit/receive in 9-bit data length - #0 - - - 1 - Transmit/receive in 8-bit data length(SMR.CHR=0) / in 7bit data length(SMR.CHR=1) - #1 - - + + + + GTSOS + General PWM Timer Output Protection Function Status Register + 0x9C + 32 + read-only + 0x00000000 + 0xFFFFFFFF + - SDIR - Transmitted/Received Data Transfer DirectionNOTE: The setting is invalid and a fixed data length of 8 bits is used in modes other than asynchronous mode.Set this bit to 1 if operation is to be in simple I2C mode. - 3 - 3 - read-write + SOS + Output Protection Function Status + 0 + 1 + read-only - 0 - Transfer with LSB first - #0 + 00 + Normal operation + #00 - 1 - Transfer with MSB first - #1 + 01 + Protected state (GTCCRA = 0 is set during transfer at trough or crest) + #01 - - - - SINV - Transmitted/Received Data InvertSet this bit to 0 if operation is to be in simple I2C mode. - 2 - 2 - read-write - - 0 - TDR contents are transmitted as they are. Receive data is stored as it is in RDR. - #0 + 10 + Protected state (GTCCRA >= GTPR is set during transfer at trough) + #10 - 1 - TDR contents are inverted before being transmitted. Receive data is stored in inverted form in RDR. - #1 + 11 + Protected state (GTCCRA >= GTPR is set during transfer at crest) + #11 + + + + GTSOTR + General PWM Timer Output Protection Function Temporary Release Register + 0xA0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - SMIF - Smart Card Interface Mode Select + SOTR + Output Protection Function Temporary Release 0 0 read-write 0 - Non-smart card interface mode(Asynchronous mode, clock synchronous mode, simple SPI mode, or simple I2C mode) + Do not release protected state #0 1 - Smart card interface mode + Release protected state #1 @@ -54977,174 +44084,336 @@ FMS2,1,0: - SEMR - Serial Extended Mode Register - 0x07 - 8 + GTICLF + General PWM Timer Inter Channel Logical Operation Function Setting Register + 0xB8 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xffffffff - RXDESEL - Asynchronous Start Bit Edge Detection Select(Valid only in asynchronous mode) - 7 - 7 + ICLFA + GTIOCnA Output Logical Operation Function Select + 0 + 2 read-write - 0 - The low level on the RXDn pin is detected as the start bit. - #0 + 000 + A (no delay) + #000 - 1 - A falling edge on the RXDn pin is detected as the start bit. - #1 + 001 + NOT A (no delay) + #001 + + + 010 + C (1PCLKGPT delay) + #010 + + + 011 + NOT C (1PCLKGPT delay) + #011 + + + 100 + A AND C (1PCLKGPT delay) + #100 + + + 101 + A OR C (1PCLKGPT delay) + #101 + + + 110 + A EXOR C (1PCLKGPT delay) + #110 + + + 111 + A NOR C (1PCLKGPT delay) + #111 - BGDM - Baud Rate Generator Double-Speed Mode Select(Only valid the CKE[1] bit in SCR is 0 in asynchronous mode). - 6 - 6 + ICLFSELC + Inter Channel Signal C Select + 4 + 9 read-write - 0 - Baud rate generator outputs the clock with normal frequency. - #0 + 0x00 + GTIOC0A + 0x00 - 1 - Baud rate generator outputs the clock with doubled frequency. - #1 + 0x01 + GTIOC0B + 0x01 + + + 0x02 + GTIOC1A + 0x02 + + + 0x03 + GTIOC1B + 0x03 + + + 0x04 + GTIOC2A + 0x04 + + + 0x05 + GTIOC2B + 0x05 + + + 0x06 + GTIOC3A + 0x06 + + + 0x07 + GTIOC3B + 0x07 + + + 0x08 + GTIOC4A + 0x08 + + + 0x09 + GTIOC4B + 0x09 + + + 0x0A + GTIOC5A + 0x0a + + + 0x0B + GTIOC5B + 0x0b + + + 0x0C + GTIOC6A + 0x0c + + + 0x0D + GTIOC6B + 0x0d + + + 0x0E + GTIOC7A + 0x0e + + + 0x0F + GTIOC7B + 0x0f + + + 0x10 + GTIOC8A + 0x10 + + + 0x11 + GTIOC8B + 0x11 + + + 0x12 + GTIOC9A + 0x12 + + + 0x13 + GTIOC9B + 0x13 + + + Others + Setting prohibited + true - NFEN - Digital Noise Filter Function Enable(The NFEN bit should be 0 without simple I2C mode and asynchronous mode.)In asynchronous mode, for RXDn input only. In simple I2C mode, for RXDn/TxDn input. - 5 - 5 + ICLFB + GTIOCnB Output Logical Operation Function Select + 16 + 18 read-write - 0 - Noise cancellation function for the RXDn/SSCLn and SSDAn input signal is disabled. - #0 + 000 + B (no delay) + #000 - 1 - Noise cancellation function for the RXDn/SSCLn and SSDAn input signal is enabled. - #1 + 001 + NOT B (no delay) + #001 + + + 010 + D (1PCLKGPT delay) + #010 + + + 011 + NOT D (1PCLKGPT delay) + #011 + + + 100 + B AND D (1PCLKGPT delay) + #100 + + + 101 + B OR D (1PCLKGPTn delay) + #101 + + + 110 + B EXOR D (1PCLKGPT delay) + #110 + + + 111 + B NOR D (1PCLKGPT delay) + #111 - ABCS - Asynchronous Mode Base Clock Select(Valid only in asynchronous mode) - 4 - 4 + ICLFSELD + Inter Channel Signal D Select + 20 + 25 read-write - 0 - Selects 16 base clock cycles for 1-bit period. - #0 + 0x00 + GTIOC0A + 0x00 - 1 - Selects 8 base clock cycles for 1-bit period. - #1 + 0x01 + GTIOC0B + 0x01 + + + 0x02 + GTIOC1A + 0x02 + + + 0x03 + GTIOC1B + 0x03 + + + 0x04 + GTIOC2A + 0x04 + + + 0x05 + GTIOC2B + 0x05 + + + 0x06 + GTIOC3A + 0x06 + + + 0x07 + GTIOC3B + 0x07 + + + 0x08 + GTIOC4A + 0x08 + + + 0x09 + GTIOC4B + 0x09 + + + 0x0A + GTIOC5A + 0x0a - - - - ABCSE - Asynchronous Mode Extended Base Clock Select 1(Valid only in asynchronous mode and SCR.CKE[1]=0) - 3 - 3 - read-write - - 0 - Clock cycles for 1-bit period is decided with combination between BGDM and ABCS in SEMR. - #0 + 0x0B + GTIOC5B + 0x0b - 1 - Baud rate is 6 base clock cycles for 1-bit period and the clock of a double frequency is output from the baud rate generator. - #1 + 0x0C + GTIOC6A + 0x0c - - - - BRME - Bit Rate Modulation Enable - 2 - 2 - read-write - - 0 - Bit rate modulation function is disabled. - #0 + 0x0D + GTIOC6B + 0x0d - 1 - Bit rate modulation function is enabled. - #1 + 0x0E + GTIOC7A + 0x0e - - - - - - SNFR - Noise Filter Setting Register - 0x08 - 8 - read-write - 0x00 - 0xFF - - - NFCS - Noise Filter Clock Select - 0 - 2 - read-write - - 000 - The clock signal divided by 1 is used with the noise filter.(In asynchronous mode) - #000 + 0x0F + GTIOC7B + 0x0f - 001 - The clock signal divided by 1 is used with the noise filter.(In simple I2C mode) - #001 + 0x10 + GTIOC8A + 0x10 - 010 - The clock signal divided by 2 is used with the noise filter.(In simple I2C mode) - #010 + 0x11 + GTIOC8B + 0x11 - 011 - The clock signal divided by 4 is used with the noise filter.(In simple I2C mode) - #011 + 0x12 + GTIOC9A + 0x12 - 100 - The clock signal divided by 8 is used with the noise filter.(In simple I2C mode) - #100 + 0x13 + GTIOC9B + 0x13 - others - Settings prohibited. + Others + Setting prohibited true @@ -55152,293 +44421,256 @@ FMS2,1,0: - SIMR1 - I2C Mode Register 1 - 0x09 - 8 + GTPC + General PWM Timer Period Count Register + 0xBC + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xffffffff - IICDL - SDA Delay Output SelectCycles below are of the clock signal from the on-chip baud rate generator. - 3 - 7 + PCEN + Period Count Function Enable + 0 + 0 read-write - 00000 - No output delay - #00000 + 0 + Period count function is disabled + #0 - others - (IICDL - 1 ) to IIDCDL cycles. The delay is in the clock cycles from the on-chip baud rate generator. - true + 1 + Period count function is enabled + #1 - IICM - Simple I2C Mode Select - 0 - 0 + ASTP + Automatic Stop Function Enable + 8 + 8 read-write 0 - Asynchronous mode, Multi-processor mode, Clock synchronous mode(SCMR.SMIF=0) /Smart card interface mode(SCMR.SMIF=1) + Automatic stop function is disabled #0 1 - Simple I2C mode(SCMR.SMIF=0) / Setting prohibited.(SCMR.SMIF=1) + Automatic stop function is enabled #1 + + PCNT + Period Counter + 16 + 27 + read-write + - SIMR2 - I2C Mode Register 2 - 0x0A - 8 + GTSECSR + General PWM Timer Operation Enable Bit Simultaneous Control Channel Select Register + 0xD0 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xffffffff - IICACKT - ACK Transmission Data - 5 - 5 + SECSEL0 + Channel 0 Operation Enable Bit Simultaneous Control Channel Select + 0 + 0 read-write 0 - ACK transmission + Disable simultaneous control #0 1 - NACK transmission and reception of ACK/NACK + Enable simultaneous control #1 - IICCSC - Clock Synchronization + SECSEL1 + Channel 1 Operation Enable Bit Simultaneous Control Channel Select 1 1 read-write 0 - No synchronization with the clock signal + Disable simultaneous control #0 1 - Synchronization with the clock signal + Enable simultaneous control #1 - IICINTM - I2C Interrupt Mode Select - 0 - 0 + SECSEL2 + Channel 2 Operation Enable Bit Simultaneous Control Channel Select + 2 + 2 read-write 0 - Use ACK/NACK interrupts. + Disable simultaneous control #0 1 - Use reception and transmission interrupts + Enable simultaneous control #1 - - - - SIMR3 - I2C Mode Register 3 - 0x0B - 8 - read-write - 0x00 - 0xFF - - IICSCLS - SCL Output Select - 6 - 7 + SECSEL3 + Channel 3 Operation Enable Bit Simultaneous Control Channel Select + 3 + 3 read-write - 00 - Serial clock output - #00 - - - 01 - Generate a start, restart, or stop condition. - #01 - - - 10 - Output the low level on the SSCLn pin. - #10 + 0 + Disable simultaneous control + #0 - 11 - Place the SSCLn pin in the high-impedance state. - #11 + 1 + Enable simultaneous control + #1 - IICSDAS - SDA Output Select + SECSEL4 + Channel 4 Operation Enable Bit Simultaneous Control Channel Select 4 - 5 + 4 read-write - 00 - Serial data output - #00 - - - 01 - Generate a start, restart, or stop condition. - #01 - - - 10 - Output the low level on the SSDAn pin. - #10 + 0 + Disable simultaneous control + #0 - 11 - Place the SSDAn pin in the high-impedance state. - #11 + 1 + Enable simultaneous control + #1 - IICSTIF - Issuing of Start, Restart, or Stop Condition Completed Flag(When 0 is written to IICSTIF, it is cleared to 0.) - 3 - 3 + SECSEL5 + Channel 5 Operation Enable Bit Simultaneous Control Channel Select + 5 + 5 read-write - zeroToClear - modify 0 - There are no requests for generating conditions or a condition is being generated. + Disable simultaneous control #0 1 - A start, restart, or stop condition is completely generated. + Enable simultaneous control #1 - IICSTPREQ - Stop Condition Generation - 2 - 2 + SECSEL6 + Channel 6 Operation Enable Bit Simultaneous Control Channel Select + 6 + 6 read-write 0 - A stop condition is not generated. + Disable simultaneous control #0 1 - A stop condition is generated. + Enable simultaneous control #1 - IICRSTAREQ - Restart Condition Generation - 1 - 1 + SECSEL7 + Channel 7 Operation Enable Bit Simultaneous Control Channel Select + 7 + 7 read-write 0 - A restart condition is not generated. + Disable simultaneous control #0 1 - A restart condition is generated. + Enable simultaneous control #1 - IICSTAREQ - Start Condition Generation - 0 - 0 + SECSEL8 + Channel 8 Operation Enable Bit Simultaneous Control Channel Select + 8 + 8 read-write 0 - A start condition is not generated. + Disable simultaneous control #0 1 - A start condition is generated. + Enable simultaneous control #1 - - - - SISR - I2C Status Register - 0x0C - 8 - read-only - 0x00 - 0xCB - - IICACKR - ACK Reception Data Flag - 0 - 0 - read-only + SECSEL9 + Channel 9 Operation Enable Bit Simultaneous Control Channel Select + 9 + 9 + read-write 0 - ACK received + Disable simultaneous control #0 1 - NACK received + Enable simultaneous control #1 @@ -55446,971 +44678,970 @@ FMS2,1,0: - SPMR - SPI Mode Register - 0x0D - 8 + GTSECR + General PWM Timer Operation Enable Bit Simultaneous Control Register + 0xD4 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xffffffff - CKPH - Clock Phase Select - 7 - 7 + SBDCE + GTCCR Register Buffer Operation Simultaneous Enable + 0 + 0 read-write 0 - Clock is not delayed. + Disable simultaneous enabling GTCCR buffer operations #0 1 - Clock is delayed. + Enable GTCCR register buffer operations simultaneously #1 - CKPOL - Clock Polarity Select - 6 - 6 + SBDPE + GTPR Register Buffer Operation Simultaneous Enable + 1 + 1 read-write 0 - Clock polarity is not inverted. + Disable simultaneous enabling GTPR buffer operations #0 1 - Clock polarity is inverted + Enable GTPR register buffer operations simultaneously #1 - MFF - Mode Fault Flag - 4 - 4 + SBDCD + GTCCR Register Buffer Operation Simultaneous Disable + 8 + 8 read-write - zeroToClear - modify 0 - No mode fault error + Disable simultaneous disabling GTCCR buffer operations #0 1 - Mode fault error + Disable GTCCR register buffer operations simultaneously #1 - MSS - Master Slave Select - 2 - 2 + SBDPD + GTPR Register Buffer Operation Simultaneous Disable + 9 + 9 read-write 0 - Transmission is through the TXDn pin and reception is through the RXDn pin (master mode). + Disable simultaneous disabling GTPR buffer operations #0 1 - Reception is through the TXDn pin and transmission is through the RXDn pin (slave mode). + Disable GTPR register buffer operations simultaneously #1 - CTSE - CTS Enable - 1 - 1 + SPCE + Period Count Function Simultaneous Enable + 16 + 16 read-write 0 - CTS function is disabled (RTS output function is enabled). + Disable simultaneous enabling period count function #0 1 - CTS function is enabled. + Enable period count function simultaneously #1 - SSE - SSn Pin Function Enable - 0 - 0 + SPCD + Period Count Function Simultaneous Disable + 24 + 24 read-write 0 - SSn pin function is disabled. + Disable simultaneous disabling period count function #0 1 - SSn pin function is enabled. + Disable period count function simultaneously #1 + + + + R_GPT1 + 0x40078100 + + + R_GPT2 + 0x40078200 + + + R_GPT3 + 0x40078300 + + + R_GPT4 + 0x40078400 + + + R_GPT5 + 0x40078500 + + + R_GPT6 + 0x40078600 + + + R_GPT7 + 0x40078700 + + + R_GPT8 + 0x40078800 + + + R_GPT9 + 0x40078900 + + + R_GPT10 + 0x40078A00 + + + R_GPT11 + 0x40078B00 + + + R_GPT12 + 0x40078C00 + + + R_GPT13 + 0x40078D00 + + + R_GPT_ODC + PWM Delay Generation Circuit + 0x4007B000 + + 0x00000000 + 0x004 + registers + + + 0x00000018 + 0x020 + registers + + + + 4 + 4 + GTDLYR[%s] + PWM DELAY RISING + 0x18 + + A + GTIOCA Output Delay Register + 0 + 16 + read-write + 0x0000 + 0xFFFF + + + DLY + GTIOCnA Output Rising Edge Delay Setting + 0 + 4 + read-write + + + 00000 + No delay on rising edges + #00000 + + + others + Delay of DLY/32 times the PCLKD period is applied. + true + + + + + + + B + GTIOCB Output Delay Register + 2 + 16 + read-write + 0x0000 + 0xFFFF + + + DLY + GTIOCnA Output Rising Edge Delay Setting + 0 + 4 + read-write + + + 00000 + No delay on rising edges + #00000 + + + others + Delay of DLY/32 times the PCLKD period is applied. + true + + + + + + + + GTDLYF[%s] + PWM DELAY FALLING + 0x28 + - TDRHL - Transmit 9-bit Data Register - 0x0E + GTDLYCR1 + PWM Output Delay Control Register1 + 0x00 16 read-write - 0xFFFF - 0xFFFF - - - TDRHL - TDRHL is a 16-bit register that stores transmit data. - 0 - 15 - write-only - - - - - FTDRHL - Transmit FIFO Data Register HL - TDRHL - 0x0E - 16 - write-only - 0xFFFF + 0x0000 0xFFFF - MPBT - Multi-processor transfer bit flag(Valid only in asynchronous mode and SMR.MP=1 and FIFO selected) - 9 - 9 - write-only + DLLMOD + DLL Mode Select + 8 + 8 + read-write 0 - Data transmission cycles + 5 bit-mode #0 1 - ID transmission cycles + 4 bit-mode #1 - TDAT - Serial transmit data (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) - 0 - 8 - write-only - - - - - FTDRH - Transmit FIFO Data Register H - TDRHL - 0x0E - 8 - write-only - 0xFF - 0xFF - - - MPBT - Multi-processor transfer bit flag(Valid only in asynchronous mode and SMR.MP=1 and FIFO selected) + DLYRST + PWM Delay Generation Circuit Reset 1 1 - write-only + read-write 0 - Data transmission cycles + Normal operation #0 1 - ID transmission cycles + Reset #1 - TDATH - Serial transmit data (b8) (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + DLLEN + DLL Operation Enable 0 0 - write-only - - - - - FTDRL - Transmit FIFO Data Register L - TDRHL - 0x0F - 8 - write-only - 0xFF - 0xFF - - - TDATL - Serial transmit data(b7-b0) (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) - 0 - 7 - write-only - - - - - RDRHL - Receive 9-bit Data Register - 0x10 - 16 - read-only - 0x0000 - 0xFFFF - - - RDRHL - RDRHL is an 16-bit register that stores receive data. - 0 - 15 - read-only + read-write + + + 0 + DLL operation is disabled + #0 + + + 1 + DLL operation is enabled + #1 + + - FRDRHL - Receive FIFO Data Register HL - RDRHL - 0x10 + GTDLYCR2 + PWM Output Delay Control Register2 + 0x02 16 - read-only + read-write 0x0000 0xFFFF - RDF - Receive FIFO data full flag(It is same as SSR.RDF) - 14 - 14 - read-only + 1 + 1 + DLYDENB%s + PWM Delay Generation Circuit Disenable for GTIOCB + 12 + 12 + read-write 0 - The quantity of receive data written in FRDRH and FRDRL falls below the specified receive triggering number. + Delay generation circuit of GTIOCB is based on DLYEN1. #0 1 - The quantity of receive data written in FRDRH and FRDRL is equal to or greater than the specified receive triggering number. + Delay generation circuit of GTIOCB is disabled. #1 - ORER - Overrun error flag(It is same as SSR.ORER) - 13 - 13 - read-only + 1 + 1 + DLYEN%s + PWM Delay Generation Circuit enable + 8 + 8 + read-write 0 - No overrun error occurred. + Delay generation circuit of channel is enabled #0 1 - An overrun error has occurred. + Delay generation circuit of channel is disabled. #1 - FER - Framing error flag - 12 - 12 - read-only + 4 + 1 + DLYBS%s + PWM Delay Generation Circuit bypass + 0 + 0 + read-write 0 - No framing error occurred at the first data of FRDRH and FRDRL. + Delay generation circuit of channel is bypassed. #0 1 - A framing error has occurred at the first data of FRDRH and FRDRL. + Delay generation circuit of channel is not bypassed. #1 + + + + + + R_GPT_OPS + Output Phase Switching for GPT + 0x40078FF0 + + 0x00000000 + 0x04 + registers + + + + OPSCR + Output Phase Switching Control Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - PER - Parity error flag - 11 - 11 - read-only + NFCS + External Input Noise Filter Clock selectionNoise filter sampling clock setting of the external input. + 30 + 31 + read-write - 0 - No parity error occurred at the first data of FRDRH and FRDRL. - #0 + 00 + PCLK/1 + #00 - 1 - A parity error has occurred at the first data of FRDRH and FRDRL. - #1 + 01 + PCLK/4 + #01 + + + 10 + PCLK/16 + #10 + + + 11 + PCLK/64 + #11 - DR - Receive data ready flag(It is same as SSR.DR) - 10 - 10 - read-only + NFEN + External Input Noise Filter Enable + 29 + 29 + read-write 0 - Receiving is in progress, or no received data has remained in FRDRH and FRDRL after normally completed receiving. + Do not use a noise filter to the external input. #0 1 - Next receive data has not been received for a period after normal completed receiving. + Use a noise filter to the external input. #1 - MPB - Multi-processor bit flag(Valid only in asynchronous mode with SMR.MP=1 and FIFO selected) It can read multi-processor bit corresponded to serial receive data(RDATA[8:0]) - 9 - 9 - read-only + GODF + Group output disable function + 26 + 26 + read-write 0 - Data transmission cycles + This bit function is ignored. #0 1 - ID transmission cycles + Group disable will clear OPSCR.EN Bit. #1 - RDAT - Serial receive data(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) - 0 - 8 - read-only - - - - - FRDRH - Receive FIFO Data Register H - RDRHL - 0x10 - 8 - read-only - 0x00 - 0xFF - - - RDF - Receive FIFO data full flag(It is same as SSR.RDF) - 6 - 6 - read-only + GRP + Output disabled source selection + 24 + 25 + read-write - 0 - The quantity of receive data written in FRDRH and FRDRL falls below the specified receive triggering number. - #0 + 00 + Select Group A output disable source + #00 - 1 - The quantity of receive data written in FRDRH and FRDRL is equal to or greater than the specified receive triggering number. - #1 + 01 + Select Group B output disable source + #01 + + + 10 + Select Group C output disable source + #10 + + + 11 + Select Group D output disable source + #11 - ORER - Overrun error flag(It is same as SSR.ORER) - 5 - 5 - read-only + ALIGN + Input phase alignment + 21 + 21 + read-write 0 - No overrun error occurred + Input phase is aligned to PCLK. #0 1 - An overrun error has occurred + Input phase is aligned PWM. #1 - FER - Framing error flag - 4 - 4 - read-only + RV + Output phase rotation direction reversal + 20 + 20 + read-write 0 - No framing error occurred at the first data of FRDRH and FRDRL + U/V/W-Phase output #0 1 - A framing error has occurred at the first data of FRDRH and FRDRL + Output to reverse the V / W-phase #1 - PER - Parity error flag - 3 - 3 - read-only + INV + Invert-Phase Output Control + 19 + 19 + read-write 0 - No parity error occurred at the first data of FRDRH and FRDRL + Positive Logic (Active High)output #0 1 - A parity error has occurred at the first data of FRDRH and FRDRL + Negative Logic (Active Low)output #1 - DR - Receive data ready flag(It is same as SSR.DR) - 2 - 2 - read-only + N + Negative-Phase Output (N) Control + 18 + 18 + read-write 0 - Receiving is in progress, or no received data has remained in FRDRH and FRDRL after normally completed receiving. + Level signal output #0 1 - Next receive data has not been received for a period after normal completed receiving. + PWM signal output (PWM of GPT0) #1 - MPB - Multi-processor bit flag(Valid only in asynchronous mode with SMR.MP=1 and FIFO selected) It can read multi-processor bit corresponded to serial receive data(RDATA[8:0]) - 1 - 1 - read-only + P + Positive-Phase Output (P) Control + 17 + 17 + read-write 0 - Data transmission cycles + Level signal output #0 1 - ID transmission cycles + PWM signal output (PWM of GPT0) #1 - RDATH - Serial receive data(b8)(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) - 0 - 0 - read-only - - - - - FRDRL - Receive FIFO Data Register L - RDRHL - 0x11 - 8 - read-only - 0x00 - 0xFF - - - RDATL - Serial receive data(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected)NOTE: When reading both of FRDRH register and FRDRL register, please read by an order of the FRDRH register and the FRDRL register. - 0 - 7 - read-only - - - - - MDDR - Modulation Duty Register - 0x12 - 8 - read-write - 0xFF - 0xFF - - - MDDR - MDDR corrects the bit rate adjusted by the BRR register. - 0 - 7 - read-write - - - - - DCCR - Data Compare Match Control Register - 0x13 - 8 - read-write - 0x40 - 0xFF - - - DCME - Data Compare Match Enable(Valid only in asynchronous mode(including multi-processor) - 7 - 7 + FB + External Feedback Signal EnableThis bit selects the input phase from the software settings and external input. + 16 + 16 read-write 0 - Address match function is disabled. + Select the external input. #0 1 - Address match function is enabled + Select the soft setting(OPSCR.UF, VF, WF). #1 - IDSEL - ID frame select(Valid only in asynchronous mode(including multi-processor) - 6 - 6 + EN + Enable-Phase Output Control + 8 + 8 read-write 0 - Always compare data regardless of the value of the MPB bit. + Not Output(Hi-Z external terminals). #0 1 - Compare data when the MPB bit is 1 (ID frame) only. + Output #1 - DFER - Data Compare Match Framing Error Flag + W + Input W-Phase MonitorThis bit monitors the state of the input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Software settings (UF/VF/WF) + 6 + 6 + read-only + + + V + Input V-Phase MonitorThis bit monitors the state of the input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Software settings (UF/VF/WF) + 5 + 5 + read-only + + + U + Input U-Phase MonitorThis bit monitors the state of the input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Software settings (UF/VF/WF) 4 4 + read-only + + + WF + Input Phase Soft Setting UFThis bit sets the input phase by the software settings.This bit setting is valid when the OPSCR.FB bit = 1. + 2 + 2 + read-write + + + VF + Input Phase Soft Setting VFThis bit sets the input phase by the software settings.This bit setting is valid when the OPSCR.FB bit = 1. + 1 + 1 + read-write + + + UF + Input Phase Soft Setting WFThis bit sets the input phase by the software settings.This bit setting is valid when the OPSCR.FB bit = 1. + 0 + 0 + read-write + + + + + + + R_GPT_POEG0 + Port Output Enable for GPT + 0x40042000 + + 0x00000000 + 0x04 + registers + + + + POEGG + POEG Group Setting Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + NFCS + Noise Filter Clock Select + 30 + 31 read-write - zeroToClear - modify - 0 - No framing error occurred - #0 + 00 + Sampling GTETRG pin input level for three times in every PCLKB. + #00 + + + 01 + Sampling GTETRG pin input level for three times in every PCLKB /8. + #01 + + + 10 + Sampling GTETRG pin input level for three times in every PCLKB /32. + #10 - 1 - A framing error has occurred - #1 + 11 + Sampling GTETRG pin input level for three times in every PCLKB /128. + #11 - DPER - Data Compare Match Parity Error Flag - 3 - 3 + NFEN + Noise Filter Enable + 29 + 29 read-write - zeroToClear - modify 0 - No parity error occurred + Filtering noise disabled #0 1 - A parity error has occurred + Filtering noise enabled #1 - DCMF - Data Compare Match Flag - 0 - 0 + INV + GTETRG Input Reverse + 28 + 28 read-write - zeroToClear - modify 0 - No matched + GTETRG Input #0 1 - Matched + GTETRG Input Reversed. #1 - - - - FCR - FIFO Control Register - 0x14 - 16 - read-write - 0xF800 - 0xFFFF - - RSTRG - RTS Output Active Trigger Number Select(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) - 12 - 15 - read-write + ST + GTETRG Input Status Flag + 16 + 16 + read-only - 0000 - Trigger number 0 - #0000 + 0 + GTETRG input after filtering is 0. + #0 - others - Triger number n (n= 0-15) - true + 1 + GTETRG input after filtering is 1. + #1 - RTRG - Receive FIFO data trigger number(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) + 6 + 1 + CDRE%s + Comparator Disable Request Enable. Note: Can be modified only once after a reset. 8 - 11 - read-write - - - 0000 - Trigger number 0 - #0000 - - - others - Triger number n (n= 0-15) - true - - - - - TTRG - Transmit FIFO data trigger number(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) - 4 - 7 - read-write - - - 0000 - Trigger number 0 - #0000 - - - others - Triger number n (n= 0-15) - true - - - - - DRES - Receive data ready error select bit(When detecting a reception data ready, the interrupt request is selected.) - 3 - 3 + 8 read-write 0 - reception data full interrupt (RXI) + A disable request of comparator 0 disabled. #0 1 - receive error interrupt (ERI) + A disable request of comparator 0 enabled. #1 - TFRST - Transmit FIFO Data Register Reset(Valid only in FCR.FM=1) - 2 - 2 + OSTPE + Oscillation Stop Detection EnableNote: Can be modified only once after a reset. + 6 + 6 read-write 0 - The number of data stored in FTDRH and FTDRL register are NOT made 0 + A output-disable request from the oscillation stop detection disabled. #0 1 - The number of data stored in FTDRH and FTDRL register are made 0 + A output-disable request from the oscillation stop detection enabled. #1 - RFRST - Receive FIFO Data Register Reset(Valid only in FCR.FM=1) - 1 - 1 + IOCE + Enable for GPT Output-Disable RequestNote: Can be modified only once after a reset. + 5 + 5 read-write 0 - The number of data stored in FRDRH and FRDRL register are NOT made 0 + Disable output-disable requests from GPT disable request #0 1 - The number of data stored in FRDRH and FRDRL register are made 0 + Enable output-disable requests from GPT disable request #1 - FM - FIFO Mode Select(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) - 0 - 0 + PIDE + Port Input Detection EnableNote: Can be modified only once after a reset. + 4 + 4 read-write 0 - Non-FIFO mode(Selects o TDR/RDR for communication) + A output-disable request from the GTETRG pins disabled. #0 1 - FIFO mode (Selects to FTDRH and FTDRL/FRDRH and FRDRL for communication) + A output-disable request from the GTETRG pins enabled. #1 - - - - FDR - FIFO Data Count Register - 0x16 - 16 - read-only - 0x0000 - 0xFFFF - - - T - Transmit FIFO Data CountIndicate the quantity of non-transmit data stored in FTDRH and FTDRL(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, while FCR.FM=1) - 8 - 12 - read-only - - - R - Receive FIFO Data CountIndicate the quantity of receive data stored in FRDRH and FRDRL(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, while FCR.FM=1) - 0 - 4 - read-only - - - - - LSR - Line Status Register - 0x18 - 16 - read-only - 0x0000 - 0xFFFF - - - PNUM - Parity Error CountIndicates the quantity of data with a parity error among the receive data stored in the receive FIFO data register (FRDRH and FRDRL). - 8 - 12 - read-only - - - FNUM - Framing Error CountIndicates the quantity of data with a framing error among the receive data stored in the receive FIFO data register (FRDRH and FRDRL). - 2 - 6 - read-only - - ORER - Overrun Error Flag (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) - 0 - 0 - read-only + SSF + Software Stop Flag + 3 + 3 + read-write 0 - No overrun error occurred + A output-disable request from software has not been generated. #0 1 - An overrun error has occurred + A output-disable request from software has been generated. #1 - - - - CDR - Compare Match Data Register - 0x1A - 16 - read-write - 0x0000 - 0xFFFF - - - CMPD - Compare Match DataCompare data pattern for address match wake-up function - 0 - 8 - read-write - - - - - SPTR - Serial Port Register - 0x1C - 8 - read-write - 0x03 - 0xFF - - SPB2IO - Serial port break I/O bit(It's selected whether the value of SPB2DT is output to TxD terminal.) + OSTPF + Oscillation Stop Detection Flag 2 2 read-write + zeroToClear + modify 0 - The value of SPB2DT bit is not output in TXD pin. + A output-disable request from the oscillation stop detection has not been generated. #0 1 - The value of SPB2DT bit is output in TXD pin. + A output-disable request from the oscillation stop detection has been generated. #1 - SPB2DT - Serial port break data select bit(The output level of TxD terminal is selected when SCR.TE = 0.) + IOCF + Real Time Overcurrent Detection Flag 1 1 read-write + zeroToClear + modify 0 - Low level is output on TXD pin + A output-disable request from GPT disable request or comparator interrupt has not been generated. #0 1 - High level is output on TXD pin + A output-disable request from GPT disable request or comparator interrupt has been generated. #1 - RXDMON - Serial input data monitor bit(The state of the RXD terminal is shown.) + PIDF + Port Input Detection Flag 0 0 - read-only + read-write + zeroToClear + modify 0 - RXD pin is low. + A output-disable request from the GTETRG pin has not been generated. #0 1 - RXD pin is high. + A output-disable request from the GTETRG pin has been generated. #1 @@ -56419,812 +45650,702 @@ FMS2,1,0: - - R_SCI1 - 0x40070020 - - - R_SCI2 - 0x40070040 - - - R_SCI3 - 0x40070060 - - - R_SCI4 - 0x40070080 - - - R_SCI5 - 0x400700A0 - - - R_SCI6 - 0x400700C0 - - - R_SCI7 - 0x400700E0 + + R_GPT_POEG1 + 0x40042100 - - R_SCI8 - 0x40070100 + + R_GPT_POEG2 + 0x40042200 - - R_SCI9 - 0x40070120 + + R_GPT_POEG3 + 0x40042300 - R_SDADC0 - - 0x4009C000 + R_ICU + Interrupt Controller Unit + 0x40006000 0x00000000 - 0x02 + 0x010 registers - 0x00000004 + 0x00000100 0x01 registers - 0x00000008 - 0x019 + 0x00000120 + 0x02 registers - 0x00000024 - 0x008 + 0x00000130 + 0x02 registers - 0x00000030 - 0x01 + 0x00000140 + 0x02 registers - 0x00000034 - 0x01 + 0x000001A0 + 0x04 registers - 0x0000003C - 0x01 + 0x00000200 + 0x02 + registers + + + 0x00000280 + 0x020 + registers + + + 0x00000300 + 0x180 registers - STC1 - Startup Control Register 1 - 0x0 - 16 + 16 + 0x1 + IRQCR[%s] + IRQ Control Register %s + 0x000 + 8 read-write - 0XFFFF + 0x00 + 0xFF - VSBIAS - Reference voltage select - 8 - 11 + FLTEN + IRQ Digital Filter Enable + 7 + 7 read-write - 0000 - 0.8V - #0000 - - - 0001 - 1.0V - #0001 - - - 0010 - 1.2V - #0010 - - - 0011 - 1.4V - #0011 + 0 + Digital filter disabled. + #0 - 0100 - 1.6V - #0100 + 1 + Digital filter enabled. + #1 + + + + FCLKSEL + IRQ Digital Filter Sampling Clock Select + 4 + 5 + read-write + - 0101 - 1.8V - #0101 + 00 + PCLKB + #00 - 0110 - 2.0V - #0110 + 01 + PCLKB/8 + #01 - 0111 - 2.2V - #0111 + 10 + PCLKB/32 + #10 - 1111 - 2.4V(only available when VREFSEL=0) - #1111 + 11 + PCLKB/64 + #11 - CLKDIV - SDADC24 Reference Clock Division + IRQMD + IRQ Detection Sense Select 0 - 3 + 1 read-write - 0000 - No Division - #0000 - - - 0001 - SDADCCLK/2 - #0001 - - - 0010 - SDADCCLK/3 - #0010 - - - 0011 - SDADCCLK/4 - #0011 + 00 + Falling edge + #00 - 0100 - SDADCCLK/5 - #0100 + 01 + Rising edge + #01 - 0101 - SDADCCLK/6 - #0101 + 10 + Rising and falling edges + #10 - 0110 - SDADCCLK/8 - #0110 + 11 + Low level + #11 + + + + + + NMISR + Non-Maskable Interrupt Status Register + 0x140 + 16 + read-only + 0x0000 + 0xFFFF + + + SPEST + CPU Stack pointer monitor Interrupt Status Flag + 12 + 12 + read-only + - 0111 - SDADCCLK/12 - #0111 + 0 + Interrupt not requested + #0 - 1000 - SDADCCLK/16 - #1000 + 1 + Interrupt requested. + #1 - SDADLPM - A/D conversion operation model select - 7 - 7 - read-write + BUSMST + MPU Bus Master Error Interrupt Status Flag + 11 + 11 + read-only 0 - Normal A/D conversion mode, SDADC Reference Clock: 4 MHz, Oversampingly clock: 1MHz + Interrupt not requested #0 + + 1 + Interrupt requested. + #1 + - VREFSEL - VREF mode select - 15 - 15 - read-write + BUSSST + MPU Bus Slave Error Interrupt Status Flag + 10 + 10 + read-only 0 - Internal VREF Mode + Interrupt not requested #0 + + 1 + Interrupt requested. + #1 + - - - - STC2 - Startup Control Register 2 - 0x04 - 8 - read-write - 0x00 - 0xFF - - BGRPON - BGR part power control - 0 - 0 + RECCST + RAM ECC Error Interrupt Status Flag + 9 + 9 + read-only 0 - Turn off power to ADBGR, SBIAS, VREFI, and ADREG + Interrupt not requested #0 1 - Turn onpower to ADBGR, SBIAS, VREFI, and ADREG + Interrupt requested. #1 - ADFPWDS - ADC reference supply part - 2 - 2 + RPEST + RAM Parity Error Interrupt Status Flag + 8 + 8 + read-only 0 - Power of ADREG controlled by BGRPON register + Interrupt not requested #0 1 - Power of ADREG is off regardless of BGRPON setting + Interrupt requested. #1 - ADCPON - ADREG forced power-down - 1 - 1 + NMIST + NMI Status Flag + 7 + 7 + read-only 0 - Turn off power to VBIAS, PGA and sigma-delta A/D converter + Interrupt not requested #0 1 - Turn on power to VBIAS, PGA and sigma-delta A/D converter + Interrupt requested. #1 - - - - 5 - 4 - PGAC[%s] - Input Multiplexer %s Setting Register - 0x08 - 32 - read-write - 0x00010040 - 0xFFFFFFFF - - PGAASN - Selection of the mode for specifying the number of A/D conversions in ADSCAN - 31 - 31 - read-write + OSTST + Oscillation Stop Detection Interrupt Status Flag + 6 + 6 + read-only 0 - Specify 1 to 8,032 times by using the value set in the PGACTN[2:0] and PGACTM[4:0] bits + Interrupt not requested for main oscillation stop #0 1 - Specify 1 to 255 times linearly by using the value set in the PGACTN[2:0] and PGACTM[4:0] bits + Interrupt requested for main oscillation stop. #1 - PGACVE - Calibration enable - 30 - 30 - read-write + VBATTST + VBATT monitor Interrupt Status Flag + 4 + 4 + read-only 0 - Do not calculate the calibration correction factor + Interrupt not requested #0 1 - Calculate the calibration correction factor + Interrupt requested. #1 - PGAREV - Single-End Input A/D Converted Data Inversion Select - 28 - 28 - read-write + LVD2ST + Voltage-Monitoring 2 Interrupt Status Flag + 3 + 3 + read-only 0 - Do not invert the conversion result data + Interrupt not requested #0 1 - Invert the conversion result data + Interrupt requested. #1 - PGAAVE - Selection of averaging processing - 26 - 27 - read-write + LVD1ST + Voltage-Monitoring 1 Interrupt Status Flag + 2 + 2 + read-only - 00 - Do not average the A/D conversion results - #00 - - - 01 - Do not average the A/D conversion results - #01 - - - 10 - Average the A/D conversion results and generates SDADC_ADI each time an A/D conversion occurs - #10 + 0 + Interrupt not requested + #0 - 11 - Perform averaging, and generate SDADC_ADI at each time of average value output (A/D conversion is performed N times). - #11 + 1 + Interrupt requested. + #1 - PGAAVN - Selection of the number of data to be averaged - 24 - 25 - read-write + WDTST + WDT Underflow/Refresh Error Status Flag + 1 + 1 + read-only - 00 - 8 - #00 + 0 + Interrupt not requested + #0 - 01 - 16 - #01 + 1 + Interrupt requested. + #1 + + + + IWDTST + IWDT Underflow/Refresh Error Status Flag + 0 + 0 + read-only + - 10 - 32 - #10 + 0 + Interrupt not requested + #0 - 11 - 64 - #11 + 1 + Interrupt requested. + #1 - PGACTN - Coefficient (n) selection of the A/D conversion count (N) in AUTOSCAN - 21 - 23 - read-write + TZFST + 13 + 13 + read-only - 000 - 0 - #000 + 0 + TRUST Zone Filter Error interrupt is not requested. + #0 - 001 - 1 - #001 + 1 + TRUST Zone Filter Error interrupt is requested. + #1 + + + + CPEST + 15 + 15 + read-only + - 010 - 2 - #010 + 0 + Cache RAM Parity Error interrupt is not requested. + #0 - 011 - 3 - #011 + 1 + Cache RAM Parity Error interrupt is requested. + #1 + + + + + + NMIER + Non-Maskable Interrupt Enable Register + 0x120 + 16 + read-write + 0x0000 + 0xFFFF + + + SPEEN + CPU Stack pointer monitor Interrupt Enable + 12 + 12 + read-write + - 100 - 4 - #100 + 0 + Disabled + #0 - 101 - 5 - #101 + 1 + Enabled. + #1 + + + + BUSMEN + MPU Bus Master Error Interrupt Enable + 11 + 11 + read-write + - 110 - 6 - #110 + 0 + Disabled + #0 - 111 - 7 - #111 + 1 + Enabled. + #1 - PGACTM - Coefficient (m) selection of the A/D conversion count (N) in AUTOSCAN - 16 - 20 - read-write - - - PGASEL - Analog Channel Input Mode Select - 15 - 15 + BUSSEN + MPU Bus Slave Error Interrupt Enable + 10 + 10 read-write 0 - Differential input mode + Disabled #0 1 - Single-end input mode + Enabled. #1 - PGAPOL - Polarity select - 14 - 14 + RECCEN + RAM ECC Error Interrupt Enable + 9 + 9 read-write 0 - Positive-side single-end input + Disabled #0 1 - Negative-side single-end input + Enabled. #1 - PGAOFS - Offset voltage select + RPEEN + RAM Parity Error Interrupt Enable 8 - 12 - read-write - - - PGAOSR - Oversampling ratio select - 5 - 7 + 8 read-write - 000 - 64 - #000 - - - 001 - 128 - #001 + 0 + Disabled + #0 - 010 - 256 - #010 + 1 + Enabled. + #1 + + + + NMIEN + NMI Pin Interrupt Enable + 7 + 7 + read-write + - 011 - 512 - #011 + 0 + Disabled + #0 - 100 - 1024 - #100 + 1 + Enabled. + #1 + + + + OSTEN + Oscillation Stop Detection Interrupt Enable + 6 + 6 + read-write + - 101 - 2048 - #101 + 0 + Disabled + #0 - others - Settings are prohibited. - true + 1 + Enabled. + #1 - PGAGC - Gain selection of a programmable gain instrumentation amplifier ( Gset1, Gset2, Gtotal ) - 0 + VBATTEN + VBATT monitor Interrupt Enable + 4 4 read-write - - 00000 - (1, 1, 1) - #00000 - - - 00100 - (2, 1, 2) - #00100 - - - 01000 - (3, 1, 3) - #01000 - - - 01100 - (4, 1, 4) - #01100 - - - 10000 - (8, 1, 8) - #10000 - - - 00001 - (1, 2, 2) - #00001 - - - 00101 - (2, 2, 4) - #00101 - - - 01001 - (3, 2, 6) - #01001 - - - 01101 - (4, 2, 8) - #01101 - - - 10001 - (8, 2, 16) - #10001 - - - 00010 - (1, 4, 4) - #00010 - - - 00110 - (2, 4, 8) - #00110 - - - 01010 - (3, 4, 12) - #01010 - - - 01110 - (4, 4, 16) - #01110 - - - 10010 - (8, 4, 32) - #10010 - - - 00011 - (1, 8, 8) - #00011 - - - 00111 - (2, 8, 16) - #00111 - - - 01011 - (3, 8, 24) - #01011 - - - 01111 - (4, 8, 32). - #01111 + + 0 + Disabled + #0 - others - Settings are prohibited. - true + 1 + Enabled. + #1 - - - - ADC1 - Sigma-Delta A/D Converter Control Register 1 - 0x1C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - PGASLFT - PGA offset self-diagnosis enable - 20 - 20 + LVD2EN + Voltage-Monitoring 2 Interrupt Enable + 3 + 3 read-write 0 - Disable PGA offset self-diagnosis + Disabled #0 1 - Enable PGA offset self-diagnosis + Enabled. #1 - PGADISC - Disconnection Detection Assist Setting - 17 - 17 + LVD1EN + Voltage-Monitoring 1 Interrupt Enable + 2 + 2 read-write 0 - Discharge + Disabled #0 1 - Pre-charge + Enabled. #1 - PGADISA - Control of disconnection detection - 16 - 16 + WDTEN + WDT Underflow/Refresh Error Interrupt Enable + 1 + 1 read-write 0 - Normal operation + Disabled #0 1 - State of disconnection detection + Enabled. #1 - SDADBMP - A/D conversion control of the signal from input multiplexer - 8 - 12 - read-write - - - SDADTMD - Selection of A/D conversion trigger signal - 4 - 4 + IWDTEN + IWDT Underflow/Refresh Error Interrupt Enable + 0 + 0 read-write 0 - Software trigger (conversion is started by a write to SFR) + Disabled #0 1 - Hardware trigger (conversion is started in synchronization with the event signal selected by ELC_SDADC24). + Enabled. #1 - SDADSCM - Selection of autoscan mode - 0 - 0 + TZFEN + 13 + 13 read-write 0 - Continuous scan mode + Disabled #0 1 - Single scan mode + Enabled #1 - - - - ADC2 - Sigma-Delta A/D Converter Control Register 2 - 0x20 - 8 - read-write - 0x00 - 0xFF - - SDADST - Control of A/D conversion - 0 - 0 + CPEEN + 15 + 15 read-write 0 - Stop A/D conversion + Disabled #0 1 - Start A/D conversion + Enabled #1 @@ -57232,1173 +46353,815 @@ FMS2,1,0: - ADCR - Sigma-delta A/D Converter Conversion Result Register - 0x24 - 32 + NMICLR + Non-Maskable Interrupt Status Clear Register + 0x130 + 16 read-write - 0x00000000 - 0xFFFFFFFF + 0x0000 + 0xFFFF - SDADCRC - Channel number for an A/D conversion result - 25 - 27 - read-only + SPECLR + CPU Stack Pointer Monitor Interrupt Clear + 12 + 12 + write-only - 000 - Reset value (Conversion result is invalid) - #000 - - - 001 - Input multiplexer 0 (ANSD0P / ANSD0N) - #001 - - - 010 - Input multiplexer 1 (ANSD1P / ANSD1N) - #010 - - - 011 - Input multiplexer 2 (ANSD2P / ANSD2N) - #011 - - - 100 - Input multiplexer 3 (ANSD3P / ANSD3N) - #100 + 0 + No effect. + #0 - 101 - Input multiplexer 4 (AMP0O / AMP1O) - #101 + 1 + Clear the NMISR.SPEST flag. + #1 - SDADCRS - Status of an A/D conversion result - 24 - 24 - read-only + BUSMCLR + Bus Master Error Clear + 11 + 11 + write-only 0 - Normal status (within the range) + No effect. #0 1 - Overflow occurred + Clear the NMISR.BUSMST flag. #1 - SDADCRD - The 24-bit A/D conversion result - 0 - 23 - read-only - - - - - ADAR - Sigma-delta A/D Converter Average Value Register - 0x28 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SDADMVC - Channel number for an A/D conversion result - 25 - 27 - read-only + BUSSCLR + Bus Slave Error Clear + 10 + 10 + write-only - 000 - Reset value (Conversion result is invalid) - #000 + 0 + No effect. + #0 - 001 - Input multiplexer 0 (ANSD0P / ANSD0N) - #001 + 1 + Clear the NMISR.BUSSST flag. + #1 + + + + RECCCLR + SRAM ECC Error Clear + 9 + 9 + write-only + - 010 - Input multiplexer 1 (ANSD1P / ANSD1N) - #010 + 0 + No effect. + #0 - 011 - Input multiplexer 2 (ANSD2P / ANSD2N) - #011 + 1 + Clear the NMISR.RECCST flag. + #1 + + + + RPECLR + SRAM Parity Error Clear + 8 + 8 + write-only + - 100 - Input multiplexer 3 (ANSD3P / ANSD3N) - #100 + 0 + No effect. + #0 - 101 - Input multiplexer 4 (AMP0O / AMP1O). - #101 + 1 + Clear the NMISR.RPEST flag. + #1 - SDADMVS - Status of an A/D conversion result - 24 - 24 - read-only + NMICLR + NMI Clear + 7 + 7 + write-only 0 - Normal status (within the range) + No effect. #0 1 - Overflow occurred + Clear the NMISR.NMIST flag. #1 - SDADMVD - The 24-bit A/D average value - 0 - 23 - read-only - - - - - CLBC - Calibration Control Register - 0x30 - 8 - 0x00 - 0xFF - - - CLBMD - These bits are read as 0. The write value should be 0. - 0 - 1 - read-write + OSTCLR + OST Clear + 6 + 6 + write-only - 00 - Internal calibration mode - #00 + 0 + No effect. + #0 - 01 - External offset calibration mode - #01 + 1 + Clear the NMISR.OSTST flag. + #1 + + + + VBATTCLR + VBATT Clear + 4 + 4 + write-only + - 10 - External gain calibration mode - #10 + 0 + No effect. + #0 - 11 - Settings are prohibited - #11 + 1 + Clear the NMISR.VBATTST flag. + #1 - - - - CLBSTR - Calibration Start Control Register - 0x34 - 8 - read-write - 0x00 - 0xFF - - CLBST - Calibration start control - 0 - 0 - read-write + LVD2CLR + LVD2 Clear + 3 + 3 + write-only 0 - Disable writing + No effect. #0 1 - Start calibration + Clear the NMISR.LVD2ST flag. #1 - - - - CLBSSR - Calibration Status Register - 0x3C - 8 - read-only - 0x00 - - CLBSS - Calibration status - 0 - 0 - read-only + LVD1CLR + LVD1 Clear + 2 + 2 + write-only 0 - Calibration is not running + No effect. #0 1 - Calibration is running + Clear the NMISR.LVD1ST flag. #1 - - - - - - R_SDHI0 - SD/MMC Host Interface - 0x40062000 - - 0x00000000 - 0x04 - registers - - - 0x00000008 - 0x04C - registers - - - 0x00000058 - 0x00C - registers - - - 0x00000068 - 0x00C - registers - - - 0x000001B0 - 0x04 - registers - - - 0x000001C0 - 0x04 - registers - - - 0x000001CC - 0x04 - registers - - - 0x000001E0 - 0x04 - registers - - - - SD_CMD - Command Type Register - 0x000 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - CMD12AT - Multiple Block Transfer Mode (enabled at multiple block transfer) - 14 - 15 - read-write + WDTCLR + WDT Clear + 1 + 1 + write-only - 00 - CMD12 is automatically issued at multiple block transfer. - #00 + 0 + No effect. + #0 - 01 - CMD12 is not automatically issued at multiple block transfer. - #01 + 1 + Clear the NMISR.WDTST flag. + #1 + + + + IWDTCLR + IWDT Clear + 0 + 0 + write-only + - 10 - Setting prohibited - #10 + 0 + No effect. + #0 - 11 - Setting prohibited - #11 + 1 + Clear the NMISR.IWDTST flag. + #1 - TRSTP - Single/Multiple Block Transfer (enabled when the command with data is handled) + TZFCLR 13 13 read-write 0 - Single block transfer + No effect #0 1 - Multiple block transfer + Clear the NMISR.TZFCLR flag #1 - CMDRW - Write/Read Mode (enabled when the command with data is handled) - 12 - 12 + CPECLR + 15 + 15 read-write 0 - Write (SD/MMC host interface -> SD card/MMC) + No effect #0 1 - Read (SD/MMC host interface <- SD card/MMC) + Clear the NMISR.CPECLR flag #1 + + + + NMICR + NMI Pin Interrupt Control Register + 0x100 + 8 + read-write + 0x00 + 0xFF + - CMDTP - Data Mode (Command Type) - 11 - 11 + NFLTEN + NMI Digital Filter Enable + 7 + 7 read-write 0 - Command does not include data transfer (bc, bcr, or ac) + Digital filter is disabled. #0 1 - Command includes data transfer (adtc) + Digital filter is enabled. #1 - RSPTP - Mode/Response TypeNOTE: As some commands cannot be used in normal mode, see section 1.4.10, Example of SD_CMD Register Setting to select mode/response type. - 8 - 10 - read-write - - - 000 - Normal mode The response type and the transfer mode are selected by SD_CMD[7:0], and the SD_CMD[15:11] setting is disabled. - #000 - - - 011 - Expansion mode and no response - #011 - - - 100 - Expansion mode and R1, R5, R6, or R7 response - #100 - - - 101 - Expansion mode and R1b response - #101 - - - 110 - Expansion mode and R2 response - #110 - - - 111 - Expansion mode and R3 or R4 response - #111 - - - others - Settings prohibited. - true - - - - - ACMD - Command Type Select - 6 - 7 + NFCLKSEL + NMI Digital Filter Sampling Clock Select + 4 + 5 read-write 00 - CMD + PCLKB #00 01 - ACMD + PCLKB/8 #01 - others - Setting prohibited - true + 10 + PCLKB/32 + #10 + + + 11 + PCLKB/64 + #11 - CMDIDX - Command IndexThese bits specify Command Format[45:40] (command index).[Examples]CMD6: SD_CMD[7:0] = 8'b00_000110CMD18: SD_CMD[7:0] = 8'b00_010010ACMD13: SD_CMD[7:0] = 8'b01_001101 - 0 - 5 - read-write - - - - - SD_ARG - SD Command Argument Register - 0x008 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SD_ARG - Argument RegisterSet command format[39:8] (argument) - 0 - 31 - read-write - - - - - SD_ARG1 - SD Command Argument Register 1 - 0x00C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SD_ARG1 - Argument Register 1Set command format[39:24] (argument) + NMIMD + NMI Detection Set 0 - 15 - read-write - - - - - SD_STOP - Data Stop Register - 0x010 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SEC - Block Count EnableSet SEC to 1 at multiple block transfer.When SD_CMD is set as follows to start the command sequence while SEC is set to 1, CMD12 is automatically issued to stop multi-block transfer with the number of blocks which is set to SD_SECCNT.1. CMD18 or CMD25 in normal mode (SD_CMD[10:8] = 000)2. SD_CMD[15:13] = 001 in extended mode (CMD12 is automatically issued, multiple block transfer)When the command sequence is halted because of a communications error or timeout, CMD12 is not automatically issued.NOTE: Do not change the value of this bit when the CBSY bit in SD_INFO2 is set to 1. - 8 - 8 + 0 read-write 0 - Disables SD_SECCNT setting value. + Falling edge #0 1 - Enables SD_SECCNT setting value. + Rising edge #1 - - STP - Stop- When STP is set to 1 during multiple block transfer, CMD12 is issued to halt the transfer through the SD host interface.However, if a command sequence is halted because of a communications error or timeout, CMD12 is not issued. Although continued buffer access is possible even after STP has been set to 1, the buffer access error bit (ERR5 or ERR4) in SD_INFO2 will be set accordingly.- When STP has been set to 1 during transfer for single block write, the access end flag is set when SD_BUF becomes empty, and CMD12 is not issued. If SD_BUF does contain data, the access end flag is set on completion of reception of the busy state without CMD12 having been issued.- When STP has been set to 1 during transfer for single block read, the access end flag is set immediately after setting of the STP bit and CMD12 is not issued.- When STP is set to 1 during reception of the busy state after an R1b response, the access end flag is set on completion of reception of the busy state without CMD12 having been issued.- When STP is set to 1 after a command sequence has been completed, CMD12 is not issued and the access end flag is not set.- Set STP to 1 after the response end flag has been set.- Set STP to 0 after the response end flag has been set. - 0 - 0 - read-write - - SD_SECCNT - Block Count Register - 0x014 + 96 + 0x4 + IELSR[%s] + ICU Event Link Setting Register %s + 0x300 32 read-write 0x00000000 0xFFFFFFFF - SD_SECCNT - Number of Transfer BlocksNOTE: Do not change the value of this bit when the CBSY bit in SD_INFO2 is set to 1. - 0 - 31 + DTCE + DTC Activation Enable + 24 + 24 read-write - - - - - SD_RSP10 - SD Card Response Register 10 - 0x018 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP10 - Store the response from the SD card/MMC - 0 - 31 - read-only - - - - - SD_RSP1 - SD Card Response Register 1 - 0x01C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP1 - Store the response from the SD card/MMC - 0 - 15 - read-only - - - - - SD_RSP32 - SD Card Response Register 32 - 0x020 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP32 - Store the response from the SD card/MMC - 0 - 31 - read-only - - - - - SD_RSP3 - SD Card Response Register 3 - 0x024 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP3 - Store the response from the SD card/MMC - 0 - 15 - read-only - - - - - SD_RSP54 - SD Card Response Register 54 - 0x028 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP54 - Store the response from the SD card/MMC - 0 - 31 - read-only - - - - - SD_RSP5 - SD Card Response Register 5 - 0x02C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP5 - Store the response from the SD card/MMC - 0 - 15 - read-only - - - - - SD_RSP76 - SD Card Response Register 76 - 0x030 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP76 - Store the response from the SD card/MMC - 0 - 23 - read-only - - - - - SD_RSP7 - SD Card Response Register 7 - 0x034 - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - - SD_RSP7 - Store the response from the SD card/MMC - 0 - 7 - read-only - - - - - SD_INFO1 - SD Card Interrupt Flag Register 1 - 0x038 - 32 - read-write - 0x00000000 - 0xFFFFFB5F - - - SDD3MON - Inticates the SDnDAT3 State - 10 - 10 - read-only 0 - SDnDAT3 is set to 0. + DTC activation is disabled #0 1 - SDnDAT3 is set to 1. + DTC activation is enabled #1 - SDD3IN - SDnDAT3 Card Insertion - 9 - 9 + IR + Interrupt Status Flag + 16 + 16 read-write - zeroToClear - modify 0 - SD card insertion not detected + No interrupt request is generated #0 1 - SD card insertion detected + An interrupt request is generated ( 1 write to the IR bit is prohibited. ) #1 - SDD3RM - SDnDAT3 Card Removal - 8 + IELS + ICU Event selection to NVICSet the number for the event signal to be linked . + 0 8 read-write - zeroToClear - modify - 0 - SD card removal not detected - #0 + 0x000 + Nothing is selected + 0x000 - 1 - SD card removal detected - #1 + others + See Event Table + true + + + + 8 + 0x4 + DELSR[%s] + DMAC Event Link Setting Register + 0x280 + 32 + read-write + 0x0000 + 0xFFFF + - SDWPMON - Indicates the SDnWP state - 7 - 7 - read-only + IR + Interrupt Status Flag for DMAC NOTE: Writing 1 to the IR flag is prohibited. + 16 + 16 + read-write - 0 - SDnWP is set to 1. + 0x0 + No interrupt request is generated. #0 - 1 - SDnWP is set to 0. + 0x1 + An interrupt request is generated. #1 - SDCDMON - Indicates the SDnCD state - 5 - 5 - read-only + DELS + Event selection to DMAC Start request + 0 + 8 + read-write - 0 - Indicates that Mcycle has elapsed with SDnCD held 1.(Mcycle is set by bits 3 to 0 in SD_OPTION.) - #0 + 0x000 + Nothing is selected. + 0x000 - 1 - Indicates that Mcycle has elapsed with SDnCD held 0. (Mcycle is set by bits 3 to 0 in SD_OPTION.) - #1 + others + See Event Table + true + + + + SELSR0 + Snooze Event Link Setting Register + 0x200 + 16 + read-write + 0x0000 + 0xFFFF + - SDCDIN - SDnCD Card Insertion - 4 - 4 + SELS + SYS Event Link Select + 0 + 8 read-write - zeroToClear - modify - 0 - Card insertion not detected - #0 - - - 1 - Card insertion detected - #1 + 0x000 + Nothing is selected + 0x000 + + + + WUPEN + Wake Up Interrupt Enable Register + 0x1A0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - SDCDRM - SDnCD Card Removal - 3 - 3 + IIC0WUPEN + IIC0 address match interrupt S/W standby returns enable + 31 + 31 read-write - zeroToClear - modify 0 - Card removal not detected + S/W standby returns by IIC0 address match interrupt is disabled #0 1 - Card removal detected + S/W standby returns by IIC0 address match interrupt is enabled #1 - ACEND - Access End - 2 - 2 + AGT1CBWUPEN + AGT1 compare match B interrupt S/W standby returns enable + 30 + 30 read-write - zeroToClear - modify 0 - Access end is not detected + S/W standby returns by AGT1 compare match B interrupt is disabled #0 1 - Access end is detected + S/W standby returns by AGT1 compare match B interrupt is enabled #1 - RSPEND - Response End Detection - 0 - 0 + AGT1CAWUPEN + AGT1 compare match A interrupt S/W standby returns enable + 29 + 29 read-write 0 - Response end is not detected + S/W standby returns by AGT1 compare match A interrupt is disabled #0 1 - Response end is detected + S/W standby returns by AGT1 compare match A interrupt is enabled #1 - - - - SD_INFO2 - SD Card Interrupt Flag Register 2 - 0x03C - 32 - read-write - 0x00002000 - 0xFFFFFF7F - - ILA - Illegal Access Error - 15 - 15 + AGT1UDWUPEN + AGT1 underflow interrupt S/W standby returns enable + 28 + 28 read-write - zeroToClear - modify 0 - Illegal access error not detected + S/W standby returns by AGT1 underflow interrupt is disabled #0 1 - Illegal access error detected + S/W standby returns by AGT1 underflow interrupt is enabled #1 - CBSY - Command Type Register Busy - 14 - 14 - read-only + USBFSWUPEN + USBFS interrupt S/W standby returns enable + 27 + 27 + read-write 0 - A command sequence is being executed. + S/W standby returns by USBFS interrupt is disabled #0 1 - A command sequence has been completed. + S/W standby returns by USBFS interrupt is enabled #1 - SD_CLK_CTRLEN - When a command sequence is started by writing to SD_CMD, the CBSY bit is set to 1 and, at the same time, the SCLKDIVEN bit is set to 0. The SCLKDIVEN bit is set to 1 after 8 cycles of SDCLK have elapsed after setting of the CBSY bit to 0 due to completion of the command sequence. - 13 - 13 - read-only + USBHSWUPEN + USBHS interrupt S/W standby returns enable bit + 26 + 26 + read-write 0 - The SD/MMC bus (CMD, DAT) is busy. Writing to the SCLKEN and DIV bits in SD_CLK_CTRL is not possible. + S/W standby returns by USBHS interrupt is disabled #0 1 - The SD/MMC bus (CMD, DAT) is not busy. + S/W standby returns by USBHS interrupt is enabled #1 - BWE - SD_BUF Write Enable - 9 - 9 + RTCPRDWUPEN + RCT period interrupt S/W standby returns enable + 25 + 25 read-write - zeroToClear - modify - - 1 - Data can be written in SD_BUF0. - #1 - 0 - Data cannot be written in SD_BUF0. + S/W standby returns by RTC period interrupt is disabled #0 + + 1 + S/W standby returns by RTC period interrupt is enabled + #1 + - BRE - SD_BUF Read Enable - 8 - 8 + RTCALMWUPEN + RTC alarm interrupt S/W standby returns enable + 24 + 24 read-write - zeroToClear - modify - - 1 - Data can be read from SD_BUF0. - #1 - 0 - Data cannot be read from SD_BUF0. + S/W standby returns by RTC alarm interrupt is disabled #0 - - - - SDD0MON - SDDAT0Indicates the SDDAT0 state of the port specified by SD_PORTSEL. - 7 - 7 - read-only - 1 - SDDAT0 is set to 1. + S/W standby returns by RTC alarm interrupt is enabled #1 + + + + ACMPLP0WUPEN + ACMPLP0 interrupt S/W standby returns enable + 23 + 23 + read-write + 0 - SDDAT0 is set to 0. + S/W standby returns by ACMPLP0 interrupt is disabled #0 + + 1 + S/W standby returns by ACMPLP0 interrupt is enabled + #1 + - RSPTO - Response Timeout - 6 - 6 + ACMPHS0WUPEN + ACMPHS0 interrupt S/W standby returns enable bit + 22 + 22 read-write - zeroToClear - modify 0 - Response timeout not detected + S/W standby returns by ACMPHS0 interrupt is disabled #0 1 - Response timeout detected + S/W standby returns by ACMPHS0 interrupt is enabled #1 - ILR - SD_BUF Illegal Read Access - 5 - 5 + VBATTWUPEN + VBATT monitor interrupt S/W standby returns enable + 20 + 20 read-write - zeroToClear - modify 0 - Illegal read access to the SD_BUF register not detected + S/W standby returns by VBATT monitor interrupt is disabled #0 1 - Illegal read access to the SD_BUF register detected + S/W standby returns by VBATT monitor interrupt is enabled #1 - ILW - SD_BUF Illegal Write Access - 4 - 4 + LVD2WUPEN + LVD2 interrupt S/W standby returns enable + 19 + 19 read-write - zeroToClear - modify 0 - Illegal write access to the SD_BUF register not detected + S/W standby returns by LVD2 interrupt is disabled #0 1 - Illegal write access to the SD_BUF register detected + S/W standby returns by LVD2 interrupt is enabled #1 - DTO - Data Timeout - 3 - 3 + LVD1WUPEN + LVD1 interrupt S/W standby returns enable + 18 + 18 read-write - zeroToClear - modify 0 - Data timeout not detected + S/W standby returns by LVD1 interrupt is disabled #0 1 - Data timeout detected + S/W standby returns by LVD1 interrupt is enabled #1 - ENDE - END Error - 2 - 2 + KEYWUPEN + Key interrupt S/W standby returns enable + 17 + 17 read-write - zeroToClear - modify 0 - End bit error not detected + S/W standby returns by KEY interrupt is disabled #0 1 - End bit error detected + S/W standby returns by KEY interrupt is enabled #1 - CRCE - CRC Error - 1 - 1 + IWDTWUPEN + IWDT interrupt S/W standby returns enable + 16 + 16 read-write - zeroToClear - modify 0 - CRC error not detected + S/W standby returns by IWDT interrupt is disabled #0 1 - CRC error detected + S/W standby returns by IWDT interrupt is enabled #1 - CMDE - Command Error + 16 + 0x01 + IRQWUPEN%s + IRQ interrupt S/W standby returns enable 0 0 read-write - zeroToClear - modify 0 - Command error not detected + S/W standby returns by IRQ interrupt is disabled #0 1 - Command error detected + S/W standby returns by IRQ interrupt is enabled #1 @@ -58406,325 +47169,442 @@ FMS2,1,0: - SD_INFO1_MASK - SD_INFO1 Interrupt Mask Register - 0x040 + WUPEN1 + Wake Up interrupt enable register 1 + 0x1A4 32 read-write - 0x0000031D - 0xFFFFFFFF + 0x00000000 + 0xffffffff - SDD3INM - SDnDAT3 Card Insertion Interrupt Request Mask - 9 - 9 + AGT3UDWUPEN + AGT3 underflow interrupt S/W standby returns enable bit + 0 + 0 read-write 0 - SD card insertion interrupt request by the SDnDAT3 is not masked + S/W standby returns by AGT3 underflow interrupt is disabled #0 1 - SD card insertion interrupt request by the SDnDAT3 is masked + S/W standby returns by AGT3 underflow interrupt is enabled #1 - SDD3RMM - SDnDAT3 Card Removal Interrupt Request Mask - 8 - 8 + AGT3CAWUPEN + AGT3 compare match A interrupt S/W standby returns enable bit + 1 + 1 read-write 0 - SD card removal interrupt request by the SDnDAT3 is not masked + S/W standby returns by AGT3 compare match A interrupt is disabled #0 1 - SD card removal interrupt request by the SDnDAT3 is masked + S/W standby returns by AGT3 compare match A interrupt is enabled #1 - SDCDINM - SDnCD card Insertion Interrupt Request Mask - 4 - 4 + AGT3CBWUPEN + AGT3 compare match B interrupt S/W standby returns enable bit + 2 + 2 read-write 0 - Card insertion interrupt request by the SDnCD is not masked + S/W standby returns by AGT3 compare match B interrupt is disabled #0 1 - Card insertion interrupt request by the SDnCD is masked + S/W standby returns by AGT3 compare match B interrupt is enabled #1 + + + + + + R_IIC0 + I2C Bus Interface + 0x40053000 + + 0x00000000 + 0x014 + registers + + + 0x00000016 + 0x002 + registers + + + + 3 + 0x2 + SAR[%s] + Slave Address Registers + 0x0A + 16 + + L + Slave Address Register L + 0x0 + 8 + read-write + 0x00 + 0xFF + + + SVA + A slave address is set.7-Bit Address = SVA[7:1] 10-Bit Address = { SVA9,SVA8,SVA[7:0] } + 0 + 7 + read-write + + + + + U + Slave Address Register U + 0x01 + 8 + read-write + 0x00 + 0xFF + + + SVA9 + 10-Bit Address(bit9) + 2 + 2 + read-write + + + SVA8 + 10-Bit Address(bit8) + 1 + 1 + read-write + + + FS + 7-Bit/10-Bit Address Format Selection + 0 + 0 + read-write + + + 0 + The 7-bit address format is selected. + #0 + + + 1 + The 10-bit address format is selected. + #1 + + + + + + + + ICCR1 + I2C Bus Control Register 1 + 0x00 + 8 + read-write + 0x1F + 0xFF + - SDCDRMM - SDnCD card Removal Interrupt Request Mask - 3 - 3 + ICE + I2C Bus Interface Enable + 7 + 7 read-write 0 - Card removal interrupt request by the by the SDnCD is not masked + Disable (SCLn and SDAn pins in inactive state) #0 1 - Card removal interrupt request by the by the SDnCD is masked + Enable (SCLn and SDAn pins in active state) #1 - ACENDM - Access End Interrupt Request Mask - 2 - 2 + IICRST + I2C Bus Interface Internal ResetNote:If an internal reset is initiated using the IICRST bit for a bus hang-up occurred during communication with the master device in slave mode, the states may become different between the slave device and the master device (due to the difference in the bit counter information). + 6 + 6 read-write 0 - Access end interrupt request is not masked + Releases the RIIC reset or internal reset. #0 1 - Access end interrupt request is masked + Initiates the RIIC reset or internal reset. #1 - RSPENDM - Response End Interrupt Request Mask - 0 - 0 + CLO + Extra SCL Clock Cycle Output + 5 + 5 read-write 0 - Response end interrupt request is not masked + Does not output an extra SCL clock cycle. #0 1 - Response end interrupt request is masked + Outputs an extra SCL clock cycle. #1 - - - - SD_INFO2_MASK - SD_INFO2 Interrupt Mask Register - 0x044 - 32 - read-write - 0x00008B7F - 0xFFFFFFFF - - ILAM - Illegal Access Error Interrupt Request Mask - 15 - 15 + SOWP + SCLO/SDAO Write Protect + 4 + 4 read-write 0 - Illegal access error interrupt request not masked + Bits SCLO and SDAO can be written #0 1 - Illegal access error interrupt request masked + Bits SCLO and SDAO are protected. #1 - BWEM - BWE Interrupt Request Mask - 9 - 9 + SCLO + SCL Output Control/Monitor + 3 + 3 read-write 0 - Write enable interrupt request for the SD_BUF register not masked + (Read)The RIIC has driven the SCLn pin low. / (Write)The RIIC drives the SCLn pin low. #0 1 - Write enable interrupt request for the SD_BUF register masked + (Read)The RIIC has released the SCLn pin. / (Write)The RIIC releases the SCLn pin. #1 - BREM - BRE Interrupt Request Mask - 8 - 8 + SDAO + SDA Output Control/Monitor + 2 + 2 read-write 0 - Read enable interrupt request for the SD buffer not masked + (Read)The RIIC has driven the SDAn pin low. / (Write)The RIIC drives the SDAn pin low. #0 1 - Read enable interrupt request for the SD buffer masked + (Read)The RIIC has released the SDAn pin./ (Write)The RIIC releases the SDAn pin. #1 - RSPTOM - Response Timeout Interrupt Request Mask - 6 - 6 - read-write + SCLI + SCL Line Monitor + 1 + 1 + read-only 0 - Response timeout interrupt request not masked + SCLn line is low. #0 1 - Response timeout interrupt request masked + SCLn line is high. #1 - ILRM - SD_BUF Register Illegal Read Interrupt Request Mask - 5 - 5 - read-write + SDAI + SDA Line Monitor + 0 + 0 + read-only 0 - Illegal read detection interrupt request for the SD_BUF register not masked + SDAn line is low. #0 1 - Illegal read detection interrupt request for the SD_BUF register masked + SDAn line is high. + #1 + + + + + + + ICCR2 + I2C Bus Control Register 2 + 0x01 + 8 + read-write + 0x00 + 0xFF + + + BBSY + Bus Busy Detection Flag + 7 + 7 + read-only + + + 0 + The I2C bus is released (bus free state). + #0 + + + 1 + The I2C bus is occupied (bus busy state). #1 - ILWM - SD_BUF Register Illegal Write Interrupt Request Mask - 4 - 4 + MST + Master/Slave Mode + 6 + 6 read-write 0 - Illegal write detection interrupt request for the SD_BUF register not masked + Slave mode #0 1 - Illegal write detection interrupt request for the SD_BUF register masked + Master mode #1 - DTOM - Data Timeout Interrupt Request Mask - 3 - 3 + TRS + Transmit/Receive Mode + 5 + 5 read-write 0 - Data timeout interrupt request not masked + Receive mode #0 1 - Data timeout interrupt request masked + Transmit mode #1 - ENDEM - End Bit Error Interrupt Request Mask - 2 - 2 + SP + Stop Condition Issuance RequestNote: Writing to the SP bit is not possible while the setting of the BBSY flag is 0 (bus free state).Note: Do not set the SP bit to 1 while a restart condition is being issued. + 3 + 3 read-write 0 - End bit detection error interrupt request not masked + Does not request to issue a stop condition. #0 1 - End bit detection error interrupt request masked + Requests to issue a stop condition. #1 - CRCEM - CRC Error Interrupt Request Mask - 1 - 1 + RS + Restart Condition Issuance RequestNote: Do not set the RS bit to 1 while issuing a stop condition. + 2 + 2 read-write 0 - CRC error interrupt request not masked + Does not request to issue a restart condition. #0 1 - CRC error interrupt request masked + Requests to issue a restart condition. #1 - CMDEM - Command Error Interrupt Request Mask - 0 - 0 + ST + Start Condition Issuance RequestSet the ST bit to 1 (start condition issuance request) when the BBSY flag is set to 0 (bus free state). + 1 + 1 read-write 0 - Command error interrupt request not masked + Does not request to issue a start condition. #0 1 - Command error interrupt request masked + Requests to issue a start condition. #1 @@ -58732,571 +47612,599 @@ FMS2,1,0: - SD_CLK_CTRL - SD Clock Control Register - 0x048 - 32 + ICMR1 + I2C Bus Mode Register 1 + 0x02 + 8 read-write - 0x00000020 - 0xFFFFFFFF + 0x08 + 0xFF - CLKCTRLEN - SD/MMC Clock Output Automatic Control Enable - 9 - 9 + MTWP + MST/TRS Write Protect + 7 + 7 read-write 0 - Automatic control for SD/MMC Clock output is disabled. + Disables writing to the MST and TRS bits in ICCR2. #0 1 - Automatic control for SD/MMC Clock output is enabled. + Enables writing to the MST and TRS bits in ICCR2. #1 - CLKEN - SD/MMC Clock Output Control Enable - 8 - 8 + CKS + Internal Reference Clock (fIIC) Selection ( fIIC = PCLKB / 2^CKS ) + 4 + 6 read-write + + + 000 + PCLKB/1 clock + #000 + + + 001 + PCLKB/2 clock + #001 + + + 010 + PCLKB/4 clock + #010 + + + 011 + PCLKB/8 clock + #011 + + + 100 + PCLKB/16 clock + #100 + + + 101 + PCLKB/32 clock + #101 + + + 110 + PCLKB/64 clock + #110 + + + 111 + PCLKB/128 clock + #111 + + + + + BCWP + BC Write Protect(This bit is read as 1.) + 3 + 3 + write-only 0 - SD/MMC Clock output is disabled. The SDCLK signal is fixed 0. + Enables a value to be written in the BC[2:0] bits. #0 1 - SD/MMC Clock output is enabled. + Disables a value to be written in the BC[2:0] bits. #1 - CLKSEL - SDHI Clock Frequency Select + BC + Bit Counter 0 - 7 + 2 read-write - 0x00 - PCLKA divided by 2 - 0x00 - - - 0x01 - PCLKA divided by 4 - 0x01 - - - 0x02 - PCLKA divided by 8 - 0x02 + 000 + 9 bits + #000 - 0x04 - PCLKA divided by 16 - 0x04 + 001 + 2 bits + #001 - 0x08 - PCLKA divided by 32 - 0x08 + 010 + 3 bits + #010 - 0x10 - PCLKA divided by 64 - 0x10 + 011 + 4 bits + #011 - 0x20 - PCLKA divided by 128 - 0x20 + 100 + 5 bits + #100 - 0x40 - PCLKA divided by 256 - 0x40 + 101 + 6 bits + #101 - 0x80 - PCLKA divided by 512 - 0x80 + 110 + 7 bits + #110 - others - Settings prohibited. - true + 111 + 8 bits + #111 - SD_SIZE - Transfer Data Length Register - 0x04C - 32 - read-write - 0x00000200 - 0xFFFFFFFF - - - LEN - Transfer Data SizeThese bits specify a size between 1 and 512 bytes for the transfer of single blocks.In cases of multiple block transfer with automatic issuing of CMD12 (CMD18 and CMD25), the only specifiable transfer data size is 512 bytes. Furthermore, in cases of multiple block transfer without automatic issuing of CMD12, as well as 512 bytes, 32, 64, 128, and 256 bytes are specifiable. However, in the reading of 32, 64, 128, and 256 bytes for the transfer of multiple blocks, this is restricted to multiple block transfer by CMD53.Additionally, if a command accompanies data transfer, do not set these bits to 0. - 0 - 9 - read-write - - - - - SD_OPTION - SD Card Access Control Option Register - 0x050 - 32 + ICMR2 + I2C Bus Mode Register 2 + 0x03 + 8 read-write - 0x000040EE - 0xFFFFFFFF + 0x06 + 0xFF - WIDTH - Bus WidthNOTE: The initial value is applied at a reset and when the SOFT_RST.SDRST flag is 0. - 15 - 15 + DLCS + SDA Output Delay Clock Source Select + 7 + 7 read-write 0 - 4-bit width (WIDTH8=0) / 8-bit width (WIDTH8=1) + The internal reference clock (fIIC) is selected as the clock source of the SDA output delay counter. #0 1 - 1-bit width (WIDTH8=0 or 1 ) + The internal reference clock divided by 2 (fIIC/2) is selected as the clock source of the SDA output delay counter. #1 - WIDTH8 - Bus Widthsee b15, WIDTH bit - 13 - 13 - read-write - - - TOUTMASK - Timeout MASKWhen timeout occurs in case of inactivating timeout, software reset should be executed to terminate command sequence. - 8 - 8 + SDDL + SDA Output Delay Counter + 4 + 6 read-write - 0 - Activate Timeout - #0 + 000 + No output delay + #000 - 1 - Inactivate Timeout(RSPTO bit and DTO bit of SD_INFO2 and SD_ERR_STS2 won't be set) - #1 + 001 + 1 fIIC cycle (ICMR2.DLCS=0) / 1 or 2 fIIC cycles (ICMR2.DLCS=1) + #001 - - - - TOP - Timeout Counter - 4 - 7 - read-write - - 1111 - Setting prohibited - #1111 + 010 + 2 fIIC cycles (ICMR2.DLCS=0) / 3 or 4 fIIC cycles (ICMR2.DLCS=1) + #010 - others - SDHI clock x 2^(TOP+13) - true + 011 + 3 fIIC cycles (ICMR2.DLCS=0) / 5 or 6 fIIC cycles (ICMR2.DLCS=1) + #011 + + + 100 + 4 fIIC cycles (ICMR2.DLCS=0) / 7 or 8 fIIC cycles (ICMR2.DLCS=1) + #100 + + + 101 + 5 fIIC cycles (ICMR2.DLCS=0) / 9 or 10 fIIC cycles (ICMR2.DLCS=1) + #101 + + + 110 + 6 fIIC cycles (ICMR2.DLCS=0) / 11 or 12 fIIC cycles (ICMR2.DLCS=1) + #110 + + + 111 + 7 fIIC cycles (ICMR2.DLCS=0) / 13 or 14 fIIC cycles (ICMR2.DLCS=1) + #111 - CTOP - Card Detect Time Counter - 0 - 3 + TMOH + Timeout H Count Control + 2 + 2 read-write - 1111 - Setting prohibited - #1111 + 0 + Count is disabled while the SCLn line is at a high level. + #0 - others - IMCLK x 2^(CTOP+10) - true + 1 + Count is enabled while the SCLn line is at a high level. + #1 - - - - SD_ERR_STS1 - SD Error Status Register 1 - 0x058 - 32 - read-only - 0x00002000 - 0xFFFFFFFF - - - CRCTK - CRC Status TokenStore the CRC status token value (normal value is 010b) - 12 - 14 - read-only - - CRCTKE - CRC Status Token Error - 11 - 11 - read-only + TMOL + Timeout L Count Control + 1 + 1 + read-write 0 - An error has not occured in the CRC status. + Count is disabled while the SCLn line is at a low level. #0 1 - An error has occured in the CRC status. + Count is enabled while the SCLn line is at a low level. #1 - RDCRCE - Read Data CRC Error - 10 - 10 - read-only + TMOS + Timeout Detection Time Select + 0 + 0 + read-write 0 - CRC error has detected in read data + Long mode is selected. #0 1 - CRC error has not detected in read data + Short mode is selected. #1 + + + + ICMR3 + I2C Bus Mode Register 3 + 0x04 + 8 + read-write + 0x00 + 0xFF + - RSPCRCE1 - Response CRC Error 1NOTE: In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in RSPCRCE0. - 9 - 9 - read-only + SMBS + SMBus/I2C Bus Selection + 7 + 7 + read-write 0 - CRC error has not occured. + The I2C bus is selected. #0 1 - CRC error has occured in the response to a command issued within a command sequence. + The SMBus is selected. #1 - RSPCRCE0 - Response CRC Error 0NOTE: other than a response to a command issued within a command sequence - 8 - 8 - read-only + WAIT + WAITNote: When the value of the WAIT bit is to be read, be sure to read the ICDRR beforehand. + 6 + 6 + read-write 0 - A CRC error has not occur in a response + No WAIT (The period between ninth clock cycle and first clock cycle is not held low.) #0 1 - A CRC error has occured in a response + WAIT (The period between ninth clock cycle and first clock cycle is held low.) #1 - CRCLENE - CRC Status Token Length Error + RDRFS + RDRF Flag Set Timing Selection 5 5 - read-only + read-write 0 - An error has not occured in the CRC status length. + The RDRF flag is set at the rising edge of the ninth SCL clock cycle. (The SCLn line is not held low at the falling edge of the eighth clock cycle.) #0 1 - An error has occured in the CRC status length (and the end bit has not been detected) + The RDRF flag is set at the rising edge of the eighth SCL clock cycle. (The SCLn line is held low at the falling edge of the eighth clock cycle.) #1 - RDLENE - Read Data Length Error + ACKWP + ACKBT Write Protect 4 4 - read-only + read-write 0 - An error has occurred not in the read data length. + Modification of the ACKBT bit is disabled. #0 1 - An error has occured in the read data length (and the end bit has not been detected among the valid bits). + Modification of the ACKBT bit is enabled. #1 - RSPLENE1 - Response Length Error 1NOTE: In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in RSPLENE0. + ACKBT + Transmit Acknowledge 3 3 - read-only + read-write 0 - An error has not occurred in the response length to a command issued within a command sequence. + A 0 is sent as the acknowledge bit (ACK transmission). #0 1 - An error has occured in the response length to a command issued within a command sequence. + A 1 is sent as the acknowledge bit (NACK transmission). #1 - RSPLENE0 - Response Length Error 0NOTE: other than a response to a command issued within a command sequence + ACKBR + Receive Acknowledge 2 2 read-only 0 - An error has not occured in the response length + A 0 is received as the acknowledge bit (ACK reception). #0 1 - An error has occured in the response length + A 1 is received as the acknowledge bit (NACK reception). #1 - CMDE1 - Command Error 1NOTE: In cases where CMD12 is issued by setting a command index in SD_CMD, this is Indicated in CMDE0. - 1 + NF + Noise Filter Stage Selection + 0 1 - read-only + read-write - 0 - An error has not occurs in the command index of the response to a command issued within a command sequence. - #0 + 00 + Noise of up to one fIIC cycle is filtered out (single-stage filter). + #00 - 1 - An error has occured in the command index of the response to a command issued within a command sequence. - #1 + 01 + Noise of up to two fIIC cycles is filtered out (2-stage filter). + #01 + + + 10 + Noise of up to three fIIC cycles is filtered out (3-stage filter). + #10 + + + 11 + Noise of up to four fIIC cycles is filtered out (4-stage filter) + #11 + + + + ICFER + I2C Bus Function Enable Register + 0x05 + 8 + read-write + 0x72 + 0xFF + - CMDE0 - Command Error 0NOTE: other than a response to a command issued within a command sequence - 0 - 0 - read-only + FMPE + Fast-mode Plus Enable + 7 + 7 + read-write 0 - An error has not occured in the command index of a response. + No Fm+ slope control circuit is used for the SCLn pin and SDAn pin. #0 1 - An error has occured in the command index of a response. + An Fm+ slope control circuit is used for the SCLn pin and SDAn pin. #1 - - - - SD_ERR_STS2 - SD Error Status Register 2 - 0x05C - 32 - read-only - 0x00000000 - 0xFFFFFFFF - - CRCBSYTO - CRC Status Token Busy Timeout + SCLE + SCL Synchronous Circuit Enable 6 6 - read-only + read-write 0 - Not timeout + No SCL synchronous circuit is used. #0 1 - The busy state continues for longer than N-cycle after the CRC status + An SCL synchronous circuit is used. #1 - CRCTO - CRC Status Token Timeout + NFE + Digital Noise Filter Circuit Enable 5 5 - read-only + read-write 0 - Not timeout + No digital noise filter circuit is used. #0 1 - The CRC status is not received though a longer time than N-cycle has elapsed after data writing. + A digital noise filter circuit is used. #1 - RDTO - Read Data Timeout + NACKE + NACK Reception Transfer Suspension Enable 4 4 - read-only + read-write 0 - Not timeout + Transfer operation is not suspended during NACK reception (transfer suspension disabled). #0 1 - The read data is not received though a longer time than N-cycle has elapsed after read command. / The read data for the next block are not received though a longer time than N-cycle has elapsed after the reception of read data. / The read data for the next block are not received though a longer time than N-cycle has elapsed after release of the read wait state. + Transfer operation is suspended during NACK reception (transfer suspension enabled). #1 - BSYTO1 - Busy Timeout 1 + SALE + Slave Arbitration-Lost Detection Enable 3 3 - read-only + read-write 0 - Not timeout. + Slave arbitration-lost detection is disabled. #0 1 - The busy state for longer than N-cycle continues after CMD12 has been issued within a command sequence. In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in BSYTO0. + Slave arbitration-lost detection is enabled. #1 - BSYTO0 - Busy Timeout 0 + NALE + NACK Transmission Arbitration-Lost Detection Enable 2 2 - read-only + read-write 0 - Not timeout. + NACK transmission arbitration-lost detection is disabled. #0 1 - The busy state for longer than N-cycle continues after R1b response. + NACK transmission arbitration-lost detection is enabled. #1 - RSPTO1 - Response Timeout 1 + MALE + Master Arbitration-Lost Detection Enable 1 1 - read-only + read-write 0 - Not timeout. + Master arbitration-lost detection is disabled. #0 1 - The response to a command issued within a command sequence*2 is not received though a longer time than 640 cycles of SD/MMC clock has elapsed. In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in RSPTO0. + Master arbitration-lost detection is enabled. #1 - RSPTO0 - Response Timeout 0 + TMOE + Timeout Function Enable 0 0 - read-only + read-write 0 - Not timeout. + The timeout function is disabled. #0 1 - The response (other than a response to a command issued within a command sequence) is not received though a longer time than 640 cycles of SD/MMC clock has elapsed. + The timeout function is enabled. #1 @@ -59304,130 +48212,124 @@ FMS2,1,0: - SD_BUF0 - SD Buffer Register - 0x060 - 32 + ICSER + I2C Bus Status Enable Register + 0x06 + 8 read-write - 0x00000000 - 0x00000000 + 0x09 + 0xFF - SD_BUF - SD Buffer RegisterWhen writing to the SD card, the write data is written to this register. When reading from the SD card, the read data is read from this register. This register is internally connected to two 512-byte buffers.If both buffers are not empty when executing multiple block read, SD/MMC clock is stopped to suspend receiving data. When one of buffers is empty, SD/MMC clock is supplied to resume receiving data. - 0 - 31 + HOAE + Host Address Enable + 7 + 7 read-write + + + 0 + Host address detection is disabled. + #0 + + + 1 + Host address detection is enabled. + #1 + + - - - - SDIO_MODE - SDIO Mode Control Register - 0x068 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - C52PUB - SDIO None AbortNOTE: See manual - 9 - 9 + DIDE + Device-ID Address Detection Enable + 5 + 5 read-write + + + 0 + Device-ID address detection is disabled. + #0 + + + 1 + Device-ID address detection is enabled. + #1 + + - IOABT - SDIO AbortNOTE: See manual - 8 - 8 + GCAE + General Call Address Enable + 3 + 3 read-write + + + 0 + General call address detection is disabled. + #0 + + + 1 + General call address detection is enabled. + #1 + + - RWREQ - Read Wait Request + SAR2E + Slave Address Register 2 Enable 2 2 read-write 0 - Allow SD/MMC to exit read wait state + Slave address in SARL2 and SARU2 is disabled. #0 1 - Request for SD/MMC to enter read wait state. + Slave address in SARL2 and SARU2 is enabled #1 - INTEN - SDIO Mode - 0 - 0 + SAR1E + Slave Address Register 1 Enable + 1 + 1 read-write - - 1 - Enables the SD host interface to receive SDIO interrupt from the SDIO card - #1 - 0 - Disables the SD host interface to receive SDIO interrupt from the SDIO card + Slave address in SARL1 and SARU1 is disabled. #0 + + 1 + Slave address in SARL1 and SARU1 is enabled. + #1 + - - - - SDIO_INFO1 - SDIO Interrupt Flag Register 1 - 0x06C - 32 - read-write - 0x00000000 - 0xFFFFFFF9 - - - EXWT - EXWT Status FlagNOTE: See manual - 15 - 15 - read-write - zeroToClear - modify - - - EXPUB52 - EXPUB52 Status FlagNOTE: See manual - 14 - 14 - read-write - zeroToClear - modify - - IOIRQ - SDIO Interrupt Status + SAR0E + Slave Address Register 0 Enable 0 0 read-write - zeroToClear - modify 0 - SDIO interrupt not accepted + Slave address in SARL0 and SARU0 is disabled. #0 1 - SDIO interrupt accepted + Slave address in SARL0 and SARU0 is enabled. #1 @@ -59435,486 +48337,472 @@ FMS2,1,0: - SDIO_INFO1_MASK - SDIO_INFO1 Interrupt Mask Register - 0x070 - 32 + ICIER + I2C Bus Interrupt Enable Register + 0x07 + 8 read-write - 0x0000C007 - 0xFFFFFFFF + 0x00 + 0xFF - EXWTM - EXWT Interrupt Request Mask Control - 15 - 15 + TIE + Transmit Data Empty Interrupt Request Enable + 7 + 7 read-write 0 - EXWT interrupt request not masked + Transmit data empty interrupt request (IIC_TXI) is disabled. #0 1 - EXWT interrupt request masked + Transmit data empty interrupt request (IIC_TXI) is enabled. #1 - EXPUB52M - EXPUB52 Interrupt Request Mask Control - 14 - 14 + TEIE + Transmit End Interrupt Request Enable + 6 + 6 read-write 0 - EXPUB52 interrupt request not masked + Transmit end interrupt request (IIC_TEI) is disabled. #0 1 - EXPUB52 interrupt request masked + Transmit end interrupt request (IIC_TEI) is enabled. #1 - IOIRQM - IOIRQ Interrupt Mask Control - 0 - 0 + RIE + Receive Data Full Interrupt Request Enable + 5 + 5 read-write 0 - IOIRQ interrupt not masked + Receive data full interrupt request (IIC_RXI) is disabled. #0 1 - IOIRQ interrupt masked + Receive data full interrupt request (IIC_RXI) is enabled. #1 - - - - SD_DMAEN - DMA Mode Enable Register - 0x1B0 - 32 - read-write - 0x00001010 - 0xFFFFFFFF - - DMAEN - SD_BUF Read/Write DMA Transfer - 1 - 1 + NAKIE + NACK Reception Interrupt Request Enable + 4 + 4 read-write 0 - The SD_BUF read/write DMA transfer is disabled. + NACK reception interrupt request (NAKI) is disabled. #0 1 - The SD_BUF read/write DMA transfer is enabled. + NACK reception interrupt request (NAKI) is enabled. #1 - - - - SOFT_RST - Software Reset Register - 0x1C0 - 32 - read-write - 0x00000007 - 0xFFFFFFFF - - SDRST - Software Reset of SD I/F Unit - 0 - 0 + SPIE + Stop Condition Detection Interrupt Request Enable + 3 + 3 read-write 0 - Reset + Stop condition detection interrupt request (SPI) is disabled. #0 1 - Reset released + Stop condition detection interrupt request (SPI) is enabled. #1 - - - - SDIF_MODE - SD Interface Mode Setting Register - 0x1CC - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - NOCHKCR - CRC Check Mask (for MMC test commands) - 8 - 8 + STIE + Start Condition Detection Interrupt Request Enable + 2 + 2 read-write 0 - CRC check is valid + Start condition detection interrupt request (STI) is disabled. #0 1 - CRC check is invalid(CRC16 value is ignored when read and CRC Status value is ignored when write) + Start condition detection interrupt request (STI) is enabled. #1 - - - - EXT_SWAP - Swap Control Register - 0x1E0 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - BRSWP - SD_BUF0 Swap Read - 7 - 7 + ALIE + Arbitration-Lost Interrupt Request Enable + 1 + 1 read-write 0 - The current data are read without swapping. + Arbitration-lost interrupt request (ALI) is disabled. #0 1 - Swapping of the positions of the higher- and lower-order bytes of data for reading proceeds. + Arbitration-lost interrupt request (ALI) is enabled. #1 - BWSWP - SD_BUF0 Swap Write - 6 - 6 + TMOIE + Timeout Interrupt Request Enable + 0 + 0 read-write 0 - The current data are written without swapping. + Timeout interrupt request (TMOI) is disabled. #0 1 - Swapping of the positions of the higher- and lower-order bytes of data for writing proceeds. + Timeout interrupt request (TMOI) is enabled. #1 - - - - R_SDHI1 - 0x40062400 - - - R_SLCDC - Segment LCD Controller/Driver - 0x40082000 - - 0x00 - 4 - registers - - - 0x100 - 38 - registers - - - LCDM0 - LCD Mode Register 0 - 0x000 + ICSR1 + I2C Bus Status Register 1 + 0x08 8 read-write 0x00 0xFF - MDSET - LCD drive voltage generator selection - 6 + HOA + Host Address Detection Flag + 7 7 read-write + zeroToClear + modify - 00 - External resistance division method - #00 - - - 01 - Internal voltage boosting method - #01 - - - 10 - Capacitor split method - #10 + 0 + Host address is not detected. + #0 - 11 - Setting prohibited - #11 + 1 + Host address is detected. + #1 - LWAVE - LCD display waveform selection + DID + Device-ID Address Detection Flag 5 5 read-write 0 - Waveform A + Device-ID command is not detected. #0 1 - Waveform B + Device-ID command is detected. #1 - LDTY - Time Slice of LCD Display Select - 2 - 4 + GCA + General Call Address Detection Flag + 3 + 3 read-write - 000 - Static - #000 - - - 001 - 2-time slice - #001 - - - 010 - 3-time slice - #010 + 0 + General call address is not detected. + #0 - 011 - 4-time slice - #011 + 1 + General call address is detected. + #1 + + + + AAS2 + Slave Address 2 Detection Flag + 2 + 2 + read-write + zeroToClear + modify + - 101 - 8-time slice - #101 + 0 + Slave address 2 is not detected. + #0 - others - Setting prohibited - true + 1 + Slave address 2 is detected + #1 - LBAS - LCD Display Bias Method Select - 0 + AAS1 + Slave Address 1 Detection Flag + 1 1 read-write + zeroToClear + modify - 00 - 1/2 bias method - #00 + 0 + Slave address 1 is not detected. + #0 - 01 - 1/3 bias method - #01 + 1 + Slave address 1 is detected. + #1 + + + + AAS0 + Slave Address 0 Detection Flag + 0 + 0 + read-write + zeroToClear + modify + - 10 - 1/4 bias method - #10 + 0 + Slave address 0 is not detected. + #0 - 11 - Setting prohibited - #11 + 1 + Slave address 0 is detected. + #1 - LCDM1 - LCD Mode Register 1 - 0x001 + ICSR2 + I2C Bus Status Register 2 + 0x09 8 read-write 0x00 0xFF - LCDON - LCD Display Enable/Disable + TDRE + Transmit Data Empty Flag 7 7 - read-write + read-only 0 - Output ground level to segment/common pin(SCOC=0)/Display off (all segment outputs are deselected)(SCOC=1) + ICDRT contains transmit data. #0 1 - Output ground level to segment/common pin(SCOC=0)/Display on(SCOC=1) + ICDRT contains no transmit data. #1 - SCOC - LCD Display Enable/Disable + TEND + Transmit End Flag 6 6 read-write + zeroToClear + modify 0 - Output ground level to segment/common pin(LCDON=0)/Output ground level to segment/common pin(LCDON=1) + Data is being transmitted. #0 1 - Display off (all segment outputs are deselected)(LCDON=0)/Display on(LCDON=1) + Data has been transmitted. #1 - VLCON - Voltage boost circuit or capacitor split circuit operation enable/disable + RDRF + Receive Data Full Flag 5 5 read-write + zeroToClear + modify 0 - Stops voltage boost circuit or capacitor split circuit operation + ICDRR contains no receive data. #0 1 - Enables voltage boost circuit or capacitor split circuit operation + ICDRR contains receive data. #1 - BLON - Display data area control + NACKF + NACK Detection Flag 4 4 read-write + zeroToClear + modify 0 - Displaying an A-pattern area data (lower four bits of LCD display data register)(LCDSEL=0)/Displaying a B-pattern area data (higher four bits of LCD display data register)(LCDSEL=1) + NACK is not detected. #0 1 - Alternately displaying A-pattern and B-pattern area data (blinking display corresponding to the constant-period interrupt (INTRTC) timing of the real-time clock (RTC)) + NACK is detected. #1 - LCDSEL - Display data area control + STOP + Stop Condition Detection Flag 3 3 read-write + zeroToClear + modify 0 - Displaying an A-pattern area data (lower four bits of LCD display data register)(BLON=0)/Alternately displaying A-pattern and B-pattern area data (blinking display corresponding to the constant-period interrupt (INTRTC) timing of the real-time clock (RTC))(BLON=1) + Stop condition is not detected. #0 1 - Displaying a B-pattern area data (higher four bits of LCD display data register)(BLON=0)/Alternately displaying A-pattern and B-pattern area data (blinking display corresponding to the constant-period interrupt (INTRTC) timing of the real-time clock (RTC))(BLON=1) + Stop condition is detected. #1 - Reserved - These bits are read as 00. The write value should be 00. - 1 + START + Start Condition Detection Flag + 2 2 read-write + zeroToClear + modify + + + 0 + Start condition is not detected. + #0 + + + 1 + Start condition is detected. + #1 + + + + + AL + Arbitration-Lost Flag + 1 + 1 + read-write + zeroToClear + modify + + + 0 + Arbitration is not lost. + #0 + + + 1 + Arbitration is lost. + #1 + + - LCDVLM - Voltage Boosting Pin Initial Value Switching Control + TMOF + Timeout Detection Flag 0 0 read-write + zeroToClear + modify 0 - Set when VDD >= 2.7 V + Timeout is not detected. #0 1 - Set when VDD <= 4.2 V + Timeout is detected. #1 @@ -59922,771 +48810,631 @@ FMS2,1,0: - LCDC0 - LCD Clock Control Register 0 - 0x002 + ICBRL + I2C Bus Bit Rate Low-Level Register + 0x10 8 read-write - 0x00 + 0xFF 0xFF - LCDC - LCD clock (LCDCL) + BRL + Bit Rate Low-Level Period(Low-level period of SCL clock) 0 - 5 + 4 read-write - - - 000001 - (Sub clock)/22 or (LOCO clock)/22 - #000001 - - - 000010 - (Sub clock)/23 or (LOCO clock)/23 - #000010 - - - 000011 - (Sub clock)/24 or (LOCO clock)/24 - #000011 - - - 000100 - (Sub clock)/25 or (LOCO clock)/25 - #000100 - - - 000101 - (Sub clock)/26 or (LOCO clock)/26 - #000101 - - - 000110 - (Sub clock)/27 or (LOCO clock)/27 - #000110 - - - 000111 - (Sub clock)/28 or (LOCO clock)/28 - #000111 - - - 001000 - (Sub clock)/29 or (LOCO clock)/29 - #001000 - - - 001001 - (Sub clock)/210 or (LOCO clock)/210 - #001001 - - - 010001 - (Main clock)/28 or (HOCO clock)/28 - #010001 - - - 010010 - (Main clock)/29 or (HOCO clock)/29 - #010010 - - - 010011 - (Main clock)/210 or (HOCO clock)/210 - #010011 - - - 010100 - (Main clock)/211 or (HOCO clock)/211 - #010100 - - - 010101 - (Main clock)/212 or (HOCO clock)/212 - #010101 - - - 010110 - (Main clock)/213 or (HOCO clock)/213 - #010110 - - - 010111 - (Main clock)/214 or (HOCO clock)/214 - #010111 - - - 011000 - (Main clock)/215 or (HOCO clock)/215 - #011000 - - - 011001 - (Main clock)/216 or (HOCO clock)/216 - #011001 - - - 011010 - (Main clock)/217 or (HOCO clock)/217 - #011010 - - - 011011 - (Main clock)/218 or (HOCO clock)/218 - #011011 - - - 101011 - (Main clock)/219 or (HOCO clock)/219 - #101011 - - - others - Other than above Setting prohibited - true - - - VLCD - LCD Boost Level Control Register - 0x003 + ICBRH + I2C Bus Bit Rate High-Level Register + 0x11 8 read-write - 0x04 + 0xFF 0xFF - VLCD - Reference Voltage(Contrast Adjustment) Select + BRH + Bit Rate High-Level Period(High-level period of SCL clock) 0 4 read-write - - - 00100 - Reference voltageselection(contrast adjustment): 1.00 V (default) VL4 voltage: 3.00 V(1/3 bias method)/4.00 V(1/4 bias method) - #00100 - - - 00101 - Reference voltageselection(contrast adjustment): 1.05 V VL4 voltage: 3.15 V(1/3 bias method)/4.20 V(1/4 bias method) - #00101 - - - 00110 - Reference voltageselection(contrast adjustment): 1.10 V VL4 voltage: 3.30 V(1/3 bias method)/4.40 V(1/4 bias method) - #00110 - - - 00111 - Reference voltageselection(contrast adjustment): 1.15 V VL4 voltage: 3.45 V(1/3 bias method)/4.60 V(1/4 bias method) - #00111 - - - 01000 - Reference voltageselection(contrast adjustment): 1.20 V VL4 voltage: 3.60 V(1/3 bias method)/4.80 V(1/4 bias method) - #01000 - - - 01001 - Reference voltageselection(contrast adjustment): 1.25 V VL4 voltage: 3.75 V(1/3 bias method)/5.00 V(1/4 bias method) - #01001 - - - 01010 - Reference voltageselection(contrast adjustment): 1.30 V VL4 voltage: 3.90 V(1/3 bias method)/5.20 V(1/4 bias method) - #01010 - - - 01011 - Reference voltageselection(contrast adjustment): 1.35 V VL4 voltage: 4.05 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #01011 - - - 01100 - Reference voltageselection(contrast adjustment): 1.40 V VL4 voltage: 4.20 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #01100 - - - 01101 - Reference voltageselection(contrast adjustment): 1.45 V VL4 voltage: 4.35 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #01101 - - - 01110 - Reference voltageselection(contrast adjustment): 1.50 V VL4 voltage: 4.50 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #01110 - - - 01111 - Reference voltageselection(contrast adjustment): 1.55 V VL4 voltage: 4.65 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #01111 - - - 10000 - Reference voltageselection(contrast adjustment): 1.60 V VL4 voltage: 4.80 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #10000 - - - 10001 - Reference voltageselection(contrast adjustment): 1.65 V VL4 voltage: 4.95 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #10001 - - - 10010 - Reference voltageselection(contrast adjustment): 1.70 V VL4 voltage: 5.10 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #10010 - - - 10011 - Reference voltageselection(contrast adjustment): 1.75 V VL4 voltage: 5.25 V(1/3 bias method)/Setting prohibited(1/4 bias method) - #10011 - - - others - Setting prohibited - true - - - 64 - 0x1 - SEG[%s] - LCD Display Data Array - 0x100 + ICDRT + I2C Bus Transmit Data Register + 0x12 8 read-write - 0x00 + 0xFF 0xFF - A - A-Pattern Area + ICDRT + 8-bit read-write register that stores transmit data. 0 - 3 + 7 read-write + + + + ICDRR + I2C Bus Receive Data Register + 0x13 + 8 + read-only + 0x00 + 0xFF + - B - B-Pattern Area - 4 + ICDRR + 8-bit register that stores the received data + 0 7 - read-write + read-only - - - - R_SPI0 - Serial Peripheral Interface - 0x40072000 - - 0x00000000 - 0x008 - registers - - - 0x0000000A - 0x008 - registers - - - SPCR - SPI Control Register - 0x00 + ICWUR + I2C Bus Wake Up Unit Register + 0x16 8 read-write - 0x00 + 0x10 0xFF - SPRIE - SPI Receive Buffer Full Interrupt Enable + WUE + Wakeup Function Enable 7 7 read-write 0 - Disables the generation of SPI receive buffer full interrupt requests + Wakeup function disabled #0 1 - Enables the generation of SPI receive buffer full interrupt requests + Wakeup function enabled. #1 - SPE - SPI Function Enable + WUIE + Wakeup Interrupt Request Enable 6 6 read-write 0 - Disables the SPI function + Wakeup Interrupt Request (IIC0_WUI) disabled #0 1 - Enables the SPI function + Wakeup Interrupt Request (IIC0_WUI) enabled. #1 - SPTIE - Transmit Buffer Empty Interrupt Enable + WUF + Wakeup Event Occurrence Flag 5 5 read-write 0 - Disables the generation of transmit buffer empty interrupt requests + Slave address does not match during wakeup function #0 1 - Enables the generation of transmit buffer empty interrupt requests + Slave address matches during wakeup function. #1 - SPEIE - SPI Error Interrupt Enable + WUACK + ACK bit for Wakeup Mode 4 4 read-write 0 - Disables the generation of SPI error interrupt requests - #0 - - - 1 - Enables the generation of SPI error interrupt requests - #1 - - - - - MSTR - SPI Master/Slave Mode Select - 3 - 3 - read-write - - - 0 - Slave mode - #0 - - - 1 - Master mode - #1 - - - - - MODFEN - Mode Fault Error Detection Enable - 2 - 2 - read-write - - - 0 - Disables the detection of mode fault error - #0 - - - 1 - Enables the detection of mode fault error - #1 - - - - - TXMD - Communications Operating Mode Select - 1 - 1 - read-write - - - 0 - Full-duplex synchronous serial communications - #0 - - - 1 - Serial communications consisting of only transmit operations - #1 - - - - - SPMS - SPI Mode Select - 0 - 0 - read-write - - - 0 - SPI operation (4-wire method) + State of synchronous operation #0 1 - Clock synchronous operation (3-wire method) + State of asynchronous operation #1 - - - - - - SSLP - SPI Slave Select Polarity Register - 0x01 - 8 - read-write - 0x00 - 0xFF - - - SSL3P - SSL3 Signal Polarity Setting - 3 - 3 + + + + WUAFA + Wakeup Analog Filter Additional Selection + 0 + 0 read-write 0 - SSL3 signal is active low + Do not add the wakeup analog filter #0 1 - SSL3 signal is active high + Add the wakeup analog filter. #1 + + + + ICWUR2 + I2C Bus Wake up Unit Register 2 + 0x17 + 8 + read-write + 0xFD + 0xFF + - SSL2P - SSL2 Signal Polarity Setting + WUSYF + Wake-up Function Synchronous Operation Status Flag 2 2 - read-write + read-only 0 - SSL2 signal is active low + IIC asynchronous circuit enable condition #0 1 - SSL2 signal is active high + IIC synchronous circuit enable condition. #1 - SSL1P - SSL1 Signal Polarity Setting + WUASYF + Wake-up Function Asynchronous Operation Status Flag 1 1 - read-write + read-only 0 - SSL1 signal is active low + IIC synchronous circuit enable condition #0 1 - SSL1 signal is active high + IIC asynchronous circuit enable condition. #1 - SSL0P - SSL0 Signal Polarity Setting + WUSEN + Wake-up Function Synchronous Enable 0 0 - read-write + read-only 0 - SSL0 signal is active low + IIC asynchronous circuit enable #0 1 - SSL0 signal is active high + IIC synchronous circuit enable #1 + + + + R_IIC1 + 0x40053100 + + + R_IIC2 + 0x40053200 + + + R_IRDA + IrDA Interface + 0x40070F00 + + 0x00000000 + 0x01 + registers + + - SPPCR - SPI Pin Control Register - 0x02 + IRCR + IrDA Control Register + 0x00 8 read-write 0x00 0xFF - MOIFE - MOSI Idle Value Fixing Enable - 5 - 5 + IRE + IrDA Enable + 7 + 7 read-write 0 - MOSI output value equals final data from previous transfer + Serial I/O pins are used for normal serial communication. #0 1 - MOSI output value equals the value set in the MOIFV bit + Serial I/O pins are used for IrDA data communication. #1 - MOIFV - MOSI Idle Fixed Value - 4 - 4 + IRTXINV + IRTXD Polarity Switching + 3 + 3 read-write 0 - The level output on the MOSIn pin during MOSI idling corresponds to low. + Data to be transmitted is output to IRTXD as is. #0 1 - The level output on the MOSIn pin during MOSI idling corresponds to high. + Data to be transmitted is output to IRTXD after the polarity is inverted. #1 - SPLP2 - SPI Loopback 2 - 1 - 1 + IRRXINV + IRRXD Polarity Switching + 2 + 2 read-write 0 - Normal mode + IRRXD input is used as received data as is. #0 1 - Loopback mode (data is not inverted for transmission) + IRRXD input is used as received data after the polarity is inverted. #1 + + + + + + R_IWDT + Independent Watchdog Timer + 0x40044400 + + 0x00000000 + 0x01 + registers + + + 0x00000004 + 0x02 + registers + + + + IWDTRR + IWDT Refresh Register + 0x00 + 8 + read-write + 0xFF + 0xFF + - SPLP - SPI Loopback + IWDTRR + The counter is refreshed by writing 0x00 and then writing 0xFF to this register. 0 - 0 + 7 read-write - - - 0 - Normal mode - #0 - - - 1 - Loopback mode (data is inverted for transmission) - #1 - - - SPSR - SPI Status Register - 0x03 - 8 + IWDTSR + IWDT Status Register + 0x04 + 16 read-write - 0x20 - 0xFF + 0x0000 + 0xFFFF - SPRF - SPI Receive Buffer Full Flag - 7 - 7 + REFEF + Refresh Error Flag + 15 + 15 read-write zeroToClear modify 0 - No valid data in SPDR + Refresh error not occurred #0 1 - Valid data found in SPDR + Refresh error occurred #1 - SPTEF - SPI Transmit Buffer Empty Flag - 5 - 5 + UNDFF + Underflow Flag + 14 + 14 read-write zeroToClear modify 0 - Data found in the transmit buffer + Underflow not occurred #0 1 - No data in the transmit buffer + Underflow occurred #1 - UDRF - Underrun Error Flag(When MODF is 0, This bit is invalid.) - 4 - 4 + CNTVAL + Counter ValueValue counted by the counter + 0 + 13 + read-only + + + + + + + R_JPEG + JPEG Codec + 0x400E6000 + + 0x00000000 + 0x002 + registers + + + 0x00000003 + 0x00F + registers + + + 0x00000040 + 0x014 + registers + + + 0x00000058 + 0x01C + registers + + + 0x0000008C + 0x008 + registers + + + 0x00000100 + 0x11C + registers + + + 0x00000220 + 0x0B2 + registers + + + 0x00000300 + 0x01C + registers + + + 0x00000320 + 0x0B2 + registers + + + + JCMOD + JPEG Code Mode Register + 0x000 + 8 + read-write + 0x00 + 0xFF + + + DSP + Compression/Decompression Set Note: When changing between processing for compression and for decompression, be sure to reset this module in advance by setting the JCUSRST bit in the software reset control register 2 (SWRSTCR2) of the power-downmodes. + 3 + 3 read-write - zeroToClear - modify 0 - A mode fault error occurs (MODF=1) + Compression process #0 1 - An underrun error occurs (MODF=1) + Decompression process #1 - PERF - Parity Error Flag - 3 - 3 + REDU + Pixel FormatNOTE: Read-only in Decompression. + 0 + 2 read-write - zeroToClear - modify + + + 001 + YCbCr422(Compression) / YCbCr422(Decompression) + #001 + + + 000 + Setting prohibited(Compression) / YCbCr444(Decompression) + #000 + + + 110 + Setting prohibited(Compression) / YCbCr411/[Decompression] + #110 + + + 010 + Setting prohibited(Compression) / YCbCr420/[Decompression] + #010 + + + others + Setting prohibited(Compression) / Error (this module cannot process normally.)(Decompression]) + true + + + + + + + JCCMD + JPEG Code Command Register + 0x001 + 8 + write-only + 0x00 + 0x00 + + + BRST + Bus Reset. NOTE: When this module is in operation, the bus reset command should not be issued. + 7 + 7 + write-only 0 - No parity error occurs + No effect. #0 1 - A parity error occurs + Resets the JCDTCU, JCDTCM, JCDTCD, JCDERR and JCRST registers. #1 - MODF - Mode Fault Error Flag + JEND + Interrupt Request Clear Command This bit is valid only for the interrupt sources corresponding to bits INS6, INS5, and INS3 in JINTS0. To clear an interrupt request, set this bit to 1 2 2 - read-write - zeroToClear - modify + write-only 0 - Neither mode fault error nor underrun error occurs + No effect. #0 1 - A mode fault error or an underrun error occurs. + Clear all bits in JINTE0. #1 - IDLNF - SPI Idle Flag + JRST + JPEG Core Process Stop Clear CommandTo clear the process-stopped state caused by requests to read the image size and pixel format (enabled by the INT3 bit in JINTE0), set this bit to 1. 1 1 - read-only + write-only 0 - SPI is in the idle state + No effect. #0 1 - SPI is in the transfer state + Clear the process-stopped state caused by requests to read the image size and pixel format(enabled by the INT3 bit in JINTE0). #1 - OVRF - Overrun Error Flag + JSRT + JPEG Core Process Start CommandTo start JPEG core processing, set this bit to 1. Do not write this bit to 1 again while this module is in operation. 0 0 - read-write - zeroToClear - modify + write-only 0 - No overrun error occurs + No effect. #0 1 - An overrun error occurs + Start JPEG core processing #1 @@ -60694,497 +49442,471 @@ FMS2,1,0: - SPDR - SPI Data Register - 0x04 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - SPDR_HA - SPI Data Register ( halfword access ) - SPDR - 0x04 - 16 - read-write - 0x0000 - 0xFFFF - - - SPDR_BY - SPI Data Register ( byte access ) - SPDR - 0x04 - 8 - read-write - 0x00 - 0xFF - - - SPSCR - SPI Sequence Control Register - 0x08 + JCQTN + JPEG Code Quantization Table Number Register + 0x003 8 read-write 0x00 0xFF - Reserved - These bits are read as 00000. The write value should be 00000. - 3 - 7 - read-write - - - SPSLN - RSPI Sequence Length Specification -The order in which the SPCMD0 to SPCMD07 registers are to be referenced is changed in accordance with the sequence length that is set in these bits. The relationship among the setting of these bits, sequence length, and SPCMD0 to SPCMD7 registers referenced by the RSPI is shown above. However, the RSPI in slave mode always references SPCMD0. - 0 - 2 + QT3 + Quantization table number for the third color component NOTE: Read-only in Decompression. + 4 + 5 read-write - 000 - Length 1 SPDMDx x = 0->0->... - #000 + 00 + Use quantization table No.0 (JCQTBL0) as the third color component. + #00 - 001 - Length 2 SPDMDx x = 0->1->0->... - #001 + 01 + Use quantization table No.1 (JCQTBL1) as the third color component. + #01 - 010 - Length 3 SPDMDx x = 0->1->2->0->... - #010 + 10 + Use quantization table No.2 (JCQTBL2) as the third color component. + #10 - 011 - Length 4 SPDMDx x = 0->1->2->3->0->... - #011 + 11 + Use quantization table No.3 (JCQTBL3) as the third color component. + #11 + + + + QT2 + Quantization table number for the second color component NOTE: Read-only in Decompression. + 2 + 3 + read-write + - 100 - Length 5 SPDMDx x = 0->1->2->3->4->0->... - #100 + 00 + Use quantization table No.0 (JCQTBL0) as the second color component. + #00 - 101 - Length 6 SPDMDx x = 0->1->2->3->4->5->0->... - #101 + 01 + Use quantization table No.1 (JCQTBL1) as the second color component. + #01 - 110 - Length 7 SPDMDx x = 0->1->2->3->4->5->6->0->... - #110 + 10 + Use quantization table No.2 (JCQTBL2) as the second color component. + #10 - 111 - Length 8 SPDMDx x = 0->1->2->3->4->5->6->7->0->... - #111 + 11 + Use quantization table No.3 (JCQTBL3) as the second color component. + #11 - - - - SPBR - SPI Bit Rate Register - 0x0A - 8 - read-write - 0xFF - 0xFF - - SPR - SPBR sets the bit rate in master mode. + QT1 + Quantization table number for the first color componentNOTE: Read-only in Decompression. 0 - 7 + 1 read-write + + + 00 + Use quantization table No.0 (JCQTBL0) as the first color component. + #00 + + + 01 + Use quantization table No.1 (JCQTBL1) as the first color component. + #01 + + + 10 + Use quantization table No.2 (JCQTBL2) as the first color component. + #10 + + + 11 + Use quantization table No.3 (JCQTBL3) as the first color component. + #11 + + - SPDCR - SPI Data Control Register - 0x0B + JCHTN + JPEG Code Huffman Table Number Register + 0x004 8 read-write 0x00 0xFF - SPBYT - SPI Byte Access Specification - 6 - 6 + HTA3 + Huffman table number (AC) for the third color componentNOTE: Read-only in Decompression. + 5 + 5 read-write 0 - SPDR is accessed in halfword or word (SPLW is valid) + AC Huffman table 0(HTD3=0)/Setting prohibited(HTD3=1) #0 1 - SPDR is accessed in byte (SPLW is invalid). + AC Huffman table 1(HTD3=1)/Setting prohibited(HTD3=0) #1 - SPLW - SPI Word Access/Halfword Access Specification - 5 - 5 + HTD3 + Huffman table number (DC) for the third color component NOTE: Read-only in Decompression. + 4 + 4 read-write 0 - Set SPDR_HA to valid for halfword access + DC Huffman table 0(HTA3=0)/Setting prohibited(HTA3=1) #0 1 - Set SPDR to valid for word access. + DC Huffman table 1(HTA3=1)/Setting prohibited(HTA3=0) #1 - SPRDTD - SPI Receive/Transmit Data Selection - 4 - 4 + HTA2 + Huffman table number (AC) for the second color componentNOTE: Read-only in Decompression. + 3 + 3 read-write 0 - SPDR values are read from the receive buffer + AC Huffman table 0(HTD2=0)/Setting prohibited(HTD2=1) #0 1 - SPDR values are read from the transmit buffer (but only if the transmit buffer is empty) + AC Huffman table 1(HTD2=1)/Setting prohibited(HTD2=0) #1 - SPFC - Number of Frames Specification - 0 + HTD2 + Huffman table number (DC) for the second color component NOTE: Read-only in Decompression. + 2 + 2 + read-write + + + 0 + DC Huffman table 0(HTA2=0)/Setting prohibited(HTA2=1) + #0 + + + 1 + DC Huffman table 1(HTA2=1)/Setting prohibited(HTA2=0) + #1 + + + + + HTA1 + Huffman table number (AC) for the first color componentNOTE: Read-only in Decompression. + 1 1 read-write - 00 - 1 frame - #00 + 0 + AC Huffman table 0(HTD1=0)/Setting prohibited(HTD1=1) + #0 - 01 - 2 frames - #01 + 1 + AC Huffman table 1(HTD1=1)/Setting prohibited(HTD1=0) + #1 + + + + HTD1 + Huffman table number (DC) for the first color component NOTE: Read-only in Decompression. + 0 + 0 + read-write + - 10 - 3 frames - #10 + 0 + DC Huffman table 0(HTA1=0)/Setting prohibited(HTA1=1) + #0 - 11 - 4 frames. - #11 + 1 + DC Huffman table 1(HTA1=1)/Setting prohibited(HTA1=0) + #1 - SPCKD - SPI Clock Delay Register - 0x0C + JCDRIU + JPEG Code DRI Upper Register + 0x005 8 read-write 0x00 0xFF - SCKDL - RSPCK Delay Setting + DRIU + Upper Bytes of MCUs Preceding RST MarkerWhen both upper and lower bytes are set to 00h, neither a DRI nor an RST marker is placed.NOTE: Read-only in Decompression. 0 - 2 + 7 read-write - - - 000 - 1 RSPCK - #000 - - - 001 - 2 RSPCK - #001 - - - 010 - 3 RSPCK - #010 - - - 011 - 4 RSPCK - #011 - - - 100 - 5 RSPCK - #100 - - - 101 - 6 RSPCK - #101 - - - 110 - 7 RSPCK - #110 - - - 111 - 8 RSPCK - #111 - - - SSLND - SPI Slave Select Negation Delay Register - 0x0D + JCDRID + JPEG Code DRI Lower Register + 0x006 8 read-write 0x00 0xFF - SLNDL - SSL Negation Delay Setting + DRID + Lower Bytes of MCUs Preceding RST MarkerWhen both upper and lower bytes are set to 00h, neither a DRI nor an RST marker is placed.NOTE: Read-only in Decompression. 0 - 2 + 7 read-write - - - 000 - 1 RSPCK - #000 - - - 001 - 2 RSPCK - #001 - - - 010 - 3 RSPCK - #010 - - - 011 - 4 RSPCK - #011 - - - 100 - 5 RSPCK - #100 - - - 101 - 6 RSPCK - #101 - - - 110 - 7 RSPCK - #110 - - - 111 - 8 RSPCK - #111 - - - SPND - SPI Next-Access Delay Register - 0x0E + JCVSZU + JPEG Code Vertical Size Upper Register + 0x007 8 read-write 0x00 0xFF - SPNDL - SPI Next-Access Delay Setting + VSZU + Upper Bytes of Vertical Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. 0 - 2 + 7 read-write - - - 000 - 1 RSPCK + 2 PCLK - #000 - - - 001 - 2 RSPCK + 2 PCLK - #001 - - - 010 - 3 RSPCK + 2 PCLK - #010 - - - 011 - 4 RSPCK + 2 PCLK - #011 - - - 100 - 5 RSPCK + 2 PCLK - #100 - - - 101 - 6 RSPCK + 2 PCLK - #101 - - - 110 - 7 RSPCK + 2 PCLK - #110 - - - 111 - 8 RSPCK + 2 PCLK - #111 - - - SPCR2 - SPI Control Register 2 - 0x0F + JCVSZD + JPEG Code Vertical Size Lower Register + 0x008 8 read-write 0x00 0xFF - SCKASE - RSPCK Auto-Stop Function Enable - 4 - 4 + VSZD + Lower Bytes of Vertical Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. + 0 + 7 read-write - - - 0 - Disables the RSPCK auto-stop function - #0 - - - 1 - Enables the RSPCK auto-stop function - #1 - - + + + + JCHSZU + JPEG Code Horizontal Size Upper Register + 0x009 + 8 + read-write + 0x00 + 0xFF + - PTE - Parity Self-Testing - 3 - 3 + HSZU + Upper Bytes of Horizontal Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. + 0 + 7 + read-write + + + + + JCHSZD + JPEG Coded Horizontal Size Lower Register + 0x00A + 8 + read-write + 0x00 + 0xFF + + + HSZD + Lower Bytes of Horizontal Image SizeIn decompression process, a downloaded value from the JPEG coded data is set. NOTE: Read-only in Decompression. + 0 + 7 + read-write + + + + + JCDTCU + JPEG Code Data Count Upper Register + 0x00B + 8 + read-only + 0x00 + 0xFF + + + DCU + Upper bytes of the counted amount of data to be compressed The values of this register are reset before compression starts.NOTE: Read-only in Decompression. + 0 + 7 + read-only + + + + + JCDTCM + JPEG Code Data Count Middle Register + 0x00C + 8 + read-only + 0x00 + 0xFF + + + DCM + Middle bytes of the counted amount of data to be compressedThe values of this register are reset before compression starts. NOTE: Read-only in Decompression. + 0 + 7 + read-only + + + + + JCDTCD + JPEG Code Data Count Lower Register + 0x00D + 8 + read-only + 0x00 + 0xFF + + + DCD + Lower bytes of the counted amount of data to be compressedThe values of this register are reset before compression starts.NOTE: Read-only in Decompression. + 0 + 7 + read-only + + + + + JINTE0 + JPEG Interrupt Enable Register 0 + 0x00E + 8 + read-write + 0x00 + 0xFF + + + INT7 + This bit enables an interrupt to be generated when the number of data in the restart interval of the Huffman-coding segment is not correct in decompression.When this bit is not set to enable interrupt generation, an error code is not returned. + 7 + 7 read-write 0 - Disables the self-diagnosis function of the parity circuit + Disabled #0 1 - Enables the self-diagnosis function of the parity circuit + Enabled #1 - SPIIE - SPI Idle Interrupt Enable - 2 - 2 + INT6 + This bit enables an interrupt to be generated when the total number of data in the Huffman-coding segment is not correct in decompression. When this bit is not set to enable interrupt generation, an error code is not returned. + 6 + 6 read-write 0 - Disables the generation of idle interrupt requests + Disabled #0 1 - Enables the generation of idle interrupt requests + Enabled #1 - SPOE - Parity Mode - 1 - 1 + INT5 + This bit enables an interrupt to be generated when the final number of MCU data in the Huffman-coding segment is not correct in decompression. When this bit is not set to enable interrupt generation, an error code is not returned. + 5 + 5 read-write 0 - Selects even parity for use in transmission and reception + Disabled #0 1 - Selects odd parity for use in transmission and reception + Enabled #1 - SPPE - Parity Enable - 0 - 0 + INT3 + This bit enables an interrupt to be generated when it has been determined that the image size and the subsampling setting of the compressed data can be read through analyzing the data. + 3 + 3 read-write 0 - Does not add the parity bit to transmit data and does not check the parity bit of receive data + Disabled #0 1 - Adds the parity bit to transmit data and checks the parity bit of receive data (when SPCR.TXMD = 0) / Adds the parity bit to transmit data but does not check the parity bit of receive data (when SPCR.TXMD = 1) + Enabled #1 @@ -61192,159 +49914,134 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - 8 - 0x02 - SPCMD[%s] - SPI Command Register %s - 0x10 - 16 + JINTS0 + JPEG Interrupt Status Register 0 + 0x00F + 8 read-write - 0x070D - 0xFFFF + 0x00 + 0xFF - SCKDEN - RSPCK Delay Setting Enable - 15 - 15 + INS6 + This bit is set to 1 when this module completes compression process normally. + 6 + 6 read-write - - - 0 - An RSPCK delay of 1 RSPCK - #0 - - - 1 - An RSPCK delay is equal to the setting of the SPI clock delay register (SPCKD) - #1 - - + zeroToClear + modify - SLNDEN - SSL Negation Delay Setting Enable - 14 - 14 + INS5 + This bit is set to 1 when a compressed data error occurs. + 5 + 5 read-write - - - 0 - An SSL negation delay of 1 RSPCK - #0 - - - 1 - An SSL negation delay is equal to the setting of the SPI slave select negation delay register (SSLND) - #1 - - + zeroToClear + modify + + + INS3 + This bit is set to 1 when the image size and pixel format can be read. When an interrupt occurs, this module stops processing and the state is indicated by the JCRST register. To make this module resume processing, set the JPEG core process stop clear command bit (JRST) in JCCMD. + 3 + 3 + read-write + zeroToClear + modify + + + + JCDERR + JPEG Code Decode Error Register + 0x010 + 8 + read-write + 0x0A + 0xFF + - SPNDEN - SPI Next-Access Delay Enable - 13 - 13 + ERR + Error Code (See tables )Identify the type of the error which has occurred in the compressed data analysis for decompression. + 0 + 3 read-write - 0 - A next-access delay of 1 RSPCK + 2 PCLK - #0 + 0000 + Normal(Decompression error codes)/Normal(Segment error codes) + #0000 - 1 - A next-access delay is equal to the setting of the SPI next-access delay register (SPND) - #1 + 0001 + SOI not detected(Decompression error codes) + #0001 - - - - LSBF - SPI LSB First - 12 - 12 - read-write - - 0 - MSB first - #0 + 0010 + SOF1 to SOFF detected(Decompression error codes) + #0010 - 1 - LSB first - #1 + 0011 + Unprovided pixel format detected(Decompression error codes) + #0011 - - - - SPB - SPI Data Length Setting - 8 - 11 - read-write - 0100 - 8 bits + SOF accuracy error(Decompression error codes) #0100 0101 - 8 bits + DQT accuracy error(Decompression error codes) #0101 0110 - 8 bits + Component error 1(Decompression error codes) #0110 0111 - 8 bits + Component error 2(Decompression error codes) #0111 1000 - 9 bits + SOF0, DQT, and DHT not detected when SOS detected(Decompression error codes) #1000 1001 - 10 bits + SOS not detected(Decompression error codes) #1001 1010 - 11 bits + EOI not detected (default)(Decompression error codes) #1010 1011 - 12 bits + Restart interval data number error detected(Decompression error codes)/Restart interval data number error(Segment error codes) #1011 1100 - 13 bits + Image size error detected(Decompression error codes)/Image size error(Segment error codes) #1100 1101 - 14 bits + Last MCU data number error detected(Decompression error codes)/Last MCU data number error(Segment error codes) #1101 1110 - 15 bits + Block data number error detected(Decompression error codes)/Block data number error(Segment error codes) #1110 - - 1111 - 16 bits - #1111 - others Setting prohibited @@ -61352,1329 +50049,1277 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang + + + + JCRST + JPEG Code Reset Register + 0x011 + 8 + read-only + 0x00 + 0xFF + - SSLKP - SSL Signal Level Keeping - 7 - 7 - read-write + RST + Operating State + 0 + 0 + read-only 0 - Negates all SSL signals upon completion of transfer + State other than below #0 1 - Keeps the SSL signal level from the end of transfer until the beginning of the next access + Suspended state caused by interrupt sources of JINTE0 #1 + + + + JIFECNT + JPEG Interface Compression Control Register + 0x040 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - SSLA - SSL Signal Assertion Setting - 4 - 6 + JOUTSWAP + Byte/Halfword/Word Swap Output coded data in compression is swapped. + 8 + 10 read-write 000 - SSL0 + (1) (2) (3) (4) (5) (6) (7) (8) #000 001 - SSL1 + (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] #001 010 - SSL2 + (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] #010 011 - SSL3 + (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] #011 - others - Setting prohibited - true - - - - - BRDV - Bit Rate Division Setting - 2 - 3 - read-write - - - 00 - These bits select the base bit rate - #00 + 100 + (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] + #100 - 01 - These bits select the base bit rate divided by 2 - #01 + 101 + (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] + #101 - 10 - These bits select the base bit rate divided by 4 - #10 + 110 + (7) (8) (5) (6) (3) (4) (1) (2) [Word - Halfword swap] + #110 - 11 - These bits select the base bit rate divided by 8 - #11 + 111 + (8) (7) (6) (5) (4) (3) (2) (1) [Word - Word - byte swap] + #111 - CPOL - RSPCK Polarity Setting - 1 - 1 + DINRINI + Address Initialization when Resuming Input of Image Data Lines This bit is only valid when the count mode for stopping the input of image data lines is on. Set this bit before writing 1 to the data-line resume command bit. + 6 + 6 read-write 0 - RSPCK is low when idle + The transfer address is not initialized when the input of image data lines is restarted #0 1 - RSPCK is high when idle + The transfer address is initialized when the input of image data lines is restarted #1 - CPHA - RSPCK Phase Setting - 0 - 0 + DINRCMD + Input Image Data Lines Resume Command This bit is valid only when the count mode for stopping the input of image data lines is on. Setting this bit to 1 resumes reading input image data. This bit is always read as 0. + 5 + 5 + write-only + + + DINLC + Count Mode Setting for Stopping Input Image Data Lines + 4 + 4 read-write 0 - Data sampling on odd edge, data variation on even edge + Count mode for stopping the input of image data lines is off #0 1 - Data variation on odd edge, data sampling on even edge + Count mode for stopping the input of image data lines is on #1 - - - - SPDCR2 - SPI Data Control Register 2 - 0x20 - 8 - read-write - 0x00 - 0xFF - - BYSW - Byte Swap Operating Mode Select + DINSWAP + Byte/Halfword Swap 0 - 0 + 2 read-write - 0 - Byte Swap Operating Mode disabled - #0 + 000 + (1) (2) (3) (4) (5) (6) (7) (8) + #000 - 1 - Byte Swap Operating Mode enabled - #1 + 001 + (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] + #001 - - - - - - - - R_SPI1 - 0x40072100 - - - R_SRAM - SRAM - 0x40002000 - - 0x00000000 - 0x01 - registers - - - 0x00000004 - 0x01 - registers - - - 0x00000008 - 0x01 - registers - - - 0x000000C0 - 0x005 - registers - - - 0x000000D0 - 0x01 - registers - - - 0x000000D4 - 0x01 - registers - - - 0x000000D8 - 0x01 - registers - - - - PARIOAD - SRAM Parity Error Operation After Detection Register - 0x00 - 8 - read-write - 0x00 - 0xFF - - - OAD - Operation after Detection - 0 - 0 - read-write - - 1 - Reset - #1 + 010 + (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] + #010 - 0 - Non maskable interrupt. - #0 + 011 + (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] + #011 - - - - - - SRAMPRCR - SRAM Protection Register - 0x04 - 8 - read-write - 0x00 - 0xFF - - - KW - Write Key Code - 1 - 7 - write-only - - 1111000 - Writing to the RAMPRCR bit is valid, when the KEY bits are written 1111000b. - #1111000 + 100 + (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] + #100 - others - Writing to the RAMPRCR bit is invalid. - true + 101 + (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] + #101 - - - - SRAMPRCR - Register Write Control - 0 - 0 - read-write - - 0 - Disable writes to protected registers - #0 + 110 + (7) (8) (5) (6) (3) (4) (1) (2) [Word - Halfword swap] + #110 - 1 - Enable writes to protected registers. - #1 + 111 + (8) (7) (6) (5) (4) (3) (2) (1) [Word - Halfword - byte swap] + #111 - SRAMWTSC - RAM Wait State Control Register - 0x08 - 8 + JIFESA + JPEG Interface Compression Source Address Register + 0x044 + 32 read-write - 0x0E - 0xFF + 0x00000000 + 0xFFFFFFFF - SRAMHSWTEN - SRAMHS Wait Enable - 4 - 4 - read-write - - - 0 - Not add wait state in read access cycle to SRAMHS - #0 - - - 1 - Add wait state in read access cycle to SRAMHS - #1 - - - - - SRAM1WTEN - SRAM1 Wait Enable - 3 - 3 + ESA + Input Image Data Source Address (in 8-byte units) The lower three bits should be set to 0. + 0 + 31 read-write - - - 0 - Not add wait state in read access cycle to SRAM1 - #0 - - - 1 - Add wait state in read access cycle to SRAM1 - #1 - - + + + + JIFESOFST + JPEG Interface Compression Line Offset Register + 0x048 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - SRAM0WTEN - SRAM0 Wait Enable - 2 - 2 + ESMW + Input Image Data Lines Offset(in 8-byte units)The lower three bits should be set to 0. + 0 + 14 read-write - - - 0 - Not add wait state in read access cycle to SRAM0 - #0 - - - 1 - Add wait state in read access cycle to SRAM0 - #1 - - + + + + JIFEDA + JPEG Interface Compression Destination Address Register + 0x04C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - ECCRAMRDWTEN - ECCRAM Read wait enable - 1 - 1 + EDA + Input Image Data Lines Offset (in 8-byte units) The lower three bits should be set to 0. + 0 + 31 read-write - - - 0 - Not add wait state in read access cycle to SRAM0 (ECC area) - #0 - - - 1 - Add wait state in read access cycle to SRAM0 (ECC area) - #1 - - + + + + JIFESLC + JPEG Interface Compression Source Line Count Register + 0x050 + 32 + read-write + 0xFFF8FFF8 + 0xFFFFFFFF + - ECCRAMWRWTEN - ECCRAM Write Wait Enable - 0 - 0 - read-write - - - 0 - Not add wait state in write access cycle to SRAM0 (ECC area) - #0 - - - 1 - Add wait state in write access cycle to SRAM0 (ECC area) - #1 - - + LINES + Number of Input Image Data Lines to be Read (in 8-line units) The lower three bits should be set to 0. + 0 + 15 + read-write - ECCMODE - ECC Operating Mode Control Register - 0xC0 - 8 + JIFDCNT + JPEG Interface Decompression Control Register + 0x058 + 32 read-write - 0x00 - 0xFF + 0x01000000 + 0xFFFFFFFF - ECCMOD - ECC Operating Mode Select - 0 - 1 + VINTER + Vertical SubsamplingSubsamples vertical output image data. + 28 + 29 read-write 00 - Disable ECC function + No subsampling #00 01 - Setting prohibited + Subsamples output data into 1/2. #01 10 - Enable ECC function without error checking + Subsamples output data into 1/4. #10 11 - Enable ECC function with error checking + Subsamples output data into 1/8. #11 - - - - ECC2STS - ECC 2-Bit Error Status Register - 0xC1 - 8 - read-write - 0x00 - 0xFF - - ECC2ERR - ECC 2-Bit Error Status - 0 - 0 + HINTER + Horizontal Subsampling Subsamples horizontal output image data. + 26 + 27 read-write - zeroToClear - modify - 0 - No 2-bit ECC error occurred - #0 + 00 + No subsampling + #00 - 1 - 2-bit ECC error occurred. - #1 + 01 + Subsamples output data into 1/2. + #01 + + + 10 + Subsamples output data into 1/4. + #10 + + + 11 + Subsamples output data into 1/8. + #11 - - - - ECC1STSEN - ECC 1-Bit Error Information Update Enable Register - 0xC2 - 8 - read-write - 0x00 - 0xFF - - E1STSEN - ECC 1-Bit Error Information Update Enable - 0 - 0 + OPF + Specifies output image data pixel format. + 24 + 25 read-write - 0 - Disables updating of the 1-bit ECC error information. - #0 + 01 + ARGB8888 + #01 - 1 - Enables updating of the 1-bit ECC error information. - #1 + 10 + RGB565 + #10 + + + others + Setting prohibited + true - - - - ECC1STS - ECC 1-Bit Error Status Register - 0xC3 - 8 - read-write - 0x00 - 0xFF - - ECC1ERR - ECC 1-Bit Error Status - 0 - 0 + JINRINI + Address Initialization when Input Coded Data is Resumed This bit is only valid when the count mode for stopping the input of coded data is on. Set this bit before writing 1 to the data resume command bit. + 14 + 14 read-write - zeroToClear - modify 0 - No 1-bit ECC error occurred + The transfer address is not initialized when the input of coded data is restarted. #0 1 - 1-bit ECC error occurred + The transfer address is initialized when the input of coded data is restarted. #1 - - - - ECCPRCR - ECC Protection Register - 0xC4 - 8 - read-write - 0x00 - 0xFF - - KW - Write Key Code - 1 - 7 + JINRCMD + Input Coded Data Resume CommandThis bit is valid only when the count mode for stopping the input of coded data is on. Setting this bit to 1 resumes reading input coded data. This bit is always read as 0. + 13 + 13 write-only - - - 1111000 - Writing to the ECCRAMPRCR bit is valid, when the KEY bits are written 1111000b. - #1111000 - - - others - Writing to the ECCRAMPRCR bit is invalid. - true - - - ECCPRCR - Register Write Control - 0 - 0 + JINC + Count Mode Setting for Stopping Input Coded Data + 12 + 12 read-write 0 - Disable writes to the protected registers + Count mode for stopping the input of coded data is off. #0 1 - Enable writes to the protected registers + Count mode for stopping the input of coded data is on #1 - - - - ECCPRCR2 - ECC Protection Register 2 - 0xD0 - 8 - read-write - 0x00 - 0xFF - - KW2 - Write Key Code - 1 - 7 - write-only + JINSWAP + Byte/Word/Longword Swap Input coded data in decompression is swapped. + 8 + 10 + read-write - 1111000 - These bits enable or disable writes to the ECCPRCR2 bit.. - #1111000 + 000 + (1) (2) (3) (4) (5) (6) (7) (8) + #000 - others - Writing to the ECCRAMPRCR2 bit is invalid. - true + 001 + (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] + #001 + + + 010 + (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] + #010 + + + 011 + (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] + #011 + + + 100 + (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] + #100 + + + 101 + (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] + #101 + + + 110 + (7) (8) (5) (6) (3) (4) (1) (2) [Word -Halfword swap] + #110 + + + 111 + (8) (7) (6) (5) (4) (3) (2) (1) [Word - Halfword - byte swap] + #111 - ECCPRCR2 - Register Write Control - 0 - 0 + DOUTRINI + Address Initialization when Resuming Output of Image Data Lines This bit is only valid when the count mode for stopping the output of image data lines is on. Set this bit before writing 1 to the data-line resume command bit. + 6 + 6 read-write 0 - Disable writes to the protected registers + The transfer address is not initialized when the output of lines of image data is restarted. #0 1 - Enable writes to the protected registers. + The transfer address is initialized when the output of lines of image data is restarted #1 - - - - ECCETST - ECC Test Control Register - 0xD4 - 8 - read-write - 0x00 - 0xFF - - TSTBYP - ECC Bypass Select - 0 - 0 + DOUTRCMD + Output Image Data Lines Resume Command This bit is valid only when the count mode for stopping the output of image data lines is on. Setting this bit to 1 resumes writing image data. This bit is always read as 0. + 5 + 5 + write-only + + + DOUTLC + Count Mode for Stopping Output Image Data Lines + 4 + 4 read-write 0 - ECC bypass disabled. + Count mode for stopping the output of image data lines is off. #0 1 - ECC bypass enabled. + Count mode for stopping the output of image data lines is on #1 - - - - ECCOAD - SRAM ECC Error Operation After Detection Register - 0xD8 - 8 - read-write - 0x00 - 0xFF - - OAD - Operation after Detection + DOUTSWAP + Byte/Word Swap Output image data in decompression is swapped. 0 - 0 + 2 read-write - 0 - Non-maskable interrupt - #0 + 000 + (1) (2) (3) (4) (5) (6) (7) (8) + #000 - 1 - Reset - #1 + 001 + (2) (1) (4) (3) (6) (5) (8) (7) [Byte swap] + #001 + + + 010 + (3) (4) (1) (2) (7) (8) (5) (6) [Halfword swap] + #010 + + + 011 + (4) (3) (2) (1) (8) (7) (6) (5) [Halfword - byte swap] + #011 + + + 100 + (5) (6) (7) (8) (1) (2) (3) (4) [Word swap] + #100 + + + 101 + (6) (5) (8) (7) (2) (1) (4) (3) [Word - byte swap] + #101 + + + 110 + (7) (8) (5) (6) (3) (4) (1) (2) [Word - Halfword swap] + #110 + + + 111 + (8) (7) (6) (5) (4) (3) (2) (1) [Word - Halfword - byte swap] + #111 - - - - R_SRC - Sampling Rate Converter - 0x40048000 - - 0x00000000 - 0x56C0 - registers - - - 0x00005FF0 - 0x010 - registers - - - 5552 - 0x4 - SRCFCTR[%s] - Filter Coefficient Table [%s] - 0x00 + JIFDSA + JPEG Interface Decompression Source Address Register + 0x05C 32 read-write 0x00000000 - 0xFFC00000 + 0xFFFFFFFF - SRCFCOE - Stores a filter coefficient value. + DSA + Input Coded Data Source AddressInput Coded Data Source Address (in 8-byte units) The lower three bits should be set to 0. 0 - 21 + 31 read-write - SRCID - Input Data Register - 0x5FF0 + JIFDDOFST + JPEG Interface Decompression Line Offset Register + 0x060 32 - write-only + read-write 0x00000000 0xFFFFFFFF - SRCID - SRCID is a 32-bit writ-only register that is used to input the data before sampling rate conversion. All the bits are read as 0. + DDMW + Output Image Data Lines Offset (in 8-byte units) The lower three bits should be set to 0. 0 - 31 - write-only + 14 + read-write - SRCOD - Output Data Register - 0x5FF4 + JIFDDA + JPEG Interface Decompression Destination Address Register + 0x064 32 - read-only + read-write 0x00000000 0xFFFFFFFF - SRCOD - SRCOD is a 32-bit read-only register used to output the data after sampling rate conversion. The data in the 16-stage output data FIFO is read through SRCOD. When the number of data in the output data FIFO is zero after the start of conversion, the value previously read is read again. + DDA + Output Image Data Destination Address (in 8-byte units) The lower three bits should be set to 0. 0 31 - read-only + read-write - SRCIDCTRL - Input Data Control Register - 0x5FF8 - 16 + JIFDSDC + JPEG Interface Decompression Source Data Count Register + 0x068 + 32 read-write - 0x0000 - 0xFFFF + 0xFFF8FFF8 + 0xFFFFFFFF - IED - Input Data Endian - 9 - 9 + JDATAS + Amount of Input Coded Data to be Read (in 8-byte units) The lower three bits should be set to 0. + 0 + 15 read-write - - - 0 - Endian formats 1 are the same between the CPU and input data. - #0 - - - 1 - Endian formats 1 are different between the CPU and input data. - #1 - - + + + + JIFDDLC + JPEG Interface Decompression Destination Line Count Register + 0x06C + 32 + read-write + 0xFFF8FFF8 + 0xFFFFFFFF + - IEN - Input FIFO Empty Interrupt Enable - 8 - 8 + LINES + Number of Input Image Lines to Be ReadThe lower three bits should be set to 0. These bits are read as0.Number of input image data lines to be read, in 8-line units. + 0 + 15 read-write - - - 0 - Input FIFO empty interrupt is disabled. - #0 - - - 1 - Input FIFO empty interrupt is enabled. - #1 - - + + + + JIFDADT + JPEG Interface Decompression alpha Set Register + 0x070 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - IFTRG - Input FIFO Data Triggering Number + ALPHA + Setting of the alpha value for output in ARGB8888 format. 0 - 1 + 7 read-write - - - 00 - 0 - #00 - - - 01 - 2 - #01 - - - 10 - 4 - #10 - - - 11 - 6 - #11 - - - - SRCCTRL - Control Register - 0x5FFC - 16 + + JINTE1 + JPEG Interrupt Enable Register 1 + 0x08C + 32 read-write - 0x0000 - 0xFFFF + 0x00000000 + 0xFFFFFFFF - FICRAE - Filter Coefficient Table Access Enable - 15 - 15 + CBTEN + Enables or disables a data transfer processing interrupt request (JDTI) when the CBTF bit in JINTS1 is set to 1. + 6 + 6 read-write 0 - Reading/writing to filter coefficient table RAM is disabled. + Disables an interrupt request. #0 1 - Reading/writing to filter coefficient table RAM is enabled. + Enables an interrupt request. #1 - CEEN - Conversion End Interrupt Enable - 13 - 13 + DINLEN + Enables or disables a data transfer processing interrupt request (JDTI) when the DINLF bit in JINTS1 is set to 1. + 5 + 5 read-write 0 - Disables conversion end interrupt requests. + Disables an interrupt request. #0 1 - Enables conversion end interrupt requests. + Enables an interrupt request. #1 - SRCEN - Module Enable - 12 - 12 + DBTEN + Enables or disables a data transfer processing interrupt request (JDTI) when the DBTF bit in JINTS1 is set to 1. + 2 + 2 read-write 0 - Disables this module operation. + Disables an interrupt request. #0 1 - Enables this module operation. + Enables an interrupt request. #1 - UDEN - Output Data FIFO Underflow Interrupt Enable - 11 - 11 + JINEN + Enables or disables a data transfer processing interrupt request (JDTI) when the JINF bit in JINTS1 is set to 1. + 1 + 1 read-write 0 - Disables output data FIFO underflow interrupt requests. + Disables an interrupt request. #0 1 - Enables output data FIFO underflow interrupt requests. + Enables an interrupt request. #1 - OVEN - Output Data FIFO Overwrite Interrupt Enable - 10 - 10 + DOUTLEN + Enables or disables a data transfer processing interrupt request (JDTI) when the DOUTLF bit in JINTS1 is set to 1 + 0 + 0 read-write 0 - Output data FIFO overwrite interrupt is disabled. + Disables an interrupt request. #0 1 - Output data FIFO overwrite interrupt is enabled. + Enables an interrupt request. #1 + + + + JINTS1 + JPEG Interrupt Status Register 1 + 0x090 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CBTF + This bit is set to 1 when the last output coded data is written in compression. + 6 + 6 + read-write + modify + - FL - Internal Work Memory Flush - 9 - 9 + DINLF + This bit is set to 1 when the number of input image data lines indicated by JIFESLC is read in compression. This bit is valid only when the DINLC bit in JIFECNT is set to 1. + 5 + 5 + read-write + modify + + + DBTF + This bit is set to 1 when the last output image data is written in decompression. + 2 + 2 + read-write + modify + + + JINF + This bit is set to 1 when the amount of input coded data indicated by JIFDSDC is read in decompression. This bit is valid only when the JINC bit in JIFDCNT is set to 1. + 1 + 1 + read-write + modify + + + DOUTLF + In decompression, this bit is set to 1 when the number of lines of output image data indicated by JIFDDLC have been written. This bit is only valid when the DOUTLC bit in JIFDCNT is set to 1. + 0 + 0 + read-write + modify + + + + + 64 + 0x1 + JCQTBL0[%s] + Quantization Table 0 + 0x0100 + 8 + write-only + 0x00 + 0x00 + + + JCQTBL1[%s] + Quantization Table 1 + 0x0140 + + + JCQTBL2[%s] + Quantization Table 2 + 0x0180 + + + JCQTBL3[%s] + Quantization Table 3 + 0x01C0 + + + 28 + 0x1 + JCHTBD0[%s] + DC Huffman Table 0 + 0x0200 + 8 + read-write + 0x00 + 0x00 + + + JCHTBD1[%s] + DC Huffman Table 1 + 0x0300 + + + 178 + 0x1 + JCHTBA0[%s] + AC Huffman Table 0 + 0x0220 + 8 + read-write + 0x00 + 0x00 + + + JCHTBA1[%s] + DC Huffman Table 1 + 0x0320 + + + + + R_KINT + Key Interrupt Function + 0x40080000 + + 0x00000000 + 0x01 + registers + + + 0x00000004 + 0x01 + registers + + + 0x00000008 + 0x01 + registers + + + + KRCTL + KEY Return Control Register + 0x00 + 8 + read-write + 0x00 + 0xFF + + + KRMD + Usage of Key Interrupt Flags(KR0 to KR7) + 7 + 7 read-write 0 - no effect + Do not use key interrupt flags #0 1 - starts converting the sampling rate of all the data in the input FIFO, input buffer memory, and intermediate memory(i.e., flush processing). + Use key interrupt flags. #1 - CL - Internal Work Memory Clear - 8 - 8 + KREG + Detection Edge Selection (KRF0 to KRF7) + 0 + 0 read-write 0 - no effect + Falling edge #0 1 - Clears the input FIFO, output FIFO, input buffer memory, intermediate memory and accumulator. + Rising edge #1 + + + + KRF + KEY Return Flag Register + 0x04 + 8 + read-write + 0x00 + 0xFF + zeroToClear + modify + - IFS - Input Sampling Rate - 4 + KRF7 + Key interrupt flag 7 + 7 7 read-write + zeroToClear + modify - 0000 - 8.0 kHz - #0000 - - - 0001 - 11.025 kHz - #0001 - - - 0010 - 12.0 kHz - #0010 - - - 0011 - Setting prohibited - #0011 - - - 0100 - 16.0 kHz - #0100 - - - 0101 - 22.05 kHz - #0101 - - - 0110 - 24.0 kHz - #0110 - - - 0111 - Setting prohibited - #0111 - - - 1000 - 32.0 kHz - #1000 - - - 1001 - 44.1 kHz - #1001 - - - 1010 - 48.0 kHz - #1010 + 0 + No interrupt detected + #0 - others - Settings prohibited. - true + 1 + Interrupt detected. + #1 - OFS - Output Sampling Rate - 0 - 2 + KRF6 + Key interrupt flag 6 + 6 + 6 read-write + zeroToClear + modify - 000 - 44.1 kHz - #000 - - - 001 - 48.0 kHz - #001 - - - 010 - 32.0 kHz - #010 - - - 011 - Setting prohibited - #011 + 0 + No interrupt detected + #0 - 100 - 8.0 kHz ( Valid only when IFS[3:0] =1001b ) - #100 + 1 + Interrupt detected. + #1 + + + + KRF5 + Key interrupt flag 5 + 5 + 5 + read-write + zeroToClear + modify + - 101 - 16.0 kHz ( Valid only when IFS[3:0] =1001b ) - #101 + 0 + No interrupt detected + #0 - others - Settings other than above are prohibited. - true + 1 + Interrupt detected. + #1 - - - - SRCODCTRL - Output Data Control Register - 0x5FFA - 16 - read-write - 0x0000 - 0xFFFF - - OCH - Output Data Channel Exchange - 10 - 10 + KRF4 + Key interrupt flag 4 + 4 + 4 read-write + zeroToClear + modify 0 - Does not exchange the channels (the same order as data input) + No interrupt detected #0 1 - Exchanges the channels (the opposite order from data input) + Interrupt detected. #1 - OED - Output Data Endian - 9 - 9 + KRF3 + Key interrupt flag 3 + 3 + 3 read-write + zeroToClear + modify 0 - Endian formats are the same between the chip and input data. + No interrupt detected #0 1 - Endian formats are different between the chip and input data. + Interrupt detected. #1 - OEN - Output Data FIFO Full Interrupt Enable - 8 - 8 + KRF2 + Key interrupt flag 2 + 2 + 2 read-write + zeroToClear + modify 0 - Output data FIFO full interrupt is disabled. + No interrupt detected #0 1 - Output data FIFO full interrupt is enabled. + Interrupt detected. #1 - OFTRG - Output FIFO Data Trigger Number - 0 + KRF1 + Key interrupt flag 1 + 1 1 read-write + zeroToClear + modify - 00 - 1 - #00 + 0 + No interrupt detected + #0 - 01 - 4 - #01 + 1 + Interrupt detected. + #1 + + + + KRF0 + Key interrupt flag 0 + 0 + 0 + read-write + zeroToClear + modify + - 10 - 8 - #10 + 0 + No interrupt detected + #0 - 11 - 12 - #11 + 1 + Interrupt detected. + #1 - SRCSTAT - Status Register - 0x5FFE - 16 + KRM + KEY Return Mode Register + 0x08 + 8 read-write - 0x0002 - 0xFFFF + 0x00 + 0xFF - OFDN - Output FIFO Data CountIndicates the number of data units in the output FIFO. - 11 - 15 + KRM7 + Key interrupt mode control 7 + 7 + 7 read-write + + + 0 + Does not detect key interrupt signal + #0 + + + 1 + Detect key interrupt signal. + #1 + + - IFDN - Input FIFO Data CountIndicates the number of data units in the input FIFO. - 7 - 10 + KRM6 + Key interrupt mode control 6 + 6 + 6 read-write + + + 0 + Does not detect key interrupt signal + #0 + + + 1 + Detect key interrupt signal. + #1 + + - CEF - Conversion End Flag + KRM5 + Key interrupt mode control 5 5 5 read-write - zeroToClear - modify 0 - All of the output data has not been read out. + Does not detect key interrupt signal #0 1 - All of the output data has been read out. + Detect key interrupt signal. #1 - FLF - Flush Processing Status Flag + KRM4 + Key interrupt mode control 4 4 4 - read-only + read-write 0 - Flash processing is completed. + Does not detect key interrupt signal #0 1 - Flash processing is in progress. + Detect key interrupt signal. #1 - UDF - Output FIFO Underflow Interrupt Request Flag + KRM3 + Key interrupt mode control 3 3 3 read-write - zeroToClear - modify 0 - Output data FIFO has not been read out. + Does not detect key interrupt signal #0 1 - Output data FIFO has been read out. + Detect key interrupt signal. #1 - OVF - Output Data FIFO Overwrite Interrupt Request Flag + KRM2 + Key interrupt mode control 2 2 2 read-write - zeroToClear - modify 0 - Next data conversion processing is not completed. + Does not detect key interrupt signal #0 1 - Next data conversion processing is completed. + Detect key interrupt signal. #1 - IINT - Input Data FIFO Empty Interrupt Request Flag + KRM1 + Key interrupt mode control 1 1 1 read-write - zeroToClear - modify 0 - Number of data units in the input FIFO has not become equal to or smaller than the specified triggering number. + Does not detect key interrupt signal #0 1 - Number of data units in the input FIFO has become equal to or smaller than the specified triggering number. + Detect key interrupt signal. #1 - OINT - Output Data FIFO Full Interrupt Request Flag + KRM0 + Key interrupt mode control 0 0 0 read-write - zeroToClear - modify 0 - Number of data units in the output FIFO has not become equal to or greater than the specified triggering number. + Does not detect key interrupt signal #0 1 - Number of data units in the output FIFO has become equal to or greater than the specified triggering number. + Detect key interrupt signal. #1 @@ -62684,1151 +51329,20253 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - R_SSI0 - Serial Sound Interface Enhanced (SSIE) - 0x4004E000 - - 0x00 - 8 - registers - - - 0x10 - 24 - registers - - - - SSICR - Control Register - 0x00 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - CKS - Oversampling Clock Select - 30 - 30 - read-write - - - 0 - AUDIO_CLK input - #0 - - - 1 - Setting prohibited - #1 - - - - - TUIEN - Transmit Underflow Interrupt Enable - 29 - 29 - read-write - - - 0 - Disables an underflow interrupt. - #0 - - - 1 - Enables an underflow interrupt. - #1 - - - - - TOIEN - Transmit Overflow Interrupt Enable - 28 - 28 - read-write - - - 0 - Disables an overflow interrupt. - #0 - - - 1 - Enables an overflow interrupt. - #1 - - - - - RUIEN - Receive Underflow Interrupt Enable - 27 - 27 - read-write - - - 0 - Disables an underflow interrupt. - #0 - - - 1 - Enables an underflow interrupt. - #1 - - - - - ROIEN - Receive Overflow Interrupt Enable - 26 - 26 - read-write - - - 0 - Disables an overflow interrupt. - #0 - - - 1 - Enables an overflow interrupt. - #1 - - - - - IIEN - Idle Mode Interrupt Enable - 25 - 25 - read-write - - - 0 - Disables an idle mode interrupt. - #0 - - - 1 - Enables an idle mode interrupt. - #1 - - - - - FRM - Channels - 22 - 23 - read-write - - - 00 - One channel - #00 - - - others - Settings other than above are prohibited. - true - - - - - DWL - Data Word Length - 19 - 21 - read-write - - - 000 - 8 bits - #000 - - - 001 - 16 bits - #001 - - - 010 - 18 bits - #010 - - - 011 - 20 bits - #011 - - - 100 - 22 bits - #100 - - - 101 - 24 bits - #101 - - - others - Settings other than above are prohibited. - true - - - - - SWL - System Word LengthSet the system word length to the bit clock frequency/2 fs. - 16 - 18 - read-write - - - 000 - 8 bits (serial bit clock frequency = 16fs ) - #000 - - - 001 - 16 bits (serial bit clock frequency = 32fs ) - #001 - - - 010 - 24 bits (serial bit clock frequency = 48fs ) - #010 - - - 011 - 32 bits (serial bit clock frequency = 64fs ) - #011 - - - others - Settings other than above are prohibited. - true - - - - - MST - Serial WS Direction NOTE: Only the following settings are allowed: (SCKD, SWSD) = (0, 0) and (1, 1). Other settings are prohibited. - 14 - 14 - read-write - - - 0 - Serial word select is input, slave mode. - #0 - - - 1 - Serial word select is output, master mode. - #1 - - - - - BCKP - Serial Bit Clock Polarity - 13 - 13 - read-write - - - 0 - SSIWS and SSIDATA change at the SSISCK falling edge (sampled at the SCK rising edge). - #0 - - - 1 - SSIWS and SSIDATA change at the SSISCK rising edge (sampled at the SCK falling edge). - #1 - - - - - LRCKP - Serial WS Polarity - 12 - 12 - read-write - - - 0 - SSIWS is low for 1st channel, high for 2nd channel. - #0 - - - 1 - SSIWS is high for 1st channel, low for 2nd channel. - #1 - - - - - SPDP - Serial Padding Polarity - 11 - 11 - read-write - - - 0 - Padding bits are low. - #0 - - - 1 - Padding bits are high. - #1 - - - - - SDTA - Serial Data Alignment - 10 - 10 - read-write - - - 0 - Transmitting and receiving in the order of serial data and padding bits - #0 - - - 1 - Transmitting and receiving in the order of padding bits and serial data - #1 - - - - - PDTA - Parallel Data Alignment - 9 - 9 - read-write - - - 0 - The lower bits of parallel data (SSITDR, SSIRDR) are transferred prior to the upper bits.(When data word length is 8 or 16 bits) / Parallel data (SSITDR, SSIRDR) is left-aligned.(When data word length is 18, 20, 22, or 24 bits) - #0 - - - 1 - The upper bits of parallel data (SSITDR, SSIRDR) are transferred prior to the lower bits.(When data word length is 8 or 16 bits) / Parallel data (SSITDR, SSIRDR) is right-aligned.(When data word length is 18, 20, 22, or 24 bits) - #1 - - - - - DEL - Serial Data Delay - 8 - 8 - read-write - - - 0 - 1 clock cycle delay between SSIWS and SSIDATA - #0 - - - 1 - No delay between SSIWS and SSIDATA - #1 - - - - - CKDV - Serial Oversampling Clock Division Ratio - 4 - 7 - read-write - - - 0x0 - CLK - 0x0 - - - 0x1 - CLK/2 - 0x1 - - - 0x2 - CLK/4 - 0x2 - - - 0x3 - CLK/8 - 0x3 - - - 0x4 - CLK/16 - 0x4 - - - 0x5 - CLK/32 - 0x5 - - - 0x6 - CLK/64 - 0x6 - - - 0x7 - CLK/128 - 0x7 - - - 0x8 - CLK/6 - 0x8 - - - 0x9 - CLK/12 (These bits are only settable for channel 0. Setting these bits in the register for channel 1 is prohibited.) - 0x9 - - - 0xA - CLK/24 - 0xA - - - 0xB - CLK/48(These bits are only settable for channel 0. Setting these bits in the register for channel 1 is prohibited.) - 0xB - - - 0xC - CLK/96(These bits are only settable for channel 0. Setting these bits in the register for channel 1 is prohibited.) - 0xC - - - others - Settings other than above are prohibited. - true - - - - - MUEN - Mute EnableNOTE: When this module is muted, the value of outputting serial data is rewritten to 0 but data transmission is not stopped. Write dummy data to the SSIFTDR not to generate a transmit underflow because the number of data in the transmit FIFO is decreasing. - 3 - 3 - read-write - - - 0 - This module is not muted. - #0 - - - 1 - This module is muted. - #1 - - - - - TEN - Transmit Enable - 1 - 1 - read-write - - - 0 - Disables the transmit operation. - #0 - - - 1 - Enables the transmit operation. - #1 - - - - - REN - Receive Enable - 0 - 0 - read-write - - - 0 - Disables the receive operation. - #0 - - - 1 - Enables the receive operation. - #1 - - - - + R_MMF + Memory Mirror Function + 0x40001000 + + 0x00000000 + 0x008 + registers + + + + MMSFR + MemMirror Special Function Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + KEY + MMSFR Key Code + 24 + 31 + write-only + + + 0xDB + Writing to the MEMMIRADDR bits are valid, when the KEY bits are written 0xDB. + 0xDB + + + others + Writing to the MEMMIRADDR bits are invalid. + true + + + + + MEMMIRADDR + Specifies the memory mirror address.NOTE: A value cannot be set in the low-order 7 bits. These bits are fixed to 0. + 7 + 22 + read-write + + + + + MMEN + MemMirror Enable Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + KEY + MMEN Key Code + 24 + 31 + write-only + + + 0xDB + Writing to the EN bit is valid, when the KEY bits are written 0xDB. + 0xDB + + + others + Writing to the EN bit is invalid. + true + + + + + EN + Memory Mirror Function Enable + 0 + 0 + read-write + + + 1 + Memory Mirror Function is enabled. + #1 + + + 0 + Memory Mirror Function is disabled. + #0 + + + + + + + + + R_MPU_MMPU + Bus Master MPU + 0x40000000 + + 0x00000000 + 0x02 + registers + + + 0x00000102 + 0x02 + registers + + + 0x00000200 + 0x02 + registers + + + 0x00000204 + 0x008 + registers + + + 0x00000210 + 0x02 + registers + + + 0x00000214 + 0x008 + registers + + + 0x00000220 + 0x02 + registers + + + 0x00000224 + 0x008 + registers + + + 0x00000230 + 0x02 + registers + + + 0x00000234 + 0x008 + registers + + + 0x00000240 + 0x02 + registers + + + 0x00000244 + 0x008 + registers + + + 0x00000250 + 0x02 + registers + + + 0x00000254 + 0x008 + registers + + + 0x00000260 + 0x02 + registers + + + 0x00000264 + 0x008 + registers + + + 0x00000270 + 0x02 + registers + + + 0x00000274 + 0x008 + registers + + + 0x00000280 + 0x02 + registers + + + 0x00000284 + 0x008 + registers + + + 0x00000290 + 0x02 + registers + + + 0x00000294 + 0x008 + registers + + + 0x000002A0 + 0x02 + registers + + + 0x000002A4 + 0x008 + registers + + + 0x000002B0 + 0x02 + registers + + + 0x000002B4 + 0x008 + registers + + + 0x000002C0 + 0x02 + registers + + + 0x000002C4 + 0x008 + registers + + + 0x000002D0 + 0x02 + registers + + + 0x000002D4 + 0x008 + registers + + + 0x000002E0 + 0x02 + registers + + + 0x000002E4 + 0x008 + registers + + + 0x000002F0 + 0x02 + registers + + + 0x000002F4 + 0x008 + registers + + + 0x00000300 + 0x02 + registers + + + 0x00000304 + 0x008 + registers + + + 0x00000310 + 0x02 + registers + + + 0x00000314 + 0x008 + registers + + + 0x00000320 + 0x02 + registers + + + 0x00000324 + 0x008 + registers + + + 0x00000330 + 0x02 + registers + + + 0x00000334 + 0x008 + registers + + + 0x00000340 + 0x02 + registers + + + 0x00000344 + 0x008 + registers + + + 0x00000350 + 0x02 + registers + + + 0x00000354 + 0x008 + registers + + + 0x00000360 + 0x02 + registers + + + 0x00000364 + 0x008 + registers + + + 0x00000370 + 0x02 + registers + + + 0x00000374 + 0x008 + registers + + + 0x00000380 + 0x02 + registers + + + 0x00000384 + 0x008 + registers + + + 0x00000390 + 0x02 + registers + + + 0x00000394 + 0x008 + registers + + + 0x000003A0 + 0x02 + registers + + + 0x000003A4 + 0x008 + registers + + + 0x000003B0 + 0x02 + registers + + + 0x000003B4 + 0x008 + registers + + + 0x000003C0 + 0x02 + registers + + + 0x000003C4 + 0x008 + registers + + + 0x000003D0 + 0x02 + registers + + + 0x000003D4 + 0x008 + registers + + + 0x000003E0 + 0x02 + registers + + + 0x000003E4 + 0x008 + registers + + + 0x000003F0 + 0x02 + registers + + + 0x000003F4 + 0x008 + registers + + + 0x00000400 + 0x02 + registers + + + 0x00000502 + 0x02 + registers + + + 0x00000600 + 0x02 + registers + + + 0x00000604 + 0x008 + registers + + + 0x00000610 + 0x02 + registers + + + 0x00000614 + 0x008 + registers + + + 0x00000620 + 0x02 + registers + + + 0x00000624 + 0x008 + registers + + + 0x00000630 + 0x02 + registers + + + 0x00000634 + 0x008 + registers + + + 0x00000640 + 0x02 + registers + + + 0x00000644 + 0x008 + registers + + + 0x00000650 + 0x02 + registers + + + 0x00000654 + 0x008 + registers + + + 0x00000660 + 0x02 + registers + + + 0x00000664 + 0x008 + registers + + + 0x00000670 + 0x02 + registers + + + 0x00000674 + 0x008 + registers + + + 0x00000680 + 0x02 + registers + + + 0x00000684 + 0x008 + registers + + + 0x00000690 + 0x02 + registers + + + 0x00000694 + 0x008 + registers + + + 0x000006A0 + 0x02 + registers + + + 0x000006A4 + 0x008 + registers + + + 0x000006B0 + 0x02 + registers + + + 0x000006B4 + 0x008 + registers + + + 0x000006C0 + 0x02 + registers + + + 0x000006C4 + 0x008 + registers + + + 0x000006D0 + 0x02 + registers + + + 0x000006D4 + 0x008 + registers + + + 0x000006E0 + 0x02 + registers + + + 0x000006E4 + 0x008 + registers + + + 0x000006F0 + 0x02 + registers + + + 0x000006F4 + 0x008 + registers + + + 0x00000700 + 0x02 + registers + + + 0x00000704 + 0x008 + registers + + + 0x00000710 + 0x02 + registers + + + 0x00000714 + 0x008 + registers + + + 0x00000720 + 0x02 + registers + + + 0x00000724 + 0x008 + registers + + + 0x00000730 + 0x02 + registers + + + 0x00000734 + 0x008 + registers + + + 0x00000740 + 0x02 + registers + + + 0x00000744 + 0x008 + registers + + + 0x00000750 + 0x02 + registers + + + 0x00000754 + 0x008 + registers + + + 0x00000760 + 0x02 + registers + + + 0x00000764 + 0x008 + registers + + + 0x00000770 + 0x02 + registers + + + 0x00000774 + 0x008 + registers + + + 0x00000780 + 0x02 + registers + + + 0x00000784 + 0x008 + registers + + + 0x00000790 + 0x02 + registers + + + 0x00000794 + 0x008 + registers + + + 0x000007A0 + 0x02 + registers + + + 0x000007A4 + 0x008 + registers + + + 0x000007B0 + 0x02 + registers + + + 0x000007B4 + 0x008 + registers + + + 0x000007C0 + 0x02 + registers + + + 0x000007C4 + 0x008 + registers + + + 0x000007D0 + 0x02 + registers + + + 0x000007D4 + 0x008 + registers + + + 0x000007E0 + 0x02 + registers + + + 0x000007E4 + 0x008 + registers + + + 0x000007F0 + 0x02 + registers + + + 0x000007F4 + 0x008 + registers + + + 0x00000800 + 0x02 + registers + + + 0x00000902 + 0x02 + registers + + + 0x00000A00 + 0x02 + registers + + + 0x00000A04 + 0x008 + registers + + + 0x00000A10 + 0x02 + registers + + + 0x00000A14 + 0x008 + registers + + + 0x00000A20 + 0x02 + registers + + + 0x00000A24 + 0x008 + registers + + + 0x00000A30 + 0x02 + registers + + + 0x00000A34 + 0x008 + registers + + + 0x00000A40 + 0x02 + registers + + + 0x00000A44 + 0x008 + registers + + + 0x00000A50 + 0x02 + registers + + + 0x00000A54 + 0x008 + registers + + + 0x00000A60 + 0x02 + registers + + + 0x00000A64 + 0x008 + registers + + + 0x00000A70 + 0x02 + registers + + + 0x00000A74 + 0x008 + registers + + + 0x00000A80 + 0x02 + registers + + + 0x00000A84 + 0x008 + registers + + + 0x00000A90 + 0x02 + registers + + + 0x00000A94 + 0x008 + registers + + + 0x00000AA0 + 0x02 + registers + + + 0x00000AA4 + 0x008 + registers + + + 0x00000AB0 + 0x02 + registers + + + 0x00000AB4 + 0x008 + registers + + + 0x00000AC0 + 0x02 + registers + + + 0x00000AC4 + 0x008 + registers + + + 0x00000AD0 + 0x02 + registers + + + 0x00000AD4 + 0x008 + registers + + + 0x00000AE0 + 0x02 + registers + + + 0x00000AE4 + 0x008 + registers + + + 0x00000AF0 + 0x02 + registers + + + 0x00000AF4 + 0x008 + registers + + + 0x00000B00 + 0x02 + registers + + + 0x00000B04 + 0x008 + registers + + + 0x00000B10 + 0x02 + registers + + + 0x00000B14 + 0x008 + registers + + + 0x00000B20 + 0x02 + registers + + + 0x00000B24 + 0x008 + registers + + + 0x00000B30 + 0x02 + registers + + + 0x00000B34 + 0x008 + registers + + + 0x00000B40 + 0x02 + registers + + + 0x00000B44 + 0x008 + registers + + + 0x00000B50 + 0x02 + registers + + + 0x00000B54 + 0x008 + registers + + + 0x00000B60 + 0x02 + registers + + + 0x00000B64 + 0x008 + registers + + + 0x00000B70 + 0x02 + registers + + + 0x00000B74 + 0x008 + registers + + + 0x00000B80 + 0x02 + registers + + + 0x00000B84 + 0x008 + registers + + + 0x00000B90 + 0x02 + registers + + + 0x00000B94 + 0x008 + registers + + + 0x00000BA0 + 0x02 + registers + + + 0x00000BA4 + 0x008 + registers + + + 0x00000BB0 + 0x02 + registers + + + 0x00000BB4 + 0x008 + registers + + + 0x00000BC0 + 0x02 + registers + + + 0x00000BC4 + 0x008 + registers + + + 0x00000BD0 + 0x02 + registers + + + 0x00000BD4 + 0x008 + registers + + + 0x00000BE0 + 0x02 + registers + + + 0x00000BE4 + 0x008 + registers + + + 0x00000BF0 + 0x02 + registers + + + 0x00000BF4 + 0x008 + registers + + + + 3 + 0x400 + + + A + A + 0 + + + B + B + 1 + + + C + C + 2 + + + MMPU[%s] + Bus Master MPU Registers + 0x0000 + + CTL + Bus Master MPU Control Register + 0x000 + 16 + read-write + 0x0000 + 0xFFFF + + + KEY + Write Keyword The data written to these bits are not stored. + 8 + 15 + write-only + + + 0xA5 + Writing to the OAD and ENABLE bit is valid, when the KEY bits are written 0xA5. + 0xA5 + + + others + Writing to the OAD and ENABLE bit is invalid. + true + + + + + OAD + Operation after detection + 1 + 1 + read-write + + + 0 + Non-maskable interrupt. + #0 + + + 1 + Internal reset. + #1 + + + + + ENABLE + Master Group enable + 0 + 0 + read-write + + + 0 + Master Group is disabled. Permission of all regions. + #0 + + + 1 + Master Group is enabled. Protection of all regions. + #1 + + + + + + + PT + Protection of Register + 0x102 + 16 + read-write + 0x0000 + 0xFFFF + + + KEY + Write Keyword The data written to these bits are not stored. + 8 + 15 + write-only + + + 0xA5 + Writing to the PROTECT bit is valid, when the KEY bits are written 0xA5. + 0xA5 + + + others + Writing to the PROTECT bit is invalid. + true + + + + + PROTECT + Protection of region register + 0 + 0 + read-write + + + 0 + All Bus Master MPU register writing is possible. + #0 + + + 1 + All Bus Master MPU register writing is protected. Read is possible. + #1 + + + + + + + 32 + 0x10 + REGION[%s] + Address Region registers + 0x0200 + + C + Access Control Register + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + + + WP + Write protection + 2 + 2 + read-write + + + 0 + Write permission + #0 + + + 1 + Write protection + #1 + + + + + RP + Read protection + 1 + 1 + read-write + + + 0 + Read permission + #0 + + + 1 + Read protection + #1 + + + + + ENABLE + Region enable + 0 + 0 + read-write + + + 0 + Group m Region n unit is disabled + #0 + + + 1 + Group m Region n unit is enabled + #1 + + + + - SSISR - Status Register - 0x04 - 32 + S + Start Address Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + MMPUSmn + Address where the region starts, for use in region determination.NOTE: The low-order 2 bits are fixed to 0. + 0 + 31 + read-write + + + + + E + End Address Register + 0x08 + 32 + read-write + 0x00000003 + 0xFFFFFFFF + + + MMPUEmn + Region end address registerAddress where the region end, for use in region determination.NOTE: The low-order 2 bits are fixed to 1. + 0 + 31 + read-write + + + + + + + + + R_MPU_SMPU + Bus Slave MPU + 0x40000C00 + + 0x00000000 + 0x02 + registers + + + 0x00000010 + 0x02 + registers + + + 0x00000014 + 0x02 + registers + + + 0x00000018 + 0x02 + registers + + + 0x0000001C + 0x02 + registers + + + 0x00000020 + 0x02 + registers + + + 0x00000024 + 0x02 + registers + + + 0x00000028 + 0x02 + registers + + + 0x0000002C + 0x02 + registers + + + 0x00000030 + 0x02 + registers + + + 0x00000034 + 0x02 + registers + + + + 10 + 0x4 + + + MBIU + MBIU + 0 + + + FBIU + FBIU + 1 + + + R_SRAM + R_SRAM + 2 + + + SRAM1 + SRAM1 + 3 + + + P0BIU + P0BIU + 4 + + + P2BIU + P2BIU + 5 + + + P6BIU + P6BIU + 6 + + + B7BIU + B7BIU + 7 + + + EXBIU + EXBIU + 8 + + + EXBIU2 + EXBIU2 + 9 + + + SMPU[%s] + Access Control Structure for MBIU + 0x10 + + R + Access Control Register for MBIU + 0x00 + 16 + read-write + 0x2000 + 0xFFFF + + + WPSRAMHS + SRAMHS Write Protection + 15 + 15 + read-write + + + 0 + Memory protection for SRAMHS writes from master group A, B, and C disabled + #0 + + + 1 + Memory protection for SRAMHS writes from master group A, B, and C enabled. + #1 + + + + + RPSRAMHS + SRAMHS Read Protection + 14 + 14 + read-write + + + 0 + Memory protection for SRAMHS reads from master group A, B, and C disabled + #0 + + + 1 + Memory protection for SRAMHS reads from master group A, B, and C enabled. + #1 + + + + + WPFLI + Code Flash Memory Write Protection (Note: This bit is read as 1. The write value should be 1.) + 13 + 13 + read-write + + + 0 + Setting prohibited + #0 + + + 1 + Memory protection for code flash memory writes from master group A, B, and C enabled. + #1 + + + + + RPFLI + Code Flash Memory Read Protection + 12 + 12 + read-write + + + 0 + Memory protection for code flash memory reads from master group A, B, and C disabled + #0 + + + 1 + Memory protection for code flash memory reads from master group A, B, and C enabled. + #1 + + + + + WPGRPC + Master Group C Write protection + 7 + 7 + read-write + + + 0 + Memory protection for master group C writes disabled + #0 + + + 1 + Memory protection for master group C writes enabled. + #1 + + + + + RPGRPC + Master Group C Read protection + 6 + 6 + read-write + + + 0 + Memory protection for master group C reads disabled + #0 + + + 1 + Memory protection for master group C reads enabled. + #1 + + + + + WPGRPB + Master Group B Write protection + 5 + 5 + read-write + + + 0 + Memory protection for master group B writes disabled + #0 + + + 1 + Memory protection for master group B writes enabled. + #1 + + + + + RPGRPB + Master Group B Read protection + 4 + 4 + read-write + + + 0 + Memory protection for master group B reads disabled + #0 + + + 1 + Memory protection for master group B reads enabled. + #1 + + + + + WPGRPA + Master Group A Write protection + 3 + 3 read-write - 0x02000013 - 0x3E00007F - - - TUIRQ - Transmit Underflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 29 - 29 - read-write - zeroToClear - modify - - - 0 - No transmit underflow has occurred. - #0 - - - 1 - A transmit underflow has occurred. - #1 - - - - - TOIRQ - Transmit Overflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 28 - 28 - read-write - zeroToClear - modify - - - 0 - No transmit overflow has occurred. - #0 - - - 1 - A transmit overflow has occurred. - #1 - - - - - RUIRQ - Receive Underflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 27 - 27 - read-write - zeroToClear - modify - - - 0 - No receive underflow has occurred. - #0 - - - 1 - A receive underflow has occurred. - #1 - - - - - ROIRQ - Receive Overflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 26 - 26 - read-write - zeroToClear - modify - - - 0 - No receive overflow has occurred. - #0 - - - 1 - A receive overflow has occurred. - #1 - - - - - IIRQ - Idle Mode Interrupt Status Flag - 25 - 25 - read-only - - - 0 - This module is not in idle state. - #0 - - - 1 - This module is in idle state. - #1 - - - - - TCHNO - Transmit Channel Number - 5 - 6 - read-only - - - TSWNO - Transmit Serial Word Number - 4 - 4 - read-only - - - RCHNO - Receive Channel Number.These bits are read as 00b. - 2 - 3 - read-only - - - RSWNO - Receive Serial Word Number - 1 - 1 - read-only - - - IDST - Idle Mode Status Flag - 0 - 0 - read-only - - - 0 - Serial bus is operating. - #0 - - - 1 - The current communication is stopped. - #1 - - - - - - - SSIFCR - FIFO Control Register - 0x10 - 32 + + + 0 + Memory protection for master group A writes disabled + #0 + + + 1 + Memory protection for master group A writes enabled. + #1 + + + + + RPGRPA + Master Group A Read protection + 2 + 2 read-write - 0x00000000 - 0xFFFFFFFF - - - AUCKE - Oversampling Clock Enable - 31 - 31 - read-write - - - 0 - The oversampling clock is disabled. - #0 - - - 1 - The oversampling clock is enabled. - #1 - - - - - SSIRST - SSI soft ware reset - 16 - 16 - read-write - - - 0 - Clears the SSI software reset. - #0 - - - 1 - initiates the SSI software reset. - #1 - - - - - TTRG - Transmit Data Trigger Number NOTE: The values in parenthesis are the number of empty stages in SSIFTDR at which the TDE flag is set. - 6 - 7 - read-write - - - 00 - 7 (1) - #00 - - - 01 - 6 (2) - #01 - - - 10 - 4 (4) - #10 - - - 11 - 2 (6) - #11 - - - - - RTRG - Receive Data Trigger Number - 4 - 5 - read-write - - - 00 - 1 - #00 - - - 01 - 2 - #01 - - - 10 - 4 - #10 - - - 11 - 6 - #11 - - - - - TIE - Transmit Interrupt Enable NOTE: TXI can be cleared by clearing either the TDE flag (see the description of the TDE bit for details) or TIE bit. - 3 - 3 - read-write - - - 0 - Transmit data empty interrupt (TXI) request is disabled - #0 - - - 1 - Transmit data empty interrupt (TXI) request is enabled - #1 - - - - - RIE - Receive Interrupt Enable NOTE: RXI can be cleared by clearing either the RDF flag (see the description of the RDF bit for details) or RIE bit. - 2 - 2 - read-write - - - 0 - Receive data full interrupt (RXI) request is disabled - #0 - - - 1 - Receive data full interrupt (RXI) request is enabled - #1 - - - - - TFRST - Transmit FIFO Data Register Reset - 1 - 1 - read-write - - - 0 - Clears the transmit data FIFO reset. - #0 - - - 1 - Initiates the transmit data FIFO reset. - #1 - - - - - RFRST - Receive FIFO Data Register Reset - 0 - 0 - read-write - - - 0 - Clears the receive data FIFO reset. - #0 - - - 1 - Initiates the receive data FIFO reset. - #1 - - - - - - - SSIFSR - FIFO Status Register - 0x14 - 32 + + + 0 + Memory protection for master group A reads disabled + #0 + + + 1 + Memory protection for master group A reads enabled. + #1 + + + + + + + + SMPUCTL + Slave MPU Control Register + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + + + KEY + Key Code This bit is used to enable or disable rewriting of the PROTECT and OAD bit. + 8 + 15 + write-only + + + 0xA5 + Writing to the PROTECT and OAD bit is valid, when the KEY bits are written 0xA5. + 0xA5 + + + others + Writing to the PROTECT and OAD bit is invalid. + true + + + + + PROTECT + Protection of register + 1 + 1 + read-write + + + 0 + All Bus Slave register writing is possible. + #0 + + + 1 + All Bus Slave register writing is protected. Read is possible. + #1 + + + + + OAD + Master Group enable + 0 + 0 + read-write + + + 0 + Non-maskable interrupt. + #0 + + + 1 + Internal reset. + #1 + + + + + + + + + R_MPU_SPMON + CPU Stack Pointer Monitor + 0x40000D00 + + 0x00000000 + 0x02 + registers + + + 0x00000004 + 0x00E + registers + + + 0x00000014 + 0x00C + registers + + + + 2 + 0x10 + + + M + M + 0 + + + P + P + 1 + + + SP[%s] + Stack Pointer Monitor + 0x0000 + + OAD + Stack Pointer Monitor Operation After Detection Register + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + + + KEY + Write Keyword The data written to these bits are not stored. + 8 + 15 + write-only + + + 0xA5 + Writing to the OAD bit is valid, when the KEY bits are written 0xA5. + 0xA5 + + + others + Writing to the OAD bit is invalid. + true + + + + + OAD + Operation after detection + 0 + 0 + read-write + + + 0 + Non-maskable interrupt + #0 + + + 1 + Reset. + #1 + + + + + + + CTL + Stack Pointer Monitor Access Control Register + 0x04 + 16 + read-write + 0x0000 + 0xFEFF + + + ERROR + Stack Pointer Monitor Error Flag + 8 + 8 + read-write + + + 0 + Stack pointer has not overflowed or underflowed + #0 + + + 1 + Stack pointer has overflowed or underflowed + #1 + + + + + ENABLE + Stack Pointer Monitor Enable + 0 + 0 + read-write + + + 0 + Stack pointer monitor is disabled + #0 + + + 1 + Stack pointer monitor is enabled. + #1 + + + + + + + PT + Stack Pointer Monitor Protection Register + 0x06 + 16 + read-write + 0x0000 + 0xFFFF + + + KEY + Write Keyword The data written to these bits are not stored. + 8 + 15 + write-only + + + 0xA5 + Writing to the PROTECT bit is valid, when the KEY bits are written 0xA5. + 0xA5 + + + others + Writing to the PROTECT bit is invalid. + true + + + + + PROTECT + Protection of register (MSPMPUAC, MSPMPUSA and MSPMPUSE) + 0 + 0 + read-write + + + 0 + Stack Pointer Monitor register writing is possible. + #0 + + + 1 + Stack Pointer Monitor register writing is protected. + #1 + + + + + + + SA + Stack Pointer Monitor Start Address Register + 0x08 + 32 + read-write + 0x00000000 + 0x00000003 + + + MSPMPUSA + Region start address register Address where the region starts, for use in region determination.NOTE: Range: 0x1FF00000-0x200FFFFC The low-order 2 bits are fixed to 0. + 0 + 31 + read-write + + + 0x1FF00000 + 0x200FFFFC + + + + + + + EA + Stack Pointer Monitor End Address Register + 0x0C + 32 + read-write + 0x00000003 + 0x00000003 + + + MSPMPUEA + Region end address register Address where the region starts, for use in region determination.NOTE: Range: 0x1FF00003-0x200FFFFF The low-order 2 bits are fixed to 1. + 0 + 31 + read-write + + + 0x1FF00003 + 0x200FFFFF + + + + + + + + + + R_MSTP + System-Module Stop + 0x40047000 + + 0x00000000 + 0x00C + registers + + + + MSTPCRB + Module Stop Control Register B + 0x00 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + MSTPB31 + Serial Communication Interface 0 Module Stop + 31 + 31 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB30 + Serial Communication Interface 1 Module Stop + 30 + 30 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB29 + Serial Communication Interface 2 Module Stop + 29 + 29 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB28 + Serial Communication Interface 3 Module Stop + 28 + 28 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB27 + Serial Communication Interface 4 Module Stop + 27 + 27 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB26 + Serial Communication Interface 5 Module Stop + 26 + 26 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB25 + Serial Communication Interface 6 Module Stop + 25 + 25 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB24 + Serial Communication Interface 7 Module Stop + 24 + 24 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB23 + Serial Communication Interface 8 Module Stop + 23 + 23 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB22 + Serial Communication Interface 9 Module Stop + 22 + 22 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + Reserved + These bits are read as 11. The write value should be 11. + 20 + 21 + read-write + + + MSTPB19 + Serial Peripheral Interface 0 Module Stop + 19 + 19 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB18 + Serial Peripheral Interface Module Stop + 18 + 18 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + Reserved + These bits are read as 11. The write value should be 11. + 16 + 17 + read-write + + + MSTPB15 + ETHERC0 and EDMAC0 Module Stop + 15 + 15 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB14 + ETHERC1 and EDMAC1 Module Stop + 14 + 14 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB13 + EPTPC and PTPEDMAC Module Stop + 13 + 13 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB12 + Universal Serial Bus 2.0 HS Interface Module Stop + 12 + 12 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB11 + Universal Serial Bus 2.0 FS Interface Module Stop + 11 + 11 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + Reserved + This bit is read as 1. The write value should be 1. + 10 + 10 + read-write + + + MSTPB9 + I2C Bus Interface 0 Module Stop + 9 + 9 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB8 + I2C Bus Interface 1 Module Stop + 8 + 8 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB7 + I2C Bus Interface 2 Module Stop + 7 + 7 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB6 + Queued Serial Peripheral Interface Module Stop + 6 + 6 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB5 + IrDA Module Stop + 5 + 5 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + Reserved + These bits are read as 11. The write value should be 11. + 3 + 4 + read-write + + + MSTPB2 + RCAN0 Module Stop + 2 + 2 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPB1 + RCAN1 Module Stop + 1 + 1 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + Reserved + This bit is read as 1. The write value should be 1. + 0 + 0 + read-write + + + + + MSTPCRC + Module Stop Control Register C + 0x04 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + MSTPC31 + AES Module Stop + 31 + 31 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC28 + Random Number Generator Module Stop + 28 + 28 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state. + #1 + + + + + MSTPC14 + Event Link Controller Module Stop + 14 + 14 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC13 + Data Operation Circuit Module Stop + 13 + 13 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC12 + Secure Digital Host IF/ Multi Media Card 0 Module Stop + 12 + 12 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC11 + Secure Digital Host IF/ Multi Media Card 1 Module Stop + 11 + 11 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC9 + Sampling Rate Converter Module Stop + 9 + 9 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC8 + Synchronous Serial Interface 0 Module Stop + 8 + 8 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC7 + Synchronous Serial Interface 1 Module Stop + 7 + 7 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC6 + 2DG engine Module Stop + 6 + 6 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC5 + JPEG codec engine Module Stop + 5 + 5 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC4 + Segment LCD Controller Module Stop + 4 + 4 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC3 + Capacitive Touch Sensing Unit Module Stop + 3 + 3 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC2 + Parallel Data Capture Module Stop + 2 + 2 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC1 + CRC Calculator Module Stop + 1 + 1 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPC0 + CAC Module Stop + 0 + 0 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + + + MSTPCRD + Module Stop Control Register D + 0x08 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + MSTPD31 + Operational Amplifier Module Stop + 31 + 31 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD29 + Comparator-LP Module Stop + 29 + 29 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD28 + ACMPHS0 Module Stop + 28 + 28 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD27 + ACMPHS1 Module Stop + 27 + 27 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD26 + ACMPHS2 Module Stop + 26 + 26 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD25 + ACMPHS3 Module Stop + 25 + 25 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD24 + ACMPHS4 Module Stop + 24 + 24 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD23 + ACMPHS5 Module Stop + 23 + 23 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD22 + Temperature Sensor Module Stop + 22 + 22 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD20 + 12-bit D/A Converter Module Stop + 20 + 20 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD19 + 8-Bit D/A Converter Module Stop + 19 + 19 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD17 + 24-bit Sigma-Delta A/DConverter Module Stop + 17 + 17 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD16 + 16-Bit A/D Converter Module Stop + 16 + 16 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD15 + 12-Bit A/D Converter 1 Module Stop + 15 + 15 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD14 + POEG Module Stop + 14 + 14 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD13 + Port Output Enable for GPT 1 Module Stop + 13 + 13 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD12 + Port Output Enable for GPT 2 Module Stop + 12 + 12 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD11 + Port Output Enable for GPT 3 Module Stop + 11 + 11 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD6 + GPT Higher Module Stop + 6 + 6 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD5 + GPT Lower Module Stop + 5 + 5 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD3 + AGT0 Module StopNote: AGT0 is in the module stop state when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. In case the count source is sub-clock or LOCO, this bit should be set to 1 except when accessing the registers of AGT0. + 3 + 3 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD2 + AGT1 Module StopNote: AGT1 is in the module stop state when the count source is either of PCLKB, PCLKB/2 or PCLKB/8. In case the count source is sub-clock or LOCO, this bit should be set to 1 except when accessing the registers of AGT1. + 2 + 2 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD1 + Low Power Asynchronous General Purpose Timer 2 Module Stop + 1 + 1 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPD0 + Low Power Asynchronous General Purpose Timer 3 Module Stop + 0 + 0 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + + + MSTPCRE + Module Stop Control Register E + 0x0C + 32 + read-write + 0xffffffff + 0xffffffff + + + MSTPE14 + Low Power Asynchronous General Purpose Timer 5 Module Stop + 14 + 14 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE15 + Low Power Asynchronous General Purpose Timer 4 Module Stop + 15 + 15 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE22 + GPT9 Module Stop + 22 + 22 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE23 + GPT8 Module Stop + 23 + 23 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE24 + GPT7 Module Stop + 24 + 24 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE25 + GPT6 Module Stop + 25 + 25 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE26 + GPT5 Module Stop + 26 + 26 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE27 + GPT4 Module Stop + 27 + 27 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE28 + GPT3 Module Stop + 28 + 28 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE29 + GPT2 Module Stop + 29 + 29 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE30 + GPT1 Module Stop + 30 + 30 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPE31 + GPT0 Module Stop + 31 + 31 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + + + + + R_OPAMP + Operational Amplifier + 0x40086000 + + 0x00000008 + 0x005 + registers + + + 0x0000000E + 0x00C + registers + + + 0x0000001F + 0x007 + registers + + + + 4 + 0x3 + AMP[%s] + Input and Output Selectors for Operational Amplifier %s + 0x0E + read-write + + OS + Output Select Register + 0 + 8 + read-write + 0x00 + 0xFF + + + + PS + Plus Input Select Register + 2 + 8 + read-write + 0x00 + 0xFF + + + + MS + Minus Input Select Register + 1 + 8 + read-write + 0x00 + 0xFF + + + + + 3 + 2 + AMPOT[%s] + Operational Amplifier n Offset Trimming Registers + 0x20 + read-write + + P + Operational Amplifier n Offset Trimming Pch Register + 0 + 8 + read-write + 0 + 0xD0 + + + TRMP + AMPn input offset trimming Pch side + 0 + 4 read-write - 0x00010000 - 0xFFFFFFFF - - - TDC - Transmit Data Indicate Flag(Indicates the number of data units stored in SSIFTDR) - 24 - 29 - read-only - - - TDE - Transmit Data Empty Flag NOTE: Since the SSIFTDR register is a 32-byte FIFO register, the maximum number of bytes that can be written to it while the TDE flag is 1 is 8 - TDC[3:0]. If writing data to the SSIFTDR register is continued after all the data is written, writing will be invalid and an overflow occurs. - 16 - 16 - read-write - zeroToClear - modify - - - 0 - Number of data bytes for transmission in SSIFTDR is greater than the set transmit trigger number. - #0 - - - 1 - Number of data bytes for transmission in SSIFTDR is equal to or less than the set transmit trigger number. - #1 - - - - - RDC - Receive Data Indicate Flag(Indicates the number of data units stored in SSIFRDR) - 8 - 13 - read-only - - - RDF - Receive Data Full Flag NOTE: Since the SSIFRDR register is a 32-byte FIFO register, the maximum number of data bytes that can be read from it while the RDF flag is 1 is indicated in the RDC[3:0] flags. If reading data from the SSIFRDR register is continued after all the data is read, undefined values will be read. - 0 - 0 - read-write - zeroToClear - modify - - - 0 - Number of received data bytes in SSIFRDR is less than the set receive trigger number. - #0 - - - 1 - Number of received data bytes in SSIFRDR is equal to or greater than the set receive trigger number. - #1 - - - - - + + + + + N + Operational Amplifier n Offset Trimming Nch Register + 1 + 8 + + + TRMN + AMPn input offset trimming Nch side + 0 + 4 + + + + + + AMPMC + Operational amplifier mode control register + 0x08 + 8 + read-write + 0x00 + 0xFF + + + AMPSP + Operation mode selection + 7 + 7 + read-write + + + 0 + Low-power mode (low-speed). + #0 + + + 1 + High-speed mode. + #1 + + + + + 3 + 1 + AMPPC%s + Operational amplifier precharge control status + 0 + 0 + read-write + + + 0 + Precharging is stopped. + #0 + + + 1 + Precharging is enabled. + #1 + + + + + + + AMPTRM + Operational amplifier trigger mode control register + 0x09 + 8 + read-write + 0x00 + 0xFF + + + 4 + 2 + AMPTRM%s + Operational amplifier function activation/stop trigger control + 0 + 1 + read-write + + + 00 + Software trigger mode. + #00 + + + 01 + An activation and A/D trigger mode. + #01 + + + 10 + Setting prohibited. + #10 + + + 11 + An activation and A/D trigger mode. + #11 + + + + + + + AMPTRS + Operational Amplifier Activation Trigger Select Register + 0x0A + 8 + read-write + 0x00 + 0xFF + + + AMPTRS + ELC trigger selection Do not change the value of the AMPTRS register after setting the AMPTRM register. + 0 + 1 + read-write + + + 00 + Operational amplifier 0: Operational amplifier An activation trigger 0.Operational amplifier 1: Operational amplifier An activation trigger 1.Operational amplifier 2: Operational amplifier An activation trigger 2.Operational amplifier 3: Operational amplifier An activation trigger 3 + #00 + + + 01 + Operational amplifier 0: Operational amplifier An activation trigger 0.Operational amplifier 1: Operational amplifier An activation trigger 0.Operational amplifier 2: Operational amplifier An activation trigger 1.Operational amplifier 3: Operational amplifier An activation trigger 1 + #01 + + + 10 + Setting prohibited + #10 + + + 11 + Operational amplifier 0: Operational amplifier An activation trigger 0.Operational amplifier 1: Operational amplifier An activation trigger 0.Operational amplifier 2: Operational amplifier An activation trigger 0.Operational amplifier 3: Operational amplifier An activation trigger 0 + #11 + + + + + + + AMPC + Operational amplifier control register + 0x0B + 8 + read-write + 0x00 + 0xFF + + + IREFE + Operation control of operational amplifier reference current circuit + 7 + 7 + read-write + + + 0 + Operational amplifier reference current circuit is stopped. + #0 + + + 1 + Operation of operational amplifier reference current circuit is enabled. + #1 + + + + + 4 + 1 + AMPE%s + Operation control of operational amplifier + 0 + 0 + read-write + + + 0 + Operation amplifier is stopped. + #0 + + + 1 + Software trigger mode: Operation of operational amplifier is enabled Operation of the operational amplifier reference current circuit is also enabled regardless of the IREFE bit se An activation trigger mode or An activation and A/D trigger mode: Wait for An activation is enabled. + #1 + + + + + + + AMPMON + Operational amplifier monitor register + 0x0C + 8 + read-only + 0x00 + 0xFF + + + 4 + 1 + AMPMON%s + Operational amplifier status + 0 + 0 + read-only + + + 0 + Operational amplifier is stopped. + #0 + + + 1 + Operational amplifier is operating. + #1 + + + + + + + AMPCPC + Operational amplifier switch charge pump control register + 0x1A + 8 + read-write + 0x00 + 0xFF + + + 3 + 1 + PUMP%sEN + charge pump for AMP%s enable/disable + 0 + 0 + read-write + + + 0 + charge pump for AMP is disabled. + #0 + + + 1 + charge pump for AMP is enabled. + #1 + + + + + + + AMPUOTE + Operational Amplifier User Offset Trimming Enable Register + 0x1F + 8 + read-write + 0x00 + 0xFF + + + 3 + 1 + AMP%sTE + AMP%sOT write enable + 0 + 0 + read-write + + + 0 + Not possible to write the AMPnOTP and AMPnOTN registers + #0 + + + 1 + Possible to write the AMPnOTP and AMPnOTN registers + #1 + + + + + + + + + R_PDC + Parallel Data Capture Unit + 0x40094000 + + 0x00000000 + 0x01C + registers + + + + PCCR0 + PDC Control Register 0 + 0x000 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + EDS + Endian Select + 14 + 14 + read-write + + + 0 + Little endian + #0 + + + 1 + Big endian + #1 + + + + + PCKDIV + PCKO Frequency Division Ratio Select + 11 + 13 + read-write + + + 000 + PCKO/2 + #000 + + + 001 + PCKO/4 + #001 + + + 010 + PCKO/6 + #010 + + + 011 + PCKO/8 + #011 + + + 100 + PCKO/10 + #100 + + + 101 + PCKO/12 + #101 + + + 110 + PCKO/14 + #110 + + + 111 + PCKO/16 + #111 + + + + + PCKOE + PCKO Output Enable + 10 + 10 + read-write + + + 0 + PCKO output is disabled (fixed to the high level) + #0 + + + 1 + PCKO output is enabled. + #1 + + + + + HERIE + Horizontal Byte Number Setting Error Interrupt Enable + 9 + 9 + read-write + + + 0 + Generation of horizontal byte number setting error interrupt requests is disabled. + #0 + + + 1 + Generation of horizontal byte number setting error interrupt requests is enabled. + #1 + + + + + VERIE + Vertical Line Number Setting Error Interrupt Enable + 8 + 8 + read-write + + + 0 + Generation of vertical line number setting error interrupt requests is disabled. + #0 + + + 1 + Generation of vertical line number setting error interrupt requests is enabled. + #1 + + + + + UDRIE + Underrun Interrupt Enable + 7 + 7 + read-write + + + 0 + Generation of underrun interrupt requests is disabled. + #0 + + + 1 + Generation of underrun interrupt requests is enabled. + #1 + + + + + OVIE + Overrun Interrupt Enable + 6 + 6 + read-write + + + 0 + Generation of overrun interrupt requests is disabled. + #0 + + + 1 + Generation of overrun interrupt requests is enabled. + #1 + + + + + FEIE + Frame End Interrupt Enable + 5 + 5 + read-write + + + 0 + Generation of frame end interrupt requests is disabled. + #0 + + + 1 + Generation of frame end interrupt requests is enabled. + #1 + + + + + DFIE + Receive Data Ready Interrupt Enable + 4 + 4 + read-write + + + 0 + Generation of receive data ready interrupt requests is disabled. + #0 + + + 1 + Generation of receive data ready interrupt requests is enabled. + #1 + + + + + PRST + PDC Reset + 3 + 3 + write-only + + + 0 + PDC reset is not applied. + #0 + + + 1 + PDC is reset. + #1 + + + + + HPS + HSYNC Signal Polarity Select + 2 + 2 + read-write + + + 0 + HSYNC signal is active high. + #0 + + + 1 + HSYNC signal is active low. + #1 + + + + + VPS + VSYNC Signal Polarity Select + 1 + 1 + read-write + + + 0 + VSYNC signal is active high. + #0 + + + 1 + VSYNC signal is active low. + #1 + + + + + PCKE + Channel 0 GTCNT Count Clear + 0 + 0 + read-write + + + 0 + Operations for reception are stopped. + #0 + + + 1 + Operations for reception are ongoing. + #1 + + + + + + + PCCR1 + PDC Control Register 1 + 0x004 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PCE + PDC Operation Enable + 0 + 0 + read-write + + + 0 + Operations for reception are disabled. + #0 + + + 1 + Operations for reception are enabled. + #1 + + + + + + + PCSR + PDC Status Register + 0x008 + 32 + read-write + 0x00000002 + 0xFFFFFFFF + + + HERF + Horizontal Byte Number Setting Error Flag + 6 + 6 + read-write + zeroToClear + modify + + + 0 + Horizontal byte number setting error has not been generated. + #0 + + + 1 + Horizontal byte number setting error has been generated. + #1 + + + + + VERF + Vertical Line Number Setting Error Flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + Vertical line number setting error has not been generated. + #0 + + + 1 + Vertical line number setting error has been generated. + #1 + + + + + UDRF + Underrun Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + Underrun has not been generated. + #0 + + + 1 + Underrun has been generated. + #1 + + + + + OVRF + Overrun Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + FIFO overrun has not been generated. + #0 + + + 1 + FIFO overrun has been generated. + #1 + + + + + FEF + Frame End Flag + 2 + 2 + read-write + zeroToClear + modify + + + 0 + Frame end has not been generated. + #0 + + + 1 + Frame end has been generated. + #1 + + + + + FEMPF + FIFO Empty Flag + 1 + 1 + read-only + + + 0 + FIFO is not empty. + #0 + + + 1 + FIFO is empty. + #1 + + + + + FBSY + Frame Busy Flag + 0 + 0 + read-only + + + 0 + Operations for reception are stopped. + #0 + + + 1 + Operations for reception are ongoing. + #1 + + + + + + + PCMONR + PDC Pin Monitor Register + 0x00C + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + HSYNC + HSYNC Signal Status Flag + 1 + 1 + read-only + + + 0 + HSYNC signal is at the low level. + #0 + + + 1 + HSYNC signal is at the high level. + #1 + + + + + VSYNC + VSYNC Signal Status Flag + 0 + 0 + read-only + + + 0 + VSYNC signal is at the low level. + #0 + + + 1 + VSYNC signal is at the high level. + #1 + + + + + + + PCDR + PDC Receive Data Register + 0x010 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + PCDR + The PDC includes a 32-bit-wide, 22-stage FIFO for the storage of captured data. The PCDR register is a 4-byte space to which the FIFO is mapped, and four bytes of data are read from the PCDR register at a time. + 0 + 31 + read-only + + + + + VCR + Vertical Capture Register + 0x014 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + VSZ + Vertical Capture Size Number of lines to be captured. + 16 + 27 + read-write + + + VST + Vertical Capture Start Line PositionNumber of the line where capture is to start. + 0 + 11 + read-write + + + + + HCR + Horizontal Capture Register + 0x018 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + HSZ + Horizontal Capture Size Number of bytes to capture horizontally. + 16 + 27 + read-write + + + HST + Horizontal Capture Start Byte Position Horizontal position in bytes where capture is to start. + 0 + 11 + read-write + + + + + + + R_PORT0 + I/O Ports + 0x40040000 + + 0x00000000 + 0x010 + registers + + + + PCNTR1 + Port Control Register 1 + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PODR + Pmn Output Data + 16 + 31 + read-write + + + 0 + Low output + #0 + + + 1 + High output. + #1 + + + + + PDR + Pmn Direction + 0 + 15 + read-write + + + 0 + Input (functions as an input pin) + #0 + + + 1 + Output (functions as an output pin). + #1 + + + + + + + PODR + Output data register + PCNTR1 + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + + + 16 + 1 + PODR%s + Pmn Output Data + 0 + 0 + read-write + + + 0 + Low output + #0 + + + 1 + High output. + #1 + + + + + + + PDR + Data direction register + PCNTR1 + 0x02 + 16 + read-write + 0x0000 + 0xFFFF + + + 16 + 1 + PDR%s + Pmn Direction + 0 + 0 + read-write + + + 0 + Input (functions as an input pin) + #0 + + + 1 + Output (functions as an output pin). + #1 + + + + + + + PCNTR2 + Port Control Register 2 + 0x04 + 32 + read-only + 0x00000000 + 0xFFFF0000 + + + EIDR + Pmn Event Input Data + 16 + 31 + read-only + + + 0 + Low input + #0 + + + 1 + High input. + #1 + + + + + PIDR + Pmn Input Data + 0 + 15 + read-only + + + 0 + Low input + #0 + + + 1 + High input. + #1 + + + + + + + EIDR + Event input data register + PCNTR2 + 0x04 + 16 + read-only + 0x0000 + 0xFFFF + + + 16 + 1 + EIDR%s + Pmn Event Input Data + 0 + 0 + read-only + + + 0 + Low input + #0 + + + 1 + High input. + #1 + + + + + + + PIDR + Input data register + PCNTR2 + 0x06 + 16 + read-only + 0x0000 + 0x0000 + + + 16 + 1 + PIDR%s + Pmn Input Data + 0 + 0 + read-only + + + 0 + Low input + #0 + + + 1 + High input. + #1 + + + + + + + PCNTR3 + Port Control Register 3 + 0x08 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + PORR + Pmn Output Reset + 16 + 31 + write-only + + + 0 + No affect to output + #0 + + + 1 + Low output. + #1 + + + + + POSR + Pmn Output Set + 0 + 15 + write-only + + + 0 + No affect to output + #0 + + + 1 + High output. + #1 + + + + + + + PORR + Output set register + PCNTR3 + 0x08 + 16 + write-only + 0x0000 + 0xFFFF + + + 16 + 1 + PORR%s + Pmn Output Reset + 0 + 0 + write-only + + + 0 + No affect to output + #0 + + + 1 + Low output. + #1 + + + + + + + POSR + Output reset register + PCNTR3 + 0x0A + 16 + write-only + 0x0000 + 0xFFFF + + + 16 + 1 + POSR%s + Pmn Output Set + 0 + 0 + write-only + + + 0 + No affect to output + #0 + + + 1 + High output. + #1 + + + + + + + PCNTR4 + Port Control Register 4 + 0x0C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + EORR + Pmn Event Output Reset + 16 + 31 + read-write + + + 0 + No affect to output + #0 + + + 1 + Low output + #1 + + + + + EOSR + Pmn Event Output Set + 0 + 15 + read-write + + + 0 + No affect to output + #0 + + + 1 + High output. + #1 + + + + + + + EORR + Event output set register + PCNTR4 + 0x0C + 16 + read-write + 0x0000 + 0xFFFF + + + 16 + 1 + EORR%s + Pmn Event Output Reset + 0 + 0 + read-write + + + 0 + No affect to output + #0 + + + 1 + Low output + #1 + + + + + + + EOSR + Event output reset register + PCNTR4 + 0x0E + 16 + read-write + 0x0000 + 0xFFFF + + + 16 + 1 + EOSR%s + Pmn Event Output Set + 0 + 0 + read-write + + + 0 + No affect to output + #0 + + + 1 + High output. + #1 + + + + + + + + + R_PORT1 + 0x40040020 + + + R_PORT2 + 0x40040040 + + + R_PORT3 + 0x40040060 + + + R_PORT4 + 0x40040080 + + + R_PORT5 + 0x400400A0 + + + R_PORT6 + 0x400400C0 + + + R_PORT7 + 0x400400E0 + + + R_PORT8 + 0x40040100 + + + R_PORT9 + 0x40040120 + + + R_PORT10 + 0x40040140 + + + R_PORT11 + 0x40040160 + + + R_PFS + I/O Ports-PFS + 0x40040800 + + 0x00000000 + 0x040 + registers + + + + 12 + 0x40 + PORT[%s] + Port %s + + 16 + 4 + PIN[%s] + Pin Function Selects + 0 - SSIFTDR - Transmit FIFO Data Register - 0x18 - 32 - write-only - 0x00000000 - 0x00000000 - - - SSIFTDR - SSIFTDR is a write-only FIFO register consisting of eight stages of 32-bit registers for storing data to be serially transmitted. NOTE: that when the SSIFTDR register is full of data (32 bytes), the next data cannot be written to it. If writing is attempted, it will be ignored and an overflow occurs. - 0 - 31 - write-only - - + PmnPFS_BY + Pin Function Control Register + 0x003 + 8 + read-write + 0x00 + 0xFD + + + NCODR + N-Channel Open Drain Control + 6 + 6 + read-write + + + 0 + CMOS output + #0 + + + 1 + NMOS open-drain output + #1 + + + + + PIM + Port Input Mode Control + 5 + 5 + read-write + + + 0 + CMOS input + #0 + + + 1 + TTL input + #1 + + + + + PCR + Pull-up Control + 4 + 4 + read-write + + + 0 + Disables an input pull-up. + #0 + + + 1 + Enables an input pull-up. + #1 + + + + + PDR + Port Direction + 2 + 2 + read-write + + + 0 + Input (Functions as an input pin.) + #0 + + + 1 + Output (Functions as an output pin.) + #1 + + + + + PIDR + Port Input Data + 1 + 1 + read-only + + + 0 + Low input + #0 + + + 1 + High input + #1 + + + + + PODR + Port Output Data + 0 + 0 + read-write + + + 0 + Low output + #0 + + + 1 + High output + #1 + + + + - - SSIFTDR16 - Transmit FIFO Data Register - SSIFTDR - 0x18 - 16 - write-only - 0x00000000 - 0x00000000 + + PmnPFS_HA + Pin Function Control Register + 0x002 + 16 + read-write + 0x0000 + 0xFFFD + + + ASEL + Analog Input enable + 15 + 15 + read-write + + + 0 + Used other than as analog pin + #0 + + + 1 + Used as analog pin + #1 + + + + + ISEL + IRQ input enable + 14 + 14 + read-write + + + 0 + Not used as IRQn input pin + #0 + + + 1 + Used as IRQn input pin + #1 + + + + + EOFR + Event on Falling/Rising + 12 + 13 + read-write + + + 00 + Do not care + #00 + + + 01 + Detect rising edge + #01 + + + 10 + Detect falling edge + #10 + + + 11 + Detect rising and falling edge + #11 + + + + + DSCR + Drive Strength Control Register + 10 + 11 + read-write + + + 00 + Normal drive output + #00 + + + 01 + Middle drive output + #01 + + + 10 + Middle drive with IIC + #10 + + + 11 + High-drive output + #11 + + + + - - SSIFTDR8 - Transmit FIFO Data Register - SSIFTDR - 0x18 - 8 - write-only - 0x00000000 - 0x00000000 + + PmnPFS + Pin Function Control Register + 0x000 + 32 + read-write + 0x00000000 + 0xFFFFFFFD + + + PSEL + Port Function SelectThese bits select the peripheral function. For individual pin functions, see the MPC table + 24 + 28 + read-write + + + PMR + Port Mode Control + 16 + 16 + read-write + + + 0 + Uses the pin as a general I/O pin. + #0 + + + 1 + Uses the pin as an I/O port for peripheral functions. + #1 + + + + - - SSIFRDR - Receive FIFO Data Register - 0x1C - 32 + + + + + + R_PMISC + I/O Ports-MISC + 0x40040D00 + + 0x00000003 + 0x01 + registers + + + + PFENET + Ethernet Control Register + 0x00 + 8 + read-write + 0x00 + 0xFF + + + Reserved + These bits are read as 00. The write value should be 00. + 6 + 7 + read-write + + + PHYMODE1 + Ethernet Mode Setting ch1 + 5 + 5 + read-write + + + 0 + RMII mode (ETHERC channel 1) + #0 + + + 1 + MII mode (ETHERC channel 1) + #1 + + + + + PHYMODE0 + Ethernet Mode Setting ch0 + 4 + 4 + read-write + + + 0 + RMII mode (ETHERC channel 0) + #0 + + + 1 + MII mode (ETHERC channel 0) + #1 + + + + + Reserved + These bits are read as 0000. The write value should be 0000. + 0 + 3 + read-write + + + + + PWPR + Write-Protect Register + 3 + 8 + read-write + + + PFSWE + PmnPFS Register Write + 6 + 6 + read-write + + + 0 + Writing to the PmnPFS register is disabled + #0 + + + 1 + Writing to the PmnPFS register is enabled. + #1 + + + + + B0WI + PFSWE Bit Write Disable + 7 + 7 + + + 0 + Writing to the PFSWE bit is enabled + #0 + + + 1 + Writing to the PFSWE bit is disabled. + true + + + + + + + PWPRS + Write-Protect Register for Secure + 5 + 8 + read-write + + + PFSWE + PmnPFS Register Write + 6 + 6 + read-write + + + 0 + Writing to the PmnPFS register is disabled + #0 + + + 1 + Writing to the PmnPFS register is enabled. + #1 + + + + + B0WI + PFSWE Bit Write Disable + 7 + 7 + + + 0 + Writing to the PFSWE bit is enabled + #0 + + + 1 + Writing to the PFSWE bit is disabled. + true + + + + + + + 9 + 0x2 + PMSAR[%s] + Port Security Attribution Register + 0x10 + + PMSAR + Port Security Attribution Register + 0 + 16 + read-write + 0xFFFF + 0xFFFF + + + + + + R_QSPI + Quad Serial Peripheral Interface + 0x64000000 + + 0x00000000 + 0x01C + registers + + + 0x00000020 + 0x00C + registers + + + 0x00000030 + 0x008 + registers + + + 0x00000804 + 0x04 + registers + + + + SFMSMD + Transfer Mode Control Register + 0x000 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SFMCCE + Read instruction code selection. + 15 + 15 + read-write + + + 0 + Default instruction code set for each instruction + #0 + + + 1 + Instruction code written in the SFMSIC register + #1 + + + + + SFMOSW + Setup time adjustment for serial transmission + 11 + 11 + read-write + + + 0 + Does not extend the low-level width of SCK at transmission time + #0 + + + 1 + Extends the low-level width of SCK by 1*PCLKA at transmission time + #1 + + + + + SFMOHW + Hold time adjustment for serial transmission + 10 + 10 + read-write + + + 0 + Does not extend the high-level width of SCK at transmission time + #0 + + + 1 + Extends the high-level width of SCK by 1*PCLKA at transmission time + #1 + + + + + SFMOEX + Extension of the I/O buffer output enable signal for the serial interface + 9 + 9 + read-write + + + 0 + Does not extend the output enable signal + #0 + + + 1 + Extends the output enable signal by 1*QSPCLK + #1 + + + + + SFMMD3 + SPI mode selection. An initial value is determined by input to CFGMD3. + 8 + 8 + read-write + + + 0 + SPI mode 0 + #0 + + + 1 + SPI mode 3 + #1 + + + + + SFMPAE + Selection of the function for stopping prefetch at locations other than on byte boundaries + 7 + 7 + read-write + + + 0 + Disables prefetch stopping at locations other than on byte boundaries + #0 + + + 1 + Enables prefetch stopping at locations other than on byte boundaries + #1 + + + + + SFMPFE + Selection of the prefetch function + 6 + 6 + read-write + + + 0 + Disables prefetch + #0 + + + 1 + Enables prefetch + #1 + + + + + SFMSE + Selection of the prefetch function + 4 + 5 + read-write + + + 00 + Does not extend QSSL + #00 + + + 01 + Extends QSSL by 33*QSPCLK + #01 + + + 10 + Extends QSSL by 129*QSPCLK + #10 + + + 11 + Extends QSSL infinitely + #11 + + + + + SFMRM + Serial interface read mode selection + 0 + 2 + read-write + + + 000 + Standard Read + #000 + + + 001 + Fast Read + #001 + + + 010 + Fast Read Dual Output + #010 + + + 011 + Fast Read Dual I/O + #011 + + + 100 + Fast Read Quad Output + #100 + + + 101 + Fast Read Quad I/O + #101 + + + 110 + Setting prohibited + #110 + + + 111 + Setting prohibited + #111 + + + + + + + SFMSSC + Chip Selection Control Register + 0x004 + 32 + read-write + 0x00000037 + 0xFFFFFFFF + + + SFMSLD + QSSL signal output timing selection + 5 + 5 + read-write + + + 0 + Outputs QSSL 0.5*SCK before the first rising edge of QSPCLK + #0 + + + 1 + Outputs QSSL 1.5*SCK before the first rising edge of QSPCLK + #1 + + + + + SFMSHD + QSSL signal release timing selection + 4 + 4 + read-write + + + 0 + Releases QSSL 0.5*SCK after the last rising edge of QSPCLK + #0 + + + 1 + Releases QSSL 1.5*SCK after the last rising edge of QSPCLK + #1 + + + + + SFMSW + Selection of a minimum high-level width of the QSSL signal + 0 + 3 + read-write + + + 0000 + 1 x QSPCLK + #0000 + + + 0001 + 2 x QSPCLK + #0001 + + + 0010 + 3 x QSPCLK + #0010 + + + 0011 + 4 x QSPCLK + #0011 + + + 0100 + 5 x QSPCLK + #0100 + + + 0101 + 6 x QSPCLK + #0101 + + + 0110 + 7 x QSPCLK + #0110 + + + 0111 + 8 x QSPCLK + #0111 + + + 1000 + 9 x QSPCLK + #1000 + + + 1001 + 10 x QSPCLK + #1001 + + + 1010 + 11 x QSPCLK + #1010 + + + 1011 + 12 x QSPCLK + #1011 + + + 1100 + 13 x QSPCLK + #1100 + + + 1101 + 14 x QSPCLK + #1101 + + + 1110 + 15 x QSPCLK + #1110 + + + 1111 + 16 x QSPCLK + #1111 + + + + + + + SFMSKC + Clock Control Register + 0x008 + 32 + read-write + 0x00000008 + 0xFFFFFFFF + + + SFMDTY + Selection of a duty ratio correction function for the SCK signal + 5 + 5 + read-write + + + 0 + Serial interface reference cycle selection (* Pay attention to the irregularity.) + #0 + + + 1 + Delays the rising of the SCK signal by 0.5*PCLKA.(* Valid with PCLKA multiplied by an odd number) + #1 + + + + + SFMDV + Serial interface reference cycle selection (* Pay attention to the irregularity.)NOTE: When PCLKA multiplied by an odd number is selected, the high-level width of the SCK signal is longer than the low-level width by 1 x PCLKA before duty ratio correction. + 0 + 4 + read-write + + + 10000 + 18 x PCLKA + #10000 + + + 10001 + 20 x PCLKA + #10001 + + + 10010 + 22 x PCLKA + #10010 + + + 10011 + 24 x PCLKA + #10011 + + + 10100 + 26 x PCLKA + #10100 + + + 10101 + 28 x PCLKA + #10101 + + + 10110 + 30 x PCLKA + #10110 + + + 10111 + 32 x PCLKA + #10111 + + + 11000 + 34 x PCLKA + #11000 + + + 11001 + 36 x PCLKA + #11001 + + + 11010 + 38 x PCLKA + #11010 + + + 11011 + 40 x PCLKA + #11011 + + + 11100 + 42 x PCLKA + #11100 + + + 11101 + 44 x PCLKA + #11101 + + + 11110 + 46 x PCLKA + #11110 + + + 11111 + 48 x PCLKA + #11111 + + + others + ( SFMDV + 2 ) x PCLKA + true + + + + + + + SFMSST + Status Register + 0x00C + 32 + read-only + 0x00000080 + 0xFFFFFFFF + + + PFOFF + Prefetch function operation state + 7 + 7 + read-only + + + 0 + The prefetch function is operating. + #0 + + + 1 + The prefetch function is not enabled or is not operating. + #1 + + + + + PFFUL + Prefetch buffer state + 6 + 6 + read-only + + + 0 + The prefetch buffer has a free space. + #0 + + + 1 + The prefetch buffer is full. + #1 + + + + + PFCNT + Number of bytes of prefetched dataRange: 00000 - 10010 (No combination other than the above is available.) + 0 + 4 + read-only + + + 00000 + Nodata has been prefetched. + #00000 + + + others + Data of (PFCNT) bytes hs been prefetched. + true + + + + + + + SFMCOM + Communication Port Register + 0x010 + 32 + read-write + 0x00000000 + 0xFFFFFF00 + + + SFMD + Port for direct communication with the SPI bus.Input/output to and from this port is converted to a SPIbus cycle. This port is accessible in the direct communication mode (DCOM=1) only.Access to this port is ignored in the ROM access mode. + 0 + 7 + read-write + + + + + SFMCMD + Communication Mode Control Register + 0x014 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DCOM + Selection of a mode of communication with the SPI bus + 0 + 0 + read-write + + + 0 + ROM access mode + #0 + + + 1 + Direct communication mode + #1 + + + + + + + SFMCST + Communication Status Register + 0x018 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + EROMR + Status of ROM access detection in the direct communication modeNOTE: Writing of 0 only is possible. Writing of 1 is ignored. + 7 + 7 + read-only + + + 0 + ROM access is not detected in direct communication mode + #0 + + + 1 + ROM access is detected in direct communication mode + #1 + + + + + COMBSY + SPI bus cycle completion state in direct communication + 0 + 0 + read-only + + + 0 + There is no serial transfer being processed. + #0 + + + 1 + There is a serial transfer being processed. + #1 + + + + + + + SFMSIC + Instruction Code Register + 0x020 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SFMCIC + Serial ROM instruction code to substitute + 0 + 7 + read-write + + + + + SFMSAC + Address Mode Control Register + 0x024 + 32 + read-write + 0x00000002 + 0xFFFFFFFF + + + SFM4BC + Selection of a default instruction code, when Serial Interface address width is selected 4 bytes. + 4 + 4 + read-write + + + 0 + Does not use 4 Byte address read Instruction code + #0 + + + 1 + Use 4 Byte address read Instruction code + #1 + + + + + SFMAS + Selection the number of address bits of the serial interface + 0 + 1 + read-write + + + 00 + 1byte + #00 + + + 01 + 2bytes + #01 + + + 10 + 3bytes + #10 + + + 11 + 4 bytes + #11 + + + + + + + SFMSDC + Dummy Cycle Control Register + 0x028 + 32 + read-write + 0x0000FF00 + 0xFFFFFFFF + + + SFMXD + Mode data for serial ROM. (Control XIP mode) + 8 + 15 + read-write + + + 0 + XIP mode is prohibited + #0 + + + 1 + XIP mode is permitted + #1 + + + + + SFMXEN + XIP mode permission + 7 + 7 + read-write + + + 0 + XIP mode is prohibited + #0 + + + 1 + XIP mode is permitted + #1 + + + + + SFMXST + XIP mode status + 6 + 6 + read-only + + + 0 + Normal (non-XIP) mode is operating + #0 + + + 1 + XIP mode is operating + #1 + + + + + SFMDN + Selection of the number of dummy cycles of Fast Read instructions + 0 + 3 + read-write + + + 0000 + Default dummy cycles of each instruction. + #0000 + + + others + ( SFMDN + 2 ) x SCK + true + + + + + + + SFMSPC + SPI Protocol Control Register + 0x030 + 32 + read-write + 0x00000010 + 0xFFFFFFFF + + + SFMSDE + Selection of the minimum time of input output switch, when Dual SPI protocol or Quad SPI protocol is selected. + 4 + 4 + read-write + + + 0 + Does not allocate minimum switch time + #0 + + + 1 + Allocate the minimum switch time equivalent to 1*QSPXLK + #1 + + + + + SFMSPI + Selection of SPI protocolNOTE: Serial ROM's SPI protocol is required to be set by software separately. + 0 + 1 + read-write + + + 00 + Extended SPI protocol + #00 + + + 01 + Dual SPI protocol + #01 + + + 10 + Quad SPI protocol + #10 + + + 11 + Setting prohibited. + #11 + + + + + + + SFMPMD + Port Control Register + 0x034 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SFMWPL + Specify level of WP pin + 2 + 2 + read-write + + + 0 + Low level + #0 + + + 1 + High level + #1 + + + + + + + SFMCNT1 + External QSPI Address Register 1 + 0x804 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + QSPI_EXT + BANK Switching AddressWhen accessing from 0x6000_0000 to 0x63FF_FFFF, Addres bus is Set QSPI_EXT[5:0] to high-order 6bits of SHADDR[31:0]NOTE: Setting 6'h3F is prihibited. + 26 + 31 + read-write + + + + + + + R_RTC + Realtime Clock + 0x40044000 + + 0x00000000 + 0x01 + registers + + + 0x00000002 + 0x01 + registers + + + 0x00000004 + 0x01 + registers + + + 0x00000006 + 0x01 + registers + + + 0x00000008 + 0x01 + registers + + + 0x0000000A + 0x01 + registers + + + 0x0000000C + 0x01 + registers + + + 0x0000000E + 0x003 + registers + + + 0x00000012 + 0x01 + registers + + + 0x00000014 + 0x01 + registers + + + 0x00000016 + 0x01 + registers + + + 0x00000018 + 0x01 + registers + + + 0x0000001A + 0x01 + registers + + + 0x0000001C + 0x003 + registers + + + 0x00000022 + 0x01 + registers + + + 0x00000024 + 0x01 + registers + + + 0x00000028 + 0x01 + registers + + + 0x0000002A + 0x005 + registers + + + 0x00000040 + 0x01 + registers + + + 0x00000042 + 0x01 + registers + + + 0x00000044 + 0x01 + registers + + + 0x00000052 + 0x01 + registers + + + 0x00000054 + 0x01 + registers + + + 0x00000056 + 0x01 + registers + + + 0x0000005A + 0x01 + registers + + + 0x0000005C + 0x01 + registers + + + 0x00000062 + 0x01 + registers + + + 0x00000064 + 0x01 + registers + + + 0x00000066 + 0x01 + registers + + + 0x0000006A + 0x01 + registers + + + 0x0000006C + 0x01 + registers + + + 0x00000072 + 0x01 + registers + + + 0x00000074 + 0x01 + registers + + + 0x00000076 + 0x01 + registers + + + 0x0000007A + 0x01 + registers + + + 0x0000007C + 0x01 + registers + + + + 3 + 0x2 + RTCCR[%s] + Time Capture Control Register + 0x40 + + RTCCR + Time Capture Control Register + 0 + 8 + read-write + 0x00 + 0x00 + + + TCNF + Time Capture Noise Filter Control + 4 + 5 + read-write + + + 00 + The noise filter is off. + #00 + + + 01 + Setting prohibited + #01 + + + 10 + The noise filter is on (count source). + #10 + + + 11 + The noise filter is on (count source by divided by 32). + #11 + + + + + TCST + Time Capture Status + 2 + 2 read-only - 0x00000000 - 0x00000000 - - - SSIFRDR - SSIFRDR is a read-only FIFO register consisting of eight stages of 32-bit registers for storing serially received data. - 0 - 31 - read-only - - - - - SSIFRDR16 - Receive FIFO Data Register - SSIFRDR - 0x1C - 16 + + + 0 + No event is detected. + #0 + + + 1 + An event is detected. + #1 + + + + + TCCT + Time Capture Control + 0 + 1 + read-write + + + 00 + No event is detected. + #00 + + + 01 + Rising edge is detected. + #01 + + + 10 + Falling edge is detected. + #10 + + + 11 + Both edges are detected. + #11 + + + + + + + + 3 + 0x10 + CP[%s] + Capture registers + 0x50 + + RSEC + Second Capture Register + 0x02 + 8 + read-only + 0x00 + 0x00 + + + SEC10 + 10-Second Capture Capture value for the tens place of seconds + 4 + 6 read-only - 0x00000000 - 0x00000000 - - - SSIFRDR8 - Receive FIFO Data Register - SSIFRDR - 0x1C - 8 + + + SEC1 + 1-Second Capture Capture value for the ones place of seconds + 0 + 3 read-only - 0x00000000 - 0x00000000 - - - SSIOFR - Audio Format Register - 0x20 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - BCKASTP - Whether to Enable Stopping BCK Output When SSIE is in Idle Status - 9 - 9 - read-write - - - 0 - Always outputs BCK to the SSIBCK pin. - #0 - - - 1 - Automatically controls output of BCK to the SSIBCK pin. - #1 - - - - - LRCONT - Whether to Enable LRCK/FS Continuation - 8 - 8 - read-write - - - 0 - Disables LRCK/FS continuation. - #0 - - - 1 - Enables LRCK/FS continuation. - #1 - - - - - OMOD - Audio Format Select - 0 - 1 - read-write - - - 00 - I2S format - #00 - - - 01 - TDM format - #01 - - - 10 - Monaural format - #10 - - - 11 - Setting prohibited. - #11 - - - - - - - SSISCR - Status Control Register - 0x24 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - TDES - TDE Setting Condition Select - 8 - 12 - read-write - - - 00000 - SSIFTDR has one stage or more free space - #00000 - - - 00001 - SSIFTDR has two stages or more free space (snip) - #00001 - - - 11110 - SSIFTDR has thirty-one stages or more free space - #11110 - - - 11111 - SSIFTDR has thirty-two stages or more free space. - #11111 - - - - - RDFS - RDF Setting Condition Select - 0 - 4 - read-write - - - 00000 - SSIFRDR has one stage or more data size - #00000 - - - 00001 - SSIFRDR has two stages or more data size (snip) - #00001 - - - 11110 - SSIFRDR has thirty-one stages or more data size - #11110 - - - 11111 - SSIFRDR has thirty-two stages or more data size. - #11111 - - - - - - + + + + + BCNT0 + BCNT0 Capture Register + RSEC + 0x02 + 8 + read-only + 0x00 + 0x00 + + + BCNT0CP + BCNT0CP is a read-only register that captures the BCNT0 value when a time capture event is detected. + 0 + 7 + read-only + + + + + RMIN + Minute Capture Register + 0x04 + 8 + read-only + 0x00 + 0x00 + + + MIN10 + 10-Minute Capture Capture value for the tens place of minutes + 4 + 6 + read-only + + + MIN1 + 1-Minute Capture Capture value for the ones place of minutes + 0 + 3 + read-only + + + + + BCNT1 + BCNT1 Capture Register + RMIN + 0x04 + 8 + read-only + 0x00 + 0x00 + + + BCNT1CP + BCNT1CP is a read-only register that captures the BCNT1 value when a time capture event is detected. + 0 + 7 + read-only + + + + + RHR + Hour Capture Register + 0x06 + 8 + read-only + 0x00 + 0x00 + + + PM + A.m./p.m. select for time counter setting. + 6 + 6 + read-only + + + 0 + a.m. + #0 + + + 1 + p.m. + #1 + + + + + HR10 + 10-Minute Capture Capture value for the tens place of minutes + 4 + 5 + read-only + + + HR1 + 1-Minute Capture Capture value for the ones place of minutes + 0 + 3 + read-only + + + + + BCNT2 + BCNT2 Capture Register + RHR + 0x06 + 8 + read-only + 0x00 + 0x00 + + + BCNT2CP + BCNT2CP is a read-only register that captures the BCNT2 value when a time capture event is detected. + 0 + 7 + read-only + + + + + RDAY + Date Capture Register + 0x0A + 8 + read-only + 0x00 + 0x00 + + + DATE10 + 10-Day Capture Capture value for the tens place of minutes + 4 + 5 + read-only + + + DATE1 + 1-Day Capture Capture value for the ones place of minutes + 0 + 3 + read-only + + + + + BCNT3 + BCNT3 Capture Register + RDAY + 0x0A + 8 + read-only + 0x00 + 0x00 + + + BCNT3CP + BCNT3CP is a read-only register that captures the BCNT3 value when a time capture event is detected. + 0 + 7 + read-only + + + + + RMON + Month Capture Register + 0x0C + 8 + read-only + 0x00 + 0x00 + + + MON10 + 10-Month Capture Capture value for the tens place of months + 4 + 4 + read-only + + + MON1 + 1-Month Capture Capture value for the ones place of months + 0 + 3 + read-only + + + + + + R64CNT + 64-Hz Counter + 0x00 + 8 + read-only + 0x00 + 0x80 + + + F1HZ + 1Hz + 6 + 6 + read-only + + + F2HZ + 2Hz + 5 + 5 + read-only + + + F4HZ + 4Hz + 4 + 4 + read-only + + + F8HZ + 8Hz + 3 + 3 + read-only + + + F16HZ + 16Hz + 2 + 2 + read-only + + + F32HZ + 32Hz + 1 + 1 + read-only + + + F64HZ + 64Hz + 0 + 0 + read-only + + + + + RSECCNT + Second Counter + 0x02 + 8 + read-write + 0x00 + 0x00 + + + SEC10 + 10-Second Count Counts from 0 to 5 for 60-second counting. + 4 + 6 + read-write + + + SEC1 + 1-Second Count Counts from 0 to 9 every second. When a carry is generated, 1 is added to the tens place. + 0 + 3 + read-write + + + + + BCNT0 + Binary Counter 0 + RSECCNT + 0x02 + 8 + read-write + 0x00 + 0x00 + + + BCNT0 + The BCNT0 counter is a readable/writable 32-bit binary counter b7 to b0. + 0 + 7 + read-write + + + + + RMINCNT + Minute Counter + 0x04 + 8 + read-write + 0x00 + 0x00 + + + MIN10 + 10-Minute Count Counts from 0 to 5 for 60-minute counting. + 4 + 6 + read-write + + + MIN1 + 1-Minute Count Counts from 0 to 9 every minute. When a carry is generated, 1 is added to the tens place. + 0 + 3 + read-write + + + + + BCNT1 + Binary Counter 1 + RMINCNT + 0x04 + 8 + read-write + 0x00 + 0x00 + + + BCNT1 + The BCNT1 counter is a readable/writable 32-bit binary counter b15 to b8. + 0 + 7 + read-write + + + + + RHRCNT + Hour Counter + 0x06 + 8 + read-write + 0x00 + 0x00 + + + PM + Time Counter Setting for a.m./p.m. + 6 + 6 + read-write + + + 0 + a.m. + #0 + + + 1 + p.m. + #1 + + + + + HR10 + 10-Hour Count Counts from 0 to 2 once per carry from the ones place. + 4 + 5 + read-write + + + HR1 + 1-Hour Count Counts from 0 to 9 once per hour. When a carry is generated, 1 is added to the tens place. + 0 + 3 + read-write + + + + + BCNT2 + Binary Counter 2 + RHRCNT + 0x06 + 8 + read-write + 0x00 + 0x00 + + + BCNT2 + The BCNT2 counter is a readable/writable 32-bit binary counter b23 to b16. + 0 + 7 + read-write + + + + + RWKCNT + Day-of-Week Counter + 0x08 + 8 + read-write + 0x00 + 0x00 + + + DAYW + Day-of-Week Counting + 0 + 2 + read-write + + + 000 + Sunday + #000 + + + 001 + Monday + #001 + + + 010 + Tuesday + #010 + + + 011 + Wednesday + #011 + + + 100 + Thursday + #100 + + + 101 + Friday + #101 + + + 110 + Saturday + #110 + + + 111 + Setting Prohibited + #111 + + + + + + + BCNT3 + Binary Counter 3 + RWKCNT + 0x08 + 8 + read-write + 0x00 + 0x00 + + + BCNT3 + The BCNT3 counter is a readable/writable 32-bit binary counter b31 to b24. + 0 + 7 + read-write + + + + + RDAYCNT + Day Counter + 0x0A + 8 + read-write + 0x00 + 0xC0 + + + DATE10 + 10-Day Count Counts from 0 to 3 once per carry from the ones place. + 4 + 5 + read-write + + + DATE1 + 1-Day Count Counts from 0 to 9 once per day. When a carry is generated, 1 is added to the tens place. + 0 + 3 + read-write + + + + + RMONCNT + Month Counter + 0x0C + 8 + read-write + 0x00 + 0xE0 + + + MON10 + 10-Month Count Counts from 0 to 1 once per carry from the ones place. + 4 + 4 + read-write + + + MON1 + 1-Month Count Counts from 0 to 9 once per month. When a carry is generated, 1 is added to the tens place. + 0 + 3 + read-write + + + + + RYRCNT + Year Counter + 0x0E + 16 + read-write + 0x0000 + 0xFF00 + + + YR10 + 10-Year Count Counts from 0 to 9 once per carry from ones place. When a carry is generated in the tens place, 1 is added to the hundreds place. + 4 + 7 + read-write + + + YR1 + 1-Year Count Counts from 0 to 9 once per year. When a carry is generated, 1 is added to the tens place. + 0 + 3 + read-write + + + + + RSECAR + Second Alarm Register + 0x10 + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RSECCNT counter value. + #0 + + + 1 + The register value is compared with the RSECCNT counter value. + #1 + + + + + SEC10 + 10-Seconds Value for the tens place of seconds + 4 + 6 + read-write + + + SEC1 + 1-Second Value for the ones place of seconds + 0 + 3 + write-only + + + + + BCNT0AR + Binary Counter 0 Alarm Register + RSECAR + 0x10 + 8 + read-write + 0x00 + 0x00 + + + BCNT0AR + he BCNT0AR counter is a readable/writable alarm register corresponding to 32-bit binary counter b7 to b0. + 0 + 7 + read-write + + + + + RMINAR + Minute Alarm Register + 0x12 + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RMINCNT counter value. + #0 + + + 1 + The register value is compared with the RMINCNT counter value. + #1 + + + + + MIN10 + 10-Minute Count Value for the tens place of minutes + 4 + 6 + read-write + + + MIN1 + 1-Minute Count Value for the ones place of minutes + 0 + 3 + read-write + + + + + BCNT1AR + Binary Counter 1 Alarm Register + RMINAR + 0x12 + 8 + read-write + 0x00 + 0x00 + + + BCNT1AR + he BCNT1AR counter is a readable/writable alarm register corresponding to 32-bit binary counter b15 to b8. + 0 + 7 + read-write + + + + + RHRAR + Hour Alarm Register + 0x14 + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RHRCNT counter value. + #0 + + + 1 + The register value is compared with the RHRCNT counter value. + #1 + + + + + PM + Time Counter Setting for a.m./p.m. + 6 + 6 + read-write + + + 0 + a.m. + #0 + + + 1 + p.m. + #1 + + + + + HR10 + 10-Hour Count Value for the tens place of hours + 4 + 5 + read-write + + + HR1 + 1-Hour Count Value for the ones place of hours + 0 + 3 + read-write + + + + + BCNT2AR + Binary Counter 2 Alarm Register + RHRAR + 0x14 + 8 + read-write + 0x00 + 0x00 + + + BCNT2AR + The BCNT2AR counter is a readable/writable 32-bit binary counter b23 to b16. + 0 + 7 + read-write + + + + + RWKAR + Day-of-Week Alarm Register + 0x16 + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RWKCNT counter value. + #0 + + + 1 + The register value is compared with the RWKCNT counter value. + #1 + + + + + DAYW + Day-of-Week Counting + 0 + 2 + read-write + + + 000 + Sunday + #000 + + + 001 + Monday + #001 + + + 010 + Tuesday + #010 + + + 011 + Wednesday + #011 + + + 100 + Thursday + #100 + + + 101 + Friday + #101 + + + 110 + Saturday + #110 + + + 111 + Setting Prohibited + #111 + + + + + + + BCNT3AR + Binary Counter 3 Alarm Register + RWKAR + 0x16 + 8 + read-write + 0x00 + 0x00 + + + BCNT3AR + The BCNT3AR counter is a readable/writable 32-bit binary counter b31 to b24. + 0 + 7 + read-write + + + + + RDAYAR + Date Alarm Register + 0x18 + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RDAYCNT counter value. + #0 + + + 1 + The register value is compared with the RDAYCNT counter value. + #1 + + + + + DATE10 + 10 Days Value for the tens place of days + 4 + 5 + read-write + + + DATE1 + 1 Day Value for the ones place of days + 0 + 3 + read-write + + + + + BCNT0AER + Binary Counter 0 Alarm Enable Register + RDAYAR + 0x18 + 8 + read-write + 0x00 + 0x00 + + + ENB + The BCNT0AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b7 to b0. + 0 + 7 + read-write + + + + + RMONAR + Month Alarm Register + 0x1A + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RMONCNT counter value. + #0 + + + 1 + The register value is compared with the RMONCNT counter value. + #1 + + + + + MON10 + 10 Months Value for the tens place of months + 4 + 4 + read-write + + + MON1 + 1 Month Value for the ones place of months + 0 + 3 + read-write + + + + + BCNT1AER + Binary Counter 1 Alarm Enable Register + RMONAR + 0x1A + 8 + read-write + 0x00 + 0x00 + + + ENB + The BCNT1AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b15 to b8. + 0 + 7 + read-write + + + + + RYRAR + Year Alarm Register + 0x1C + 16 + read-write + 0x0000 + 0xFF00 + + + YR10 + 10 Years Value for the tens place of years + 4 + 7 + read-write + + + YR1 + 1 Year Value for the ones place of years + 0 + 3 + read-write + + + + + BCNT2AER + Binary Counter 2 Alarm Enable Register + RYRAR + 0x1C + 16 + read-write + 0x0000 + 0xFF00 + + + ENB + The BCNT2AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b23 to b16. + 0 + 7 + read-write + + + + + RYRAREN + Year Alarm Enable Register + 0x1E + 8 + read-write + 0x00 + 0x00 + + + ENB + Compare enable + 7 + 7 + read-write + + + 0 + The register value is not compared with the RYRCNT counter value. + #0 + + + 1 + The register value is compared with the RYRCNT counter value. + #1 + + + + + + + BCNT3AER + Binary Counter 3 Alarm Enable Register + RYRAREN + 0x1E + 8 + read-write + 0x00 + 0x00 + + + ENB + The BCNT3AER register is a readable/writable register for setting the alarm enable corresponding to 32-bit binary counter b31 to b24. + 0 + 7 + read-write + + + + + RCR1 + RTC Control Register 1 + 0x22 + 8 + read-write + 0x00 + 0x0A + + + PES + Periodic Interrupt Select + 4 + 7 + read-write + + + 0110 + A periodic interrupt is generated every 1/256 second((RCR4.RCKSEL = 0)./A periodic interrupt is generated every 1/128 second((RCR4.RCKSEL = 1). + #0110 + + + 0111 + A periodic interrupt is generated every 1/128 second. + #0111 + + + 1000 + A periodic interrupt is generated every 1/64 second. + #1000 + + + 1001 + A periodic interrupt is generated every 1/32 second. + #1001 + + + 1010 + A periodic interrupt is generated every 1/16 second. + #1010 + + + 1011 + A periodic interrupt is generated every 1/8 second. + #1011 + + + 1100 + A periodic interrupt is generated every 1/4 second. + #1100 + + + 1101 + A periodic interrupt is generated every 1/2 second. + #1101 + + + 1110 + A periodic interrupt is generated every 1 second. + #1110 + + + 1111 + A periodic interrupt is generated every 2 seconds. + #1111 + + + others + No periodic interrupts are generated. + true + + + + + RTCOS + RTCOUT Output Select + 3 + 3 + read-write + + + 0 + RTCOUT outputs 1 Hz. + #0 + + + 1 + RTCOUT outputs 64 Hz. + #1 + + + + + PIE + Periodic Interrupt Enable + 2 + 2 + read-write + + + 0 + A periodic interrupt request is disabled. + #0 + + + 1 + A periodic interrupt request is enabled. + #1 + + + + + CIE + Carry Interrupt Enable + 1 + 1 + read-write + + + 0 + A carry interrupt request is disabled. + #0 + + + 1 + A carry interrupt request is enabled. + #1 + + + + + AIE + Alarm Interrupt Enable + 0 + 0 + read-write + + + 0 + An alarm interrupt request is disabled. + #0 + + + 1 + An alarm interrupt request is enabled. + #1 + + + + + + + RCR2 + RTC Control Register 2 + 0x24 + 8 + read-write + 0x00 + 0x0E + + + CNTMD + Count Mode Select + 7 + 7 + read-write + + + 0 + The calendar count mode. + #0 + + + 1 + The binary count mode. + #1 + + + + + HR24 + Hours Mode + 6 + 6 + read-write + + + 0 + The RTC operates in 12-hour mode. + #0 + + + 1 + The RTC operates in 24-hour mode. + #1 + + + + + AADJP + Automatic Adjustment Period Select (When the LOCO clock is selected, the setting of this bit is disabled.) + 5 + 5 + read-write + + + 0 + The RADJ.ADJ[5:0] setting value is adjusted from the count value of the prescaler every minute. + #0 + + + 1 + The RADJ.ADJ[5:0] setting value is adjusted from the count value of the prescaler every 10 seconds. + #1 + + + + + AADJE + Automatic Adjustment Enable (When the LOCO clock is selected, the setting of this bit is disabled.) + 4 + 4 + read-write + + + 0 + Automatic adjustment is disabled. + #0 + + + 1 + Automatic adjustment is enabled. + #1 + + + + + RTCOE + RTCOUT Output Enable + 3 + 3 + read-write + + + 0 + RTCOUT output disabled. + #0 + + + 1 + RTCOUT output enabled. + #1 + + + + + ADJ30 + 30-Second Adjustment + 2 + 2 + read-write + + + 0 + Writing is invalid.(write) / In normal time operation, or 30-second adjustment has completed.(read) + #0 + + + 1 + 30-second adjustment is executed.(write) / During 30-second adjustment.(read) + #1 + + + + + RESET + RTC Software Reset + 1 + 1 + read-write + + + 0 + Writing is invalid.(write) / In normal time operation, or an RTC software reset has completed.(read) + #0 + + + 1 + The prescaler and the target registers for RTC software reset *1 are initialized.(write) / During an RTC software reset.(read) + #1 + + + + + START + Start + 0 + 0 + read-write + + + 0 + Prescaler and time counter are stopped. + #0 + + + 1 + Prescaler and time counter operate normally. + #1 + + + + + + + RCR4 + RTC Control Register 4 + 0x28 + 8 + read-write + 0x00 + 0xFE + + + RCKSEL + Count Source Select + 0 + 0 + read-write + + + 0 + Sub-clock oscillator is selected. + #0 + + + 1 + LOCO clock oscillator is selected. + #1 + + + + + ROPSEL + RTC Operation Mode Select + 7 + 7 + read-write + + + 0 + Normal operation mode is selected. + #0 + + + 1 + Low-consumption clock mode is selected. + #1 + + + + + + + RFRH + Frequency Register H + 0x2A + 16 + read-write + 0x0000 + 0xFFFE + + + RFC16 + Frequency Comparison Value (b16) To generate the operating clock from the LOCOclock, this bit sets the comparison value of the 128-Hz clock cycle. + 0 + 0 + read-write + + + + + RFRL + Frequency Register L + 0x2C + 16 + read-write + 0x0000 + 0x0000 + + + RFC + Frequency Comparison Value(b15-b0) To generate the operating clock from the main clock, this bit sets the comparison value of the 128-Hz clock cycle. + 0 + 15 + read-write + + + + + RADJ + Time Error Adjustment Register + 0x2E + 8 + read-write + 0x00 + 0x00 + + + PMADJ + Plus-Minus + 6 + 7 + read-write + + + 00 + Adjustment is not performed. + #00 + + + 01 + Adjustment is performed by the addition to the prescaler. + #01 + + + 10 + Adjustment is performed by the subtraction from the prescaler. + #10 + + + 11 + Setting prohibited + #11 + + + + + ADJ + Adjustment Value These bits specify the adjustment value from the prescaler. + 0 + 5 + read-write + + + + + + + R_SCI0 + Serial Communications Interface + 0x40070000 + + 0x00000000 + 0x01D + registers + + + + SMR + Serial Mode Register (SCMR.SMIF = 0) + 0x00 + 8 + read-write + 0x00 + 0xFF + + + CM + Communication Mode + 7 + 7 + read-write + + + 0 + Asynchronous mode or simple I2C mode + #0 + + + 1 + Clock synchronous mode + #1 + + + + + CHR + Character Length(Valid only in asynchronous mode) + 6 + 6 + read-write + + + 0 + Transmit/receive in 9-bit data length(SCMR.CHR1=0) / in 8bit data length(SCMR.CHR1=1) + #0 + + + 1 + Transmit/receive in 9-bit data length(SCMR.CHR1=0) / in 7bit data length(SCMR.CHR1=1) + #1 + + + + + PE + Parity Enable(Valid only in asynchronous mode) + 5 + 5 + read-write + + + 0 + Parity bit addition is not performed (transmitting) / Parity bit checking is not performed ( receiving ) + #0 + + + 1 + The parity bit is added (transmitting) / The parity bit is checked (receiving) + #1 + + + + + PM + Parity Mode (Valid only when the PE bit is 1) + 4 + 4 + read-write + + + 0 + Selects even parity + #0 + + + 1 + Selects odd parity + #1 + + + + + STOP + Stop Bit Length(Valid only in asynchronous mode) + 3 + 3 + read-write + + + 0 + 1 stop bit + #0 + + + 1 + 2 stop bits + #1 + + + + + MP + Multi-Processor Mode(Valid only in asynchronous mode) + 2 + 2 + read-write + + + 0 + Multi-processor communications function is disabled + #0 + + + 1 + Multi-processor communications function is enabled + #1 + + + + + CKS + Clock Select + 0 + 1 + read-write + + + 00 + PCLK clock + #00 + + + 01 + PCLK/4 clock + #01 + + + 10 + PCLK/16 clock + #10 + + + 11 + PCLK/64 clock + #11 + + + + + + + SMR_SMCI + Serial mode register (SCMR.SMIF = 1) + SMR + 0x00 + 8 + read-write + 0x00 + 0xFF + + + GM + GSM Mode + 7 + 7 + read-write + + + 0 + Normal mode operation + #0 + + + 1 + GSM mode operation + #1 + + + + + BLK + Block Transfer Mode + 6 + 6 + read-write + + + 0 + Normal mode operation + #0 + + + 1 + Block transfer mode operation + #1 + + + + + PE + Parity Enable(Valid only in asynchronous mode) + 5 + 5 + read-write + + + 0 + Setting Prohibited + #0 + + + 1 + Set this bit to 1 in smart card interface mode. + #1 + + + + + PM + Parity Mode (Valid only when the PE bit is 1) + 4 + 4 + read-write + + + 0 + Selects even parity + #0 + + + 1 + Selects odd parity + #1 + + + + + BCP + Base Clock Pulse(Valid only in asynchronous mode) + 2 + 3 + read-write + + + 00 + 93 clock cycles(S=93) (SCMR.BCP2=0) / 32 clock cycles(S=32) (SCMR.BCP2=1) + #00 + + + 01 + 128 clock cycles(S=128) (SCMR.BCP2=0) / 64 clock cycles(S=64) (SCMR.BCP2=1) + #01 + + + 10 + 186 clock cycles(S=186) (SCMR.BCP2=0) / 372 clock cycles(S=372) (SCMR.BCP2=1) + #10 + + + 11 + 512 clock cycles(S=512) (SCMR.BCP2=0) / 256 clock cycles(S=256) (SCMR.BCP2=1) + #11 + + + + + CKS + Clock Select + 0 + 1 + read-write + + + 00 + PCLK clock + #00 + + + 01 + PCLK/4 clock + #01 + + + 10 + PCLK/16 clock + #10 + + + 11 + PCLK/64 clock + #11 + + + + + + + BRR + Bit Rate Register + 0x01 + 8 + read-write + 0xFF + 0xFF + + + BRR + BRR is an 8-bit register that adjusts the bit rate. + 0 + 7 + read-write + + + + + SCR + Serial Control Register (SCMR.SMIF = 0) + 0x02 + 8 + read-write + 0x00 + 0xFF + + + TIE + Transmit Interrupt Enable + 7 + 7 + read-write + + + 0 + SCI_TXI interrupt request is disabled + #0 + + + 1 + SCI_TXI interrupt request is enabled + #1 + + + + + RIE + Receive Interrupt Enable + 6 + 6 + read-write + + + 0 + SCI_RXI and SCI_ERI interrupt requests are disabled + #0 + + + 1 + SCI_RXI and SCI_ERI interrupt requests are enabled + #1 + + + + + TE + Transmit Enable + 5 + 5 + read-write + + + 0 + Serial transmission is disabled + #0 + + + 1 + Serial transmission is enabled + #1 + + + + + RE + Receive Enable + 4 + 4 + read-write + + + 0 + Serial reception is disabled + #0 + + + 1 + Serial reception is enabled + #1 + + + + + MPIE + Multi-Processor Interrupt Enable(Valid in asynchronous mode when SMR.MP = 1) + 3 + 3 + read-write + + + 0 + Normal reception + #0 + + + 1 + When the data with the multi-processor bit set to 0 is received, the data is not read, and setting the status flags RDRF,ORER and FER in SSR to 1 is disabled. When the data with the multiprocessor bit set to 1 is received, the MPIE bit is automatically cleared to 0, and normal reception is resumed. + #1 + + + + + TEIE + Transmit End Interrupt Enable + 2 + 2 + read-write + + + 0 + SCI_TEI interrupt request is disabled + #0 + + + 1 + SCI_TEI interrupt request is enabled + #1 + + + + + CKE + Clock Enable + 0 + 1 + read-write + + + 00 + The SCKn pin is available for use as an I/O port in accord with the I/O port settings.(Asynchronous mode) / The SCKn pin functions as the clock output pin(Clock synchronous mode) + #00 + + + 01 + The clock with the same frequency as the bit rate is output from the SCKn pin.(Asynchronous mode) / The SCKn pin functions as the clock output pin(Clock synchronous mode) + #01 + + + others + The clock with a frequency 16 times the bit rate should be input from the SCKn pin. (when SEMR.ABCS bit is 0) Input a clock signal with a frequency 8 times the bit rate when the SEMR.ABCS bit is 1.(Asynchronous mode) / The SCKn pin functions as the clock input pin(Clock synchronous mode) + true + + + + + + + SCR_SMCI + Serial Control Register (SCMR.SMIF =1) + SCR + 0x02 + 8 + read-write + 0x00 + 0xFF + + + TIE + Transmit Interrupt Enable + 7 + 7 + read-write + + + 0 + A SCI_TXI interrupt request is disabled + #0 + + + 1 + A SCI_TXI interrupt request is enabled + #1 + + + + + RIE + Receive Interrupt Enable + 6 + 6 + read-write + + + 0 + SCI_RXI and SCI_ERI interrupt requests are disabled + #0 + + + 1 + SCI_RXI and SCI_ERI interrupt requests are enabled + #1 + + + + + TE + Transmit Enable + 5 + 5 + read-write + + + 0 + Serial transmission is disabled + #0 + + + 1 + Serial transmission is enabled + #1 + + + + + RE + Receive Enable + 4 + 4 + read-write + + + 0 + Serial reception is disabled + #0 + + + 1 + Serial reception is enabled + #1 + + + + + MPIE + Multi-Processor Interrupt Enable + 3 + 3 + read-write + + + TEIE + Transmit End Interrupt Enable + 2 + 2 + read-write + + + CKE + Clock Enable + 0 + 1 + read-write + + + 00 + Output disabled(SMR_SMCI.GM=0) / Output fixed low(SMR_SMCI.GM=1) + #00 + + + 01 + Clock Output + #01 + + + 10 + Setting prohibited(SMR_SMCI.GM=0) / Output fixed High(SMR_SMCI.GM=1) + #10 + + + 11 + Setting prohibited(SMR_SMCI.GM=0) / Clock Output(SMR_SMCI.GM=1) + #11 + + + + + + + TDR + Transmit Data Register + 0x03 + 8 + read-write + 0xFF + 0xFF + + + TDR + TDR is an 8-bit register that stores transmit data. + 0 + 7 + read-write + + + + + SSR + Serial Status Register(SCMR.SMIF = 0 and FCR.FM=0) + 0x04 + 8 + read-write + 0x84 + 0xFF + + + TDRE + Transmit Data Empty Flag + 7 + 7 + read-write + zeroToClear + modify + + + 0 + Transmit data is in TDR register + #0 + + + 1 + No transmit data is in TDR register + #1 + + + + + RDRF + Receive Data Full Flag + 6 + 6 + read-write + zeroToClear + modify + + + 0 + No received data is in RDR register + #0 + + + 1 + Received data is in RDR register + #1 + + + + + ORER + Overrun Error Flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + No overrun error occurred + #0 + + + 1 + An overrun error has occurred + #1 + + + + + FER + Framing Error Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + No framing error occurred + #0 + + + 1 + A framing error has occurred + #1 + + + + + PER + Parity Error Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + No parity error occurred + #0 + + + 1 + A parity error has occurred + #1 + + + + + TEND + Transmit End Flag + 2 + 2 + read-only + + + 0 + A character is being transmitted. + #0 + + + 1 + Character transfer has been completed. + #1 + + + + + MPB + Multi-Processor + 1 + 1 + read-only + + + 0 + Data transmission cycles + #0 + + + 1 + ID transmission cycles + #1 + + + + + MPBT + Multi-Processor Bit Transfer + 0 + 0 + read-write + + + 0 + Data transmission cycles + #0 + + + 1 + ID transmission cycles + #1 + + + + + + + SSR_FIFO + Serial Status Register(SCMR.SMIF = 0 and FCR.FM=1) + SSR + 0x04 + 8 + read-write + 0x80 + 0xFD + + + TDFE + Transmit FIFO data empty flag + 7 + 7 + read-write + zeroToClear + modify + + + 0 + The quantity of transmit data written in FTDR exceeds the specified transmit triggering number. + #0 + + + 1 + The quantity of transmit data written in FTDR is equal to or less than the specified transmit triggering number + #1 + + + + + RDF + Receive FIFO data full flag + 6 + 6 + read-write + zeroToClear + modify + + + 0 + The quantity of receive data written in FRDR falls below the specified receive triggering number. + #0 + + + 1 + The quantity of receive data written in FRDR is equal to or greater than the specified receive triggering number. + #1 + + + + + ORER + Overrun Error Flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + No overrun error occurred + #0 + + + 1 + An overrun error has occurred + #1 + + + + + FER + Framing Error Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + No framing error occurred. + #0 + + + 1 + A framing error has occurred. + #1 + + + + + PER + Parity Error Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + No parity error occurred. + #0 + + + 1 + A parity error has occurred. + #1 + + + + + TEND + Transmit End Flag + 2 + 2 + read-write + zeroToClear + modify + + + 0 + A character is being transmitted or standing by for transmission. + #0 + + + 1 + Character transfer has been completed. + #1 + + + + + DR + Receive Data Ready flag(Valid only in asynchronous mode(including multi-processor) and FIFO selected) + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Receiving is in progress, or no received data has remained in FRDR after normally completed receiving.(receive FIFO is empty) + #0 + + + 1 + Next receive data has not been received for a period after normal completed receiving, , when data is stored in FIFO to equal or less than receive triggering number. + #1 + + + + + + + SSR_SMCI + Serial Status Register(SCMR.SMIF = 1) + SSR + 0x04 + 8 + read-write + 0x84 + 0xFF + + + TDRE + Transmit Data Empty Flag + 7 + 7 + read-write + zeroToClear + modify + + + 0 + Transmit data is in TDR register + #0 + + + 1 + No transmit data is in TDR register + #1 + + + + + RDRF + Receive Data Full Flag + 6 + 6 + read-write + zeroToClear + modify + + + 0 + No received data is in RDR register + #0 + + + 1 + Received data is in RDR register + #1 + + + + + ORER + Overrun Error Flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + No overrun error occurred + #0 + + + 1 + An overrun error has occurred + #1 + + + + + ERS + Error Signal Status Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + Low error signal not responded + #0 + + + 1 + Low error signal responded + #1 + + + + + PER + Parity Error Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + No parity error occurred + #0 + + + 1 + A parity error has occurred + #1 + + + + + TEND + Transmit End Flag + 2 + 2 + read-only + + + 0 + A character is being transmitted. + #0 + + + 1 + Character transfer has been completed. + #1 + + + + + MPB + Multi-ProcessorThis bit should be 0 in smart card interface mode. + 1 + 1 + read-only + + + MPBT + Multi-Processor Bit TransferThis bit should be 0 in smart card interface mode. + 0 + 0 + read-write + + + + + RDR + Receive Data Register + 0x05 + 8 + read-only + 0x00 + 0xFF + + + RDR + RDR is an 8-bit register that stores receive data. + 0 + 7 + read-only + + + + + SCMR + Smart Card Mode Register + 0x06 + 8 + read-write + 0xF2 + 0xFF + + + BCP2 + Base Clock Pulse 2Selects the number of base clock cycles in combination with the SMR.BCP[1:0] bits + 7 + 7 + read-write + + + 0 + S=93(SMR.BCP[1:0]=00), 128(SMR.BCP[1:0]=01), 186(SMR.BCP[1:0]=10), 512(SMR.BCP[1:0]=11) + #0 + + + 1 + S=32(SMR.BCP[1:0]=00), 64(SMR.BCP[1:0]=01), 372(SMR.BCP[1:0]=10), 256(SMR.BCP[1:0]=11) + #1 + + + + + CHR1 + Character Length 1(Only valid in asynchronous mode) + 4 + 4 + read-write + + + 0 + Transmit/receive in 9-bit data length + #0 + + + 1 + Transmit/receive in 8-bit data length(SMR.CHR=0) / in 7bit data length(SMR.CHR=1) + #1 + + + + + SDIR + Transmitted/Received Data Transfer DirectionNOTE: The setting is invalid and a fixed data length of 8 bits is used in modes other than asynchronous mode.Set this bit to 1 if operation is to be in simple I2C mode. + 3 + 3 + read-write + + + 0 + Transfer with LSB first + #0 + + + 1 + Transfer with MSB first + #1 + + + + + SINV + Transmitted/Received Data InvertSet this bit to 0 if operation is to be in simple I2C mode. + 2 + 2 + read-write + + + 0 + TDR contents are transmitted as they are. Receive data is stored as it is in RDR. + #0 + + + 1 + TDR contents are inverted before being transmitted. Receive data is stored in inverted form in RDR. + #1 + + + + + SMIF + Smart Card Interface Mode Select + 0 + 0 + read-write + + + 0 + Non-smart card interface mode(Asynchronous mode, clock synchronous mode, simple SPI mode, or simple I2C mode) + #0 + + + 1 + Smart card interface mode + #1 + + + + + + + SEMR + Serial Extended Mode Register + 0x07 + 8 + read-write + 0x00 + 0xFF + + + RXDESEL + Asynchronous Start Bit Edge Detection Select(Valid only in asynchronous mode) + 7 + 7 + read-write + + + 0 + The low level on the RXDn pin is detected as the start bit. + #0 + + + 1 + A falling edge on the RXDn pin is detected as the start bit. + #1 + + + + + BGDM + Baud Rate Generator Double-Speed Mode Select(Only valid the CKE[1] bit in SCR is 0 in asynchronous mode). + 6 + 6 + read-write + + + 0 + Baud rate generator outputs the clock with normal frequency. + #0 + + + 1 + Baud rate generator outputs the clock with doubled frequency. + #1 + + + + + NFEN + Digital Noise Filter Function Enable(The NFEN bit should be 0 without simple I2C mode and asynchronous mode.)In asynchronous mode, for RXDn input only. In simple I2C mode, for RXDn/TxDn input. + 5 + 5 + read-write + + + 0 + Noise cancellation function for the RXDn/SSCLn and SSDAn input signal is disabled. + #0 + + + 1 + Noise cancellation function for the RXDn/SSCLn and SSDAn input signal is enabled. + #1 + + + + + ABCS + Asynchronous Mode Base Clock Select(Valid only in asynchronous mode) + 4 + 4 + read-write + + + 0 + Selects 16 base clock cycles for 1-bit period. + #0 + + + 1 + Selects 8 base clock cycles for 1-bit period. + #1 + + + + + ABCSE + Asynchronous Mode Extended Base Clock Select 1(Valid only in asynchronous mode and SCR.CKE[1]=0) + 3 + 3 + read-write + + + 0 + Clock cycles for 1-bit period is decided with combination between BGDM and ABCS in SEMR. + #0 + + + 1 + Baud rate is 6 base clock cycles for 1-bit period and the clock of a double frequency is output from the baud rate generator. + #1 + + + + + BRME + Bit Rate Modulation Enable + 2 + 2 + read-write + + + 0 + Bit rate modulation function is disabled. + #0 + + + 1 + Bit rate modulation function is enabled. + #1 + + + + + + + SNFR + Noise Filter Setting Register + 0x08 + 8 + read-write + 0x00 + 0xFF + + + NFCS + Noise Filter Clock Select + 0 + 2 + read-write + + + 000 + The clock signal divided by 1 is used with the noise filter.(In asynchronous mode) + #000 + + + 001 + The clock signal divided by 1 is used with the noise filter.(In simple I2C mode) + #001 + + + 010 + The clock signal divided by 2 is used with the noise filter.(In simple I2C mode) + #010 + + + 011 + The clock signal divided by 4 is used with the noise filter.(In simple I2C mode) + #011 + + + 100 + The clock signal divided by 8 is used with the noise filter.(In simple I2C mode) + #100 + + + others + Settings prohibited. + true + + + + + + + SIMR1 + I2C Mode Register 1 + 0x09 + 8 + read-write + 0x00 + 0xFF + + + IICDL + SDA Delay Output SelectCycles below are of the clock signal from the on-chip baud rate generator. + 3 + 7 + read-write + + + 00000 + No output delay + #00000 + + + others + (IICDL - 1 ) to IIDCDL cycles. The delay is in the clock cycles from the on-chip baud rate generator. + true + + + + + IICM + Simple I2C Mode Select + 0 + 0 + read-write + + + 0 + Asynchronous mode, Multi-processor mode, Clock synchronous mode(SCMR.SMIF=0) /Smart card interface mode(SCMR.SMIF=1) + #0 + + + 1 + Simple I2C mode(SCMR.SMIF=0) / Setting prohibited.(SCMR.SMIF=1) + #1 + + + + + + + SIMR2 + I2C Mode Register 2 + 0x0A + 8 + read-write + 0x00 + 0xFF + + + IICACKT + ACK Transmission Data + 5 + 5 + read-write + + + 0 + ACK transmission + #0 + + + 1 + NACK transmission and reception of ACK/NACK + #1 + + + + + IICCSC + Clock Synchronization + 1 + 1 + read-write + + + 0 + No synchronization with the clock signal + #0 + + + 1 + Synchronization with the clock signal + #1 + + + + + IICINTM + I2C Interrupt Mode Select + 0 + 0 + read-write + + + 0 + Use ACK/NACK interrupts. + #0 + + + 1 + Use reception and transmission interrupts + #1 + + + + + + + SIMR3 + I2C Mode Register 3 + 0x0B + 8 + read-write + 0x00 + 0xFF + + + IICSCLS + SCL Output Select + 6 + 7 + read-write + + + 00 + Serial clock output + #00 + + + 01 + Generate a start, restart, or stop condition. + #01 + + + 10 + Output the low level on the SSCLn pin. + #10 + + + 11 + Place the SSCLn pin in the high-impedance state. + #11 + + + + + IICSDAS + SDA Output Select + 4 + 5 + read-write + + + 00 + Serial data output + #00 + + + 01 + Generate a start, restart, or stop condition. + #01 + + + 10 + Output the low level on the SSDAn pin. + #10 + + + 11 + Place the SSDAn pin in the high-impedance state. + #11 + + + + + IICSTIF + Issuing of Start, Restart, or Stop Condition Completed Flag(When 0 is written to IICSTIF, it is cleared to 0.) + 3 + 3 + read-write + zeroToClear + modify + + + 0 + There are no requests for generating conditions or a condition is being generated. + #0 + + + 1 + A start, restart, or stop condition is completely generated. + #1 + + + + + IICSTPREQ + Stop Condition Generation + 2 + 2 + read-write + + + 0 + A stop condition is not generated. + #0 + + + 1 + A stop condition is generated. + #1 + + + + + IICRSTAREQ + Restart Condition Generation + 1 + 1 + read-write + + + 0 + A restart condition is not generated. + #0 + + + 1 + A restart condition is generated. + #1 + + + + + IICSTAREQ + Start Condition Generation + 0 + 0 + read-write + + + 0 + A start condition is not generated. + #0 + + + 1 + A start condition is generated. + #1 + + + + + + + SISR + I2C Status Register + 0x0C + 8 + read-only + 0x00 + 0xCB + + + IICACKR + ACK Reception Data Flag + 0 + 0 + read-only + + + 0 + ACK received + #0 + + + 1 + NACK received + #1 + + + + + + + SPMR + SPI Mode Register + 0x0D + 8 + read-write + 0x00 + 0xFF + + + CKPH + Clock Phase Select + 7 + 7 + read-write + + + 0 + Clock is not delayed. + #0 + + + 1 + Clock is delayed. + #1 + + + + + CKPOL + Clock Polarity Select + 6 + 6 + read-write + + + 0 + Clock polarity is not inverted. + #0 + + + 1 + Clock polarity is inverted + #1 + + + + + MFF + Mode Fault Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + No mode fault error + #0 + + + 1 + Mode fault error + #1 + + + + + MSS + Master Slave Select + 2 + 2 + read-write + + + 0 + Transmission is through the TXDn pin and reception is through the RXDn pin (master mode). + #0 + + + 1 + Reception is through the TXDn pin and transmission is through the RXDn pin (slave mode). + #1 + + + + + CTSE + CTS Enable + 1 + 1 + read-write + + + 0 + CTS function is disabled (RTS output function is enabled). + #0 + + + 1 + CTS function is enabled. + #1 + + + + + SSE + SSn Pin Function Enable + 0 + 0 + read-write + + + 0 + SSn pin function is disabled. + #0 + + + 1 + SSn pin function is enabled. + #1 + + + + + + + TDRHL + Transmit 9-bit Data Register + 0x0E + 16 + read-write + 0xFFFF + 0xFFFF + + + TDRHL + TDRHL is a 16-bit register that stores transmit data. + 0 + 15 + write-only + + + + + FTDRHL + Transmit FIFO Data Register HL + TDRHL + 0x0E + 16 + write-only + 0xFFFF + 0xFFFF + + + MPBT + Multi-processor transfer bit flag(Valid only in asynchronous mode and SMR.MP=1 and FIFO selected) + 9 + 9 + write-only + + + 0 + Data transmission cycles + #0 + + + 1 + ID transmission cycles + #1 + + + + + TDAT + Serial transmit data (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + 0 + 8 + write-only + + + + + FTDRH + Transmit FIFO Data Register H + TDRHL + 0x0E + 8 + write-only + 0xFF + 0xFF + + + MPBT + Multi-processor transfer bit flag(Valid only in asynchronous mode and SMR.MP=1 and FIFO selected) + 1 + 1 + write-only + + + 0 + Data transmission cycles + #0 + + + 1 + ID transmission cycles + #1 + + + + + TDATH + Serial transmit data (b8) (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + 0 + 0 + write-only + + + + + FTDRL + Transmit FIFO Data Register L + TDRHL + 0x0F + 8 + write-only + 0xFF + 0xFF + + + TDATL + Serial transmit data(b7-b0) (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + 0 + 7 + write-only + + + + + RDRHL + Receive 9-bit Data Register + 0x10 + 16 + read-only + 0x0000 + 0xFFFF + + + RDRHL + RDRHL is an 16-bit register that stores receive data. + 0 + 15 + read-only + + + + + FRDRHL + Receive FIFO Data Register HL + RDRHL + 0x10 + 16 + read-only + 0x0000 + 0xFFFF + + + RDF + Receive FIFO data full flag(It is same as SSR.RDF) + 14 + 14 + read-only + + + 0 + The quantity of receive data written in FRDRH and FRDRL falls below the specified receive triggering number. + #0 + + + 1 + The quantity of receive data written in FRDRH and FRDRL is equal to or greater than the specified receive triggering number. + #1 + + + + + ORER + Overrun error flag(It is same as SSR.ORER) + 13 + 13 + read-only + + + 0 + No overrun error occurred. + #0 + + + 1 + An overrun error has occurred. + #1 + + + + + FER + Framing error flag + 12 + 12 + read-only + + + 0 + No framing error occurred at the first data of FRDRH and FRDRL. + #0 + + + 1 + A framing error has occurred at the first data of FRDRH and FRDRL. + #1 + + + + + PER + Parity error flag + 11 + 11 + read-only + + + 0 + No parity error occurred at the first data of FRDRH and FRDRL. + #0 + + + 1 + A parity error has occurred at the first data of FRDRH and FRDRL. + #1 + + + + + DR + Receive data ready flag(It is same as SSR.DR) + 10 + 10 + read-only + + + 0 + Receiving is in progress, or no received data has remained in FRDRH and FRDRL after normally completed receiving. + #0 + + + 1 + Next receive data has not been received for a period after normal completed receiving. + #1 + + + + + MPB + Multi-processor bit flag(Valid only in asynchronous mode with SMR.MP=1 and FIFO selected) It can read multi-processor bit corresponded to serial receive data(RDATA[8:0]) + 9 + 9 + read-only + + + 0 + Data transmission cycles + #0 + + + 1 + ID transmission cycles + #1 + + + + + RDAT + Serial receive data(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + 0 + 8 + read-only + + + + + FRDRH + Receive FIFO Data Register H + RDRHL + 0x10 + 8 + read-only + 0x00 + 0xFF + + + RDF + Receive FIFO data full flag(It is same as SSR.RDF) + 6 + 6 + read-only + + + 0 + The quantity of receive data written in FRDRH and FRDRL falls below the specified receive triggering number. + #0 + + + 1 + The quantity of receive data written in FRDRH and FRDRL is equal to or greater than the specified receive triggering number. + #1 + + + + + ORER + Overrun error flag(It is same as SSR.ORER) + 5 + 5 + read-only + + + 0 + No overrun error occurred + #0 + + + 1 + An overrun error has occurred + #1 + + + + + FER + Framing error flag + 4 + 4 + read-only + + + 0 + No framing error occurred at the first data of FRDRH and FRDRL + #0 + + + 1 + A framing error has occurred at the first data of FRDRH and FRDRL + #1 + + + + + PER + Parity error flag + 3 + 3 + read-only + + + 0 + No parity error occurred at the first data of FRDRH and FRDRL + #0 + + + 1 + A parity error has occurred at the first data of FRDRH and FRDRL + #1 + + + + + DR + Receive data ready flag(It is same as SSR.DR) + 2 + 2 + read-only + + + 0 + Receiving is in progress, or no received data has remained in FRDRH and FRDRL after normally completed receiving. + #0 + + + 1 + Next receive data has not been received for a period after normal completed receiving. + #1 + + + + + MPB + Multi-processor bit flag(Valid only in asynchronous mode with SMR.MP=1 and FIFO selected) It can read multi-processor bit corresponded to serial receive data(RDATA[8:0]) + 1 + 1 + read-only + + + 0 + Data transmission cycles + #0 + + + 1 + ID transmission cycles + #1 + + + + + RDATH + Serial receive data(b8)(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + 0 + 0 + read-only + + + + + FRDRL + Receive FIFO Data Register L + RDRHL + 0x11 + 8 + read-only + 0x00 + 0xFF + + + RDATL + Serial receive data(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected)NOTE: When reading both of FRDRH register and FRDRL register, please read by an order of the FRDRH register and the FRDRL register. + 0 + 7 + read-only + + + + + MDDR + Modulation Duty Register + 0x12 + 8 + read-write + 0xFF + 0xFF + + + MDDR + MDDR corrects the bit rate adjusted by the BRR register. + 0 + 7 + read-write + + + + + DCCR + Data Compare Match Control Register + 0x13 + 8 + read-write + 0x40 + 0xFF + + + DCME + Data Compare Match Enable(Valid only in asynchronous mode(including multi-processor) + 7 + 7 + read-write + + + 0 + Address match function is disabled. + #0 + + + 1 + Address match function is enabled + #1 + + + + + IDSEL + ID frame select(Valid only in asynchronous mode(including multi-processor) + 6 + 6 + read-write + + + 0 + Always compare data regardless of the value of the MPB bit. + #0 + + + 1 + Compare data when the MPB bit is 1 (ID frame) only. + #1 + + + + + DFER + Data Compare Match Framing Error Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + No framing error occurred + #0 + + + 1 + A framing error has occurred + #1 + + + + + DPER + Data Compare Match Parity Error Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + No parity error occurred + #0 + + + 1 + A parity error has occurred + #1 + + + + + DCMF + Data Compare Match Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + No matched + #0 + + + 1 + Matched + #1 + + + + + + + FCR + FIFO Control Register + 0x14 + 16 + read-write + 0xF800 + 0xFFFF + + + RSTRG + RTS Output Active Trigger Number Select(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) + 12 + 15 + read-write + + + 0000 + Trigger number 0 + #0000 + + + others + Triger number n (n= 0-15) + true + + + + + RTRG + Receive FIFO data trigger number(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) + 8 + 11 + read-write + + + 0000 + Trigger number 0 + #0000 + + + others + Triger number n (n= 0-15) + true + + + + + TTRG + Transmit FIFO data trigger number(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) + 4 + 7 + read-write + + + 0000 + Trigger number 0 + #0000 + + + others + Triger number n (n= 0-15) + true + + + + + DRES + Receive data ready error select bit(When detecting a reception data ready, the interrupt request is selected.) + 3 + 3 + read-write + + + 0 + reception data full interrupt (RXI) + #0 + + + 1 + receive error interrupt (ERI) + #1 + + + + + TFRST + Transmit FIFO Data Register Reset(Valid only in FCR.FM=1) + 2 + 2 + read-write + + + 0 + The number of data stored in FTDRH and FTDRL register are NOT made 0 + #0 + + + 1 + The number of data stored in FTDRH and FTDRL register are made 0 + #1 + + + + + RFRST + Receive FIFO Data Register Reset(Valid only in FCR.FM=1) + 1 + 1 + read-write + + + 0 + The number of data stored in FRDRH and FRDRL register are NOT made 0 + #0 + + + 1 + The number of data stored in FRDRH and FRDRL register are made 0 + #1 + + + + + FM + FIFO Mode Select(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode) + 0 + 0 + read-write + + + 0 + Non-FIFO mode(Selects o TDR/RDR for communication) + #0 + + + 1 + FIFO mode (Selects to FTDRH and FTDRL/FRDRH and FRDRL for communication) + #1 + + + + + + + FDR + FIFO Data Count Register + 0x16 + 16 + read-only + 0x0000 + 0xFFFF + + + T + Transmit FIFO Data CountIndicate the quantity of non-transmit data stored in FTDRH and FTDRL(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, while FCR.FM=1) + 8 + 12 + read-only + + + R + Receive FIFO Data CountIndicate the quantity of receive data stored in FRDRH and FRDRL(Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, while FCR.FM=1) + 0 + 4 + read-only + + + + + LSR + Line Status Register + 0x18 + 16 + read-only + 0x0000 + 0xFFFF + + + PNUM + Parity Error CountIndicates the quantity of data with a parity error among the receive data stored in the receive FIFO data register (FRDRH and FRDRL). + 8 + 12 + read-only + + + FNUM + Framing Error CountIndicates the quantity of data with a framing error among the receive data stored in the receive FIFO data register (FRDRH and FRDRL). + 2 + 6 + read-only + + + ORER + Overrun Error Flag (Valid only in asynchronous mode(including multi-processor) or clock synchronous mode, and FIFO selected) + 0 + 0 + read-only + + + 0 + No overrun error occurred + #0 + + + 1 + An overrun error has occurred + #1 + + + + + + + CDR + Compare Match Data Register + 0x1A + 16 + read-write + 0x0000 + 0xFFFF + + + CMPD + Compare Match DataCompare data pattern for address match wake-up function + 0 + 8 + read-write + + + + + SPTR + Serial Port Register + 0x1C + 8 + read-write + 0x03 + 0xFF + + + SPB2IO + Serial port break I/O bit(It's selected whether the value of SPB2DT is output to TxD terminal.) + 2 + 2 + read-write + + + 0 + The value of SPB2DT bit is not output in TXD pin. + #0 + + + 1 + The value of SPB2DT bit is output in TXD pin. + #1 + + + + + SPB2DT + Serial port break data select bit(The output level of TxD terminal is selected when SCR.TE = 0.) + 1 + 1 + read-write + + + 0 + Low level is output on TXD pin + #0 + + + 1 + High level is output on TXD pin + #1 + + + + + RXDMON + Serial input data monitor bit(The state of the RXD terminal is shown.) + 0 + 0 + read-only + + + 0 + RXD pin is low. + #0 + + + 1 + RXD pin is high. + #1 + + + + + RINV + RXD invert bit + 4 + 4 + read-write + + + 0 + Received data from RXD is not inverted and input. + #0 + + + 1 + Received data from RXD is inverted and input. + #1 + + + + + TINV + TXD invert bit + 5 + 5 + read-write + + + 0 + Transmit data is not inverted and output to TXD. + #0 + + + 1 + Transmit data is inverted and output to TXD. + #1 + + + + + ASEN + Adjust receive sampling timing enable + 6 + 6 + read-write + + + 0 + Adjust sampling timing disable. + #0 + + + 1 + Adjust sampling timing enable. + #1 + + + + + ATEN + Adjust transmit timing enable + 7 + 7 + read-write + + + 0 + Adjust transmit timing disable. + #0 + + + 1 + Adjust transmit timing enable. + #1 + + + + + + + ACTR + Adjustment Communication Timing Register + 0x1D + 8 + read-write + 0x00 + 0xff + + + AST + Adjustment value for receive Sampling Timing + 0 + 2 + read-write + + + AJD + Adjustment Direction for receive sampling timing + 3 + 3 + read-write + + + 0 + The sampling timing is adjusted backward to the middle of bit. + #0 + + + 1 + The sampling timing is adjusted forward to the middle of bit. + #1 + + + + + ATT + Adjustment value for Transmit timing + 4 + 6 + read-write + + + AET + Adjustment edge for transmit timing + 7 + 7 + read-write + + + 0 + Adjust the rising edge timing. + #0 + + + 1 + Adjust the falling edge timing. + #1 + + + + + + + ESMER + Extended Serial Module Enable Register + 0x20 + 8 + read-write + 0x00 + 0xff + + + ESME + Extended Serial Mode Enable + 0 + 0 + read-write + + + 0 + The extended serial mode is disabled. + #0 + + + 1 + The extended serial mode is enabled. + #1 + + + + + + + CR0 + Control Register 0 + 0x21 + 8 + read-write + 0x00 + 0xff + + + SFSF + Start Frame Status Flag + 1 + 1 + read-only + + + 0 + Start Frame detection function is disabled. + #0 + + + 1 + Start Frame detection function is enabled. + #1 + + + + + RXDSF + RXDXn Input Status Flag + 2 + 2 + read-only + + + 0 + RXDXn input is enabled. + #0 + + + 1 + RXDXn input is disabled. + #1 + + + + + BRME + Bit Rate Measurement Enable + 3 + 3 + read-write + + + 0 + Measurement of bit rate is disabled. + #0 + + + 1 + Measurement of bit rate is enabled. + #1 + + + + + + + CR1 + Control Register 1 + 0x22 + 8 + read-write + 0x00 + 0xff + + + BFE + Break Field Enable + 0 + 0 + read-write + + + 0 + Break Field detection is disabled. + #0 + + + 1 + Break Field detection is enabled. + #1 + + + + + CF0RE + Control Field 0 Reception Enable + 1 + 1 + read-write + + + 0 + Reception of Control Field 0 is disabled. + #0 + + + 1 + Reception of Control Field 0 is enabled. + #1 + + + + + CF1DS + Control Field 1 Data Register Select + 2 + 3 + read-write + + + 00 + Selects comparison with the value in PCF1DR. + #00 + + + 01 + Selects comparison with the value in SCF1DR. + #01 + + + 10 + Selects comparison with the values in PCF1DR and SCF1DR. + #10 + + + 11 + Setting prohibited. + #11 + + + + + PIBE + Priority Interrupt Bit Enable + 4 + 4 + read-write + + + 0 + The priority interrupt bit is disabled. + #0 + + + 1 + The priority interrupt bit is enabled. + #1 + + + + + PIBS + Priority Interrupt Bit Select + 5 + 7 + read-write + + + 000 + 0th bit of Control Field 1 + #000 + + + 001 + 1st bit of Control Field 1 + #001 + + + 010 + 2nd bit of Control Field 1 + #010 + + + 011 + 3rd bit of Control Field 1 + #011 + + + 100 + 4th bit of Control Field 1 + #100 + + + 101 + 5th bit of Control Field 1 + #101 + + + 110 + 6th bit of Control Field 1 + #110 + + + 111 + 7th bit of Control Field 1 + #111 + + + + + + + CR2 + Control Register 2 + 0x23 + 8 + read-write + 0x00 + 0xff + + + DFCS + RXDXn Signal Digital Filter Clock Select + 0 + 2 + read-write + + + 000 + Filter is disabled. + #000 + + + 001 + Filter clock is SCI base clock + #001 + + + 010 + Filter clock is PCLK/8 + #010 + + + 011 + Filter clock is PCLK/16 + #011 + + + 100 + Filter clock is PCLK/32 + #100 + + + 101 + Filter clock is PCLK/64 + #101 + + + 110 + Filter clock is PCLK/128 + #110 + + + 111 + Setting prohibited + #111 + + + + + BCCS + Bus Collision Detection Clock Select + 4 + 5 + read-write + + + 00 + SCI base clock + #00 + + + 01 + SCI base clock frequency divided by 2 + #01 + + + 10 + SCI base clock frequency divided by 4 + #10 + + + 11 + Setting prohibited + #11 + + + + + RTS + RXDXn Reception Sampling Timing Select + 6 + 7 + read-write + + + 00 + Rising edge of the 8th cycle of SCI base clock + #00 + + + 01 + Rising edge of the 10th cycle of SCI base clock + #01 + + + 10 + Rising edge of the 12th cycle of SCI base clock + #10 + + + 11 + Rising edge of the 14th cycle of SCI base clock + #11 + + + + + + + CR3 + Control Register 3 + 0x24 + 8 + read-write + 0x00 + 0xff + + + SDST + Start Frame Detection Start + 0 + 0 + read-write + + + 0 + Detection of Start Frame is not performed. + #0 + + + 1 + Detection of Start Frame is performed. + #1 + + + + + + + PCR + Port Control Register + 0x25 + 8 + read-write + 0x00 + 0xff + + + TXDXPS + TXDXn Signal Polarity Select + 0 + 0 + read-write + + + 0 + The polarity of TXDXn signal is not inverted for output. + #0 + + + 1 + The polarity of TXDXn signal is inverted for output. + #1 + + + + + RXDXPS + RXDXn Signal Polarity Select + 1 + 1 + read-write + + + 0 + The polarity of RXDXn signal is not inverted for input. + #0 + + + 1 + The polarity of RXDXn signal is inverted for input. + #1 + + + + + SHARPS + TXDXn/RXDXn Pin Multiplexing Select + 4 + 4 + read-write + + + 0 + The TXDXn and RXDXn pins are independent. + #0 + + + 1 + The TXDXn and RXDXn signals are multiplexed on the same pin. + #1 + + + + + + + ICR + Interrupt Control Register + 0x26 + 8 + read-write + 0x00 + 0xff + + + BFDIE + Break Field Low Width Detected Interrupt Enable + 0 + 0 + read-write + + + 0 + Interrupts on detection of the low width for a Break Field are disabled. + #0 + + + 1 + Interrupts on detection of the low width for a Break Field are enabled. + #1 + + + + + CF0MIE + Control Field 0 Match Detected Interrupt Enable + 1 + 1 + read-write + + + 0 + Interrupts on detection of a match with Control Field 0 are disabled. + #0 + + + 1 + Interrupts on detection of a match with Control Field 0 are enabled. + #1 + + + + + CF1MIE + Control Field 1 Match Detected Interrupt Enable + 2 + 2 + read-write + + + 0 + Interrupts on detection of a match with Control Field 1 are disabled. + #0 + + + 1 + Interrupts on detection of a match with Control Field 1 are enabled. + #1 + + + + + PIBDIE + Priority Interrupt Bit Detected Interrupt Enable + 3 + 3 + read-write + + + 0 + Interrupts on detection of the priority interrupt bit are disabled. + #0 + + + 1 + Interrupts on detection of the priority interrupt bit are enabled. + #1 + + + + + BCDIE + Bus Collision Detected Interrupt Enable + 4 + 4 + read-write + + + 0 + Interrupts on detection of a bus collision are disabled. + #0 + + + 1 + Interrupts on detection of a bus collision are enabled. + #1 + + + + + AEDIE + Valid Edge Detected Interrupt Enable + 5 + 5 + read-write + + + 0 + Interrupts on detection of a valid edge are disabled. + #0 + + + 1 + Interrupts on detection of a valid edge are enabled. + #1 + + + + + + + STR + Status Register + 0x27 + 8 + read-only + 0x00 + 0xff + + + BFDF + Break Field Low Width Detection Flag + 0 + 0 + read-only + + + CF0MF + Control Field 0 Match Flag + 1 + 1 + read-only + + + CF1MF + Control Field 1 Match Flag + 2 + 2 + read-only + + + PIBDF + Priority Interrupt Bit Detection Flag + 3 + 3 + read-only + + + BCDF + Bus Collision Detected Flag + 4 + 4 + read-only + + + AEDF + Valid Edge Detection Flag + 5 + 5 + read-only + + + + + STCR + Status Clear Register + 0x28 + 8 + read-write + 0x00 + 0xff + + + BFDCL + BFDF Clear + 0 + 0 + read-write + + + CF0MCL + CF0MF Clear + 1 + 1 + read-write + + + CF1MCL + CF1MF Clear + 2 + 2 + read-write + + + PIBDCL + PIBDF Clear + 3 + 3 + read-write + + + BCDCL + BCDF Clear + 4 + 4 + read-write + + + AEDCL + AEDF Clear + 5 + 5 + read-write + + + + + CF0DR + Control Field 0 Data Register + 0x29 + 8 + read-write + 0x00 + 0xff + + + CF0CR + Control Field 0 Compare Enable Register + 0x2A + 8 + read-write + 0x00 + 0xff + + + CF0CE0 + Control Field 0 Bit 0 Compare Enable + 0 + 0 + read-write + + + 0 + Comparison with bit 0 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 0 of Control Field 0 is enabled. + #1 + + + + + CF0CE1 + Control Field 1 Bit 0 Compare Enable + 1 + 1 + read-write + + + 0 + Comparison with bit 1 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 1 of Control Field 0 is enabled. + #1 + + + + + CF0CE2 + Control Field 2 Bit 0 Compare Enable + 2 + 2 + read-write + + + 0 + Comparison with bit 2 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 2 of Control Field 0 is enabled. + #1 + + + + + CF0CE3 + Control Field 3 Bit 0 Compare Enable + 3 + 3 + read-write + + + 0 + Comparison with bit 3 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 3 of Control Field 0 is enabled. + #1 + + + + + CF0CE4 + Control Field 4 Bit 0 Compare Enable + 4 + 4 + read-write + + + 0 + Comparison with bit 4 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 4 of Control Field 0 is enabled. + #1 + + + + + CF0CE5 + Control Field 5 Bit 0 Compare Enable + 5 + 5 + read-write + + + 0 + Comparison with bit 5 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 5 of Control Field 0 is enabled. + #1 + + + + + CF0CE6 + Control Field 6 Bit 0 Compare Enable + 6 + 6 + read-write + + + 0 + Comparison with bit 6 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 6 of Control Field 0 is enabled. + #1 + + + + + CF0CE7 + Control Field 7 Bit 0 Compare Enable + 7 + 7 + read-write + + + 0 + Comparison with bit 7 of Control Field 0 is disabled. + #0 + + + 1 + Comparison with bit 7 of Control Field 0 is enabled. + #1 + + + + + + + CF0RR + Control Field 0 Receive Data Register + 0x2B + 8 + read-write + 0x00 + 0xff + + + PCF1DR + Primary Control Field 1 Data Register + 0x2C + 8 + read-write + 0x00 + 0xff + + + SCF1DR + Secondary Control Field 1 Data Register + 0x2D + 8 + read-write + 0x00 + 0xff + + + CF1CR + Control Field 1 Compare Enable Register + 0x2E + 8 + read-write + 0x00 + 0xff + + + CF1CE0 + Control Field 1 Bit 0 Compare Enable + 0 + 0 + read-write + + + 0 + Comparison with bit 0 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 0 of Control Field 1 is enabled. + #1 + + + + + CF1CE1 + Control Field 1 Bit 1 Compare Enable + 1 + 1 + read-write + + + 0 + Comparison with bit 1 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 1 of Control Field 1 is enabled. + #1 + + + + + CF1CE2 + Control Field 1 Bit 2 Compare Enable + 2 + 2 + read-write + + + 0 + Comparison with bit 2 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 2 of Control Field 1 is enabled. + #1 + + + + + CF1CE3 + Control Field 1 Bit 3 Compare Enable + 3 + 3 + read-write + + + 0 + Comparison with bit 3 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 3 of Control Field 1 is enabled. + #1 + + + + + CF1CE4 + Control Field 1 Bit 4 Compare Enable + 4 + 4 + read-write + + + 0 + Comparison with bit 4 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 4 of Control Field 1 is enabled. + #1 + + + + + CF1CE5 + Control Field 1 Bit 5 Compare Enable + 5 + 5 + read-write + + + 0 + Comparison with bit 5 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 5 of Control Field 1 is enabled. + #1 + + + + + CF1CE6 + Control Field 1 Bit 6 Compare Enable + 6 + 6 + read-write + + + 0 + Comparison with bit 6 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 6 of Control Field 1 is enabled. + #1 + + + + + CF1CE7 + Control Field 1 Bit 7 Compare Enable + 7 + 7 + read-write + + + 0 + Comparison with bit 7 of Control Field 1 is disabled. + #0 + + + 1 + Comparison with bit 7 of Control Field 1 is enabled. + #1 + + + + + + + CF1RR + Control Field 1 Receive Data Register + 0x2F + 8 + read-write + 0x00 + 0xff + + + TCR + Timer Control Register + 0x30 + 8 + read-write + 0x00 + 0xff + + + TCST + Timer Count Start + 0 + 0 + read-write + + + 0 + Stops the timer counting + #0 + + + 1 + Starts the timer counting + #1 + + + + + + + TMR + Timer Mode Register + 0x31 + 8 + read-write + 0x00 + 0xff + + + TOMS + Timer Operating Mode Select + 0 + 1 + read-write + + + 00 + Timer mode + #00 + + + 01 + Break Field low width determination mode + #01 + + + 10 + Break Field low width output mode + #10 + + + 11 + Setting prohibited + #11 + + + + + TWRC + Counter Write Control + 3 + 3 + read-write + + + 0 + Data is written to the reload register and counter + #0 + + + 1 + Data is written to the reload register only + #1 + + + + + TCSS + Timer Count Clock Source Select + 4 + 6 + read-write + + + 000 + PCLK + #000 + + + 001 + PCLK/2 + #001 + + + 010 + PCLK/4 + #010 + + + 011 + PCLK/8 + #011 + + + 100 + PCLK/16 + #100 + + + 101 + PCLK/32 + #101 + + + 110 + PCLK/64 + #110 + + + 111 + PCLK/128 + #111 + + + + + + + TPRE + Timer Prescaler Register + 0x32 + 8 + read-write + 0xff + 0xff + + + TCNT + Timer Count Register + 0x33 + 8 + read-write + 0xff + 0xff + + + + + R_SCI1 + 0x40070020 + + + R_SCI2 + 0x40070040 + + + R_SCI3 + 0x40070060 + + + R_SCI4 + 0x40070080 + + + R_SCI5 + 0x400700A0 + + + R_SCI6 + 0x400700C0 + + + R_SCI7 + 0x400700E0 + + + R_SCI8 + 0x40070100 + + + R_SCI9 + 0x40070120 + + + R_SDADC0 + + 0x4009C000 + + 0x00000000 + 0x02 + registers + + + 0x00000004 + 0x01 + registers + + + 0x00000008 + 0x019 + registers + + + 0x00000024 + 0x008 + registers + + + 0x00000030 + 0x01 + registers + + + 0x00000034 + 0x01 + registers + + + 0x0000003C + 0x01 + registers + + + + STC1 + Startup Control Register 1 + 0x0 + 16 + read-write + 0XFFFF + + + VSBIAS + Reference voltage select + 8 + 11 + read-write + + + 0000 + 0.8V + #0000 + + + 0001 + 1.0V + #0001 + + + 0010 + 1.2V + #0010 + + + 0011 + 1.4V + #0011 + + + 0100 + 1.6V + #0100 + + + 0101 + 1.8V + #0101 + + + 0110 + 2.0V + #0110 + + + 0111 + 2.2V + #0111 + + + 1111 + 2.4V(only available when VREFSEL=0) + #1111 + + + + + CLKDIV + SDADC24 Reference Clock Division + 0 + 3 + read-write + + + 0000 + No Division + #0000 + + + 0001 + SDADCCLK/2 + #0001 + + + 0010 + SDADCCLK/3 + #0010 + + + 0011 + SDADCCLK/4 + #0011 + + + 0100 + SDADCCLK/5 + #0100 + + + 0101 + SDADCCLK/6 + #0101 + + + 0110 + SDADCCLK/8 + #0110 + + + 0111 + SDADCCLK/12 + #0111 + + + 1000 + SDADCCLK/16 + #1000 + + + + + SDADLPM + A/D conversion operation model select + 7 + 7 + read-write + + + 0 + Normal A/D conversion mode, SDADC Reference Clock: 4 MHz, Oversampingly clock: 1MHz + #0 + + + + + VREFSEL + VREF mode select + 15 + 15 + read-write + + + 0 + Internal VREF Mode + #0 + + + + + + + STC2 + Startup Control Register 2 + 0x04 + 8 + read-write + 0x00 + 0xFF + + + BGRPON + BGR part power control + 0 + 0 + + + 0 + Turn off power to ADBGR, SBIAS, VREFI, and ADREG + #0 + + + 1 + Turn onpower to ADBGR, SBIAS, VREFI, and ADREG + #1 + + + + + ADFPWDS + ADC reference supply part + 2 + 2 + + + 0 + Power of ADREG controlled by BGRPON register + #0 + + + 1 + Power of ADREG is off regardless of BGRPON setting + #1 + + + + + ADCPON + ADREG forced power-down + 1 + 1 + + + 0 + Turn off power to VBIAS, PGA and sigma-delta A/D converter + #0 + + + 1 + Turn on power to VBIAS, PGA and sigma-delta A/D converter + #1 + + + + + + + 5 + 4 + PGAC[%s] + Input Multiplexer %s Setting Register + 0x08 + 32 + read-write + 0x00010040 + 0xFFFFFFFF + + + PGAASN + Selection of the mode for specifying the number of A/D conversions in ADSCAN + 31 + 31 + read-write + + + 0 + Specify 1 to 8,032 times by using the value set in the PGACTN[2:0] and PGACTM[4:0] bits + #0 + + + 1 + Specify 1 to 255 times linearly by using the value set in the PGACTN[2:0] and PGACTM[4:0] bits + #1 + + + + + PGACVE + Calibration enable + 30 + 30 + read-write + + + 0 + Do not calculate the calibration correction factor + #0 + + + 1 + Calculate the calibration correction factor + #1 + + + + + PGAREV + Single-End Input A/D Converted Data Inversion Select + 28 + 28 + read-write + + + 0 + Do not invert the conversion result data + #0 + + + 1 + Invert the conversion result data + #1 + + + + + PGAAVE + Selection of averaging processing + 26 + 27 + read-write + + + 00 + Do not average the A/D conversion results + #00 + + + 01 + Do not average the A/D conversion results + #01 + + + 10 + Average the A/D conversion results and generates SDADC_ADI each time an A/D conversion occurs + #10 + + + 11 + Perform averaging, and generate SDADC_ADI at each time of average value output (A/D conversion is performed N times). + #11 + + + + + PGAAVN + Selection of the number of data to be averaged + 24 + 25 + read-write + + + 00 + 8 + #00 + + + 01 + 16 + #01 + + + 10 + 32 + #10 + + + 11 + 64 + #11 + + + + + PGACTN + Coefficient (n) selection of the A/D conversion count (N) in AUTOSCAN + 21 + 23 + read-write + + + 000 + 0 + #000 + + + 001 + 1 + #001 + + + 010 + 2 + #010 + + + 011 + 3 + #011 + + + 100 + 4 + #100 + + + 101 + 5 + #101 + + + 110 + 6 + #110 + + + 111 + 7 + #111 + + + + + PGACTM + Coefficient (m) selection of the A/D conversion count (N) in AUTOSCAN + 16 + 20 + read-write + + + PGASEL + Analog Channel Input Mode Select + 15 + 15 + read-write + + + 0 + Differential input mode + #0 + + + 1 + Single-end input mode + #1 + + + + + PGAPOL + Polarity select + 14 + 14 + read-write + + + 0 + Positive-side single-end input + #0 + + + 1 + Negative-side single-end input + #1 + + + + + PGAOFS + Offset voltage select + 8 + 12 + read-write + + + PGAOSR + Oversampling ratio select + 5 + 7 + read-write + + + 000 + 64 + #000 + + + 001 + 128 + #001 + + + 010 + 256 + #010 + + + 011 + 512 + #011 + + + 100 + 1024 + #100 + + + 101 + 2048 + #101 + + + others + Settings are prohibited. + true + + + + + PGAGC + Gain selection of a programmable gain instrumentation amplifier ( Gset1, Gset2, Gtotal ) + 0 + 4 + read-write + + + 00000 + (1, 1, 1) + #00000 + + + 00100 + (2, 1, 2) + #00100 + + + 01000 + (3, 1, 3) + #01000 + + + 01100 + (4, 1, 4) + #01100 + + + 10000 + (8, 1, 8) + #10000 + + + 00001 + (1, 2, 2) + #00001 + + + 00101 + (2, 2, 4) + #00101 + + + 01001 + (3, 2, 6) + #01001 + + + 01101 + (4, 2, 8) + #01101 + + + 10001 + (8, 2, 16) + #10001 + + + 00010 + (1, 4, 4) + #00010 + + + 00110 + (2, 4, 8) + #00110 + + + 01010 + (3, 4, 12) + #01010 + + + 01110 + (4, 4, 16) + #01110 + + + 10010 + (8, 4, 32) + #10010 + + + 00011 + (1, 8, 8) + #00011 + + + 00111 + (2, 8, 16) + #00111 + + + 01011 + (3, 8, 24) + #01011 + + + 01111 + (4, 8, 32). + #01111 + + + others + Settings are prohibited. + true + + + + + + + ADC1 + Sigma-Delta A/D Converter Control Register 1 + 0x1C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + PGASLFT + PGA offset self-diagnosis enable + 20 + 20 + read-write + + + 0 + Disable PGA offset self-diagnosis + #0 + + + 1 + Enable PGA offset self-diagnosis + #1 + + + + + PGADISC + Disconnection Detection Assist Setting + 17 + 17 + read-write + + + 0 + Discharge + #0 + + + 1 + Pre-charge + #1 + + + + + PGADISA + Control of disconnection detection + 16 + 16 + read-write + + + 0 + Normal operation + #0 + + + 1 + State of disconnection detection + #1 + + + + + SDADBMP + A/D conversion control of the signal from input multiplexer + 8 + 12 + read-write + + + SDADTMD + Selection of A/D conversion trigger signal + 4 + 4 + read-write + + + 0 + Software trigger (conversion is started by a write to SFR) + #0 + + + 1 + Hardware trigger (conversion is started in synchronization with the event signal selected by ELC_SDADC24). + #1 + + + + + SDADSCM + Selection of autoscan mode + 0 + 0 + read-write + + + 0 + Continuous scan mode + #0 + + + 1 + Single scan mode + #1 + + + + + + + ADC2 + Sigma-Delta A/D Converter Control Register 2 + 0x20 + 8 + read-write + 0x00 + 0xFF + + + SDADST + Control of A/D conversion + 0 + 0 + read-write + + + 0 + Stop A/D conversion + #0 + + + 1 + Start A/D conversion + #1 + + + + + + + ADCR + Sigma-delta A/D Converter Conversion Result Register + 0x24 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SDADCRC + Channel number for an A/D conversion result + 25 + 27 + read-only + + + 000 + Reset value (Conversion result is invalid) + #000 + + + 001 + Input multiplexer 0 (ANSD0P / ANSD0N) + #001 + + + 010 + Input multiplexer 1 (ANSD1P / ANSD1N) + #010 + + + 011 + Input multiplexer 2 (ANSD2P / ANSD2N) + #011 + + + 100 + Input multiplexer 3 (ANSD3P / ANSD3N) + #100 + + + 101 + Input multiplexer 4 (AMP0O / AMP1O) + #101 + + + + + SDADCRS + Status of an A/D conversion result + 24 + 24 + read-only + + + 0 + Normal status (within the range) + #0 + + + 1 + Overflow occurred + #1 + + + + + SDADCRD + The 24-bit A/D conversion result + 0 + 23 + read-only + + + + + ADAR + Sigma-delta A/D Converter Average Value Register + 0x28 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SDADMVC + Channel number for an A/D conversion result + 25 + 27 + read-only + + + 000 + Reset value (Conversion result is invalid) + #000 + + + 001 + Input multiplexer 0 (ANSD0P / ANSD0N) + #001 + + + 010 + Input multiplexer 1 (ANSD1P / ANSD1N) + #010 + + + 011 + Input multiplexer 2 (ANSD2P / ANSD2N) + #011 + + + 100 + Input multiplexer 3 (ANSD3P / ANSD3N) + #100 + + + 101 + Input multiplexer 4 (AMP0O / AMP1O). + #101 + + + + + SDADMVS + Status of an A/D conversion result + 24 + 24 + read-only + + + 0 + Normal status (within the range) + #0 + + + 1 + Overflow occurred + #1 + + + + + SDADMVD + The 24-bit A/D average value + 0 + 23 + read-only + + + + + CLBC + Calibration Control Register + 0x30 + 8 + 0x00 + 0xFF + + + CLBMD + These bits are read as 0. The write value should be 0. + 0 + 1 + read-write + + + 00 + Internal calibration mode + #00 + + + 01 + External offset calibration mode + #01 + + + 10 + External gain calibration mode + #10 + + + 11 + Settings are prohibited + #11 + + + + + + + CLBSTR + Calibration Start Control Register + 0x34 + 8 + read-write + 0x00 + 0xFF + + + CLBST + Calibration start control + 0 + 0 + read-write + + + 0 + Disable writing + #0 + + + 1 + Start calibration + #1 + + + + + + + CLBSSR + Calibration Status Register + 0x3C + 8 + read-only + 0x00 + + + CLBSS + Calibration status + 0 + 0 + read-only + + + 0 + Calibration is not running + #0 + + + 1 + Calibration is running + #1 + + + + + + + + + R_SDHI0 + SD/MMC Host Interface + 0x40062000 + + 0x00000000 + 0x04 + registers + + + 0x00000008 + 0x04C + registers + + + 0x00000058 + 0x00C + registers + + + 0x00000068 + 0x00C + registers + + + 0x000001B0 + 0x04 + registers + + + 0x000001C0 + 0x04 + registers + + + 0x000001CC + 0x04 + registers + + + 0x000001E0 + 0x04 + registers + + + + SD_CMD + Command Type Register + 0x000 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CMD12AT + Multiple Block Transfer Mode (enabled at multiple block transfer) + 14 + 15 + read-write + + + 00 + CMD12 is automatically issued at multiple block transfer. + #00 + + + 01 + CMD12 is not automatically issued at multiple block transfer. + #01 + + + 10 + Setting prohibited + #10 + + + 11 + Setting prohibited + #11 + + + + + TRSTP + Single/Multiple Block Transfer (enabled when the command with data is handled) + 13 + 13 + read-write + + + 0 + Single block transfer + #0 + + + 1 + Multiple block transfer + #1 + + + + + CMDRW + Write/Read Mode (enabled when the command with data is handled) + 12 + 12 + read-write + + + 0 + Write (SD/MMC host interface -> SD card/MMC) + #0 + + + 1 + Read (SD/MMC host interface <- SD card/MMC) + #1 + + + + + CMDTP + Data Mode (Command Type) + 11 + 11 + read-write + + + 0 + Command does not include data transfer (bc, bcr, or ac) + #0 + + + 1 + Command includes data transfer (adtc) + #1 + + + + + RSPTP + Mode/Response TypeNOTE: As some commands cannot be used in normal mode, see section 1.4.10, Example of SD_CMD Register Setting to select mode/response type. + 8 + 10 + read-write + + + 000 + Normal mode The response type and the transfer mode are selected by SD_CMD[7:0], and the SD_CMD[15:11] setting is disabled. + #000 + + + 011 + Expansion mode and no response + #011 + + + 100 + Expansion mode and R1, R5, R6, or R7 response + #100 + + + 101 + Expansion mode and R1b response + #101 + + + 110 + Expansion mode and R2 response + #110 + + + 111 + Expansion mode and R3 or R4 response + #111 + + + others + Settings prohibited. + true + + + + + ACMD + Command Type Select + 6 + 7 + read-write + + + 00 + CMD + #00 + + + 01 + ACMD + #01 + + + others + Setting prohibited + true + + + + + CMDIDX + Command IndexThese bits specify Command Format[45:40] (command index).[Examples]CMD6: SD_CMD[7:0] = 8'b00_000110CMD18: SD_CMD[7:0] = 8'b00_010010ACMD13: SD_CMD[7:0] = 8'b01_001101 + 0 + 5 + read-write + + + + + SD_ARG + SD Command Argument Register + 0x008 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SD_ARG + Argument RegisterSet command format[39:8] (argument) + 0 + 31 + read-write + + + + + SD_ARG1 + SD Command Argument Register 1 + 0x00C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SD_ARG1 + Argument Register 1Set command format[39:24] (argument) + 0 + 15 + read-write + + + + + SD_STOP + Data Stop Register + 0x010 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SEC + Block Count EnableSet SEC to 1 at multiple block transfer.When SD_CMD is set as follows to start the command sequence while SEC is set to 1, CMD12 is automatically issued to stop multi-block transfer with the number of blocks which is set to SD_SECCNT.1. CMD18 or CMD25 in normal mode (SD_CMD[10:8] = 000)2. SD_CMD[15:13] = 001 in extended mode (CMD12 is automatically issued, multiple block transfer)When the command sequence is halted because of a communications error or timeout, CMD12 is not automatically issued.NOTE: Do not change the value of this bit when the CBSY bit in SD_INFO2 is set to 1. + 8 + 8 + read-write + + + 0 + Disables SD_SECCNT setting value. + #0 + + + 1 + Enables SD_SECCNT setting value. + #1 + + + + + STP + Stop- When STP is set to 1 during multiple block transfer, CMD12 is issued to halt the transfer through the SD host interface.However, if a command sequence is halted because of a communications error or timeout, CMD12 is not issued. Although continued buffer access is possible even after STP has been set to 1, the buffer access error bit (ERR5 or ERR4) in SD_INFO2 will be set accordingly.- When STP has been set to 1 during transfer for single block write, the access end flag is set when SD_BUF becomes empty, and CMD12 is not issued. If SD_BUF does contain data, the access end flag is set on completion of reception of the busy state without CMD12 having been issued.- When STP has been set to 1 during transfer for single block read, the access end flag is set immediately after setting of the STP bit and CMD12 is not issued.- When STP is set to 1 during reception of the busy state after an R1b response, the access end flag is set on completion of reception of the busy state without CMD12 having been issued.- When STP is set to 1 after a command sequence has been completed, CMD12 is not issued and the access end flag is not set.- Set STP to 1 after the response end flag has been set.- Set STP to 0 after the response end flag has been set. + 0 + 0 + read-write + + + + + SD_SECCNT + Block Count Register + 0x014 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SD_SECCNT + Number of Transfer BlocksNOTE: Do not change the value of this bit when the CBSY bit in SD_INFO2 is set to 1. + 0 + 31 + read-write + + + + + SD_RSP10 + SD Card Response Register 10 + 0x018 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP10 + Store the response from the SD card/MMC + 0 + 31 + read-only + + + + + SD_RSP1 + SD Card Response Register 1 + 0x01C + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP1 + Store the response from the SD card/MMC + 0 + 15 + read-only + + + + + SD_RSP32 + SD Card Response Register 32 + 0x020 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP32 + Store the response from the SD card/MMC + 0 + 31 + read-only + + + + + SD_RSP3 + SD Card Response Register 3 + 0x024 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP3 + Store the response from the SD card/MMC + 0 + 15 + read-only + + + + + SD_RSP54 + SD Card Response Register 54 + 0x028 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP54 + Store the response from the SD card/MMC + 0 + 31 + read-only + + + + + SD_RSP5 + SD Card Response Register 5 + 0x02C + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP5 + Store the response from the SD card/MMC + 0 + 15 + read-only + + + + + SD_RSP76 + SD Card Response Register 76 + 0x030 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP76 + Store the response from the SD card/MMC + 0 + 23 + read-only + + + + + SD_RSP7 + SD Card Response Register 7 + 0x034 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SD_RSP7 + Store the response from the SD card/MMC + 0 + 7 + read-only + + + + + SD_INFO1 + SD Card Interrupt Flag Register 1 + 0x038 + 32 + read-write + 0x00000000 + 0xFFFFFB5F + + + SDD3MON + Inticates the SDnDAT3 State + 10 + 10 + read-only + + + 0 + SDnDAT3 is set to 0. + #0 + + + 1 + SDnDAT3 is set to 1. + #1 + + + + + SDD3IN + SDnDAT3 Card Insertion + 9 + 9 + read-write + zeroToClear + modify + + + 0 + SD card insertion not detected + #0 + + + 1 + SD card insertion detected + #1 + + + + + SDD3RM + SDnDAT3 Card Removal + 8 + 8 + read-write + zeroToClear + modify + + + 0 + SD card removal not detected + #0 + + + 1 + SD card removal detected + #1 + + + + + SDWPMON + Indicates the SDnWP state + 7 + 7 + read-only + + + 0 + SDnWP is set to 1. + #0 + + + 1 + SDnWP is set to 0. + #1 + + + + + SDCDMON + Indicates the SDnCD state + 5 + 5 + read-only + + + 0 + Indicates that Mcycle has elapsed with SDnCD held 1.(Mcycle is set by bits 3 to 0 in SD_OPTION.) + #0 + + + 1 + Indicates that Mcycle has elapsed with SDnCD held 0. (Mcycle is set by bits 3 to 0 in SD_OPTION.) + #1 + + + + + SDCDIN + SDnCD Card Insertion + 4 + 4 + read-write + zeroToClear + modify + + + 0 + Card insertion not detected + #0 + + + 1 + Card insertion detected + #1 + + + + + SDCDRM + SDnCD Card Removal + 3 + 3 + read-write + zeroToClear + modify + + + 0 + Card removal not detected + #0 + + + 1 + Card removal detected + #1 + + + + + ACEND + Access End + 2 + 2 + read-write + zeroToClear + modify + + + 0 + Access end is not detected + #0 + + + 1 + Access end is detected + #1 + + + + + RSPEND + Response End Detection + 0 + 0 + read-write + + + 0 + Response end is not detected + #0 + + + 1 + Response end is detected + #1 + + + + + + + SD_INFO2 + SD Card Interrupt Flag Register 2 + 0x03C + 32 + read-write + 0x00002000 + 0xFFFFFF7F + + + ILA + Illegal Access Error + 15 + 15 + read-write + zeroToClear + modify + + + 0 + Illegal access error not detected + #0 + + + 1 + Illegal access error detected + #1 + + + + + CBSY + Command Type Register Busy + 14 + 14 + read-only + + + 0 + A command sequence is being executed. + #0 + + + 1 + A command sequence has been completed. + #1 + + + + + SD_CLK_CTRLEN + When a command sequence is started by writing to SD_CMD, the CBSY bit is set to 1 and, at the same time, the SCLKDIVEN bit is set to 0. The SCLKDIVEN bit is set to 1 after 8 cycles of SDCLK have elapsed after setting of the CBSY bit to 0 due to completion of the command sequence. + 13 + 13 + read-only + + + 0 + The SD/MMC bus (CMD, DAT) is busy. Writing to the SCLKEN and DIV bits in SD_CLK_CTRL is not possible. + #0 + + + 1 + The SD/MMC bus (CMD, DAT) is not busy. + #1 + + + + + BWE + SD_BUF Write Enable + 9 + 9 + read-write + zeroToClear + modify + + + 1 + Data can be written in SD_BUF0. + #1 + + + 0 + Data cannot be written in SD_BUF0. + #0 + + + + + BRE + SD_BUF Read Enable + 8 + 8 + read-write + zeroToClear + modify + + + 1 + Data can be read from SD_BUF0. + #1 + + + 0 + Data cannot be read from SD_BUF0. + #0 + + + + + SDD0MON + SDDAT0Indicates the SDDAT0 state of the port specified by SD_PORTSEL. + 7 + 7 + read-only + + + 1 + SDDAT0 is set to 1. + #1 + + + 0 + SDDAT0 is set to 0. + #0 + + + + + RSPTO + Response Timeout + 6 + 6 + read-write + zeroToClear + modify + + + 0 + Response timeout not detected + #0 + + + 1 + Response timeout detected + #1 + + + + + ILR + SD_BUF Illegal Read Access + 5 + 5 + read-write + zeroToClear + modify + + + 0 + Illegal read access to the SD_BUF register not detected + #0 + + + 1 + Illegal read access to the SD_BUF register detected + #1 + + + + + ILW + SD_BUF Illegal Write Access + 4 + 4 + read-write + zeroToClear + modify + + + 0 + Illegal write access to the SD_BUF register not detected + #0 + + + 1 + Illegal write access to the SD_BUF register detected + #1 + + + + + DTO + Data Timeout + 3 + 3 + read-write + zeroToClear + modify + + + 0 + Data timeout not detected + #0 + + + 1 + Data timeout detected + #1 + + + + + ENDE + END Error + 2 + 2 + read-write + zeroToClear + modify + + + 0 + End bit error not detected + #0 + + + 1 + End bit error detected + #1 + + + + + CRCE + CRC Error + 1 + 1 + read-write + zeroToClear + modify + + + 0 + CRC error not detected + #0 + + + 1 + CRC error detected + #1 + + + + + CMDE + Command Error + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Command error not detected + #0 + + + 1 + Command error detected + #1 + + + + + + + SD_INFO1_MASK + SD_INFO1 Interrupt Mask Register + 0x040 + 32 + read-write + 0x0000031D + 0xFFFFFFFF + + + SDD3INM + SDnDAT3 Card Insertion Interrupt Request Mask + 9 + 9 + read-write + + + 0 + SD card insertion interrupt request by the SDnDAT3 is not masked + #0 + + + 1 + SD card insertion interrupt request by the SDnDAT3 is masked + #1 + + + + + SDD3RMM + SDnDAT3 Card Removal Interrupt Request Mask + 8 + 8 + read-write + + + 0 + SD card removal interrupt request by the SDnDAT3 is not masked + #0 + + + 1 + SD card removal interrupt request by the SDnDAT3 is masked + #1 + + + + + SDCDINM + SDnCD card Insertion Interrupt Request Mask + 4 + 4 + read-write + + + 0 + Card insertion interrupt request by the SDnCD is not masked + #0 + + + 1 + Card insertion interrupt request by the SDnCD is masked + #1 + + + + + SDCDRMM + SDnCD card Removal Interrupt Request Mask + 3 + 3 + read-write + + + 0 + Card removal interrupt request by the by the SDnCD is not masked + #0 + + + 1 + Card removal interrupt request by the by the SDnCD is masked + #1 + + + + + ACENDM + Access End Interrupt Request Mask + 2 + 2 + read-write + + + 0 + Access end interrupt request is not masked + #0 + + + 1 + Access end interrupt request is masked + #1 + + + + + RSPENDM + Response End Interrupt Request Mask + 0 + 0 + read-write + + + 0 + Response end interrupt request is not masked + #0 + + + 1 + Response end interrupt request is masked + #1 + + + + + + + SD_INFO2_MASK + SD_INFO2 Interrupt Mask Register + 0x044 + 32 + read-write + 0x00008B7F + 0xFFFFFFFF + + + ILAM + Illegal Access Error Interrupt Request Mask + 15 + 15 + read-write + + + 0 + Illegal access error interrupt request not masked + #0 + + + 1 + Illegal access error interrupt request masked + #1 + + + + + BWEM + BWE Interrupt Request Mask + 9 + 9 + read-write + + + 0 + Write enable interrupt request for the SD_BUF register not masked + #0 + + + 1 + Write enable interrupt request for the SD_BUF register masked + #1 + + + + + BREM + BRE Interrupt Request Mask + 8 + 8 + read-write + + + 0 + Read enable interrupt request for the SD buffer not masked + #0 + + + 1 + Read enable interrupt request for the SD buffer masked + #1 + + + + + RSPTOM + Response Timeout Interrupt Request Mask + 6 + 6 + read-write + + + 0 + Response timeout interrupt request not masked + #0 + + + 1 + Response timeout interrupt request masked + #1 + + + + + ILRM + SD_BUF Register Illegal Read Interrupt Request Mask + 5 + 5 + read-write + + + 0 + Illegal read detection interrupt request for the SD_BUF register not masked + #0 + + + 1 + Illegal read detection interrupt request for the SD_BUF register masked + #1 + + + + + ILWM + SD_BUF Register Illegal Write Interrupt Request Mask + 4 + 4 + read-write + + + 0 + Illegal write detection interrupt request for the SD_BUF register not masked + #0 + + + 1 + Illegal write detection interrupt request for the SD_BUF register masked + #1 + + + + + DTOM + Data Timeout Interrupt Request Mask + 3 + 3 + read-write + + + 0 + Data timeout interrupt request not masked + #0 + + + 1 + Data timeout interrupt request masked + #1 + + + + + ENDEM + End Bit Error Interrupt Request Mask + 2 + 2 + read-write + + + 0 + End bit detection error interrupt request not masked + #0 + + + 1 + End bit detection error interrupt request masked + #1 + + + + + CRCEM + CRC Error Interrupt Request Mask + 1 + 1 + read-write + + + 0 + CRC error interrupt request not masked + #0 + + + 1 + CRC error interrupt request masked + #1 + + + + + CMDEM + Command Error Interrupt Request Mask + 0 + 0 + read-write + + + 0 + Command error interrupt request not masked + #0 + + + 1 + Command error interrupt request masked + #1 + + + + + + + SD_CLK_CTRL + SD Clock Control Register + 0x048 + 32 + read-write + 0x00000020 + 0xFFFFFFFF + + + CLKCTRLEN + SD/MMC Clock Output Automatic Control Enable + 9 + 9 + read-write + + + 0 + Automatic control for SD/MMC Clock output is disabled. + #0 + + + 1 + Automatic control for SD/MMC Clock output is enabled. + #1 + + + + + CLKEN + SD/MMC Clock Output Control Enable + 8 + 8 + read-write + + + 0 + SD/MMC Clock output is disabled. The SDCLK signal is fixed 0. + #0 + + + 1 + SD/MMC Clock output is enabled. + #1 + + + + + CLKSEL + SDHI Clock Frequency Select + 0 + 7 + read-write + + + 0x00 + PCLKA divided by 2 + 0x00 + + + 0x01 + PCLKA divided by 4 + 0x01 + + + 0x02 + PCLKA divided by 8 + 0x02 + + + 0x04 + PCLKA divided by 16 + 0x04 + + + 0x08 + PCLKA divided by 32 + 0x08 + + + 0x10 + PCLKA divided by 64 + 0x10 + + + 0x20 + PCLKA divided by 128 + 0x20 + + + 0x40 + PCLKA divided by 256 + 0x40 + + + 0x80 + PCLKA divided by 512 + 0x80 + + + others + Settings prohibited. + true + + + + + + + SD_SIZE + Transfer Data Length Register + 0x04C + 32 + read-write + 0x00000200 + 0xFFFFFFFF + + + LEN + Transfer Data SizeThese bits specify a size between 1 and 512 bytes for the transfer of single blocks.In cases of multiple block transfer with automatic issuing of CMD12 (CMD18 and CMD25), the only specifiable transfer data size is 512 bytes. Furthermore, in cases of multiple block transfer without automatic issuing of CMD12, as well as 512 bytes, 32, 64, 128, and 256 bytes are specifiable. However, in the reading of 32, 64, 128, and 256 bytes for the transfer of multiple blocks, this is restricted to multiple block transfer by CMD53.Additionally, if a command accompanies data transfer, do not set these bits to 0. + 0 + 9 + read-write + + + + + SD_OPTION + SD Card Access Control Option Register + 0x050 + 32 + read-write + 0x000040EE + 0xFFFFFFFF + + + WIDTH + Bus WidthNOTE: The initial value is applied at a reset and when the SOFT_RST.SDRST flag is 0. + 15 + 15 + read-write + + + 0 + 4-bit width (WIDTH8=0) / 8-bit width (WIDTH8=1) + #0 + + + 1 + 1-bit width (WIDTH8=0 or 1 ) + #1 + + + + + WIDTH8 + Bus Widthsee b15, WIDTH bit + 13 + 13 + read-write + + + TOUTMASK + Timeout MASKWhen timeout occurs in case of inactivating timeout, software reset should be executed to terminate command sequence. + 8 + 8 + read-write + + + 0 + Activate Timeout + #0 + + + 1 + Inactivate Timeout(RSPTO bit and DTO bit of SD_INFO2 and SD_ERR_STS2 won't be set) + #1 + + + + + TOP + Timeout Counter + 4 + 7 + read-write + + + 1111 + Setting prohibited + #1111 + + + others + SDHI clock x 2^(TOP+13) + true + + + + + CTOP + Card Detect Time Counter + 0 + 3 + read-write + + + 1111 + Setting prohibited + #1111 + + + others + IMCLK x 2^(CTOP+10) + true + + + + + + + SD_ERR_STS1 + SD Error Status Register 1 + 0x058 + 32 + read-only + 0x00002000 + 0xFFFFFFFF + + + CRCTK + CRC Status TokenStore the CRC status token value (normal value is 010b) + 12 + 14 + read-only + + + CRCTKE + CRC Status Token Error + 11 + 11 + read-only + + + 0 + An error has not occured in the CRC status. + #0 + + + 1 + An error has occured in the CRC status. + #1 + + + + + RDCRCE + Read Data CRC Error + 10 + 10 + read-only + + + 0 + CRC error has detected in read data + #0 + + + 1 + CRC error has not detected in read data + #1 + + + + + RSPCRCE1 + Response CRC Error 1NOTE: In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in RSPCRCE0. + 9 + 9 + read-only + + + 0 + CRC error has not occured. + #0 + + + 1 + CRC error has occured in the response to a command issued within a command sequence. + #1 + + + + + RSPCRCE0 + Response CRC Error 0NOTE: other than a response to a command issued within a command sequence + 8 + 8 + read-only + + + 0 + A CRC error has not occur in a response + #0 + + + 1 + A CRC error has occured in a response + #1 + + + + + CRCLENE + CRC Status Token Length Error + 5 + 5 + read-only + + + 0 + An error has not occured in the CRC status length. + #0 + + + 1 + An error has occured in the CRC status length (and the end bit has not been detected) + #1 + + + + + RDLENE + Read Data Length Error + 4 + 4 + read-only + + + 0 + An error has occurred not in the read data length. + #0 + + + 1 + An error has occured in the read data length (and the end bit has not been detected among the valid bits). + #1 + + + + + RSPLENE1 + Response Length Error 1NOTE: In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in RSPLENE0. + 3 + 3 + read-only + + + 0 + An error has not occurred in the response length to a command issued within a command sequence. + #0 + + + 1 + An error has occured in the response length to a command issued within a command sequence. + #1 + + + + + RSPLENE0 + Response Length Error 0NOTE: other than a response to a command issued within a command sequence + 2 + 2 + read-only + + + 0 + An error has not occured in the response length + #0 + + + 1 + An error has occured in the response length + #1 + + + + + CMDE1 + Command Error 1NOTE: In cases where CMD12 is issued by setting a command index in SD_CMD, this is Indicated in CMDE0. + 1 + 1 + read-only + + + 0 + An error has not occurs in the command index of the response to a command issued within a command sequence. + #0 + + + 1 + An error has occured in the command index of the response to a command issued within a command sequence. + #1 + + + + + CMDE0 + Command Error 0NOTE: other than a response to a command issued within a command sequence + 0 + 0 + read-only + + + 0 + An error has not occured in the command index of a response. + #0 + + + 1 + An error has occured in the command index of a response. + #1 + + + + + + + SD_ERR_STS2 + SD Error Status Register 2 + 0x05C + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + CRCBSYTO + CRC Status Token Busy Timeout + 6 + 6 + read-only + + + 0 + Not timeout + #0 + + + 1 + The busy state continues for longer than N-cycle after the CRC status + #1 + + + + + CRCTO + CRC Status Token Timeout + 5 + 5 + read-only + + + 0 + Not timeout + #0 + + + 1 + The CRC status is not received though a longer time than N-cycle has elapsed after data writing. + #1 + + + + + RDTO + Read Data Timeout + 4 + 4 + read-only + + + 0 + Not timeout + #0 + + + 1 + The read data is not received though a longer time than N-cycle has elapsed after read command. / The read data for the next block are not received though a longer time than N-cycle has elapsed after the reception of read data. / The read data for the next block are not received though a longer time than N-cycle has elapsed after release of the read wait state. + #1 + + + + + BSYTO1 + Busy Timeout 1 + 3 + 3 + read-only + + + 0 + Not timeout. + #0 + + + 1 + The busy state for longer than N-cycle continues after CMD12 has been issued within a command sequence. In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in BSYTO0. + #1 + + + + + BSYTO0 + Busy Timeout 0 + 2 + 2 + read-only + + + 0 + Not timeout. + #0 + + + 1 + The busy state for longer than N-cycle continues after R1b response. + #1 + + + + + RSPTO1 + Response Timeout 1 + 1 + 1 + read-only + + + 0 + Not timeout. + #0 + + + 1 + The response to a command issued within a command sequence*2 is not received though a longer time than 640 cycles of SD/MMC clock has elapsed. In cases where CMD12 is issued by setting a command index in SD_CMD, this is indicated in RSPTO0. + #1 + + + + + RSPTO0 + Response Timeout 0 + 0 + 0 + read-only + + + 0 + Not timeout. + #0 + + + 1 + The response (other than a response to a command issued within a command sequence) is not received though a longer time than 640 cycles of SD/MMC clock has elapsed. + #1 + + + + + + + SD_BUF0 + SD Buffer Register + 0x060 + 32 + read-write + 0x00000000 + 0x00000000 + + + SD_BUF + SD Buffer RegisterWhen writing to the SD card, the write data is written to this register. When reading from the SD card, the read data is read from this register. This register is internally connected to two 512-byte buffers.If both buffers are not empty when executing multiple block read, SD/MMC clock is stopped to suspend receiving data. When one of buffers is empty, SD/MMC clock is supplied to resume receiving data. + 0 + 31 + read-write + + + + + SDIO_MODE + SDIO Mode Control Register + 0x068 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + C52PUB + SDIO None AbortNOTE: See manual + 9 + 9 + read-write + + + IOABT + SDIO AbortNOTE: See manual + 8 + 8 + read-write + + + RWREQ + Read Wait Request + 2 + 2 + read-write + + + 0 + Allow SD/MMC to exit read wait state + #0 + + + 1 + Request for SD/MMC to enter read wait state. + #1 + + + + + INTEN + SDIO Mode + 0 + 0 + read-write + + + 1 + Enables the SD host interface to receive SDIO interrupt from the SDIO card + #1 + + + 0 + Disables the SD host interface to receive SDIO interrupt from the SDIO card + #0 + + + + + + + SDIO_INFO1 + SDIO Interrupt Flag Register 1 + 0x06C + 32 + read-write + 0x00000000 + 0xFFFFFFF9 + + + EXWT + EXWT Status FlagNOTE: See manual + 15 + 15 + read-write + zeroToClear + modify + + + EXPUB52 + EXPUB52 Status FlagNOTE: See manual + 14 + 14 + read-write + zeroToClear + modify + + + IOIRQ + SDIO Interrupt Status + 0 + 0 + read-write + zeroToClear + modify + + + 0 + SDIO interrupt not accepted + #0 + + + 1 + SDIO interrupt accepted + #1 + + + + + + + SDIO_INFO1_MASK + SDIO_INFO1 Interrupt Mask Register + 0x070 + 32 + read-write + 0x0000C007 + 0xFFFFFFFF + + + EXWTM + EXWT Interrupt Request Mask Control + 15 + 15 + read-write + + + 0 + EXWT interrupt request not masked + #0 + + + 1 + EXWT interrupt request masked + #1 + + + + + EXPUB52M + EXPUB52 Interrupt Request Mask Control + 14 + 14 + read-write + + + 0 + EXPUB52 interrupt request not masked + #0 + + + 1 + EXPUB52 interrupt request masked + #1 + + + + + IOIRQM + IOIRQ Interrupt Mask Control + 0 + 0 + read-write + + + 0 + IOIRQ interrupt not masked + #0 + + + 1 + IOIRQ interrupt masked + #1 + + + + + + + SD_DMAEN + DMA Mode Enable Register + 0x1B0 + 32 + read-write + 0x00001010 + 0xFFFFFFFF + + + DMAEN + SD_BUF Read/Write DMA Transfer + 1 + 1 + read-write + + + 0 + The SD_BUF read/write DMA transfer is disabled. + #0 + + + 1 + The SD_BUF read/write DMA transfer is enabled. + #1 + + + + + + + SOFT_RST + Software Reset Register + 0x1C0 + 32 + read-write + 0x00000007 + 0xFFFFFFFF + + + SDRST + Software Reset of SD I/F Unit + 0 + 0 + read-write + + + 0 + Reset + #0 + + + 1 + Reset released + #1 + + + + + + + SDIF_MODE + SD Interface Mode Setting Register + 0x1CC + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + NOCHKCR + CRC Check Mask (for MMC test commands) + 8 + 8 + read-write + + + 0 + CRC check is valid + #0 + + + 1 + CRC check is invalid(CRC16 value is ignored when read and CRC Status value is ignored when write) + #1 + + + + + + + EXT_SWAP + Swap Control Register + 0x1E0 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BRSWP + SD_BUF0 Swap Read + 7 + 7 + read-write + + + 0 + The current data are read without swapping. + #0 + + + 1 + Swapping of the positions of the higher- and lower-order bytes of data for reading proceeds. + #1 + + + + + BWSWP + SD_BUF0 Swap Write + 6 + 6 + read-write + + + 0 + The current data are written without swapping. + #0 + + + 1 + Swapping of the positions of the higher- and lower-order bytes of data for writing proceeds. + #1 + + + + + + + + + R_SDHI1 + 0x40062400 + + + R_SLCDC + Segment LCD Controller/Driver + 0x40082000 + + 0x00 + 4 + registers + + + 0x100 + 38 + registers + + + + LCDM0 + LCD Mode Register 0 + 0x000 + 8 + read-write + 0x00 + 0xFF + + + MDSET + LCD drive voltage generator selection + 6 + 7 + read-write + + + 00 + External resistance division method + #00 + + + 01 + Internal voltage boosting method + #01 + + + 10 + Capacitor split method + #10 + + + 11 + Setting prohibited + #11 + + + + + LWAVE + LCD display waveform selection + 5 + 5 + read-write + + + 0 + Waveform A + #0 + + + 1 + Waveform B + #1 + + + + + LDTY + Time Slice of LCD Display Select + 2 + 4 + read-write + + + 000 + Static + #000 + + + 001 + 2-time slice + #001 + + + 010 + 3-time slice + #010 + + + 011 + 4-time slice + #011 + + + 101 + 8-time slice + #101 + + + others + Setting prohibited + true + + + + + LBAS + LCD Display Bias Method Select + 0 + 1 + read-write + + + 00 + 1/2 bias method + #00 + + + 01 + 1/3 bias method + #01 + + + 10 + 1/4 bias method + #10 + + + 11 + Setting prohibited + #11 + + + + + + + LCDM1 + LCD Mode Register 1 + 0x001 + 8 + read-write + 0x00 + 0xFF + + + LCDON + LCD Display Enable/Disable + 7 + 7 + read-write + + + 0 + Output ground level to segment/common pin(SCOC=0)/Display off (all segment outputs are deselected)(SCOC=1) + #0 + + + 1 + Output ground level to segment/common pin(SCOC=0)/Display on(SCOC=1) + #1 + + + + + SCOC + LCD Display Enable/Disable + 6 + 6 + read-write + + + 0 + Output ground level to segment/common pin(LCDON=0)/Output ground level to segment/common pin(LCDON=1) + #0 + + + 1 + Display off (all segment outputs are deselected)(LCDON=0)/Display on(LCDON=1) + #1 + + + + + VLCON + Voltage boost circuit or capacitor split circuit operation enable/disable + 5 + 5 + read-write + + + 0 + Stops voltage boost circuit or capacitor split circuit operation + #0 + + + 1 + Enables voltage boost circuit or capacitor split circuit operation + #1 + + + + + BLON + Display data area control + 4 + 4 + read-write + + + 0 + Displaying an A-pattern area data (lower four bits of LCD display data register)(LCDSEL=0)/Displaying a B-pattern area data (higher four bits of LCD display data register)(LCDSEL=1) + #0 + + + 1 + Alternately displaying A-pattern and B-pattern area data (blinking display corresponding to the constant-period interrupt (INTRTC) timing of the real-time clock (RTC)) + #1 + + + + + LCDSEL + Display data area control + 3 + 3 + read-write + + + 0 + Displaying an A-pattern area data (lower four bits of LCD display data register)(BLON=0)/Alternately displaying A-pattern and B-pattern area data (blinking display corresponding to the constant-period interrupt (INTRTC) timing of the real-time clock (RTC))(BLON=1) + #0 + + + 1 + Displaying a B-pattern area data (higher four bits of LCD display data register)(BLON=0)/Alternately displaying A-pattern and B-pattern area data (blinking display corresponding to the constant-period interrupt (INTRTC) timing of the real-time clock (RTC))(BLON=1) + #1 + + + + + Reserved + These bits are read as 00. The write value should be 00. + 1 + 2 + read-write + + + LCDVLM + Voltage Boosting Pin Initial Value Switching Control + 0 + 0 + read-write + + + 0 + Set when VDD >= 2.7 V + #0 + + + 1 + Set when VDD <= 4.2 V + #1 + + + + + + + LCDC0 + LCD Clock Control Register 0 + 0x002 + 8 + read-write + 0x00 + 0xFF + + + LCDC + LCD clock (LCDCL) + 0 + 5 + read-write + + + 000001 + (Sub clock)/22 or (LOCO clock)/22 + #000001 + + + 000010 + (Sub clock)/23 or (LOCO clock)/23 + #000010 + + + 000011 + (Sub clock)/24 or (LOCO clock)/24 + #000011 + + + 000100 + (Sub clock)/25 or (LOCO clock)/25 + #000100 + + + 000101 + (Sub clock)/26 or (LOCO clock)/26 + #000101 + + + 000110 + (Sub clock)/27 or (LOCO clock)/27 + #000110 + + + 000111 + (Sub clock)/28 or (LOCO clock)/28 + #000111 + + + 001000 + (Sub clock)/29 or (LOCO clock)/29 + #001000 + + + 001001 + (Sub clock)/210 or (LOCO clock)/210 + #001001 + + + 010001 + (Main clock)/28 or (HOCO clock)/28 + #010001 + + + 010010 + (Main clock)/29 or (HOCO clock)/29 + #010010 + + + 010011 + (Main clock)/210 or (HOCO clock)/210 + #010011 + + + 010100 + (Main clock)/211 or (HOCO clock)/211 + #010100 + + + 010101 + (Main clock)/212 or (HOCO clock)/212 + #010101 + + + 010110 + (Main clock)/213 or (HOCO clock)/213 + #010110 + + + 010111 + (Main clock)/214 or (HOCO clock)/214 + #010111 + + + 011000 + (Main clock)/215 or (HOCO clock)/215 + #011000 + + + 011001 + (Main clock)/216 or (HOCO clock)/216 + #011001 + + + 011010 + (Main clock)/217 or (HOCO clock)/217 + #011010 + + + 011011 + (Main clock)/218 or (HOCO clock)/218 + #011011 + + + 101011 + (Main clock)/219 or (HOCO clock)/219 + #101011 + + + others + Other than above Setting prohibited + true + + + + + + + VLCD + LCD Boost Level Control Register + 0x003 + 8 + read-write + 0x04 + 0xFF + + + VLCD + Reference Voltage(Contrast Adjustment) Select + 0 + 4 + read-write + + + 00100 + Reference voltageselection(contrast adjustment): 1.00 V (default) VL4 voltage: 3.00 V(1/3 bias method)/4.00 V(1/4 bias method) + #00100 + + + 00101 + Reference voltageselection(contrast adjustment): 1.05 V VL4 voltage: 3.15 V(1/3 bias method)/4.20 V(1/4 bias method) + #00101 + + + 00110 + Reference voltageselection(contrast adjustment): 1.10 V VL4 voltage: 3.30 V(1/3 bias method)/4.40 V(1/4 bias method) + #00110 + + + 00111 + Reference voltageselection(contrast adjustment): 1.15 V VL4 voltage: 3.45 V(1/3 bias method)/4.60 V(1/4 bias method) + #00111 + + + 01000 + Reference voltageselection(contrast adjustment): 1.20 V VL4 voltage: 3.60 V(1/3 bias method)/4.80 V(1/4 bias method) + #01000 + + + 01001 + Reference voltageselection(contrast adjustment): 1.25 V VL4 voltage: 3.75 V(1/3 bias method)/5.00 V(1/4 bias method) + #01001 + + + 01010 + Reference voltageselection(contrast adjustment): 1.30 V VL4 voltage: 3.90 V(1/3 bias method)/5.20 V(1/4 bias method) + #01010 + + + 01011 + Reference voltageselection(contrast adjustment): 1.35 V VL4 voltage: 4.05 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #01011 + + + 01100 + Reference voltageselection(contrast adjustment): 1.40 V VL4 voltage: 4.20 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #01100 + + + 01101 + Reference voltageselection(contrast adjustment): 1.45 V VL4 voltage: 4.35 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #01101 + + + 01110 + Reference voltageselection(contrast adjustment): 1.50 V VL4 voltage: 4.50 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #01110 + + + 01111 + Reference voltageselection(contrast adjustment): 1.55 V VL4 voltage: 4.65 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #01111 + + + 10000 + Reference voltageselection(contrast adjustment): 1.60 V VL4 voltage: 4.80 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #10000 + + + 10001 + Reference voltageselection(contrast adjustment): 1.65 V VL4 voltage: 4.95 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #10001 + + + 10010 + Reference voltageselection(contrast adjustment): 1.70 V VL4 voltage: 5.10 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #10010 + + + 10011 + Reference voltageselection(contrast adjustment): 1.75 V VL4 voltage: 5.25 V(1/3 bias method)/Setting prohibited(1/4 bias method) + #10011 + + + others + Setting prohibited + true + + + + + + + 64 + 0x1 + SEG[%s] + LCD Display Data Array + 0x100 + 8 + read-write + 0x00 + 0xFF + + + A + A-Pattern Area + 0 + 3 + read-write + + + B + B-Pattern Area + 4 + 7 + read-write + + + + + + + R_SPI0 + Serial Peripheral Interface + 0x40072000 + + 0x00000000 + 0x008 + registers + + + 0x0000000A + 0x008 + registers + + + + SPCR + SPI Control Register + 0x00 + 8 + read-write + 0x00 + 0xFF + + + SPRIE + SPI Receive Buffer Full Interrupt Enable + 7 + 7 + read-write + + + 0 + Disables the generation of SPI receive buffer full interrupt requests + #0 + + + 1 + Enables the generation of SPI receive buffer full interrupt requests + #1 + + + + + SPE + SPI Function Enable + 6 + 6 + read-write + + + 0 + Disables the SPI function + #0 + + + 1 + Enables the SPI function + #1 + + + + + SPTIE + Transmit Buffer Empty Interrupt Enable + 5 + 5 + read-write + + + 0 + Disables the generation of transmit buffer empty interrupt requests + #0 + + + 1 + Enables the generation of transmit buffer empty interrupt requests + #1 + + + + + SPEIE + SPI Error Interrupt Enable + 4 + 4 + read-write + + + 0 + Disables the generation of SPI error interrupt requests + #0 + + + 1 + Enables the generation of SPI error interrupt requests + #1 + + + + + MSTR + SPI Master/Slave Mode Select + 3 + 3 + read-write + + + 0 + Slave mode + #0 + + + 1 + Master mode + #1 + + + + + MODFEN + Mode Fault Error Detection Enable + 2 + 2 + read-write + + + 0 + Disables the detection of mode fault error + #0 + + + 1 + Enables the detection of mode fault error + #1 + + + + + TXMD + Communications Operating Mode Select + 1 + 1 + read-write + + + 0 + Full-duplex synchronous serial communications + #0 + + + 1 + Serial communications consisting of only transmit operations + #1 + + + + + SPMS + SPI Mode Select + 0 + 0 + read-write + + + 0 + SPI operation (4-wire method) + #0 + + + 1 + Clock synchronous operation (3-wire method) + #1 + + + + + + + SSLP + SPI Slave Select Polarity Register + 0x01 + 8 + read-write + 0x00 + 0xFF + + + SSL3P + SSL3 Signal Polarity Setting + 3 + 3 + read-write + + + 0 + SSL3 signal is active low + #0 + + + 1 + SSL3 signal is active high + #1 + + + + + SSL2P + SSL2 Signal Polarity Setting + 2 + 2 + read-write + + + 0 + SSL2 signal is active low + #0 + + + 1 + SSL2 signal is active high + #1 + + + + + SSL1P + SSL1 Signal Polarity Setting + 1 + 1 + read-write + + + 0 + SSL1 signal is active low + #0 + + + 1 + SSL1 signal is active high + #1 + + + + + SSL0P + SSL0 Signal Polarity Setting + 0 + 0 + read-write + + + 0 + SSL0 signal is active low + #0 + + + 1 + SSL0 signal is active high + #1 + + + + + SSL4P + SSL4 Signal Polarity Setting + 4 + 4 + read-write + + + 0 + SSL4 signal is active low + #0 + + + 1 + SSL4 signal is active high + #1 + + + + + SSL5P + SSL5 Signal Polarity Setting + 5 + 5 + read-write + + + 0 + SSL5 signal is active low + #0 + + + 1 + SSL5 signal is active high + #1 + + + + + SSL6P + SSL6 Signal Polarity Setting + 6 + 6 + read-write + + + 0 + SSL6 signal is active low + #0 + + + 1 + SSL6 signal is active high + #1 + + + + + SSL7P + SSL7 Signal Polarity Setting + 7 + 7 + read-write + + + 0 + SSL7 signal is active low + #0 + + + 1 + SSL7 signal is active high + #1 + + + + + + + SPPCR + SPI Pin Control Register + 0x02 + 8 + read-write + 0x00 + 0xFF + + + MOIFE + MOSI Idle Value Fixing Enable + 5 + 5 + read-write + + + 0 + MOSI output value equals final data from previous transfer + #0 + + + 1 + MOSI output value equals the value set in the MOIFV bit + #1 + + + + + MOIFV + MOSI Idle Fixed Value + 4 + 4 + read-write + + + 0 + The level output on the MOSIn pin during MOSI idling corresponds to low. + #0 + + + 1 + The level output on the MOSIn pin during MOSI idling corresponds to high. + #1 + + + + + SPLP2 + SPI Loopback 2 + 1 + 1 + read-write + + + 0 + Normal mode + #0 + + + 1 + Loopback mode (data is not inverted for transmission) + #1 + + + + + SPLP + SPI Loopback + 0 + 0 + read-write + + + 0 + Normal mode + #0 + + + 1 + Loopback mode (data is inverted for transmission) + #1 + + + + + + + SPSR + SPI Status Register + 0x03 + 8 + read-write + 0x20 + 0xFF + + + SPRF + SPI Receive Buffer Full Flag + 7 + 7 + read-write + zeroToClear + modify + + + 0 + No valid data in SPDR + #0 + + + 1 + Valid data found in SPDR + #1 + + + + + SPTEF + SPI Transmit Buffer Empty Flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + Data found in the transmit buffer + #0 + + + 1 + No data in the transmit buffer + #1 + + + + + UDRF + Underrun Error Flag(When MODF is 0, This bit is invalid.) + 4 + 4 + read-write + zeroToClear + modify + + + 0 + A mode fault error occurs (MODF=1) + #0 + + + 1 + An underrun error occurs (MODF=1) + #1 + + + + + PERF + Parity Error Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + No parity error occurs + #0 + + + 1 + A parity error occurs + #1 + + + + + MODF + Mode Fault Error Flag + 2 + 2 + read-write + zeroToClear + modify + + + 0 + Neither mode fault error nor underrun error occurs + #0 + + + 1 + A mode fault error or an underrun error occurs. + #1 + + + + + IDLNF + SPI Idle Flag + 1 + 1 + read-only + + + 0 + SPI is in the idle state + #0 + + + 1 + SPI is in the transfer state + #1 + + + + + OVRF + Overrun Error Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + No overrun error occurs + #0 + + + 1 + An overrun error occurs + #1 + + + + + CENDF + Communication End Flag + 6 + 6 + read-write + + + 0 + The RSPI is not communicating or communicating. + #0 + + + 1 + The RSPI communication completed. + #1 + + + + + + + SPDR + SPI Data Register + 0x04 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SPDR_HA + SPI Data Register ( halfword access ) + SPDR + 0x04 + 16 + read-write + 0x0000 + 0xFFFF + + + SPDR_BY + SPI Data Register ( byte access ) + SPDR + 0x04 + 8 + read-write + 0x00 + 0xFF + + + SPSCR + SPI Sequence Control Register + 0x08 + 8 + read-write + 0x00 + 0xFF + + + Reserved + These bits are read as 00000. The write value should be 00000. + 3 + 7 + read-write + + + SPSLN + RSPI Sequence Length Specification +The order in which the SPCMD0 to SPCMD07 registers are to be referenced is changed in accordance with the sequence length that is set in these bits. The relationship among the setting of these bits, sequence length, and SPCMD0 to SPCMD7 registers referenced by the RSPI is shown above. However, the RSPI in slave mode always references SPCMD0. + 0 + 2 + read-write + + + 000 + Length 1 SPDMDx x = 0->0->... + #000 + + + 001 + Length 2 SPDMDx x = 0->1->0->... + #001 + + + 010 + Length 3 SPDMDx x = 0->1->2->0->... + #010 + + + 011 + Length 4 SPDMDx x = 0->1->2->3->0->... + #011 + + + 100 + Length 5 SPDMDx x = 0->1->2->3->4->0->... + #100 + + + 101 + Length 6 SPDMDx x = 0->1->2->3->4->5->0->... + #101 + + + 110 + Length 7 SPDMDx x = 0->1->2->3->4->5->6->0->... + #110 + + + 111 + Length 8 SPDMDx x = 0->1->2->3->4->5->6->7->0->... + #111 + + + + + + + SPBR + SPI Bit Rate Register + 0x0A + 8 + read-write + 0xFF + 0xFF + + + SPR + SPBR sets the bit rate in master mode. + 0 + 7 + read-write + + + + + SPDCR + SPI Data Control Register + 0x0B + 8 + read-write + 0x00 + 0xFF + + + SPBYT + SPI Byte Access Specification + 6 + 6 + read-write + + + 0 + SPDR is accessed in halfword or word (SPLW is valid) + #0 + + + 1 + SPDR is accessed in byte (SPLW is invalid). + #1 + + + + + SPLW + SPI Word Access/Halfword Access Specification + 5 + 5 + read-write + + + 0 + Set SPDR_HA to valid for halfword access + #0 + + + 1 + Set SPDR to valid for word access. + #1 + + + + + SPRDTD + SPI Receive/Transmit Data Selection + 4 + 4 + read-write + + + 0 + SPDR values are read from the receive buffer + #0 + + + 1 + SPDR values are read from the transmit buffer (but only if the transmit buffer is empty) + #1 + + + + + SPFC + Number of Frames Specification + 0 + 1 + read-write + + + 00 + 1 frame + #00 + + + 01 + 2 frames + #01 + + + 10 + 3 frames + #10 + + + 11 + 4 frames. + #11 + + + + + SLSEL + SSL Pin Output Select + 2 + 3 + read-write + + + 00 + SSL2 to SSL7->output, SSL1->output + #00 + + + 01 + SSL2 to SSL7->I/O, SSL1->I/O + #01 + + + 10 + SSL2 to SSL7->I/O, SSL1->output + #10 + + + 11 + Setting prohibited + #11 + + + + + + + SPCKD + SPI Clock Delay Register + 0x0C + 8 + read-write + 0x00 + 0xFF + + + SCKDL + RSPCK Delay Setting + 0 + 2 + read-write + + + 000 + 1 RSPCK + #000 + + + 001 + 2 RSPCK + #001 + + + 010 + 3 RSPCK + #010 + + + 011 + 4 RSPCK + #011 + + + 100 + 5 RSPCK + #100 + + + 101 + 6 RSPCK + #101 + + + 110 + 7 RSPCK + #110 + + + 111 + 8 RSPCK + #111 + + + + + + + SSLND + SPI Slave Select Negation Delay Register + 0x0D + 8 + read-write + 0x00 + 0xFF + + + SLNDL + SSL Negation Delay Setting + 0 + 2 + read-write + + + 000 + 1 RSPCK + #000 + + + 001 + 2 RSPCK + #001 + + + 010 + 3 RSPCK + #010 + + + 011 + 4 RSPCK + #011 + + + 100 + 5 RSPCK + #100 + + + 101 + 6 RSPCK + #101 + + + 110 + 7 RSPCK + #110 + + + 111 + 8 RSPCK + #111 + + + + + + + SPND + SPI Next-Access Delay Register + 0x0E + 8 + read-write + 0x00 + 0xFF + + + SPNDL + SPI Next-Access Delay Setting + 0 + 2 + read-write + + + 000 + 1 RSPCK + 2 PCLK + #000 + + + 001 + 2 RSPCK + 2 PCLK + #001 + + + 010 + 3 RSPCK + 2 PCLK + #010 + + + 011 + 4 RSPCK + 2 PCLK + #011 + + + 100 + 5 RSPCK + 2 PCLK + #100 + + + 101 + 6 RSPCK + 2 PCLK + #101 + + + 110 + 7 RSPCK + 2 PCLK + #110 + + + 111 + 8 RSPCK + 2 PCLK + #111 + + + + + + + SPCR2 + SPI Control Register 2 + 0x0F + 8 + read-write + 0x00 + 0xFF + + + SCKASE + RSPCK Auto-Stop Function Enable + 4 + 4 + read-write + + + 0 + Disables the RSPCK auto-stop function + #0 + + + 1 + Enables the RSPCK auto-stop function + #1 + + + + + PTE + Parity Self-Testing + 3 + 3 + read-write + + + 0 + Disables the self-diagnosis function of the parity circuit + #0 + + + 1 + Enables the self-diagnosis function of the parity circuit + #1 + + + + + SPIIE + SPI Idle Interrupt Enable + 2 + 2 + read-write + + + 0 + Disables the generation of idle interrupt requests + #0 + + + 1 + Enables the generation of idle interrupt requests + #1 + + + + + SPOE + Parity Mode + 1 + 1 + read-write + + + 0 + Selects even parity for use in transmission and reception + #0 + + + 1 + Selects odd parity for use in transmission and reception + #1 + + + + + SPPE + Parity Enable + 0 + 0 + read-write + + + 0 + Does not add the parity bit to transmit data and does not check the parity bit of receive data + #0 + + + 1 + Adds the parity bit to transmit data and checks the parity bit of receive data (when SPCR.TXMD = 0) / Adds the parity bit to transmit data but does not check the parity bit of receive data (when SPCR.TXMD = 1) + #1 + + + + + SPTDDL + RSPI Transmit Data Delay + 5 + 7 + read-write + + + 010 + Same as above + #010 + + + 011 + Same as above + #011 + + + 100 + Same as above + #100 + + + 101 + Same as above + #101 + + + 110 + Same as above + #110 + + + 111 + Same as above + #111 + + + + + + + 8 + 0x02 + SPCMD[%s] + SPI Command Register %s + 0x10 + 16 + read-write + 0x070D + 0xFFFF + + + SCKDEN + RSPCK Delay Setting Enable + 15 + 15 + read-write + + + 0 + An RSPCK delay of 1 RSPCK + #0 + + + 1 + An RSPCK delay is equal to the setting of the SPI clock delay register (SPCKD) + #1 + + + + + SLNDEN + SSL Negation Delay Setting Enable + 14 + 14 + read-write + + + 0 + An SSL negation delay of 1 RSPCK + #0 + + + 1 + An SSL negation delay is equal to the setting of the SPI slave select negation delay register (SSLND) + #1 + + + + + SPNDEN + SPI Next-Access Delay Enable + 13 + 13 + read-write + + + 0 + A next-access delay of 1 RSPCK + 2 PCLK + #0 + + + 1 + A next-access delay is equal to the setting of the SPI next-access delay register (SPND) + #1 + + + + + LSBF + SPI LSB First + 12 + 12 + read-write + + + 0 + MSB first + #0 + + + 1 + LSB first + #1 + + + + + SPB + SPI Data Length Setting + 8 + 11 + read-write + + + 0100 + 8 bits + #0100 + + + 0101 + 8 bits + #0101 + + + 0110 + 8 bits + #0110 + + + 0111 + 8 bits + #0111 + + + 1000 + 9 bits + #1000 + + + 1001 + 10 bits + #1001 + + + 1010 + 11 bits + #1010 + + + 1011 + 12 bits + #1011 + + + 1100 + 13 bits + #1100 + + + 1101 + 14 bits + #1101 + + + 1110 + 15 bits + #1110 + + + 1111 + 16 bits + #1111 + + + others + Setting prohibited + true + + + + + SSLKP + SSL Signal Level Keeping + 7 + 7 + read-write + + + 0 + Negates all SSL signals upon completion of transfer + #0 + + + 1 + Keeps the SSL signal level from the end of transfer until the beginning of the next access + #1 + + + + + SSLA + SSL Signal Assertion Setting + 4 + 6 + read-write + + + 000 + SSL0 + #000 + + + 001 + SSL1 + #001 + + + 010 + SSL2 + #010 + + + 011 + SSL3 + #011 + + + others + Setting prohibited + true + + + + + BRDV + Bit Rate Division Setting + 2 + 3 + read-write + + + 00 + These bits select the base bit rate + #00 + + + 01 + These bits select the base bit rate divided by 2 + #01 + + + 10 + These bits select the base bit rate divided by 4 + #10 + + + 11 + These bits select the base bit rate divided by 8 + #11 + + + + + CPOL + RSPCK Polarity Setting + 1 + 1 + read-write + + + 0 + RSPCK is low when idle + #0 + + + 1 + RSPCK is high when idle + #1 + + + + + CPHA + RSPCK Phase Setting + 0 + 0 + read-write + + + 0 + Data sampling on odd edge, data variation on even edge + #0 + + + 1 + Data variation on odd edge, data sampling on even edge + #1 + + + + + + + SPDCR2 + SPI Data Control Register 2 + 0x20 + 8 + read-write + 0x00 + 0xFF + + + BYSW + Byte Swap Operating Mode Select + 0 + 0 + read-write + + + 0 + Byte Swap Operating Mode disabled + #0 + + + 1 + Byte Swap Operating Mode enabled + #1 + + + + + SINV + Serial data invert bit + 1 + 1 + read-write + + + 0 + Not invert serial data + #0 + + + 1 + Invert serial data. + #1 + + + + + + + SPSSR + SPI Sequence Status Register + 0x09 + 8 + read-only + 0x00 + 0xFF + + + SPCP + RSPI Command Pointer + 0 + 2 + read-only + + + 000 + SPCMD0 + #000 + + + 001 + SPCMD1 + #001 + + + 010 + SPCMD2 + #010 + + + 011 + SPCMD3 + #011 + + + 100 + SPCMD4 + #100 + + + 101 + SPCMD5 + #101 + + + 110 + SPCMD6 + #110 + + + 111 + SPCMD7 + #111 + + + + + Reserved + This bit is read as 0. + 3 + 3 + read-only + + + SPECM + RSPI Error Command + 4 + 6 + read-only + + + 000 + SPCMD0 + #000 + + + 001 + SPCMD1 + #001 + + + 010 + SPCMD2 + #010 + + + 011 + SPCMD3 + #011 + + + 100 + SPCMD4 + #100 + + + 101 + SPCMD5 + #101 + + + 110 + SPCMD6 + #110 + + + 111 + SPCMD7 + #111 + + + + + Reserved + This bit is read as 0. + 7 + 7 + read-only + + + + + SPCR3 + RSPI Control Register 3 + 0x21 + 8 + read-write + 0x00 + 0xFF + + + ETXMD + Extended Communication Mode Select + 0 + 0 + read-write + + + 0 + Full-duplex synchronous or transmit-only serial communications. + #0 + + + 1 + Receive-only serial communications in slave mode (SPCR.MSTR bit = 0). + #1 + + + + + BFDS + Between Burst Transfer Frames Delay Select + 1 + 1 + read-write + + + 0 + Delay (RSPCK delay, SSL negation delay and next-access delay) between frames is inserted in burst transfer + #0 + + + 1 + Delay between frames is not inserted in burst transfer. + #1 + + + + + Reserved + These bits are read as 00. The write value should be 00. + 2 + 3 + read-write + + + CENDIE + RSPI Communication End Interrupt Enable + 4 + 4 + read-write + + + 0 + Communication end interrupt request is disabled. + #0 + + + 1 + Communication end interrupt request is enabled. + #1 + + + + + Reserved + These bits are read as 000. The write value should be 000. + 5 + 7 + read-write + + + + + SPPR + RSPI Parameter Read Register + 0x3E + 16 + read-write + 0x0000 + 0xFFFF + + + Reserved + These bits are read as 0000. The write value should be 0000. + 0 + 3 + read-write + + + BUFWID + Buffer Width check + 4 + 4 + read-write + + + 0 + 16bit + #0 + + + 1 + 32bit + #1 + + + + + Reserved + These bits are read as 000. The write value should be 000. + 5 + 7 + read-write + + + BUFNUM + Buffer Number check + 8 + 10 + read-write + + + 001 + 1 Buffer + #001 + + + 100 + 4 Buffer + #100 + + + + + Reserved + This bit is read as 0. The write value should be 0. + 11 + 11 + read-write + + + CMDNUM + Command Number check + 12 + 15 + read-write + + + 0001 + 1 Command + #0001 + + + 1000 + 8 Command + #1000 + + + + + + + + + R_SPI1 + 0x40072100 + + + R_SRAM + SRAM + 0x40002000 + + 0x00000000 + 0x01 + registers + + + 0x00000004 + 0x01 + registers + + + 0x00000008 + 0x01 + registers + + + 0x000000C0 + 0x005 + registers + + + 0x000000D0 + 0x01 + registers + + + 0x000000D4 + 0x01 + registers + + + 0x000000D8 + 0x01 + registers + + + + PARIOAD + SRAM Parity Error Operation After Detection Register + 0x00 + 8 + read-write + 0x00 + 0xFF + + + OAD + Operation after Detection + 0 + 0 + read-write + + + 1 + Reset + #1 + + + 0 + Non maskable interrupt. + #0 + + + + + + + SRAMPRCR + SRAM Protection Register + 0x04 + 8 + read-write + 0x00 + 0xFF + + + KW + Write Key Code + 1 + 7 + write-only + + + 1111000 + Writing to the RAMPRCR bit is valid, when the KEY bits are written 1111000b. + #1111000 + + + others + Writing to the RAMPRCR bit is invalid. + true + + + + + SRAMPRCR + Register Write Control + 0 + 0 + read-write + + + 0 + Disable writes to protected registers + #0 + + + 1 + Enable writes to protected registers. + #1 + + + + + + + SRAMWTSC + RAM Wait State Control Register + 0x08 + 8 + read-write + 0x0E + 0xFF + + + SRAMHSWTEN + SRAMHS Wait Enable + 4 + 4 + read-write + + + 0 + Not add wait state in read access cycle to SRAMHS + #0 + + + 1 + Add wait state in read access cycle to SRAMHS + #1 + + + + + SRAM1WTEN + SRAM1 Wait Enable + 3 + 3 + read-write + + + 0 + Not add wait state in read access cycle to SRAM1 + #0 + + + 1 + Add wait state in read access cycle to SRAM1 + #1 + + + + + SRAM0WTEN + SRAM0 Wait Enable + 2 + 2 + read-write + + + 0 + Not add wait state in read access cycle to SRAM0 + #0 + + + 1 + Add wait state in read access cycle to SRAM0 + #1 + + + + + ECCRAMRDWTEN + ECCRAM Read wait enable + 1 + 1 + read-write + + + 0 + Not add wait state in read access cycle to SRAM0 (ECC area) + #0 + + + 1 + Add wait state in read access cycle to SRAM0 (ECC area) + #1 + + + + + ECCRAMWRWTEN + ECCRAM Write Wait Enable + 0 + 0 + read-write + + + 0 + Not add wait state in write access cycle to SRAM0 (ECC area) + #0 + + + 1 + Add wait state in write access cycle to SRAM0 (ECC area) + #1 + + + + + + + ECCMODE + ECC Operating Mode Control Register + 0xC0 + 8 + read-write + 0x00 + 0xFF + + + ECCMOD + ECC Operating Mode Select + 0 + 1 + read-write + + + 00 + Disable ECC function + #00 + + + 01 + Setting prohibited + #01 + + + 10 + Enable ECC function without error checking + #10 + + + 11 + Enable ECC function with error checking + #11 + + + + + + + ECC2STS + ECC 2-Bit Error Status Register + 0xC1 + 8 + read-write + 0x00 + 0xFF + + + ECC2ERR + ECC 2-Bit Error Status + 0 + 0 + read-write + zeroToClear + modify + + + 0 + No 2-bit ECC error occurred + #0 + + + 1 + 2-bit ECC error occurred. + #1 + + + + + + + ECC1STSEN + ECC 1-Bit Error Information Update Enable Register + 0xC2 + 8 + read-write + 0x00 + 0xFF + + + E1STSEN + ECC 1-Bit Error Information Update Enable + 0 + 0 + read-write + + + 0 + Disables updating of the 1-bit ECC error information. + #0 + + + 1 + Enables updating of the 1-bit ECC error information. + #1 + + + + + + + ECC1STS + ECC 1-Bit Error Status Register + 0xC3 + 8 + read-write + 0x00 + 0xFF + + + ECC1ERR + ECC 1-Bit Error Status + 0 + 0 + read-write + zeroToClear + modify + + + 0 + No 1-bit ECC error occurred + #0 + + + 1 + 1-bit ECC error occurred + #1 + + + + + + + ECCPRCR + ECC Protection Register + 0xC4 + 8 + read-write + 0x00 + 0xFF + + + KW + Write Key Code + 1 + 7 + write-only + + + 1111000 + Writing to the ECCRAMPRCR bit is valid, when the KEY bits are written 1111000b. + #1111000 + + + others + Writing to the ECCRAMPRCR bit is invalid. + true + + + + + ECCPRCR + Register Write Control + 0 + 0 + read-write + + + 0 + Disable writes to the protected registers + #0 + + + 1 + Enable writes to the protected registers + #1 + + + + + + + ECCPRCR2 + ECC Protection Register 2 + 0xD0 + 8 + read-write + 0x00 + 0xFF + + + KW2 + Write Key Code + 1 + 7 + write-only + + + 1111000 + These bits enable or disable writes to the ECCPRCR2 bit.. + #1111000 + + + others + Writing to the ECCRAMPRCR2 bit is invalid. + true + + + + + ECCPRCR2 + Register Write Control + 0 + 0 + read-write + + + 0 + Disable writes to the protected registers + #0 + + + 1 + Enable writes to the protected registers. + #1 + + + + + + + ECCETST + ECC Test Control Register + 0xD4 + 8 + read-write + 0x00 + 0xFF + + + TSTBYP + ECC Bypass Select + 0 + 0 + read-write + + + 0 + ECC bypass disabled. + #0 + + + 1 + ECC bypass enabled. + #1 + + + + + + + ECCOAD + SRAM ECC Error Operation After Detection Register + 0xD8 + 8 + read-write + 0x00 + 0xFF + + + OAD + Operation after Detection + 0 + 0 + read-write + + + 0 + Non-maskable interrupt + #0 + + + 1 + Reset + #1 + + + + + + + SRAMPRCR2 + SRAM Protection Register 2 + 0x0C + 8 + read-write + 0x00 + 0xff + + + SRAMPRCR2 + Register Write Control + 0 + 0 + read-write + + + 0 + Disable writes to protected registers + #0 + + + 1 + Enable writes to protected registers + #1 + + + + + KW + Write Key Code + 1 + 7 + write-only + + + + + + + R_SRC + Sampling Rate Converter + 0x40048000 + + 0x00000000 + 0x56C0 + registers + + + 0x00005FF0 + 0x010 + registers + + + + 5552 + 0x4 + SRCFCTR[%s] + Filter Coefficient Table [%s] + 0x00 + 32 + read-write + 0x00000000 + 0xFFC00000 + + + SRCFCOE + Stores a filter coefficient value. + 0 + 21 + read-write + + + + + SRCID + Input Data Register + 0x5FF0 + 32 + write-only + 0x00000000 + 0xFFFFFFFF + + + SRCID + SRCID is a 32-bit writ-only register that is used to input the data before sampling rate conversion. All the bits are read as 0. + 0 + 31 + write-only + + + + + SRCOD + Output Data Register + 0x5FF4 + 32 + read-only + 0x00000000 + 0xFFFFFFFF + + + SRCOD + SRCOD is a 32-bit read-only register used to output the data after sampling rate conversion. The data in the 16-stage output data FIFO is read through SRCOD. When the number of data in the output data FIFO is zero after the start of conversion, the value previously read is read again. + 0 + 31 + read-only + + + + + SRCIDCTRL + Input Data Control Register + 0x5FF8 + 16 + read-write + 0x0000 + 0xFFFF + + + IED + Input Data Endian + 9 + 9 + read-write + + + 0 + Endian formats 1 are the same between the CPU and input data. + #0 + + + 1 + Endian formats 1 are different between the CPU and input data. + #1 + + + + + IEN + Input FIFO Empty Interrupt Enable + 8 + 8 + read-write + + + 0 + Input FIFO empty interrupt is disabled. + #0 + + + 1 + Input FIFO empty interrupt is enabled. + #1 + + + + + IFTRG + Input FIFO Data Triggering Number + 0 + 1 + read-write + + + 00 + 0 + #00 + + + 01 + 2 + #01 + + + 10 + 4 + #10 + + + 11 + 6 + #11 + + + + + + + SRCCTRL + Control Register + 0x5FFC + 16 + read-write + 0x0000 + 0xFFFF + + + FICRAE + Filter Coefficient Table Access Enable + 15 + 15 + read-write + + + 0 + Reading/writing to filter coefficient table RAM is disabled. + #0 + + + 1 + Reading/writing to filter coefficient table RAM is enabled. + #1 + + + + + CEEN + Conversion End Interrupt Enable + 13 + 13 + read-write + + + 0 + Disables conversion end interrupt requests. + #0 + + + 1 + Enables conversion end interrupt requests. + #1 + + + + + SRCEN + Module Enable + 12 + 12 + read-write + + + 0 + Disables this module operation. + #0 + + + 1 + Enables this module operation. + #1 + + + + + UDEN + Output Data FIFO Underflow Interrupt Enable + 11 + 11 + read-write + + + 0 + Disables output data FIFO underflow interrupt requests. + #0 + + + 1 + Enables output data FIFO underflow interrupt requests. + #1 + + + + + OVEN + Output Data FIFO Overwrite Interrupt Enable + 10 + 10 + read-write + + + 0 + Output data FIFO overwrite interrupt is disabled. + #0 + + + 1 + Output data FIFO overwrite interrupt is enabled. + #1 + + + + + FL + Internal Work Memory Flush + 9 + 9 + read-write + + + 0 + no effect + #0 + + + 1 + starts converting the sampling rate of all the data in the input FIFO, input buffer memory, and intermediate memory(i.e., flush processing). + #1 + + + + + CL + Internal Work Memory Clear + 8 + 8 + read-write + + + 0 + no effect + #0 + + + 1 + Clears the input FIFO, output FIFO, input buffer memory, intermediate memory and accumulator. + #1 + + + + + IFS + Input Sampling Rate + 4 + 7 + read-write + + + 0000 + 8.0 kHz + #0000 + + + 0001 + 11.025 kHz + #0001 + + + 0010 + 12.0 kHz + #0010 + + + 0011 + Setting prohibited + #0011 + + + 0100 + 16.0 kHz + #0100 + + + 0101 + 22.05 kHz + #0101 + + + 0110 + 24.0 kHz + #0110 + + + 0111 + Setting prohibited + #0111 + + + 1000 + 32.0 kHz + #1000 + + + 1001 + 44.1 kHz + #1001 + + + 1010 + 48.0 kHz + #1010 + + + others + Settings prohibited. + true + + + + + OFS + Output Sampling Rate + 0 + 2 + read-write + + + 000 + 44.1 kHz + #000 + + + 001 + 48.0 kHz + #001 + + + 010 + 32.0 kHz + #010 + + + 011 + Setting prohibited + #011 + + + 100 + 8.0 kHz ( Valid only when IFS[3:0] =1001b ) + #100 + + + 101 + 16.0 kHz ( Valid only when IFS[3:0] =1001b ) + #101 + + + others + Settings other than above are prohibited. + true + + + + + + + SRCODCTRL + Output Data Control Register + 0x5FFA + 16 + read-write + 0x0000 + 0xFFFF + + + OCH + Output Data Channel Exchange + 10 + 10 + read-write + + + 0 + Does not exchange the channels (the same order as data input) + #0 + + + 1 + Exchanges the channels (the opposite order from data input) + #1 + + + + + OED + Output Data Endian + 9 + 9 + read-write + + + 0 + Endian formats are the same between the chip and input data. + #0 + + + 1 + Endian formats are different between the chip and input data. + #1 + + + + + OEN + Output Data FIFO Full Interrupt Enable + 8 + 8 + read-write + + + 0 + Output data FIFO full interrupt is disabled. + #0 + + + 1 + Output data FIFO full interrupt is enabled. + #1 + + + + + OFTRG + Output FIFO Data Trigger Number + 0 + 1 + read-write + + + 00 + 1 + #00 + + + 01 + 4 + #01 + + + 10 + 8 + #10 + + + 11 + 12 + #11 + + + + + + + SRCSTAT + Status Register + 0x5FFE + 16 + read-write + 0x0002 + 0xFFFF + + + OFDN + Output FIFO Data CountIndicates the number of data units in the output FIFO. + 11 + 15 + read-write + + + IFDN + Input FIFO Data CountIndicates the number of data units in the input FIFO. + 7 + 10 + read-write + + + CEF + Conversion End Flag + 5 + 5 + read-write + zeroToClear + modify + + + 0 + All of the output data has not been read out. + #0 + + + 1 + All of the output data has been read out. + #1 + + + + + FLF + Flush Processing Status Flag + 4 + 4 + read-only + + + 0 + Flash processing is completed. + #0 + + + 1 + Flash processing is in progress. + #1 + + + + + UDF + Output FIFO Underflow Interrupt Request Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + Output data FIFO has not been read out. + #0 + + + 1 + Output data FIFO has been read out. + #1 + + + + + OVF + Output Data FIFO Overwrite Interrupt Request Flag + 2 + 2 + read-write + zeroToClear + modify + + + 0 + Next data conversion processing is not completed. + #0 + + + 1 + Next data conversion processing is completed. + #1 + + + + + IINT + Input Data FIFO Empty Interrupt Request Flag + 1 + 1 + read-write + zeroToClear + modify + + + 0 + Number of data units in the input FIFO has not become equal to or smaller than the specified triggering number. + #0 + + + 1 + Number of data units in the input FIFO has become equal to or smaller than the specified triggering number. + #1 + + + + + OINT + Output Data FIFO Full Interrupt Request Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Number of data units in the output FIFO has not become equal to or greater than the specified triggering number. + #0 + + + 1 + Number of data units in the output FIFO has become equal to or greater than the specified triggering number. + #1 + + + + + + + + + R_SSI0 + Serial Sound Interface Enhanced (SSIE) + 0x4004E000 + + 0x00 + 8 + registers + + + 0x10 + 24 + registers + + + + SSICR + Control Register + 0x00 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + CKS + Oversampling Clock Select + 30 + 30 + read-write + + + 0 + AUDIO_CLK input + #0 + + + 1 + Setting prohibited + #1 + + + + + TUIEN + Transmit Underflow Interrupt Enable + 29 + 29 + read-write + + + 0 + Disables an underflow interrupt. + #0 + + + 1 + Enables an underflow interrupt. + #1 + + + + + TOIEN + Transmit Overflow Interrupt Enable + 28 + 28 + read-write + + + 0 + Disables an overflow interrupt. + #0 + + + 1 + Enables an overflow interrupt. + #1 + + + + + RUIEN + Receive Underflow Interrupt Enable + 27 + 27 + read-write + + + 0 + Disables an underflow interrupt. + #0 + + + 1 + Enables an underflow interrupt. + #1 + + + + + ROIEN + Receive Overflow Interrupt Enable + 26 + 26 + read-write + + + 0 + Disables an overflow interrupt. + #0 + + + 1 + Enables an overflow interrupt. + #1 + + + + + IIEN + Idle Mode Interrupt Enable + 25 + 25 + read-write + + + 0 + Disables an idle mode interrupt. + #0 + + + 1 + Enables an idle mode interrupt. + #1 + + + + + FRM + Channels + 22 + 23 + read-write + + + 00 + One channel + #00 + + + others + Settings other than above are prohibited. + true + + + + + DWL + Data Word Length + 19 + 21 + read-write + + + 000 + 8 bits + #000 + + + 001 + 16 bits + #001 + + + 010 + 18 bits + #010 + + + 011 + 20 bits + #011 + + + 100 + 22 bits + #100 + + + 101 + 24 bits + #101 + + + others + Settings other than above are prohibited. + true + + + + + SWL + System Word LengthSet the system word length to the bit clock frequency/2 fs. + 16 + 18 + read-write + + + 000 + 8 bits (serial bit clock frequency = 16fs ) + #000 + + + 001 + 16 bits (serial bit clock frequency = 32fs ) + #001 + + + 010 + 24 bits (serial bit clock frequency = 48fs ) + #010 + + + 011 + 32 bits (serial bit clock frequency = 64fs ) + #011 + + + others + Settings other than above are prohibited. + true + + + + + MST + Serial WS Direction NOTE: Only the following settings are allowed: (SCKD, SWSD) = (0, 0) and (1, 1). Other settings are prohibited. + 14 + 14 + read-write + + + 0 + Serial word select is input, slave mode. + #0 + + + 1 + Serial word select is output, master mode. + #1 + + + + + BCKP + Serial Bit Clock Polarity + 13 + 13 + read-write + + + 0 + SSIWS and SSIDATA change at the SSISCK falling edge (sampled at the SCK rising edge). + #0 + + + 1 + SSIWS and SSIDATA change at the SSISCK rising edge (sampled at the SCK falling edge). + #1 + + + + + LRCKP + Serial WS Polarity + 12 + 12 + read-write + + + 0 + SSIWS is low for 1st channel, high for 2nd channel. + #0 + + + 1 + SSIWS is high for 1st channel, low for 2nd channel. + #1 + + + + + SPDP + Serial Padding Polarity + 11 + 11 + read-write + + + 0 + Padding bits are low. + #0 + + + 1 + Padding bits are high. + #1 + + + + + SDTA + Serial Data Alignment + 10 + 10 + read-write + + + 0 + Transmitting and receiving in the order of serial data and padding bits + #0 + + + 1 + Transmitting and receiving in the order of padding bits and serial data + #1 + + + + + PDTA + Parallel Data Alignment + 9 + 9 + read-write + + + 0 + The lower bits of parallel data (SSITDR, SSIRDR) are transferred prior to the upper bits.(When data word length is 8 or 16 bits) / Parallel data (SSITDR, SSIRDR) is left-aligned.(When data word length is 18, 20, 22, or 24 bits) + #0 + + + 1 + The upper bits of parallel data (SSITDR, SSIRDR) are transferred prior to the lower bits.(When data word length is 8 or 16 bits) / Parallel data (SSITDR, SSIRDR) is right-aligned.(When data word length is 18, 20, 22, or 24 bits) + #1 + + + + + DEL + Serial Data Delay + 8 + 8 + read-write + + + 0 + 1 clock cycle delay between SSIWS and SSIDATA + #0 + + + 1 + No delay between SSIWS and SSIDATA + #1 + + + + + CKDV + Serial Oversampling Clock Division Ratio + 4 + 7 + read-write + + + 0x0 + CLK + 0x0 + + + 0x1 + CLK/2 + 0x1 + + + 0x2 + CLK/4 + 0x2 + + + 0x3 + CLK/8 + 0x3 + + + 0x4 + CLK/16 + 0x4 + + + 0x5 + CLK/32 + 0x5 + + + 0x6 + CLK/64 + 0x6 + + + 0x7 + CLK/128 + 0x7 + + + 0x8 + CLK/6 + 0x8 + + + 0x9 + CLK/12 (These bits are only settable for channel 0. Setting these bits in the register for channel 1 is prohibited.) + 0x9 + + + 0xA + CLK/24 + 0xA + + + 0xB + CLK/48(These bits are only settable for channel 0. Setting these bits in the register for channel 1 is prohibited.) + 0xB + + + 0xC + CLK/96(These bits are only settable for channel 0. Setting these bits in the register for channel 1 is prohibited.) + 0xC + + + others + Settings other than above are prohibited. + true + + + + + MUEN + Mute EnableNOTE: When this module is muted, the value of outputting serial data is rewritten to 0 but data transmission is not stopped. Write dummy data to the SSIFTDR not to generate a transmit underflow because the number of data in the transmit FIFO is decreasing. + 3 + 3 + read-write + + + 0 + This module is not muted. + #0 + + + 1 + This module is muted. + #1 + + + + + TEN + Transmit Enable + 1 + 1 + read-write + + + 0 + Disables the transmit operation. + #0 + + + 1 + Enables the transmit operation. + #1 + + + + + REN + Receive Enable + 0 + 0 + read-write + + + 0 + Disables the receive operation. + #0 + + + 1 + Enables the receive operation. + #1 + + + + + + + SSISR + Status Register + 0x04 + 32 + read-write + 0x02000013 + 0x3E00007F + + + TUIRQ + Transmit Underflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 29 + 29 + read-write + zeroToClear + modify + + + 0 + No transmit underflow has occurred. + #0 + + + 1 + A transmit underflow has occurred. + #1 + + + + + TOIRQ + Transmit Overflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 28 + 28 + read-write + zeroToClear + modify + + + 0 + No transmit overflow has occurred. + #0 + + + 1 + A transmit overflow has occurred. + #1 + + + + + RUIRQ + Receive Underflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 27 + 27 + read-write + zeroToClear + modify + + + 0 + No receive underflow has occurred. + #0 + + + 1 + A receive underflow has occurred. + #1 + + + + + ROIRQ + Receive Overflow Error Interrupt Status Flag NOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 26 + 26 + read-write + zeroToClear + modify + + + 0 + No receive overflow has occurred. + #0 + + + 1 + A receive overflow has occurred. + #1 + + + + + IIRQ + Idle Mode Interrupt Status Flag + 25 + 25 + read-only + + + 0 + This module is not in idle state. + #0 + + + 1 + This module is in idle state. + #1 + + + + + TCHNO + Transmit Channel Number + 5 + 6 + read-only + + + TSWNO + Transmit Serial Word Number + 4 + 4 + read-only + + + RCHNO + Receive Channel Number.These bits are read as 00b. + 2 + 3 + read-only + + + RSWNO + Receive Serial Word Number + 1 + 1 + read-only + + + IDST + Idle Mode Status Flag + 0 + 0 + read-only + + + 0 + Serial bus is operating. + #0 + + + 1 + The current communication is stopped. + #1 + + + + + + + SSIFCR + FIFO Control Register + 0x10 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + AUCKE + Oversampling Clock Enable + 31 + 31 + read-write + + + 0 + The oversampling clock is disabled. + #0 + + + 1 + The oversampling clock is enabled. + #1 + + + + + SSIRST + SSI soft ware reset + 16 + 16 + read-write + + + 0 + Clears the SSI software reset. + #0 + + + 1 + initiates the SSI software reset. + #1 + + + + + TTRG + Transmit Data Trigger Number NOTE: The values in parenthesis are the number of empty stages in SSIFTDR at which the TDE flag is set. + 6 + 7 + read-write + + + 00 + 7 (1) + #00 + + + 01 + 6 (2) + #01 + + + 10 + 4 (4) + #10 + + + 11 + 2 (6) + #11 + + + + + RTRG + Receive Data Trigger Number + 4 + 5 + read-write + + + 00 + 1 + #00 + + + 01 + 2 + #01 + + + 10 + 4 + #10 + + + 11 + 6 + #11 + + + + + TIE + Transmit Interrupt Enable NOTE: TXI can be cleared by clearing either the TDE flag (see the description of the TDE bit for details) or TIE bit. + 3 + 3 + read-write + + + 0 + Transmit data empty interrupt (TXI) request is disabled + #0 + + + 1 + Transmit data empty interrupt (TXI) request is enabled + #1 + + + + + RIE + Receive Interrupt Enable NOTE: RXI can be cleared by clearing either the RDF flag (see the description of the RDF bit for details) or RIE bit. + 2 + 2 + read-write + + + 0 + Receive data full interrupt (RXI) request is disabled + #0 + + + 1 + Receive data full interrupt (RXI) request is enabled + #1 + + + + + TFRST + Transmit FIFO Data Register Reset + 1 + 1 + read-write + + + 0 + Clears the transmit data FIFO reset. + #0 + + + 1 + Initiates the transmit data FIFO reset. + #1 + + + + + RFRST + Receive FIFO Data Register Reset + 0 + 0 + read-write + + + 0 + Clears the receive data FIFO reset. + #0 + + + 1 + Initiates the receive data FIFO reset. + #1 + + + + + BSW + Byte Swap Enable + 11 + 11 + read-write + + + 0 + Disables byte swap + #0 + + + 1 + Enables byte swap + #1 + + + + + + + SSIFSR + FIFO Status Register + 0x14 + 32 + read-write + 0x00010000 + 0xFFFFFFFF + + + TDC + Transmit Data Indicate Flag(Indicates the number of data units stored in SSIFTDR) + 24 + 29 + read-only + + + TDE + Transmit Data Empty Flag NOTE: Since the SSIFTDR register is a 32-byte FIFO register, the maximum number of bytes that can be written to it while the TDE flag is 1 is 8 - TDC[3:0]. If writing data to the SSIFTDR register is continued after all the data is written, writing will be invalid and an overflow occurs. + 16 + 16 + read-write + zeroToClear + modify + + + 0 + Number of data bytes for transmission in SSIFTDR is greater than the set transmit trigger number. + #0 + + + 1 + Number of data bytes for transmission in SSIFTDR is equal to or less than the set transmit trigger number. + #1 + + + + + RDC + Receive Data Indicate Flag(Indicates the number of data units stored in SSIFRDR) + 8 + 13 + read-only + + + RDF + Receive Data Full Flag NOTE: Since the SSIFRDR register is a 32-byte FIFO register, the maximum number of data bytes that can be read from it while the RDF flag is 1 is indicated in the RDC[3:0] flags. If reading data from the SSIFRDR register is continued after all the data is read, undefined values will be read. + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Number of received data bytes in SSIFRDR is less than the set receive trigger number. + #0 + + + 1 + Number of received data bytes in SSIFRDR is equal to or greater than the set receive trigger number. + #1 + + + + + + + SSIFTDR + Transmit FIFO Data Register + 0x18 + 32 + write-only + 0x00000000 + 0x00000000 + + + SSIFTDR + SSIFTDR is a write-only FIFO register consisting of eight stages of 32-bit registers for storing data to be serially transmitted. NOTE: that when the SSIFTDR register is full of data (32 bytes), the next data cannot be written to it. If writing is attempted, it will be ignored and an overflow occurs. + 0 + 31 + write-only + + + + + SSIFTDR16 + Transmit FIFO Data Register + SSIFTDR + 0x18 + 16 + write-only + 0x00000000 + 0x00000000 + + + SSIFTDR8 + Transmit FIFO Data Register + SSIFTDR + 0x18 + 8 + write-only + 0x00000000 + 0x00000000 + + + SSIFRDR + Receive FIFO Data Register + 0x1C + 32 + read-only + 0x00000000 + 0x00000000 + + + SSIFRDR + SSIFRDR is a read-only FIFO register consisting of eight stages of 32-bit registers for storing serially received data. + 0 + 31 + read-only + + + + + SSIFRDR16 + Receive FIFO Data Register + SSIFRDR + 0x1C + 16 + read-only + 0x00000000 + 0x00000000 + + + SSIFRDR8 + Receive FIFO Data Register + SSIFRDR + 0x1C + 8 + read-only + 0x00000000 + 0x00000000 + + + SSIOFR + Audio Format Register + 0x20 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + BCKASTP + Whether to Enable Stopping BCK Output When SSIE is in Idle Status + 9 + 9 + read-write + + + 0 + Always outputs BCK to the SSIBCK pin. + #0 + + + 1 + Automatically controls output of BCK to the SSIBCK pin. + #1 + + + + + LRCONT + Whether to Enable LRCK/FS Continuation + 8 + 8 + read-write + + + 0 + Disables LRCK/FS continuation. + #0 + + + 1 + Enables LRCK/FS continuation. + #1 + + + + + OMOD + Audio Format Select + 0 + 1 + read-write + + + 00 + I2S format + #00 + + + 01 + TDM format + #01 + + + 10 + Monaural format + #10 + + + 11 + Setting prohibited. + #11 + + + + + + + SSISCR + Status Control Register + 0x24 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + TDES + TDE Setting Condition Select + 8 + 12 + read-write + + + 00000 + SSIFTDR has one stage or more free space + #00000 + + + 00001 + SSIFTDR has two stages or more free space (snip) + #00001 + + + 11110 + SSIFTDR has thirty-one stages or more free space + #11110 + + + 11111 + SSIFTDR has thirty-two stages or more free space. + #11111 + + + + + RDFS + RDF Setting Condition Select + 0 + 4 + read-write + + + 00000 + SSIFRDR has one stage or more data size + #00000 + + + 00001 + SSIFRDR has two stages or more data size (snip) + #00001 + + + 11110 + SSIFRDR has thirty-one stages or more data size + #11110 + + + 11111 + SSIFRDR has thirty-two stages or more data size. + #11111 + + + + + + - R_SSI1 - Serial Sound Interface Enhanced (SSIE) - 0x4004E100 + R_SSI1 + Serial Sound Interface Enhanced (SSIE) + 0x4004E100 R_SYSTEM @@ -64021,48 +71768,4484 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - SBYCR - Standby Control Register - 0x00C - 16 + SBYCR + Standby Control Register + 0x00C + 16 + read-write + 0x4000 + 0xFFFF + + + SSBY + Software Standby + 15 + 15 + read-write + + + 0 + Sleep mode + #0 + + + 1 + Software Standby mode (DPSBYCR.DPSBY=0) / Deep Software Standby mode (DPSBYCR.DPSBY=1) + #1 + + + + + OPE + Output Port Enable + 14 + 14 + read-write + + + 0 + In software standby mode or deep software standby mode, the address bus and bus control signals are set to the high-impedance state. + #0 + + + 1 + In software standby mode or deep software standby mode, the address bus and bus control signals retain the output state.. + #1 + + + + + + + MSTPCRA + Module Stop Control Register A + 0x01C + 32 + read-write + 0xFFBFFF1C + 0xFFFFFFFF + + + MSTPA22 + DMA Controller/Data Transfer Controller Module Stop + 22 + 22 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPA7 + Standby RAM Module Stop + 7 + 7 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPA6 + ECCRAM Module Stop + 6 + 6 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPA5 + High-Speed RAM Module Stop + 5 + 5 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPA1 + RAM1 Module Stop + 1 + 1 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + MSTPA0 + RAM0 Module Stop + 0 + 0 + read-write + + + 0 + Cancel the module-stop state + #0 + + + 1 + Enter the module-stop state + #1 + + + + + + + SCKDIVCR + System Clock Division Control Register + 0x020 + 32 + read-write + 0x22022222 + 0xFFFFFFFF + + + FCK + Flash IF Clock (FCLK) Select + 28 + 30 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + ICK + System Clock (ICLK) Select + 24 + 26 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + BCK + External Bus Clock (BCLK) Select + 16 + 18 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + PCKA + Peripheral Module Clock A (PCLKA) Select + 12 + 14 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + PCKB + Peripheral Module Clock B (PCLKB) Select + 8 + 10 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + PCKC + Peripheral Module Clock C (PCLKC) Select + 4 + 6 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + PCKD + Peripheral Module Clock D (PCLKD) Select + 0 + 2 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + others + Setting prohibited + true + + + + + + + SCKDIVCR2 + System Clock Division Control Register 2 + 0x024 + 8 + read-write + 0x40 + 0xFF + + + UCK + USB Clock (UCLK) Select + 4 + 6 + read-write + + + 010 + /3 + #010 + + + 011 + /4 + #011 + + + 100 + /5 + #100 + + + others + Setting prohibited + true + + + + + + + SCKSCR + System Clock Source Control Register + 0x026 + 8 + read-write + 0x01 + 0xFF + + + CKSEL + Clock Source Select + 0 + 2 + read-write + + + 000 + HOCO + #000 + + + 001 + MOCO + #001 + + + 010 + LOCO + #010 + + + 011 + Main clock oscillator + #011 + + + 100 + Sub-clock oscillator + #100 + + + 101 + PLL + #101 + + + others + Setting prohibited + true + + + + + + + PLLCCR + PLL Clock Control Register + 0x028 + 16 + read-write + 0x1300 + 0xFFFF + + + PLLMUL + PLL Frequency Multiplication Factor Select [PLL Frequency Multiplication Factor] = (PLLUMUL+1) / 2 Range: 0x23 - 0x3B for example 010011: x10.0 010100: x10.5 010101: x11.0 : 011100: x14.5 011101: x15.0 011110: x15.5 : 111010: x29.5 111011: x30.0 + 8 + 13 + read-write + + + #010011 + #111011 + + + + + others + Setting prohibited + true + + + + + PLSRCSEL + PLL Clock Source Select + 4 + 4 + read-write + + + 0 + Main clock oscillator + #0 + + + 1 + HOCO + #1 + + + + + PLIDIV + PLL Input Frequency Division Ratio Select + 0 + 1 + read-write + + + 00 + /1 + #00 + + + 01 + /2 + #01 + + + 10 + /3 + #10 + + + 11 + Setting prohibited + #11 + + + + + + + PLLCR + PLL Control Register + 0x02A + 8 + read-write + 0x01 + 0xFF + + + PLLSTP + PLL Stop Control + 0 + 0 + read-write + + + 0 + Operate the PLL + #0 + + + 1 + Stop the PLL. + #1 + + + + + + + PLLCCR2 + PLL Clock Control Register2 + 0x02B + 8 + read-write + 0x07 + 0xFF + + + PLODIV + PLL Output Frequency Division Ratio Select + 6 + 7 + read-write + + + 00 + /1. + #00 + + + 01 + /2. + #01 + + + 10 + /4. + #10 + + + 11 + Setting prohibited. + #11 + + + + + PLLMUL + PLL Frequency Multiplication Factor Select + 0 + 4 + read-write + + + 1111 + Settings prohibited. + #1111 + + + others + x PLLMUL[4:0] +1 + true + + + + + + + BCKCR + External Bus Clock Control Register + 0x030 + 8 + read-write + 0x00 + 0xFF + + + BCLKDIV + BCLK Pin Output Select + 0 + 0 + read-write + + + 0 + BCLK + #0 + + + 1 + BCLK/2 + #1 + + + + + + + MEMWAIT + Memory Wait Cycle Control Register + 0x031 + 8 + read-write + 0x00 + 0xFF + + + MEMWAIT + Memory Wait Cycle SelectNote: Writing 0 to the MEMWAIT is prohibited when SCKDIVCR.ICK selects division by 1 and SCKSCR.CKSEL[2:0] bits select thesystem clock source that is faster than 32 MHz (ICLK > 32 MHz). + 0 + 0 + read-write + + + 0 + no wait + #0 + + + 1 + wait + #1 + + + + + + + MOSCCR + Main Clock Oscillator Control Register + 0x032 + 8 + read-write + 0x01 + 0xFF + + + MOSTP + Main Clock Oscillator Stop + 0 + 0 + read-write + + + 0 + Main clock oscillator is operating. + #0 + + + 1 + Main clock oscillator is stopped. + #1 + + + + + + + HOCOCR + High-Speed On-Chip Oscillator Control Register + 0x036 + 8 + read-write + 0x00 + 0xFE + + + HCSTP + HOCO Stop + 0 + 0 + read-write + + + 0 + Operate the HOCO clock + #0 + + + 1 + Stop the HOCO clock + #1 + + + + + + + MOCOCR + Middle-Speed On-Chip Oscillator Control Register + 0x038 + 8 + read-write + 0x00 + 0xFF + + + MCSTP + MOCO Stop + 0 + 0 + read-write + + + 0 + Operate the MOCO clock + #0 + + + 1 + Stop the MOCO clock + #1 + + + + + + + FLLCR1 + FLL Control Register 1 + 0x039 + 8 + read-write + 0x00 + 0xFF + + + FLLEN + FLL Enable + 0 + 0 + read-write + + + 0 + FLL function is disabled. + #0 + + + 1 + FLL function is enabled. + #1 + + + + + + + FLLCR2 + FLL Control Register 2 + 0x03A + 16 + read-write + 0x0000 + 0xFFFF + + + FLLCNTL + FLL Multiplication ControlMultiplication ratio of the FLL reference clock select + 0 + 10 + read-write + + + + + OSCSF + Oscillation Stabilization Flag Register + 0x03C + 8 + read-only + 0x00 + 0xFE + + + PLLSF + PLL Clock Oscillation Stabilization Flag + 5 + 5 + read-only + + + 0 + PLL clock is stopped or is not yet stable + #0 + + + 1 + PLL clock is stable, so is available for use as the system clock + #1 + + + + + MOSCSF + Main Clock Oscillation Stabilization Flag + 3 + 3 + read-only + + + 0 + Main clock oscillator is stopped (MOSTP = 1) or is not yet stable + #0 + + + 1 + Main clock oscillator is stable, so is available for use as the system clock + #1 + + + + + HOCOSF + HOCO Clock Oscillation Stabilization FlagNOTE: The HOCOSF bit value after a reset is 1 when the OFS1.HOCOEN bit is 0. It is 0 when the OFS1.HOCOEN bit is 1. + 0 + 0 + read-only + + + 0 + HOCO clock is stopped or is not yet stable + #0 + + + 1 + HOCO clock is stable, so is available for use as the system clock + #1 + + + + + PLL2SF + PLL2 Clock Oscillation Stabilization Flag + 6 + 6 + read-only + + + 0 + The PLL2 clock is stopped, or oscillation of the PLL2 clock is not stable yet + #0 + + + 1 + The PLL2 clock is stable, so is available for use as the system clock + #1 + + + + + + + CKOCR + Clock Out Control Register + 0x03E + 8 + read-write + 0x00 + 0xFF + + + CKOEN + Clock out enable + 7 + 7 + read-write + + + 0 + Disable clock out + #0 + + + 1 + Enable clock out + #1 + + + + + CKODIV + Clock out input frequency Division Select + 4 + 6 + read-write + + + 000 + /1 + #000 + + + 001 + /2 + #001 + + + 010 + /4 + #010 + + + 011 + /8 + #011 + + + 100 + /16 + #100 + + + 101 + /32 + #101 + + + 110 + /64 + #110 + + + 111 + /128 + #111 + + + + + CKOSEL + Clock out source select + 0 + 2 + read-write + + + 000 + HOCO + #000 + + + 001 + MOCO + #001 + + + 010 + LOCO + #010 + + + 011 + MOSC + #011 + + + 100 + SOSC + #100 + + + others + Setting prohibited + true + + + + + + + TRCKCR + Trace Clock Control Register + 0x03F + 8 + read-write + 0x01 + 0xFF + + + TRCKEN + Trace Clock operating Enable + 7 + 7 + read-write + + + 0 + Disable operation + #0 + + + 1 + Enable operation + #1 + + + + + TRCK + Trace Clock operating frequency select + 0 + 3 + read-write + + + 0000 + /1 + #0000 + + + 0001 + /2 + #0001 + + + 0010 + /4 + #0010 + + + others + Setting prohibited + true + + + + + + + OSTDCR + Oscillation Stop Detection Control Register + 0x040 + 8 + read-write + 0x00 + 0xFF + + + OSTDE + Oscillation Stop Detection Function Enable + 7 + 7 + read-write + + + 0 + Disable oscillation stop detection function + #0 + + + 1 + Enable oscillation stop detection function + #1 + + + + + OSTDIE + Oscillation Stop Detection Interrupt Enable + 0 + 0 + read-write + + + 0 + Disable oscillation stop detection interrupt (do not notify the POEG) + #0 + + + 1 + Enable oscillation stop detection interrupt (notify the POEG) + #1 + + + + + + + OSTDSR + Oscillation Stop Detection Status Register + 0x041 + 8 + read-write + 0x00 + 0xFF + + + OSTDF + Oscillation Stop Detection Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Main clock oscillation stop not detected + #0 + + + 1 + Main clock oscillation stop detected + #1 + + + + + + + SLCDSCKCR + Segment LCD Source Clock Control Register + 0x050 + 8 + read-write + 0x00 + 0xFF + + + LCDSCKEN + LCD Source Clock Out Enable + 7 + 7 + read-write + + + 0 + LCD source clock out disabled + #0 + + + 1 + LCD source clock out enabled. + #1 + + + + + LCDSCKSEL + LCD Source Clock (LCDSRCCLK) Select + 0 + 2 + read-write + + + 000 + LOCO + #000 + + + 001 + SOSC + #001 + + + 010 + MOSC + #010 + + + 100 + HOCO + #100 + + + others + Settings other than above are prohibited. + true + + + + + + + EBCKOCR + External Bus Clock Output Control Register + 0x052 + 8 + read-write + 0x00 + 0xFF + + + EBCKOEN + BCLK Pin Output Control + 0 + 0 + read-write + + + 0 + Disable EBCLK pin output (fixed high) + #0 + + + 1 + Enable EBCLK pin output + #1 + + + + + + + SDCKOCR + SDRAM Clock Output Control Register + 0x053 + 8 + read-write + 0x00 + 0xFF + + + SDCKOEN + SDCLK Pin Output Control + 0 + 0 + read-write + + + 0 + Disable SDCLK pin output (fixed high) + #0 + + + 1 + Enable SDCLK pin output + #1 + + + + + + + MOCOUTCR + MOCO User Trimming Control Register + 0x061 + 8 + read-write + 0x00 + 0xFF + + + MOCOUTRM + MOCO User Trimming 1000_0000 : -128 1000_0001 : -127 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : +126 0111_1111 : +127These bits are added to original MOCO trimming bits + 0 + 7 + read-write + + + + + HOCOUTCR + HOCO User Trimming Control Register + 0x062 + 8 + read-write + 0x00 + 0xFF + + + HOCOUTRM + HOCO User Trimming 1000_0000 : -128 1000_0001 : -127 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : +126 0111_1111 : +127These bits are added to original HOCO trimming bits + 0 + 7 + read-write + + + + + SNZCR + Snooze Control Register + 0x092 + 8 + read-write + 0x00 + 0xFF + + + SNZE + Snooze Mode Enable + 7 + 7 + read-write + + + 0 + Disable Snooze Mode + #0 + + + 1 + Enable Snooze Mode + #1 + + + + + SNZDTCEN + DTC Enable in Snooze Mode + 1 + 1 + read-write + + + 0 + Disable DTC operation + #0 + + + 1 + Enable DTC operation + #1 + + + + + RXDREQEN + RXD0 Snooze Request Enable NOTE: Do not set to 1 other than in asynchronous mode. + 0 + 0 + read-write + + + 0 + Ignore RXD0 falling edge in Standby mode. + #0 + + + 1 + Accept RXD0 falling edge in Standby mode as a request to transit to Snooze mode. + #1 + + + + + + + SNZEDCR + Snooze End Control Register + 0x094 + 8 + read-write + 0x00 + 0xFF + + + SCI0UMTED + SCI0 address unmatch Snooze End EnableNote: Do not set to 1 other than in asynchronous mode. + 7 + 7 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + AD1UMTED + AD compare mismatch 1 Snooze End Enable + 6 + 6 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + AD1MATED + AD compare match 1 Snooze End Enable + 5 + 5 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + AD0UMTED + AD compare mismatch 0 Snooze End Enable + 4 + 4 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + AD0MATED + AD compare match 0 Snooze End Enable + 3 + 3 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + DTCNZRED + Not Last DTC transmission completion Snooze End Enable + 2 + 2 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + DTCZRED + Last DTC transmission completion Snooze End Enable + 1 + 1 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + AGT1UNFED + AGT1 underflow Snooze End Enable + 0 + 0 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + + + SNZREQCR + Snooze Request Control Register + 0x098 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + SNZREQEN30 + Snooze Request Enable 30Enable AGT1 compare match B snooze request + 30 + 30 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN29 + Snooze Request Enable 29Enable AGT1 compare match A snooze request + 29 + 29 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN28 + Snooze Request Enable 28Enable AGT1 underflow snooze request + 28 + 28 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN25 + Snooze Request Enable 25Enable RTC period snooze request + 25 + 25 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN24 + Snooze Request Enable 24Enable RTC alarm snooze request + 24 + 24 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN23 + Snooze Request Enable 23Enable Comparator-LP0 snooze request + 23 + 23 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN22 + Snooze Request Enable 22Enable Comparator-HS0 snooze request + 22 + 22 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + SNZREQEN17 + Snooze Request Enable 17Enable KR snooze request + 17 + 17 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + 16 + 1 + SNZREQEN%s + Snooze Request Enable 0Enable IRQ %s pin snooze request + 0 + 0 + read-write + + + 0 + Disable snooze request + #0 + + + 1 + Enable snooze request + #1 + + + + + + + FLSTOP + Flash Operation Control Register + 0x09E + 8 + read-write + 0x00 + 0xFF + + + FLSTPF + Flash Memory Operation Status Flag + 4 + 4 + read-write + + + 0 + Transition completed + #0 + + + 1 + During transition (from the flash-stop-status to flash-operating-status or vice versa) + #1 + + + + + FLSTOP + Selecting ON/OFF of the Flash Memory Operation + 0 + 0 + read-write + + + 0 + Code flash and data flash memory operates + #0 + + + 1 + Code flash and data flash memory stops. + #1 + + + + + + + PSMCR + Power Save Memory Control Register + 0x09F + 8 + read-write + 0x00 + 0xFF + + + PSMC + Power save memory control. + 0 + 1 + read-write + + + 00 + All RAM is on Software Standby mode. + #00 + + + 01 + 48KB RAM is on in Software Standby mode. + #01 + + + others + Setting prohibited. + true + + + + + + + OPCCR + Operating Power Control Register + 0x0A0 + 8 + read-write + 0x00 + 0xFF + + + OPCMTSF + Operating Power Control Mode Transition Status Flag + 4 + 4 + read-only + + + 0 + Transition completed + #0 + + + 1 + During transition + #1 + + + + + OPCM + Operating Power Control Mode Select + 0 + 1 + read-write + + + 00 + High-speed mode + #00 + + + 01 + Prohibited + #01 + + + 10 + Prohibited + #10 + + + 11 + Low-speed mode + #11 + + + others + Setting prohibited + true + + + + + + + SOPCCR + Sub Operating Power Control Register + 0x0AA + 8 + read-write + 0x00 + 0xFF + + + SOPCMTSF + Sub Operating Power Control Mode Transition Status Flag + 4 + 4 + read-only + + + 0 + Transition completed + #0 + + + 1 + During transition + #1 + + + + + SOPCM + Sub Operating Power Control Mode Select + 0 + 0 + read-write + + + 0 + Other than Subosc-speed mode + #0 + + + 1 + Subosc-speed mode + #1 + + + + + + + MOSCWTCR + Main Clock Oscillator Wait Control Register + 0x0A2 + 8 + read-write + 0x05 + 0xFF + + + MSTS + Main clock oscillator wait time setting + 0 + 3 + read-write + + + 0001 + Wait time = 35 cycles (133.5 us) + #0001 + + + 0010 + Wait time = 67 cycles (255.6 us) + #0010 + + + 0011 + Wait time = 131 cycles (499.7 us) + #0011 + + + 0100 + Wait time = 259 cycles (988.0 us) + #0100 + + + 0101 + Wait time = 547 cycles (2086.6 us) (value after reset) + #0101 + + + 0110 + Wait time = 1059 cycles (4039.8 us) + #0110 + + + 0111 + Wait time = 2147 cycles (8190.2 us) + #0111 + + + 1000 + Wait time = 4291 cycles (16368.9 us) + #1000 + + + 1001 + Wait time = 8163 cycles (31139.4 us). + #1001 + + + others + settings prohibited. + true + + + + + + + HOCOWTCR + High-speed on-chip oscillator wait control register + 0x0A5 + 8 + read-write + 0x02 + 0xFF + + + HSTS + HOCO wait time settingWaiting time (sec) = setting of the HSTS[2:0] bits/fLOCO(Trimmed) + 3/fLOC(Untrimmed) + 0 + 2 + read-write + + + + + RSTSR1 + Reset Status Register 1 + 0x0C0 + 16 + read-write + 0x0000 + 0xE0F8 + + + SPERF + SP Error Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 12 + 12 + read-write + zeroToClear + modify + + + 0 + SP error reset not detected. + #0 + + + 1 + SP error reset detected. + #1 + + + + + BUSMRF + Bus Master MPU Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 11 + 11 + read-write + zeroToClear + modify + + + 0 + Bus Master MPU reset not detected. + #0 + + + 1 + Bus Master MPU reset detected. + #1 + + + + + BUSSRF + Bus Slave MPU Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 10 + 10 + read-write + zeroToClear + modify + + + 0 + Bus Slave MPU reset not detected. + #0 + + + 1 + Bus Slave MPU reset detected. + #1 + + + + + REERF + RAM ECC Error Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 9 + 9 + read-write + zeroToClear + modify + + + 0 + RAM ECC error reset not detected. + #0 + + + 1 + RAM ECC error reset detected. + #1 + + + + + RPERF + RAM Parity Error Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 8 + 8 + read-write + zeroToClear + modify + + + 0 + RAM parity error reset not detected. + #0 + + + 1 + RAM parity error reset detected. + #1 + + + + + SWRF + Software Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 2 + 2 + read-write + zeroToClear + modify + + + 0 + Software reset not detected. + #0 + + + 1 + Software reset detected. + #1 + + + + + WDTRF + Watchdog Timer Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 1 + 1 + read-write + zeroToClear + modify + + + 0 + Watchdog timer reset not detected. + #0 + + + 1 + Watchdog timer reset detected. + #1 + + + + + IWDTRF + Independent Watchdog Timer Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Independent watchdog timer reset not detected. + #0 + + + 1 + Independent watchdog timer reset detected. + #1 + + + + + TZERF + Trust Zone Error Reset Detect Flag + 13 + 13 + read-write + + + 0 + Trust Zone error reset not detected. + #0 + + + 1 + TrustZone error reset detected. + #1 + + + + + CPERF + Cache Parity Error Reset Detect Flag + 15 + 15 + read-write + + + 0 + Cache Parity error reset not detected. + #0 + + + 1 + Cache Parity error reset detected. + #1 + + + + + + + STCONR + Standby Condition Register + 0x40F + 8 + read-write + 0xC3 + 0xFF + + + STCON + SSTBY condition bit + 0 + 1 + read-write + + + 00 + set this value in case of transferring to Software Standby Mode in using HOCO. + #00 + + + 11 + set this value in case of transferring to Software Standby Mode in using expect for HOCO. + #11 + + + + + + + 2 + 0x2 + 1,2 + LVD%sCR1 + Voltage Monitor %s Circuit Control Register 1 + 0x0E0 + 8 + read-write + 0x01 + 0xFF + + + IRQSEL + Voltage Monitor Interrupt Type Select + 2 + 2 + read-write + + + 0 + Non-maskable interrupt + #0 + + + 1 + Maskable interrupt + #1 + + + + + IDTSEL + Voltage Monitor Interrupt Generation Condition Select + 0 + 1 + read-write + + + 00 + Generate when VCC>=Vdet (rise) is detected + #00 + + + 01 + Generate when VCC<Vdet (drop) is detected + #01 + + + 10 + Generate when drop and rise are detected + #10 + + + 11 + Settings prohibited + #11 + + + + + + + USBCKCR_ALT + USB Clock Control Register + 0xD0 + 8 + read-write + 0x00 + 0xFF + + + USBCLKSEL + The USBCLKSEL bit selects the source of the USB clock (UCLK). + 0 + 0 + read-write + + + 0 + PLL + #0 + + + 1 + HOCO + #1 + + + + + + + SDADCCKCR + 24-bit Sigma-Delta A/D Converter Clock Control Register + 0xD1 + 8 + read-write + 0x00 + 0xFF + + + SDADCCKSEL + 24-bit Sigma-Delta A/D Converter Clock Select + 0 + 0 + read-write + + + 0 + MOSC is chosen by a source clock of 24-bit Sigma-Delta A/D Converter Clock. + #0 + + + 1 + HOCO is chosen by a source clock of 24-bit Sigma-Delta AA/D Converter Clock. + #1 + + + + + SDADCCKEN + 24-bit Sigma-Delta A/D Converter Clock Enable + 7 + 7 + read-write + + + 0 + 24-bit Sigma-Delta A/D Converter Clock is disabled + #0 + + + 1 + 24-bit Sigma-Delta A/D Converter Clock is enabled. + #1 + + + + + + + 2 + 0x2 + 1,2 + LVD%sSR + Voltage Monitor %s Circuit Status Register + 0x0E1 + 8 + read-write + 0x02 + 0xFF + + + MON + Voltage Monitor 1 Signal Monitor Flag + 1 + 1 + read-only + + + 0 + VCC < Vdet + #0 + + + 1 + VCC >= Vdet or MON bit is disabled + #1 + + + + + DET + Voltage Monitor Voltage Change Detection Flag NOTE: Only 0 can be written to this bit. After writing 0 to this bit, it takes 2 system clock cycles for the bit to be read as 0. + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Not detected + #0 + + + 1 + Vdet1 passage detection + #1 + + + + + + + PRCR + Protect Register + 0x3FE + 16 + read-write + 0x0000 + 0xFFFF + + + PRKEY + PRKEY Key Code + 8 + 15 + write-only + + + 0x5A + Enables writing to the PRCR register. + 0x5A + + + others + Disables writing to the PRCR register. + true + + + + + PRC3 + Enables writing to the registers related to the LVD. + 3 + 3 + read-write + + + 0 + Writes protected. + #0 + + + 1 + Writes not protected. + #1 + + + + + PRC1 + Enables writing to the registers related to the operating modes, the low power consumption modes and the battery backup function. + 1 + 1 + read-write + + + 0 + Writes protected. + #0 + + + 1 + Writes not protected. + #1 + + + + + PRC0 + Enables writing to the registers related to the clock generation circuit. + 0 + 0 + read-write + + + 0 + Writes protected. + #0 + + + 1 + Writes not protected. + #1 + + + + + PRC4 + 4 + 4 + read-write + + + 0 + Write disabled + #0 + + + 1 + Write enabled + #1 + + + + + + + DPSIER0 + Deep Standby Interrupt Enable Register 0 + 0x402 + 8 + read-write + 0x00 + 0xFF + + + 8 + 1 + DIRQ%sE + IRQ-DS Pin Enable + 0 + 0 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + + + DPSIER1 + Deep Standby Interrupt Enable Register 1 + 0x403 + 8 + read-write + 0x00 + 0xFF + + + 8 + 1 + 8-15 + DIRQ%sE + IRQ-DS Pin Enable + 0 + 0 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + + + DPSIER2 + Deep Standby Interrupt Enable Register 2 + 0x404 + 8 + read-write + 0x00 + 0xFF + + + DNMIE + NMI Pin Enable + 4 + 4 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DRTCAIE + RTC Alarm interrupt Deep Standby Cancel Signal Enable + 3 + 3 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DTRTCIIE + RTC Interval interrupt Deep Standby Cancel Signal Enable + 2 + 2 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DLVD2IE + LVD2 Deep Standby Cancel Signal Enable + 1 + 1 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DLVD1IE + LVD1 Deep Standby Cancel Signal Enable + 0 + 0 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + + + DPSIER3 + Deep Standby Interrupt Enable Register 3 + 0x405 + 8 + read-write + 0x00 + 0xFF + + + DAGT1IE + AGT1 Underflow Deep Standby Cancel Signal Enable + 2 + 2 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DUSBHSIE + USBHS Suspend/Resume Deep Standby Cancel Signal Enable + 1 + 1 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DUSBFSIE + USBFS Suspend/Resume Deep Standby Cancel Signal Enable + 0 + 0 + read-write + + + 0 + Canceling deep software standby mode is disabled + #0 + + + 1 + Canceling deep software standby mode is enabled + #1 + + + + + DAGT3IE + AGT3 Underflow Deep Standby Cancel Signal Enable + 3 + 3 + read-write + + + 0 + Cancelling deep standby mode is disabled + #0 + + + 1 + Cancelling deep standby mode is enabled + #1 + + + + + + + DPSIFR0 + Deep Standby Interrupt Flag Register 0 + 0x406 + 8 + read-write + 0x00 + 0xFF + + + 8 + 1 + DIRQ%sF + IRQ-DS Pin Deep Standby Cancel Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + + + DPSIFR1 + Deep Standby Interrupt Flag Register 1 + 0x407 + 8 + read-write + 0x00 + 0xFF + + + 8 + 1 + 8-15 + DIRQ%sF + IRQ-DS Pin Deep Standby Cancel Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + + + DPSIFR2 + Deep Standby Interrupt Flag Register 2 + 0x408 + 8 + read-write + 0x00 + 0xFF + + + DNMIF + NMI Pin Deep Standby Cancel Flag + 4 + 4 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DRTCAIF + RTC Alarm interrupt Deep Standby Cancel Flag + 3 + 3 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DTRTCIIF + RTC Interval interrupt Deep Standby Cancel Flag + 2 + 2 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DLVD2IF + LVD2 Deep Standby Cancel Flag + 1 + 1 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DLVD1IF + LVD1 Deep Standby Cancel Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + + + DPSIFR3 + Deep Standby Interrupt Flag Register 3 + 0x409 + 8 + read-write + 0x00 + 0xFF + + + DAGT1IF + AGT1 Underflow Deep Standby Cancel Flag + 2 + 2 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DUSBHSIF + USBHS Suspend/Resume Deep Standby Cancel Flag + 1 + 1 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DUSBFSIF + USBFS Suspend/Resume Deep Standby Cancel Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + The cancel request is not generated + #0 + + + 1 + The cancel request is generated + #1 + + + + + DAGT3IF + AGT3 Underflow Deep Standby Cancel Flag + 3 + 3 + read-write + + + 0 + The cancel request is not generated. + #0 + + + 1 + The cancel request is generated. + #1 + + + + + + + 2 + 1 + DPSIEGR%s + Deep Standby Interrupt Edge Register %s + 0x40A + 8 + read-write + 0x00 + 0xFF + + + 8 + 1 + DIRQ%sEG + IRQ-DS Pin Edge Select + 0 + 0 + read-write + + + 0 + A cancel request is generated at a falling edge + #0 + + + 1 + A cancel request is generated at a rising edge + #1 + + + + + + + DPSIEGR2 + Deep Standby Interrupt Edge Register 2 + 0x40C + 8 + read-write + 0x00 + 0xFF + + + DNMIEG + NMI Pin Edge Select + 4 + 4 + read-write + + + 0 + A cancel request is generated at a falling edge + #0 + + + 1 + A cancel request is generated at a rising edge + #1 + + + + + DLVD2IEG + LVD2 Edge Select + 1 + 1 + read-write + + + 0 + A cancel request is generated when VCC<Vdet2 (fall) is detected + #0 + + + 1 + A cancel request is generated when VCC>=Vdet2 (rise) is detected + #1 + + + + + DLVD1IEG + LVD1 Edge Select + 0 + 0 + read-write + + + 0 + A cancel request is generated when VCC<Vdet1 (fall) is detected + #0 + + + 1 + A cancel request is generated when VCC>=Vdet1 (rise) is detected + #1 + + + + + + + DPSBYCR + Deep Standby Control Register + 0x400 + 8 + read-write + 0x01 + 0xFF + + + DPSBY + Deep Software Standby + 7 + 7 + read-write + + + 0 + Sleep mode (SBYCR.SSBY=0) / Software Standby mode (SBYCR.SSBY=1) + #0 + + + 1 + Sleep mode (SBYCR.SSBY=0) / Deep Software Standby mode (SBYCR.SSBY=1) + #1 + + + + + IOKEEP + I/O Port Retention + 6 + 6 + read-write + + + 0 + When the Deep Software Standby mode is canceled, the I/O ports are in the reset state. + #0 + + + 1 + When the Deep Software Standby mode is canceled, the I/O ports are in the same state as in the Deep Software Standby mode. + #1 + + + + + DEEPCUT + Power-Supply Control + 0 + 1 + read-write + + + 00 + Power to the standby RAM, Low-speed on-chip oscillator, AGTn, and USBFS/HS resume detecting unit is supplied in deep software standby mode. + #00 + + + 01 + Power to the standby RAM, Low-speed on-chip oscillator, AGTn, and USBFS/HS resume detecting unit is not supplied in deep software standby mode. + #01 + + + 10 + Setting prohibited. + #10 + + + 11 + Power to the standby RAM, Low-speed on-chip oscillator, AGTn, and USBFS/HS resume detecting unit is supplied in deep software standby mode. In addition, LVD is disabled and the low power function in a power-on reset circuit is enabled. + #11 + + + + + + + SYOCDCR + System Control OCD Control Register + 0x40E + 8 + read-write + 0x00 + 0xFE + + + DBGEN + Debugger Enable bit + 7 + 7 + read-write + + + 0 + On-chip debugger is disabled + #0 + + + 1 + On-chip debugger is enabled + #1 + + + + + DOCDF + Deep Standby OCD flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + On-chip debugger is disabled + #0 + + + 1 + On-chip debugger is enabled + #1 + + + + + + + MOMCR + Main Clock Oscillator Mode Oscillation Control Register + 0x413 + 8 + read-write + 0x00 + 0xFF + + + AUTODRVEN + Main Clock Oscillator Drive Capability Auto Switching Enable + 7 + 7 + read-write + + + 0 + Disable + #0 + + + 1 + Enable. + #1 + + + + + MOSEL + Main Clock Oscillator Switching + 6 + 6 + read-write + + + 0 + Resonator + #0 + + + 1 + External clock input + #1 + + + + + MODRV0 + Main Clock Oscillator Drive Capability 0 Switching + 4 + 5 + read-write + + + 00 + 20MHz to 24MHz + #00 + + + 01 + 16MHz to 20MHz + #01 + + + 10 + 8MHz to 16MHz + #10 + + + 11 + 8MHz + #11 + + + + + MODRV1 + Main Clock Oscillator Drive Capability 1 Switching + 3 + 3 + read-write + + + 0 + 10 MHz to 20 MHz + #0 + + + 1 + 1 MHz to 10 MHz. + #1 + + + + + + + RSTSR0 + Reset Status Register 0 + 0x410 + 8 + read-write + 0x00 + 0x70 + + + DPSRSTF + Deep Software Standby Reset FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 7 + 7 + read-write + zeroToClear + modify + + + 0 + Deep software standby mode cancelation not requested by an interrupt. + #0 + + + 1 + Deep software standby mode cancelation requested by an interrupt. + #1 + + + + + LVD2RF + Voltage Monitor 2 Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 3 + 3 + read-write + zeroToClear + modify + + + 0 + Voltage Monitor 2 reset not detected. + #0 + + + 1 + Voltage Monitor 2 reset detected. + #1 + + + + + LVD1RF + Voltage Monitor 1 Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 2 + 2 + read-write + zeroToClear + modify + + + 0 + Voltage Monitor 1 reset not detected. + #0 + + + 1 + Voltage Monitor 1 reset detected. + #1 + + + + + LVD0RF + Voltage Monitor 0 Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 1 + 1 + read-write + zeroToClear + modify + + + 0 + Voltage Monitor 0 reset not detected. + #0 + + + 1 + Voltage Monitor 0 reset detected. + #1 + + + + + PORF + Power-On Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. + 0 + 0 + read-write + zeroToClear + modify + + + 0 + Power-on reset not detected. + #0 + + + 1 + Power-on reset detected. + #1 + + + + + + + RSTSR2 + Reset Status Register 2 + 0x411 + 8 + read-write + 0x00 + 0xFE + + + CWSF + Cold/Warm Start Determination Flag + 0 + 0 + read-write + oneToSet + modify + + + 0 + Cold start + #0 + + + 1 + Warm start + #1 + + + + + + + LVCMPCR + Voltage Monitor Circuit Control Register + 0x417 + 8 + read-write + 0x00 + 0xFF + + + LVD2E + Voltage Detection 2 Enable + 6 + 6 + read-write + + + 0 + Voltage detection 2 circuit disabled + #0 + + + 1 + Voltage detection 2 circuit enabled + #1 + + + + + LVD1E + Voltage Detection 1 Enable + 5 + 5 + read-write + + + 0 + Voltage detection 1 circuit disabled + #0 + + + 1 + Voltage detection 1 circuit enabled + #1 + + + + + + + LVD1CMPCR + Voltage Monitoring 1 Comparator Control Register + 0x417 + 8 + read-write + 0x13 + 0xff + + + LVD1LVL + Voltage Detection 1 Level Select (Standard voltage during drop in voltage) + 0 + 4 + read-write + + + 0x11 + 2.99 V (Vdet1_11) + 0x11 + + + 0x12 + 2.92 V (Vdet1_12) + 0x12 + + + 0x13 + 2.85 V (Vdet1_13) + 0x13 + + + Others + Setting prohibited + true + + + + + LVD1E + Voltage Detection 1 Enable + 7 + 7 + read-write + + + 0 + Voltage detection 1 circuit disabled + #0 + + + 1 + Voltage detection 1 circuit enabled + #1 + + + + + + + LVDLVLR + Voltage Detection Level Select Register + 0x418 + 8 + read-write + 0xF3 + 0xFF + + + LVD2LVL + Voltage Detection 2 Level Select (Standard voltage during fall in voltage) + 5 + 7 + read-write + + + 101 + 2.99V (Vdet2_1) + #101 + + + 110 + 2.92V (Vdet2_2) + #110 + + + 111 + 2.85V (Vdet2_3) + #111 + + + others + Settings other than above are prohibited. + true + + + + + LVD1LVL + Voltage Detection 1 Level Select (Standard voltage during fall in voltage) + 0 + 4 + read-write + + + 10001 + 2.99V (Vdet1_1) + #10001 + + + 10010 + 2.92V (Vdet1_2) + #10010 + + + 10011 + 2.85V (Vdet1_3) + #10011 + + + others + Settings other than above are prohibited. + true + + + + + + + LVD2CMPCR + Voltage Monitoring 2 Comparator Control Register + 0x418 + 8 + read-write + 0x07 + 0xff + + + LVD2LVL + Voltage Detection 2 Level Select (Standard voltage during drop in voltage) + 0 + 2 + read-write + + + 101 + 2.99 V (Vdet2_5) + #101 + + + 110 + 2.92 V (Vdet2_6) + #110 + + + 111 + 2.85 V (Vdet2_7) + #111 + + + Others + Setting prohibited + true + + + + + LVD2E + Voltage Detection 2 Enable + 7 + 7 + read-write + + + 0 + Voltage detection 2 circuit disabled + #0 + + + 1 + Voltage detection 2 circuit enabled + #1 + + + + + + + 2 + 0x1 + 1,2 + LVD%sCR0 + Voltage Monitor %s Circuit Control Register 0 + 0x41A + 8 + read-write + 0x8A + 0xF7 + + + RN + Voltage Monitor Reset Negate Select + 7 + 7 + read-write + + + 0 + Negation follows a stabilization time (tLVD) after VCC > Vdet is detected. + #0 + + + 1 + Negation follows a stabilization time (tLVD) after assertion of the LVD reset. + #1 + + + + + RI + Voltage Monitor Circuit Mode Select + 6 + 6 + read-write + + + 0 + Voltage Monitor interrupt during Vdet1 passage + #0 + + + 1 + Voltage Monitor reset enabled when the voltage falls to and below Vdet1 + #1 + + + + + FSAMP + Sampling Clock Select + 4 + 5 + read-write + + + 00 + 1/2 LOCO frequency + #00 + + + 01 + 1/4 LOCO frequency + #01 + + + 10 + 1/8 LOCO frequency + #10 + + + 11 + 1/16 LOCO frequency + #11 + + + + + CMPE + Voltage Monitor Circuit Comparison Result Output Enable + 2 + 2 + read-write + + + 0 + Disable voltage monitor 1 circuit comparison result output + #0 + + + 1 + Enable voltage monitor 1 circuit comparison result output. + #1 + + + + + DFDIS + Voltage Monitor Digital Filter Disable Mode Select + 1 + 1 + read-write + + + 0 + Enable digital filter + #0 + + + 1 + Disable digital filter + #1 + + + + + RIE + Voltage Monitor Interrupt/Reset Enable + 0 + 0 + read-write + + + 0 + Disable + #0 + + + 1 + Enable + #1 + + + + + + + VBTCR1 + VBATT Control Register1 + 0x41F + 8 + read-write + 0x00 + 0xFF + + + BPWSWSTP + Battery Power supply Switch Stop + 0 + 0 + read-write + + + 0 + Battery Power supply Switch Enable + #0 + + + 1 + Battery Power supply Switch stop + #1 + + + + + + + SOSCCR + Sub-Clock Oscillator Control Register + 0x480 + 8 + read-write + 0x01 + 0xFF + + + SOSTP + Sub-Clock Oscillator Stop + 0 + 0 + read-write + + + 0 + Sub-clock oscillator is operating. + #0 + + + 1 + Sub-clock oscillator is stopped. + #1 + + + + + + + SOMCR + Sub Clock Oscillator Mode Control Register + 0x481 + 8 + read-write + 0x00 + 0xFF + + + SODRV + Sub-Clock Oscillator Drive Capability Switching + 0 + 1 + read-write + + + 00 + Normal mode + #00 + + + 01 + Low power mode 1 + #01 + + + 10 + Low power mode 2 + #10 + + + 11 + Low power mode 3. + #11 + + + + + + + LOCOCR + Low-Speed On-Chip Oscillator Control Register + 0x490 + 8 + read-write + 0x00 + 0xFF + + + LCSTP + LOCO Stop + 0 + 0 + read-write + + + 0 + LOCO is operating. + #0 + + + 1 + LOCO is stopped. + #1 + + + + + + + LOCOUTCR + LOCO User Trimming Control Register + 0x492 + 8 + read-write + 0x00 + 0xFF + + + LOCOUTRM + LOCO User Trimming 1000_0000 : -128 1000_0001 : -127 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : +126 0111_1111 : +127These bits are added to original LOCO trimming bits + 0 + 7 + read-write + + + + + VBTCR2 + VBATT Control Register2 + 0x4B0 + 8 + read-write + 0x00 + 0xFF + + + VBTLVDLVL + VBATT Pin Voltage Low Voltage Detect Level Select Bit + 6 + 7 + read-write + + + 00 + 2.7V + #00 + + + 01 + Setting prohibited + #01 + + + 10 + 2.3V + #10 + + + 11 + 2.1V + #11 + + + + + VBTLVDEN + VBATT Pin Low Voltage Detect Enable Bit + 4 + 4 + read-write + + + 0 + VBATT pin low voltage detect disable + #0 + + + 1 + VBATT pin low voltage detect enable + #1 + + + + + + + VBTSR + VBATT Status Register + 0x4B1 + 8 + read-write + 0x01 + 0xEC + + + VBTRVLD + VBATT_R Valid + 4 + 4 + read-only + + + 0 + VBATT_R area not valid + #0 + + + 1 + VBATT_R area valid + #1 + + + + + VBTBLDF + VBATT Battery Low voltage Detect Flag + 1 + 1 + read-write + zeroToClear + modify + + + 0 + VBATT pin low voltage not detected + #0 + + + 1 + VBATT pin low voltage detected. + #1 + + + + + VBTRDF + VBAT_R Reset Detect Flag + 0 + 0 + read-write + zeroToClear + modify + + + 0 + VBATT_R voltage power-on reset not detected + #0 + + + 1 + VBATT_R selected voltage power-on reset detected. + #1 + + + + + + + VBTCMPCR + VBATT Comparator Control Register + 0x4B2 + 8 + read-write + 0x00 + 0xFF + + + VBTCMPE + VBATT pin low voltage detect circuit output enable + 0 + 0 + read-write + + + 0 + VBATT pin low voltage detect circuit output disabled + #0 + + + 1 + VBATT pin low voltage detect circuit output enabled + #1 + + + + + + + VBTLVDICR + VBATT Pin Low Voltage Detect Interrupt Control Register + 0x4B4 + 8 read-write - 0x4000 - 0xFFFF + 0x00 + 0xFF - SSBY - Software Standby - 15 - 15 + VBTLVDISEL + Pin Low Voltage Detect Interrupt Select bit + 1 + 1 read-write 0 - Sleep mode + Non Maskable Interrupt #0 1 - Software Standby mode (DPSBYCR.DPSBY=0) / Deep Software Standby mode (DPSBYCR.DPSBY=1) + Maskable Interrupt #1 - OPE - Output Port Enable - 14 - 14 + VBTLVDIE + VBATT Pin Low Voltage Detect Interrupt Enable bit + 0 + 0 read-write 0 - In software standby mode or deep software standby mode, the address bus and bus control signals are set to the high-impedance state. + VBATT Pin Low Voltage Detect Interrupt Disable #0 1 - In software standby mode or deep software standby mode, the address bus and bus control signals retain the output state.. + VBATT Pin Low Voltage Detect Interrupt Enable #1 @@ -64070,124 +76253,135 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - MSTPCRA - Module Stop Control Register A - 0x01C - 32 + VBTWCTLR + VBATT Wakeup function Control Register + 0x4B6 + 8 read-write - 0xFFBFFF1C - 0xFFFFFFFF + 0x00 + 0xFF - MSTPA22 - DMA Controller/Data Transfer Controller Module Stop - 22 - 22 + VWEN + VBATT wakeup enable + 0 + 0 read-write 0 - Cancel the module-stop state + Disable Wakeup function #0 1 - Enter the module-stop state + Enable Wakeup function #1 + + + + VBTWCH0OTSR + VBATT Wakeup I/O 0 Output Trigger Select Register + 0x4B8 + 8 + read-write + 0x00 + 0xFF + - MSTPA7 - Standby RAM Module Stop - 7 - 7 + CH0VAGTUTE + CH0 Output AGT(ch1) underflow Signal Enable + 5 + 5 read-write 0 - Cancel the module-stop state + VBATT CH0 wakeup triggered by the AGT(ch1) underflow signal is disabled #0 1 - Enter the module-stop state + VBATT CH0 wakeup triggered by the AGT(ch1) underflow signal is enabled #1 - MSTPA6 - ECCRAM Module Stop - 6 - 6 + CH0VRTCATE + VBATWIO0 Output RTC Alarm Signal Enable + 4 + 4 read-write 0 - Cancel the module-stop state + VBATT wakeup I/O 0 output trigger by the RTC alarm signal is disabled #0 1 - Enter the module-stop state + VBATT wakeup I/O 0 output trigger by the RTC alarm signal is enabled. #1 - MSTPA5 - High-Speed RAM Module Stop - 5 - 5 + CH0VRTCTE + VBATWIO0 Output RTC Periodic Signal Enable + 3 + 3 read-write 0 - Cancel the module-stop state + VBATT wakeup I/O 0 output trigger by the RTC periodic signal is disabled #0 1 - Enter the module-stop state + VBATT wakeup I/O 0 output trigger by the RTC periodic signal is enabled. #1 - MSTPA1 - RAM1 Module Stop - 1 - 1 + CH0VCH2TE + VBATWIO0 Output VBATWIO2 Trigger Enable + 2 + 2 read-write 0 - Cancel the module-stop state + VBATT wakeup I/O 0 output trigger by the VBATWIO2 pin is disabled #0 1 - Enter the module-stop state + VBATT wakeup I/O 0 output trigger by the VBATWIO2 pin is enabled. #1 - MSTPA0 - RAM0 Module Stop - 0 - 0 + CH0VCH1TE + VBATWIO0 Output VBATWIO1 Trigger Enable + 1 + 1 read-write 0 - Cancel the module-stop state + VBATT wakeup I/O 0 output trigger by the VBATWIO1 pin is disabled #0 1 - Enter the module-stop state + VBATT wakeup I/O 0 output trigger by the VBATWIO1 pin is enabled. #1 @@ -64195,557 +76389,529 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - SCKDIVCR - System Clock Division Control Register - 0x020 - 32 + VBTWCH1OTSR + VBATT Wakeup I/O 1 Output Trigger Select Register + 0x4B9 + 8 read-write - 0x22022222 - 0xFFFFFFFF + 0x00 + 0xFF - FCK - Flash IF Clock (FCLK) Select - 28 - 30 + CH1VAGTUTE + CH1 Output AGT(ch1) underflow Signal Enable + 5 + 5 read-write - 000 - /1 - #000 - - - 001 - /2 - #001 - - - 010 - /4 - #010 - - - 011 - /8 - #011 - - - 100 - /16 - #100 - - - 101 - /32 - #101 - - - 110 - /64 - #110 + 0 + VBATT CH1 wakeup triggered by the AGT(ch1) underflow signal is disabled + #0 - others - Setting prohibited - true + 1 + VBATT CH1 wakeup triggered by the AGT(ch1) underflow signal is enabled + #1 - ICK - System Clock (ICLK) Select - 24 - 26 + CH1VRTCATE + VBATWIO1 Output RTC Alarm Signal Enable + 4 + 4 read-write - 000 - /1 - #000 - - - 001 - /2 - #001 - - - 010 - /4 - #010 - - - 011 - /8 - #011 - - - 100 - /16 - #100 - - - 101 - /32 - #101 - - - 110 - /64 - #110 + 0 + VBATT wakeup I/O 1 output trigger by the RTC alarm signal is disabled + #0 - others - Setting prohibited - true + 1 + VBATT wakeup I/O 1 output trigger by the RTC alarm signal is enabled. + #1 - BCK - External Bus Clock (BCLK) Select - 16 - 18 + CH1VRTCTE + VBATWIO1 Output RTC Periodic Signal Enable + 3 + 3 read-write - 000 - /1 - #000 - - - 001 - /2 - #001 - - - 010 - /4 - #010 - - - 011 - /8 - #011 - - - 100 - /16 - #100 - - - 101 - /32 - #101 - - - 110 - /64 - #110 + 0 + VBATT wakeup I/O 1 output trigger by the RTC periodic signal is disabled + #0 - others - Setting prohibited - true + 1 + VBATT wakeup I/O 1 output trigger by the RTC periodic signal is enabled + #1 - PCKA - Peripheral Module Clock A (PCLKA) Select - 12 - 14 + CH1VCH2TE + VBATWIO1 Output VBATWIO2 Trigger Enable + 2 + 2 read-write - 000 - /1 - #000 - - - 001 - /2 - #001 - - - 010 - /4 - #010 - - - 011 - /8 - #011 - - - 100 - /16 - #100 - - - 101 - /32 - #101 - - - 110 - /64 - #110 + 0 + VBATT wakeup I/O 1 output trigger by the VBATWIO2 pin is disabled + #0 - others - Setting prohibited - true + 1 + VBATT wakeup I/O 1 output trigger by the VBATWIO2 pin is enabled. + #1 - PCKB - Peripheral Module Clock B (PCLKB) Select - 8 - 10 + CH1VCH0TE + VBATWIO1 Output VBATWIO0 Trigger Enable + 0 + 0 read-write - 000 - /1 - #000 - - - 001 - /2 - #001 - - - 010 - /4 - #010 - - - 011 - /8 - #011 - - - 100 - /16 - #100 + 0 + VBATT wakeup I/O 1 output trigger by the VBATWIO0 pin is disabled + #0 - 101 - /32 - #101 + 1 + VBATT wakeup I/O 1 output trigger by the VBATWIO0 pin is enabled. + #1 + + + + + + VBTWCH2OTSR + VBATT Wakeup I/O 2 Output Trigger Select Register + 0x4BA + 8 + read-write + 0x00 + 0xFF + + + CH2VAGTUTE + CH2 Output AGT(CH2) underflow Signal Enable + 5 + 5 + read-write + - 110 - /64 - #110 + 0 + VBATT CH2 wakeup triggered by the AGT(CH2) underflow signal is disabled + #0 - others - Setting prohibited - true + 1 + VBATT CH2 wakeup triggered by the AGT(CH2) underflow signal is enabled + #1 - PCKC - Peripheral Module Clock C (PCLKC) Select + CH2VRTCATE + VBATWIO2 Output RTC Alarm Signal Enable 4 - 6 + 4 read-write - 000 - /1 - #000 + 0 + VBATT wakeup I/O 2 output trigger by the RTC alarm signal is disabled + #0 - 001 - /2 - #001 + 1 + VBATT wakeup I/O 2 output trigger by the RTC alarm signal is enabled. + #1 + + + + CH2VRTCTE + VBATWIO2 Output RTC Periodic Signal Enable + 3 + 3 + read-write + - 010 - /4 - #010 + 0 + VBATT wakeup I/O 2 output trigger by the RTC periodic signal is disabled + #0 - 011 - /8 - #011 + 1 + VBATT wakeup I/O 2 output trigger by the RTC periodic signal is enabled. + #1 + + + + CH2VCH1TE + VBATWIO2 Output VBATWIO1 Trigger Enable + 1 + 1 + read-write + - 100 - /16 - #100 + 0 + VBATT wakeup I/O 2 output trigger by the VBATWIO1 pin is disabled + #0 - 101 - /32 - #101 + 1 + VBATT wakeup I/O 2 output trigger by the VBATWIO1 pin is enabled. + #1 + + + + CH2VCH0TE + VBATWIO2 Output VBATWIO0 Trigger Enable + 0 + 0 + read-write + - 110 - /64 - #110 + 0 + VBATT wakeup I/O 2 output trigger by the VBATWIO0 pin is disabled + #0 - others - Setting prohibited - true + 1 + VBATT wakeup I/O 2 output trigger by the VBATWIO0 pin is enabled. + #1 + + + + VBTICTLR + VBATT Input Control Register + 0x4BB + 8 + read-write + 0x00 + 0xF8 + - PCKD - Peripheral Module Clock D (PCLKD) Select - 0 + VCH2INEN + RTCIC2 Input Enable + 2 2 read-write - 000 - /1 - #000 - - - 001 - /2 - #001 - - - 010 - /4 - #010 + 0 + Disabled + #0 - 011 - /8 - #011 + 1 + Enabled + #1 + + + + VCH1INEN + RTCIC1 Input Enable + 1 + 1 + read-write + - 100 - /16 - #100 + 0 + Disabled + #0 - 101 - /32 - #101 + 1 + Enabled + #1 + + + + VCH0INEN + RTCIC0 Input Enable + 0 + 0 + read-write + - 110 - /64 - #110 + 0 + Disabled + #0 - others - Setting prohibited - true + 1 + Enabled + #1 - SCKDIVCR2 - System Clock Division Control Register 2 - 0x024 + VBTOCTLR + VBATT Output Control Register + 0x4BC 8 read-write - 0x40 + 0x00 0xFF - UCK - USB Clock (UCLK) Select - 4 - 6 + VOUT2LSEL + VBATT Wakeup I/O 2 Output Level Selection + 5 + 5 read-write - 010 - /3 - #010 + 0 + Output L before VBATT wake up trigger + #0 - 011 - /4 - #011 + 1 + Output H before VBATT wake up trigger + #1 + + + + VCOU1LSEL + VBATT Wakeup I/O 1 Output Level Selection + 4 + 4 + read-write + - 100 - /5 - #100 + 0 + Output L before VBATT wake up trigger + #0 - others - Setting prohibited - true + 1 + Output H before VBATT wake up trigger + #1 - - - - SCKSCR - System Clock Source Control Register - 0x026 - 8 - read-write - 0x01 - 0xFF - - CKSEL - Clock Source Select - 0 - 2 + VOUT0LSEL + VBATT Wakeup I/O 0 Output Level Selection + 3 + 3 read-write - 000 - HOCO - #000 + 0 + Output L before VBATT wakeup trigger + #0 - 001 - MOCO - #001 + 1 + Output H before VBATT wakeup trigger + #1 + + + + VCH2OEN + VBATT Wakeup I/O 2 Output Enable + 2 + 2 + read-write + - 010 - LOCO - #010 + 0 + VBATWIO2 output disabled + #0 - 011 - Main clock oscillator - #011 + 1 + VBATWIO2 output enabled + #1 + + + + VCH1OEN + VBATT Wakeup I/O 1 Output Enable + 1 + 1 + read-write + - 100 - Sub-clock oscillator - #100 + 0 + VBATWIO1 output disabled + #0 - 101 - PLL - #101 + 1 + VBATWIO1 output enabled + #1 + + + + + VCH0OEN + VBATT Wakeup I/O 0 Output Enable + 0 + 0 + read-write + + + 0 + VBATWIO0 output disabled + #0 - others - Setting prohibited - true + 1 + VBATWIO0 output enabled + #1 - PLLCCR - PLL Clock Control Register - 0x028 - 16 + VBTWTER + VBATT Wakeup Trigger source Enable Register + 0x4BD + 8 read-write - 0x1300 - 0xFFFF + 0x00 + 0xFF - PLLMUL - PLL Frequency Multiplication Factor Select [PLL Frequency Multiplication Factor] = (PLLUMUL+1) / 2 Range: 0x23 - 0x3B for example 010011: x10.0 010100: x10.5 010101: x11.0 : 011100: x14.5 011101: x15.0 011110: x15.5 : 111010: x29.5 111011: x30.0 - 8 - 13 + VAGTUE + AGT(ch1) underflow Signal Enable + 5 + 5 read-write - - - #010011 - #111011 - - - others - Setting prohibited - true + 0 + VBATT wakeup triggered by the AGT(ch1) underflow signal is disabled + #0 + + + 1 + VBATT wakeup triggered by the AGT(ch1) underflow signal is enabled + #1 - PLSRCSEL - PLL Clock Source Select + VRTCAE + RTC Alarm Signal Enable 4 4 read-write 0 - Main clock oscillator + VBATT wakeup triggered by RTC alarm signal is disabled #0 1 - HOCO + VBATT wakeup triggered by RTC alarm signal is enabled. #1 - PLIDIV - PLL Input Frequency Division Ratio Select - 0 - 1 + VRTCIE + RTC Periodic Signal Enable + 3 + 3 read-write - 00 - /1 - #00 + 0 + VBATT wakeup triggered by RTC periodic signal is disabled + #0 - 01 - /2 - #01 + 1 + VBATT wakeup triggered by RTC periodic signal is enabled. + #1 + + + + VCH2E + VBATWIO2 Pin Enable + 2 + 2 + read-write + - 10 - /3 - #10 + 0 + VBATT wakeup triggered by the VBATWIO2 pin is disabled + #0 - 11 - Setting prohibited - #11 + 1 + VBATT wakeup triggered by the VBATWIO2 pin is enabled. + #1 - - - - PLLCR - PLL Control Register - 0x02A - 8 - read-write - 0x01 - 0xFF - - PLLSTP - PLL Stop Control + VCH1E + VBATWIO1 Pin Enable + 1 + 1 + read-write + + + 0 + VBATT wakeup triggered by the VBATWIO1 pin is disabled + #0 + + + 1 + VBATT wakeup triggered by the VBATWIO1 pin is enabled. + #1 + + + + + VCH0E + VBATWIO0 Pin Enable 0 0 read-write 0 - Operate the PLL + VBATT wakeup triggered by the VBATWIO0 pin is disabled #0 1 - Stop the PLL. + VBATT wakeup triggered by the VBATWIO0 pin is enabled. #1 @@ -64753,238 +76919,204 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - PLLCCR2 - PLL Clock Control Register2 - 0x02B + VBTWEGR + VBATT Wakeup Trigger source Edge Register + 0x4BE 8 read-write - 0x07 + 0x00 0xFF - PLODIV - PLL Output Frequency Division Ratio Select - 6 - 7 + VCH2EG + VBATWIO2 Wakeup Trigger Source Edge Select + 2 + 2 read-write - 00 - /1. - #00 + 0 + Wakeup trigger is generated at a falling edge + #0 - 01 - /2. - #01 + 1 + Wakeup trigger is generated at a rising edge. + #1 + + + + VCH1EG + VBATWIO1 Wakeup Trigger Source Edge Select + 1 + 1 + read-write + - 10 - /4. - #10 + 0 + Wakeup trigger is generated at a falling edge + #0 - 11 - Setting prohibited. - #11 + 1 + Wakeup trigger is generated at a rising edge. + #1 - PLLMUL - PLL Frequency Multiplication Factor Select + VCH0EG + VBATWIO0 Wakeup Trigger Source Edge Select 0 - 4 + 0 read-write - 1111 - Settings prohibited. - #1111 + 0 + Wakeup trigger is generated at a falling edge + #0 - others - x PLLMUL[4:0] +1 - true + 1 + Wakeup trigger is generated at a rising edge. + #1 - BCKCR - External Bus Clock Control Register - 0x030 + VBTWFR + VBATT Wakeup trigger source Flag Register + 0x4BF 8 read-write 0x00 0xFF - BCLKDIV - BCLK Pin Output Select - 0 - 0 + VAGTUF + AGT(ch1) underflow VBATT Wakeup Trigger Flag + 5 + 5 read-write + zeroToClear + modify 0 - BCLK + No wakeup trigger by the AGT(ch1) underflow is generated #0 1 - BCLK/2 + A wakeup trigger by the AGT(ch1) underflow is generated #1 - - - - MEMWAIT - Memory Wait Cycle Control Register - 0x031 - 8 - read-write - 0x00 - 0xFF - - MEMWAIT - Memory Wait Cycle SelectNote: Writing 0 to the MEMWAIT is prohibited when SCKDIVCR.ICK selects division by 1 and SCKSCR.CKSEL[2:0] bits select thesystem clock source that is faster than 32 MHz (ICLK > 32 MHz). - 0 - 0 + VRTCAF + VBATT RTC-Alarm Wakeup Trigger Flag + 4 + 4 read-write + zeroToClear + modify 0 - no wait + No wakeup trigger by the RTC alarm is generated #0 1 - wait + A wakeup trigger by the RTC alarm is generated #1 - - - - MOSCCR - Main Clock Oscillator Control Register - 0x032 - 8 - read-write - 0x01 - 0xFF - - MOSTP - Main Clock Oscillator Stop - 0 - 0 + VRTCIF + VBATT RTC-Interval Wakeup Trigger Flag + 3 + 3 read-write + zeroToClear + modify 0 - Main clock oscillator is operating. + No wakeup trigger by the RTC interval is generated #0 1 - Main clock oscillator is stopped. + A wakeup trigger by the RTC interval is generated #1 - - - - HOCOCR - High-Speed On-Chip Oscillator Control Register - 0x036 - 8 - read-write - 0x00 - 0xFE - - HCSTP - HOCO Stop - 0 - 0 + VCH2F + VBATWIO2 Wakeup Trigger Flag + 2 + 2 read-write + zeroToClear + modify 0 - Operate the HOCO clock + No wakeup trigger by the VBATWIO2 pin is generated #0 1 - Stop the HOCO clock + A wakeup trigger by the VBATWIO2 pin is generated #1 - - - - MOCOCR - Middle-Speed On-Chip Oscillator Control Register - 0x038 - 8 - read-write - 0x00 - 0xFF - - MCSTP - MOCO Stop - 0 - 0 + VCH1F + VBATWIO1 Wakeup Trigger Flag + 1 + 1 read-write + zeroToClear + modify 0 - Operate the MOCO clock + No wakeup trigger by the VBATWIO1 pin is generated #0 1 - Stop the MOCO clock + A wakeup trigger by the VBATWIO1 pin is generated #1 - - - - FLLCR1 - FLL Control Register 1 - 0x039 - 8 - read-write - 0x00 - 0xFF - - FLLEN - FLL Enable + VCH0F + VBATWIO0 Wakeup Trigger Flag 0 0 read-write + zeroToClear + modify 0 - FLL function is disabled. + No wakeup trigger by the VBATWIO0 pin is generated #0 1 - FLL function is enabled. + A wakeup trigger by the VBATWIO0 pin is generated #1 @@ -64992,203 +77124,245 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - FLLCR2 - FLL Control Register 2 - 0x03A - 16 + 512 + 0x1 + VBTBKR[%s] + VBATT Backup Register [%s] + 0x500 + 8 read-write - 0x0000 - 0xFFFF + 0x00 + 0x00 - FLLCNTL - FLL Multiplication ControlMultiplication ratio of the FLL reference clock select + VBTBKR + VBTBKR is a 512-byte readable/writable register to store data powered by VBATT.The value of this register is retained even when VCC is not powered but VBATT is powered.VBTBKR is initialized by VBATT selected voltage power-on-reset. 0 - 10 + 7 read-write - OSCSF - Oscillation Stabilization Flag Register - 0x03C + FWEPROR + Flash P/E Protect Register + 0x416 8 - read-only - 0x00 - 0xFE + read-write + 0x02 + 0xFF - PLLSF - PLL Clock Oscillation Stabilization Flag - 5 - 5 - read-only + FLWE + Flash Programming and Erasure + 0 + 1 + read-write - 0 - PLL clock is stopped or is not yet stable - #0 + 00 + Prohibits programming and erasure of the code flash, data flash or blank checking. + #00 - 1 - PLL clock is stable, so is available for use as the system clock - #1 + 01 + Permits programming and erasure of the code flash, data flash or blank checking. + #01 + + + 10 + Prohibits programming and erasure of the code flash, data flash or blank checking. + #10 + + + 11 + Prohibits programming and erasure of the code flash, data flash or blank checking. + #11 + + + + PLL2CCR + PLL2 Clock Control Register + 0x048 + 16 + read-write + 0x1300 + 0xffff + - MOSCSF - Main Clock Oscillation Stabilization Flag - 3 - 3 - read-only + PL2IDIV + PLL2 Input Frequency Division Ratio Select + 0 + 1 + read-write - 0 - Main clock oscillator is stopped (MOSTP = 1) or is not yet stable - #0 + 00 + ∕ 1 (value after reset) + #00 - 1 - Main clock oscillator is stable, so is available for use as the system clock - #1 + 01 + ∕ 2 + #01 + + + 10 + ∕ 3 + #10 + + + Others + Setting prohibited. + true - HOCOSF - HOCO Clock Oscillation Stabilization FlagNOTE: The HOCOSF bit value after a reset is 1 when the OFS1.HOCOEN bit is 0. It is 0 when the OFS1.HOCOEN bit is 1. - 0 - 0 - read-only + PL2SRCSEL + PLL2 Clock Source Select + 4 + 4 + read-write 0 - HOCO clock is stopped or is not yet stable + Main clock oscillator #0 1 - HOCO clock is stable, so is available for use as the system clock + HOCO. #1 + + PLL2MUL + PLL2 Frequency Multiplication Factor Select + 8 + 13 + read-write + - CKOCR - Clock Out Control Register - 0x03E + PLL2CR + PLL2 Control Register + 0x04A 8 read-write - 0x00 - 0xFF + 0x01 + 0xff - CKOEN - Clock out enable - 7 - 7 + PLL2STP + PLL2 Stop Control + 0 + 0 read-write 0 - Disable clock out + PLL2 is operating #0 1 - Enable clock out + PLL2 is stopped. #1 + + + + USBCKDIVCR + USB Clock Division Control Register + 0x06C + 8 + read-write + 0x00 + 0xff + - CKODIV - Clock out input frequency Division Select - 4 - 6 + USBCKDIV + USB Clock (USBCLK) Division Select + 0 + 2 read-write - - 000 - /1 - #000 - - - 001 - /2 - #001 - 010 - /4 + ∕ 4 #010 - - 011 - /8 - #011 - - - 100 - /16 - #100 - 101 - /32 + ∕ 3 #101 110 - /64 + ∕ 5 #110 - 111 - /128 - #111 + Others + Setting prohibited. + true + + + + OCTACKDIVCR + Octal-SPI Clock Division Control Register + 0x06D + 8 + read-write + 0x00 + 0xff + - CKOSEL - Clock out source select + OCTACKDIV + Octal-SPI Clock (OCTACLK) Division Select 0 2 read-write 000 - HOCO + ∕ 1 (value after reset) #000 001 - MOCO + ∕ 2 #001 010 - LOCO + ∕ 4 #010 011 - MOSC + ∕ 6 #011 100 - SOSC + ∕ 8 #100 - others - Setting prohibited + Others + Setting prohibited. true @@ -65196,139 +77370,72 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - TRCKCR - Trace Clock Control Register - 0x03F + USBCKCR + USB Clock Control Register + 0x074 8 read-write 0x01 - 0xFF + 0xff - TRCKEN - Trace Clock operating Enable - 7 - 7 - read-write - - - 0 - Disable operation - #0 - - - 1 - Enable operation - #1 - - - - - TRCK - Trace Clock operating frequency select + USBCKSEL + USB Clock (USBCLK) Source Select 0 - 3 + 2 read-write - 0000 - /1 - #0000 - - - 0001 - /2 - #0001 + 101 + PLL + #101 - 0010 - /4 - #0010 + 110 + PLL2 + #110 - others - Setting prohibited + Others + Setting prohibited. true - - - - OSTDCR - Oscillation Stop Detection Control Register - 0x040 - 8 - read-write - 0x00 - 0xFF - - - OSTDE - Oscillation Stop Detection Function Enable - 7 - 7 - read-write - - - 0 - Disable oscillation stop detection function - #0 - - - 1 - Enable oscillation stop detection function - #1 - - - - OSTDIE - Oscillation Stop Detection Interrupt Enable - 0 - 0 + USBCKSREQ + USB Clock (USBCLK) Switching Request + 6 + 6 read-write 0 - Disable oscillation stop detection interrupt (do not notify the POEG) + No request #0 1 - Enable oscillation stop detection interrupt (notify the POEG) + Request switching. #1 - - - - OSTDSR - Oscillation Stop Detection Status Register - 0x041 - 8 - read-write - 0x00 - 0xFF - - OSTDF - Oscillation Stop Detection Flag - 0 - 0 - read-write - zeroToClear - modify + USBCKSRDY + USB Clock (USBCLK) Switching Ready state flag + 7 + 7 + read-only 0 - Main clock oscillation stop not detected + Impossible to Switch #0 1 - Main clock oscillation stop detected + Possible to Switch #1 @@ -65336,123 +77443,97 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - SLCDSCKCR - Segment LCD Source Clock Control Register - 0x050 + OCTACKCR + Octal-SPI Clock Control Register + 0x075 8 read-write - 0x00 - 0xFF + 0x01 + 0xff - LCDSCKEN - LCD Source Clock Out Enable - 7 - 7 - read-write - - - 0 - LCD source clock out disabled - #0 - - - 1 - LCD source clock out enabled. - #1 - - - - - LCDSCKSEL - LCD Source Clock (LCDSRCCLK) Select + OCTACKSEL + Octal-SPI Clock (OCTACLK) Source Select 0 2 read-write 000 - LOCO + HOCO #000 001 - SOSC + MOCO (value after reset) #001 010 - MOSC + LOCO #010 + + 011 + Main clock oscillator + #011 + 100 - HOCO + Sub-clock oscillator #100 - others - Settings other than above are prohibited. + 101 + PLL + #101 + + + 110 + PLL2 + #110 + + + Others + Setting prohibited. true - - - - EBCKOCR - External Bus Clock Output Control Register - 0x052 - 8 - read-write - 0x00 - 0xFF - - EBCKOEN - BCLK Pin Output Control - 0 - 0 + OCTACKSREQ + Octal-SPI Clock (OCTACLK) Switching Request + 6 + 6 read-write 0 - Disable EBCLK pin output (fixed high) + No request #0 1 - Enable EBCLK pin output + Request switching. #1 - - - - SDCKOCR - SDRAM Clock Output Control Register - 0x053 - 8 - read-write - 0x00 - 0xFF - - SDCKOEN - SDCLK Pin Output Control - 0 - 0 - read-write + OCTACKSRDY + Octal-SPI Clock (OCTACLK) Switching Ready state flag + 7 + 7 + read-only 0 - Disable SDCLK pin output (fixed high) + Switching not possible #0 1 - Enable SDCLK pin output + Switching possible. #1 @@ -65460,103 +77541,67 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - MOCOUTCR - MOCO User Trimming Control Register - 0x061 - 8 - read-write - 0x00 - 0xFF - - - MOCOUTRM - MOCO User Trimming 1000_0000 : -128 1000_0001 : -127 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : +126 0111_1111 : +127These bits are added to original MOCO trimming bits - 0 - 7 - read-write - - - - - HOCOUTCR - HOCO User Trimming Control Register - 0x062 - 8 + SNZREQCR1 + Snooze Request Control Register 1 + 0x088 + 32 read-write - 0x00 - 0xFF + 0x00000000 + 0xffffffff - HOCOUTRM - HOCO User Trimming 1000_0000 : -128 1000_0001 : -127 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : +126 0111_1111 : +127These bits are added to original HOCO trimming bits + SNZREQEN0 + Enable AGT3 underflow snooze request 0 - 7 - read-write - - - - - SNZCR - Snooze Control Register - 0x092 - 8 - read-write - 0x00 - 0xFF - - - SNZE - Snooze Mode Enable - 7 - 7 + 0 read-write 0 - Disable Snooze Mode + Disable the snooze request #0 1 - Enable Snooze Mode + Enable the snooze request #1 - SNZDTCEN - DTC Enable in Snooze Mode + SNZREQEN1 + Enable AGT3 underflow snooze request 1 1 read-write 0 - Disable DTC operation + Disable the snooze request #0 1 - Enable DTC operation + Enable the snooze request #1 - RXDREQEN - RXD0 Snooze Request Enable NOTE: Do not set to 1 other than in asynchronous mode. - 0 - 0 + SNZREQEN2 + Enable AGT3 underflow snooze request + 2 + 2 read-write 0 - Ignore RXD0 falling edge in Standby mode. + Disable the snooze request #0 1 - Accept RXD0 falling edge in Standby mode as a request to transit to Snooze mode. + Enable the snooze request #1 @@ -65564,810 +77609,731 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - SNZEDCR - Snooze End Control Register - 0x094 + SNZEDCR1 + Snooze End Control Register 1 + 0x095 8 read-write 0x00 - 0xFF + 0xff - SCI0UMTED - SCI0 address unmatch Snooze End EnableNote: Do not set to 1 other than in asynchronous mode. - 7 - 7 + AGT3UNFED + AGT3 underflow Snooze End Enable + 0 + 0 + read-write + + + 0 + Disable the Snooze End request + #0 + + + 1 + Enable the Snooze End request + #1 + + + + + + + CGFSAR + Clock Generation Function Security Attribute Register + 0x3C0 + 32 + read-write + 0xffffffff + 0xffffffff + + + NONSEC00 + Non Secure Attribute bit 00 + 0 + 0 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - AD1UMTED - AD compare mismatch 1 Snooze End Enable - 6 - 6 + NONSEC02 + Non Secure Attribute bit 02 + 2 + 2 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - AD1MATED - AD compare match 1 Snooze End Enable - 5 - 5 + NONSEC03 + Non Secure Attribute bit 03 + 3 + 3 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - AD0UMTED - AD compare mismatch 0 Snooze End Enable + NONSEC04 + Non Secure Attribute bit 04 4 4 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - AD0MATED - AD compare match 0 Snooze End Enable - 3 - 3 + NONSEC05 + Non Secure Attribute bit 05 + 5 + 5 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - DTCNZRED - Not Last DTC transmission completion Snooze End Enable - 2 - 2 + NONSEC06 + Non Secure Attribute bit 06 + 6 + 6 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - DTCZRED - Last DTC transmission completion Snooze End Enable - 1 - 1 + NONSEC07 + Non Secure Attribute bit 07 + 7 + 7 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - AGT1UNFED - AGT1 underflow Snooze End Enable - 0 - 0 + NONSEC08 + Non Secure Attribute bit 08 + 8 + 8 read-write 0 - Disable the Snooze End request + Secure #0 1 - Enable the Snooze End request + Non Secure #1 - - - - SNZREQCR - Snooze Request Control Register - 0x098 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - SNZREQEN30 - Snooze Request Enable 30Enable AGT1 compare match B snooze request - 30 - 30 + NONSEC09 + Non Secure Attribute bit 09 + 9 + 9 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - SNZREQEN29 - Snooze Request Enable 29Enable AGT1 compare match A snooze request - 29 - 29 + NONSEC11 + Non Secure Attribute bit 11 + 11 + 11 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - SNZREQEN28 - Snooze Request Enable 28Enable AGT1 underflow snooze request - 28 - 28 + NONSEC12 + Non Secure Attribute bit 12 + 12 + 12 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - SNZREQEN25 - Snooze Request Enable 25Enable RTC period snooze request - 25 - 25 + NONSEC16 + Non Secure Attribute bit 16 + 16 + 16 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - SNZREQEN24 - Snooze Request Enable 24Enable RTC alarm snooze request - 24 - 24 + NONSEC17 + Non Secure Attribute bit 17 + 17 + 17 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 + + + + LPMSAR + Low Power Mode Security Attribution Register + 0x3C8 + 32 + read-write + 0xffffffff + 0xffffffff + - SNZREQEN23 - Snooze Request Enable 23Enable Comparator-LP0 snooze request - 23 - 23 + NONSEC0 + Non Secure Attribute bit 0 + 0 + 0 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - SNZREQEN22 - Snooze Request Enable 22Enable Comparator-HS0 snooze request - 22 - 22 + NONSEC2 + Non Secure Attribute bit 2 + 2 + 2 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - SNZREQEN17 - Snooze Request Enable 17Enable KR snooze request - 17 - 17 + NONSEC4 + Non Secure Attribute bit 4 + 4 + 4 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - 16 - 1 - SNZREQEN%s - Snooze Request Enable 0Enable IRQ %s pin snooze request - 0 - 0 + NONSEC8 + Non Secure Attribute bit 8 + 8 + 8 read-write 0 - Disable snooze request + Secure #0 1 - Enable snooze request + Non Secure #1 - - - - FLSTOP - Flash Operation Control Register - 0x09E - 8 - read-write - 0x00 - 0xFF - - FLSTPF - Flash Memory Operation Status Flag - 4 - 4 + NONSEC9 + Non Secure Attribute bit 9 + 9 + 9 read-write 0 - Transition completed + Secure #0 1 - During transition (from the flash-stop-status to flash-operating-status or vice versa) + Non Secure #1 + + + + LVDSAR + Low Voltage Detection Security Attribution Register + 0x3CC + 32 + read-write + 0xffffffff + 0xffffffff + - FLSTOP - Selecting ON/OFF of the Flash Memory Operation + NONSEC0 + Non Secure Attribute bit 0 0 0 read-write 0 - Code flash and data flash memory operates + Secure #0 1 - Code flash and data flash memory stops. + Non Secure #1 - - - - PSMCR - Power Save Memory Control Register - 0x09F - 8 - read-write - 0x00 - 0xFF - - PSMC - Power save memory control. - 0 + NONSEC1 + Non Secure Attribute bit 1 + 1 1 read-write - 00 - All RAM is on Software Standby mode. - #00 - - - 01 - 48KB RAM is on in Software Standby mode. - #01 + 0 + Secure + #0 - others - Setting prohibited. - true + 1 + Non Secure + #1 - OPCCR - Operating Power Control Register - 0x0A0 - 8 + RSTSAR + Reset Security Attribution Register + LVDSAR + 0x3CC + 32 read-write - 0x00 - 0xFF + 0xffffffff + 0xffffffff - OPCMTSF - Operating Power Control Mode Transition Status Flag - 4 - 4 - read-only + NONSEC0 + Non Secure Attribute bit 0 + 0 + 0 + read-write 0 - Transition completed + Secure #0 1 - During transition + Non Secure #1 - OPCM - Operating Power Control Mode Select - 0 + NONSEC1 + Non Secure Attribute bit 1 + 1 1 read-write - 00 - High-speed mode - #00 - - - 01 - Prohibited - #01 + 0 + Secure + #0 - 10 - Prohibited - #10 + 1 + Non Secure + #1 + + + + NONSEC2 + Non Secure Attribute bit 2 + 2 + 2 + read-write + - 11 - Low-speed mode - #11 + 0 + Secure + #0 - others - Setting prohibited - true + 1 + Non Secure + #1 - SOPCCR - Sub Operating Power Control Register - 0x0AA - 8 + BBFSAR + Battery Backup Function Security Attribute Register + 0x3D0 + 32 read-write - 0x00 - 0xFF + 0x0000ffff + 0xffffffff - SOPCMTSF - Sub Operating Power Control Mode Transition Status Flag - 4 - 4 - read-only + NONSEC0 + Non Secure Attribute bit 0 + 0 + 0 + read-write 0 - Transition completed + Secure #0 1 - During transition + Non Secure #1 - SOPCM - Sub Operating Power Control Mode Select - 0 - 0 + NONSEC1 + Non Secure Attribute bit 1 + 1 + 1 read-write 0 - Other than Subosc-speed mode + Secure #0 1 - Subosc-speed mode + Non Secure #1 - - - - MOSCWTCR - Main Clock Oscillator Wait Control Register - 0x0A2 - 8 - read-write - 0x05 - 0xFF - - MSTS - Main clock oscillator wait time setting - 0 - 3 + NONSEC2 + Non Secure Attribute bit 2 + 2 + 2 read-write - 0001 - Wait time = 35 cycles (133.5 us) - #0001 - - - 0010 - Wait time = 67 cycles (255.6 us) - #0010 - - - 0011 - Wait time = 131 cycles (499.7 us) - #0011 - - - 0100 - Wait time = 259 cycles (988.0 us) - #0100 - - - 0101 - Wait time = 547 cycles (2086.6 us) (value after reset) - #0101 - - - 0110 - Wait time = 1059 cycles (4039.8 us) - #0110 - - - 0111 - Wait time = 2147 cycles (8190.2 us) - #0111 - - - 1000 - Wait time = 4291 cycles (16368.9 us) - #1000 - - - 1001 - Wait time = 8163 cycles (31139.4 us). - #1001 + 0 + Secure + #0 - others - settings prohibited. - true + 1 + Non Secure + #1 - - - - HOCOWTCR - High-speed on-chip oscillator wait control register - 0x0A5 - 8 - read-write - 0x02 - 0xFF - - - HSTS - HOCO wait time settingWaiting time (sec) = setting of the HSTS[2:0] bits/fLOCO(Trimmed) + 3/fLOC(Untrimmed) - 0 - 2 - read-write - - - - - RSTSR1 - Reset Status Register 1 - 0x0C0 - 16 - read-write - 0x0000 - 0xE0F8 - - SPERF - SP Error Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 12 - 12 + NONSEC16 + Non Secure Attribute bit 16 + 16 + 16 read-write - zeroToClear - modify 0 - SP error reset not detected. + Secure #0 1 - SP error reset detected. + Non Secure #1 - BUSMRF - Bus Master MPU Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 11 - 11 + NONSEC17 + Non Secure Attribute bit 17 + 17 + 17 read-write - zeroToClear - modify 0 - Bus Master MPU reset not detected. + Secure #0 1 - Bus Master MPU reset detected. + Non Secure #1 - BUSSRF - Bus Slave MPU Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 10 - 10 + NONSEC18 + Non Secure Attribute bit 18 + 18 + 18 read-write - zeroToClear - modify 0 - Bus Slave MPU reset not detected. + Secure #0 1 - Bus Slave MPU reset detected. + Non Secure #1 - REERF - RAM ECC Error Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 9 - 9 + NONSEC19 + Non Secure Attribute bit 19 + 19 + 19 read-write - zeroToClear - modify 0 - RAM ECC error reset not detected. + Secure #0 1 - RAM ECC error reset detected. + Non Secure #1 - RPERF - RAM Parity Error Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 8 - 8 + NONSEC20 + Non Secure Attribute bit 20 + 20 + 20 read-write - zeroToClear - modify 0 - RAM parity error reset not detected. + Secure #0 1 - RAM parity error reset detected. + Non Secure #1 - SWRF - Software Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 2 - 2 + NONSEC21 + Non Secure Attribute bit 21 + 21 + 21 read-write - zeroToClear - modify 0 - Software reset not detected. + Secure #0 1 - Software reset detected. + Non Secure #1 - WDTRF - Watchdog Timer Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 1 - 1 + NONSEC22 + Non Secure Attribute bit 22 + 22 + 22 read-write - zeroToClear - modify 0 - Watchdog timer reset not detected. + Secure #0 1 - Watchdog timer reset detected. + Non Secure #1 - IWDTRF - Independent Watchdog Timer Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 0 - 0 + NONSEC23 + Non Secure Attribute bit 23 + 23 + 23 read-write - zeroToClear - modify 0 - Independent watchdog timer reset not detected. + Secure #0 1 - Independent watchdog timer reset detected. + Non Secure #1 @@ -66375,550 +78341,466 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - STCONR - Standby Condition Register - 0x40F - 8 + DPFSAR + Deep Standby Interrupt Factor Security Attribution Register + 0x3E0 + 32 read-write - 0xC3 - 0xFF + 0xffffffff + 0xffffffff - STCON - SSTBY condition bit + DPFSA0 + Deep Standby Interrupt Factor Security Attribute bit 0 0 - 1 + 0 read-write - 00 - set this value in case of transferring to Software Standby Mode in using HOCO. - #00 + 0 + Secure + #0 - 11 - set this value in case of transferring to Software Standby Mode in using expect for HOCO. - #11 + 1 + Non Secure + #1 + + + + + DPFSA1 + Deep Standby Interrupt Factor Security Attribute bit 1 + 1 + 1 + read-write + + + 0 + Secure + #0 + + + 1 + Non Secure + #1 - - - - 2 - 0x2 - 1,2 - LVD%sCR1 - Voltage Monitor %s Circuit Control Register 1 - 0x0E0 - 8 - read-write - 0x01 - 0xFF - - IRQSEL - Voltage Monitor Interrupt Type Select + DPFSA2 + Deep Standby Interrupt Factor Security Attribute bit 2 2 2 read-write 0 - Non-maskable interrupt + Secure #0 1 - Maskable interrupt + Non Secure #1 - IDTSEL - Voltage Monitor Interrupt Generation Condition Select - 0 - 1 + DPFSA3 + Deep Standby Interrupt Factor Security Attribute bit 3 + 3 + 3 read-write - 00 - Generate when VCC>=Vdet (rise) is detected - #00 + 0 + Secure + #0 - 01 - Generate when VCC<Vdet (drop) is detected - #01 + 1 + Non Secure + #1 + + + + DPFSA4 + Deep Standby Interrupt Factor Security Attribute bit 4 + 4 + 4 + read-write + - 10 - Generate when drop and rise are detected - #10 + 0 + Secure + #0 - 11 - Settings prohibited - #11 + 1 + Non Secure + #1 - - - - USBCKCR - USB Clock Control Register - 0xD0 - 8 - read-write - 0x00 - 0xFF - - USBCLKSEL - The USBCLKSEL bit selects the source of the USB clock (UCLK). - 0 - 0 + DPFSA5 + Deep Standby Interrupt Factor Security Attribute bit 5 + 5 + 5 read-write 0 - PLL + Secure #0 1 - HOCO + Non Secure #1 - - - - SDADCCKCR - 24-bit Sigma-Delta A/D Converter Clock Control Register - 0xD1 - 8 - read-write - 0x00 - 0xFF - - SDADCCKSEL - 24-bit Sigma-Delta A/D Converter Clock Select - 0 - 0 + DPFSA6 + Deep Standby Interrupt Factor Security Attribute bit 6 + 6 + 6 read-write 0 - MOSC is chosen by a source clock of 24-bit Sigma-Delta A/D Converter Clock. + Secure #0 1 - HOCO is chosen by a source clock of 24-bit Sigma-Delta AA/D Converter Clock. + Non Secure #1 - SDADCCKEN - 24-bit Sigma-Delta A/D Converter Clock Enable + DPFSA7 + Deep Standby Interrupt Factor Security Attribute bit 7 7 7 read-write 0 - 24-bit Sigma-Delta A/D Converter Clock is disabled + Secure #0 1 - 24-bit Sigma-Delta A/D Converter Clock is enabled. + Non Secure #1 - - - - 2 - 0x2 - 1,2 - LVD%sSR - Voltage Monitor %s Circuit Status Register - 0x0E1 - 8 - read-write - 0x02 - 0xFF - - MON - Voltage Monitor 1 Signal Monitor Flag - 1 - 1 - read-only + DPFSA8 + Deep Standby Interrupt Factor Security Attribute bit 8 + 8 + 8 + read-write 0 - VCC < Vdet + Secure #0 1 - VCC >= Vdet or MON bit is disabled + Non Secure #1 - DET - Voltage Monitor Voltage Change Detection Flag NOTE: Only 0 can be written to this bit. After writing 0 to this bit, it takes 2 system clock cycles for the bit to be read as 0. - 0 - 0 + DPFSA9 + Deep Standby Interrupt Factor Security Attribute bit 9 + 9 + 9 read-write - zeroToClear - modify 0 - Not detected + Secure #0 1 - Vdet1 passage detection + Non Secure #1 - - - - PRCR - Protect Register - 0x3FE - 16 - read-write - 0x0000 - 0xFFFF - - PRKEY - PRKEY Key Code - 8 - 15 - write-only + DPFSA10 + Deep Standby Interrupt Factor Security Attribute bit 10 + 10 + 10 + read-write - 0x5A - Enables writing to the PRCR register. - 0x5A + 0 + Secure + #0 - others - Disables writing to the PRCR register. - true + 1 + Non Secure + #1 - PRC3 - Enables writing to the registers related to the LVD. - 3 - 3 + DPFSA11 + Deep Standby Interrupt Factor Security Attribute bit 11 + 11 + 11 read-write 0 - Writes protected. + Secure #0 1 - Writes not protected. + Non Secure #1 - PRC1 - Enables writing to the registers related to the operating modes, the low power consumption modes and the battery backup function. - 1 - 1 + DPFSA12 + Deep Standby Interrupt Factor Security Attribute bit 12 + 12 + 12 read-write 0 - Writes protected. + Secure #0 1 - Writes not protected. + Non Secure #1 - PRC0 - Enables writing to the registers related to the clock generation circuit. - 0 - 0 + DPFSA13 + Deep Standby Interrupt Factor Security Attribute bit 13 + 13 + 13 read-write 0 - Writes protected. + Secure #0 1 - Writes not protected. + Non Secure #1 - - - - DPSIER0 - Deep Standby Interrupt Enable Register 0 - 0x402 - 8 - read-write - 0x00 - 0xFF - - 8 - 1 - DIRQ%sE - IRQ-DS Pin Enable - 0 - 0 + DPFSA14 + Deep Standby Interrupt Factor Security Attribute bit 14 + 14 + 14 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - - - - DPSIER1 - Deep Standby Interrupt Enable Register 1 - 0x403 - 8 - read-write - 0x00 - 0xFF - - 8 - 1 - 8-15 - DIRQ%sE - IRQ-DS Pin Enable - 0 - 0 + DPFSA15 + Deep Standby Interrupt Factor Security Attribute bit 15 + 15 + 15 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - - - - DPSIER2 - Deep Standby Interrupt Enable Register 2 - 0x404 - 8 - read-write - 0x00 - 0xFF - - DNMIE - NMI Pin Enable - 4 - 4 + DPFSA16 + Deep Standby Interrupt Factor Security Attribute bit 16 + 16 + 16 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - DRTCAIE - RTC Alarm interrupt Deep Standby Cancel Signal Enable - 3 - 3 + DPFSA17 + Deep Standby Interrupt Factor Security Attribute bit 17 + 17 + 17 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - DTRTCIIE - RTC Interval interrupt Deep Standby Cancel Signal Enable - 2 - 2 + DPFSA18 + Deep Standby Interrupt Factor Security Attribute bit 18 + 18 + 18 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - DLVD2IE - LVD2 Deep Standby Cancel Signal Enable - 1 - 1 + DPFSA19 + Deep Standby Interrupt Factor Security Attribute bit 19 + 19 + 19 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - DLVD1IE - LVD1 Deep Standby Cancel Signal Enable - 0 - 0 + DPFSA20 + Deep Standby Interrupt Factor Security Attribute bit 20 + 20 + 20 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - - - - DPSIER3 - Deep Standby Interrupt Enable Register 3 - 0x405 - 8 - read-write - 0x00 - 0xFF - - DAGT1IE - AGT1 Underflow Deep Standby Cancel Signal Enable - 2 - 2 + DPFSA24 + Deep Standby Interrupt Factor Security Attribute bit 24 + 24 + 24 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - DUSBHSIE - USBHS Suspend/Resume Deep Standby Cancel Signal Enable - 1 - 1 + DPFSA26 + Deep Standby Interrupt Factor Security Attribute bit 26 + 26 + 26 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 - DUSBFSIE - USBFS Suspend/Resume Deep Standby Cancel Signal Enable - 0 - 0 + DPFSA27 + Deep Standby Interrupt Factor Security Attribute bit 27 + 27 + 27 read-write 0 - Canceling deep software standby mode is disabled + Secure #0 1 - Canceling deep software standby mode is enabled + Non Secure #1 @@ -66926,68 +78808,64 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - DPSIFR0 - Deep Standby Interrupt Flag Register 0 - 0x406 + DPSWCR + Deep Standby Wait Control Register + 0x401 8 read-write - 0x00 - 0xFF + 0x19 + 0xff - 8 - 1 - DIRQ%sF - IRQ-DS Pin Deep Standby Cancel Flag + WTSTS + Deep Software Wait Standby Time Setting Bit 0 - 0 + 5 read-write - zeroToClear - modify - 0 - The cancel request is not generated - #0 + 0x0E + Wait cycle for fast recovery + 0x0e - 1 - The cancel request is generated - #1 + 0x19 + Wait cycle for slow recovery + 0x19 + + + Others + Setting prohibited + true - DPSIFR1 - Deep Standby Interrupt Flag Register 1 - 0x407 + VBATTMNSELR + Battery Backup Voltage Monitor Function Select Register + 0x41D 8 read-write 0x00 - 0xFF + 0xff - 8 - 1 - 8-15 - DIRQ%sF - IRQ-DS Pin Deep Standby Cancel Flag + VBATTMNSEL + VBATT Low Voltage Detect Function Select Bit 0 0 read-write - zeroToClear - modify 0 - The cancel request is not generated + Disables VBATT low voltage detect function #0 1 - The cancel request is generated + Enables VBATT low voltage detect function #1 @@ -66995,517 +78873,687 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - DPSIFR2 - Deep Standby Interrupt Flag Register 2 - 0x408 + VBATTMONR + Battery Backup Voltage Monitor Register + 0x41E 8 - read-write + read-only 0x00 - 0xFF + 0xff - DNMIF - NMI Pin Deep Standby Cancel Flag - 4 - 4 - read-write - zeroToClear - modify + VBATTMON + VBATT Voltage Monitor Bit + 0 + 0 + read-only 0 - The cancel request is not generated + VBATT ≥ Vbattldet #0 1 - The cancel request is generated + VBATT < Vbattldet #1 + + + + VBTBER + VBATT Backup Enable Register + 0x4C0 + 8 + read-write + 0x08 + 0xff + - DRTCAIF - RTC Alarm interrupt Deep Standby Cancel Flag + VBAE + VBATT backup register access enable bit 3 3 read-write - zeroToClear - modify 0 - The cancel request is not generated + Disable to access VBTBKR #0 1 - The cancel request is generated + Enable to access VBTBKR #1 + + + + + + R_TSN + Temperature Sensor + 0x407EC000 + + 0x00000228 + 0x002 + registers + + + + TSCDRH + Temperature Sensor Calibration Data Register H + 0x229 + 8 + read-only + 0x00 + 0x00 + - DTRTCIIF - RTC Interval interrupt Deep Standby Cancel Flag - 2 - 2 - read-write - zeroToClear - modify - - - 0 - The cancel request is not generated - #0 - - - 1 - The cancel request is generated - #1 - - + TSCDRH + The calibration data stores the higher 8 bits of the convertedvalue. + 0 + 7 + read-only + + + + TSCDRL + Temperature Sensor Calibration Data Register L + 0x228 + 8 + read-only + 0x00 + 0x00 + - DLVD2IF - LVD2 Deep Standby Cancel Flag - 1 - 1 - read-write - zeroToClear - modify - - - 0 - The cancel request is not generated - #0 - - - 1 - The cancel request is generated - #1 - - + TSCDRL + The calibration data stores the lower 8 bits of the convertedvalue. + 0 + 7 + read-only + + + + + + R_TSN_CAL + Temperature Sensor + 0x407FB17C + + 0x00 + 0x04 + registers + + + + TSCDR + Temperature Sensor 32 bit Calibration Data Register + 0x00 + 32 + read-only + 0x00 + 0x00 + - DLVD1IF - LVD1 Deep Standby Cancel Flag + TSCDR + The 32 bit TSCDR register stores temperature sensor calibration converted value. 0 - 0 - read-write - zeroToClear - modify - - - 0 - The cancel request is not generated - #0 - - - 1 - The cancel request is generated - #1 - - + 31 + read-only + + + + R_TSN_CTRL + Temperature Sensor + 0x4005D000 + + 0x00 + 1 + registers + + - DPSIFR3 - Deep Standby Interrupt Flag Register 3 - 0x409 + TSCR + Temperature Sensor Control Register + 0x00 8 read-write 0x00 0xFF - DAGT1IF - AGT1 Underflow Deep Standby Cancel Flag - 2 - 2 - read-write - zeroToClear - modify - - - 0 - The cancel request is not generated - #0 - - - 1 - The cancel request is generated - #1 - - - - - DUSBHSIF - USBHS Suspend/Resume Deep Standby Cancel Flag - 1 - 1 + TSEN + Temperature Sensor Output Enable + 7 + 7 read-write - zeroToClear - modify 0 - The cancel request is not generated + Stops the temperature sensor. #0 1 - The cancel request is generated + Starts the temperature sensor. #1 - DUSBFSIF - USBFS Suspend/Resume Deep Standby Cancel Flag - 0 - 0 + TSOE + Temperature Sensor Enable + 4 + 4 read-write - zeroToClear - modify 0 - The cancel request is not generated + Disables output from the temperature sensor to the 12-bit A/D converter. #0 1 - The cancel request is generated + Enables output from the temperature sensor to the 12-bit A/D converter. #1 + + + + R_USB_FS0 + USB 2.0 Module + 0x40090000 + + 0x00000000 + 0x00A + registers + + + 0x0000000C + 0x02 + registers + + + 0x00000014 + 0x010 + registers + + + 0x00000028 + 0x00C + registers + + + 0x00000036 + 0x00E + registers + + + 0x00000046 + 0x00C + registers + + + 0x00000054 + 0x00E + registers + + + 0x00000064 + 0x02 + registers + + + 0x00000068 + 0x02 + registers + + + 0x0000006C + 0x016 + registers + + + 0x00000090 + 0x014 + registers + + + 0x000000B0 + 0x02 + registers + + + 0x000000C4 + 0x02 + registers + + + 0x000000CC + 0x02 + registers + + + 0x000000D0 + 0x014 + registers + + + 0x000000F0 + 0x04 + registers + + + 0x00000100 + 0x004 + registers + + + 0x00000140 + 0x02 + registers + + + 0x00000144 + 0x008 + registers + + + 0x00000160 + 0x00C + registers + + + 0x00000400 + 0x008 + registers + + + + 5 + 0x004 + PIPE_TR[%s] + Pipe Transaction Counter Registers + 0x090 + + E + Pipe Transaction Counter Enable Register + 0x00 + 16 + read-write + 0x0000 + 0xFFFF + + + TRENB + Transaction Counter Enable + 9 + 9 + read-write + + + 0 + Transaction counter is disabled. + #0 + + + 1 + Transaction counter is enabled. + #1 + + + + + TRCLR + Transaction Counter Clear + 8 + 8 + read-write + + + 0 + Invalid + #0 + + + 1 + The current counter value is cleared. + #1 + + + + + + + N + Pipe Transaction Counter Register + 0x02 + 16 + read-write + 0x0000 + 0xFFFF + + + TRNCNT + Transaction Counter + 0 + 15 + read-write + + + + - 2 - 1 - DPSIEGR%s - Deep Standby Interrupt Edge Register %s - 0x40A - 8 + SYSCFG + System Configuration Control Register + 0x000 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - 8 - 1 - DIRQ%sEG - IRQ-DS Pin Edge Select - 0 - 0 + SCKE + USB Clock Enable + 10 + 10 read-write 0 - A cancel request is generated at a falling edge + Clock supply to the USBFS stopped #0 1 - A cancel request is generated at a rising edge + Clock supply to the USBFS enabled. #1 - - - - DPSIEGR2 - Deep Standby Interrupt Edge Register 2 - 0x40C - 8 - read-write - 0x00 - 0xFF - - DNMIEG - NMI Pin Edge Select - 4 - 4 + CNEN + CNEN Single End Receiver Enable + 8 + 8 read-write 0 - A cancel request is generated at a falling edge + Single end receiver disabled #0 1 - A cancel request is generated at a rising edge + Single end receiver enabled #1 - DLVD2IEG - LVD2 Edge Select - 1 - 1 + DCFM + Controller Function Select + 6 + 6 read-write 0 - A cancel request is generated when VCC<Vdet2 (fall) is detected + Device controller selected #0 1 - A cancel request is generated when VCC>=Vdet2 (rise) is detected + Host controller selected. #1 - DLVD1IEG - LVD1 Edge Select - 0 - 0 + DRPD + D+/D- Line Resistor Control + 5 + 5 read-write 0 - A cancel request is generated when VCC<Vdet1 (fall) is detected + Line pull-down disabled #0 1 - A cancel request is generated when VCC>=Vdet1 (rise) is detected + Line pull-down enabled. #1 - - - - DPSBYCR - Deep Standby Control Register - 0x400 - 8 - read-write - 0x01 - 0xFF - - DPSBY - Deep Software Standby - 7 - 7 + DPRPU + D+ Line Resistor Control + 4 + 4 read-write 0 - Sleep mode (SBYCR.SSBY=0) / Software Standby mode (SBYCR.SSBY=1) + Line pull-down disabled #0 1 - Sleep mode (SBYCR.SSBY=0) / Deep Software Standby mode (SBYCR.SSBY=1) + Line pull-down enabled. #1 - IOKEEP - I/O Port Retention - 6 - 6 + DMRPU + D- Line Resistor Control + 3 + 3 read-write 0 - When the Deep Software Standby mode is canceled, the I/O ports are in the reset state. + Line pull-up disabled #0 1 - When the Deep Software Standby mode is canceled, the I/O ports are in the same state as in the Deep Software Standby mode. + Line pull-up enabled. #1 - DEEPCUT - Power-Supply Control + USBE + USB Operation Enable 0 - 1 + 0 read-write - 00 - Power to the standby RAM, Low-speed on-chip oscillator, AGTn, and USBFS/HS resume detecting unit is supplied in deep software standby mode. - #00 - - - 01 - Power to the standby RAM, Low-speed on-chip oscillator, AGTn, and USBFS/HS resume detecting unit is not supplied in deep software standby mode. - #01 - - - 10 - Setting prohibited. - #10 + 0 + Disabled + #0 - 11 - Power to the standby RAM, Low-speed on-chip oscillator, AGTn, and USBFS/HS resume detecting unit is supplied in deep software standby mode. In addition, LVD is disabled and the low power function in a power-on reset circuit is enabled. - #11 + 1 + Enabled. + #1 - SYOCDCR - System Control OCD Control Register - 0x40E - 8 + BUSWAIT + CPU Bus Wait Register + 0x002 + 16 read-write - 0x00 - 0xFE + 0x000F + 0x3F3F - DBGEN - Debugger Enable bit - 7 - 7 + BWAIT + CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 access cycles) + 0 + 3 read-write - 0 - On-chip debugger is disabled - #0 - - - 1 - On-chip debugger is enabled - #1 + BWAIT + BWAIT wait(s) ( BWAIT + 2 access cycles ) + true + + + + SYSSTS0 + System Configuration Status Register 0 + 0x004 + 16 + read-only + 0x0000 + 0x0000 + + + OVCMON + External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe OCVMON[1] bit indicates the status of the USBHS_OVRCURA pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB pin. + 14 + 15 + read-only + - DOCDF - Deep Standby OCD flag - 0 - 0 - read-write - zeroToClear - modify + HTACT + USB Host Sequencer Status Monitor + 6 + 6 + read-only 0 - On-chip debugger is disabled + Host sequencer completely stopped #0 1 - On-chip debugger is enabled + Host sequencer not completely stopped. #1 - - - - MOMCR - Main Clock Oscillator Mode Oscillation Control Register - 0x413 - 8 - read-write - 0x00 - 0xFF - - AUTODRVEN - Main Clock Oscillator Drive Capability Auto Switching Enable - 7 - 7 - read-write + SOFEA + SOF Active Monitor While Host Controller Function is Selected. + 5 + 5 + read-only 0 - Disable + SOF output is stopped. #0 1 - Enable. + SOF output is operating. #1 - MOSEL - Main Clock Oscillator Switching - 6 - 6 - read-write + IDMON + External ID0 Input Pin Monitor + 2 + 2 + read-only 0 - Resonator + USB0_ID pin is low #0 1 - External clock input + USB0_ID pin is high #1 - MODRV0 - Main Clock Oscillator Drive Capability 0 Switching - 4 - 5 - read-write + LNST + USB Data Line Status Monitor + 0 + 1 + read-only 00 - 20MHz to 24MHz + SE0 #00 01 - 16MHz to 20MHz + K-State (FS) / J-State(LS) #01 10 - 8MHz to 16MHz + J-State(FS) / K-State(LS) #10 11 - 8MHz + SE1 #11 + + + + PLLSTA + PLL Status Register + 0x006 + 16 + read-only + 0x0000 + 0x0001 + - MODRV1 - Main Clock Oscillator Drive Capability 1 Switching - 3 - 3 - read-write + PLLLOCK + PLL Lock Flag + 0 + 0 + read-only 0 - 10 MHz to 20 MHz + PLL is not locked. #0 1 - 1 MHz to 10 MHz. + PLL is locked. #1 @@ -67513,1427 +79561,1404 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - RSTSR0 - Reset Status Register 0 - 0x410 - 8 + DVSTCTR0 + Device State Control Register 0 + 0x008 + 16 read-write - 0x00 - 0x70 + 0x0000 + 0xFFFF - DPSRSTF - Deep Software Standby Reset FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 7 - 7 + HNPBTOA + Host Negotiation Protocol (HNP) Control This bit is used when switching from device B to device A while in OTG mode. If the HNPBTOA bit is 1, the internal function control keeps the suspended state until the HNP processing ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is set. + 11 + 11 read-write - zeroToClear - modify 0 - Deep software standby mode cancelation not requested by an interrupt. + Normal Operation #0 1 - Deep software standby mode cancelation requested by an interrupt. + Switching from device B to device A is enabled #1 - LVD2RF - Voltage Monitor 2 Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 3 - 3 + EXICEN + USB_EXICEN Output Pin Control + 10 + 10 read-write - zeroToClear - modify 0 - Voltage Monitor 2 reset not detected. + External USB_EXICEN pin outputs low #0 1 - Voltage Monitor 2 reset detected. + External USB_EXICEN pin outputs high #1 - LVD1RF - Voltage Monitor 1 Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 2 - 2 + VBUSEN + USB_VBUSEN Output Pin Control + 9 + 9 read-write - zeroToClear - modify 0 - Voltage Monitor 1 reset not detected. + External USB_VBUSEN pin outputs low #0 1 - Voltage Monitor 1 reset detected. + External USB_VBUSEN pin outputs high #1 - LVD0RF - Voltage Monitor 0 Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 1 - 1 + WKUP + Wakeup Output + 8 + 8 read-write - zeroToClear - modify 0 - Voltage Monitor 0 reset not detected. + Remote wakeup signal is not output. #0 1 - Voltage Monitor 0 reset detected. + Remote wakeup signal is output. #1 - PORF - Power-On Reset Detect FlagNOTE: Writable only to clear the flag. Confirm the value is 1 and then write 0. - 0 - 0 + RWUPE + Wakeup Detection Enable + 7 + 7 read-write - zeroToClear - modify 0 - Power-on reset not detected. + Downstream port wakeup is disabled. #0 1 - Power-on reset detected. + Downstream port wakeup is enabled. #1 - - - - RSTSR2 - Reset Status Register 2 - 0x411 - 8 - read-write - 0x00 - 0xFE - - CWSF - Cold/Warm Start Determination Flag - 0 - 0 + USBRST + USB Bus Reset Output + 6 + 6 read-write - oneToSet - modify 0 - Cold start + USB bus reset signal is not output. #0 1 - Warm start + USB bus reset signal is output. #1 - - - - LVCMPCR - Voltage Monitor Circuit Control Register - 0x417 - 8 - read-write - 0x00 - 0xFF - - LVD2E - Voltage Detection 2 Enable - 6 - 6 + RESUME + Resume Output + 5 + 5 read-write 0 - Voltage detection 2 circuit disabled + Resume signal is not output. #0 1 - Voltage detection 2 circuit enabled + Resume signal is output. #1 - LVD1E - Voltage Detection 1 Enable - 5 - 5 + UACT + USB Bus Enable + 4 + 4 read-write 0 - Voltage detection 1 circuit disabled + Downstream port is disabled (SOF transmission is disabled). #0 1 - Voltage detection 1 circuit enabled + Downstream port is enabled (SOF transmission is enabled). #1 - - - - LVDLVLR - Voltage Detection Level Select Register - 0x418 - 8 - read-write - 0xF3 - 0xFF - - LVD2LVL - Voltage Detection 2 Level Select (Standard voltage during fall in voltage) - 5 - 7 - read-write + RHST + USB Bus Reset Status + 0 + 2 + read-only - 101 - 2.99V (Vdet2_1) - #101 + 000 + Communication speed not determined + #000 - 110 - 2.92V (Vdet2_2) - #110 + 001 + Low-speed connection(When the host controller is selected) /USB bus reset in progress( When the function controller is selected) + #001 - 111 - 2.85V (Vdet2_3) - #111 + 010 + Full-speed connection(When the host controller is selected) /USB bus reset in progress or full-speed connection(When the function controller is selected) + #010 + + + 011 + Setting prohibited + #011 others - Settings other than above are prohibited. + USB bus reset in progress(When the host controller function is selected) true + + + + TESTMODE + USB Test Mode Register + 0x00C + 16 + read-write + 0x0000 + 0x000F + - LVD1LVL - Voltage Detection 1 Level Select (Standard voltage during fall in voltage) + UTST + Test Mode 0 - 4 + 3 read-write - 10001 - 2.99V (Vdet1_1) - #10001 + 0000 + Normal operation + #0000 - 10010 - 2.92V (Vdet1_2) - #10010 + 0001 + Test_J TestMode(When the Function Controller Function is Selected) + #0001 - 10011 - 2.85V (Vdet1_3) - #10011 + 0010 + Test_K TestMode(When the Function Controller Function is Selected) + #0010 - others - Settings other than above are prohibited. - true + 0011 + Test_SE0_NAK TestMode(When the Function Controller Function is Selected) + #0011 - - - - - - 2 - 0x1 - 1,2 - LVD%sCR0 - Voltage Monitor %s Circuit Control Register 0 - 0x41A - 8 - read-write - 0x8A - 0xF7 - - - RN - Voltage Monitor Reset Negate Select - 7 - 7 - read-write - - 0 - Negation follows a stabilization time (tLVD) after VCC > Vdet is detected. - #0 + 0100 + Test_Packet TestMode(When the Function Controller Function is Selected) + #0100 - 1 - Negation follows a stabilization time (tLVD) after assertion of the LVD reset. - #1 + 0101 + Reserved TestMode(When the Function Controller Function is Selected) + #0101 - - - - RI - Voltage Monitor Circuit Mode Select - 6 - 6 - read-write - - 0 - Voltage Monitor interrupt during Vdet1 passage - #0 + 0110 + Reserved TestMode(When the Function Controller Function is Selected) + #0110 - 1 - Voltage Monitor reset enabled when the voltage falls to and below Vdet1 - #1 + 0111 + Reserved TestMode(When the Function Controller Function is Selected) + #0111 - - - - FSAMP - Sampling Clock Select - 4 - 5 - read-write - - 00 - 1/2 LOCO frequency - #00 + 1001 + Test_J TestMode(When the Host Controller Function is Selected) + #1001 - 01 - 1/4 LOCO frequency - #01 + 1010 + Test_K TestMode(When the Host Controller Function is Selected) + #1010 - 10 - 1/8 LOCO frequency - #10 + 1011 + Test_SE0_NAK TestMode(When the Host Controller Function is Selected) + #1011 - 11 - 1/16 LOCO frequency - #11 + 1100 + Test_Packet TestMode(When the Host Controller Function is Selected) + #1100 + + + 1101 + Test_Force_EnableTestMode(When the Host Controller Function is Selected) + #1101 + + + 1110 + Reserved TestMode(When the Host Controller Function is Selected) + #1110 + + + 1111 + Reserved TestMode(When the Host Controller Function is Selected) + #1111 - - CMPE - Voltage Monitor Circuit Comparison Result Output Enable - 2 - 2 + + + + CFIFOL + CFIFO Port Register L + 0x014 + 16 + read-write + 0x0000 + 0xFFFF + + + + CFIFOLL + CFIFO Port Register LL + CFIFOL + 0x014 + 8 + read-write + 0x00 + 0xFF + + + + CFIFO + CFIFO Port Register + CFIFOL + 0x014 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + + CFIFOH + CFIFO Port Register H + CFIFO + 0x016 + 16 + read-write + 0x0000 + 0xFFFF + + + + CFIFOHH + CFIFO Port Register HH + CFIFOH + 0x017 + 8 + read-write + 0x00 + 0xFF + + + + D0FIFOL + D0FIFO Port Register L + 0x018 + 16 + read-write + 0x0000 + 0xFFFF + + + + D0FIFOLL + D0FIFO Port Register LL + D0FIFOL + 0x018 + 8 + read-write + 0x00 + 0xFF + + + + D0FIFO + D0FIFO Port Register + D0FIFOL + 0x018 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + + D0FIFOH + D0FIFO Port Register H + D0FIFO + 0x01A + 16 + read-write + 0x0000 + 0xFFFF + + + + D0FIFOHH + D0FIFO Port Register HH + D0FIFOH + 0x01B + 8 + read-write + 0x00 + 0xFF + + + + D1FIFOL + D1FIFO Port Register L + 0x01C + 16 + read-write + 0x0000 + 0xFFFF + + + + D1FIFOLL + D1FIFO Port Register LL + D1FIFOL + 0x01C + 8 + read-write + 0x00 + 0xFF + + + + D1FIFO + D1FIFO Port Register + D1FIFOL + 0x01C + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + + D1FIFOH + D1FIFO Port Register H + D1FIFO + 0x01E + 16 + read-write + 0x0000 + 0xFFFF + + + + D1FIFOHH + D1FIFO Port Register HH + D1FIFOH + 0x01F + 8 + read-write + 0x00 + 0xFF + + + + CFIFOSEL + CFIFO Port Select Register + 0x020 + 16 + read-write + 0x0000 + 0xFFFF + + + RCNT + Read Count Mode + 15 + 15 read-write 0 - Disable voltage monitor 1 circuit comparison result output + The DTLN[8:0] bits (CFIFOCRT.DTLN[8:0], D0FIFOCRT.DTLN[8:0], D1FIFOCRT.DTLN[8:0]) are cleared when all of the receive data has been read from the CFIFO.(In double buffer mode, the DTLN[8:0] bit value is cleared when all the data has been read from only a single plane.) #0 1 - Enable voltage monitor 1 circuit comparison result output. + The DTLN[8:0] bits are decremented each time the receive data is read from the CFIFO. #1 - DFDIS - Voltage Monitor Digital Filter Disable Mode Select - 1 - 1 + REW + Buffer Pointer Rewind + 14 + 14 read-write 0 - Enable digital filter + The buffer pointer is not rewound. #0 1 - Disable digital filter + The buffer pointer is rewound. #1 - RIE - Voltage Monitor Interrupt/Reset Enable - 0 - 0 + MBW + CFIFO Port Access Bit Width + 10 + 11 read-write 0 - Disable - #0 + 8-bit width + 0 1 - Enable - #1 + 16-bit width + 1 + + + 2 + 32-bit width + 2 - - - - VBTCR1 - VBATT Control Register1 - 0x41F - 8 - read-write - 0x00 - 0xFF - - BPWSWSTP - Battery Power supply Switch Stop - 0 - 0 + BIGEND + CFIFO Port Endian Control + 8 + 8 read-write 0 - Battery Power supply Switch Enable + Little endian #0 1 - Battery Power supply Switch stop + Big endian #1 - - - - SOSCCR - Sub-Clock Oscillator Control Register - 0x480 - 8 - read-write - 0x01 - 0xFF - - SOSTP - Sub-Clock Oscillator Stop - 0 - 0 + ISEL + CFIFO Port Access Direction When DCP is Selected + 5 + 5 read-write 0 - Sub-clock oscillator is operating. + Reading from the buffer memory is selected #0 1 - Sub-clock oscillator is stopped. + Writing to the buffer memory is selected #1 - - - - SOMCR - Sub Clock Oscillator Mode Control Register - 0x481 - 8 - read-write - 0x00 - 0xFF - - SODRV - Sub-Clock Oscillator Drive Capability Switching + CURPIPE + CFIFO Port Access Pipe Specification 0 - 1 + 3 read-write - 00 - Normal mode - #00 - - - 01 - Low power mode 1 - #01 + 0000 + DCP (Default control pipe) + #0000 - 10 - Low power mode 2 - #10 + 0001 + Pipe 1 + #0001 - 11 - Low power mode 3. - #11 + 0010 + Pipe 2 + #0010 - - - - - - LOCOCR - Low-Speed On-Chip Oscillator Control Register - 0x490 - 8 - read-write - 0x00 - 0xFF - - - LCSTP - LOCO Stop - 0 - 0 - read-write - - 0 - LOCO is operating. - #0 + 0011 + Pipe 3 + #0011 - 1 - LOCO is stopped. - #1 + 0100 + Pipe 4 + #0100 - - - - - - LOCOUTCR - LOCO User Trimming Control Register - 0x492 - 8 - read-write - 0x00 - 0xFF - - - LOCOUTRM - LOCO User Trimming 1000_0000 : -128 1000_0001 : -127 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : +126 0111_1111 : +127These bits are added to original LOCO trimming bits - 0 - 7 - read-write - - - - - VBTCR2 - VBATT Control Register2 - 0x4B0 - 8 - read-write - 0x00 - 0xFF - - - VBTLVDLVL - VBATT Pin Voltage Low Voltage Detect Level Select Bit - 6 - 7 - read-write - - 00 - 2.7V - #00 + 0101 + Pipe 5 + #0101 - 01 - Setting prohibited - #01 + 0110 + Pipe 6 + #0110 - 10 - 2.3V - #10 + 0111 + Pipe 7 + #0111 - 11 - 2.1V - #11 + 1000 + Pipe 8 + #1000 - - - - VBTLVDEN - VBATT Pin Low Voltage Detect Enable Bit - 4 - 4 - read-write - - 0 - VBATT pin low voltage detect disable - #0 + 1001 + Pipe 9 + #1001 - 1 - VBATT pin low voltage detect enable - #1 + others + Setting prohibited + true - VBTSR - VBATT Status Register - 0x4B1 - 8 + CFIFOCTR + CFIFO Port Control Register + 0x022 + 16 read-write - 0x01 - 0xEC + 0x0000 + 0xFFFF - VBTRVLD - VBATT_R Valid - 4 - 4 - read-only + BVAL + Buffer Memory Valid Flag + 15 + 15 + read-write 0 - VBATT_R area not valid + Invalid #0 1 - VBATT_R area valid + Writing ended #1 - VBTBLDF - VBATT Battery Low voltage Detect Flag - 1 - 1 + BCLR + CPU Buffer ClearNote: Only 0 can be read. + 14 + 14 read-write - zeroToClear - modify 0 - VBATT pin low voltage not detected + Does not operate #0 1 - VBATT pin low voltage detected. + FIFO buffer cleared on the CPU side. #1 - VBTRDF - VBAT_R Reset Detect Flag - 0 - 0 - read-write - zeroToClear - modify + FRDY + FIFO Port Ready + 13 + 13 + read-only 0 - VBATT_R voltage power-on reset not detected + FIFO port access is disabled. #0 1 - VBATT_R selected voltage power-on reset detected. + FIFO port access is enabled. #1 + + DTLN + Receive Data LengthIndicates the length of the receive data. + 0 + 11 + read-only + - VBTCMPCR - VBATT Comparator Control Register - 0x4B2 - 8 + D0FIFOSEL + D0FIFO Port Select Register + 0x028 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - VBTCMPE - VBATT pin low voltage detect circuit output enable - 0 - 0 + RCNT + Read Count Mode + 15 + 15 read-write 0 - VBATT pin low voltage detect circuit output disabled + The DTLN[8:0] bits (CFIFOCRT.DTLN[8:0], D0FIFOCRT.DTLN[8:0], D1FIFOCRT.DTLN[8:0]) are cleared when all of the receive data has been read from the DnFIFO.(In double buffer mode, the DTLN bit Value is cleared when all the data has been read from only a single plane.) #0 1 - VBATT pin low voltage detect circuit output enabled + The DTLN[8:0] bits are decremented each time the receive data is read from the DnFIFO. (n = 0, 1) #1 - - - - VBTLVDICR - VBATT Pin Low Voltage Detect Interrupt Control Register - 0x4B4 - 8 - read-write - 0x00 - 0xFF - - VBTLVDISEL - Pin Low Voltage Detect Interrupt Select bit - 1 - 1 + REW + Buffer Pointer RewindNote: Only 0 can be read. + 14 + 14 read-write 0 - Non Maskable Interrupt + The buffer pointer is not rewound. #0 1 - Maskable Interrupt + The buffer pointer is rewound. #1 - VBTLVDIE - VBATT Pin Low Voltage Detect Interrupt Enable bit - 0 - 0 + DCLRM + Auto Buffer Memory Clear Mode Accessed after Specified Pipe Data is Read + 13 + 13 read-write 0 - VBATT Pin Low Voltage Detect Interrupt Disable + Auto buffer clear mode is disabled. #0 1 - VBATT Pin Low Voltage Detect Interrupt Enable + Auto buffer clear mode is enabled. #1 - - - - VBTWCTLR - VBATT Wakeup function Control Register - 0x4B6 - 8 - read-write - 0x00 - 0xFF - - VWEN - VBATT wakeup enable - 0 - 0 + DREQE + DMA/DTC Transfer Request Enable + 12 + 12 read-write 0 - Disable Wakeup function + DMA/DTC transfer request is disabled. #0 1 - Enable Wakeup function + DMA/DTC transfer request is enabled. #1 - - - - VBTWCH0OTSR - VBATT Wakeup I/O 0 Output Trigger Select Register - 0x4B8 - 8 - read-write - 0x00 - 0xFF - - CH0VAGTUTE - CH0 Output AGT(ch1) underflow Signal Enable - 5 - 5 + MBW + FIFO Port Access Bit Width + 10 + 11 read-write 0 - VBATT CH0 wakeup triggered by the AGT(ch1) underflow signal is disabled - #0 + 8-bit width + 0 1 - VBATT CH0 wakeup triggered by the AGT(ch1) underflow signal is enabled - #1 + 16-bit width + 1 + + + 2 + 32-bit width + 2 - CH0VRTCATE - VBATWIO0 Output RTC Alarm Signal Enable - 4 - 4 + BIGEND + FIFO Port Endian Control + 8 + 8 read-write 0 - VBATT wakeup I/O 0 output trigger by the RTC alarm signal is disabled + Little endian #0 1 - VBATT wakeup I/O 0 output trigger by the RTC alarm signal is enabled. + Big endian #1 - CH0VRTCTE - VBATWIO0 Output RTC Periodic Signal Enable - 3 + CURPIPE + FIFO Port Access Pipe Specification + 0 3 read-write - 0 - VBATT wakeup I/O 0 output trigger by the RTC periodic signal is disabled - #0 + 0000 + DCP (Default control pipe) + #0000 - 1 - VBATT wakeup I/O 0 output trigger by the RTC periodic signal is enabled. - #1 + 0001 + Pipe 1 + #0001 - - - - CH0VCH2TE - VBATWIO0 Output VBATWIO2 Trigger Enable - 2 - 2 - read-write - - 0 - VBATT wakeup I/O 0 output trigger by the VBATWIO2 pin is disabled - #0 + 0010 + Pipe 2 + #0010 - 1 - VBATT wakeup I/O 0 output trigger by the VBATWIO2 pin is enabled. - #1 + 0011 + Pipe 3 + #0011 - - - - CH0VCH1TE - VBATWIO0 Output VBATWIO1 Trigger Enable - 1 - 1 - read-write - - 0 - VBATT wakeup I/O 0 output trigger by the VBATWIO1 pin is disabled - #0 + 0100 + Pipe 4 + #0100 - 1 - VBATT wakeup I/O 0 output trigger by the VBATWIO1 pin is enabled. - #1 + 0101 + Pipe 5 + #0101 + + + 0110 + Pipe 6 + #0110 + + + 0111 + Pipe 7 + #0111 + + + 1000 + Pipe 8 + #1000 + + + 1001 + Pipe 9 + #1001 + + + others + Setting prohibited + true - VBTWCH1OTSR - VBATT Wakeup I/O 1 Output Trigger Select Register - 0x4B9 - 8 + D0FIFOCTR + D0FIFO Port Control Register + 0x02A + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - CH1VAGTUTE - CH1 Output AGT(ch1) underflow Signal Enable - 5 - 5 + BVAL + Buffer Memory Valid Flag + 15 + 15 read-write 0 - VBATT CH1 wakeup triggered by the AGT(ch1) underflow signal is disabled + Invalid #0 1 - VBATT CH1 wakeup triggered by the AGT(ch1) underflow signal is enabled + Writing ended #1 - CH1VRTCATE - VBATWIO1 Output RTC Alarm Signal Enable - 4 - 4 + BCLR + CPU Buffer ClearNote: Only 0 can be read. + 14 + 14 read-write 0 - VBATT wakeup I/O 1 output trigger by the RTC alarm signal is disabled + Does not operate #0 1 - VBATT wakeup I/O 1 output trigger by the RTC alarm signal is enabled. + FIFO buffer cleared on the CPU side. #1 - CH1VRTCTE - VBATWIO1 Output RTC Periodic Signal Enable - 3 - 3 - read-write + FRDY + FIFO Port Ready + 13 + 13 + read-only 0 - VBATT wakeup I/O 1 output trigger by the RTC periodic signal is disabled + FIFO port access is disabled. #0 1 - VBATT wakeup I/O 1 output trigger by the RTC periodic signal is enabled + FIFO port access is enabled. #1 - CH1VCH2TE - VBATWIO1 Output VBATWIO2 Trigger Enable - 2 - 2 + DTLN + Receive Data LengthIndicates the length of the receive data. + 0 + 11 + read-only + + + + + D1FIFOSEL + D1FIFO Port Select Register + 0x02C + 16 + read-write + 0x0000 + 0xFFFF + + + RCNT + Read Count Mode + 15 + 15 read-write 0 - VBATT wakeup I/O 1 output trigger by the VBATWIO2 pin is disabled + The DTLN[8:0] bits (CFIFOCRT.DTLN[8:0], D0FIFOCRT.DTLN[8:0], D1FIFOCRT.DTLN[8:0]) are cleared when all of the receive data has been read from the DnFIFO.(In double buffer mode, the DTLN bit Value is cleared when all the data has been read from only a single plane.) #0 1 - VBATT wakeup I/O 1 output trigger by the VBATWIO2 pin is enabled. + The DTLN[8:0] bits are decremented each time the receive data is read from the DnFIFO. (n = 0, 1) #1 - CH1VCH0TE - VBATWIO1 Output VBATWIO0 Trigger Enable - 0 - 0 + REW + Buffer Pointer Rewind + 14 + 14 read-write 0 - VBATT wakeup I/O 1 output trigger by the VBATWIO0 pin is disabled + The buffer pointer is not rewound. #0 1 - VBATT wakeup I/O 1 output trigger by the VBATWIO0 pin is enabled. + The buffer pointer is rewound. #1 - - - - VBTWCH2OTSR - VBATT Wakeup I/O 2 Output Trigger Select Register - 0x4BA - 8 - read-write - 0x00 - 0xFF - - CH2VAGTUTE - CH2 Output AGT(CH2) underflow Signal Enable - 5 - 5 + DCLRM + Auto Buffer Memory Clear Mode Accessed after Specified Pipe Data is Read + 13 + 13 read-write 0 - VBATT CH2 wakeup triggered by the AGT(CH2) underflow signal is disabled + Auto buffer clear mode is disabled. #0 1 - VBATT CH2 wakeup triggered by the AGT(CH2) underflow signal is enabled + Auto buffer clear mode is enabled. #1 - CH2VRTCATE - VBATWIO2 Output RTC Alarm Signal Enable - 4 - 4 + DREQE + DMA/DTC Transfer Request Enable + 12 + 12 read-write 0 - VBATT wakeup I/O 2 output trigger by the RTC alarm signal is disabled + DMA/DTC transfer request is disabled. #0 1 - VBATT wakeup I/O 2 output trigger by the RTC alarm signal is enabled. + DMA/DTC transfer request is enabled. #1 - CH2VRTCTE - VBATWIO2 Output RTC Periodic Signal Enable - 3 - 3 + MBW + FIFO Port Access Bit Width + 10 + 11 read-write 0 - VBATT wakeup I/O 2 output trigger by the RTC periodic signal is disabled - #0 + 8-bit width + 0 1 - VBATT wakeup I/O 2 output trigger by the RTC periodic signal is enabled. - #1 + 16-bit width + 1 + + + 2 + 32-bit width + 2 - CH2VCH1TE - VBATWIO2 Output VBATWIO1 Trigger Enable - 1 - 1 + BIGEND + FIFO Port Endian Control + 8 + 8 read-write 0 - VBATT wakeup I/O 2 output trigger by the VBATWIO1 pin is disabled + Little endian #0 1 - VBATT wakeup I/O 2 output trigger by the VBATWIO1 pin is enabled. + Big endian #1 - CH2VCH0TE - VBATWIO2 Output VBATWIO0 Trigger Enable + CURPIPE + FIFO Port Access Pipe Specification 0 - 0 + 3 read-write - 0 - VBATT wakeup I/O 2 output trigger by the VBATWIO0 pin is disabled - #0 + 0000 + DCP (Default control pipe) + #0000 - 1 - VBATT wakeup I/O 2 output trigger by the VBATWIO0 pin is enabled. - #1 + 0001 + Pipe 1 + #0001 - - - - - - VBTICTLR - VBATT Input Control Register - 0x4BB - 8 - read-write - 0x00 - 0xF8 - - - VCH2INEN - RTCIC2 Input Enable - 2 - 2 - read-write - - 0 - Disabled - #0 + 0010 + Pipe 2 + #0010 - 1 - Enabled - #1 + 0011 + Pipe 3 + #0011 - - - - VCH1INEN - RTCIC1 Input Enable - 1 - 1 - read-write - - 0 - Disabled - #0 + 0100 + Pipe 4 + #0100 - 1 - Enabled - #1 + 0101 + Pipe 5 + #0101 - - - - VCH0INEN - RTCIC0 Input Enable - 0 - 0 - read-write - - 0 - Disabled - #0 + 0110 + Pipe 6 + #0110 - 1 - Enabled - #1 + 0111 + Pipe 7 + #0111 + + + 1000 + Pipe 8 + #1000 + + + 1001 + Pipe 9 + #1001 + + + others + Setting prohibited + true - VBTOCTLR - VBATT Output Control Register - 0x4BC - 8 + D1FIFOCTR + D1FIFO Port Control Register + 0x02E + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - VOUT2LSEL - VBATT Wakeup I/O 2 Output Level Selection - 5 - 5 + BVAL + Buffer Memory Valid Flag + 15 + 15 read-write 0 - Output L before VBATT wake up trigger + Invalid #0 1 - Output H before VBATT wake up trigger + Writing ended #1 - VCOU1LSEL - VBATT Wakeup I/O 1 Output Level Selection - 4 - 4 + BCLR + CPU Buffer ClearNote: Only 0 can be read. + 14 + 14 read-write 0 - Output L before VBATT wake up trigger + Does not operate #0 1 - Output H before VBATT wake up trigger + FIFO buffer cleared on the CPU side. #1 - VOUT0LSEL - VBATT Wakeup I/O 0 Output Level Selection - 3 - 3 - read-write + FRDY + FIFO Port Ready + 13 + 13 + read-only 0 - Output L before VBATT wakeup trigger + FIFO port access is disabled. #0 1 - Output H before VBATT wakeup trigger + FIFO port access is enabled. #1 - VCH2OEN - VBATT Wakeup I/O 2 Output Enable - 2 - 2 - read-write - - - 0 - VBATWIO2 output disabled - #0 - - - 1 - VBATWIO2 output enabled - #1 - - + DTLN + Receive Data LengthIndicates the length of the receive data. + 0 + 11 + read-only + + + + INTENB0 + Interrupt Enable Register 0 + 0x030 + 16 + read-write + 0x0000 + 0xFFFF + - VCH1OEN - VBATT Wakeup I/O 1 Output Enable - 1 - 1 + VBSE + VBUS Interrupt Enable + 15 + 15 read-write 0 - VBATWIO1 output disabled + Interrupt output disabled #0 1 - VBATWIO1 output enabled + Interrupt output enabled #1 - VCH0OEN - VBATT Wakeup I/O 0 Output Enable - 0 - 0 + RSME + Resume Interrupt Enable + 14 + 14 read-write 0 - VBATWIO0 output disabled + Interrupt output disabled #0 1 - VBATWIO0 output enabled + Interrupt output enabled #1 - - - - VBTWTER - VBATT Wakeup Trigger source Enable Register - 0x4BD - 8 - read-write - 0x00 - 0xFF - - VAGTUE - AGT(ch1) underflow Signal Enable - 5 - 5 + SOFE + Frame Number Update Interrupt Enable + 13 + 13 read-write 0 - VBATT wakeup triggered by the AGT(ch1) underflow signal is disabled + Interrupt output disabled #0 1 - VBATT wakeup triggered by the AGT(ch1) underflow signal is enabled + Interrupt output enabled #1 - VRTCAE - RTC Alarm Signal Enable - 4 - 4 + DVSE + Device State Transition Interrupt Enable + 12 + 12 read-write 0 - VBATT wakeup triggered by RTC alarm signal is disabled + Interrupt output disabled #0 1 - VBATT wakeup triggered by RTC alarm signal is enabled. + Interrupt output enabled #1 - VRTCIE - RTC Periodic Signal Enable - 3 - 3 + CTRE + Control Transfer Stage Transition Interrupt Enable + 11 + 11 read-write 0 - VBATT wakeup triggered by RTC periodic signal is disabled + Interrupt output disabled #0 1 - VBATT wakeup triggered by RTC periodic signal is enabled. + Interrupt output enabled #1 - VCH2E - VBATWIO2 Pin Enable - 2 - 2 + BEMPE + Buffer Empty Interrupt Enable + 10 + 10 read-write 0 - VBATT wakeup triggered by the VBATWIO2 pin is disabled + Interrupt output disabled #0 1 - VBATT wakeup triggered by the VBATWIO2 pin is enabled. + Interrupt output enabled #1 - VCH1E - VBATWIO1 Pin Enable - 1 - 1 + NRDYE + Buffer Not Ready Response Interrupt Enable + 9 + 9 read-write 0 - VBATT wakeup triggered by the VBATWIO1 pin is disabled + Interrupt output disabled #0 1 - VBATT wakeup triggered by the VBATWIO1 pin is enabled. + Interrupt output enabled #1 - VCH0E - VBATWIO0 Pin Enable - 0 - 0 + BRDYE + Buffer Ready Interrupt Enable + 8 + 8 read-write 0 - VBATT wakeup triggered by the VBATWIO0 pin is disabled + Interrupt output disabled #0 1 - VBATT wakeup triggered by the VBATWIO0 pin is enabled. + Interrupt output enabled #1 @@ -68941,204 +80966,162 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - VBTWEGR - VBATT Wakeup Trigger source Edge Register - 0x4BE - 8 + INTENB1 + Interrupt Enable Register 1 + 0x032 + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - VCH2EG - VBATWIO2 Wakeup Trigger Source Edge Select - 2 - 2 - read-write - - - 0 - Wakeup trigger is generated at a falling edge - #0 - - - 1 - Wakeup trigger is generated at a rising edge. - #1 - - - - - VCH1EG - VBATWIO1 Wakeup Trigger Source Edge Select - 1 - 1 + OVRCRE + Overcurrent Input Change Interrupt Enable + 15 + 15 read-write 0 - Wakeup trigger is generated at a falling edge + Interrupt output disabled #0 1 - Wakeup trigger is generated at a rising edge. + Interrupt output enabled #1 - VCH0EG - VBATWIO0 Wakeup Trigger Source Edge Select - 0 - 0 + BCHGE + USB Bus Change Interrupt Enable + 14 + 14 read-write 0 - Wakeup trigger is generated at a falling edge + Interrupt output disabled #0 1 - Wakeup trigger is generated at a rising edge. + Interrupt output enabled #1 - - - - VBTWFR - VBATT Wakeup trigger source Flag Register - 0x4BF - 8 - read-write - 0x00 - 0xFF - - VAGTUF - AGT(ch1) underflow VBATT Wakeup Trigger Flag - 5 - 5 + DTCHE + Disconnection Detection Interrupt Enable + 12 + 12 read-write - zeroToClear - modify 0 - No wakeup trigger by the AGT(ch1) underflow is generated + Interrupt output disabled #0 1 - A wakeup trigger by the AGT(ch1) underflow is generated + Interrupt output enabled #1 - VRTCAF - VBATT RTC-Alarm Wakeup Trigger Flag - 4 - 4 + ATTCHE + Connection Detection Interrupt Enable + 11 + 11 read-write - zeroToClear - modify 0 - No wakeup trigger by the RTC alarm is generated + Interrupt output disabled #0 1 - A wakeup trigger by the RTC alarm is generated + Interrupt output enabled #1 - VRTCIF - VBATT RTC-Interval Wakeup Trigger Flag - 3 - 3 + EOFERRE + EOF Error Detection Interrupt Enable + 6 + 6 read-write - zeroToClear - modify 0 - No wakeup trigger by the RTC interval is generated + Interrupt output disabled #0 1 - A wakeup trigger by the RTC interval is generated + Interrupt output enabled #1 - VCH2F - VBATWIO2 Wakeup Trigger Flag - 2 - 2 + SIGNE + Setup Transaction Error Interrupt Enable + 5 + 5 read-write - zeroToClear - modify 0 - No wakeup trigger by the VBATWIO2 pin is generated + Interrupt output disabled #0 1 - A wakeup trigger by the VBATWIO2 pin is generated + Interrupt output enabled #1 - VCH1F - VBATWIO1 Wakeup Trigger Flag - 1 - 1 + SACKE + Setup Transaction Normal Response Interrupt Enable + 4 + 4 read-write - zeroToClear - modify 0 - No wakeup trigger by the VBATWIO1 pin is generated + Interrupt output disabled #0 1 - A wakeup trigger by the VBATWIO1 pin is generated + Interrupt output enabled #1 - VCH0F - VBATWIO0 Wakeup Trigger Flag + PDDETINTE0 + PDDETINT0 Detection Interrupt Enable 0 0 read-write - zeroToClear - modify 0 - No wakeup trigger by the VBATWIO0 pin is generated + Interrupt output disabled #0 1 - A wakeup trigger by the VBATWIO0 pin is generated + Interrupt output enabled #1 @@ -69146,528 +81129,346 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - 512 - 0x1 - VBTBKR[%s] - VBATT Backup Register [%s] - 0x500 - 8 + BRDYENB + BRDY Interrupt Enable Register + 0x036 + 16 read-write - 0x00 - 0x00 + 0x0000 + 0xFFFF - VBTBKR - VBTBKR is a 512-byte readable/writable register to store data powered by VBATT.The value of this register is retained even when VCC is not powered but VBATT is powered.VBTBKR is initialized by VBATT selected voltage power-on-reset. + 10 + 1 + PIPE%sBRDYE + BRDY Interrupt Enable for PIPE 0 - 7 + 0 read-write + + + 0 + Interrupt output disabled + #0 + + + 1 + Interrupt output enabled + #1 + + - FWEPROR - Flash P/E Protect Register - 0x416 - 8 + NRDYENB + NRDY Interrupt Enable Register + 0x038 + 16 read-write - 0x02 - 0xFF + 0x0000 + 0xFFFF - FLWE - Flash Programming and Erasure + 10 + 1 + PIPE%sNRDYE + NRDY Interrupt Enable for PIPE 0 - 1 + 0 read-write - 00 - Prohibits programming and erasure of the code flash, data flash or blank checking. - #00 - - - 01 - Permits programming and erasure of the code flash, data flash or blank checking. - #01 - - - 10 - Prohibits programming and erasure of the code flash, data flash or blank checking. - #10 + 0 + Interrupt output disabled + #0 - 11 - Prohibits programming and erasure of the code flash, data flash or blank checking. - #11 + 1 + Interrupt output enabled + #1 - - - - R_TSN - Temperature Sensor - 0x407EC000 - - 0x00000228 - 0x002 - registers - - - - TSCDRH - Temperature Sensor Calibration Data Register H - 0x229 - 8 - read-only - 0x00 - 0x00 - - - TSCDRH - The calibration data stores the higher 8 bits of the convertedvalue. - 0 - 7 - read-only - - - - - TSCDRL - Temperature Sensor Calibration Data Register L - 0x228 - 8 - read-only - 0x00 - 0x00 - - - TSCDRL - The calibration data stores the lower 8 bits of the converted value. - 0 - 7 - read-only - - - - - - - R_TSN_CAL - Temperature Sensor - 0x407FB17C - - 0x00 - 0x04 - registers - - - - TSCDR - Temperature Sensor 32 bit Calibration Data Register - 0x00 - 32 - read-only - 0x00 - 0x00 - - - TSCDR - The 32 bit TSCDR register stores temperature sensor calibration converted value. - 0 - 31 - read-only - - - - - - - R_TSN_CTRL - Temperature Sensor - 0x4005D000 - - 0x00 - 1 - registers - - - TSCR - Temperature Sensor Control Register - 0x00 - 8 + BEMPENB + BEMP Interrupt Enable Register + 0x03A + 16 read-write - 0x00 - 0xFF + 0x0000 + 0xFFFF - TSEN - Temperature Sensor Output Enable - 7 - 7 + 10 + 1 + PIPE%sBEMPE + BEMP Interrupt Enable for PIPE + 0 + 0 read-write 0 - Stops the temperature sensor. + Interrupt output disabled #0 1 - Starts the temperature sensor. + Interrupt output enabled #1 + + + + SOFCFG + SOF Output Configuration Register + 0x03C + 16 + read-write + 0x0000 + 0xFFFF + - TSOE - Temperature Sensor Enable - 4 - 4 + TRNENSEL + Transaction-Enabled Time Select + 8 + 8 read-write 0 - Disables output from the temperature sensor to the 12-bit A/D converter. + Not low-speed communication #0 1 - Enables output from the temperature sensor to the 12-bit A/D converter. + Low-speed communication. #1 - - - - - - R_USB_FS0 - USB 2.0 Module - 0x40090000 - - 0x00000000 - 0x00A - registers - - - 0x0000000C - 0x02 - registers - - - 0x00000014 - 0x010 - registers - - - 0x00000028 - 0x00C - registers - - - 0x00000036 - 0x00E - registers - - - 0x00000046 - 0x00C - registers - - - 0x00000054 - 0x00E - registers - - - 0x00000064 - 0x02 - registers - - - 0x00000068 - 0x02 - registers - - - 0x0000006C - 0x016 - registers - - - 0x00000090 - 0x014 - registers - - - 0x000000B0 - 0x02 - registers - - - 0x000000C4 - 0x02 - registers - - - 0x000000CC - 0x02 - registers - - - 0x000000D0 - 0x014 - registers - - - 0x000000F0 - 0x04 - registers - - - 0x00000100 - 0x004 - registers - - - 0x00000140 - 0x02 - registers - - - 0x00000144 - 0x008 - registers - - - 0x00000160 - 0x00C - registers - - - 0x00000400 - 0x008 - registers - - - - 5 - 0x004 - PIPE_TR[%s] - Pipe Transaction Counter Registers - 0x090 - - E - Pipe Transaction Counter Enable Register - 0x00 - 16 - read-write - 0x0000 - 0xFFFF - - - TRENB - Transaction Counter Enable - 9 - 9 - read-write - - - 0 - Transaction counter is disabled. - #0 - - - 1 - Transaction counter is enabled. - #1 - - - - - TRCLR - Transaction Counter Clear - 8 - 8 - read-write - - - 0 - Invalid - #0 - - - 1 - The current counter value is cleared. - #1 - - - - - - - N - Pipe Transaction Counter Register - 0x02 - 16 - read-write - 0x0000 - 0xFFFF - - - TRNCNT - Transaction Counter - 0 - 15 - read-write - - - - - - SYSCFG - System Configuration Control Register - 0x000 - 16 - read-write - 0x0000 - 0xFFFF - - SCKE - USB Clock Enable - 10 - 10 + BRDYM + BRDY Interrupt Status Clear Timing + 6 + 6 read-write 0 - Clock supply to the USBFS stopped + BRDY flag cleared by software #0 1 - Clock supply to the USBFS enabled. + BRDY flag cleared by the USBFS through a data read from the FIFO buffer or data write to the FIFO buffer. #1 - CNEN - CNEN Single End Receiver Enable - 8 - 8 + INTL + Interrupt Output Sense Select + 5 + 5 read-write 0 - Single end receiver disabled + Edge sense #0 1 - Single end receiver enabled + Level sense #1 - DCFM - Controller Function Select - 6 - 6 - read-write + EDGESTS + Edge Interrupt Output Status Monitor + 4 + 4 + read-only 0 - Device controller selected + before stopping the clock supply to the USB module #0 1 - Host controller selected. + the edge interrupt output signal is in the middle of the edge processing #1 + + + + PHYSET + PHY Setting Register + 0x03E + 16 + read-write + 0x0033 + 0x0B3B + - DRPD - D+/D- Line Resistor Control - 5 - 5 + HSEB + CL-Only Mode + 15 + 15 read-write 0 - Line pull-down disabled + CL-only mode is not activated. #0 1 - Line pull-down enabled. + CL-only mode is activated. #1 - DPRPU - D+ Line Resistor Control - 4 - 4 + REPSTART + Forcibly Start Terminating Resistance Adjustment + 11 + 11 read-write 0 - Line pull-down disabled + Terminating resistance adjustment is forcibly started #0 1 - Line pull-down enabled. + Terminating resistance adjustment is not forcibly started #1 - DMRPU - D- Line Resistor Control + REPSEL + Terminating Resistance Adjustment Cycle + 8 + 9 + read-write + + + 00 + No cycle is set. + #00 + + + 01 + Adjust terminating resistance at 16-second intervals. + #01 + + + 10 + Adjust terminating resistance at 64-second intervals. + #10 + + + 11 + Adjust terminating resistance at 128-second intervals. + #11 + + + + + CLKSEL + Input System Clock Frequency + 4 + 5 + read-write + + + 00 + Setting Prohibited + #00 + + + 01 + 12 MHz + #01 + + + 10 + 20 MHz + #10 + + + 11 + 24 MHz + #11 + + + + + CDPEN + Charging Downstream Port Enable 3 3 read-write 0 - Line pull-up disabled + Disable charging downstream port #0 1 - Line pull-up enabled. + Enable charging downstream port #1 - USBE - USB Operation Enable + PLLRESET + PLL Reset Control + 1 + 1 + read-write + + + 0 + Disable PLL reset control for UTMI_PHY + #0 + + + 1 + Enable PLL reset control for UTMI_PHY + #1 + + + + + DIRPD + Power-Down Control 0 0 read-write 0 - Disabled + Does not enter low-power consumption mode #0 1 - Enabled. + Enter low-power consumption mode #1 @@ -69675,1052 +81476,1063 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - BUSWAIT - CPU Bus Wait Register - 0x002 + INTSTS0 + Interrupt Status Register 0 + 0x040 16 read-write - 0x000F - 0x3F3F + 0x0000 + 0xFF7F - BWAIT - CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 access cycles) - 0 - 3 + VBINT + VBUS Interrupt Status + 15 + 15 read-write + zeroToClear + modify - BWAIT - BWAIT wait(s) ( BWAIT + 2 access cycles ) - true + 0 + VBUS interrupts are not generated. + #0 + + + 1 + VBUS interrupts are generated. + #1 - - - - SYSSTS0 - System Configuration Status Register 0 - 0x004 - 16 - read-only - 0x0000 - 0x0000 - - OVCMON - External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe OCVMON[1] bit indicates the status of the USBHS_OVRCURA pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB pin. + RESM + Resume Interrupt Status 14 - 15 + 14 + read-write + zeroToClear + modify + + + 0 + Resume interrupts are not generated. + #0 + + + 1 + Resume interrupts are generated. + #1 + + + + + SOFR + Frame Number Refresh Interrupt Status + 13 + 13 + read-write + zeroToClear + modify + + + 0 + SOF interrupts are not generated. + #0 + + + 1 + SOF interrupts are generated. + #1 + + + + + DVST + Device State Transition Interrupt Status + 12 + 12 + read-write + zeroToClear + modify + + + 0 + Device state transition interrupts are not generated. + #0 + + + 1 + Device state transition interrupts are generated. + #1 + + + + + CTRT + Control Transfer Stage Transition Interrupt Status + 11 + 11 + read-write + zeroToClear + modify + + + 0 + Control transfer stage transition interrupts are not generated. + #0 + + + 1 + Control transfer stage transition interrupts are generated. + #1 + + + + + BEMP + Buffer Empty Interrupt Status + 10 + 10 read-only + + + 0 + BEMP interrupts are not generated. + #0 + + + 1 + BEMP interrupts are generated. + #1 + + - HTACT - USB Host Sequencer Status Monitor - 6 - 6 + NRDY + Buffer Not Ready Interrupt Status + 9 + 9 read-only 0 - Host sequencer completely stopped + NRDY interrupts are not generated. #0 1 - Host sequencer not completely stopped. + NRDY interrupts are generated. #1 - SOFEA - SOF Active Monitor While Host Controller Function is Selected. - 5 - 5 + BRDY + Buffer Ready Interrupt Status + 8 + 8 read-only 0 - SOF output is stopped. + BRDY interrupts are not generated. #0 1 - SOF output is operating. + BRDY interrupts are generated. #1 - IDMON - External ID0 Input Pin Monitor - 2 - 2 + VBSTS + VBUS Input Status + 7 + 7 read-only 0 - USB0_ID pin is low + USB_VBUS pin is low. #0 1 - USB0_ID pin is high + USB_VBUS pin is high. #1 - LNST - USB Data Line Status Monitor - 0 - 1 + DVSQ + Device State + 4 + 6 read-only - 00 - SE0 - #00 + 000 + Powered state + #000 - 01 - K-State (FS) / J-State(LS) - #01 + 001 + Default state + #001 - 10 - J-State(FS) / K-State(LS) - #10 + 010 + Address state + #010 - 11 - SE1 - #11 + 011 + Configured state + #011 + + + others + Suspended state + true - - - - PLLSTA - PLL Status Register - 0x006 - 16 - read-only - 0x0000 - 0x0001 - - PLLLOCK - PLL Lock Flag - 0 - 0 - read-only + VALID + USB Request Reception + 3 + 3 + read-write 0 - PLL is not locked. + Setup packet is not received #0 1 - PLL is locked. + Setup packet is received #1 + + CTSQ + Control Transfer Stage + 0 + 2 + read-only + + + 000 + Idle or setup stage + #000 + + + 001 + Control read data stage + #001 + + + 010 + Control read status stage + #010 + + + 011 + Control write data stage + #011 + + + 100 + Control write status stage + #100 + + + 101 + Control write (no data) status stage + #101 + + + 110 + Control transfer sequence error + #110 + + + others + Setting prohibited + true + + + - DVSTCTR0 - Device State Control Register 0 - 0x008 + INTSTS1 + Interrupt Status Register 1 + 0x042 16 read-write 0x0000 0xFFFF - HNPBTOA - Host Negotiation Protocol (HNP) Control This bit is used when switching from device B to device A while in OTG mode. If the HNPBTOA bit is 1, the internal function control keeps the suspended state until the HNP processing ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is set. - 11 - 11 + OVRCR + Overcurrent Input Change Interrupt Status + 15 + 15 read-write + zeroToClear + modify 0 - Normal Operation + OVRCR interrupts are not generated. #0 1 - Switching from device B to device A is enabled + OVRCR interrupts are generated. #1 - EXICEN - USB_EXICEN Output Pin Control - 10 - 10 + BCHG + USB Bus Change Interrupt Status + 14 + 14 read-write + zeroToClear + modify 0 - External USB_EXICEN pin outputs low + BCHG interrupts are not generated. #0 1 - External USB_EXICEN pin outputs high + BCHG interrupts are generated. #1 - VBUSEN - USB_VBUSEN Output Pin Control - 9 - 9 + DTCH + USB Disconnection Detection Interrupt Status + 12 + 12 + read-write + zeroToClear + modify + + + 0 + DTCH interrupts are not generated. + #0 + + + 1 + DTCH interrupts are generated. + #1 + + + + + ATTCH + ATTCH Interrupt Status + 11 + 11 read-write + zeroToClear + modify 0 - External USB_VBUSEN pin outputs low + ATTCH interrupts are not generated. #0 1 - External USB_VBUSEN pin outputs high + ATTCH interrupts are generated. #1 - WKUP - Wakeup Output - 8 - 8 + L1RSMEND + L1 Resume End Interrupt Status + 9 + 9 read-write + zeroToClear + modify 0 - Remote wakeup signal is not output. + L1RSMEND interrupts are not generated #0 1 - Remote wakeup signal is output. + L1RSMEND interrupts are generated #1 - RWUPE - Wakeup Detection Enable - 7 - 7 + LPMEND + LPM Transaction End Interrupt Status + 8 + 8 read-write + zeroToClear + modify 0 - Downstream port wakeup is disabled. + LPMEND interrupts are not generated #0 1 - Downstream port wakeup is enabled. + LPMEND interrupts are generated #1 - USBRST - USB Bus Reset Output + EOFERR + EOF Error Detection Interrupt Status 6 6 read-write + zeroToClear + modify 0 - USB bus reset signal is not output. + EOFERR interrupts are not generated. #0 1 - USB bus reset signal is output. + EOFERR interrupts are generated. #1 - RESUME - Resume Output + SIGN + Setup Transaction Error Interrupt Status 5 5 read-write + zeroToClear + modify 0 - Resume signal is not output. + SIGN interrupts are not generated. #0 1 - Resume signal is output. + SIGN interrupts are generated. #1 - UACT - USB Bus Enable + SACK + Setup Transaction Normal Response Interrupt Status 4 4 read-write + zeroToClear + modify 0 - Downstream port is disabled (SOF transmission is disabled). + SACK interrupts are not generated. #0 1 - Downstream port is enabled (SOF transmission is enabled). + SACK interrupts are generated. #1 - RHST - USB Bus Reset Status + PDDETINT0 + PDDET0 Detection Interrupt Status 0 - 2 - read-only + 0 + read-write + zeroToClear + modify - 000 - Communication speed not determined - #000 - - - 001 - Low-speed connection(When the host controller is selected) /USB bus reset in progress( When the function controller is selected) - #001 - - - 010 - Full-speed connection(When the host controller is selected) /USB bus reset in progress or full-speed connection(When the function controller is selected) - #010 - - - 011 - Setting prohibited - #011 + 0 + PDDET0 detection interrupts are not generated. + #0 - others - USB bus reset in progress(When the host controller function is selected) - true + 1 + PDDET0 detection interrupts are generated. + #1 - TESTMODE - USB Test Mode Register - 0x00C + BRDYSTS + BRDY Interrupt Status Register + 0x046 16 read-write 0x0000 - 0x000F + 0xFFFF - UTST - Test Mode + 10 + 1 + PIPE%sBRDY + BRDY Interrupt Status for PIPE 0 - 3 + 0 read-write + zeroToClear + modify - 0000 - Normal operation - #0000 - - - 0001 - Test_J TestMode(When the Function Controller Function is Selected) - #0001 - - - 0010 - Test_K TestMode(When the Function Controller Function is Selected) - #0010 - - - 0011 - Test_SE0_NAK TestMode(When the Function Controller Function is Selected) - #0011 - - - 0100 - Test_Packet TestMode(When the Function Controller Function is Selected) - #0100 - - - 0101 - Reserved TestMode(When the Function Controller Function is Selected) - #0101 - - - 0110 - Reserved TestMode(When the Function Controller Function is Selected) - #0110 - - - 0111 - Reserved TestMode(When the Function Controller Function is Selected) - #0111 - - - 1001 - Test_J TestMode(When the Host Controller Function is Selected) - #1001 - - - 1010 - Test_K TestMode(When the Host Controller Function is Selected) - #1010 - - - 1011 - Test_SE0_NAK TestMode(When the Host Controller Function is Selected) - #1011 - - - 1100 - Test_Packet TestMode(When the Host Controller Function is Selected) - #1100 - - - 1101 - Test_Force_EnableTestMode(When the Host Controller Function is Selected) - #1101 - - - 1110 - Reserved TestMode(When the Host Controller Function is Selected) - #1110 + 0 + Interrupts are not generated. + #0 - 1111 - Reserved TestMode(When the Host Controller Function is Selected) - #1111 + 1 + Interrupts are generated. + #1 - CFIFOL - CFIFO Port Register L - 0x014 - 16 - read-write - 0x0000 - 0xFFFF - - - - CFIFOLL - CFIFO Port Register LL - CFIFOL - 0x014 - 8 - read-write - 0x00 - 0xFF - - - - CFIFO - CFIFO Port Register - CFIFOL - 0x014 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - - CFIFOH - CFIFO Port Register H - CFIFO - 0x016 - 16 - read-write - 0x0000 - 0xFFFF - - - - CFIFOHH - CFIFO Port Register HH - CFIFOH - 0x017 - 8 - read-write - 0x00 - 0xFF - - - - D0FIFOL - D0FIFO Port Register L - 0x018 - 16 - read-write - 0x0000 - 0xFFFF - - - - D0FIFOLL - D0FIFO Port Register LL - D0FIFOL - 0x018 - 8 - read-write - 0x00 - 0xFF - - - - D0FIFO - D0FIFO Port Register - D0FIFOL - 0x018 - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - - D0FIFOH - D0FIFO Port Register H - D0FIFO - 0x01A - 16 - read-write - 0x0000 - 0xFFFF - - - - D0FIFOHH - D0FIFO Port Register HH - D0FIFOH - 0x01B - 8 - read-write - 0x00 - 0xFF - - - - D1FIFOL - D1FIFO Port Register L - 0x01C - 16 - read-write - 0x0000 - 0xFFFF - - - - D1FIFOLL - D1FIFO Port Register LL - D1FIFOL - 0x01C - 8 - read-write - 0x00 - 0xFF - - - - D1FIFO - D1FIFO Port Register - D1FIFOL - 0x01C - 32 - read-write - 0x00000000 - 0xFFFFFFFF - - - - D1FIFOH - D1FIFO Port Register H - D1FIFO - 0x01E - 16 - read-write - 0x0000 - 0xFFFF - - - - D1FIFOHH - D1FIFO Port Register HH - D1FIFOH - 0x01F - 8 - read-write - 0x00 - 0xFF - - - - CFIFOSEL - CFIFO Port Select Register - 0x020 + NRDYSTS + NRDY Interrupt Status Register + 0x048 16 read-write 0x0000 0xFFFF - RCNT - Read Count Mode - 15 - 15 + 10 + 1 + PIPE%sNRDY + NRDY Interrupt Status for PIPE + 0 + 0 read-write + zeroToClear + modify 0 - The DTLN[8:0] bits (CFIFOCRT.DTLN[8:0], D0FIFOCRT.DTLN[8:0], D1FIFOCRT.DTLN[8:0]) are cleared when all of the receive data has been read from the CFIFO.(In double buffer mode, the DTLN[8:0] bit value is cleared when all the data has been read from only a single plane.) + Interrupts are not generated. #0 1 - The DTLN[8:0] bits are decremented each time the receive data is read from the CFIFO. + Interrupts are generated. #1 + + + + BEMPSTS + BEMP Interrupt Status Register + 0x04A + 16 + read-write + 0x0000 + 0xFFFF + - REW - Buffer Pointer Rewind - 14 - 14 + 10 + 1 + PIPE%sBEMP + BEMP Interrupt Status for PIPE + 0 + 0 read-write + zeroToClear + modify 0 - The buffer pointer is not rewound. + Interrupts are not generated. #0 1 - The buffer pointer is rewound. + Interrupts are generated. #1 + + + + FRMNUM + Frame Number Register + 0x04C + 16 + read-write + 0x0000 + 0xFFFF + - MBW - CFIFO Port Access Bit Width - 10 - 11 + OVRN + Overrun/Underrun Detection Status + 15 + 15 read-write 0 - 8-bit width - 0 + No error + #0 1 - 16-bit width - 1 - - - 2 - 32-bit width - 2 + An error occurred + #1 - BIGEND - CFIFO Port Endian Control - 8 - 8 + CRCE + Receive Data Error + 14 + 14 read-write 0 - Little endian + No error #0 1 - Big endian + An error occurred #1 - ISEL - CFIFO Port Access Direction When DCP is Selected - 5 - 5 + FRNM + Frame NumberLatest frame number + 0 + 10 + read-only + + + + + UFRMNUM + uFrame Number Register + 0x04E + 16 + read-write + 0x0000 + 0x8007 + + + DVCHG + Device State Change + 15 + 15 read-write 0 - Reading from the buffer memory is selected + Disables the writing to the USBADDR.STSRECOV0[2:0] bits and USBADDR.USBADDR[6:0]. #0 1 - Writing to the buffer memory is selected + Enables the writing to the USBADDR.STSRECOV0[2:0] bits and USBADDR.USBADDR[6:0]. #1 - CURPIPE - CFIFO Port Access Pipe Specification + UFRNM + MicroframeIndicate the microframe number. 0 - 3 + 2 + read-only + + + + + USBADDR + USB Address Register + 0x050 + 16 + read-write + 0x0000 + 0x077F + + + STSRECOV0 + Status Recovery + 8 + 10 read-write - - 0000 - DCP (Default control pipe) - #0000 - - - 0001 - Pipe 1 - #0001 - - - 0010 - Pipe 2 - #0010 - - - 0011 - Pipe 3 - #0011 + + 001 + Return to the full-speed state(bits DVSTCTR0.RHST[2:0] = 010b), bits INTSTS0.DVSQ[2:0] = 001b (Default state)(function controller selected) + #001 - 0100 - Pipe 4 - #0100 + 010 + Return to the full-speed state (bits DVSTCTR0.RHST[2:0] = 010b), bits INTSTS0.DVSQ[2:0] = 010b (Address state)(function controller selected)/ Return to the low-speed state (bitsDVSTCTR0.RHST[2:0] = 001b)(host controller is selected) + #010 - 0101 - Pipe 5 - #0101 + 011 + Return to the full-speed state (bits DVSTCTR0.RHST[2:0] = 010b), bits INTSTS0.DVSQ[2:0] = 011b (Configured state)(function controller selected) + #011 - 0110 - Pipe 6 - #0110 + 100 + Return to the full-speed state (bits DVSTCTR0.RHST[2:0] = 010b)(host controller selected) + #100 - 0111 - Pipe 7 - #0111 + 101 + Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b), bits INTSTS0.DVSQ[2:0] = 001b (Default state)(function controller selected) + #101 - 1000 - Pipe 8 - #1000 + 110 + Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b), bits INTSTS0.DVSQ[2:0] = 010b (Address state)(function controller selected)/ Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b)(host controller selected) + #110 - 1001 - Pipe 9 - #1001 + 111 + Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b), bits INTSTS0.DVSQ[2:0] = 011b (Configured state)(function controller selected) + #111 others - Setting prohibited + Setting prohibited. true + + USBADDR + USB Address In device controller mode, these flags indicate the USB address assigned by the host when the USBHS processed the SET_ADDRESS request successfully. + 0 + 6 + read-only + - CFIFOCTR - CFIFO Port Control Register - 0x022 + USBREQ + USB Request Type Register + 0x054 16 read-write 0x0000 0xFFFF - BVAL - Buffer Memory Valid Flag - 15 + BREQUEST + RequestThese bits store the USB request bRequest value. + 8 15 read-write - - - 0 - Invalid - #0 - - - 1 - Writing ended - #1 - - - BCLR - CPU Buffer ClearNote: Only 0 can be read. - 14 - 14 + BMREQUESTTYPE + Request TypeThese bits store the USB request bmRequestType value. + 0 + 7 read-write - - - 0 - Does not operate - #0 - - - 1 - FIFO buffer cleared on the CPU side. - #1 - - + + + + USBVAL + USB Request Value Register + 0x056 + 16 + read-write + 0x0000 + 0xFFFF + - FRDY - FIFO Port Ready - 13 - 13 - read-only - - - 0 - FIFO port access is disabled. - #0 - - - 1 - FIFO port access is enabled. - #1 - - + WVALUE + ValueThese bits store the USB request Value value. + 0 + 15 + read-write + + + + USBINDX + USB Request Index Register + 0x058 + 16 + read-write + 0x0000 + 0xFFFF + - DTLN - Receive Data LengthIndicates the length of the receive data. + WINDEX + IndexThese bits store the USB request wIndex value. 0 - 11 - read-only + 15 + read-write - D0FIFOSEL - D0FIFO Port Select Register - 0x028 + USBLENG + USB Request Length Register + 0x05A 16 read-write 0x0000 0xFFFF - RCNT - Read Count Mode - 15 + WLENGTH + LengthThese bits store the USB request wLength value. + 0 15 read-write + + + + + DCPCFG + DCP Configuration Register + 0x05C + 16 + read-write + 0x0000 + 0xFFFF + + + CNTMD + Continuous Transfer Mode + 8 + 8 + read-write 0 - The DTLN[8:0] bits (CFIFOCRT.DTLN[8:0], D0FIFOCRT.DTLN[8:0], D1FIFOCRT.DTLN[8:0]) are cleared when all of the receive data has been read from the DnFIFO.(In double buffer mode, the DTLN bit Value is cleared when all the data has been read from only a single plane.) + Non-continuous transfer mode #0 1 - The DTLN[8:0] bits are decremented each time the receive data is read from the DnFIFO. (n = 0, 1) + Continuous transfer mode #1 - REW - Buffer Pointer RewindNote: Only 0 can be read. - 14 - 14 + SHTNAK + Pipe Disabled at End of Transfer + 7 + 7 read-write 0 - The buffer pointer is not rewound. + Pipe continued at the end of transfer #0 1 - The buffer pointer is rewound. + Pipe disabled at the end of transfer #1 - DCLRM - Auto Buffer Memory Clear Mode Accessed after Specified Pipe Data is Read - 13 - 13 + DIR + Transfer Direction + 4 + 4 read-write 0 - Auto buffer clear mode is disabled. + Data receiving direction #0 1 - Auto buffer clear mode is enabled. + Data transmitting direction #1 + + + + DCPMAXP + DCP Maximum Packet Size Register + 0x05E + 16 + read-write + 0x0040 + 0xFFFF + - DREQE - DMA/DTC Transfer Request Enable + DEVSEL + Device Select 12 - 12 + 15 read-write - 0 - DMA/DTC transfer request is disabled. - #0 + 0000 + Address 0000 + #0000 - 1 - DMA/DTC transfer request is enabled. - #1 + 0001 + Address 0001 + #0001 - - - - MBW - FIFO Port Access Bit Width - 10 - 11 - read-write - - 0 - 8-bit width - 0 + 0010 + Address 0010 + #0010 - 1 - 16-bit width - 1 + 0011 + Address 0011 + #0011 - 2 - 32-bit width - 2 + 0100 + Address 0100 + #0100 - - - - BIGEND - FIFO Port Endian Control - 8 - 8 - read-write - - 0 - Little endian - #0 + 0101 + Address 0101 + #0101 - 1 - Big endian - #1 + others + Settings prohibited. + true - CURPIPE - FIFO Port Access Pipe Specification + MXPS + Maximum Packet SizeThese bits set the maximum amount of data (maximum packet size) in payloads for the DCP. 0 - 3 + 6 read-write - 0000 - DCP (Default control pipe) - #0000 + 0x08 + 8 bytes + 0x08 - 0001 - Pipe 1 - #0001 + 0x10 + 16 bytes + 0x10 - 0010 - Pipe 2 - #0010 + 0x18 + 24 bytes + 0x18 - 0011 - Pipe 3 - #0011 + 0x20 + 32 bytes + 0x20 - 0100 - Pipe 4 - #0100 + 0x28 + 40 bytes + 0x28 - 0101 - Pipe 5 - #0101 + 0x30 + 48 bytes + 0x30 - 0110 - Pipe 6 - #0110 + 0x38 + 56 bytes + 0x38 - 0111 - Pipe 7 - #0111 + 0x40 + 64 bytes + 0x40 - 1000 - Pipe 8 - #1000 + 0x48 + 72 bytes + 0x48 - 1001 - Pipe 9 - #1001 + 0x50 + 80 bytes + 0x50 + + + 0x58 + 88 bytes + 0x58 + + + 0x60 + 96 bytes + 0x60 + + + 0x68 + 104 bytes + 0x68 + + + 0x70 + 112 bytes + 0x70 + + + 0x78 + 120 bytes + 0x78 others @@ -70732,268 +82544,266 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - D0FIFOCTR - D0FIFO Port Control Register - 0x02A + DCPCTR + DCP Control Register + 0x060 16 read-write - 0x0000 + 0x0040 0xFFFF - BVAL - Buffer Memory Valid Flag + BSTS + Buffer Status 15 15 - read-write + read-only 0 - Invalid + Buffer access is disabled. #0 1 - Writing ended + Buffer access is enabled. #1 - BCLR - CPU Buffer ClearNote: Only 0 can be read. + SUREQ + Setup Token Transmission 14 14 read-write 0 - Does not operate + Invalid #0 1 - FIFO buffer cleared on the CPU side. + Transmits the setup packet. #1 - FRDY - FIFO Port Ready - 13 - 13 - read-only + SUREQCLR + SUREQ Bit Clear + 11 + 11 + read-write 0 - FIFO port access is disabled. + Invalid #0 1 - FIFO port access is enabled. + Clears the SUREQ bit to 0. #1 - DTLN - Receive Data LengthIndicates the length of the receive data. - 0 - 11 - read-only - - - - - D1FIFOSEL - D1FIFO Port Select Register - 0x02C - 16 - read-write - 0x0000 - 0xFFFF - - - RCNT - Read Count Mode - 15 - 15 + SQCLR + Sequence Toggle Bit Clear + 8 + 8 read-write 0 - The DTLN[8:0] bits (CFIFOCRT.DTLN[8:0], D0FIFOCRT.DTLN[8:0], D1FIFOCRT.DTLN[8:0]) are cleared when all of the receive data has been read from the DnFIFO.(In double buffer mode, the DTLN bit Value is cleared when all the data has been read from only a single plane.) + Invalid #0 1 - The DTLN[8:0] bits are decremented each time the receive data is read from the DnFIFO. (n = 0, 1) + Specifies DATA0. #1 - REW - Buffer Pointer Rewind - 14 - 14 + SQSET + Sequence Toggle Bit Set + 7 + 7 read-write 0 - The buffer pointer is not rewound. + Invalid #0 1 - The buffer pointer is rewound. + Specifies DATA1. #1 - DCLRM - Auto Buffer Memory Clear Mode Accessed after Specified Pipe Data is Read - 13 - 13 - read-write + SQMON + Sequence Toggle Bit Monitor + 6 + 6 + read-only 0 - Auto buffer clear mode is disabled. + DATA0 #0 1 - Auto buffer clear mode is enabled. + DATA1 #1 - DREQE - DMA/DTC Transfer Request Enable - 12 - 12 - read-write + PBUSY + Pipe Busy + 5 + 5 + read-only 0 - DMA/DTC transfer request is disabled. + DCP is not used for the transaction. #0 1 - DMA/DTC transfer request is enabled. + DCP is used for the transaction. #1 - MBW - FIFO Port Access Bit Width - 10 - 11 + CCPL + Control Transfer End Enable + 2 + 2 read-write 0 - 8-bit width - 0 + Invalid + #0 1 - 16-bit width - 1 - - - 2 - 32-bit width - 2 + Completion of control transfer is enabled. + #1 - BIGEND - FIFO Port Endian Control - 8 - 8 + PID + Response PID + 0 + 1 read-write - 0 - Little endian - #0 + 00 + NAK response + #00 + + + 01 + BUF response (depending on the buffer state) + #01 - 1 - Big endian - #1 + 10 + STALL response + #10 + + + 11 + STALL response + #11 + + + + PIPESEL + Pipe Window Select Register + 0x064 + 16 + read-write + 0x0000 + 0xFFFF + - CURPIPE - FIFO Port Access Pipe Specification + PIPESEL + Pipe Window Select 0 3 read-write 0000 - DCP (Default control pipe) + No pipe selected #0000 0001 - Pipe 1 + PIPE1 #0001 0010 - Pipe 2 + PIPE2 #0010 0011 - Pipe 3 + PIPE3 #0011 0100 - Pipe 4 + PIPE4 #0100 0101 - Pipe 5 + PIPE5 #0101 0110 - Pipe 6 + PIPE6 #0110 0111 - Pipe 7 + PIPE7 #0111 1000 - Pipe 8 + PIPE8 #1000 1001 - Pipe 9 + PIPE9 #1001 others - Setting prohibited + Settings prohibited. true @@ -71001,747 +82811,751 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - D1FIFOCTR - D1FIFO Port Control Register - 0x02E + PIPECFG + Pipe Configuration Register + 0x068 16 read-write 0x0000 0xFFFF - BVAL - Buffer Memory Valid Flag - 15 + TYPE + Transfer Type + 14 15 read-write - 0 - Invalid - #0 + 00 + Pipe not used + #00 - 1 - Writing ended - #1 + 01 + Bulk transfer(PIPE1 and PIPE5) /Setting prohibited(PIPE6 to PIPE9) + #01 + + + 10 + Setting prohibited(PIPE1 and PIPE5) /Interrupt transfer(PIPE6 to PIPE9) + #10 + + + 11 + Isochronous transfer(PIPE1 and PIPE2) /Setting prohibited(PIPE3 to PIPE9) + #11 - BCLR - CPU Buffer ClearNote: Only 0 can be read. - 14 - 14 + BFRE + BRDY Interrupt Operation Specification + 10 + 10 read-write 0 - Does not operate + BRDY interrupt upon transmitting or receiving data #0 1 - FIFO buffer cleared on the CPU side. + BRDY interrupt upon completion of reading data #1 - FRDY - FIFO Port Ready - 13 - 13 - read-only + DBLB + Double Buffer Mode + 9 + 9 + read-write 0 - FIFO port access is disabled. + Single buffer #0 1 - FIFO port access is enabled. + Double buffer #1 - DTLN - Receive Data LengthIndicates the length of the receive data. - 0 - 11 - read-only - - - - - INTENB0 - Interrupt Enable Register 0 - 0x030 - 16 - read-write - 0x0000 - 0xFFFF - - - VBSE - VBUS Interrupt Enable - 15 - 15 + SHTNAK + Pipe Disabled at End of Transfer + 7 + 7 read-write 0 - Interrupt output disabled + Continue pipe operation after transfer ends #0 1 - Interrupt output enabled + Disable pipe operation after transfer ends. #1 - RSME - Resume Interrupt Enable - 14 - 14 + DIR + Transfer Direction + 4 + 4 read-write 0 - Interrupt output disabled + Receiving direction #0 1 - Interrupt output enabled + Transmitting direction #1 - SOFE - Frame Number Update Interrupt Enable - 13 - 13 + EPNUM + Endpoint NumberThese bits specify the endpoint number for the selected pipe.Setting 0000b means unused pipe. + 0 + 3 + read-write + + + + + PIPEMAXP + Pipe Maximum Packet Size Register + 0x06C + 16 + read-write + 0x0000 + 0xFFBF + + + DEVSEL + Device Select + 12 + 15 read-write - 0 - Interrupt output disabled - #0 + 0000 + Address 0000 + #0000 - 1 - Interrupt output enabled - #1 + 0001 + Address 0001 + #0001 + + + 0010 + Address 0010 + #0010 + + + 0011 + Address 0011 + #0011 + + + 0100 + Address 0100 + #0100 + + + 0101 + Address 0101 + #0101 + + + others + Settings prohibited. + true - DVSE - Device State Transition Interrupt Enable + MXPS + Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to 256 bytes (100h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes (010h), 32 bytes (020h), 64 bytes (040h) (Bits [8:7] and [2:0] are not provided.)PIPE6 to PIPE9: 1 byte (001h) to 64 bytes (040h) (Bits [8:7] are not provided.) + 0 + 8 + read-write + + + + + PIPEPERI + Pipe Cycle Control Register + 0x06E + 16 + read-write + 0x0000 + 0xFFFF + + + IFIS + Isochronous IN Buffer Flush 12 12 read-write 0 - Interrupt output disabled + The buffer is not flushed. #0 1 - Interrupt output enabled + The buffer is flushed. #1 - CTRE - Control Transfer Stage Transition Interrupt Enable - 11 - 11 + IITV + Interval Error Detection IntervalSpecifies the interval error detection timing for the selected pipe in terms of frames, which is expressed as nth power of 2. + 0 + 2 read-write + + + + + 9 + 0x002 + PIPE_CTR[%s] + Pipe %s Control Register + 0x070 + 16 + read-write + 0x0000 + 0xFFFF + + + BSTS + Buffer Status + 15 + 15 + read-only 0 - Interrupt output disabled + Buffer access by the CPU is disabled. #0 1 - Interrupt output enabled + Buffer access by the CPU is enabled. #1 - BEMPE - Buffer Empty Interrupt Enable - 10 - 10 - read-write + INBUFM + Transmit Buffer Monitor + 14 + 14 + read-only 0 - Interrupt output disabled + No data to be transmitted is in the FIFO buffer #0 1 - Interrupt output enabled + Data to be transmitted is in the FIFO buffer #1 - NRDYE - Buffer Not Ready Response Interrupt Enable - 9 - 9 + CSCLR + CSPLIT Status ClearSet this bit to 1 when clearing the CSSTS bit of the relevant pipe + 13 + 13 read-write 0 - Interrupt output disabled + Writing is disabled. #0 1 - Interrupt output enabled + The CSSTS bit is cleared. #1 - BRDYE - Buffer Ready Interrupt Enable - 8 - 8 - read-write + CSSTS + CSSTS StatusThis bit indicates the CSPLIT status of Split Transaction of the relevant pipe + 12 + 12 + read-only 0 - Interrupt output disabled + SSplit Transaction processing is in progress or transfer without Split Transaction is in progress. #0 1 - Interrupt output enabled + CSplit Transaction processing is in progress. #1 - - - - INTENB1 - Interrupt Enable Register 1 - 0x032 - 16 - read-write - 0x0000 - 0xFFFF - - OVRCRE - Overcurrent Input Change Interrupt Enable - 15 - 15 + ATREPM + Auto Response Mode + 10 + 10 read-write 0 - Interrupt output disabled + Auto response disabled. #0 1 - Interrupt output enabled + Auto response enabled. #1 - BCHGE - USB Bus Change Interrupt Enable - 14 - 14 + ACLRM + Auto Buffer Clear Mode + 9 + 9 read-write 0 - Interrupt output disabled + Disabled #0 1 - Interrupt output enabled + Enabled (all buffers are initialized) #1 - DTCHE - Disconnection Detection Interrupt Enable - 12 - 12 + SQCLR + Sequence Toggle Bit Clear + 8 + 8 read-write 0 - Interrupt output disabled + Write disabled #0 1 - Interrupt output enabled + Specifies DATA0. #1 - ATTCHE - Connection Detection Interrupt Enable - 11 - 11 + SQSET + Sequence Toggle Bit Set + 7 + 7 read-write 0 - Interrupt output disabled + Write disabled #0 1 - Interrupt output enabled + Specifies DATA1. #1 - EOFERRE - EOF Error Detection Interrupt Enable + SQMON + Sequence Toggle Bit Confirmation 6 6 - read-write + read-only 0 - Interrupt output disabled + DATA0 #0 1 - Interrupt output enabled + DATA1 #1 - SIGNE - Setup Transaction Error Interrupt Enable + PBUSY + Pipe Busy 5 5 - read-write + read-only 0 - Interrupt output disabled + Pipe n not in use for the transaction #0 1 - Interrupt output enabled + Pipe n in use for the transaction. #1 - SACKE - Setup Transaction Normal Response Interrupt Enable - 4 - 4 + PID + Response PID + 0 + 1 read-write - 0 - Interrupt output disabled - #0 + 00 + NAK response + #00 - 1 - Interrupt output enabled - #1 + 01 + BUF response (depending on the buffer state) + #01 - - - - PDDETINTE0 - PDDETINT0 Detection Interrupt Enable - 0 - 0 - read-write - - 0 - Interrupt output disabled - #0 + 10 + STALL response + #10 - 1 - Interrupt output enabled - #1 + 11 + STALL response + #11 - BRDYENB - BRDY Interrupt Enable Register - 0x036 + 10 + 0x002 + DEVADD[%s] + Device Address Configuration Register + 0x0D0 16 read-write 0x0000 0xFFFF - 10 - 1 - PIPE%sBRDYE - BRDY Interrupt Enable for PIPE - 0 - 0 + UPPHUB + Communication Target Connecting Hub Register + 11 + 14 read-write + + + 0x0000 + 0x1010 + + - 0 - Interrupt output disabled - #0 + 0000 + Directly connected to the port of the USBHS. + #0000 - 1 - Interrupt output enabled - #1 + UPPHUB + USB address of the hub + true - - - - NRDYENB - NRDY Interrupt Enable Register - 0x038 - 16 - read-write - 0x0000 - 0xFFFF - - 10 - 1 - PIPE%sNRDYE - NRDY Interrupt Enable for PIPE - 0 - 0 + HUBPORT + Communication Target Connecting Hub Port + 8 + 10 + read-write + + + 000 + Directly connected to the port of the USBHS. + #000 + + + others + Port number of the hub + true + + + + + USBSPD + Transfer Speed of Communication Target Device + 6 + 7 read-write - 0 - Interrupt output disabled - #0 + 00 + DEVADDn is not used + #00 - 1 - Interrupt output enabled - #1 + 01 + Low speed + #01 + + + 10 + Full speed + #10 + + + 11 + Setting prohibited + #11 - BEMPENB - BEMP Interrupt Enable Register - 0x03A + USBBCCTRL0 + BC Control Register 0 + 0x0B0 16 read-write 0x0000 0xFFFF - 10 - 1 - PIPE%sBEMPE - BEMP Interrupt Enable for PIPE - 0 - 0 - read-write + PDDETSTS0 + D+ Pin 0.6 V Input Detection Status + 9 + 9 + read-only 0 - Interrupt output disabled + Not detected #0 1 - Interrupt output enabled + Detected #1 - - - - SOFCFG - SOF Output Configuration Register - 0x03C - 16 - read-write - 0x0000 - 0xFFFF - - TRNENSEL - Transaction-Enabled Time Select + CHGDETSTS0 + D- Pin 0.6 V Input Detection Status 8 8 - read-write + read-only 0 - Not low-speed communication + Not detected #0 1 - Low-speed communication. + Detected #1 - BRDYM - BRDY Interrupt Status Clear Timing - 6 - 6 + BATCHGE0 + BC (Battery Charger) Function Ch0 General Enable Control + 7 + 7 read-write 0 - BRDY flag cleared by software + Disabled #0 1 - BRDY flag cleared by the USBFS through a data read from the FIFO buffer or data write to the FIFO buffer. + Enabled #1 - INTL - Interrupt Output Sense Select + VDMSRCE0 + D- Pin VDMSRC (0.6 V) Output Control 5 5 read-write 0 - Edge sense + Stop #0 1 - Level sense + 0.6V output #1 - EDGESTS - Edge Interrupt Output Status Monitor + IDPSINKE0 + D+ Pin 0.6 V Input Detection (Comparator and Sink) Control 4 4 - read-only + read-write 0 - before stopping the clock supply to the USB module + Detection off #0 1 - the edge interrupt output signal is in the middle of the edge processing + Detection on ( Comparator and sink current on ) #1 - - - - PHYSET - PHY Setting Register - 0x03E - 16 - read-write - 0x0033 - 0x0B3B - - HSEB - CL-Only Mode - 15 - 15 + VDPSRCE0 + D+ Pin VDPSRC (0.6 V) Output Control + 3 + 3 read-write 0 - CL-only mode is not activated. + Stop #0 1 - CL-only mode is activated. + 0.6V output #1 - REPSTART - Forcibly Start Terminating Resistance Adjustment - 11 - 11 + IDMSINKE0 + D- Pin 0.6 V Input Detection (Comparator and Sink) Control + 2 + 2 read-write 0 - Terminating resistance adjustment is forcibly started + Detection off #0 1 - Terminating resistance adjustment is not forcibly started + Detection on ( Comparator and sink current on ) #1 - REPSEL - Terminating Resistance Adjustment Cycle - 8 - 9 - read-write - - - 00 - No cycle is set. - #00 - - - 01 - Adjust terminating resistance at 16-second intervals. - #01 - - - 10 - Adjust terminating resistance at 64-second intervals. - #10 - - - 11 - Adjust terminating resistance at 128-second intervals. - #11 - - - - - CLKSEL - Input System Clock Frequency - 4 - 5 - read-write - - - 00 - Setting Prohibited - #00 - - - 01 - 12 MHz - #01 - - - 10 - 20 MHz - #10 - - - 11 - 24 MHz - #11 - - - - - CDPEN - Charging Downstream Port Enable - 3 - 3 + IDPSRCE0 + D+ Pin IDPSRC Output Control + 1 + 1 read-write 0 - Disable charging downstream port + Stop #0 1 - Enable charging downstream port + 10uA output #1 - PLLRESET - PLL Reset Control - 1 - 1 + RPDME0 + D- Pin Pull-Down Control + 0 + 0 read-write 0 - Disable PLL reset control for UTMI_PHY + Pull-down off #0 1 - Enable PLL reset control for UTMI_PHY + Pull-down on #1 + + + + UCKSEL + USB Clock Selection Register + 0x0C4 + 16 + read-write + 0x0000 + 0xFFFF + - DIRPD - Power-Down Control + UCKSELC + USB Clock Selection 0 0 read-write 0 - Does not enter low-power consumption mode + High-speed on-chip oscillator clock (HOCO) is not selected as USB clock #0 1 - Enter low-power consumption mode + High-speed on-chip oscillator clock (HOCO) is selected as USB clock #1 @@ -71749,514 +83563,565 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - INTSTS0 - Interrupt Status Register 0 - 0x040 + USBMC + USB Module Control Register + 0x0CC 16 read-write - 0x0000 - 0xFF7F + 0x0002 + 0xFFFF - VBINT - VBUS Interrupt Status - 15 - 15 + VDCEN + USB Regulator On/Off Control + 7 + 7 read-write - zeroToClear - modify 0 - VBUS interrupts are not generated. + USB regulator off #0 1 - VBUS interrupts are generated. + USB regulator on #1 - RESM - Resume Interrupt Status - 14 - 14 + VDDUSBE + USB Reference Power Supply Circuit On/Off Control + 0 + 0 read-write - zeroToClear - modify 0 - Resume interrupts are not generated. + USB reference power supply circuit off #0 1 - Resume interrupts are generated. + USB reference power supply circuit on #1 + + + + PHYSLEW + PHY Cross Point Adjustment Register + 0x0F0 + 32 + read-write + 0x0000000E + 0xFF4CFFFF + - SOFR - Frame Number Refresh Interrupt Status - 13 - 13 + SLEWF01 + Receiver Cross Point Adjustment 01 + 3 + 3 read-write - zeroToClear - modify - - 0 - SOF interrupts are not generated. - #0 - 1 - SOF interrupts are generated. + Host or device controller mode. #1 - DVST - Device State Transition Interrupt Status - 12 - 12 + SLEWF00 + Receiver Cross Point Adjustment 00 + 2 + 2 read-write - zeroToClear - modify - - 0 - Device state transition interrupts are not generated. - #0 - 1 - Device state transition interrupts are generated. + Host or device controller mode. #1 - CTRT - Control Transfer Stage Transition Interrupt Status - 11 - 11 + SLEWR01 + Receiver Cross Point Adjustment 01 + 1 + 1 read-write - zeroToClear - modify - - 0 - Control transfer stage transition interrupts are not generated. - #0 - 1 - Control transfer stage transition interrupts are generated. + Host or device controller mode. #1 - BEMP - Buffer Empty Interrupt Status - 10 - 10 - read-only + SLEWR00 + Receiver Cross Point Adjustment 00 + 0 + 0 + read-write - - 0 - BEMP interrupts are not generated. - #0 - 1 - BEMP interrupts are generated. + Host or device controller mode. #1 + + + + LPCTRL + Low Power Control Register + 0x100 + 16 + read-write + 0x0000 + 0x0181 + - NRDY - Buffer Not Ready Interrupt Status - 9 - 9 - read-only + HWUPM + Resume Return Mode Setting + 7 + 7 + read-write 0 - NRDY interrupts are not generated. + Hardware does not recover while CPU clock inactive #0 1 - NRDY interrupts are generated. + Hardware recovers while CPU clock inactive. #1 + + + + LPSTS + Low Power Status Register + 0x102 + 16 + read-write + 0x0000 + 0x510B + - BRDY - Buffer Ready Interrupt Status - 8 - 8 - read-only + SUSPENDM + UTMI SuspendM Control + 14 + 14 + read-write 0 - BRDY interrupts are not generated. + UTMI suspension mode #0 1 - BRDY interrupts are generated. + UTMI normal mode #1 + + + + BCCTRL + Battery Charging Control Register + 0x140 + 16 + read-write + 0x0000 + 0x033F + - VBSTS - VBUS Input Status - 7 - 7 + PDDETSTS + PDDET Status + 9 + 9 read-only 0 - USB_VBUS pin is low. + The PDDET pin is at low level. #0 1 - USB_VBUS pin is high. + The PDDET pin is at high level. #1 - DVSQ - Device State - 4 - 6 + CHGDETSTS + CHGDET Status + 8 + 8 read-only - - - 000 - Powered state - #000 - - - 001 - Default state - #001 - - - 010 - Address state - #010 - - - 011 - Configured state - #011 - - - others - Suspended state - true - - - - - VALID - USB Request Reception - 3 - 3 - read-write 0 - Setup packet is not received + The CHGDET pin is at low level. #0 1 - Setup packet is received + The CHGDET pin is at high level. #1 - CTSQ - Control Transfer Stage - 0 - 2 - read-only - - - 000 - Idle or setup stage - #000 - - - 001 - Control read data stage - #001 - - - 010 - Control read status stage - #010 - - - 011 - Control write data stage - #011 - - - 100 - Control write status stage - #100 - - - 101 - Control write (no data) status stage - #101 - + DCPMODE + DCP Mode Control + 5 + 5 + read-write + - 110 - Control transfer sequence error - #110 + 0 + The RDCP_DAT resistor is disabled + #0 - others - Setting prohibited - true + 1 + The RDCP_DAT resistor is enabled. + #1 - - - - INTSTS1 - Interrupt Status Register 1 - 0x042 - 16 - read-write - 0x0000 - 0xFFFF - - OVRCR - Overcurrent Input Change Interrupt Status - 15 - 15 + VDMSRCE + VDMSRC Control + 4 + 4 read-write - zeroToClear - modify 0 - OVRCR interrupts are not generated. + The VDM_SRC circuit is disabled. (Initial value) #0 1 - OVRCR interrupts are generated. + The VDM_SRC circuit is enabled. #1 - BCHG - USB Bus Change Interrupt Status - 14 - 14 + IDPSINKE + IDPSINK Control + 3 + 3 read-write - zeroToClear - modify 0 - BCHG interrupts are not generated. + The IDP_SINK circuit is disabled. (Initial value) #0 1 - BCHG interrupts are generated. + The IDP_SINK circuit is enabled. #1 - DTCH - USB Disconnection Detection Interrupt Status - 12 - 12 + VDPSRCE + VDPSRC Control + 2 + 2 read-write - zeroToClear - modify 0 - DTCH interrupts are not generated. + The VDP_SRC circuit is disabled. (Initial value) #0 1 - DTCH interrupts are generated. + The VDP_SRC circuit is enabled. #1 - ATTCH - ATTCH Interrupt Status - 11 - 11 + IDMSINKE + IDMSINK Control + 1 + 1 read-write - zeroToClear - modify 0 - ATTCH interrupts are not generated. + The IDM_SINK circuit is disabled. (Initial value) #0 1 - ATTCH interrupts are generated. + The IDM_SINK circuit is enabled. #1 - L1RSMEND - L1 Resume End Interrupt Status - 9 - 9 + IDPSRCE + IDPSRC Control + 0 + 0 read-write - zeroToClear - modify 0 - L1RSMEND interrupts are not generated + The IDP_SRC circuit is disabled. (Initial value) #0 1 - L1RSMEND interrupts are generated + The IDP_SRC circuit is enabled. #1 + + + + PL1CTRL1 + Function L1 Control Register 1 + 0x144 + 16 + read-write + 0x0000 + 0x4FFF + - LPMEND - LPM Transaction End Interrupt Status - 8 - 8 + L1EXTMD + PHY Control Mode at L1 Return + 14 + 14 read-write - zeroToClear - modify 0 - LPMEND interrupts are not generated + SUSPENDM is not set by hardware when Host K is received. #0 1 - LPMEND interrupts are generated + SUSPENDM is set by hardware when Host K is received. #1 - EOFERR - EOF Error Detection Interrupt Status - 6 - 6 + HIRDTHR + L1 Response Negotiation Threshold ValueHIRD threshold value used for L1NEGOMD.The format is the same as the HIRD field in HL1CTRL. + 8 + 11 + read-write + + + DVSQ + DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates the L1 state together with the device state bits DVSQ[2:0]. + 4 + 7 + read-only + + + 0000 + Powered state + #0000 + + + 0001 + Default state + #0001 + + + 0010 + Address state + #0010 + + + 0011 + Configured state + #0011 + + + 0100 + Suspended state + #0100 + + + 0101 + Suspended state + #0101 + + + 0110 + Suspended state + #0110 + + + 0111 + Suspended state + #0111 + + + 1000 + L1 state + #1000 + + + 1001 + L1 state + #1001 + + + 1010 + L1 state + #1010 + + + 1011 + L1 state + #1011 + + + others + setting prohibited + true + + + + + L1NEGOMD + L1 Response Negotiation Control.NOTE: This bit is valid only when the L1RESPMD[1:0] value is 2'b11. + 3 + 3 read-write - zeroToClear - modify 0 - EOFERR interrupts are not generated. + When receive HIRD is larger than HIRDTHR[3:0], ACK response is returned. In other cases (including HIRD = HIRDTHR[3:0]), NYET response is returned. #0 1 - EOFERR interrupts are generated. + When receive HIRD is smaller than HIRDTHR[3:0], ACK response is returned. In other cases (including HIRD = HIRDTHR[3:0]), NYET response is returned. #1 - SIGN - Setup Transaction Error Interrupt Status - 5 - 5 + L1RESPMD + L1 Response Mode + 1 + 2 + read-write + + + 00 + NYET + #00 + + + 01 + ACK + #01 + + + 10 + STALL + #10 + + + 11 + According to the L1NEGOMD bit + #11 + + + + + L1RESPEN + L1 Response Enable + 0 + 0 read-write - zeroToClear - modify 0 - SIGN interrupts are not generated. + LPM is not supported. #0 1 - SIGN interrupts are generated. + LPM is supported. #1 + + + + PL1CTRL2 + Function L1 Control Register 2 + 0x146 + 16 + read-write + 0x0000 + 0x1F00 + - SACK - Setup Transaction Normal Response Interrupt Status - 4 - 4 + RWEMON + RWE Value Monitor + 12 + 12 read-write - zeroToClear - modify 0 - SACK interrupts are not generated. + The RWE bit value of the LPM token received last is reflected. #0 1 - SACK interrupts are generated. + The RWE bit value of the LPM token received last is reflected. #1 - PDDETINT0 - PDDET0 Detection Interrupt Status - 0 - 0 + HIRDMON + HIRD Value Monitor + 8 + 11 read-write - zeroToClear - modify 0 - PDDET0 detection interrupts are not generated. + The HIRD field value of the LPM token received last is reflected. #0 1 - PDDET0 detection interrupts are generated. + The HIRD field value of the LPM token received last is reflected. #1 @@ -72264,33 +84129,58 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - BRDYSTS - BRDY Interrupt Status Register - 0x046 + HL1CTRL1 + Host L1 Control Register 1 + 0x148 16 read-write 0x0000 - 0xFFFF + 0x0007 - 10 - 1 - PIPE%sBRDY - BRDY Interrupt Status for PIPE + L1STATUS + L1 Request Completion Status + 1 + 2 + read-only + + + 00 + ACK received + #00 + + + 01 + NYET received + #01 + + + 10 + STALL received + #10 + + + 11 + Transaction error + #11 + + + + + L1REQ + L1 Transition Request 0 0 read-write - zeroToClear - modify 0 - Interrupts are not generated. + This bit is cleared to 0 by hardware when the LPM transaction is completed. #0 1 - Interrupts are generated. + Set this bit to 1 when requesting a transition to the L1 state. #1 @@ -72298,374 +84188,378 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - NRDYSTS - NRDY Interrupt Status Register - 0x048 + HL1CTRL2 + Host L1 Control Register 2 + 0x14A 16 read-write 0x0000 - 0xFFFF + 0x9F0F - 10 - 1 - PIPE%sNRDY - NRDY Interrupt Status for PIPE + BESL + BESL & Alternate HIRDThis bit selects the K-State drive period at the time of L1 Resume. + 15 + 15 + read-write + + + L1RWE + LPM Token L1 RemoteWake EnableThese bits specify the value to be set in the RWE field of LPM token. + 12 + 12 + read-write + + + HIRD + LPM Token HIRD + 8 + 11 + read-write + + + 0000 + 50 us(Setting prohibited(BESL = 0)) / 75 us(BESL = 1) + #0000 + + + 0001 + 125 us(BESL = 0) / 100 us(BESL = 1) + #0001 + + + 0010 + 200 us(BESL = 0) / 150 us(BESL = 1) + #0010 + + + 0011 + 275 us(BESL = 0) / 250 us(BESL = 1) + #0011 + + + 0100 + 350 us(BESL = 0) / 350 us(BESL = 1) + #0100 + + + 0101 + 425 us(BESL = 0) / 450 us(BESL = 1) + #0101 + + + 0110 + 500 us(BESL = 0) / 950 us(BESL = 1) + #0110 + + + 0111 + 575 us(BESL = 0) / 1950 us(BESL = 1) + #0111 + + + 1000 + 650 us(BESL = 0) / 2950 us(BESL = 1) + #1000 + + + 1001 + 725 us(BESL = 0) / 3950 us(BESL = 1) + #1001 + + + 1010 + 800 us(BESL = 0) / 4950 us(BESL = 1) + #1010 + + + 1011 + 875 us(BESL = 0) / 5950 us(BESL = 1) + #1011 + + + 1100 + 950 us(BESL = 0) / 6950 us(BESL = 1) + #1100 + + + 1101 + 1025 us(Setting prohibited(BESL = 0)) / 7950 us(BESL = 1) + #1101 + + + 1110 + 1100 us(Setting prohibited(BESL = 0)) / 8950 us(BESL = 1) + #1110 + + + 1111 + 1175 us(Setting prohibited(BESL = 0)) / 9950 us(BESL = 1) + #1111 + + + + + L1ADDR + LPM Token DeviceAddressThese bits specify the value to be set in the ADDR field of LPM token. 0 - 0 + 3 read-write - zeroToClear - modify + + + + + DPUSR0R + Deep Standby USB Transceiver Control/Pin Monitor Register + 0x160 + 32 + read-only + 0x00000000 + 0xFF4FFFFF + + + DVBSTSHM + VBUS InputIndicates VBUS input signal on the HS side of USB port. + 23 + 23 + read-only + + + DOVCBHM + OVRCURB InputIndicates OVRCURB input signal on the HS side of USB port. + 21 + 21 + read-only + + + DOVCAHM + OVRCURA InputIndicates OVRCURA input signal on the HS side of USB port. + 20 + 20 + read-only + + + + + DPUSR1R + Deep Standby USB Suspend/Resume Interrupt Register + 0x164 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + + + DVBSTSH + Indication of Return from VBUS Interrupt Source + 23 + 23 + read-only 0 - Interrupts are not generated. + Indicates deep software standby mode #0 1 - Interrupts are generated. + Indicates return from deep software standby mode #1 - - - - BEMPSTS - BEMP Interrupt Status Register - 0x04A - 16 - read-write - 0x0000 - 0xFFFF - - 10 - 1 - PIPE%sBEMP - BEMP Interrupt Status for PIPE - 0 - 0 - read-write - zeroToClear - modify + DOVCBH + Indication of Return from OVRCURB Interrupt Source + 21 + 21 + read-only 0 - Interrupts are not generated. + Indicates deep software standby mode #0 1 - Interrupts are generated. + Indicates return from deep software standby mode #1 - - - - FRMNUM - Frame Number Register - 0x04C - 16 - read-write - 0x0000 - 0xFFFF - - OVRN - Overrun/Underrun Detection Status - 15 - 15 - read-write + DOVCAH + Indication of Return from OVRCURA Interrupt Source + 20 + 20 + read-only 0 - No error + Indicates deep software standby mode #0 1 - An error occurred + Indicates return from deep software standby mode #1 - CRCE - Receive Data Error - 14 - 14 + DVBSTSHE + VBUS Interrupt Enable/Clear + 7 + 7 read-write 0 - No error + Disables return from deep software standby mode #0 1 - An error occurred + Enables return from deep software standby mode #1 - FRNM - Frame NumberLatest frame number - 0 - 10 - read-only - - - - - UFRMNUM - uFrame Number Register - 0x04E - 16 - read-write - 0x0000 - 0x8007 - - - DVCHG - Device State Change - 15 - 15 + DOVCBHE + OVRCURB Interrupt Enable Clear + 5 + 5 read-write 0 - Disables the writing to the USBADDR.STSRECOV0[2:0] bits and USBADDR.USBADDR[6:0]. + Disables return from deep software standby mode #0 1 - Enables the writing to the USBADDR.STSRECOV0[2:0] bits and USBADDR.USBADDR[6:0]. + Enables return from deep software standby mode #1 - UFRNM - MicroframeIndicate the microframe number. - 0 - 2 - read-only - - - - - USBADDR - USB Address Register - 0x050 - 16 - read-write - 0x0000 - 0x077F - - - STSRECOV0 - Status Recovery - 8 - 10 + DOVCAHE + OVRCURA Interrupt Enable Clear + 4 + 4 read-write - 001 - Return to the full-speed state(bits DVSTCTR0.RHST[2:0] = 010b), bits INTSTS0.DVSQ[2:0] = 001b (Default state)(function controller selected) - #001 - - - 010 - Return to the full-speed state (bits DVSTCTR0.RHST[2:0] = 010b), bits INTSTS0.DVSQ[2:0] = 010b (Address state)(function controller selected)/ Return to the low-speed state (bitsDVSTCTR0.RHST[2:0] = 001b)(host controller is selected) - #010 - - - 011 - Return to the full-speed state (bits DVSTCTR0.RHST[2:0] = 010b), bits INTSTS0.DVSQ[2:0] = 011b (Configured state)(function controller selected) - #011 - - - 100 - Return to the full-speed state (bits DVSTCTR0.RHST[2:0] = 010b)(host controller selected) - #100 - - - 101 - Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b), bits INTSTS0.DVSQ[2:0] = 001b (Default state)(function controller selected) - #101 - - - 110 - Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b), bits INTSTS0.DVSQ[2:0] = 010b (Address state)(function controller selected)/ Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b)(host controller selected) - #110 - - - 111 - Return to the high-speed state (bits DVSTCTR0.RHST[2:0] = 011b), bits INTSTS0.DVSQ[2:0] = 011b (Configured state)(function controller selected) - #111 + 0 + Disables return from deep software standby mode + #0 - others - Setting prohibited. - true + 1 + Enables return from deep software standby mode + #1 - - USBADDR - USB Address In device controller mode, these flags indicate the USB address assigned by the host when the USBHS processed the SET_ADDRESS request successfully. - 0 - 6 - read-only - - - - - USBREQ - USB Request Type Register - 0x054 - 16 - read-write - 0x0000 - 0xFFFF - - - BREQUEST - RequestThese bits store the USB request bRequest value. - 8 - 15 - read-write - - - BMREQUESTTYPE - Request TypeThese bits store the USB request bmRequestType value. - 0 - 7 - read-write - - - - - USBVAL - USB Request Value Register - 0x056 - 16 - read-write - 0x0000 - 0xFFFF - - - WVALUE - ValueThese bits store the USB request Value value. - 0 - 15 - read-write - - - - - USBINDX - USB Request Index Register - 0x058 - 16 - read-write - 0x0000 - 0xFFFF - - - WINDEX - IndexThese bits store the USB request wIndex value. - 0 - 15 - read-write - - USBLENG - USB Request Length Register - 0x05A + DPUSR2R + Deep Standby USB Suspend/Resume Interrupt Register + 0x168 16 read-write 0x0000 0xFFFF - WLENGTH - LengthThese bits store the USB request wLength value. - 0 - 15 + DMINTE + DM Interrupt Enable Clear + 9 + 9 read-write + + + 0 + Disables return from deep software standby mode + #0 + + + 1 + Enables return from deep software standby mode + #1 + + - - - - DCPCFG - DCP Configuration Register - 0x05C - 16 - read-write - 0x0000 - 0xFFFF - - CNTMD - Continuous Transfer Mode + DPINTE + DP Interrupt Enable Clear 8 8 read-write 0 - Non-continuous transfer mode + Disables return from deep software standby mode #0 1 - Continuous transfer mode + Enables return from deep software standby mode #1 - SHTNAK - Pipe Disabled at End of Transfer - 7 - 7 - read-write + DMVAL + DM InputIndicates DM input signal on the HS side of USB port. + 5 + 5 + read-only + + + DPVAL + DP InputIndicates DP input signal on the HS side of USB port. + 4 + 4 + read-only + + + DMINT + Indication of Return from DM Interrupt Source + 1 + 1 + read-only 0 - Pipe continued at the end of transfer + Indicates deep software standby mode #0 1 - Pipe disabled at the end of transfer + Indicates return from deep software standby mode #1 - DIR - Transfer Direction - 4 - 4 - read-write + DPINT + Indication of Return from DP Interrupt Source + 0 + 0 + read-only 0 - Data receiving direction + Indicates deep software standby mode #0 1 - Data transmitting direction + Indicates return from deep software standby mode #1 @@ -72673,1162 +84567,1655 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - DCPMAXP - DCP Maximum Packet Size Register - 0x05E + DPUSRCR + Deep Standby USB Suspend/Resume Command Register + 0x16A 16 read-write - 0x0040 + 0x0000 0xFFFF - DEVSEL - Device Select - 12 - 15 + FIXPHYPD + USB Transceiver Control Fix for PLL + 1 + 1 read-write - 0000 - Address 0000 - #0000 - - - 0001 - Address 0001 - #0001 - - - 0010 - Address 0010 - #0010 - - - 0011 - Address 0011 - #0011 - - - 0100 - Address 0100 - #0100 - - - 0101 - Address 0101 - #0101 + 0 + Normal mode + #0 - others - Settings prohibited. - true + 1 + Go to/Return from deep software standby mode + #1 - MXPS - Maximum Packet SizeThese bits set the maximum amount of data (maximum packet size) in payloads for the DCP. + FIXPHY + USB Transceiver Control Fix 0 - 6 + 0 read-write - 0x08 - 8 bytes - 0x08 - - - 0x10 - 16 bytes - 0x10 - - - 0x18 - 24 bytes - 0x18 - - - 0x20 - 32 bytes - 0x20 - - - 0x28 - 40 bytes - 0x28 - - - 0x30 - 48 bytes - 0x30 - - - 0x38 - 56 bytes - 0x38 - - - 0x40 - 64 bytes - 0x40 - - - 0x48 - 72 bytes - 0x48 - - - 0x50 - 80 bytes - 0x50 - - - 0x58 - 88 bytes - 0x58 - - - 0x60 - 96 bytes - 0x60 - - - 0x68 - 104 bytes - 0x68 - - - 0x70 - 112 bytes - 0x70 - - - 0x78 - 120 bytes - 0x78 + 0 + Normal mode + #0 - others - Setting prohibited - true + 1 + Go to/Return from deep software standby mode + #1 - DCPCTR - DCP Control Register - 0x060 - 16 + DPUSR0R_FS + Deep Software Standby USB Transceiver Control/Pin Monitor Register + 0x400 + 32 read-write - 0x0040 - 0xFFFF + 0x00000000 + 0xFF4CFFFF - BSTS - Buffer Status - 15 - 15 + DVBSTS0 + USB VBUS InputIndicates the VBUS input signal of the USB. + 23 + 23 + read-only + + + DOVCB0 + USB OVRCURB InputIndicates the OVRCURB input signal of the USB. + 21 + 21 + read-only + + + DOVCA0 + USB OVRCURA InputIndicates the OVRCURA input signal of the USB. + 20 + 20 + read-only + + + DM0 + USB D-InputIndicates the D- input signal of the USB. + 17 + 17 + read-only + + + DP0 + USB0 D+ InputIndicates the D+ input signal of the USB. + 16 + 16 read-only + + + FIXPHY0 + USB Transceiver Output Fix + 4 + 4 + read-write 0 - Buffer access is disabled. + The outputs are fixed in normal mode and on return from deep software standby mode. #0 1 - Buffer access is enabled. + The outputs are fixed on transitions to deep software standby mode. #1 - SUREQ - Setup Token Transmission - 14 - 14 + DRPD0 + D+/D- Pull-Down Resistor Control + 3 + 3 read-write 0 - Invalid + Disables DP/DM pull-down resistor. #0 1 - Transmits the setup packet. + Enables DP/DM pull-down resistor. #1 - SUREQCLR - SUREQ Bit Clear - 11 - 11 + RPUE0 + DP Pull-Up Resistor Control + 1 + 1 read-write 0 - Invalid + Disables DP pull-up resistor. #0 1 - Clears the SUREQ bit to 0. + Enables DP pull-up resistor. #1 - SQCLR - Sequence Toggle Bit Clear - 8 - 8 + SRPC0 + USB Single End Receiver Control + 0 + 0 read-write 0 - Invalid + Input through the DP and DM inputs is disabled. #0 1 - Specifies DATA0. + Input through the DP and DM inputs is enabled. #1 + + + + DPUSR1R_FS + Deep Software Standby USB Suspend/Resume Interrupt Register + 0x404 + 32 + read-write + 0x00000000 + 0xFFFFFFFF + - SQSET - Sequence Toggle Bit Set - 7 - 7 - read-write + DVBINT0 + USB VBUS Interrupt Source Recovery + 23 + 23 + read-only 0 - Invalid + The system has not returned from deep software standby mode. #0 1 - Specifies DATA1. + The system has returned from deep software standby mode. #1 - SQMON - Sequence Toggle Bit Monitor - 6 - 6 + DOVRCRB0 + USB OVRCURB Interrupt Source Recovery + 21 + 21 read-only 0 - DATA0 + The system has not returned from deep software standby mode. #0 1 - DATA1 + The system has returned from deep software standby mode. #1 - PBUSY - Pipe Busy - 5 - 5 + DOVRCRA0 + USB OVRCURA Interrupt Source Recovery + 20 + 20 read-only 0 - DCP is not used for the transaction. + The system has not returned from deep software standby mode. #0 1 - DCP is used for the transaction. + The system has returned from deep software standby mode. #1 - CCPL - Control Transfer End Enable - 2 - 2 - read-write + DMINT0 + USB DM Interrupt Source Recovery + 17 + 17 + read-only 0 - Invalid + The system has not returned from deep software standby mode. #0 1 - Completion of control transfer is enabled. + The system has returned from deep software standby mode. #1 - PID - Response PID - 0 - 1 - read-write - - - 00 - NAK response - #00 - - - 01 - BUF response (depending on the buffer state) - #01 - - - 10 - STALL response - #10 - - - 11 - STALL response - #11 - - - - - - - PIPESEL - Pipe Window Select Register - 0x064 - 16 - read-write - 0x0000 - 0xFFFF - - - PIPESEL - Pipe Window Select - 0 - 3 - read-write + DPINT0 + USB DP Interrupt Source Recovery + 16 + 16 + read-only - 0000 - No pipe selected - #0000 - - - 0001 - PIPE1 - #0001 - - - 0010 - PIPE2 - #0010 - - - 0011 - PIPE3 - #0011 - - - 0100 - PIPE4 - #0100 - - - 0101 - PIPE5 - #0101 - - - 0110 - PIPE6 - #0110 - - - 0111 - PIPE7 - #0111 - - - 1000 - PIPE8 - #1000 - - - 1001 - PIPE9 - #1001 + 0 + The system has not returned from deep software standby mode. + #0 - others - Settings prohibited. - true + 1 + The system has returned from deep software standby mode. + #1 - - - - PIPECFG - Pipe Configuration Register - 0x068 - 16 - read-write - 0x0000 - 0xFFFF - - TYPE - Transfer Type - 14 - 15 + DVBSE0 + USB VBUS Interrupt Enable/Clear + 7 + 7 read-write - 00 - Pipe not used - #00 - - - 01 - Bulk transfer(PIPE1 and PIPE5) /Setting prohibited(PIPE6 to PIPE9) - #01 - - - 10 - Setting prohibited(PIPE1 and PIPE5) /Interrupt transfer(PIPE6 to PIPE9) - #10 + 0 + Recovery from deep software standby mode is disabled. + #0 - 11 - Isochronous transfer(PIPE1 and PIPE2) /Setting prohibited(PIPE3 to PIPE9) - #11 + 1 + Recovery from deep software standby mode is enabled. + #1 - BFRE - BRDY Interrupt Operation Specification - 10 - 10 + DOVRCRBE0 + USB OVRCURB Interrupt Enable/Clear + 5 + 5 read-write 0 - BRDY interrupt upon transmitting or receiving data + Recovery from deep software standby mode is disabled. #0 1 - BRDY interrupt upon completion of reading data + Recovery from deep software standby mode is enabled. #1 - DBLB - Double Buffer Mode - 9 - 9 + DOVRCRAE0 + USB OVRCURA Interrupt Enable/Clear + 4 + 4 read-write 0 - Single buffer + Recovery from deep software standby mode is disabled. #0 1 - Double buffer + Recovery from deep software standby mode is enabled. #1 - SHTNAK - Pipe Disabled at End of Transfer - 7 - 7 + DMINTE0 + USB DM Interrupt Enable/Clear + 1 + 1 read-write 0 - Continue pipe operation after transfer ends + Recovery from deep software standby mode is disabled. #0 1 - Disable pipe operation after transfer ends. + Recovery from deep software standby mode is enabled. #1 - DIR - Transfer Direction - 4 - 4 + DPINTE0 + USB DP Interrupt Enable/Clear + 0 + 0 read-write 0 - Receiving direction + Recovery from deep software standby mode is disabled. #0 1 - Transmitting direction + Recovery from deep software standby mode is enabled. #1 + + + + + + R_USB_HS0 + 0x40060000 + + + R_WDT + Watchdog Timer + 0x40044200 + + 0x00000000 + 0x01 + registers + + + 0x00000002 + 0x005 + registers + + + 0x00000008 + 0x01 + registers + + + + WDTRR + WDT Refresh Register + 0x00 + 8 + read-write + 0xFF + 0xFF + - EPNUM - Endpoint NumberThese bits specify the endpoint number for the selected pipe.Setting 0000b means unused pipe. + WDTRR + WDTRR is an 8-bit register that refreshes the down-counter of the WDT. 0 - 3 + 7 read-write - PIPEMAXP - Pipe Maximum Packet Size Register - 0x06C + WDTCR + WDT Control Register + 0x02 16 read-write - 0x0000 - 0xFFBF + 0x33F3 + 0xFFFF - DEVSEL - Device Select + RPSS + Window Start Position Selection 12 - 15 + 13 read-write - 0000 - Address 0000 - #0000 + 00 + 25% + #00 - 0001 - Address 0001 - #0001 + 01 + 50% + #01 - 0010 - Address 0010 - #0010 + 10 + 75% + #10 - 0011 - Address 0011 - #0011 + 11 + 100% (window start position is not specified) + #11 + + + + RPES + Window End Position Selection + 8 + 9 + read-write + - 0100 - Address 0100 - #0100 + 00 + 75% + #00 - 0101 - Address 0101 - #0101 + 01 + 50% + #01 - others - Settings prohibited. - true + 10 + 25% + #10 + + + 11 + 0% (window end position is not specified) + #11 - MXPS - Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to 256 bytes (100h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes (010h), 32 bytes (020h), 64 bytes (040h) (Bits [8:7] and [2:0] are not provided.)PIPE6 to PIPE9: 1 byte (001h) to 64 bytes (040h) (Bits [8:7] are not provided.) - 0 - 8 - read-write - - - - - PIPEPERI - Pipe Cycle Control Register - 0x06E - 16 - read-write - 0x0000 - 0xFFFF - - - IFIS - Isochronous IN Buffer Flush - 12 - 12 + CKS + Clock Division Ratio Selection + 4 + 7 read-write - 0 - The buffer is not flushed. - #0 + 0001 + PCLK/4 + #0001 - 1 - The buffer is flushed. - #1 + 0100 + PCLK/64 + #0100 + + + 1111 + PCLK/128 + #1111 + + + 0110 + PCLK/512 + #0110 + + + 0111 + PCLK/2048 + #0111 + + + 1000 + PCLK/8192 + #1000 + + + others + setting prohibited + true - IITV - Interval Error Detection IntervalSpecifies the interval error detection timing for the selected pipe in terms of frames, which is expressed as nth power of 2. + TOPS + Timeout Period Selection 0 - 2 + 1 read-write + + + 00 + 1,024 cycles (03FFh) + #00 + + + 01 + 4,096 cycles (0FFFh) + #01 + + + 10 + 8,192 cycles (1FFFh) + #10 + + + 11 + 16,384 cycles (3FFFh) + #11 + + - 9 - 0x002 - PIPE_CTR[%s] - Pipe %s Control Register - 0x070 + WDTSR + WDT Status Register + 0x04 16 read-write 0x0000 0xFFFF - BSTS - Buffer Status + REFEF + Refresh Error Flag 15 15 - read-only + read-write + zeroToClear + modify 0 - Buffer access by the CPU is disabled. + No refresh error occurred #0 1 - Buffer access by the CPU is enabled. + Refresh error occurred #1 - INBUFM - Transmit Buffer Monitor + UNDFF + Underflow Flag 14 14 - read-only + read-write + zeroToClear + modify 0 - No data to be transmitted is in the FIFO buffer + No underflow occurred #0 1 - Data to be transmitted is in the FIFO buffer + Underflow occurred #1 - CSCLR - CSPLIT Status ClearSet this bit to 1 when clearing the CSSTS bit of the relevant pipe - 13 + CNTVAL + Down-Counter Value + 0 13 + read-only + + + + + WDTRCR + WDT Reset Control Register + 0x06 + 8 + read-write + 0x80 + 0xFF + + + RSTIRQS + Reset Interrupt Request Selection + 7 + 7 read-write 0 - Writing is disabled. + Non-maskable interrupt request or interrupt request output is enabled #0 1 - The CSSTS bit is cleared. + Reset output is enabled. #1 + + + + WDTCSTPR + WDT Count Stop Control Register + 0x08 + 8 + read-write + 0x80 + 0xFF + - CSSTS - CSSTS StatusThis bit indicates the CSPLIT status of Split Transaction of the relevant pipe - 12 - 12 - read-only + SLCSTP + Sleep-Mode Count Stop Control + 7 + 7 + read-write 0 - SSplit Transaction processing is in progress or transfer without Split Transaction is in progress. + Count stop is disabled. #0 1 - CSplit Transaction processing is in progress. + Count is stopped at a transition to sleep mode. #1 + + + + + + R_TZF + TrustZone Filter + 0x40000E00 + + 0x00 + 2 + registers + + + 0x04 + 2 + registers + + + 0x180 + 4 + registers + + + + TZFOAD + TrustZone Filter Operation After Detection Register + 0x00 + 16 + read-write + 0x0000 + 0xffff + - ATREPM - Auto Response Mode - 10 - 10 + OAD + Operation after detection + 0 + 0 read-write 0 - Auto response disabled. + Reset #0 1 - Auto response enabled. + Non-maskable interrupt #1 - ACLRM - Auto Buffer Clear Mode - 9 - 9 + KEY + KeyCode + 8 + 15 + write-only + + + + + TZFPT + TrustZone Filter Protect Register + 0x04 + 16 + read-write + 0x0000 + 0xffff + + + PROTECT + Protection of register + 0 + 0 read-write 0 - Disabled + All Bus TrustZone Filter register writing is protected. Read is possible. #0 1 - Enabled (all buffers are initialized) + All Bus TrustZone Filter register writing is possible. #1 - SQCLR - Sequence Toggle Bit Clear + KEY + KeyCode 8 - 8 + 15 + write-only + + + + + TZFSAR + TrustZone Filter Security Attribution Register + 0x180 + 32 + read-write + 0xffffffff + 0xffffffff + + + TZFSA0 + Security attributes of registers for TrustZone Filter + 0 + 0 read-write 0 - Write disabled + Secure #0 1 - Specifies DATA0. + Non-secure #1 + + + + + + R_CPSCU + CPU System Security Control Unit + 0x40008000 + + 0x10 + 4 + registers + + + 0x14 + 4 + registers + + + 0x30 + 8 + registers + + + 0x40 + 0x12 + registers + + + 0x70 + 0x0C + registers + + + 0x100 + 8 + registers + + + 0x130 + 8 + registers + + + 0x1B0 + 4 + registers + + + + SRAMSAR + SRAM Security Attribution Register + 0x10 + 32 + read-write + 0xffffffff + 0xffffffff + - SQSET - Sequence Toggle Bit Set - 7 - 7 + SRAMSA0 + Security attributes of registers for SRAM Protection + 0 + 0 read-write - 0 - Write disabled - #0 + 0x0 + Secure + 0x0 - 1 - Specifies DATA1. - #1 + 0x1 + Nonsecure + 0x1 - SQMON - Sequence Toggle Bit Confirmation - 6 - 6 - read-only + SRAMSA1 + Security attributes of registers for SRAM Protection 2 + 1 + 1 + read-write - 0 - DATA0 - #0 + 0x0 + Secure + 0x0 - 1 - DATA1 - #1 + 0x1 + Nonsecure + 0x1 - PBUSY - Pipe Busy - 5 - 5 - read-only + SRAMSA2 + Security attributes of registers for ECC Relation + 2 + 2 + read-write - 0 - Pipe n not in use for the transaction - #0 + 0x0 + Secure + 0x0 - 1 - Pipe n in use for the transaction. - #1 + 0x1 + Nonsecure + 0x1 + + + + STBRAMSAR + Standby RAM memory Security Attribution Register + 0x014 + 32 + read-write + 0xfffffff0 + 0xffffffff + - PID - Response PID + NSBSTBR + Security attributes of each region for Standby RAM 0 - 1 + 3 read-write - 00 - NAK response - #00 + 0x0 + Region7-0 are all Secure. + 0x0 - 01 - BUF response (depending on the buffer state) - #01 + 0x1 + Region7 is Non-secure. Region6-0 are Secure + 0x1 - 10 - STALL response - #10 + 0x2 + Region7-6 are Non-secure. Region5-0 are Secure. + 0x2 - 11 - STALL response - #11 + 0x3 + Region7-5 are Non-secure. Region4-0 are Secure. + 0x3 + + + 0x4 + Region7-4 are Non-secure. Region 3-0 are Secure. + 0x4 + + + 0x5 + Region7-3 are Non-secure. Region 2-0 are Secure. + 0x5 + + + 0x6 + Region7-2 are Non-secure. Region 1-0 are Secure. + 0x6 + + + 0x7 + Region7-1 are Non-Secure. Region0 is Secure. + 0x7 + + + Others + Region7-0 are all Non-Secure. + true - 10 - 0x002 - DEVADD[%s] - Device Address Configuration Register - 0x0D0 - 16 + DTCSAR + DTC Controller Security Attribution Register + 0x30 + 32 read-write - 0x0000 - 0xFFFF + 0xffffffff + 0xffffffff - UPPHUB - Communication Target Connecting Hub Register - 11 - 14 + DTCSTSA + DTC Security Attribution + 0 + 0 read-write - - - 0x0000 - 0x1010 - - - 0000 - Directly connected to the port of the USBHS. - #0000 + 0 + Secure. + #0 - UPPHUB - USB address of the hub - true + 1 + Non-Secure. + #1 + + + + + + + DMACSAR + DMAC Controller Security Attribution Register + 0x34 + 32 + read-write + 0xffffffff + 0xffffffff + + + DMASTSA + DMAST Security Attribution + 0 + 0 + read-write + + + 0 + Secure + #0 + + + 1 + Non-secure + #1 + + + + ICUSARA + ICU Security Attribution Register A + 0x40 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SAIRQCRn + Security Attributes of registers for the IRQCRn registers + 0 + 15 + read-write + + + + + ICUSARB + ICU Security Attribution Register B + 0x44 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SANMI + Security Attributes of nonmaskable interrupt + 0 + 0 + read-write + + + + + ICUSARC + ICU Security Attribution Register C + 0x48 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SADMACn + Security Attributes of registers for DMAC channel + 0 + 7 + read-write + + + + + ICUSARD + ICU Security Attribution Register D + 0x4C + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SASELSR0 + Security Attributes of registers for SELSR0 + 0 + 0 + read-write + + + + + ICUSARE + ICU Security Attribution Register E + 0x50 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SAIWDTWUP + Security Attributes of registers for WUPEN0.b 16 + 16 + 16 + read-write + + + SALVD1WUP + Security Attributes of registers for WUPEN0.b 18 + 18 + 18 + read-write + + + SALVD2WUP + Security Attributes of registers for WUPEN0.b 19 + 19 + 19 + read-write + + + SARTCALMWUP + Security Attributes of registers for WUPEN0.b 24 + 24 + 24 + read-write + + + SARTCPRDWUP + Security Attributes of registers for WUPEN0.b 25 + 25 + 25 + read-write + + + SAUSBFS0WUP + Security Attributes of registers for WUPEN0.b 27 + 27 + 27 + read-write + + + SAAGT1UDWUP + Security Attributes of registers for WUPEN0.b 28 + 28 + 28 + read-write + + + SAAGT1CAWUP + Security Attributes of registers for WUPEN0.b 29 + 29 + 29 + read-write + + + SAAGT1CBWUP + Security Attributes of registers for WUPEN0.b 30 + 30 + 30 + read-write + + + SAIIC0WUP + Security Attributes of registers for WUPEN0.b 31 + 31 + 31 + read-write + + + + + ICUSARF + ICU Security Attribution Register F + 0x54 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SAAGT3UDWUP + Security Attributes of registers for WUPEN1.b 0 + 0 + 0 + read-write + + + SAAGT3CAWUP + Security Attributes of registers for WUPEN1.b 1 + 1 + 1 + read-write + + + SAAGT3CBWUP + Security Attributes of registers for WUPEN1.b 2 + 2 + 2 + read-write + + + + + ICUSARG + ICU Security Attribution Register G + 0x70 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + + + SAIELSRn + Security Attributes of registers for IELSR31 to IELSR0 + 0 + 31 + read-write + + + + + ICUSARH + ICU Security Attribution Register H + 0x74 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + - HUBPORT - Communication Target Connecting Hub Port - 8 - 10 + SAIELSRn + Security Attributes of registers for IELSR63 to IELSR32 + 0 + 31 read-write - - - 000 - Directly connected to the port of the USBHS. - #000 - - - others - Port number of the hub - true - - + + + + ICUSARI + ICU Security Attribution Register I + 0x78 + 32 + read-write + 0xFFFFFFFF + 0xFFFFFFFF + - USBSPD - Transfer Speed of Communication Target Device - 6 - 7 + SAIELSRn + Security Attributes of registers for IELSR95 to IELSR64 + 0 + 31 read-write - - - 00 - DEVADDn is not used - #00 - - - 01 - Low speed - #01 - - - 10 - Full speed - #10 - - - 11 - Setting prohibited - #11 - - - USBBCCTRL0 - BC Control Register 0 - 0x0B0 - 16 + BUSSARA + Bus Security Attribution Register A + 0x100 + 32 read-write - 0x0000 - 0xFFFF + 0xffffffff + 0xffffffff - PDDETSTS0 - D+ Pin 0.6 V Input Detection Status - 9 - 9 - read-only + BUSSA0 + BUS Security Attribution A0 + 0 + 0 + read-write 0 - Not detected + Secure #0 1 - Detected + Non-Secure #1 + + + + BUSSARB + Bus Security Attribution Register B + 0x104 + 32 + read-write + 0xffffffff + 0xffffffff + - CHGDETSTS0 - D- Pin 0.6 V Input Detection Status - 8 - 8 - read-only + BUSSB0 + BUS Security Attribution B0 + 0 + 0 + read-write 0 - Not detected + Secure #0 1 - Detected + Non-Secure #1 + + + + MMPUSARA + Master Memory Protection Unit Security Attribution Register A + 0x130 + 32 + read-write + 0xffffffff + 0xffffffff + - BATCHGE0 - BC (Battery Charger) Function Ch0 General Enable Control - 7 + MMPUAnSA + MMPUAn Security Attribution (n = 0 to 7) + 0 7 read-write 0 - Disabled + Secure #0 1 - Enabled + Non-Secure #1 + + + + MMPUSARB + Master Memory Protection Unit Security Attribution Register B + 0x134 + 32 + read-write + 0xffffffff + 0xffffffff + - VDMSRCE0 - D- Pin VDMSRC (0.6 V) Output Control - 5 - 5 + MMPUB0SA + MMPUB0 Security Attribution + 0 + 0 read-write 0 - Stop + Secure #0 1 - 0.6V output + Non-Secure #1 + + + + CPUDSAR + CPU Debug Security Attribution Register + 0x1B0 + 32 + read-write + 0xffffffff + 0xffffffff + - IDPSINKE0 - D+ Pin 0.6 V Input Detection (Comparator and Sink) Control - 4 - 4 + CPUDSA0 + CPU Debug Security Attribution 0 + 0 + 0 read-write 0 - Detection off + Secure #0 1 - Detection on ( Comparator and sink current on ) + Non-secure #1 + + + + + + R_OSPI + Octa Serial Peripheral Interface + 0x400A6000 + + 0x00 + 36 + registers + + + 0x34 + 52 + registers + + + 0x7C + 8 + registers + + + + DCR + Device Command Register + 0x00 + 32 + read-write + 0x00000000 + 0xffffffff + + + DVCMD0 + Device Command data + 0 + 7 + read-write + - VDPSRCE0 - D+ Pin VDPSRC (0.6 V) Output Control - 3 - 3 + DVCMD1 + Device Command data + 8 + 15 + read-write + + + + + DAR + Device Address Register + 0x04 + 32 + read-write + 0x00000000 + 0xffffffff + + + DVAD0 + Device Address data 0 + 0 + 7 + read-write + + + DVAD1 + Device Address data 1 + 8 + 15 + read-write + + + DVAD2 + Device Address data 2 + 16 + 23 + read-write + + + DVAD3 + Device Address data 3 + 24 + 31 + read-write + + + + + DCSR + Device Command Setting Register + 0x08 + 32 + read-write + 0x00000000 + 0xffffffff + + + DALEN + Transfer data length setting + 0 + 7 + read-write + + + DMLEN + Dummy cycle setting + 8 + 15 + read-write + + + ACDV + Access Device setting + 19 + 19 read-write 0 - Stop + Send commands to device 0. #0 1 - 0.6V output + Send commands to device 1. #1 - IDMSINKE0 - D- Pin 0.6 V Input Detection (Comparator and Sink) Control - 2 - 2 + CMDLEN + Transfer command length setting + 20 + 22 + read-write + + + DAOR + Data order setting + 23 + 23 read-write 0 - Detection off + byte0, byte1, byte2, byte3 #0 1 - Detection on ( Comparator and sink current on ) + byte1, byte0, byte3, byte2 #1 - IDPSRCE0 - D+ Pin IDPSRC Output Control - 1 - 1 + ADLEN + Transfer address length setting + 24 + 26 + read-write + + + DOPI + DOPI single byte setting + 27 + 27 read-write 0 - Stop + Each cycle has two bytes data. (normal DOPI mode) #0 1 - 10uA output + Each cycle has one byte data. (The byte data changes at the rising edge of the + clock and does not change at the falling edge of the clock.) #1 - RPDME0 - D- Pin Pull-Down Control - 0 - 0 + ACDA + Data Access Control + 28 + 28 read-write 0 - Pull-down off + Register access +Do not arrange the transfer data. + #0 1 - Pull-down on + Data access #1 - - - - UCKSEL - USB Clock Selection Register - 0x0C4 - 16 - read-write - 0x0000 - 0xFFFF - - UCKSELC - USB Clock Selection - 0 - 0 + PREN + Preamble bit enable for OctaRAM + 29 + 29 read-write 0 - High-speed on-chip oscillator clock (HOCO) is not selected as USB clock + No check preamble bit from OctaRAM #0 1 - High-speed on-chip oscillator clock (HOCO) is selected as USB clock + Check preamble bit from OctaRAM #1 @@ -73836,1052 +86223,1189 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - USBMC - USB Module Control Register - 0x0CC - 16 + 2 + 4 + DSR[%s] + Device Size Register 0 + 0x0C + 32 read-write - 0x0002 - 0xFFFF + 0x00000000 + 0xffffffff - VDCEN - USB Regulator On/Off Control - 7 - 7 + DVSZ + Device size setting + 0 + 29 + read-write + + + DVTYP + Device type setting + 30 + 31 read-write - 0 - USB regulator off - #0 + 00 + flash on device 0 + #00 - 1 - USB regulator on - #1 + 01 + RAM on device 0 + #01 - - - - VDDUSBE - USB Reference Power Supply Circuit On/Off Control - 0 - 0 - read-write - - 0 - USB reference power supply circuit off - #0 + 10 + no connection on device 0 + #10 - 1 - USB reference power supply circuit on - #1 + 11 + forbidden + #11 - PHYSLEW - PHY Cross Point Adjustment Register - 0x0F0 + MDTR + Memory Delay Trim Register + 0x14 32 read-write - 0x0000000E - 0xFF4CFFFF + 0x06009400 + 0xffffffff - SLEWF01 - Receiver Cross Point Adjustment 01 - 3 - 3 + DV0DEL + Device 0 delay setting + 0 + 7 read-write - - - 1 - Host or device controller mode. - #1 - - - SLEWF00 - Receiver Cross Point Adjustment 00 - 2 - 2 + DQSERAM + OM_DQS enable counter + 8 + 11 read-write - - - 1 - Host or device controller mode. - #1 - - - SLEWR01 - Receiver Cross Point Adjustment 01 - 1 - 1 + DQSESOPI + OM_DQS enable counter + 12 + 15 read-write - - - 1 - Host or device controller mode. - #1 - - - SLEWR00 - Receiver Cross Point Adjustment 00 + DV1DEL + Device 1 delay setting + 16 + 23 + read-write + + + DQSEDOPI + OM_DQS enable counter + 24 + 27 + read-write + + + + + ACTR + Auto-Calibration Timer Register + 0x18 + 32 + read-write + 0x10000000 + 0xffffffff + + + CTP + Automatic calibration cycle time setting 0 - 0 + 31 read-write - - - 1 - Host or device controller mode. - #1 - - - LPCTRL - Low Power Control Register - 0x100 - 16 + 2 + 4 + ACAR[%s] + Auto-Calibration Address Register + 0x1C + 32 read-write - 0x0000 - 0x0181 + 0x00000000 + 0xffffffff - HWUPM - Resume Return Mode Setting - 7 - 7 + CAD + Automatic calibration address + 0 + 31 read-write - - - 0 - Hardware does not recover while CPU clock inactive - #0 - - - 1 - Hardware recovers while CPU clock inactive. - #1 - - - LPSTS - Low Power Status Register - 0x102 - 16 + DRCSTR + Device Memory Map Read Chip Select Timing Setting Register + 0x34 + 32 read-write - 0x0000 - 0x510B + 0x00000000 + 0xffffffff - SUSPENDM - UTMI SuspendM Control - 14 - 14 + CTRW0 + Device 0 single continuous read waiting cycle setting in PCLKH units + 0 + 6 + read-write + + + CTR0 + Device 0 single continuous read mode setting + 7 + 7 read-write 0 - UTMI suspension mode + Single continuous read mode is disabled for device 0. #0 1 - UTMI normal mode + Single continuous read mode is enabled for device 0. #1 - - - - BCCTRL - Battery Charging Control Register - 0x140 - 16 - read-write - 0x0000 - 0x033F - - PDDETSTS - PDDET Status - 9 - 9 - read-only + DVRDCMD0 + Device 0 Command execution interval setting + 8 + 10 + read-write - 0 - The PDDET pin is at low level. - #0 + 000 + 2 clock cycles + #000 + + + 001 + 5 clock cycles + #001 + + + 010 + 7 clock cycles + #010 + + + 011 + 9 clock cycles + #011 + + + 100 + 11 clock cycles + #100 + + + 101 + 13 clock cycles + #101 + + + 110 + 15 clock cycles + #110 - 1 - The PDDET pin is at high level. - #1 + 111 + 17 clock cycles + #111 - CHGDETSTS - CHGDET Status - 8 - 8 - read-only + DVRDHI0 + Device 0 select signal pull-up timing setting + 11 + 13 + read-write - 0 - The CHGDET pin is at low level. - #0 + 000 + Setting prohibit + #000 - 1 - The CHGDET pin is at high level. - #1 + 001 + Setting prohibit + #001 - - - - DCPMODE - DCP Mode Control - 5 - 5 - read-write - - 0 - The RDCP_DAT resistor is disabled - #0 + 010 + Setting prohibit + #010 - 1 - The RDCP_DAT resistor is enabled. - #1 + 011 + Setting prohibit (DOPI mode) +5 clock cycles (Other mode) + + #011 + + + 100 + Setting prohibit (DOPI mode) +6 clock cycles (Other mode) + + #100 + + + 101 + 6.5 clock cycles (DOPI mode) +7 clock cycles (Other mode) + + #101 + + + 110 + 7.5 clock cycles (DOPI mode) +8 clock cycles (Other mode) + + #110 + + + 111 + 8.5 clock cycles (DOPI mode) +9 clock cycles (Other mode) + + #111 - VDMSRCE - VDMSRC Control - 4 - 4 + DVRDLO0 + Device 0 select signal pull-down timing setting + 14 + 15 read-write - 0 - The VDM_SRC circuit is disabled. (Initial value) - #0 + 00 + Setting prohibit + #00 - 1 - The VDM_SRC circuit is enabled. - #1 + 01 + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + + #01 + + + 10 + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + + #10 + + + 11 + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + + #11 - IDPSINKE - IDPSINK Control - 3 - 3 + CTRW1 + Device 1 single continuous read waiting cycle setting in PCLKH units + 16 + 22 + read-write + + + CTR1 + Device 1 single continuous read mode setting + 23 + 23 read-write 0 - The IDP_SINK circuit is disabled. (Initial value) + Single continuous read mode is disabled for device 1. #0 1 - The IDP_SINK circuit is enabled. + Single continuous read mode is enabled for device 1. #1 - VDPSRCE - VDPSRC Control - 2 - 2 + DVRDCMD1 + Device 1 Command execution interval + 24 + 26 read-write - 0 - The VDP_SRC circuit is disabled. (Initial value) - #0 + 000 + 2 clock cycles + #000 - 1 - The VDP_SRC circuit is enabled. - #1 + 001 + 5 clock cycles + #001 + + + 010 + 7 clock cycles + #010 + + + 011 + 9 clock cycles + #011 + + + 100 + 11 clock cycles + #100 + + + 101 + 13 clock cycles + #101 + + + 110 + 15 clock cycles + #110 + + + 111 + 17 clock cycles + #111 - IDMSINKE - IDMSINK Control - 1 - 1 + DVRDHI1 + Device 1 select signal High timing setting + 27 + 29 read-write - 0 - The IDM_SINK circuit is disabled. (Initial value) - #0 + 000 + Setting prohibit + #000 - 1 - The IDM_SINK circuit is enabled. - #1 + 001 + Setting prohibit + #001 + + + 010 + Setting prohibit + #010 + + + 011 + Setting prohibit (DOPI mode) +5 clock cycles (Other mode) + + #011 + + + 100 + Setting prohibit (DOPI mode) +6 clock cycles (Other mode) + + #100 + + + 101 + 6.5 clock cycles (DOPI mode) +7 clock cycles (Other mode) + + #101 + + + 110 + 7.5 clock cycles (DOPI mode) +8 clock cycles (Other mode) + + #110 + + + 111 + 8.5 clock cycles (DOPI mode) +9 clock cycles (Other mode) + + #111 - IDPSRCE - IDPSRC Control - 0 - 0 + DVRDLO1 + Device 1 select signal pull-down timing setting + 30 + 31 read-write - 0 - The IDP_SRC circuit is disabled. (Initial value) - #0 + 00 + Setting prohibited + #00 - 1 - The IDP_SRC circuit is enabled. - #1 + 01 + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + + #01 + + + 10 + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + + #10 + + + 11 + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + + #11 - PL1CTRL1 - Function L1 Control Register 1 - 0x144 - 16 + DWCSTR + Device Memory Map Write Chip Select Timing Setting Register + 0x38 + 32 read-write - 0x0000 - 0x4FFF + 0x00000000 + 0xffffffff - L1EXTMD - PHY Control Mode at L1 Return - 14 - 14 + CTWW0 + Device 0 single continuous write waiting cycle setting in PCLKH units + 0 + 6 + read-write + + + CTW0 + Device 0 single continuous write mode setting + 7 + 7 read-write 0 - SUSPENDM is not set by hardware when Host K is received. + Single continuous write mode is disabled for device 0 #0 1 - SUSPENDM is set by hardware when Host K is received. + Single continuous write mode is enabled for device 0 #1 - HIRDTHR - L1 Response Negotiation Threshold ValueHIRD threshold value used for L1NEGOMD.The format is the same as the HIRD field in HL1CTRL. + DVWCMD0 + Device 0 Command execution interval setting 8 - 11 + 10 read-write - - - DVSQ - DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates the L1 state together with the device state bits DVSQ[2:0]. - 4 - 7 - read-only - 0000 - Powered state - #0000 + 000 + 2 clock cycles + #000 - 0001 - Default state - #0001 + 001 + 5 clock cycles + #001 - 0010 - Address state - #0010 + 010 + 7 clock cycles + #010 - 0011 - Configured state - #0011 + 011 + 9 clock cycles + #011 - 0100 - Suspended state - #0100 + 100 + 11 clock cycles + #100 - 0101 - Suspended state - #0101 + 101 + 13 clock cycles + #101 - 0110 - Suspended state - #0110 + 110 + 15 clock cycles + #110 - 0111 - Suspended state - #0111 + 111 + 17 clock cycles + #111 + + + + DVWHI0 + Device 0 select signal pull-up timing setting + 11 + 13 + read-write + - 1000 - L1 state - #1000 + 000 + 1.5 clock cycles (DOPI mode) +2 clock cycles (Other mode) + + #000 - 1001 - L1 state - #1001 + 001 + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + + #001 - 1010 - L1 state - #1010 + 010 + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + + #010 - 1011 - L1 state - #1011 + 011 + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + + #011 - others - setting prohibited - true + 100 + 5.5 clock cycles (DOPI mode) +6 clock cycles (Other mode) + + #100 - - - - L1NEGOMD - L1 Response Negotiation Control.NOTE: This bit is valid only when the L1RESPMD[1:0] value is 2'b11. - 3 - 3 - read-write - - 0 - When receive HIRD is larger than HIRDTHR[3:0], ACK response is returned. In other cases (including HIRD = HIRDTHR[3:0]), NYET response is returned. - #0 + 101 + 6.5 clock cycles (DOPI mode) +7 clock cycles (Other mode) + + #101 - 1 - When receive HIRD is smaller than HIRDTHR[3:0], ACK response is returned. In other cases (including HIRD = HIRDTHR[3:0]), NYET response is returned. - #1 + 110 + 7.5 clock cycles (DOPI mode) +8 clock cycles (Other mode) + + #110 + + + 111 + 8.5 clock cycles (DOPI mode) +9 clock cycles (Other mode) + + #111 - L1RESPMD - L1 Response Mode - 1 - 2 + DVWLO0 + Device 0 select signal pull-down timing setting + 14 + 15 read-write 00 - NYET + Setting prohibit #00 01 - ACK + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + #01 10 - STALL + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + #10 11 - According to the L1NEGOMD bit + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + #11 - L1RESPEN - L1 Response Enable - 0 - 0 + CTWW1 + Device 1 single continuous write waiting cycle setting in PCLKH units + 16 + 22 + read-write + + + CTW1 + Device 1 single continuous write mode setting + 23 + 23 read-write 0 - LPM is not supported. + Single continuous write mode is disabled for device 1 #0 1 - LPM is supported. + Single continuous write mode is enabled for device 1 #1 - - - - PL1CTRL2 - Function L1 Control Register 2 - 0x146 - 16 - read-write - 0x0000 - 0x1F00 - - RWEMON - RWE Value Monitor - 12 - 12 + DVWCMD1 + Device 1 Command execution interval setting + 24 + 26 read-write - 0 - The RWE bit value of the LPM token received last is reflected. - #0 + 000 + setting prohibited + #000 - 1 - The RWE bit value of the LPM token received last is reflected. - #1 + 001 + 5 clock cycles + #001 + + + 010 + 7 clock cycles + #010 + + + 011 + 9 clock cycles + #011 + + + 100 + 11 clock cycles + #100 + + + 101 + 13 clock cycles + #101 + + + 110 + 15 clock cycles + #110 + + + 111 + 17 clock cycles + #111 - HIRDMON - HIRD Value Monitor - 8 - 11 + DVWHI1 + Device 1 select signal pull-up timing setting + 27 + 29 read-write - 0 - The HIRD field value of the LPM token received last is reflected. - #0 + 000 + 1.5 clock cycles (DOPI mode) +2 clock cycles (Other mode) + + #000 - 1 - The HIRD field value of the LPM token received last is reflected. - #1 + 001 + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + + #001 + + + 010 + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + + #010 + + + 011 + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + + #011 + + + 100 + 5.5 clock cycles (DOPI mode) +6 clock cycles (Other mode) + + #100 + + + 101 + 6.5 clock cycles (DOPI mode) +7 clock cycles (Other mode) + + #101 + + + 110 + 7.5 clock cycles (DOPI mode) +8 clock cycles (Other mode) + + #110 + + + 111 + 8.5 clock cycles (DOPI mode) +9 clock cycles (Other mode) + + #111 - - - - HL1CTRL1 - Host L1 Control Register 1 - 0x148 - 16 - read-write - 0x0000 - 0x0007 - - L1STATUS - L1 Request Completion Status - 1 - 2 - read-only + DVWLO1 + Device 1 select signal pull-down timing setting + 30 + 31 + read-write 00 - ACK received + Setting prohibit #00 01 - NYET received + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + #01 10 - STALL received + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + #10 11 - Transaction error + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + #11 - - L1REQ - L1 Transition Request - 0 - 0 - read-write - - - 0 - This bit is cleared to 0 by hardware when the LPM transaction is completed. - #0 - - - 1 - Set this bit to 1 when requesting a transition to the L1 state. - #1 - - - - HL1CTRL2 - Host L1 Control Register 2 - 0x14A - 16 + DCSTR + Device Chip Select Timing Setting Register + 0x3C + 32 read-write - 0x0000 - 0x9F0F - - - BESL - BESL & Alternate HIRDThis bit selects the K-State drive period at the time of L1 Resume. - 15 - 15 - read-write - - - L1RWE - LPM Token L1 RemoteWake EnableThese bits specify the value to be set in the RWE field of LPM token. - 12 - 12 - read-write - + 0x00000000 + 0xffffffff + - HIRD - LPM Token HIRD + DVSELCMD + Device Command execution interval setting 8 - 11 + 10 read-write - 0000 - 50 us(Setting prohibited(BESL = 0)) / 75 us(BESL = 1) - #0000 + 000 + 2 clock cycles + #000 - 0001 - 125 us(BESL = 0) / 100 us(BESL = 1) - #0001 + 001 + 5 clock cycles + #001 - 0010 - 200 us(BESL = 0) / 150 us(BESL = 1) - #0010 + 010 + 7 clock cycles + #010 - 0011 - 275 us(BESL = 0) / 250 us(BESL = 1) - #0011 + 011 + 9 clock cycles + #011 - 0100 - 350 us(BESL = 0) / 350 us(BESL = 1) - #0100 + 100 + 11 clock cycles + #100 - 0101 - 425 us(BESL = 0) / 450 us(BESL = 1) - #0101 + 101 + 13 clock cycles + #101 - 0110 - 500 us(BESL = 0) / 950 us(BESL = 1) - #0110 + 110 + 15 clock cycles + #110 - 0111 - 575 us(BESL = 0) / 1950 us(BESL = 1) - #0111 + 111 + 17 clock cycles + #111 + + + + DVSELHI + Device select signal pull-up timing setting + 11 + 13 + read-write + - 1000 - 650 us(BESL = 0) / 2950 us(BESL = 1) - #1000 + 000 + Setting prohibited + #000 - 1001 - 725 us(BESL = 0) / 3950 us(BESL = 1) - #1001 + 001 + Setting prohibited + #001 - 1010 - 800 us(BESL = 0) / 4950 us(BESL = 1) - #1010 + 010 + Setting prohibited + #010 - 1011 - 875 us(BESL = 0) / 5950 us(BESL = 1) - #1011 + 011 + Setting prohibited (DOPI mode) +5 clock cycles (Other mode) + + #011 - 1100 - 950 us(BESL = 0) / 6950 us(BESL = 1) - #1100 + 100 + Setting prohibited (DOPI mode) +6 clock cycles (Other mode) + + #100 - 1101 - 1025 us(Setting prohibited(BESL = 0)) / 7950 us(BESL = 1) - #1101 + 101 + 6.5 clock cycles (DOPI mode) +7 clock cycles (Other mode) + + #101 - 1110 - 1100 us(Setting prohibited(BESL = 0)) / 8950 us(BESL = 1) - #1110 + 110 + 7.5 clock cycles (DOPI mode) +8 clock cycles (Other mode) + + #110 - 1111 - 1175 us(Setting prohibited(BESL = 0)) / 9950 us(BESL = 1) - #1111 + 111 + 8.5 clock cycles (DOPI mode) +9 clock cycles (Other mode) + + #111 - L1ADDR - LPM Token DeviceAddressThese bits specify the value to be set in the ADDR field of LPM token. - 0 - 3 + DVSELLO + Device select signal pull-down timing setting + 14 + 15 read-write + + + 00 + Setting prohibit + #00 + + + 01 + 2.5 clock cycles (DOPI mode) +3 clock cycles (Other mode) + + #01 + + + 10 + 3.5 clock cycles (DOPI mode) +4 clock cycles (Other mode) + + #10 + + + 11 + 4.5 clock cycles (DOPI mode) +5 clock cycles (Other mode) + + #11 + + - DPUSR0R - Deep Standby USB Transceiver Control/Pin Monitor Register - 0x160 - 32 - read-only - 0x00000000 - 0xFF4FFFFF - - - DVBSTSHM - VBUS InputIndicates VBUS input signal on the HS side of USB port. - 23 - 23 - read-only - - - DOVCBHM - OVRCURB InputIndicates OVRCURB input signal on the HS side of USB port. - 21 - 21 - read-only - - - DOVCAHM - OVRCURA InputIndicates OVRCURA input signal on the HS side of USB port. - 20 - 20 - read-only - - - - - DPUSR1R - Deep Standby USB Suspend/Resume Interrupt Register - 0x164 + CDSR + Controller and Device Setting Register + 0x40 32 read-write 0x00000000 - 0xFFFFFFFF + 0xffffffff - DVBSTSH - Indication of Return from VBUS Interrupt Source - 23 - 23 - read-only - - - 0 - Indicates deep software standby mode - #0 - - - 1 - Indicates return from deep software standby mode - #1 - - - - - DOVCBH - Indication of Return from OVRCURB Interrupt Source - 21 - 21 - read-only + DV0TTYP + Device0_transfer_type setting + 0 + 1 + read-write - 0 - Indicates deep software standby mode - #0 + 00 + SPI mode + #00 - 1 - Indicates return from deep software standby mode - #1 + 01 + SOPI mode + #01 - - - - DOVCAH - Indication of Return from OVRCURA Interrupt Source - 20 - 20 - read-only - - 0 - Indicates deep software standby mode - #0 + 10 + DOPI mode + #10 - 1 - Indicates return from deep software standby mode - #1 + 11 + Setting prohibited + #11 - DVBSTSHE - VBUS Interrupt Enable/Clear - 7 - 7 + DV1TTYP + Device1_transfer_type setting + 2 + 3 read-write - 0 - Disables return from deep software standby mode - #0 + 00 + SPI mode + #00 - 1 - Enables return from deep software standby mode - #1 + 01 + SOPI mode + #01 - - - - DOVCBHE - OVRCURB Interrupt Enable Clear - 5 - 5 - read-write - - 0 - Disables return from deep software standby mode - #0 + 10 + DOPI mode + #10 - 1 - Enables return from deep software standby mode - #1 + 11 + Setting prohibited + #11 - DOVCAHE - OVRCURA Interrupt Enable Clear + DV0PC + Device0_memory precycle setting 4 4 read-write 0 - Disables return from deep software standby mode + Disable #0 1 - Enables return from deep software standby mode + Enable #1 - - - - DPUSR2R - Deep Standby USB Suspend/Resume Interrupt Register - 0x168 - 16 - read-write - 0x0000 - 0xFFFF - - DMINTE - DM Interrupt Enable Clear - 9 - 9 + DV1PC + Device1_memory precycle setting + 5 + 5 read-write 0 - Disables return from deep software standby mode + Disable #0 1 - Enables return from deep software standby mode + Enable #1 - DPINTE - DP Interrupt Enable Clear - 8 - 8 + ACMEME0 + Automatic calibration memory enable setting for device 0 + 10 + 10 read-write 0 - Disables return from deep software standby mode + Disable #0 1 - Enables return from deep software standby mode + Enable #1 - DMVAL - DM InputIndicates DM input signal on the HS side of USB port. - 5 - 5 - read-only - - - DPVAL - DP InputIndicates DP input signal on the HS side of USB port. - 4 - 4 - read-only - - - DMINT - Indication of Return from DM Interrupt Source - 1 - 1 - read-only + ACMEME1 + Automatic calibration memory enable setting for device 1 + 11 + 11 0 - Indicates deep software standby mode + Disable #0 1 - Indicates return from deep software standby mode + Enable #1 - DPINT - Indication of Return from DP Interrupt Source - 0 - 0 - read-only + ACMODE + Automatic calibration mode + 12 + 13 + read-write - 0 - Indicates deep software standby mode - #0 + 00 + Automatic calibration is disabled + #00 - 1 - Indicates return from deep software standby mode - #1 + 01 + Automatic calibration is enabled and modify MDTR + #01 - - - - - - DPUSRCR - Deep Standby USB Suspend/Resume Command Register - 0x16A - 16 - read-write - 0x0000 - 0xFFFF - - - FIXPHYPD - USB Transceiver Control Fix for PLL - 1 - 1 - read-write - - 0 - Normal mode - #0 + 10 + Automatic calibration immediately is executed for all trim code, but + it will not modify MDTR + #10 - 1 - Go to/Return from deep software standby mode - #1 + 11 + Setting prohibited + #11 - FIXPHY - USB Transceiver Control Fix - 0 - 0 + DLFT + Deadlock Free Timer Enable + 31 + 31 read-write 0 - Normal mode + Enable timer #0 1 - Go to/Return from deep software standby mode + Disable timer #1 @@ -74889,635 +87413,558 @@ The order in which the SPCMD0 to SPCMD07 registers are to be referenced is chang - DPUSR0R_FS - Deep Software Standby USB Transceiver Control/Pin Monitor Register - 0x400 + MDLR + Memory Map Dummy Length Register + 0x44 32 read-write 0x00000000 - 0xFF4CFFFF + 0xffffffff - DVBSTS0 - USB VBUS InputIndicates the VBUS input signal of the USB. - 23 - 23 - read-only - - - DOVCB0 - USB OVRCURB InputIndicates the OVRCURB input signal of the USB. - 21 - 21 - read-only + DV0RDL + Device 0 Read dummy length setting + 0 + 7 + read-write - DOVCA0 - USB OVRCURA InputIndicates the OVRCURA input signal of the USB. - 20 - 20 - read-only + DV0WDL + Device 0 Write dummy length setting + 8 + 15 + read-write - DM0 - USB D-InputIndicates the D- input signal of the USB. - 17 - 17 - read-only + DV1RDL + Device 1 Read dummy length setting + 16 + 23 + read-write - DP0 - USB0 D+ InputIndicates the D+ input signal of the USB. - 16 - 16 - read-only + DV1WDL + Device 1 Write dummy length setting + 24 + 31 + read-write + + + + 2 + 4 + MRWCR[%s] + Memory Map Read/Write Command Register + 0x48 + 32 + read-write + 0x00000000 + 0xffffffff + - FIXPHY0 - USB Transceiver Output Fix - 4 - 4 + DMRCMD0 + Memory map read command 0 setting + 0 + 7 read-write - - - 0 - The outputs are fixed in normal mode and on return from deep software standby mode. - #0 - - - 1 - The outputs are fixed on transitions to deep software standby mode. - #1 - - - DRPD0 - D+/D- Pull-Down Resistor Control - 3 - 3 + DMRCMD1 + Memory map read command 1 setting + 8 + 15 read-write - - - 0 - Disables DP/DM pull-down resistor. - #0 - - - 1 - Enables DP/DM pull-down resistor. - #1 - - - RPUE0 - DP Pull-Up Resistor Control - 1 - 1 + DMWCMD0 + Memory map write command 0 setting + 16 + 23 read-write - - - 0 - Disables DP pull-up resistor. - #0 - - - 1 - Enables DP pull-up resistor. - #1 - - - SRPC0 - USB Single End Receiver Control - 0 - 0 + DMWCMD1 + Memory map write command 1 setting + 24 + 31 read-write - - - 0 - Input through the DP and DM inputs is disabled. - #0 - - - 1 - Input through the DP and DM inputs is enabled. - #1 - - - DPUSR1R_FS - Deep Software Standby USB Suspend/Resume Interrupt Register - 0x404 + MRWCSR + Memory Map Read/Write Setting Register + 0x50 32 read-write 0x00000000 - 0xFFFFFFFF + 0xffffffff - DVBINT0 - USB VBUS Interrupt Source Recovery - 23 - 23 - read-only + MRAL0 + Device 0 read address length setting + 0 + 2 + read-write + + + MRCL0 + Device 0 read command length setting + 3 + 5 + read-write + + + MRO0 + Device 0 read order setting + 6 + 6 + read-write 0 - The system has not returned from deep software standby mode. + Read order is byte0, byte1, byte2, byte3. #0 1 - The system has returned from deep software standby mode. + Read order is byte1, byte0, byte3, byte2. #1 - DOVRCRB0 - USB OVRCURB Interrupt Source Recovery - 21 - 21 - read-only + PREN0 + Preamble bit enable for mem0 memory-map read + 7 + 7 + read-write 0 - The system has not returned from deep software standby mode. + No check preamble bit #0 1 - The system has returned from deep software standby mode. + Check preamble bit from OctaFlash (if OctaFlash is connected to device 0) #1 - DOVRCRA0 - USB OVRCURA Interrupt Source Recovery - 20 - 20 - read-only - - - 0 - The system has not returned from deep software standby mode. - #0 - - - 1 - The system has returned from deep software standby mode. - #1 - - + MWAL0 + Device 0 write address length setting + 8 + 10 + read-write - DMINT0 - USB DM Interrupt Source Recovery - 17 - 17 - read-only + MWCL0 + Device 0 write command length setting + 11 + 13 + read-write + + + MWO0 + Device 0 write order setting + 14 + 14 + read-write 0 - The system has not returned from deep software standby mode. + Write order is byte0, byte1, byte2, byte3. #0 1 - The system has returned from deep software standby mode. + Write order is byte1, byte0, byte3, byte2. #1 - DPINT0 - USB DP Interrupt Source Recovery + MRAL1 + Device 1 read address length setting 16 - 16 - read-only - - - 0 - The system has not returned from deep software standby mode. - #0 - - - 1 - The system has returned from deep software standby mode. - #1 - - + 18 + read-write - DVBSE0 - USB VBUS Interrupt Enable/Clear - 7 - 7 + MRCL1 + Device 1 read command length setting + 19 + 21 read-write - - - 0 - Recovery from deep software standby mode is disabled. - #0 - - - 1 - Recovery from deep software standby mode is enabled. - #1 - - - DOVRCRBE0 - USB OVRCURB Interrupt Enable/Clear - 5 - 5 + MRO1 + Device 1 read order setting + 22 + 22 read-write 0 - Recovery from deep software standby mode is disabled. + Read order is byte0, byte1, byte2, byte3. #0 1 - Recovery from deep software standby mode is enabled. + Read order is byte1, byte0, byte3, byte2. #1 - DOVRCRAE0 - USB OVRCURA Interrupt Enable/Clear - 4 - 4 + PREN1 + Preamble bit enable for mem1 memory-map read + 23 + 23 read-write 0 - Recovery from deep software standby mode is disabled. + No check preamble bit #0 1 - Recovery from deep software standby mode is enabled. + Check preamble bit from OctaFlash (if OctaFlash is connected to device 1) #1 - DMINTE0 - USB DM Interrupt Enable/Clear - 1 - 1 + MWAL1 + Device 1 write address length setting + 24 + 26 read-write - - - 0 - Recovery from deep software standby mode is disabled. - #0 - - - 1 - Recovery from deep software standby mode is enabled. - #1 - - - DPINTE0 - USB DP Interrupt Enable/Clear - 0 - 0 + MWCL1 + Device 1 write command length setting + 27 + 29 + read-write + + + MWO1 + Device 1 write order setting + 30 + 30 read-write 0 - Recovery from deep software standby mode is disabled. + Write order is byte0, byte1, byte2, byte3. #0 1 - Recovery from deep software standby mode is enabled. + Write order is byte1, byte0, byte3, byte2. #1 - - - - R_USB_HS0 - 0x40060000 - - - R_WDT - Watchdog Timer - 0x40044200 - - 0x00000000 - 0x01 - registers - - - 0x00000002 - 0x005 - registers - - - 0x00000008 - 0x01 - registers - - - WDTRR - WDT Refresh Register - 0x00 - 8 - read-write - 0xFF - 0xFF + ESR + Error Status Register + 0x54 + 32 + read-only + 0x00000000 + 0xffffffff - WDTRR - WDTRR is an 8-bit register that refreshes the down-counter of the WDT. + MRESR + Memory map read error status 0 7 - read-write - - - - - WDTCR - WDT Control Register - 0x02 - 16 - read-write - 0x33F3 - 0xFFFF - - - RPSS - Window Start Position Selection - 12 - 13 - read-write + read-only - 00 - 25% - #00 + 0x01 + ECC error + 0x01 - 01 - 50% - #01 + 0x02 + Preamble error + 0x02 - 10 - 75% - #10 + 0x03 + Wait OM_DQS timeout + 0x03 - 11 - 100% (window start position is not specified) - #11 + 0x80 + Invalid command + 0x80 + + + Others + Reserved + true - RPES - Window End Position Selection + MWESR + Memory map write error status 8 - 9 - read-write + 15 + read-only - 00 - 75% - #00 - - - 01 - 50% - #01 - - - 10 - 25% - #10 + 0x80 + Invalid command + 0x80 - 11 - 0% (window end position is not specified) - #11 + Others + Reserved + true + + + + CWNDR + Configure Write without Data Register + 0x58 + 32 + write-only + 0x00000000 + 0xffffffff + + + WND + The write value should be 0. + 0 + 31 + write-only + + + + + CWDR + Configure Write Data Register + 0x5C + 32 + write-only + 0x00000000 + 0xffffffff + - CKS - Clock Division Ratio Selection - 4 + WD0 + Write data 0 + 0 + 7 + write-only + + + WD1 + Write data 1 + 8 + 15 + write-only + + + WD2 + Write data 2 + 16 + 23 + write-only + + + WD3 + Write data 3 + 24 + 31 + write-only + + + + + CRR + Configure Read Register + 0x60 + 32 + read-only + 0x00000000 + 0xffffffff + + + RD0 + Read data 0 + 0 7 + read-only + + + RD1 + Read data 1 + 8 + 15 + read-only + + + RD2 + Read data 2 + 16 + 23 + read-only + + + RD3 + Read data 3 + 24 + 31 + read-only + + + + + ACSR + Auto-Calibration Status Register + 0x64 + 32 + read-write + 0x00000000 + 0xffffffff + + + ACSR0 + Auto-calibration status of device 0 + 0 + 2 read-write - 0001 - PCLK/4 - #0001 - - - 0100 - PCLK/64 - #0100 - - - 1111 - PCLK/128 - #1111 + 000 + Initial state + #000 - 0110 - PCLK/512 - #0110 + 001 + Reserved + #001 - 0111 - PCLK/2048 - #0111 + 010 + Reserved + #010 - 1000 - PCLK/8192 - #1000 + 011 + Normal end + #011 - others - setting prohibited - true + 100 + Error end + #100 - TOPS - Timeout Period Selection - 0 - 1 + ACSR1 + Auto-calibration status of device 1 + 3 + 5 read-write - 00 - 1,024 cycles (03FFh) - #00 + 000 + Initial state + #000 - 01 - 4,096 cycles (0FFFh) - #01 + 001 + Reserved + #001 - 10 - 8,192 cycles (1FFFh) - #10 + 010 + Reserved + #010 - 11 - 16,384 cycles (3FFFh) - #11 + 011 + Normal end + #011 + + + 100 + Error end + #100 - WDTSR - WDT Status Register - 0x04 - 16 + DCSMXR + Device Chip Select Maximum Period Register + 0x7C + 32 read-write - 0x0000 - 0xFFFF + 0x00000000 + 0xffffffff - REFEF - Refresh Error Flag - 15 - 15 + CTWMX0 + Indicates the maximum period that OM_CS0 and OM_CS1 are Low + in single continuous write of OctaRAM. + 0 + 8 read-write - zeroToClear - modify - - - 0 - No refresh error occurred - #0 - - - 1 - Refresh error occurred - #1 - - - UNDFF - Underflow Flag - 14 - 14 + CTWMX1 + Indicates the maximum period that OM_CS0 and OM_CS1 are Low + in single continuous read of OctaRAM. + 16 + 24 read-write - zeroToClear - modify - - - 0 - No underflow occurred - #0 - - - 1 - Underflow occurred - #1 - - - - - CNTVAL - Down-Counter Value - 0 - 13 - read-only - WDTRCR - WDT Reset Control Register - 0x06 - 8 + DWSCTSR + Device Memory Map Write single continuous translating size Register + 0x80 + 32 read-write - 0x80 - 0xFF + 0x00000000 + 0xffffffff - RSTIRQS - Reset Interrupt Request Selection - 7 - 7 + CTSN0 + Indicates the number of bytes to translate in single continuous write of device 0. + 0 + 10 read-write - - - 0 - Non-maskable interrupt request or interrupt request output is enabled - #0 - - - 1 - Reset output is enabled. - #1 - - - - - - WDTCSTPR - WDT Count Stop Control Register - 0x08 - 8 - read-write - 0x80 - 0xFF - - SLCSTP - Sleep-Mode Count Stop Control - 7 - 7 + CTSN1 + Indicates the number of bytes to translate in single continuous write of device 1. + 16 + 26 read-write - - - 0 - Count stop is disabled. - #0 - - - 1 - Count is stopped at a transition to sleep mode. - #1 - - - \ No newline at end of file + diff --git a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c index dfb1c8b7e..2a10e92eb 100644 --- a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c +++ b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c @@ -100,6 +100,7 @@ BSP_DONT_REMOVE static uint8_t g_heap[BSP_CFG_HEAP_BYTES] BSP_ALIGN_VARIABLE(BSP #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 @@ -114,6 +115,7 @@ void HardFault_Handler(void) WEAK_REF_ATTRIBUTE; void MemManage_Handler(void) WEAK_REF_ATTRIBUTE; void BusFault_Handler(void) WEAK_REF_ATTRIBUTE; void UsageFault_Handler(void) WEAK_REF_ATTRIBUTE; +void SecureFault_Handler(void) WEAK_REF_ATTRIBUTE; void SVC_Handler(void) WEAK_REF_ATTRIBUTE; void DebugMon_Handler(void) WEAK_REF_ATTRIBUTE; void PendSV_Handler(void) WEAK_REF_ATTRIBUTE; @@ -130,7 +132,7 @@ BSP_DONT_REMOVE const exc_ptr_t __Vectors[BSP_CORTEX_VECTOR_TABLE_ENTRIES] BSP_P MemManage_Handler, /* MPU Fault Handler */ BusFault_Handler, /* Bus Fault Handler */ UsageFault_Handler, /* Usage Fault Handler */ - 0, /* Reserved */ + SecureFault_Handler, /* Secure Fault Handler */ 0, /* Reserved */ 0, /* Reserved */ 0, /* Reserved */ diff --git a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c index 27aa39457..60815a7c8 100644 --- a/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c +++ b/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c @@ -26,16 +26,16 @@ /*********************************************************************************************************************** * Includes , "Project Includes" **********************************************************************************************************************/ +#include #include "bsp_api.h" #include "../../../../mcu/all/bsp_clocks.h" -#include /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ /* Mask to select CP bits( 0xF00000 ) */ -#define CP_MASK (0x0000000FU << 20) +#define CP_MASK (0xFU << 20) /* Value to write to OAD register of MPU stack monitor to enable NMI when a stack overflow is detected. */ #define BSP_STACK_POINTER_MONITOR_NMI_ON_DETECTION (0xA500U) @@ -45,6 +45,18 @@ #define BSP_PRV_PRCR_PRC1_UNLOCK ((BSP_PRV_PRCR_KEY) | 0x2U) #define BSP_PRV_PRCR_LOCK ((BSP_PRV_PRCR_KEY) | 0x0U) +#if defined(__ICCARM__) + #define BSP_PRV_STACK_LIMIT ((uint32_t) __section_begin(".stack")) + #define BSP_PRV_STACK_TOP ((uint32_t) __section_end(".stack")) +#elif defined(__ARMCC_VERSION) + #define BSP_PRV_STACK_LIMIT ((uint32_t) &Image$$STACK$$ZI$$Base) + #define BSP_PRV_STACK_TOP ((uint32_t) &Image$$STACK$$ZI$$Base + \ + (uint32_t) &Image$$STACK$$ZI$$Length) +#elif defined(__GNUC__) + #define BSP_PRV_STACK_LIMIT ((uint32_t) &__StackLimit) + #define BSP_PRV_STACK_TOP ((uint32_t) &__StackTop) +#endif + /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ @@ -62,8 +74,8 @@ extern uint32_t Image$$BSS$$ZI$$Length; extern uint32_t Load$$DATA$$Base; extern uint32_t Image$$DATA$$Base; extern uint32_t Image$$DATA$$Length; -extern uint32_t Image$$STACK$$RW$$Base; -extern uint32_t Image$$STACK$$RW$$Length; +extern uint32_t Image$$STACK$$ZI$$Base; +extern uint32_t Image$$STACK$$ZI$$Length; #elif defined(__GNUC__) /* Generated by linker. */ @@ -99,6 +111,8 @@ extern void __call_ctors(void const *, void const *); extern void * __Vectors[]; +extern void R_BSP_SecurityInit(void); + /*********************************************************************************************************************** * Private global variables and functions **********************************************************************************************************************/ @@ -127,18 +141,20 @@ void SystemInit (void) { #if __FPU_USED - /* Enable the Cortex-M4 FPU only when -mfloat-abi=hard. + /* Enable the FPU only when it is used. * Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C) */ - /* Set bits 20-23 to enable CP10 and CP11 coprocessor */ - /* SCB is a CMSIS defined element over which we have no control. */ - SCB->CPACR |= (uint32_t) CP_MASK; + /* Set bits 20-23 (CP10 and CP11) to enable FPU. */ + SCB->CPACR = (uint32_t) CP_MASK; #endif -/* Set the VTOR to the vector table address based on the build. */ +/* Set the Secure/Non-Secure VTOR to the vector table address based on the build. */ +#if FSP_PRIV_TZ_USE_SECURE_REGS SCB->VTOR = (uint32_t) &__Vectors; +#endif -#if BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP +#if !BSP_TZ_CFG_SKIP_INIT + #if BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP /* Unlock VBTCR1 register. */ R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_PRC1_UNLOCK; @@ -152,87 +168,46 @@ void SystemInit (void) /* Lock VBTCR1 register. */ R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_LOCK; + #endif #endif /* Call pre clock initialization hook. */ R_BSP_WarmStart(BSP_WARM_START_RESET); +#if BSP_TZ_CFG_SKIP_INIT + + /* Initialize clock variables to be used with R_BSP_SoftwareDelay. */ + bsp_clock_freq_var_init(); +#else + /* Configure system clocks. */ bsp_clock_init(); -#if BSP_FEATURE_BSP_RESET_TRNG + #if BSP_FEATURE_BSP_RESET_TRNG /* To prevent an undesired current draw, this MCU requires a reset * of the TRNG circuit after the clocks are initialized */ + bsp_reset_trng_circuit(); + #endif #endif /* Call post clock initialization hook. */ R_BSP_WarmStart(BSP_WARM_START_POST_CLOCK); - /* Initialize C runtime environment. */ - /* Zero out BSS */ -#if defined(__ARMCC_VERSION) - memset((uint8_t *) &Image$$BSS$$ZI$$Base, 0U, (uint32_t) &Image$$BSS$$ZI$$Length); -#elif defined(__GNUC__) - memset(&__bss_start__, 0U, ((uint32_t) &__bss_end__ - (uint32_t) &__bss_start__)); -#elif defined(__ICCARM__) - memset((uint32_t *) __section_begin(".bss"), 0U, (uint32_t) __section_size(".bss")); -#endif - - /* Copy initialized RAM data from ROM to RAM. */ -#if defined(__ARMCC_VERSION) - memcpy((uint8_t *) &Image$$DATA$$Base, (uint8_t *) &Load$$DATA$$Base, (uint32_t) &Image$$DATA$$Length); -#elif defined(__GNUC__) - memcpy(&__data_start__, &__etext, ((uint32_t) &__data_end__ - (uint32_t) &__data_start__)); -#elif defined(__ICCARM__) - memcpy((uint32_t *) __section_begin(".data"), (uint32_t *) __section_begin(".data_init"), - (uint32_t) __section_size(".data")); - - /* Copy functions to be executed from RAM. */ - #pragma section=".code_in_ram" - #pragma section=".code_in_ram_init" - memcpy((uint32_t *) __section_begin(".code_in_ram"), - (uint32_t *) __section_begin(".code_in_ram_init"), - (uint32_t) __section_size(".code_in_ram")); - - /* Copy main thread TLS to RAM. */ - #pragma section="__DLIB_PERTHREAD_init" - #pragma section="__DLIB_PERTHREAD" - memcpy((uint32_t *) __section_begin("__DLIB_PERTHREAD"), (uint32_t *) __section_begin("__DLIB_PERTHREAD_init"), - (uint32_t) __section_size("__DLIB_PERTHREAD_init")); -#endif +#if BSP_FEATURE_BSP_HAS_SP_MON /* Disable MSP monitoring */ R_MPU_SPMON->SP[0].CTL = 0; /* Setup NMI interrupt */ R_MPU_SPMON->SP[0].OAD = BSP_STACK_POINTER_MONITOR_NMI_ON_DETECTION; -#if defined(__ICCARM__) - - /* Setup start address */ - R_MPU_SPMON->SP[0].SA = (uint32_t) __section_begin(".stack"); - - /* Setup end address */ - R_MPU_SPMON->SP[0].EA = (uint32_t) __section_end(".stack"); -#elif defined(__ARMCC_VERSION) - - /* Setup start address */ - R_MPU_SPMON->SP[0].SA = (uint32_t) &Image$$STACK$$RW$$Base; - - /* Setup end address */ - R_MPU_SPMON->SP[0].EA = (uint32_t) &Image$$STACK$$RW$$Base + (uint32_t) &Image$$STACK$$RW$$Length; -#elif defined(__GNUC__) /* Setup start address */ - R_MPU_SPMON->SP[0].SA = (uint32_t) &__StackLimit; + R_MPU_SPMON->SP[0].SA = BSP_PRV_STACK_LIMIT; /* Setup end address */ - R_MPU_SPMON->SP[0].EA = (uint32_t) &__StackTop; -#endif - - /* Disable stack monitoring for FreeRTOS. Not yet supported. */ -#if (BSP_CFG_RTOS == 0) + R_MPU_SPMON->SP[0].EA = BSP_PRV_STACK_TOP; /* Set SPEEN bit to enable NMI on stack monitor exception. NMIER bits cannot be cleared after reset, so no need * to read-modify-write. */ @@ -242,19 +217,49 @@ void SystemInit (void) R_MPU_SPMON->SP[0].CTL = 1U; #endif - /* Initialize SystemCoreClock variable. */ - SystemCoreClockUpdate(); +#if BSP_FEATURE_TZ_HAS_TRUSTZONE -#if !BSP_CFG_PFS_PROTECT - R_PMISC->PWPR = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled - R_PMISC->PWPR = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + /* Use CM33 stack monitor. */ + __set_MSPLIM(BSP_PRV_STACK_LIMIT); #endif - /* Call Post C runtime initialization hook. */ - R_BSP_WarmStart(BSP_WARM_START_POST_C); +#if BSP_CFG_C_RUNTIME_INIT + + /* Initialize C runtime environment. */ + /* Zero out BSS */ + #if defined(__ARMCC_VERSION) + memset((uint8_t *) &Image$$BSS$$ZI$$Base, 0U, (uint32_t) &Image$$BSS$$ZI$$Length); + #elif defined(__GNUC__) + memset(&__bss_start__, 0U, ((uint32_t) &__bss_end__ - (uint32_t) &__bss_start__)); + #elif defined(__ICCARM__) + memset((uint32_t *) __section_begin(".bss"), 0U, (uint32_t) __section_size(".bss")); + #endif + + /* Copy initialized RAM data from ROM to RAM. */ + #if defined(__ARMCC_VERSION) + memcpy((uint8_t *) &Image$$DATA$$Base, (uint8_t *) &Load$$DATA$$Base, (uint32_t) &Image$$DATA$$Length); + #elif defined(__GNUC__) + memcpy(&__data_start__, &__etext, ((uint32_t) &__data_end__ - (uint32_t) &__data_start__)); + #elif defined(__ICCARM__) + memcpy((uint32_t *) __section_begin(".data"), (uint32_t *) __section_begin(".data_init"), + (uint32_t) __section_size(".data")); + + /* Copy functions to be executed from RAM. */ + #pragma section=".code_in_ram" + #pragma section=".code_in_ram_init" + memcpy((uint32_t *) __section_begin(".code_in_ram"), + (uint32_t *) __section_begin(".code_in_ram_init"), + (uint32_t) __section_size(".code_in_ram")); + + /* Copy main thread TLS to RAM. */ + #pragma section="__DLIB_PERTHREAD_init" + #pragma section="__DLIB_PERTHREAD" + memcpy((uint32_t *) __section_begin("__DLIB_PERTHREAD"), (uint32_t *) __section_begin("__DLIB_PERTHREAD_init"), + (uint32_t) __section_size("__DLIB_PERTHREAD_init")); + #endif /* Initialize static constructors */ -#if defined(__ARMCC_VERSION) + #if defined(__ARMCC_VERSION) int32_t count = Image$$INIT_ARRAY$$Limit - Image$$INIT_ARRAY$$Base; for (int32_t i = 0; i < count; i++) { @@ -263,19 +268,52 @@ void SystemInit (void) p_init_func(); } -#elif defined(__GNUC__) + #elif defined(__GNUC__) int32_t count = __init_array_end - __init_array_start; for (int32_t i = 0; i < count; i++) { __init_array_start[i](); } -#elif defined(__ICCARM__) + #elif defined(__ICCARM__) void const * pibase = __section_begin("SHT$$PREINIT_ARRAY"); void const * ilimit = __section_end("SHT$$INIT_ARRAY"); __call_ctors(pibase, ilimit); + #endif +#endif // BSP_CFG_C_RUNTIME_INIT + + /* Initialize SystemCoreClock variable. */ + SystemCoreClockUpdate(); + +#if !BSP_CFG_PFS_PROTECT + #if BSP_TZ_SECURE_BUILD + R_PMISC->PWPRS = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPRS = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #else + R_PMISC->PWPR = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPR = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #endif #endif + /* Ensure that the PMSAR registers are reset (Soft reset does not reset PMSAR). */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + + for (uint32_t i = 0; i < 9; i++) + { + R_PMISC->PMSAR[i].PMSAR = UINT16_MAX; + } + + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); + +#if BSP_TZ_SECURE_BUILD + + /* Initialize security features. */ + R_BSP_SecurityInit(); +#endif + + /* Call Post C runtime initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_C); + /* Initialize ELC events that will be used to trigger NVIC interrupts. */ bsp_irq_cfg(); diff --git a/ra/fsp/src/bsp/mcu/all/bsp_clocks.c b/ra/fsp/src/bsp/mcu/all/bsp_clocks.c index 2da78b629..0855b1a0b 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_clocks.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_clocks.c @@ -23,57 +23,82 @@ **********************************************************************************************************************/ #include "bsp_clocks.h" +#if BSP_TZ_NONSECURE_BUILD + #include "bsp_guard.h" +#endif + /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ /* Key code for writing PRCR register. */ -#define BSP_PRV_PRCR_KEY (0xA500U) -#define BSP_PRV_PRCR_UNLOCK ((BSP_PRV_PRCR_KEY) | 0x3U) -#define BSP_PRV_PRCR_LOCK ((BSP_PRV_PRCR_KEY) | 0x0U) +#define BSP_PRV_PRCR_KEY (0xA500U) +#define BSP_PRV_PRCR_UNLOCK ((BSP_PRV_PRCR_KEY) | 0x3U) +#define BSP_PRV_PRCR_LOCK ((BSP_PRV_PRCR_KEY) | 0x0U) -#define BSP_PRV_MAXIMUM_HOCOWTR_HSTS ((uint8_t) 0x6U) +#define BSP_PRV_MAXIMUM_HOCOWTR_HSTS ((uint8_t) 0x6U) /* Wait state definitions for MEMWAIT. */ -#define BSP_PRV_MEMWAIT_ZERO_WAIT_CYCLES (0U) -#define BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES (1U) -#define BSP_PRV_MEMWAIT_MAX_ZERO_WAIT_FREQ (32000000U) +#define BSP_PRV_MEMWAIT_ZERO_WAIT_CYCLES (0U) +#define BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES (1U) +#define BSP_PRV_MEMWAIT_MAX_ZERO_WAIT_FREQ (32000000U) /* Wait state definitions for FLDWAITR. */ -#define BSP_PRV_FLDWAITR_ONE_WAIT_CYCLES (0U) -#define BSP_PRV_FLDWAITR_TWO_WAIT_CYCLES (1U) -#define BSP_PRV_FLDWAITR_MAX_ONE_WAIT_FREQ (32000000U) +#define BSP_PRV_FLDWAITR_ONE_WAIT_CYCLES (0U) +#define BSP_PRV_FLDWAITR_TWO_WAIT_CYCLES (1U) +#define BSP_PRV_FLDWAITR_MAX_ONE_WAIT_FREQ (32000000U) /* Temporary solution until R_FACI is added to renesas.h. */ -#define BSP_PRV_FLDWAITR_REG_ACCESS (*((volatile uint8_t *) (0x407EFFC4U))) +#define BSP_PRV_FLDWAITR_REG_ACCESS (*((volatile uint8_t *) (0x407EFFC4U))) /* Wait state definitions for MCUS with SRAMWTSC and FLWT. */ -#define BSP_PRV_SYS_CLOCK_FREQ_NO_RAM_WAITS (60000000U) -#define BSP_PRV_SYS_CLOCK_FREQ_ONE_ROM_WAITS (40000000U) -#define BSP_PRV_SYS_CLOCK_FREQ_TWO_ROM_WAITS (80000000U) -#define BSP_PRV_SRAMWTSC_ZERO_WAIT_CYCLES (0U) -#define BSP_PRV_SRAMWTSC_ONE_WAIT_CYCLES (0xEU) -#define BSP_PRV_ROM_ZERO_WAIT_CYCLES (0U) -#define BSP_PRV_ROM_ONE_WAIT_CYCLES (1U) -#define BSP_PRV_ROM_TWO_WAIT_CYCLES (2U) -#define BSP_PRV_SRAM_PRCR_KEY (0x78U) -#define BSP_PRV_SRAM_UNLOCK (((BSP_PRV_SRAM_PRCR_KEY) << 1) | 0x1U) -#define BSP_PRV_SRAM_LOCK (((BSP_PRV_SRAM_PRCR_KEY) << 1) | 0x0U) +#define BSP_PRV_SRAMWTSC_ZERO_WAIT_CYCLES (0U) +#define BSP_PRV_SRAMWTSC_ONE_WAIT_CYCLES (0xEU) +#define BSP_PRV_ROM_ZERO_WAIT_CYCLES (0U) +#define BSP_PRV_ROM_ONE_WAIT_CYCLES (1U) +#define BSP_PRV_ROM_TWO_WAIT_CYCLES (2U) +#define BSP_PRV_ROM_THREE_WAIT_CYCLES (3U) +#define BSP_PRV_SRAM_PRCR_KEY (0x78U) +#define BSP_PRV_SRAM_UNLOCK (((BSP_PRV_SRAM_PRCR_KEY) << 1) | 0x1U) +#define BSP_PRV_SRAM_LOCK (((BSP_PRV_SRAM_PRCR_KEY) << 1) | 0x0U) /* Calculate value to write to MOMCR (MODRV controls main clock drive strength and MOSEL determines the source of the * main oscillator). */ -#define BSP_PRV_MOMCR_MOSEL_BIT (6) -#define BSP_PRV_MODRV ((CGC_MAINCLOCK_DRIVE << BSP_FEATURE_CGC_MODRV_SHIFT) & \ - BSP_FEATURE_CGC_MODRV_MASK) -#define BSP_PRV_MOSEL (BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE << BSP_PRV_MOMCR_MOSEL_BIT) -#define BSP_PRV_MOMCR (BSP_PRV_MODRV | BSP_PRV_MOSEL) +#define BSP_PRV_MOMCR_MOSEL_BIT (6) +#define BSP_PRV_MODRV ((CGC_MAINCLOCK_DRIVE << BSP_FEATURE_CGC_MODRV_SHIFT) & \ + BSP_FEATURE_CGC_MODRV_MASK) +#define BSP_PRV_MOSEL (BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE << BSP_PRV_MOMCR_MOSEL_BIT) +#define BSP_PRV_MOMCR (BSP_PRV_MODRV | BSP_PRV_MOSEL) /* Locations of bitfields used to configure CLKOUT. */ -#define BSP_PRV_CKOCR_CKODIV_BIT (4U) -#define BSP_PRV_CKOCR_CKOEN_BIT (7U) +#define BSP_PRV_CKOCR_CKODIV_BIT (4U) +#define BSP_PRV_CKOCR_CKOEN_BIT (7U) + +#ifdef BSP_CFG_UCK_DIV + +/* If the MCU has SCKDIVCR2. */ + #if !BSP_FEATURE_BSP_HAS_USBCKDIVCR /* Location of bitfield used to configure USB clock divider. */ -#define BSP_PRV_SCKDIVCR2_UCK_BIT (4U) + #define BSP_PRV_SCKDIVCR2_UCK_BIT (4U) + #define BSP_PRV_UCK_DIV (BSP_CFG_UCK_DIV) + +/* If the MCU has USBCKDIVCR. */ + #elif BSP_FEATURE_BSP_HAS_USBCKDIVCR + + #if BSP_CLOCKS_USB_CLOCK_DIV_3 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (5U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_4 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (2U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_5 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (6U) + #else + + #error "BSP_CFG_UCK_DIV not supported." + + #endif + #endif +#endif /* Calculate the value to write to SCKDIVCR. */ #define BSP_PRV_STARTUP_SCKDIVCR_ICLK_BITS ((BSP_CFG_ICLK_DIV & 7U) << 24U) @@ -152,6 +177,17 @@ #endif #endif +#if BSP_FEATURE_CGC_HAS_PLL2 + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL2_SOURCE + #define BSP_PRV_PL2SRCSEL (0) + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL2_SOURCE + #define BSP_PRV_PL2SRCSEL (1) + #endif + #define BSP_PRV_PLL2CCR ((BSP_CFG_PLL2_MUL << R_SYSTEM_PLL2CCR_PLL2MUL_Pos) | \ + (BSP_CFG_PLL2_DIV << R_SYSTEM_PLL2CCR_PL2IDIV_Pos) | \ + (BSP_PRV_PL2SRCSEL << R_SYSTEM_PLL2CCR_PL2SRCSEL_Pos)) +#endif + /* Determine the optimal operating speed mode to apply after clock configuration based on the startup clock * frequency. */ #if BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ && \ @@ -190,7 +226,76 @@ static void bsp_prv_clock_set_hard_reset(void); /* This array stores the clock frequency of each system clock. This section of RAM should not be initialized by the C * runtime environment. This is initialized and used in bsp_clock_init, which is called before the C runtime * environment is initialized. */ -static uint32_t g_clock_freq[BSP_PRV_NUM_CLOCKS] BSP_PLACE_IN_SECTION(".noinit"); +static uint32_t g_clock_freq[BSP_PRV_NUM_CLOCKS] BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +#if BSP_TZ_SECURE_BUILD + +/* Callback used to notify the nonsecure project that the clock settings have changed. */ +static bsp_clock_update_callback_t g_bsp_clock_update_callback = NULL; + +/* Pointer to nonsecure memory to store the callback args. */ +static bsp_clock_update_callback_args_t * gp_callback_memory = NULL; + +/* Reentrant method of calling the clock_update_callback. */ +static void r_bsp_clock_update_callback_call (bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_args) +{ + /* Allocate memory for saving global callback args on the secure stack. */ + bsp_clock_update_callback_args_t callback_args; + + /* Save current info stored in callback memory. */ + callback_args = *gp_callback_memory; + + /* Write the callback args to the nonsecure callback memory. */ + *gp_callback_memory = *p_callback_args; + + /* Call the callback to notifiy ns project about clock changes. */ + p_callback(gp_callback_memory); + + /* Restore the info in callback memory. */ + *gp_callback_memory = callback_args; +} + +/* Initialize the callback, callback memory and invoke the callback to ensure the nonsecure project has the correct clock settings. */ +void r_bsp_clock_update_callback_set (bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory) +{ + /* Store pointer to nonsecure callback memory. */ + gp_callback_memory = p_callback_memory; + + /* Store callback. */ + g_bsp_clock_update_callback = p_callback; + + /* Set callback args. */ + bsp_clock_update_callback_args_t callback_args = + { + .pll_freq = g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] + }; + + /* Call the callback. */ + r_bsp_clock_update_callback_call(g_bsp_clock_update_callback, &callback_args); +} + +#elif BSP_TZ_NONSECURE_BUILD && BSP_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_clock_freq settings. */ + SystemCoreClockUpdate(); +} + + #endif +#endif #if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED @@ -423,7 +528,6 @@ void bsp_prv_clock_set (uint32_t clock, uint32_t sckdivcr) /* Set the system source clock */ R_SYSTEM->SCKSCR = (uint8_t) clock; } - /* If the current ICLK divider is greater (lower frequency) than the requested ICLK divider, set the clock * source first. If the ICLK divider is the same, order does not matter. */ else @@ -440,6 +544,20 @@ void bsp_prv_clock_set (uint32_t clock, uint32_t sckdivcr) /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ SystemCoreClock = clock_freq_hz_post_change; +#if BSP_TZ_SECURE_BUILD + if (NULL != g_bsp_clock_update_callback) + { + /* Set callback args. */ + bsp_clock_update_callback_args_t callback_args = + { + .pll_freq = g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] + }; + + /* Call the callback. */ + r_bsp_clock_update_callback_call(g_bsp_clock_update_callback, &callback_args); + } +#endif + /* Adjust the MCU specific wait state soon after the system clock is set, if the system clock frequency to be * set is lower than previous. */ bsp_clock_set_postchange(SystemCoreClock, new_rom_wait_state); @@ -460,13 +578,16 @@ static void bsp_prv_clock_set_hard_reset (void) /* Calculate the wait states for ROM */ #if BSP_FEATURE_CGC_HAS_FLWT - #if BSP_STARTUP_ICLK_HZ <= BSP_PRV_SYS_CLOCK_FREQ_ONE_ROM_WAITS + #if BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS /* Do nothing. Default setting in FLWT is correct. */ - #elif BSP_STARTUP_ICLK_HZ <= BSP_PRV_SYS_CLOCK_FREQ_TWO_ROM_WAITS + #elif BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS R_FCACHE->FLWT = BSP_PRV_ROM_ONE_WAIT_CYCLES; - #else + #elif 0 == BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS || \ + (BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS) R_FCACHE->FLWT = BSP_PRV_ROM_TWO_WAIT_CYCLES; + #else + R_FCACHE->FLWT = BSP_PRV_ROM_THREE_WAIT_CYCLES; #endif #endif @@ -512,10 +633,16 @@ static void bsp_prv_clock_set_hard_reset (void) /* Adjust the MCU specific wait state soon after the system clock is set, if the system clock frequency to be * set is lower than previous. */ #if BSP_FEATURE_CGC_HAS_SRAMWTSC - #if BSP_STARTUP_ICLK_HZ <= BSP_PRV_SYS_CLOCK_FREQ_NO_RAM_WAITS + #if BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS + #if BSP_FEATURE_CGC_HAS_SRAMPRCR2 == 1 + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_UNLOCK; + R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_ZERO_WAIT_CYCLES; + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_LOCK; + #else R_SRAM->SRAMPRCR = BSP_PRV_SRAM_UNLOCK; R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_ZERO_WAIT_CYCLES; R_SRAM->SRAMPRCR = BSP_PRV_SRAM_LOCK; + #endif #endif #endif @@ -525,37 +652,68 @@ static void bsp_prv_clock_set_hard_reset (void) #endif /*******************************************************************************************************************//** - * Initializes system clocks. Makes no assumptions about current register settings. + * Initializes variable to store system clock frequencies. **********************************************************************************************************************/ -void bsp_clock_init (void) -{ - /* Unlock CGC and LPM protection registers. */ - R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_UNLOCK; - -#if !BSP_CFG_USE_LOW_VOLTAGE_MODE && BSP_FEATURE_BSP_FLASH_CACHE - - /* Disable ROM cache. */ - R_FCACHE->FCACHEE = 0U; -#endif -#if BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER - - /* Disable the flash prefetch buffer. */ - R_FACI_LP->PFBER = 0; +#if BSP_TZ_NONSECURE_BUILD +void bsp_clock_freq_var_init (void) +#else +static void bsp_clock_freq_var_init (void) #endif - +{ g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_HOCO] = BSP_HOCO_HZ; g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MOCO] = BSP_MOCO_FREQ_HZ; g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_LOCO] = BSP_LOCO_FREQ_HZ; g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC] = BSP_CFG_XTAL_HZ; g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK] = BSP_SUBCLOCK_FREQ_HZ; #if BSP_PRV_PLL_SUPPORTED + #if BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_CLOCK_SOURCE + + /* The PLL Is the startup clock. */ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_STARTUP_SOURCE_CLOCK_HZ; + #else /* The PLL value will be calculated at initialization. */ g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_CFG_XTAL_HZ; + #endif +#endif + +#if BSP_TZ_NONSECURE_BUILD && BSP_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(); +} + +/*******************************************************************************************************************//** + * Initializes system clocks. Makes no assumptions about current register settings. + **********************************************************************************************************************/ +void bsp_clock_init (void) +{ + /* Unlock CGC and LPM protection registers. */ + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_UNLOCK; + +#if BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM + #if !BSP_CFG_USE_LOW_VOLTAGE_MODE && BSP_FEATURE_BSP_FLASH_CACHE + + /* Disable flash cache before modifying MEMWAIT, SOPCCR, or OPCCR. */ + R_BSP_FlashCacheDisable(); + #endif +#else + + /* Enable the flash cache and don't disable it while running from flash. On these MCUs, the flash cache does not + * need to be disabled when adjusting the operating power mode. */ + R_BSP_FlashCacheEnable(); +#endif +#if BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER + + /* Disable the flash prefetch buffer. */ + R_FACI_LP->PFBER = 0; +#endif + + bsp_clock_freq_var_init(); #if BSP_CFG_SOFT_RESET_SUPPORTED @@ -572,6 +730,7 @@ void bsp_clock_init (void) /* Set the main oscillator wait time. */ R_SYSTEM->MOSCWTCR = (uint8_t) BSP_CLOCK_CFG_MAIN_OSC_WAIT; } + #else /* Configure main oscillator drive. */ @@ -596,6 +755,7 @@ void bsp_clock_init (void) R_BSP_SoftwareDelay(BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS, BSP_DELAY_UNITS_MILLISECONDS); #endif } + #else R_SYSTEM->SOSCCR = 1U; #endif @@ -659,9 +819,6 @@ void bsp_clock_init (void) R_SYSTEM->MOSCCR = 0U; #endif - /* Store PLL frequency. */ - g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_STARTUP_SOURCE_CLOCK_HZ; - /* Configure the PLL registers. */ #if 1U == BSP_FEATURE_CGC_PLLCCR_TYPE R_SYSTEM->PLLCCR = (uint16_t) BSP_PRV_PLLCCR; @@ -717,6 +874,7 @@ void bsp_clock_init (void) R_SYSTEM->LOCOCR = 0U; R_BSP_SoftwareDelay(BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US, BSP_DELAY_UNITS_MICROSECONDS); } + #else R_SYSTEM->LOCOCR = 0U; R_BSP_SoftwareDelay(BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US, BSP_DELAY_UNITS_MICROSECONDS); @@ -762,27 +920,6 @@ void bsp_clock_init (void) #endif #endif - /* Set USB clock divisor if it exists on the MCU. */ -#ifdef BSP_CFG_UCK_DIV - R_SYSTEM->SCKDIVCR2 = BSP_CFG_UCK_DIV << BSP_PRV_SCKDIVCR2_UCK_BIT; -#endif - -#if BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL - - /* Some MCUs have an alternate register for selecting the USB clock source. */ - #if BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT - #if BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_UCK_SOURCE - - /* Write to USBCKCR to select the PLL. */ - R_SYSTEM->USBCKCR = 0; - #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_UCK_SOURCE - - /* Write to USBCKCR to select the HOCO. */ - R_SYSTEM->USBCKCR = 1; - #endif - #endif -#endif - /* Configure BCLK if it exists on the MCU. */ #ifdef BSP_CFG_BCLK_OUTPUT #if BSP_CFG_BCLK_OUTPUT > 0U @@ -801,7 +938,7 @@ void bsp_clock_init (void) #endif /* Configure CLKOUT. */ -#if BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_CLKOUT_DISABLED +#if BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_CLOCK_DISABLED #if BSP_CFG_SOFT_RESET_SUPPORTED R_SYSTEM->CKOCR = 0U; #endif @@ -812,17 +949,102 @@ void bsp_clock_init (void) R_SYSTEM->CKOCR = ckocr; #endif - /* Lock CGC and LPM protection registers. */ - R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_LOCK; +#if BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_LOW_SPEED + #if BSP_FEATURE_CGC_HAS_PLL2 && BSP_CFG_PLL2_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + + /* Start PLL source clock. */ + #if BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL2_SOURCE + R_SYSTEM->HOCOCR = 0U; + #elif BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL2_SOURCE + R_SYSTEM->MOSCCR = 0U; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.MOSCSF, 1U); + #endif /* BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL2_SOURCE */ + + R_SYSTEM->PLL2CCR = BSP_PRV_PLL2CCR; + + /* Start the PLL. */ + R_SYSTEM->PLL2CR = 0U; + + /* Wait for the PLL to stabilize. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.PLL2SF, 1U); + #endif /* BSP_FEATURE_CGC_HAS_PLL2 && BSP_CFG_PLL2_ENABLE */ + + #if BSP_CFG_UCK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + + /* If the USB clock has a divider setting in SCKDIVCR2. */ + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV && !BSP_FEATURE_BSP_HAS_USBCKDIVCR + R_SYSTEM->SCKDIVCR2 = BSP_PRV_UCK_DIV << BSP_PRV_SCKDIVCR2_UCK_BIT; + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV && !BSP_FEATURE_BSP_HAS_USBCKDIVCR */ + + /* If there is a REQ bit in USBCKCR than follow sequence from section 8.2.29 in RA6M4 hardware manual R01UH0890EJ0050. */ + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ + + /* Request to change the USB Clock. */ + R_SYSTEM->USBCKCR_b.USBCKSREQ = 1; + + /* Wait for the clock to be stopped. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->USBCKCR_b.USBCKSRDY, 1U); + + /* Write the settings. */ + R_SYSTEM->USBCKDIVCR = BSP_PRV_UCK_DIV; + + /* Select the USB Clock without enabling it. */ + R_SYSTEM->USBCKCR = BSP_CFG_UCK_SOURCE | R_SYSTEM_USBCKCR_USBCKSREQ_Msk; + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ */ + + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL + + /* Some MCUs use an alternate register for selecting the USB clock source. */ + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT + #if BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_UCK_SOURCE + + /* Write to USBCKCR to select the PLL. */ + R_SYSTEM->USBCKCR_ALT = 0; + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_UCK_SOURCE + + /* Write to USBCKCR to select the HOCO. */ + R_SYSTEM->USBCKCR_ALT = 1; + #endif + #else + + /* Select the USB Clock. */ + R_SYSTEM->USBCKCR = BSP_CFG_UCK_SOURCE; + #endif + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ */ + + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ + + /* Wait for the USB Clock to be started. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->USBCKCR_b.USBCKSRDY, 0U); + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ */ + #endif /* BSP_CFG_USB_ENABLE */ +#endif /* BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_LOW_SPEED */ + + /* Set the OCTASPI clock if it exists on the MCU (See section 8.2.30 of the RA6M4 hardware manual R01UH0890EJ0050). */ +#if BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK && BSP_CFG_OCTA_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + + /* Request to change the OCTASPI Clock. */ + R_SYSTEM->OCTACKCR_b.OCTACKSREQ = 1; -#if BSP_FEATURE_BSP_FLASH_CACHE + /* Wait for the clock to be stopped. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OCTACKCR_b.OCTACKSRDY, 1U); - /* Invalidate flash cache. */ - R_FCACHE->FCACHEIV = 1U; - FSP_HARDWARE_REGISTER_WAIT(R_FCACHE->FCACHEIV, 0U); + /* Write the settings. */ + R_SYSTEM->OCTACKDIVCR = BSP_CFG_OCTA_DIV; + R_SYSTEM->OCTACKCR = BSP_CFG_OCTA_SOURCE | R_SYSTEM_OCTACKCR_OCTACKSREQ_Msk; + + /* Start the OCTASPI Clock. */ + R_SYSTEM->OCTACKCR = BSP_CFG_OCTA_SOURCE; + + /* Wait for the OCTASPI Clock to be started. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OCTACKCR_b.OCTACKSRDY, 0U); +#endif /* BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK && BSP_CFG_OCTASPI_CLOCK_ENABLE */ + + /* Lock CGC and LPM protection registers. */ + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_LOCK; - /* Enable flash cache. */ - R_FCACHE->FCACHEE = 1U; +#if BSP_FEATURE_BSP_FLASH_CACHE && BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM + R_BSP_FlashCacheEnable(); #endif #if BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER @@ -844,30 +1066,46 @@ static uint8_t bsp_clock_set_prechange (uint32_t requested_freq_hz) #if BSP_FEATURE_CGC_HAS_SRAMWTSC /* Wait states for SRAM (SRAM0, SRAM1 and SRAM0 (DED)). */ - if (requested_freq_hz > BSP_PRV_SYS_CLOCK_FREQ_NO_RAM_WAITS) + if (requested_freq_hz > BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS) { + #ifdef BSP_FEATURE_CGC_HAS_SRAMPRCR2 + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_UNLOCK; + R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_ONE_WAIT_CYCLES; + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_LOCK; + #else R_SRAM->SRAMPRCR = BSP_PRV_SRAM_UNLOCK; R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_ONE_WAIT_CYCLES; R_SRAM->SRAMPRCR = BSP_PRV_SRAM_LOCK; + #endif } #endif #if BSP_FEATURE_CGC_HAS_FLWT /* Calculate the wait states for ROM */ - if (requested_freq_hz <= BSP_PRV_SYS_CLOCK_FREQ_ONE_ROM_WAITS) + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS) { new_rom_wait_state = BSP_PRV_ROM_ZERO_WAIT_CYCLES; } - else if (requested_freq_hz <= BSP_PRV_SYS_CLOCK_FREQ_TWO_ROM_WAITS) + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS) { new_rom_wait_state = BSP_PRV_ROM_ONE_WAIT_CYCLES; } else + #if BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS > 0 + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS) + #endif { new_rom_wait_state = BSP_PRV_ROM_TWO_WAIT_CYCLES; } + #if BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS > 0 + else + { + new_rom_wait_state = BSP_PRV_ROM_THREE_WAIT_CYCLES; + } + #endif + /* If more wait states are required after the change, then set the wait states before changing the clock. */ if (new_rom_wait_state > R_FCACHE->FLWT) { @@ -911,11 +1149,17 @@ static void bsp_clock_set_postchange (uint32_t updated_freq_hz, uint8_t new_rom_ #if BSP_FEATURE_CGC_HAS_SRAMWTSC /* Wait states for SRAM (SRAM0, SRAM1 and SRAM0 (DED)). */ - if (updated_freq_hz <= BSP_PRV_SYS_CLOCK_FREQ_NO_RAM_WAITS) + if (updated_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS) { + #if BSP_FEATURE_CGC_HAS_SRAMPRCR2 == 1 + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_UNLOCK; + R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_ZERO_WAIT_CYCLES; + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_LOCK; + #else R_SRAM->SRAMPRCR = BSP_PRV_SRAM_UNLOCK; R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_ZERO_WAIT_CYCLES; R_SRAM->SRAMPRCR = BSP_PRV_SRAM_LOCK; + #endif } #endif diff --git a/ra/fsp/src/bsp/mcu/all/bsp_clocks.h b/ra/fsp/src/bsp/mcu/all/bsp_clocks.h index 817e1357b..0491b67b9 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_clocks.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_clocks.h @@ -42,8 +42,9 @@ FSP_HEADER #define BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC (3) // The main oscillator. #define BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK (4) // The subclock oscillator. #define BSP_CLOCKS_SOURCE_CLOCK_PLL (5) // The PLL oscillator. +#define BSP_CLOCKS_SOURCE_CLOCK_PLL2 (6) // The PLL2 oscillator. -/* PLL is not supported in the following scenarios: +/* PLLs are not supported in the following scenarios: * - When using low voltage mode * - When using an MCU that does not have a PLL * - When the PLL only accepts the main oscillator as a source and XTAL is not used @@ -51,8 +52,14 @@ FSP_HEADER #if BSP_FEATURE_CGC_HAS_PLL && !BSP_CFG_USE_LOW_VOLTAGE_MODE && \ !((1U != BSP_FEATURE_CGC_PLLCCR_TYPE) && !BSP_CLOCK_CFG_MAIN_OSC_POPULATED) #define BSP_PRV_PLL_SUPPORTED (1) + #if BSP_FEATURE_CGC_HAS_PLL2 + #define BSP_PRV_PLL2_SUPPORTED (1) + #else + #define BSP_PRV_PLL2_SUPPORTED (0) + #endif #else #define BSP_PRV_PLL_SUPPORTED (0) + #define BSP_PRV_PLL2_SUPPORTED (0) #endif /* The ICLK frequency at startup is used to determine the ideal operating mode to set after startup. The PLL frequency @@ -64,6 +71,13 @@ FSP_HEADER #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_CFG_XTAL_HZ) #endif #endif +#if BSP_PRV_PLL2_SUPPORTED + #if BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL2_SOURCE + #define BSP_PRV_PLL2_SOURCE_FREQ_HZ (BSP_HOCO_HZ) + #else + #define BSP_PRV_PLL2_SOURCE_FREQ_HZ (BSP_CFG_XTAL_HZ) + #endif +#endif /* Frequencies of clocks with fixed freqencies. */ #define BSP_LOCO_FREQ_HZ (32768U) // LOCO frequency is fixed at 32768 Hz @@ -121,6 +135,13 @@ FSP_HEADER #define BSP_CLOCKS_USB_CLOCK_DIV_4 (3) // Divide USB source clock by 4 #define BSP_CLOCKS_USB_CLOCK_DIV_5 (4) // Divide USB source clock by 5 +/* OCTA clock divider options. */ +#define BSP_CLOCKS_OCTA_CLOCK_DIV_1 (0) // Divide OCTA source clock by 1 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_2 (1) // Divide OCTA source clock by 2 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_4 (2) // Divide OCTA source clock by 4 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_6 (3) // Divide OCTA source clock by 6 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_8 (4) // Divide OCTA source clock by 8 + /* PLL divider options. */ #define BSP_CLOCKS_PLL_DIV_1 (0) #define BSP_CLOCKS_PLL_DIV_2 (1) @@ -173,8 +194,8 @@ FSP_HEADER #define BSP_CLOCKS_PLL_MUL_30_0 (0x3B) #define BSP_CLOCKS_PLL_MUL_31_0 (0x3D) -/* Configuration option used to disable CLKOUT output. */ -#define BSP_CLOCKS_CLKOUT_DISABLED (0xFFU) +/* Configuration option used to disable clock output. */ +#define BSP_CLOCKS_CLOCK_DISABLED (0xFFU) /* HOCO cycles per microsecond. */ #define BSP_PRV_HOCO_CYCLES_PER_US (BSP_HOCO_HZ / 1000000U) @@ -234,6 +255,22 @@ FSP_HEADER * 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 * volatile 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 + /*********************************************************************************************************************** * Exported global variables **********************************************************************************************************************/ @@ -245,6 +282,17 @@ FSP_HEADER /* Public functions defined in bsp.h */ void bsp_clock_init(void); // Used internally by BSP +#if BSP_TZ_NONSECURE_BUILD +void bsp_clock_freq_var_init(void); // Used internally by BSP + +#endif + +#if BSP_TZ_SECURE_BUILD +void r_bsp_clock_update_callback_set(bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory); + +#endif + /* Used internally by CGC */ #if !BSP_CFG_USE_LOW_VOLTAGE_MODE diff --git a/ra/fsp/src/bsp/mcu/all/bsp_common.h b/ra/fsp/src/bsp/mcu/all/bsp_common.h index ef18258a8..62214275d 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_common.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_common.h @@ -174,8 +174,12 @@ extern const fsp_version_t g_bsp_version; /* Private definition used in R_FSP_SystemClockHzGet. Each bitfield in SCKDIVCR is 3 bits wide. */ #define FSP_PRIV_SCKDIVCR_DIV_MASK (7) -#define BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) -#define BSP_UNIQUE_ID_OFFSET (0x14) +/* 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 /*********************************************************************************************************************** * Typedef definitions @@ -256,7 +260,29 @@ __STATIC_INLINE uint32_t R_FSP_SystemClockHzGet (fsp_priv_clock_t clock) **********************************************************************************************************************/ __STATIC_INLINE bsp_unique_id_t const * R_BSP_UniqueIdGet () { - return (bsp_unique_id_t *) ((*(uint32_t *) BSP_MCU_INFO_POINTER_LOCATION) + BSP_UNIQUE_ID_OFFSET); + return (bsp_unique_id_t *) BSP_FEATURE_BSP_UNIQUE_ID_POINTER; +} + +/*******************************************************************************************************************//** + * Disables the flash cache. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_FlashCacheDisable () +{ + R_FCACHE->FCACHEE = 0U; +} + +/*******************************************************************************************************************//** + * Enables the flash cache. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_FlashCacheEnable () +{ + /* 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; } /*********************************************************************************************************************** diff --git a/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h b/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h index e0dfd42d0..544b579b5 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h @@ -26,27 +26,38 @@ #ifndef BSP_COMPILER_SUPPORT_H #define BSP_COMPILER_SUPPORT_H +#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) + #include +#endif + /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ #if defined(__ARMCC_VERSION) /* AC6 compiler */ - #define BSP_SECTION_HEAP ".bss.heap" + +/* The AC6 linker requires uninitialized code to be placed in a section that starts with ".bss." Without this, load + * memory (ROM) is reserved unnecessarily. */ + #define BSP_UNINIT_SECTION_PREFIX ".bss" + #define BSP_SECTION_HEAP BSP_UNINIT_SECTION_PREFIX ".heap" #define BSP_DONT_REMOVE #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) #define BSP_FORCE_INLINE __attribute__((always_inline)) #elif defined(__GNUC__) /* GCC compiler */ + #define BSP_UNINIT_SECTION_PREFIX #define BSP_SECTION_HEAP ".heap" #define BSP_DONT_REMOVE #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) #define BSP_FORCE_INLINE __attribute__((always_inline)) #elif defined(__ICCARM__) /* IAR compiler */ + #define BSP_UNINIT_SECTION_PREFIX #define BSP_SECTION_HEAP "HEAP" #define BSP_DONT_REMOVE __root #define BSP_ATTRIBUTE_STACKLESS __stackless #define BSP_FORCE_INLINE _Pragma("inline=forced") #endif -#define BSP_SECTION_STACK ".stack" +#define BSP_SECTION_STACK BSP_UNINIT_SECTION_PREFIX ".stack" +#define BSP_SECTION_NOINIT BSP_UNINIT_SECTION_PREFIX ".noinit" #define BSP_SECTION_FIXED_VECTORS ".fixed_vectors" #define BSP_SECTION_APPLICATION_VECTORS ".application_vectors" #define BSP_SECTION_ROM_REGISTERS ".rom_registers" @@ -57,16 +68,28 @@ #define BSP_ALIGN_VARIABLE(x) __attribute__((aligned(x))) -#define BSP_PACKED __attribute__((aligned(1))) +#define BSP_PACKED __attribute__((aligned(1))) -#define BSP_WEAK_REFERENCE __attribute__((weak)) +#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) +#define BSP_STACK_ALIGNMENT (8) /*********************************************************************************************************************** - * Typedef definitions + * TrustZone definitions **********************************************************************************************************************/ +#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) + #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 diff --git a/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c b/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c index 5098697f3..e6b2a60c3 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c @@ -26,7 +26,7 @@ /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ -#define BSP_GRP_IRQ_TOTAL_ITEMS (13U) +#define BSP_GRP_IRQ_TOTAL_ITEMS (16U) /*********************************************************************************************************************** * Typedef definitions @@ -105,7 +105,7 @@ void NMI_Handler (void) uint16_t nmisr = R_ICU->NMISR; /* Loop over all NMI status flags */ - for (bsp_grp_irq_t irq = BSP_GRP_IRQ_IWDT_ERROR; irq <= BSP_GRP_IRQ_MPU_STACK; irq++) + for (bsp_grp_irq_t irq = BSP_GRP_IRQ_IWDT_ERROR; irq <= BSP_GRP_IRQ_CACHE_PARITY; irq++) { /* If the current irq status register is set call the irq callback. */ if (0U != (nmisr & (1U << irq))) diff --git a/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h b/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h index a51e154e5..2e910b362 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h @@ -53,6 +53,8 @@ typedef enum e_bsp_grp_irq BSP_GRP_IRQ_MPU_BUS_SLAVE = 10, ///< MPU Bus Slave Error BSP_GRP_IRQ_MPU_BUS_MASTER = 11, ///< MPU Bus Master Error BSP_GRP_IRQ_MPU_STACK = 12, ///< MPU Stack Error + BSP_GRP_IRQ_TRUSTZONE = 13, ///< MPU Stack Error + BSP_GRP_IRQ_CACHE_PARITY = 15, ///< MPU Stack Error } bsp_grp_irq_t; /* Callback type. */ diff --git a/ra/fsp/src/r_sce/ra2/SC324_p99.prc.c b/ra/fsp/src/bsp/mcu/all/bsp_guard.c similarity index 64% rename from ra/fsp/src/r_sce/ra2/SC324_p99.prc.c rename to ra/fsp/src/bsp/mcu/all/bsp_guard.c index 1f57caa37..fe06756cb 100644 --- a/ra/fsp/src/r_sce/ra2/SC324_p99.prc.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_guard.c @@ -18,30 +18,38 @@ * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. **********************************************************************************************************************/ -////////////////////////////////////////////////////////////////////////// -// // -// Procedure number: 99 // -// File name : SC324_p99.prc // -// State Diagram : main(FSM1) // -// Start State : main02 // -// End State : main03 // -// Input Data : void // -// Output Data : void // -// Return value : Pass, Resource_Conflict // -// ----------------------------------------------------------------------// -// total cycle : polling + write access + read access // -// polling : // -// polling access : // -// write access : // -// read access : // -////////////////////////////////////////////////////////////////////////// - -#include "hw_sce_private.h" +#include "bsp_guard.h" + +/* Only the secure project has nonsecure callable functions. */ +#if BSP_TZ_SECURE_BUILD + +/* If the CGG Security Attribution is configured to secure access only. */ + #if BSP_TZ_CFG_CGFSAR != 0xFFFFFFFFU /*******************************************************************************************************************//** - * Secure Boot procedure - * @retval FSP_SUCCESS The operation completed successfully. + * 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. **********************************************************************************************************************/ -fsp_err_t HW_SCE_secureBoot (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) +{ + 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/ra/fsp/src/r_sce/ra2/SC324_SoftReset.prc.c b/ra/fsp/src/bsp/mcu/all/bsp_guard.h similarity index 68% rename from ra/fsp/src/r_sce/ra2/SC324_SoftReset.prc.c rename to ra/fsp/src/bsp/mcu/all/bsp_guard.h index 8dd759290..81a284c3d 100644 --- a/ra/fsp/src/r_sce/ra2/SC324_SoftReset.prc.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_guard.h @@ -18,21 +18,29 @@ * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. **********************************************************************************************************************/ -///////////////////////////////////////////////////////////////////////// -// // -// File name : SC324_SoftReset.prc // -// State Diagram : All state transition // -// Start State : All state // -// End State : main00 // -// Input Data : void // -// Output Data : void // -// return value : void // -// ---------------------------------------------------------------------// -// total cycle : write access // -// write access : 3 times // -///////////////////////////////////////////////////////////////////////// - -#include "hw_sce_private.h" - -void HW_SCE_SoftReset () { -} +#ifndef BSP_GUARD_H +#define BSP_GUARD_H + +#include "bsp_api.h" + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +#if BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD +BSP_CMSE_NONSECURE_ENTRY fsp_err_t R_BSP_ClockUpdateCallbackSet(bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory); + +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/ra/fsp/src/bsp/mcu/all/bsp_io.h b/ra/fsp/src/bsp/mcu/all/bsp_io.h index 4eec4289d..9e8958c81 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_io.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_io.h @@ -336,8 +336,13 @@ __STATIC_INLINE void R_BSP_PinAccessEnable (void) /** If this is first entry then allow writing of PFS. */ if (0 == g_protect_pfswe_counter) { - R_PMISC->PWPR = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled - R_PMISC->PWPR = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #if BSP_TZ_SECURE_BUILD + R_PMISC->PWPRS = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPRS = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #else + R_PMISC->PWPR = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPR = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #endif } /** Increment the protect counter */ @@ -370,8 +375,13 @@ __STATIC_INLINE void R_BSP_PinAccessDisable (void) /** Is it safe to disable writing of PFS? */ if (0 == g_protect_pfswe_counter) { - R_PMISC->PWPR = 0; ///< Clear PFSWE bit - writing to PFS register disabled - R_PMISC->PWPR = 1U << BSP_IO_PWPR_B0WI_OFFSET; ///< Set BOWI bit - writing to PFSWE bit disabled + #if BSP_TZ_SECURE_BUILD + R_PMISC->PWPRS = 0; ///< Clear PFSWE bit - writing to PFSWE bit enabled + R_PMISC->PWPRS = 1U << BSP_IO_PWPR_B0WI_OFFSET; ///< Set BOWI bit - writing to PFS register enabled + #else + R_PMISC->PWPR = 0; ///< Clear PFSWE bit - writing to PFS register disabled + R_PMISC->PWPR = 1U << BSP_IO_PWPR_B0WI_OFFSET; ///< Set BOWI bit - writing to PFSWE bit disabled + #endif } /** Restore the interrupt state */ diff --git a/ra/fsp/src/bsp/mcu/all/bsp_irq.c b/ra/fsp/src/bsp/mcu/all/bsp_irq.c index edd9e64fe..5a7fe5b6e 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_irq.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_irq.c @@ -28,7 +28,8 @@ /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ -#define BSP_IRQ_UINT32_MAX (0xFFFFFFFFU) +#define BSP_IRQ_UINT32_MAX (0xFFFFFFFFU) +#define BSP_PRV_BITS_PER_WORD (32) /*********************************************************************************************************************** * Typedef definitions @@ -62,6 +63,45 @@ const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_MAX_ENT **********************************************************************************************************************/ void bsp_irq_cfg (void) { +#if FSP_PRIV_TZ_USE_SECURE_REGS + + /* Unprotect security registers. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + + #if !BSP_TZ_SECURE_BUILD + + /* Set the DMAC channels to secure access. */ + R_CPSCU->ICUSARC = ~R_CPSCU_ICUSARC_SADMACn_Msk; + #endif + + /* Place all vectors in non-secure state unless they are used in the secure project. */ + uint32_t interrupt_security_state[BSP_ICU_VECTOR_MAX_ENTRIES / BSP_PRV_BITS_PER_WORD]; + memset(&interrupt_security_state, UINT8_MAX, sizeof(interrupt_security_state)); + + for (uint32_t i = 0U; i < BSP_ICU_VECTOR_MAX_ENTRIES; i++) + { + if (0U != g_interrupt_event_link_select[i]) + { + /* This is a secure vector. Clear the associated bit. */ + uint32_t index = i / BSP_PRV_BITS_PER_WORD; + uint32_t bit = i % BSP_PRV_BITS_PER_WORD; + interrupt_security_state[index] &= ~(1U << bit); + } + } + + /* The Secure Attribute managed within the ARM CPU NVIC must match the security attribution of IELSEn + * (Reference section 13.2.9 in the RA6M4 manual R01UH0890EJ0050). */ + uint32_t volatile * p_icusarg = &R_CPSCU->ICUSARG; + for (uint32_t i = 0U; i < BSP_ICU_VECTOR_MAX_ENTRIES / BSP_PRV_BITS_PER_WORD; i++) + { + p_icusarg[i] = interrupt_security_state[i]; + NVIC->ITNS[i] = interrupt_security_state[i]; + } + + /* Protect security registers. */ + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); +#endif + for (uint32_t i = 0U; i < BSP_ICU_VECTOR_MAX_ENTRIES; i++) { R_ICU->IELSR[i] = (uint32_t) g_interrupt_event_link_select[i]; diff --git a/ra/fsp/src/bsp/mcu/all/bsp_irq.h b/ra/fsp/src/bsp/mcu/all/bsp_irq.h index 768a84fe5..a439eab00 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_irq.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_irq.h @@ -107,6 +107,8 @@ __STATIC_INLINE void R_BSP_IrqCfg (IRQn_Type const irq, uint32_t priority, void * 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))); diff --git a/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h b/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h index 85c06bef7..f4092b359 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h @@ -35,9 +35,10 @@ FSP_HEADER * @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 &= ~BSP_MSTP_BIT_ ## ip(channel); \ +#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); \ + BSP_MSTP_REG_ ## ip(channel); \ FSP_CRITICAL_SECTION_EXIT;} /*******************************************************************************************************************//** @@ -46,92 +47,105 @@ FSP_HEADER * @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 |= BSP_MSTP_BIT_ ## ip(channel); \ +#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); \ + BSP_MSTP_REG_ ## ip(channel); \ FSP_CRITICAL_SECTION_EXIT;} /** @} (end addtogroup BSP_MCU) */ -#define BSP_MSTP_REG_FSP_IP_GPT R_MSTP->MSTPCRD -#define BSP_MSTP_BIT_FSP_IP_GPT(channel) ((BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH >= \ +#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 + #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_POEG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U - channel)); +#endif -#define BSP_MSTP_REG_FSP_IP_DMAC R_SYSTEM->MSTPCRA +#define BSP_MSTP_REG_FSP_IP_DMAC(channel) R_SYSTEM->MSTPCRA #define BSP_MSTP_BIT_FSP_IP_DMAC(channel) (1U << (22U)); -#define BSP_MSTP_REG_FSP_IP_DTC R_SYSTEM->MSTPCRA +#define BSP_MSTP_REG_FSP_IP_DTC(channel) R_SYSTEM->MSTPCRA #define BSP_MSTP_BIT_FSP_IP_DTC(channel) (1U << (22U)); -#define BSP_MSTP_REG_FSP_IP_CAN R_MSTP->MSTPCRB +#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_IRDA R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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_SPI R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRB +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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_TRNG R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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 R_MSTP->MSTPCRC +#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_AGT R_MSTP->MSTPCRD -#define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (3U - channel)); -#define BSP_MSTP_REG_FSP_IP_POEG R_MSTP->MSTPCRD -#define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U)); -#define BSP_MSTP_REG_FSP_IP_ADC R_MSTP->MSTPCRD +#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 R_MSTP->MSTPCRD +#define BSP_MSTP_REG_FSP_IP_SDADC(channel) R_MSTP->MSTPCRD #define BSP_MSTP_BIT_FSP_IP_SDADC(channel) (1U << (17U - channel)); -#define BSP_MSTP_REG_FSP_IP_DAC8 R_MSTP->MSTPCRD +#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 R_MSTP->MSTPCRD +#define BSP_MSTP_REG_FSP_IP_DAC(channel) R_MSTP->MSTPCRD #define BSP_MSTP_BIT_FSP_IP_DAC(channel) (1U << (20U)); -#define BSP_MSTP_REG_FSP_IP_TSN R_MSTP->MSTPCRD +#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 R_MSTP->MSTPCRD +#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 R_MSTP->MSTPCRD +#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 R_MSTP->MSTPCRD +#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. */ diff --git a/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c b/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c index e19c87250..e5cfd06c7 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c @@ -45,7 +45,7 @@ /** Used for holding reference counters for protection bits. */ static volatile uint16_t g_protect_counters[] = { - 0U, 0U, 0U + 0U, 0U, 0U, 0U }; /** Masks for setting or clearing the PRCR register. Use -1 for size because PWPR in MPC is used differently. */ @@ -54,6 +54,7 @@ static const uint16_t g_prcr_masks[] = 0x0001U, /* PRC0. */ 0x0002U, /* PRC1. */ 0x0008U, /* PRC3. */ + 0x0010U, /* PRC4. */ }; /*******************************************************************************************************************//** diff --git a/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h b/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h index 7bd186c00..6b0621b59 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h +++ b/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h @@ -50,6 +50,9 @@ typedef enum e_bsp_reg_protect /** Enables writing to the registers related to the LVD: LVCMPCR, LVDLVLR, LVD1CR0, LVD1CR1, LVD1SR, LVD2CR0, * LVD2CR1, LVD2SR. */ BSP_REG_PROTECT_LVD, + + /** Enables writing to the registers related to the security function. */ + BSP_REG_PROTECT_SAR, } bsp_reg_protect_t; /** @} (end addtogroup BSP_MCU) */ diff --git a/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c b/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c index 1d1f63f93..f4ab0b686 100644 --- a/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c @@ -26,6 +26,7 @@ /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ +#define RA_NOT_DEFINED (0) /** OR in the HOCO frequency setting from bsp_clock_cfg.h with the OFS1 setting from bsp_cfg.h. */ #define BSP_ROM_REG_OFS1_SETTING \ @@ -59,6 +60,8 @@ * Private global variables and functions **********************************************************************************************************************/ +#if 33U != __CORTEX_M // NOLINT(readability-magic-numbers) + /** ROM registers defined here. Some have masks to make sure reserved bits are set appropriately. */ BSP_DONT_REMOVE static const uint32_t g_bsp_rom_registers[] BSP_PLACE_IN_SECTION (BSP_SECTION_ROM_REGISTERS) = { @@ -83,18 +86,82 @@ BSP_DONT_REMOVE static const uint32_t g_bsp_rom_registers[] BSP_PLACE_IN_SECTION BSP_DONT_REMOVE static const uint32_t g_bsp_id_codes[] BSP_PLACE_IN_SECTION (BSP_SECTION_ID_CODE) = { BSP_CFG_ID_CODE_LONG_1, -#if BSP_FEATURE_BSP_OSIS_PADDING + #if BSP_FEATURE_BSP_OSIS_PADDING 0xFFFFFFFFU, -#endif + #endif BSP_CFG_ID_CODE_LONG_2, -#if BSP_FEATURE_BSP_OSIS_PADDING + #if BSP_FEATURE_BSP_OSIS_PADDING 0xFFFFFFFFU, -#endif + #endif BSP_CFG_ID_CODE_LONG_3, -#if BSP_FEATURE_BSP_OSIS_PADDING + #if BSP_FEATURE_BSP_OSIS_PADDING 0xFFFFFFFFU, -#endif + #endif BSP_CFG_ID_CODE_LONG_4 }; +#else /* CM33 parts */ + + #if !BSP_TZ_NONSECURE_BUILD + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs0") g_bsp_rom_ofs0 = + BSP_CFG_ROM_REG_OFS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_dualsel") g_bsp_rom_dualsel = + BSP_CFG_ROM_REG_DUALSEL; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_sas") g_bsp_rom_sas = + 0xFFFFFFFF; + + #else + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1") g_bsp_rom_ofs1 = + BSP_ROM_REG_OFS1_SETTING; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_banksel") g_bsp_rom_banksel = + 0xFFFFFFFF; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps0") g_bsp_rom_bps0 = + BSP_CFG_ROM_REG_BPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps1") g_bsp_rom_bps1 = + BSP_CFG_ROM_REG_BPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps2") g_bsp_rom_bps2 = + BSP_CFG_ROM_REG_BPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps0") g_bsp_rom_pbps0 = + BSP_CFG_ROM_REG_PBPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps1") g_bsp_rom_pbps1 = + BSP_CFG_ROM_REG_PBPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps2") g_bsp_rom_pbps2 = + BSP_CFG_ROM_REG_PBPS2; + + #endif + + #if !BSP_TZ_NONSECURE_BUILD + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1_sec") g_bsp_rom_ofs1_sec = + BSP_ROM_REG_OFS1_SETTING; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_banksel_sec") g_bsp_rom_banksel_sec = + 0xFFFFFFFF; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec0") g_bsp_rom_bps_sec0 = + BSP_CFG_ROM_REG_BPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec1") g_bsp_rom_bps_sec1 = + BSP_CFG_ROM_REG_BPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec2") g_bsp_rom_bps_sec2 = + BSP_CFG_ROM_REG_BPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec0") g_bsp_rom_pbps_sec0 = + BSP_CFG_ROM_REG_PBPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec1") g_bsp_rom_pbps_sec1 = + BSP_CFG_ROM_REG_PBPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec2") g_bsp_rom_pbps_sec2 = + BSP_CFG_ROM_REG_PBPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1_sel") g_bsp_rom_ofs1_sel = + BSP_CFG_ROM_REG_OFS1_SEL; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_banksel_sel") g_bsp_rom_banksel_sel = + 0xFFFFFFFF; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel0") g_bsp_rom_bps_sel0 = + BSP_CFG_ROM_REG_BPS_SEL0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel1") g_bsp_rom_bps_sel1 = + BSP_CFG_ROM_REG_BPS_SEL1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel2") g_bsp_rom_bps_sel2 = + BSP_CFG_ROM_REG_BPS_SEL2; + + #endif +#endif + /** @} (end addtogroup BSP_MCU) */ diff --git a/ra/fsp/src/bsp/mcu/all/bsp_security.c b/ra/fsp/src/bsp/mcu/all/bsp_security.c new file mode 100644 index 000000000..537b07b60 --- /dev/null +++ b/ra/fsp/src/bsp/mcu/all/bsp_security.c @@ -0,0 +1,336 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if BSP_TZ_SECURE_BUILD + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + #define BSP_PRV_TZ_REG_KEY (0xA500U) + #define BSP_PRV_AIRCR_VECTKEY (0x05FA0000U) + #define RA_NOT_DEFINED (0) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +void R_BSP_SecurityInit(void); +void R_BSP_PinCfgSecurityInit(void); +void R_BSP_ElcCfgSecurityInit(void); + +/*********************************************************************************************************************** + * External symbols + **********************************************************************************************************************/ +extern const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES]; + + #if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile bsp_nonsecure_func_t)(void); + #elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile bsp_nonsecure_func_t)(void); + #endif + + #if defined(__IAR_SYSTEMS_ICC__) + #pragma section=".tz_flash_nsc_start" + #pragma section=".tz_flash_ns_start" + #pragma section=".tz_ram_nsc_start" + #pragma section=".tz_ram_ns_start" + #pragma section=".tz_data_flash_ns_start" + #pragma section=".tz_sdram_ns_start" + #pragma section=".tz_qspi_flash_ns_start" + +/* &__tz__C is the address of the non-secure callable section. */ +/* &__tz__N is the start address of the non-secure region. */ +BSP_DONT_REMOVE void const * const __tz_FLASH_C BSP_ALIGN_VARIABLE(1024) @".tz_flash_nsc_start"; +BSP_DONT_REMOVE void const * const __tz_FLASH_N BSP_ALIGN_VARIABLE(32768) @".tz_flash_ns_start"; +BSP_DONT_REMOVE void const * const __tz_RAM_C BSP_ALIGN_VARIABLE(1024) @".tz_ram_nsc_start"; +BSP_DONT_REMOVE void const * const __tz_RAM_N BSP_ALIGN_VARIABLE(8192) @".tz_ram_ns_start"; +BSP_DONT_REMOVE void const * const __tz_DATA_FLASH_N BSP_ALIGN_VARIABLE(1024) @".tz_data_flash_ns_start"; + + #if BSP_FEATURE_SDRAM_START_ADDRESS +BSP_DONT_REMOVE void const * const __tz_SDRAM_N @".tz_sdram_ns_start"; + #endif +BSP_DONT_REMOVE void const * const __tz_QSPI_FLASH_N @".tz_qspi_flash_ns_start"; + #if BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS +BSP_DONT_REMOVE void const * const __tz_OSPI_DEVICE_0_N @".tz_ospi_device_0_ns_start"; + #endif + #if BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS +BSP_DONT_REMOVE void const * const __tz_OSPI_DEVICE_1_N @".tz_ospi_device_1_ns_start"; + #endif + +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = (uint32_t *) &__tz_FLASH_N; + #elif defined(__ARMCC_VERSION) +extern const uint32_t Image$$__tz_FLASH_N$$Base; +extern const uint32_t Image$$__tz_FLASH_C$$Base; +extern const uint32_t Image$$__tz_FLASH_S$$Base; +extern const uint32_t Image$$__tz_RAM_N$$Base; +extern const uint32_t Image$$__tz_RAM_C$$Base; +extern const uint32_t Image$$__tz_RAM_S$$Base; +extern const uint32_t Image$$__tz_DATA_FLASH_N$$Base; +extern const uint32_t Image$$__tz_DATA_FLASH_S$$Base; +extern const uint32_t Image$$__tz_QSPI_FLASH_N$$Base; +extern const uint32_t Image$$__tz_QSPI_FLASH_S$$Base; +extern const uint32_t Image$$__tz_SDRAM_N$$Base; +extern const uint32_t Image$$__tz_SDRAM_S$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_0_N$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_0_S$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_1_N$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_1_S$$Base; + + #define __tz_FLASH_N Image$$__tz_FLASH_N$$Base + #define __tz_FLASH_C Image$$__tz_FLASH_C$$Base + #define __tz_FLASH_S Image$$__tz_FLASH_S$$Base + #define __tz_RAM_N Image$$__tz_RAM_N$$Base + #define __tz_RAM_C Image$$__tz_RAM_C$$Base + #define __tz_RAM_S Image$$__tz_RAM_S$$Base + #define __tz_DATA_FLASH_N Image$$__tz_DATA_FLASH_N$$Base + #define __tz_DATA_FLASH_S Image$$__tz_DATA_FLASH_S$$Base + #define __tz_QSPI_FLASH_N Image$$__tz_QSPI_FLASH_N$$Base + #define __tz_QSPI_FLASH_S Image$$__tz_QSPI_FLASH_S$$Base + #define __tz_SDRAM_N Image$$__tz_SDRAM_N$$Base + #define __tz_SDRAM_S Image$$__tz_SDRAM_S$$Base + #define __tz_OSPI_DEVICE_0_N Image$$__tz_OSPI_DEVICE_0_N$$Base + #define __tz_OSPI_DEVICE_0_S Image$$__tz_OSPI_DEVICE_0_S$$Base + #define __tz_OSPI_DEVICE_1_N Image$$__tz_OSPI_DEVICE_1_N$$Base + #define __tz_OSPI_DEVICE_1_S Image$$__tz_OSPI_DEVICE_1_S$$Base + +/* Assign region addresses to pointers so that AC6 includes symbols that can be used to determine the + * start addresses of Secure, Non-secure and Non-secure Callable regions. */ +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = &__tz_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_flash = &__tz_FLASH_C; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_flash = &__tz_FLASH_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ram = &__tz_RAM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_ram = &__tz_RAM_C; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ram = &__tz_RAM_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_data_flash = &__tz_DATA_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_data_flash = &__tz_DATA_FLASH_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_qspi_flash = &__tz_QSPI_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_qspi_flash = &__tz_QSPI_FLASH_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_sdram = &__tz_SDRAM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_sdram = &__tz_SDRAM_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ospi_device_0 = &__tz_OSPI_DEVICE_0_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ospi_device_0 = &__tz_OSPI_DEVICE_0_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ospi_device_1 = &__tz_OSPI_DEVICE_1_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ospi_device_1 = &__tz_OSPI_DEVICE_1_S; + #elif defined(__GNUC__) +extern const uint32_t __tz_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = &__tz_FLASH_N; + #endif + +/*******************************************************************************************************************//** + * @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 = gp_start_of_nonsecure_flash; + + /* 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); + + /* 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) +{ + /* 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; + + /* 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 + + /* Disable PRCR for SARs. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + + /* Set TrustZone filter to Secure. */ + R_TZF->TZFSAR = ~R_TZF_TZFSAR_TZFSA0_Msk; + + /* Set TrustZone filter exception response. */ + R_TZF->TZFPT = BSP_PRV_TZ_REG_KEY + 1U; + R_TZF->TZFOAD = BSP_PRV_TZ_REG_KEY + BSP_TZ_CFG_EXCEPTION_RESPONSE; + R_TZF->TZFPT = BSP_PRV_TZ_REG_KEY + 0U; + + /* Initialize PSARs. */ + R_PSCU->PSARB = BSP_TZ_CFG_PSARB; + R_PSCU->PSARC = BSP_TZ_CFG_PSARC; + R_PSCU->PSARD = BSP_TZ_CFG_PSARD; + R_PSCU->PSARE = BSP_TZ_CFG_PSARE; + R_PSCU->MSSAR = BSP_TZ_CFG_MSSAR; + + /* Initialize Type 2 SARs. */ + R_SYSTEM->RSTSAR = BSP_TZ_CFG_RSTSAR; /* RSTSRn Security Attribution. */ + R_SYSTEM->LVDSAR = BSP_TZ_CFG_LVDSAR; /* LVD Security Attribution. */ + R_SYSTEM->CGFSAR = BSP_TZ_CFG_CGFSAR; /* CGC Security Attribution. */ + R_SYSTEM->LPMSAR = BSP_TZ_CFG_LPMSAR; /* LPM Security Attribution. */ + R_SYSTEM->DPFSAR = BSP_TZ_CFG_DPFSAR; /* Deep Standby Interrupt Factor Security Attribution. */ + R_SYSTEM->BBFSAR = BSP_TZ_CFG_BBFSAR; /* Battery Backup Security Attribution. */ + R_CPSCU->ICUSARA = BSP_TZ_CFG_ICUSARA; /* External IRQ Security Attribution. */ + R_CPSCU->ICUSARB = BSP_TZ_CFG_ICUSARB; /* NMI Security Attribution. */ + R_CPSCU->ICUSARC = BSP_TZ_CFG_ICUSARC; /* DMAC Channel Security Attribution. */ + R_CPSCU->ICUSARD = BSP_TZ_CFG_ICUSARD; /* SELSR0 Security Attribution. */ + R_CPSCU->ICUSARE = BSP_TZ_CFG_ICUSARE; /* WUPEN0 Security Attribution. */ + R_CPSCU->ICUSARF = BSP_TZ_CFG_ICUSARF; /* WUPEN1 Security Attribution. */ + R_FCACHE->FSAR = BSP_TZ_CFG_FSAR; /* FLWT and FCKMHZ Security Attribution. */ + R_CPSCU->SRAMSAR = BSP_TZ_CFG_SRAMSAR; /* SRAM Security Attribution. */ + R_CPSCU->STBRAMSAR = BSP_TZ_CFG_STBRAMSAR; /* Standby RAM Security Attribution. */ + R_CPSCU->MMPUSARA = BSP_TZ_CFG_MMPUSARA; /* Security Attribution for the DMAC Bus Master MPU. */ + R_CPSCU->BUSSARA = BSP_TZ_CFG_BUSSARA; /* Security Attribution Register A for the BUS Control Registers. */ + R_CPSCU->BUSSARB = BSP_TZ_CFG_BUSSARB; /* Security Attribution Register B for the BUS Control Registers. */ + + #if BSP_TZ_CFG_ICUSARC != UINT32_MAX + R_BSP_MODULE_START(FSP_IP_DMAC, 0); + + /* If any DMAC channels are required by secure program, disable nonsecure write access to DMAST + * in order to prevent the nonsecure program from disabling all DMAC channels. */ + R_CPSCU->DMACSAR = ~1U; /* Protect DMAST from nonsecure write access. */ + + /* Ensure that DMAST is set so that the nonsecure program can use DMA. */ + R_DMA->DMAST = 1U; + #endif + + #if BSP_TZ_CFG_DTC_USED + R_BSP_MODULE_START(FSP_IP_DTC, 0); + + /* If the DTC is used by the secure program, disable nonsecure write access to DTCST + * in order to prevent the nonsecure program from disabling all DTC transfers. */ + R_CPSCU->DTCSAR = ~1U; + + /* Ensure that DTCST is set so that the nonsecure program can use DTC. */ + R_DTC->DTCST = 1U; + #endif + + /* Initialize security attribution registers for Pins. */ + R_BSP_PinCfgSecurityInit(); + + /* Initialize security attribution registers for ELC. */ + R_BSP_ElcCfgSecurityInit(); + + /* Reenable PRCR for SARs. */ + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); +} + +/* This function is overridden by tooling. */ +BSP_WEAK_REFERENCE void R_BSP_PinCfgSecurityInit (void) +{ +} + +/* This function is overridden by tooling. */ +BSP_WEAK_REFERENCE void R_BSP_ElcCfgSecurityInit (void) +{ +} + +#else + + #if defined(__ARMCC_VERSION) && BSP_FEATURE_TZ_HAS_TRUSTZONE + +/* These symbols are required to allocate non-secure memory in flat projects on MCUs that support TrustZone. */ + +extern const uint32_t Image$$__tz_FLASH_N$$Base; +extern const uint32_t Image$$__tz_FLASH_C$$Base; +extern const uint32_t Image$$__tz_FLASH_S$$Base; +extern const uint32_t Image$$__tz_RAM_N$$Base; +extern const uint32_t Image$$__tz_RAM_C$$Base; +extern const uint32_t Image$$__tz_RAM_S$$Base; +extern const uint32_t Image$$__tz_DATA_FLASH_N$$Base; +extern const uint32_t Image$$__tz_DATA_FLASH_S$$Base; + + #define __tz_FLASH_N Image$$__tz_FLASH_N$$Base + #define __tz_FLASH_C Image$$__tz_FLASH_C$$Base + #define __tz_FLASH_S Image$$__tz_FLASH_S$$Base + #define __tz_RAM_N Image$$__tz_RAM_N$$Base + #define __tz_RAM_C Image$$__tz_RAM_C$$Base + #define __tz_RAM_S Image$$__tz_RAM_S$$Base + #define __tz_DATA_FLASH_N Image$$__tz_DATA_FLASH_N$$Base + #define __tz_DATA_FLASH_S Image$$__tz_DATA_FLASH_S$$Base + +/* Assign region addresses to pointers so that AC6 includes symbols that can be used to determine the + * start addresses of Secure, Non-secure and Non-secure Callable regions. */ +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = &__tz_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_flash = &__tz_FLASH_C; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_flash = &__tz_FLASH_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ram = &__tz_RAM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_ram = &__tz_RAM_C; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ram = &__tz_RAM_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_data_flash = &__tz_DATA_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_data_flash = &__tz_DATA_FLASH_S; + #endif + +#endif diff --git a/ra/fsp/src/r_sce/ra2/SC324_p01.prc.c b/ra/fsp/src/bsp/mcu/all/bsp_security.h similarity index 59% rename from ra/fsp/src/r_sce/ra2/SC324_p01.prc.c rename to ra/fsp/src/bsp/mcu/all/bsp_security.h index a6e3a8382..ed40b6684 100644 --- a/ra/fsp/src/r_sce/ra2/SC324_p01.prc.c +++ b/ra/fsp/src/bsp/mcu/all/bsp_security.h @@ -18,31 +18,30 @@ * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. **********************************************************************************************************************/ -///////////////////////////////////////////////////////////////////////// -// // -// Procedure number: 01 // -// File name : SC324_p01.prc // -// State Diagram : main(FSM1) // -// Start State : main00 // -// End State : Pass :main01, Fail :stop // -// Input Data : void // -// Output Data : void // -// Return value : Pass, Fail or Resource_Conflict // -// ---------------------------------------------------------------------// -// total cycle : polling + write access + read access // -// polling : cycle // -// polling access : times // -// write access : times // -// read access : times // -///////////////////////////////////////////////////////////////////////// - -#include "hw_sce_private.h" -#include "fsp_common_api.h" - -/*******************************************************************************************************************//** - * TSIP Selftest Function1 - * @retval FSP_SUCCESS The operation completed successfully. +#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 **********************************************************************************************************************/ -fsp_err_t HW_SCE_Initialization1 () { - return FSP_SUCCESS; -} + +/*********************************************************************************************************************** + * 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/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h index 4f759ed3d..08243533b 100644 --- a/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h +++ b/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h @@ -48,192 +48,236 @@ * Private global variables and functions **********************************************************************************************************************/ -#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (3U) // This comes from the Electrical Characteristics in the hardware manual. Can be 1 us if AVCC0 >= 3.3V. Using the largest minimum in this API. -#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF5) - -#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1) -#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100U) - -#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (0U) -#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (1U) -#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKD) -#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (0U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (0U) -#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU -#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) -#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (16U) -#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1U) -#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (0U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (0U) -#define BSP_FEATURE_ADC_TSN_SLOPE (-3650) -#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0xFF01FF) // 0 to 8, 16 to 23 in unit 0 -#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) -#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) -#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (1U) - -#define BSP_FEATURE_BSP_FLASH_CACHE (1) -#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) -#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (1) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) -#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x000FFFFFU) -#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (0U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFU) -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12U) -#define BSP_FEATURE_BSP_OSIS_PADDING (1) -#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) -#define BSP_FEATURE_BSP_RESET_TRNG (1U) -#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) - -#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1U) -#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_ICLK) -#define BSP_FEATURE_CAN_MCLOCK_ONLY (1U) -#define BSP_FEATURE_CAN_NUM_CHANNELS (1U) - -#define BSP_FEATURE_CGC_HAS_BCLK (0U) -#define BSP_FEATURE_CGC_HAS_FCLK (1U) -#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) -#define BSP_FEATURE_CGC_HAS_FLWT (0U) -#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) -#define BSP_FEATURE_CGC_HAS_MEMWAIT (1U) -#define BSP_FEATURE_CGC_HAS_PCLKA (0U) -#define BSP_FEATURE_CGC_HAS_PCLKB (1U) -#define BSP_FEATURE_CGC_HAS_PCLKC (0U) -#define BSP_FEATURE_CGC_HAS_PCLKD (1U) -#define BSP_FEATURE_CGC_HAS_PLL (0U) -#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0U) -#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1U) -#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1U) -#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) -#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100U) -#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz -#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000U) // This MCU does have Low Voltage Mode, up to 4MHz -#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (8000000U) // This MCU does have Middle Speed Mode, up to 8MHz -#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1U) -#define BSP_FEATURE_CGC_MODRV_MASK (0x08U) -#define BSP_FEATURE_CGC_MODRV_SHIFT (0x3U) -#define BSP_FEATURE_CGC_PLLCCR_TYPE (0U) -#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // This MCU does not have PLL -#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) -#define BSP_FEATURE_CGC_SODRV_MASK (0x03U) -#define BSP_FEATURE_CGC_SODRV_SHIFT (0x0U) -#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (2) - -#define BSP_FEATURE_CRYPTO_HAS_AES (1) -#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (0) -#define BSP_FEATURE_CRYPTO_HAS_ECC (0) -#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) -#define BSP_FEATURE_CRYPTO_HAS_HASH (0) -#define BSP_FEATURE_CRYPTO_HAS_RSA (0) -#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) - -#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (4U) -#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (4U) -#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) -#define BSP_FEATURE_CTSU_VERSION (1) - -#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (1U) -#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (1U) -#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (1U) -#define BSP_FEATURE_DAC8_MAX_CHANNELS (2U) - -#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (1U) -#define BSP_FEATURE_DAC_HAS_DAVREFCR (1U) -#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0U) -#define BSP_FEATURE_DAC_MAX_CHANNELS (1U) - -#define BSP_FEATURE_DMAC_MAX_CHANNEL (0) // Feature not available on this MCU - -#define BSP_FEATURE_DWT_CYCCNT (0U) - -#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x005CD30FU) // Positions of event link set registers (ELSRs) available on this MCU - -#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU -#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_VERSION (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0xFFFU) -#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10) -#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x800U) -#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (8) -#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x400U) -#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (1) -#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC ((fsp_priv_clock_t) FSP_PRIV_CLOCK_FCLK) // RA2A1 FlashIF uses FCLK -#define BSP_FEATURE_FLASH_LP_VERSION (3) - -#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) - -#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) - -#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x1) -#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x7F) -#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0x7U) -#define BSP_FEATURE_OPAMP_HAS_SWITCHES (1U) -#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (1U) -#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (1U) -#define BSP_FEATURE_OPAMP_BASE_ADDRESS (2U) - -#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFU) -#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB8F00FFU) - -#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) - -#define BSP_FEATURE_IOPORT_ELC_PORTS (4) -#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) - -#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_STANDBY (0U) -#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (0U) -#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_LVD_HAS_DIGITAL_FILTER (0U) -#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // 4.29V -#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // 1.65V -#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // 4.29V -#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // 3.84V -#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (300U) // Time in microseconds required for LVD to stabilize - -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (4U) -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (220U) // This information comes from the Electrical Characteristics chapter of the hardware manual. -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (10U) - -#define BSP_FEATURE_POEG_CHANNEL_MASK (0x3U) - -#define BSP_FEATURE_SCI_CHANNELS (0x203U) -#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKB) -#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x1U) -#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) - -#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU -#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU -#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU - -#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU - -#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKB) -#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) -#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (0U) -#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) - -#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (0) // Feature not available on this MCU -#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (3U) // This comes from the Electrical Characteristics in the hardware manual. Can be 1 us if AVCC0 >= 3.3V. Using the largest minimum in this API. +#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF5) + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1) +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100U) + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (0U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (1U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKD) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (0U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (0U) +#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (1U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (16U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_SLOPE (-3650) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0xFF01FF) // 0 to 8, 16 to 23 in unit 0 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (1) +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1U) +#define BSP_FEATURE_BSP_HAS_SP_MON (1U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0U) // On the RA6M4 there is a request bit that must be set before changing USB clock settings. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x000FFFFFU) +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (0U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12U) +#define BSP_FEATURE_BSP_OSIS_PADDING (1) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_BSP_RESET_TRNG (1U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (0U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (0U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (0U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + \ + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1U) +#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_ICLK) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (1U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (1U) + +#define BSP_FEATURE_CGC_HAS_BCLK (0U) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (0U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (1U) +#define BSP_FEATURE_CGC_HAS_PCLKA (0U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (0U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (0U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000U) // This MCU does have Low Voltage Mode, up to 4MHz +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (8000000U) // This MCU does have Middle Speed Mode, up to 8MHz +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x08U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x3U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (0U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // This MCU does not have PLL +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (0U) +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) +#define BSP_FEATURE_CGC_SODRV_MASK (0x03U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x0U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (2) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_HASH (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (4U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (4U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (1U) +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (1U) +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (1U) +#define BSP_FEATURE_DAC8_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (1U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (1U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (1U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (0) // Feature not available on this MCU + +#define BSP_FEATURE_DWT_CYCCNT (0U) + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x005CD30FU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU +#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0xFFFU) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10) +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x800U) +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (8) +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x400U) +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (1) +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC ((fsp_priv_clock_t) FSP_PRIV_CLOCK_FCLK) // RA2A1 FlashIF uses FCLK +#define BSP_FEATURE_FLASH_LP_VERSION (3) +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1) +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x1) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x7F) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB8F00FFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) + +#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_STANDBY (0U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (0U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (0U) +#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_LVD_HAS_DIGITAL_FILTER (0U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // 4.29V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // 1.65V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // 4.29V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // 3.84V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (300U) // Time in microseconds required for LVD to stabilize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (2U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (1U) +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (1U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (0U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (4U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (220U) // This information comes from the Electrical Characteristics chapter of the hardware manual. +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (10U) +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (1U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0x7U) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x203U) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKB) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x1U) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (0) // Feature not available on this MCU + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x0U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKB) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (0U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (0) // Feature not available on this MCU +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0U) #endif diff --git a/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h index 3de911579..d5f67db1d 100644 --- a/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h +++ b/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h @@ -33,8 +33,8 @@ **********************************************************************************************************************/ /* BSP MCU Specific Includes. */ -#include "../../src/bsp/mcu/ra2a1/bsp_elc.h" -#include "../../src/bsp/mcu/ra2a1/bsp_feature.h" +#include "bsp_elc.h" +#include "bsp_feature.h" /*********************************************************************************************************************** * Macro definitions diff --git a/ra/fsp/src/bsp/mcu/ra4m1/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra4m1/bsp_feature.h index ed6a3fa2b..d0970e23c 100644 --- a/ra/fsp/src/bsp/mcu/ra4m1/bsp_feature.h +++ b/ra/fsp/src/bsp/mcu/ra4m1/bsp_feature.h @@ -48,192 +48,236 @@ * Private global variables and functions **********************************************************************************************************************/ -#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (0) // Feature not available on this MCU -#define BSP_FEATURE_ACMPHS_VREF (0) // Feature not available on this MCU - -#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1) -#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100U) - -#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) -#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) -#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) -#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) -#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU -#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) -#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (14U) -#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1U) -#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (0U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (0U) -#define BSP_FEATURE_ADC_TSN_SLOPE (-3650) -#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x3FF7FFF) // 0 to 14, 16 to 25 in unit 0 -#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) -#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) -#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) - -#define BSP_FEATURE_BSP_FLASH_CACHE (1) -#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) -#define BSP_FEATURE_BSP_HAS_SCE5 (1) -#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (1U) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (1U) -#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) -#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (1U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFU) -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12U) -#define BSP_FEATURE_BSP_OSIS_PADDING (1) -#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) -#define BSP_FEATURE_BSP_RESET_TRNG (1U) -#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (1U) - -#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1U) -#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) -#define BSP_FEATURE_CAN_NUM_CHANNELS (1U) - -#define BSP_FEATURE_CGC_HAS_BCLK (0U) // This MCU does not have a BCLK -#define BSP_FEATURE_CGC_HAS_FCLK (1U) -#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) -#define BSP_FEATURE_CGC_HAS_FLWT (0U) -#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) -#define BSP_FEATURE_CGC_HAS_MEMWAIT (1U) -#define BSP_FEATURE_CGC_HAS_PCLKA (1U) -#define BSP_FEATURE_CGC_HAS_PCLKB (1U) -#define BSP_FEATURE_CGC_HAS_PCLKC (1U) -#define BSP_FEATURE_CGC_HAS_PCLKD (1U) -#define BSP_FEATURE_CGC_HAS_PLL (1U) -#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0U) -#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1U) -#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1U) -#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) -#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100U) -#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz -#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000U) // This MCU does have Low Voltage Mode, up to 4MHz -#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (8000000U) // This MCU does have Middle Speed Mode, up to 8MHz -#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1U) -#define BSP_FEATURE_CGC_MODRV_MASK (0x08U) -#define BSP_FEATURE_CGC_MODRV_SHIFT (0x3U) -#define BSP_FEATURE_CGC_PLLCCR_TYPE (2U) -#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (1U) // 1 us wait between setting PLLCCR and clearing PLLSTP -#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (1U) // RA4M1 requires that bits 16-18 of SCKDIVCR be the same as the bits for PCKB -#define BSP_FEATURE_CGC_SODRV_MASK (0x03U) -#define BSP_FEATURE_CGC_SODRV_SHIFT (0x0U) -#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (2) - -#define BSP_FEATURE_CRYPTO_HAS_AES (1) -#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC (0) -#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) -#define BSP_FEATURE_CRYPTO_HAS_HASH (0) -#define BSP_FEATURE_CRYPTO_HAS_RSA (0) -#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) - -#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (5U) -#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (5U) -#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) -#define BSP_FEATURE_CTSU_VERSION (1) - -#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0U) -#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0U) -#define BSP_FEATURE_DAC8_MAX_CHANNELS (2U) - -#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC_HAS_DAVREFCR (1U) -#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0U) -#define BSP_FEATURE_DAC_MAX_CHANNELS (1U) - -#define BSP_FEATURE_DMAC_MAX_CHANNEL (4U) - -#define BSP_FEATURE_DWT_CYCCNT (1U) // RA4M1 has Data Watchpoint Cycle Count Register - -#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007D3FFU) // Positions of event link set registers (ELSRs) available on this MCU - -#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU -#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_VERSION (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0xFFFU) -#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10) -#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x800U) -#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (8) -#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x400U) -#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (1) -#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC ((fsp_priv_clock_t) FSP_PRIV_CLOCK_FCLK) // RA4M1 FlashIF uses FCLK -#define BSP_FEATURE_FLASH_LP_VERSION (3) - -#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) - -#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) - -#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3) -#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0xFF) - -#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xDFFFU) -#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB9FDFFFU) - -#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) - -#define BSP_FEATURE_IOPORT_ELC_PORTS (4) -#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) - -#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_STANDBY (0U) -#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (0U) -#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (1U) -#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x0000009FU) -#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7382DFFFU) - -#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (0U) -#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // 4.29V -#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // 1.65V -#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // 4.29V -#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // 3.84V -#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (300U) // Time in microseconds required for LVD to stabilize - -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (13U) -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (650U) // This information comes from the Electrical Characteristics chapter of the hardware manual. -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0xFFFFU) // Middle speed mode not supported -#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0xFU) -#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) -#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0U) -#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) -#define BSP_FEATURE_OPAMP_BASE_ADDRESS (1U) - -#define BSP_FEATURE_POEG_CHANNEL_MASK (0x3U) - -#define BSP_FEATURE_SCI_CHANNELS (0x207U) -#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3U) -#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) - -#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU -#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU -#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU - -#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (38U) -#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (1U) -#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (1U) - -#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) -#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (0U) -#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) - -#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (8U) -#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPHS_VREF (0) // Feature not available on this MCU + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1) +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100U) + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (14U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_SLOPE (-3650) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x3FF7FFF) // 0 to 14, 16 to 25 in unit 0 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_SCE5 (1) +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1U) +#define BSP_FEATURE_BSP_HAS_SP_MON (1U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0U) // On the RA6M4 there is a request bit that must be set before changing USB clock settings. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (1U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (1U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12U) +#define BSP_FEATURE_BSP_OSIS_PADDING (1) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_BSP_RESET_TRNG (1U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (0U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (0U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (0U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + \ + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (1U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1U) +#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (1U) + +#define BSP_FEATURE_CGC_HAS_BCLK (0U) // This MCU does not have a BCLK +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (0U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (1U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000U) // This MCU does have Low Voltage Mode, up to 4MHz +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (8000000U) // This MCU does have Middle Speed Mode, up to 8MHz +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x08U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x3U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (2U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (1U) // 1 us wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (0U) // This MCU does not use PLLCCR to set PLL frequency +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (1U) // RA4M1 requires that bits 16-18 of SCKDIVCR be the same as the bits for PCKB +#define BSP_FEATURE_CGC_SODRV_MASK (0x03U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x0U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (2) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_HASH (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (5U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (5U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0U) +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0U) +#define BSP_FEATURE_DAC8_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (1U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (1U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (4U) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA4M1 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007D3FFU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU +#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0xFFFU) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10) +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x800U) +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (8) +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x400U) +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (1) +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC ((fsp_priv_clock_t) FSP_PRIV_CLOCK_FCLK) // RA4M1 FlashIF uses FCLK +#define BSP_FEATURE_FLASH_LP_VERSION (3) +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1) +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0xFF) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xDFFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB9FDFFFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) + +#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_STANDBY (0U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (0U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (0U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (1U) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x0000009FU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7382DFFFU) + +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (0U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // 4.29V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // 1.65V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // 4.29V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // 3.84V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (300U) // Time in microseconds required for LVD to stabilize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (1U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0U) +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (1U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (13U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (650U) // This information comes from the Electrical Characteristics chapter of the hardware manual. +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0xFFFFU) // Middle speed mode not supported +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x207U) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3U) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (0) // Feature not available on this MCU + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x0U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (1U) +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (1U) +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (38U) + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (0U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (8U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0U) #endif diff --git a/ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h index 1a14b5c80..fc43b7bda 100644 --- a/ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h +++ b/ra/fsp/src/bsp/mcu/ra4m1/bsp_mcu_info.h @@ -35,8 +35,8 @@ **********************************************************************************************************************/ /* BSP MCU Specific Includes. */ -#include "../../src/bsp/mcu/ra4m1/bsp_elc.h" -#include "../../src/bsp/mcu/ra4m1/bsp_feature.h" +#include "bsp_elc.h" +#include "bsp_feature.h" /*********************************************************************************************************************** * Macro definitions diff --git a/ra/fsp/src/bsp/mcu/ra4w1/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra4w1/bsp_feature.h index 385e9ac15..11e3c09e6 100644 --- a/ra/fsp/src/bsp/mcu/ra4w1/bsp_feature.h +++ b/ra/fsp/src/bsp/mcu/ra4w1/bsp_feature.h @@ -48,192 +48,236 @@ * Private global variables and functions **********************************************************************************************************************/ -#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (0) // Feature not available on this MCU -#define BSP_FEATURE_ACMPHS_VREF (0) // Feature not available on this MCU - -#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1) -#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100U) - -#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) -#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) -#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) -#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) -#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU -#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) -#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (14U) -#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1U) -#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (0U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (0U) -#define BSP_FEATURE_ADC_TSN_SLOPE (-3650) -#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1A0670) // 4 to 6, 9, 10, 17, 19, 20 in unit 0 -#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) -#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) -#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) - -#define BSP_FEATURE_BSP_FLASH_CACHE (1U) -#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) -#define BSP_FEATURE_BSP_HAS_SCE5 (1) -#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (1U) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (1U) -#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) -#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (3U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFU) -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12U) -#define BSP_FEATURE_BSP_OSIS_PADDING (1) -#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) -#define BSP_FEATURE_BSP_RESET_TRNG (1U) -#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (1U) - -#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1U) -#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) -#define BSP_FEATURE_CAN_NUM_CHANNELS (1U) - -#define BSP_FEATURE_CGC_HAS_BCLK (0U) // This MCU does not have a BCLK -#define BSP_FEATURE_CGC_HAS_FCLK (1U) -#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) -#define BSP_FEATURE_CGC_HAS_FLWT (0U) -#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) -#define BSP_FEATURE_CGC_HAS_MEMWAIT (1U) -#define BSP_FEATURE_CGC_HAS_PCLKA (1U) -#define BSP_FEATURE_CGC_HAS_PCLKB (1U) -#define BSP_FEATURE_CGC_HAS_PCLKC (1U) -#define BSP_FEATURE_CGC_HAS_PCLKD (1U) -#define BSP_FEATURE_CGC_HAS_PLL (1U) -#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0U) -#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1U) -#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1U) -#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) -#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100U) -#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz -#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000U) // This MCU does have Low Voltage Mode, up to 4MHz -#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (8000000U) // This MCU does have Middle Speed Mode, up to 8MHz -#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1U) -#define BSP_FEATURE_CGC_MODRV_MASK (0x08U) -#define BSP_FEATURE_CGC_MODRV_SHIFT (0x3U) -#define BSP_FEATURE_CGC_PLLCCR_TYPE (2U) -#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (1U) // 1 us wait between setting PLLCCR and clearing PLLSTP -#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (1U) // RA4W1 requires that bits 16-18 of SCKDIVCR be the same as the bits for PCKB -#define BSP_FEATURE_CGC_SODRV_MASK (0x03U) -#define BSP_FEATURE_CGC_SODRV_SHIFT (0x0U) -#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (2) - -#define BSP_FEATURE_CRYPTO_HAS_AES (1) -#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC (0) -#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) -#define BSP_FEATURE_CRYPTO_HAS_HASH (0) -#define BSP_FEATURE_CRYPTO_HAS_RSA (0) -#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) - -#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (5U) -#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (5U) -#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) -#define BSP_FEATURE_CTSU_VERSION (1) - -#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0U) -#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0U) -#define BSP_FEATURE_DAC8_MAX_CHANNELS (2U) - -#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC_HAS_DAVREFCR (1U) -#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0U) -#define BSP_FEATURE_DAC_MAX_CHANNELS (1U) - -#define BSP_FEATURE_DMAC_MAX_CHANNEL (4U) - -#define BSP_FEATURE_DWT_CYCCNT (1U) // RA4W1 has Data Watchpoint Cycle Count Register - -#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007D3FFU) // Positions of event link set registers (ELSRs) available on this MCU - -#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU -#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_HP_VERSION (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0xFFFU) -#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10) -#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x800U) -#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (8) -#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x400U) -#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (1) -#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC ((fsp_priv_clock_t) FSP_PRIV_CLOCK_FCLK) // RA4W1 FlashIF uses FCLK -#define BSP_FEATURE_FLASH_LP_VERSION (3) - -#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) - -#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) - -#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0xF) -#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x13F) - -#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xCBDFU) -#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB97CADFU) - -#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) - -#define BSP_FEATURE_IOPORT_ELC_PORTS (4) -#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) - -#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_STANDBY (0U) -#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) -#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) -#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x0000009FU) -#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7382CADFU) - -#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (0U) -#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // 4.29V -#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // 1.65V -#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // 4.29V -#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // 3.84V -#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (300U) // Time in microseconds required for LVD to stabilize - -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (13U) -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (650U) // This information comes from the Electrical Characteristics chapter of the hardware manual. -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0xFFFFU) // Middle speed mode not supported -#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0x4U) -#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) -#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0U) -#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) -#define BSP_FEATURE_OPAMP_BASE_ADDRESS (1U) - -#define BSP_FEATURE_POEG_CHANNEL_MASK (0x3U) - -#define BSP_FEATURE_SCI_CHANNELS (0x213U) -#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3U) -#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) - -#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU -#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU -#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU - -#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (54U) -#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0U) -#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0U) - -#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) -#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) -#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) - -#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (8U) -#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPHS_VREF (0) // Feature not available on this MCU + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1) +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100U) + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (14U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_SLOPE (-3650) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1A0670) // 4 to 6, 9, 10, 17, 19, 20 in unit 0 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1U) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_SCE5 (1) +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1U) +#define BSP_FEATURE_BSP_HAS_SP_MON (1U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0U) // On the RA6M4 there is a request bit that must be set before changing USB clock settings. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (1U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (3U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12U) +#define BSP_FEATURE_BSP_OSIS_PADDING (1) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_BSP_RESET_TRNG (1U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (0U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (0U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (0U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + \ + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (1U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1U) +#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (1U) + +#define BSP_FEATURE_CGC_HAS_BCLK (0U) // This MCU does not have a BCLK +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (0U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (1U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000U) // This MCU does have Low Voltage Mode, up to 4MHz +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (8000000U) // This MCU does have Middle Speed Mode, up to 8MHz +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x08U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x3U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (2U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (1U) // 1 us wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (0U) // This MCU does not use PLLCCR to set PLL frequency +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (1U) // RA4W1 requires that bits 16-18 of SCKDIVCR be the same as the bits for PCKB +#define BSP_FEATURE_CGC_SODRV_MASK (0x03U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x0U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (2) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_HASH (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (5U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (5U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0U) +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0U) +#define BSP_FEATURE_DAC8_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (1U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (1U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (4U) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA4W1 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007D3FFU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU +#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0xFFFU) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10) +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x800U) +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (8) +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x400U) +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (1) +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC ((fsp_priv_clock_t) FSP_PRIV_CLOCK_FCLK) // RA4W1 FlashIF uses FCLK +#define BSP_FEATURE_FLASH_LP_VERSION (3) +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1) +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0xF) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x13F) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xCBDFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB97CADFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) + +#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_STANDBY (0U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (0U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x0000009FU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7382CADFU) + +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (0U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // 4.29V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // 1.65V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // 4.29V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // 3.84V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (300U) // Time in microseconds required for LVD to stabilize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (1U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0U) +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (1U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (13U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (650U) // This information comes from the Electrical Characteristics chapter of the hardware manual. +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0xFFFFU) // Middle speed mode not supported +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x213U) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3U) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (0) // Feature not available on this MCU + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x0U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0U) +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0U) +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (54U) + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (8U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0U) #endif diff --git a/ra/fsp/src/bsp/mcu/ra4w1/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra4w1/bsp_mcu_info.h index b6af370b9..f70eec58b 100644 --- a/ra/fsp/src/bsp/mcu/ra4w1/bsp_mcu_info.h +++ b/ra/fsp/src/bsp/mcu/ra4w1/bsp_mcu_info.h @@ -35,8 +35,8 @@ **********************************************************************************************************************/ /* BSP MCU Specific Includes. */ -#include "../../src/bsp/mcu/ra4w1/bsp_elc.h" -#include "../../src/bsp/mcu/ra4w1/bsp_feature.h" +#include "bsp_elc.h" +#include "bsp_feature.h" /*********************************************************************************************************************** * Macro definitions diff --git a/ra/fsp/src/bsp/mcu/ra6m1/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra6m1/bsp_feature.h index 1a3c995c1..dd1cbb0a7 100644 --- a/ra/fsp/src/bsp/mcu/ra6m1/bsp_feature.h +++ b/ra/fsp/src/bsp/mcu/ra6m1/bsp_feature.h @@ -52,185 +52,236 @@ * Private global variables and functions **********************************************************************************************************************/ -#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (1U) // This comes from the Electrical Characteristics in the hardware manual. Rounding up to nearest microsecond. -#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF2) - -#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU -#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU - -#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) -#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) -#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) -#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) -#define BSP_FEATURE_ADC_HAS_PGA (1U) -#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) -#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) -#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) -#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_SLOPE (4000) -#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1700EF) // 0 to 3, 5 to 7, 16 to 18, and 20 in unit 0 and 0 to 2, 5 to 7, 16 to 17 in unit 1 -#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x300E7) -#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) -#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) - -#define BSP_FEATURE_BSP_FLASH_CACHE (1) -#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) -#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) -#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) -#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (7U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) -#define BSP_FEATURE_BSP_OSIS_PADDING (0U) -#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (1U) -#define BSP_FEATURE_BSP_RESET_TRNG (0U) -#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) - -#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) -#define BSP_FEATURE_CAN_CLOCK (0U) -#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) -#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) - -#define BSP_FEATURE_CGC_HAS_BCLK (1U) -#define BSP_FEATURE_CGC_HAS_FCLK (1U) -#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) -#define BSP_FEATURE_CGC_HAS_FLWT (1U) -#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) -#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) -#define BSP_FEATURE_CGC_HAS_PCLKA (1U) -#define BSP_FEATURE_CGC_HAS_PCLKB (1U) -#define BSP_FEATURE_CGC_HAS_PCLKC (1U) -#define BSP_FEATURE_CGC_HAS_PCLKD (1U) -#define BSP_FEATURE_CGC_HAS_PLL (1U) -#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) -#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) -#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) -#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) -#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) -#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) ///< This MCU does have Low Speed Mode, up to 1MHz -#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) ///< This MCU does not have Low Voltage Mode -#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) ///< This MCU does not have Middle Speed Mode -#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) -#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) -#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) -#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) -#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP -#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) -#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) -#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) -#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) - -#define BSP_FEATURE_CRYPTO_HAS_AES (1) -#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_HASH (1) -#define BSP_FEATURE_CRYPTO_HAS_RSA (1) -#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) - -#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (2U) -#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (2U) -#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) -#define BSP_FEATURE_CTSU_VERSION (1) - -#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) -#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) -#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) - -#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) - -#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M1 has Data Watchpoint Cycle Count Register - -#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU - -#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU -#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) -#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) -#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) -#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) -#define BSP_FEATURE_FLASH_HP_VERSION (40U) -#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU - -#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) -#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) -#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x1FFF) -#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x1FFF) - -#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0x3FFFU) -#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB4FFFFFU) - -#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) - -#define BSP_FEATURE_IOPORT_ELC_PORTS (4) -#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) - -#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{1, 31}, {2, 5}} -#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) -#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00133FFFU) -#define BSP_FEATURE_LPM_DPSIER_MASK (0x051F3FFFU) -#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) -#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) -#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) -#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) -#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) - -#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) -#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V -#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V -#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V -#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V -#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabilize - -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU - -#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) - -#define BSP_FEATURE_SCI_CHANNELS (0x31FU) -#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x31FU) -#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) - -#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) -#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0U) -#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x3U) - -#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU - -#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) -#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) -#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) - -#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) -#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (1U) // This comes from the Electrical Characteristics in the hardware manual. Rounding up to nearest microsecond. +#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF2) + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (1U) +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0x00000FFFU) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_SLOPE (4000) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1700EF) // 0 to 3, 5 to 7, 16 to 18, and 20 in unit 0 and 0 to 2, 5 to 7, 16 to 17 in unit 1 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x300E7) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1U) +#define BSP_FEATURE_BSP_HAS_SP_MON (1U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0U) // On the RA6M4 there is a request bit that must be set before changing USB clock settings. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (7U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) +#define BSP_FEATURE_BSP_OSIS_PADDING (0U) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_BSP_RESET_TRNG (0U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (60000000U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (40000000U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (800000000U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + \ + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) +#define BSP_FEATURE_CAN_CLOCK (0U) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) + +#define BSP_FEATURE_CGC_HAS_BCLK (1U) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (1U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) ///< This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) ///< This MCU does not have Low Voltage Mode +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) ///< This MCU does not have Middle Speed Mode +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (240000000U) +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) +#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_HASH (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (2U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (2U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M1 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0) // Feature not available on this MCU +#define BSP_FEATURE_ETHER_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_VERSION (40U) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1) +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x1FFF) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x1FFF) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0x3FFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB4FFFFFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (0U) + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{1, 31}, {2, 5}} +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00133FFFU) +#define BSP_FEATURE_LPM_DPSIER_MASK (0x051F3FFFU) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (1U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) + +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabilize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (0U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (0U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0U) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x31FU) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x31FU) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0U) +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x3U) +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (1U) // 2 (2^1) is minimum division supported + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x0U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0U) #endif diff --git a/ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h index 161d54a09..de79681d1 100644 --- a/ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h +++ b/ra/fsp/src/bsp/mcu/ra6m1/bsp_mcu_info.h @@ -35,8 +35,8 @@ **********************************************************************************************************************/ /* BSP MCU Specific Includes. */ -#include "../../src/bsp/mcu/ra6m1/bsp_elc.h" -#include "../../src/bsp/mcu/ra6m1/bsp_feature.h" +#include "bsp_elc.h" +#include "bsp_feature.h" /*********************************************************************************************************************** * Macro definitions diff --git a/ra/fsp/src/bsp/mcu/ra6m2/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra6m2/bsp_feature.h index 217c2b3e8..e040345a2 100644 --- a/ra/fsp/src/bsp/mcu/ra6m2/bsp_feature.h +++ b/ra/fsp/src/bsp/mcu/ra6m2/bsp_feature.h @@ -52,187 +52,236 @@ * Private global variables and functions **********************************************************************************************************************/ -#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (1U) // This comes from the Electrical Characteristics in the hardware manual. Rounding up to nearest microsecond. -#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF2) - -#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU -#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU - -#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) -#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) -#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) -#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) -#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU -#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) -#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) -#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) -#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_SLOPE (4000) -#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1F00FF) // 0 to 7, 16 to 20 in unit 0 and 0 to 2, 5 to 7, 16 to 18 in unit 1 -#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x700E7) -#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) -#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) - -#define BSP_FEATURE_BSP_FLASH_CACHE (1) -#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) -#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) -#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) -#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (7U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) -#define BSP_FEATURE_BSP_OSIS_PADDING (0U) -#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (1U) -#define BSP_FEATURE_BSP_RESET_TRNG (0U) -#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) - -#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) -#define BSP_FEATURE_CAN_CLOCK (0U) -#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) -#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) - -#define BSP_FEATURE_CGC_HAS_BCLK (1U) -#define BSP_FEATURE_CGC_HAS_FCLK (1U) -#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) -#define BSP_FEATURE_CGC_HAS_FLWT (1U) -#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) -#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) -#define BSP_FEATURE_CGC_HAS_PCLKA (1U) -#define BSP_FEATURE_CGC_HAS_PCLKB (1U) -#define BSP_FEATURE_CGC_HAS_PCLKC (1U) -#define BSP_FEATURE_CGC_HAS_PCLKD (1U) -#define BSP_FEATURE_CGC_HAS_PLL (1U) -#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) -#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) -#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) -#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) -#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) -#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz -#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode -#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode -#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) -#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) -#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) -#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) -#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP -#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) -#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) -#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) -#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) - -#define BSP_FEATURE_CRYPTO_HAS_AES (1) -#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_HASH (1) -#define BSP_FEATURE_CRYPTO_HAS_RSA (1) -#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) - -#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (3U) -#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (3U) -#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) -#define BSP_FEATURE_CTSU_VERSION (1) - -#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) -#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) -#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) - -#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) - -#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M2 has Data Watchpoint Cycle Count Register - -#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU - -#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x0000070FU) -#define BSP_FEATURE_ETHER_MAX_CHANNELS (1U) - -#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) -#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) -#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) -#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) -#define BSP_FEATURE_FLASH_HP_VERSION (40U) -#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU - -#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) - -#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) - -#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3FFF) -#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x3FFF) - -#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFFFU) -#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB4FFFFFU) - -#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) - -#define BSP_FEATURE_IOPORT_ELC_PORTS (4) -#define BSP_FEATURE_IOPORT_HAS_ETHERNET (1U) - -#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{0, 15}, {1, 31}, {2, 5}} -#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) -#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00133FFFU) -#define BSP_FEATURE_LPM_DPSIER_MASK (0x051F3FFFU) -#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) -#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) -#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) -#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) -#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) - -#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) -#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V -#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V -#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V -#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V -#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabilize - -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU - -#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) - -#define BSP_FEATURE_SCI_CHANNELS (0x3FFU) -#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3FFU) -#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) - -#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) -#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (1U) -#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x3U) - -#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU - -#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) -#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) -#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) - -#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) -#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (1U) // This comes from the Electrical Characteristics in the hardware manual. Rounding up to nearest microsecond. +#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF2) + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (0) // Feature not available on this MCU +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0x00000FFFU) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_SLOPE (4000) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1F00FF) // 0 to 7, 16 to 20 in unit 0 and 0 to 2, 5 to 7, 16 to 18 in unit 1 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x700E7) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1U) +#define BSP_FEATURE_BSP_HAS_SP_MON (1U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (7U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) +#define BSP_FEATURE_BSP_OSIS_PADDING (0U) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_BSP_RESET_TRNG (0U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (60000000U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (40000000U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (800000000U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + \ + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) +#define BSP_FEATURE_CAN_CLOCK (0U) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) + +#define BSP_FEATURE_CGC_HAS_BCLK (1U) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (1U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (240000000U) +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) +#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_HASH (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (3U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (3U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M2 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x0000070FU) +#define BSP_FEATURE_ETHER_MAX_CHANNELS (1U) + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_VERSION (40U) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1) +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3FFF) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x3FFF) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB4FFFFFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (1U) + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{0, 15}, {1, 31}, {2, 5}} +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00133FFFU) +#define BSP_FEATURE_LPM_DPSIER_MASK (0x051F3FFFU) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (1U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) + +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabilize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (0U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (0U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0U) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x3FFU) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3FFU) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (1U) +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x3U) +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (1U) // 2 (2^1) is minimum division supported + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x90000000U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0U) #endif diff --git a/ra/fsp/src/bsp/mcu/ra6m2/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra6m2/bsp_mcu_info.h index 4e45c3228..d0f14bb1f 100644 --- a/ra/fsp/src/bsp/mcu/ra6m2/bsp_mcu_info.h +++ b/ra/fsp/src/bsp/mcu/ra6m2/bsp_mcu_info.h @@ -35,8 +35,8 @@ **********************************************************************************************************************/ /* BSP MCU Specific Includes. */ -#include "../../src/bsp/mcu/ra6m2/bsp_elc.h" -#include "../../src/bsp/mcu/ra6m2/bsp_feature.h" +#include "bsp_elc.h" +#include "bsp_feature.h" /*********************************************************************************************************************** * Macro definitions diff --git a/ra/fsp/src/bsp/mcu/ra6m3/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra6m3/bsp_feature.h index e1d5bfe6c..72dac32f3 100644 --- a/ra/fsp/src/bsp/mcu/ra6m3/bsp_feature.h +++ b/ra/fsp/src/bsp/mcu/ra6m3/bsp_feature.h @@ -52,187 +52,236 @@ * Private global variables and functions **********************************************************************************************************************/ -#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (1U) // This comes from the Electrical Characteristics in the hardware manual. Rounding up to nearest microsecond. -#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF2) - -#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU -#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU - -#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) -#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) -#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) -#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) -#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) -#define BSP_FEATURE_ADC_HAS_PGA (1U) -#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) -#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) -#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) -#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) -#define BSP_FEATURE_ADC_TSN_SLOPE (4000) -#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1F00FF) // 0 to 7, 16 to 20 in unit 0 and 0 to 3, 5 to 7, 16 to 19 in unit 1 -#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0xF00EF) -#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) -#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) - -#define BSP_FEATURE_BSP_FLASH_CACHE (1) -#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) -#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) -#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) -#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) -#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (7U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) -#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) -#define BSP_FEATURE_BSP_OSIS_PADDING (0U) -#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (1U) -#define BSP_FEATURE_BSP_RESET_TRNG (0U) -#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) - -#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) -#define BSP_FEATURE_CAN_CLOCK (0U) -#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) -#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) - -#define BSP_FEATURE_CGC_HAS_BCLK (1U) -#define BSP_FEATURE_CGC_HAS_FCLK (1U) -#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) -#define BSP_FEATURE_CGC_HAS_FLWT (1U) -#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) -#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) -#define BSP_FEATURE_CGC_HAS_PCLKA (1U) -#define BSP_FEATURE_CGC_HAS_PCLKB (1U) -#define BSP_FEATURE_CGC_HAS_PCLKC (1U) -#define BSP_FEATURE_CGC_HAS_PCLKD (1U) -#define BSP_FEATURE_CGC_HAS_PLL (1U) -#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) -#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) -#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) -#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) -#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) -#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz -#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode -#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode -#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) -#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) -#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) -#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) -#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP -#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) -#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) -#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) -#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) - -#define BSP_FEATURE_CRYPTO_HAS_AES (1) -#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC (1) -#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) -#define BSP_FEATURE_CRYPTO_HAS_HASH (1) -#define BSP_FEATURE_CRYPTO_HAS_RSA (1) -#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) - -#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (3U) -#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (3U) -#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) -#define BSP_FEATURE_CTSU_VERSION (1) - -#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU -#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU - -#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) -#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) -#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) -#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) - -#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) - -#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M3 has Data Watchpoint Cycle Count Register - -#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU - -#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x0000070FU) -#define BSP_FEATURE_ETHER_MAX_CHANNELS (1U) - -#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) -#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) -#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) -#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) -#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) -#define BSP_FEATURE_FLASH_HP_VERSION (40U) -#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU -#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU - -#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) - -#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) - -#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3FFF) -#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x3FFF) - -#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFFFU) -#define BSP_FEATURE_ICU_WUPEN_MASK (0xFF4FFFFFU) - -#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) - -#define BSP_FEATURE_IOPORT_ELC_PORTS (4) -#define BSP_FEATURE_IOPORT_HAS_ETHERNET (1U) - -#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{0, 15}, {0, 13}, {1, 31}, {1, 6}, {1, 5}, {1, 4}, {2, 5}} -#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) -#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00137FFFU) -#define BSP_FEATURE_LPM_DPSIER_MASK (0x071F7FFFU) -#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) -#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) -#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) -#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) -#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) - -#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) -#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V -#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V -#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V -#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V -#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabalize - -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU -#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU - -#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) - -#define BSP_FEATURE_SCI_CHANNELS (0x3FFU) -#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3FFU) -#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) - -#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) -#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (1U) -#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x3U) - -#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU -#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU - -#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) -#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) -#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) -#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) - -#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) -#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (3U) +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (1U) // This comes from the Electrical Characteristics in the hardware manual. Rounding up to nearest microsecond. +#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF2) + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (1U) +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0x00000FFFU) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_SLOPE (4000) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x1F00FF) // 0 to 7, 16 to 20 in unit 0 and 0 to 3, 5 to 7, 16 to 19 in unit 1 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0xF00EF) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1U) +#define BSP_FEATURE_BSP_HAS_SP_MON (1U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0U) // On the RA6M4 there is a request bit that must be set before changing USB clock settings. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19C) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x00FFFFFFU) +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (7U) // Largest channel number associated with lower MSTP bit for GPT on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) +#define BSP_FEATURE_BSP_OSIS_PADDING (0U) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_BSP_RESET_TRNG (0U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (60000000U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (40000000U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (800000000U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + \ + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) +#define BSP_FEATURE_CAN_CLOCK (0U) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) + +#define BSP_FEATURE_CGC_HAS_BCLK (1U) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (1U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (240000000U) +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) +#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_HASH (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (3U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (3U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M3 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x0000070FU) +#define BSP_FEATURE_ETHER_MAX_CHANNELS (1U) + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_HP_VERSION (40U) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1) +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3FFF) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x3FFF) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFF4FFFFFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (1U) + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{0, 15}, {0, 13}, {1, 31}, {1, 6}, {1, 5}, {1, 4}, {2, 5}} +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00137FFFU) +#define BSP_FEATURE_LPM_DPSIER_MASK (0x071F7FFFU) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (1U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) + +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabalize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (0U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (0U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0U) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x3FFU) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3FFU) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (1U) +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x3U) +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (1U) // 2 (2^1) is minimum division supported + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x90000000U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (3U) + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0U) #endif diff --git a/ra/fsp/src/bsp/mcu/ra6m3/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra6m3/bsp_mcu_info.h index b9899ea04..e4e6b94ef 100644 --- a/ra/fsp/src/bsp/mcu/ra6m3/bsp_mcu_info.h +++ b/ra/fsp/src/bsp/mcu/ra6m3/bsp_mcu_info.h @@ -35,8 +35,8 @@ **********************************************************************************************************************/ /* BSP MCU Specific Includes. */ -#include "../../src/bsp/mcu/ra6m3/bsp_elc.h" -#include "../../src/bsp/mcu/ra6m3/bsp_feature.h" +#include "bsp_elc.h" +#include "bsp_feature.h" /*********************************************************************************************************************** * Macro definitions diff --git a/ra/fsp/src/bsp/mcu/ra6m4/bsp_elc.h b/ra/fsp/src/bsp/mcu/ra6m4/bsp_elc.h new file mode 100644 index 000000000..37cfbe4df --- /dev/null +++ b/ra/fsp/src/bsp/mcu/ra6m4/bsp_elc.h @@ -0,0 +1,310 @@ +/* ${REA_DISCLAIMER_PLACEHOLDER} */ + +#ifndef BSP_ELC_H +#define BSP_ELC_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/******************************************************************************************************************* + * @addtogroup BSP_MCU_RA6M4 + * @{ + **********************************************************************************************************************/ + +/** Sources of event signals to be linked to other peripherals or the CPU + * @note This list may change based on based on the device. + * */ +typedef enum e_elc_event_ra6m4 +{ + ELC_EVENT_NONE = (0), // Link disabled + ELC_EVENT_ICU_IRQ0 = (0x001), // External pin interrupt 0 + ELC_EVENT_ICU_IRQ1 = (0x002), // External pin interrupt 1 + ELC_EVENT_ICU_IRQ2 = (0x003), // External pin interrupt 2 + ELC_EVENT_ICU_IRQ3 = (0x004), // External pin interrupt 3 + ELC_EVENT_ICU_IRQ4 = (0x005), // External pin interrupt 4 + ELC_EVENT_ICU_IRQ5 = (0x006), // External pin interrupt 5 + ELC_EVENT_ICU_IRQ6 = (0x007), // External pin interrupt 6 + ELC_EVENT_ICU_IRQ7 = (0x008), // External pin interrupt 7 + ELC_EVENT_ICU_IRQ8 = (0x009), // External pin interrupt 8 + ELC_EVENT_ICU_IRQ9 = (0x00A), // External pin interrupt 9 + ELC_EVENT_ICU_IRQ10 = (0x00B), // External pin interrupt 10 + ELC_EVENT_ICU_IRQ11 = (0x00C), // External pin interrupt 11 + ELC_EVENT_ICU_IRQ12 = (0x00D), // External pin interrupt 12 + ELC_EVENT_ICU_IRQ13 = (0x00E), // External pin interrupt 13 + ELC_EVENT_ICU_IRQ14 = (0x00F), // External pin interrupt 14 + ELC_EVENT_ICU_IRQ15 = (0x010), // External pin interrupt 15 + ELC_EVENT_DMAC0_INT = (0x020), // DMAC transfer end 0 + ELC_EVENT_DMAC1_INT = (0x021), // DMAC transfer end 1 + ELC_EVENT_DMAC2_INT = (0x022), // DMAC transfer end 2 + ELC_EVENT_DMAC3_INT = (0x023), // DMAC transfer end 3 + ELC_EVENT_DMAC4_INT = (0x024), // DMAC transfer end 4 + ELC_EVENT_DMAC5_INT = (0x025), // DMAC transfer end 5 + ELC_EVENT_DMAC6_INT = (0x026), // DMAC transfer end 6 + ELC_EVENT_DMAC7_INT = (0x027), // DMAC transfer end 7 + ELC_EVENT_DTC_TRANSFER = (0x028), // DTC transfer + ELC_EVENT_DTC_COMPLETE = (0x029), // DTC transfer complete + ELC_EVENT_DTC_END = (0x02A), // DTC transfer end + ELC_EVENT_DMA_TRANSERR = (0x02B), // DTC transfer error + ELC_EVENT_ICU_SNOOZE_CANCEL = (0x02D), // Canceling from Snooze mode + ELC_EVENT_FCU_FIFERR = (0x030), // Flash access error interrupt + ELC_EVENT_FCU_FRDYI = (0x031), // Flash ready interrupt + ELC_EVENT_LVD_LVD1 = (0x038), // Voltage monitor 1 interrupt + ELC_EVENT_LVD_LVD2 = (0x039), // Voltage monitor 2 interrupt + ELC_EVENT_CGC_MOSC_STOP = (0x03B), // Main Clock oscillation stop + ELC_EVENT_LPM_SNOOZE_REQUEST = (0x03C), // Snooze entry + ELC_EVENT_AGT0_INT = (0x040), // AGT interrupt + ELC_EVENT_AGT0_COMPARE_A = (0x041), // Compare match A + ELC_EVENT_AGT0_COMPARE_B = (0x042), // Compare match B + ELC_EVENT_AGT1_INT = (0x043), // AGT interrupt + ELC_EVENT_AGT1_COMPARE_A = (0x044), // Compare match A + ELC_EVENT_AGT1_COMPARE_B = (0x045), // Compare match B + ELC_EVENT_AGT2_INT = (0x046), // AGT interrupt + ELC_EVENT_AGT2_COMPARE_A = (0x047), // Compare match A + ELC_EVENT_AGT2_COMPARE_B = (0x048), // Compare match B + ELC_EVENT_AGT3_INT = (0x049), // AGT interrupt + ELC_EVENT_AGT3_COMPARE_A = (0x04A), // Compare match A + ELC_EVENT_AGT3_COMPARE_B = (0x04B), // Compare match B + ELC_EVENT_AGT4_INT = (0x04C), // AGT interrupt + ELC_EVENT_AGT4_COMPARE_A = (0x04D), // Compare match A + ELC_EVENT_AGT4_COMPARE_B = (0x04E), // Compare match B + ELC_EVENT_AGT5_INT = (0x04F), // AGT interrupt + ELC_EVENT_AGT5_COMPARE_A = (0x050), // Compare match A + ELC_EVENT_AGT5_COMPARE_B = (0x051), // Compare match B + ELC_EVENT_IWDT_UNDERFLOW = (0x052), // IWDT underflow + ELC_EVENT_WDT_UNDERFLOW = (0x053), // WDT underflow + ELC_EVENT_RTC_ALARM = (0x054), // Alarm interrupt + ELC_EVENT_RTC_PERIOD = (0x055), // Periodic interrupt + ELC_EVENT_RTC_CARRY = (0x056), // Carry interrupt + ELC_EVENT_USBFS_FIFO_0 = (0x06B), // DMA transfer request 0 + ELC_EVENT_USBFS_FIFO_1 = (0x06C), // DMA transfer request 1 + ELC_EVENT_USBFS_INT = (0x06D), // USBFS interrupt + ELC_EVENT_USBFS_RESUME = (0x06E), // USBFS resume interrupt + ELC_EVENT_IIC0_RXI = (0x073), // Receive data full + ELC_EVENT_IIC0_TXI = (0x074), // Transmit data empty + ELC_EVENT_IIC0_TEI = (0x075), // Transmit end + ELC_EVENT_IIC0_ERI = (0x076), // Transfer error + ELC_EVENT_IIC0_WUI = (0x077), // Slave address match + ELC_EVENT_IIC1_RXI = (0x078), // Receive data full + ELC_EVENT_IIC1_TXI = (0x079), // Transmit data empty + ELC_EVENT_IIC1_TEI = (0x07A), // Transmit end + ELC_EVENT_IIC1_ERI = (0x07B), // Transfer error + ELC_EVENT_SDHIMMC0_ACCS = (0x082), // Card access + ELC_EVENT_SDHIMMC0_SDIO = (0x083), // SDIO access + ELC_EVENT_SDHIMMC0_CARD = (0x084), // Card detect + ELC_EVENT_SDHIMMC0_DMA_REQ = (0x085), // DMA transfer request + ELC_EVENT_SSI0_TXI = (0x08A), // Transmit data empty + ELC_EVENT_SSI0_RXI = (0x08B), // Receive data full + ELC_EVENT_SSI0_INT = (0x08D), // Error interrupt + ELC_EVENT_CTSU_WRITE = (0x09A), // Write request interrupt + ELC_EVENT_CTSU_READ = (0x09B), // Measurement data transfer request interrupt + ELC_EVENT_CTSU_END = (0x09C), // Measurement end interrupt + ELC_EVENT_CAC_FREQUENCY_ERROR = (0x09E), // Frequency error interrupt + ELC_EVENT_CAC_MEASUREMENT_END = (0x09F), // Measurement end interrupt + ELC_EVENT_CAC_OVERFLOW = (0x0A0), // Overflow interrupt + ELC_EVENT_CAN0_ERROR = (0x0A1), // Error interrupt + ELC_EVENT_CAN0_FIFO_RX = (0x0A2), // Receive FIFO interrupt + ELC_EVENT_CAN0_FIFO_TX = (0x0A3), // Transmit FIFO interrupt + ELC_EVENT_CAN0_MAILBOX_RX = (0x0A4), // Reception complete interrupt + ELC_EVENT_CAN0_MAILBOX_TX = (0x0A5), // Transmission complete interrupt + ELC_EVENT_CAN1_ERROR = (0x0A6), // Error interrupt + ELC_EVENT_CAN1_FIFO_RX = (0x0A7), // Receive FIFO interrupt + ELC_EVENT_CAN1_FIFO_TX = (0x0A8), // Transmit FIFO interrupt + ELC_EVENT_CAN1_MAILBOX_RX = (0x0A9), // Reception complete interrupt + ELC_EVENT_CAN1_MAILBOX_TX = (0x0AA), // Transmission complete interrupt + ELC_EVENT_IOPORT_EVENT_1 = (0x0B1), // Port 1 event + ELC_EVENT_IOPORT_EVENT_2 = (0x0B2), // Port 2 event + ELC_EVENT_IOPORT_EVENT_3 = (0x0B3), // Port 3 event + ELC_EVENT_IOPORT_EVENT_4 = (0x0B4), // Port 4 event + ELC_EVENT_ELC_SOFTWARE_EVENT_0 = (0x0B5), // Software event 0 + ELC_EVENT_ELC_SOFTWARE_EVENT_1 = (0x0B6), // Software event 1 + ELC_EVENT_POEG0_EVENT = (0x0B7), // Port Output disable interrupt A + ELC_EVENT_POEG1_EVENT = (0x0B8), // Port Output disable interrupt B + ELC_EVENT_POEG2_EVENT = (0x0B9), // Port Output disable interrupt C + ELC_EVENT_POEG3_EVENT = (0x0BA), // Port Output disable interrupt D + ELC_EVENT_GPT0_CAPTURE_COMPARE_A = (0x0C0), // Compare match A + ELC_EVENT_GPT0_CAPTURE_COMPARE_B = (0x0C1), // Compare match B + ELC_EVENT_GPT0_COMPARE_C = (0x0C2), // Compare match C + ELC_EVENT_GPT0_COMPARE_D = (0x0C3), // Compare match D + ELC_EVENT_GPT0_COMPARE_E = (0x0C4), // Compare match E + ELC_EVENT_GPT0_COMPARE_F = (0x0C5), // Compare match F + ELC_EVENT_GPT0_COUNTER_OVERFLOW = (0x0C6), // Overflow + ELC_EVENT_GPT0_COUNTER_UNDERFLOW = (0x0C7), // Underflow + ELC_EVENT_GPT0_PC = (0x0C8), // Period count function finish + ELC_EVENT_GPT1_CAPTURE_COMPARE_A = (0x0C9), // Compare match A + ELC_EVENT_GPT1_CAPTURE_COMPARE_B = (0x0CA), // Compare match B + ELC_EVENT_GPT1_COMPARE_C = (0x0CB), // Compare match C + ELC_EVENT_GPT1_COMPARE_D = (0x0CC), // Compare match D + ELC_EVENT_GPT1_COMPARE_E = (0x0CD), // Compare match E + ELC_EVENT_GPT1_COMPARE_F = (0x0CE), // Compare match F + ELC_EVENT_GPT1_COUNTER_OVERFLOW = (0x0CF), // Overflow + ELC_EVENT_GPT1_COUNTER_UNDERFLOW = (0x0D0), // Underflow + ELC_EVENT_GPT1_PC = (0x0D1), // Period count function finish + ELC_EVENT_GPT2_CAPTURE_COMPARE_A = (0x0D2), // Compare match A + ELC_EVENT_GPT2_CAPTURE_COMPARE_B = (0x0D3), // Compare match B + ELC_EVENT_GPT2_COMPARE_C = (0x0D4), // Compare match C + ELC_EVENT_GPT2_COMPARE_D = (0x0D5), // Compare match D + ELC_EVENT_GPT2_COMPARE_E = (0x0D6), // Compare match E + ELC_EVENT_GPT2_COMPARE_F = (0x0D7), // Compare match F + ELC_EVENT_GPT2_COUNTER_OVERFLOW = (0x0D8), // Overflow + ELC_EVENT_GPT2_COUNTER_UNDERFLOW = (0x0D9), // Underflow + ELC_EVENT_GPT3_CAPTURE_COMPARE_A = (0x0DB), // Compare match A + ELC_EVENT_GPT3_CAPTURE_COMPARE_B = (0x0DC), // Compare match B + ELC_EVENT_GPT3_COMPARE_C = (0x0DD), // Compare match C + ELC_EVENT_GPT3_COMPARE_D = (0x0DE), // Compare match D + ELC_EVENT_GPT3_COMPARE_E = (0x0DF), // Compare match E + ELC_EVENT_GPT3_COMPARE_F = (0x0E0), // Compare match F + ELC_EVENT_GPT3_COUNTER_OVERFLOW = (0x0E1), // Overflow + ELC_EVENT_GPT3_COUNTER_UNDERFLOW = (0x0E2), // Underflow + ELC_EVENT_GPT4_CAPTURE_COMPARE_A = (0x0E4), // Compare match A + ELC_EVENT_GPT4_CAPTURE_COMPARE_B = (0x0E5), // Compare match B + ELC_EVENT_GPT4_COMPARE_C = (0x0E6), // Compare match C + ELC_EVENT_GPT4_COMPARE_D = (0x0E7), // Compare match D + ELC_EVENT_GPT4_COMPARE_E = (0x0E8), // Compare match E + ELC_EVENT_GPT4_COMPARE_F = (0x0E9), // Compare match F + ELC_EVENT_GPT4_COUNTER_OVERFLOW = (0x0EA), // Overflow + ELC_EVENT_GPT4_COUNTER_UNDERFLOW = (0x0EB), // Underflow + ELC_EVENT_GPT4_PC = (0x0EC), // Period count function finish + ELC_EVENT_GPT5_CAPTURE_COMPARE_A = (0x0ED), // Compare match A + ELC_EVENT_GPT5_CAPTURE_COMPARE_B = (0x0EE), // Compare match B + ELC_EVENT_GPT5_COMPARE_C = (0x0EF), // Compare match C + ELC_EVENT_GPT5_COMPARE_D = (0x0F0), // Compare match D + ELC_EVENT_GPT5_COMPARE_E = (0x0F1), // Compare match E + ELC_EVENT_GPT5_COMPARE_F = (0x0F2), // Compare match F + ELC_EVENT_GPT5_COUNTER_OVERFLOW = (0x0F3), // Overflow + ELC_EVENT_GPT5_COUNTER_UNDERFLOW = (0x0F4), // Underflow + ELC_EVENT_GPT5_PC = (0x0F5), // Period count function finish + ELC_EVENT_GPT6_CAPTURE_COMPARE_A = (0x0F6), // Compare match A + ELC_EVENT_GPT6_CAPTURE_COMPARE_B = (0x0F7), // Compare match B + ELC_EVENT_GPT6_COMPARE_C = (0x0F8), // Compare match C + ELC_EVENT_GPT6_COMPARE_D = (0x0F9), // Compare match D + ELC_EVENT_GPT6_COMPARE_E = (0x0FA), // Compare match E + ELC_EVENT_GPT6_COMPARE_F = (0x0FB), // Compare match F + ELC_EVENT_GPT6_COUNTER_OVERFLOW = (0x0FC), // Overflow + ELC_EVENT_GPT6_COUNTER_UNDERFLOW = (0x0FD), // Underflow + ELC_EVENT_GPT6_PC = (0x0FE), // Period count function finish + ELC_EVENT_GPT7_CAPTURE_COMPARE_A = (0x0FF), // Compare match A + ELC_EVENT_GPT7_CAPTURE_COMPARE_B = (0x100), // Compare match B + ELC_EVENT_GPT7_COMPARE_C = (0x101), // Compare match C + ELC_EVENT_GPT7_COMPARE_D = (0x102), // Compare match D + ELC_EVENT_GPT7_COMPARE_E = (0x103), // Compare match E + ELC_EVENT_GPT7_COMPARE_F = (0x104), // Compare match F + ELC_EVENT_GPT7_COUNTER_OVERFLOW = (0x105), // Overflow + ELC_EVENT_GPT7_COUNTER_UNDERFLOW = (0x106), // Underflow + ELC_EVENT_GPT8_CAPTURE_COMPARE_A = (0x108), // Compare match A + ELC_EVENT_GPT8_CAPTURE_COMPARE_B = (0x109), // Compare match B + ELC_EVENT_GPT8_COMPARE_C = (0x10A), // Compare match C + ELC_EVENT_GPT8_COMPARE_D = (0x10B), // Compare match D + ELC_EVENT_GPT8_COMPARE_E = (0x10C), // Compare match E + ELC_EVENT_GPT8_COMPARE_F = (0x10D), // Compare match F + ELC_EVENT_GPT8_COUNTER_OVERFLOW = (0x10E), // Overflow + ELC_EVENT_GPT8_COUNTER_UNDERFLOW = (0x10F), // Underflow + ELC_EVENT_GPT9_CAPTURE_COMPARE_A = (0x111), // Compare match A + ELC_EVENT_GPT9_CAPTURE_COMPARE_B = (0x112), // Compare match B + ELC_EVENT_GPT9_COMPARE_C = (0x113), // Compare match C + ELC_EVENT_GPT9_COMPARE_D = (0x114), // Compare match D + ELC_EVENT_GPT9_COMPARE_E = (0x115), // Compare match E + ELC_EVENT_GPT9_COMPARE_F = (0x116), // Compare match F + ELC_EVENT_GPT9_COUNTER_OVERFLOW = (0x117), // Overflow + ELC_EVENT_GPT9_COUNTER_UNDERFLOW = (0x118), // Underflow + ELC_EVENT_OPS_UVW_EDGE = (0x150), // UVW edge event + ELC_EVENT_ADC0_SCAN_END = (0x160), // A/D scan end interrupt + ELC_EVENT_ADC0_SCAN_END_B = (0x161), // A/D scan end interrupt for group B + ELC_EVENT_ADC0_WINDOW_A = (0x162), // Window A Compare match + ELC_EVENT_ADC0_WINDOW_B = (0x163), // Window B Compare match + ELC_EVENT_ADC0_COMPARE_MATCH = (0x164), // Compare match + ELC_EVENT_ADC0_COMPARE_MISMATCH = (0x165), // Compare mismatch + ELC_EVENT_ADC1_SCAN_END = (0x166), // A/D scan end interrupt + ELC_EVENT_ADC1_SCAN_END_B = (0x167), // A/D scan end interrupt for group B + ELC_EVENT_ADC1_WINDOW_A = (0x168), // Window A Compare match + ELC_EVENT_ADC1_WINDOW_B = (0x169), // Window B Compare match + ELC_EVENT_ADC1_COMPARE_MATCH = (0x16A), // Compare match + ELC_EVENT_ADC1_COMPARE_MISMATCH = (0x16B), // Compare mismatch + ELC_EVENT_EDMAC0_EINT = (0x16F), // EDMAC 0 interrupt + ELC_EVENT_SCI0_RXI = (0x180), // Receive data full + ELC_EVENT_SCI0_TXI = (0x181), // Transmit data empty + ELC_EVENT_SCI0_TEI = (0x182), // Transmit end + ELC_EVENT_SCI0_ERI = (0x183), // Receive error + ELC_EVENT_SCI0_AM = (0x184), // Address match event + ELC_EVENT_SCI0_RXI_OR_ERI = (0x185), // Receive data full/Receive + ELC_EVENT_SCI1_RXI = (0x186), // Received data full + ELC_EVENT_SCI1_TXI = (0x187), // Transmit data empty + ELC_EVENT_SCI1_TEI = (0x188), // Transmit end + ELC_EVENT_SCI1_ERI = (0x189), // Receive error + ELC_EVENT_SCI2_RXI = (0x18C), // Received data full + ELC_EVENT_SCI2_TXI = (0x18D), // Transmit data empty + ELC_EVENT_SCI2_TEI = (0x18E), // Transmit end + ELC_EVENT_SCI2_ERI = (0x18F), // Receive error + ELC_EVENT_SCI3_RXI = (0x192), // Received data full + ELC_EVENT_SCI3_TXI = (0x193), // Transmit data empty + ELC_EVENT_SCI3_TEI = (0x194), // Transmit end + ELC_EVENT_SCI3_ERI = (0x195), // Receive error + ELC_EVENT_SCI3_AM = (0x196), // Address match event + ELC_EVENT_SCI4_RXI = (0x198), // Received data full + ELC_EVENT_SCI4_TXI = (0x199), // Transmit data empty + ELC_EVENT_SCI4_TEI = (0x19A), // Transmit end + ELC_EVENT_SCI4_ERI = (0x19B), // Receive error + ELC_EVENT_SCI4_AM = (0x19C), // Address match event + ELC_EVENT_SCI5_RXI = (0x19E), // Received data full + ELC_EVENT_SCI5_TXI = (0x19F), // Transmit data empty + ELC_EVENT_SCI5_TEI = (0x1A0), // Transmit end + ELC_EVENT_SCI5_ERI = (0x1A1), // Receive error + ELC_EVENT_SCI5_AM = (0x1A2), // Address match event + ELC_EVENT_SCI6_RXI = (0x1A4), // Received data full + ELC_EVENT_SCI6_TXI = (0x1A5), // Transmit data empty + ELC_EVENT_SCI6_TEI = (0x1A6), // Transmit end + ELC_EVENT_SCI6_ERI = (0x1A7), // Receive error + ELC_EVENT_SCI6_AM = (0x1A8), // Address match event + ELC_EVENT_SCI7_RXI = (0x1AA), // Received data full + ELC_EVENT_SCI7_TXI = (0x1AB), // Transmit data empty + ELC_EVENT_SCI7_TEI = (0x1AC), // Transmit end + ELC_EVENT_SCI7_ERI = (0x1AD), // Receive error + ELC_EVENT_SCI7_AM = (0x1AE), // Address match event + ELC_EVENT_SCI8_RXI = (0x1B0), // Received data full + ELC_EVENT_SCI8_TXI = (0x1B1), // Transmit data empty + ELC_EVENT_SCI8_TEI = (0x1B2), // Transmit end + ELC_EVENT_SCI8_ERI = (0x1B3), // Receive error + ELC_EVENT_SCI8_AM = (0x1B4), // Address match event + ELC_EVENT_SCI9_RXI = (0x1B6), // Received data full + ELC_EVENT_SCI9_TXI = (0x1B7), // Transmit data empty + ELC_EVENT_SCI9_TEI = (0x1B8), // Transmit end + ELC_EVENT_SCI9_ERI = (0x1B9), // Receive error + ELC_EVENT_SCI9_AM = (0x1BA), // Address match event + ELC_EVENT_SCIX0_SCIX0 = (0x1BC), // SCI0 extended serial mode event 0 + ELC_EVENT_SCIX0_SCIX1 = (0x1BD), // SCI0 extended serial mode event 1 + ELC_EVENT_SCIX0_SCIX2 = (0x1BE), // SCI0 extended serial mode event 2 + ELC_EVENT_SCIX0_SCIX3 = (0x1BF), // SCI0 extended serial mode event 3 + ELC_EVENT_SCIX1_SCIX0 = (0x1C0), // SCI1 extended serial mode event 0 + ELC_EVENT_SCIX1_SCIX1 = (0x1C1), // SCI1 extended serial mode event 1 + ELC_EVENT_SCIX1_SCIX2 = (0x1C2), // SCI1 extended serial mode event 2 + ELC_EVENT_SCIX1_SCIX3 = (0x1C3), // SCI1 extended serial mode event 3 + ELC_EVENT_SPI0_RXI = (0x1C4), // Receive buffer full + ELC_EVENT_SPI0_TXI = (0x1C5), // Transmit buffer empty + ELC_EVENT_SPI0_IDLE = (0x1C6), // Idle + ELC_EVENT_SPI0_ERI = (0x1C7), // Error + ELC_EVENT_SPI0_TEI = (0x1C8), // Transmission complete event + ELC_EVENT_SPI1_RXI = (0x1C9), // Receive buffer full + ELC_EVENT_SPI1_TXI = (0x1CA), // Transmit buffer empty + ELC_EVENT_SPI1_IDLE = (0x1CB), // Idle + ELC_EVENT_SPI1_ERI = (0x1CC), // Error + ELC_EVENT_SPI1_TEI = (0x1CD), // Transmission complete event + ELC_EVENT_OSPI_INT = (0x1D9), // OSPI interrupt + ELC_EVENT_QSPI_INT = (0x1DA), // QSPI interrupt + ELC_EVENT_DOC_INT = (0x1DB), // Data operation circuit interrupt +} elc_event_t; + +/** @} (end addtogroup BSP_MCU_RA6M4) */ + +#endif diff --git a/ra/fsp/src/bsp/mcu/ra6m4/bsp_feature.h b/ra/fsp/src/bsp/mcu/ra6m4/bsp_feature.h new file mode 100644 index 000000000..3f5d731b5 --- /dev/null +++ b/ra/fsp/src/bsp/mcu/ra6m4/bsp_feature.h @@ -0,0 +1,269 @@ +/* ${REA_DISCLAIMER_PLACEHOLDER} */ + +#ifndef BSP_FEATURE_H +#define BSP_FEATURE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** The main oscillator drive value is based upon the oscillator frequency selected in the configuration */ +#if (BSP_CFG_XTAL_HZ > (19999999)) + #define CGC_MAINCLOCK_DRIVE (0x00U) +#elif (BSP_CFG_XTAL_HZ > (15999999)) && (BSP_CFG_XTAL_HZ < (20000000)) + #define CGC_MAINCLOCK_DRIVE (0x01U) +#elif (BSP_CFG_XTAL_HZ > (7999999)) && (BSP_CFG_XTAL_HZ < (16000000)) + #define CGC_MAINCLOCK_DRIVE (0x02U) +#else + #define CGC_MAINCLOCK_DRIVE (0x03U) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPHS_VREF (0) // Feature not available on this MCU + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (0U) +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0x0000FFFFU) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) // TSCDR is a 32-bit register on this MCU +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_SLOPE (4000) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x33FF) // 0 to 9, 12, 13 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x7F0007) // 0 to 2, 16 to 22 +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) + +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x3F) + +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (0U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (1) +#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (0U) +#define BSP_FEATURE_BSP_HAS_SP_MON (0U) +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (1U) // On the RA6M4 there are specific registers for configuring the USB clock. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0U) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0U) // Feature not available on this MCU +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (0U) // If MSTPRE is present than the setting is not valid. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (1U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) +#define BSP_FEATURE_BSP_OSIS_PADDING (0U) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_BSP_RESET_TRNG (0U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (100000000U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (50000000U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (150000000U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (100000000U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0U) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER (0x01008190U) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) +#define BSP_FEATURE_CAN_CLOCK (0U) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) + +#define BSP_FEATURE_CGC_HAS_BCLK (1U) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (1U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (0U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (1U) // On the RA6M4 there is another PLL that can be used as a clock source for USB and OCTASPI. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (1U) // On the RA6M4 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (200000000U) +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) +#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x01U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) + +#define BSP_FEATURE_CRYPTO_HAS_AES (1) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC (1) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_HASH (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA (1) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (1) +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (1) +#define BSP_FEATURE_CRYPTO_HAS_SCE9 (1) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (3U) +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (3U) +#define BSP_FEATURE_CTSU_HAS_TXVSEL (1) +#define BSP_FEATURE_CTSU_VERSION (1) + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6M4 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_PERIPHERAL_MASK (0x0007FFFFU) // Positions of event link set registers (ELSRs) available on this MCU + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x0000070FU) +#define BSP_FEATURE_ETHER_MAX_CHANNELS (1U) + +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x08000000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (1) +#define BSP_FEATURE_FLASH_HP_VERSION (40U) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (0) // Feature not available on this MCU + +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x0FU) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x1FFU) + +#define BSP_FEATURE_ICU_HAS_WUPEN1 (1U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0x7FB0DFFFFULL) // Note there is another WUPEN1 register + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (1U << 0U) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x03) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (1U) + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY (0U) +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x13FFFFU) +#define BSP_FEATURE_LPM_DPSIER_MASK (0x0D1FFFFFU) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (1U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (1U) +#define BSP_FEATURE_LPM_HAS_STCONR (0U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000001FFU) // note there is another SNZEDCR1 register +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x77300FFFFULL) // note tehre is another SNZEREQCR1 register + +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (0U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_STABILIZATION_TIME_US (10U) // Time in microseconds required for LVD to stabalize + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (0U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_HAS_THIRD_CHANNEL (0U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0U) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x68000000U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x70000000U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (0x3F9U) +#define BSP_FEATURE_SCI_CHANNELS (0x3FFU) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3F9U) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (1U) +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (1U) +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x01U) +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_PCLKB) +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (0U) // 1 (2^0) is minimum division supported + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x0U) + +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (1U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (1U) + +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (1U) + +#endif diff --git a/ra/fsp/src/bsp/mcu/ra6m4/bsp_mcu_info.h b/ra/fsp/src/bsp/mcu/ra6m4/bsp_mcu_info.h new file mode 100644 index 000000000..494d2161e --- /dev/null +++ b/ra/fsp/src/bsp/mcu/ra6m4/bsp_mcu_info.h @@ -0,0 +1,40 @@ +/* ${REA_DISCLAIMER_PLACEHOLDER} */ + +/*******************************************************************************************************************//** + * @ingroup BSP_MCU + * @defgroup BSP_MCU_RA6M4 RA6M4 + * @includedoc config_bsp_ra6m4_fsp.html + * @{ + **********************************************************************************************************************/ + +/** @} (end defgroup BSP_MCU_RA6M4) */ + +#ifndef BSP_MCU_INFO_H +#define BSP_MCU_INFO_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP MCU Specific Includes. */ +#include "bsp_elc.h" +#include "bsp_feature.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef elc_event_t bsp_interrupt_event_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +#endif diff --git a/ra/fsp/src/r_adc/r_adc.c b/ra/fsp/src/r_adc/r_adc.c index 0d239692b..eab37b810 100644 --- a/ra/fsp/src/r_adc/r_adc.c +++ b/ra/fsp/src/r_adc/r_adc.c @@ -78,8 +78,6 @@ #define ADC_PRV_TSCR_TSN_ENABLE (R_TSN_CTRL_TSCR_TSEN_Msk | R_TSN_CTRL_TSCR_TSOE_Msk) -#define ADC_PRV_TSN_CALIBRATION_TSCDR_BITS (0x00000FFFU) - /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ @@ -94,6 +92,12 @@ typedef enum e_adc_elc_trigger ADC_ELC_TRIGGER_DISABLED = (0x3FU) } adc_elc_trigger_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile adc_prv_ns_callback)(adc_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile adc_prv_ns_callback)(adc_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private global variables and functions **********************************************************************************************************************/ @@ -179,6 +183,7 @@ const adc_api_t g_adc_on_adc = .versionGet = R_ADC_VersionGet, .calibrate = R_ADC_Calibrate, .offsetSet = R_ADC_OffsetSet, + .callbackSet = R_ADC_CallbackSet, }; /*******************************************************************************************************************//** @@ -236,6 +241,15 @@ fsp_err_t R_ADC_Open (adc_ctrl_t * p_ctrl, adc_cfg_t const * const p_cfg) /* Save configurations. */ p_instance_ctrl->p_cfg = p_cfg; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_instance_ctrl->callback_is_secure = true; +#endif + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + /* Calculate the register base address. */ uint32_t address_gap = (uint32_t) R_ADC1 - (uint32_t) R_ADC0; p_instance_ctrl->p_reg = (R_ADC0_Type *) ((uint32_t) R_ADC0 + (address_gap * p_cfg->unit)); @@ -299,6 +313,42 @@ fsp_err_t R_ADC_ScanCfg (adc_ctrl_t * p_ctrl, void const * const p_extend) return err; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements adc_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. + **********************************************************************************************************************/ +fsp_err_t R_ADC_CallbackSet (adc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(adc_callback_args_t *), + void const * const p_context, + adc_callback_args_t * const p_callback_memory) +{ + adc_instance_ctrl_t * p_ctrl = (adc_instance_ctrl_t *) p_api_ctrl; + +#if (ADC_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(ADC_OPEN == p_ctrl->opened, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Starts a software scan or enables the hardware trigger for a scan depending on how the triggers were configured in * the R_ADC_Open call. If the unit was configured for ELC or external hardware triggering, then this function allows @@ -575,14 +625,14 @@ fsp_err_t R_ADC_InfoGet (adc_ctrl_t * p_ctrl, adc_info_t * p_adc_info) p_adc_info->calibration_data = UINT32_MAX; /* If calibration register is available, retrieve it from the MCU */ -#if BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE - #if BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE +#if 1U == BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE + #if 1U == BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE /* Read into memory. */ uint32_t data = R_TSN_CAL->TSCDR; - /* Read the calibration data from ROM and AND it to mask off 12bit of calibration data. */ - p_adc_info->calibration_data = (data & ADC_PRV_TSN_CALIBRATION_TSCDR_BITS); + /* Read the temperature calibration data from ROM. */ + p_adc_info->calibration_data = (data & BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK); #else /* Read into memory to prevent compiler warning when performing "|" on volatile register data. */ @@ -1406,16 +1456,30 @@ static void r_adc_scan_end_common_isr (adc_event_t event) adc_instance_ctrl_t * p_instance_ctrl = (adc_instance_ctrl_t *) R_FSP_IsrContextGet(R_FSP_CurrentIrqGet()); adc_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. */ + adc_callback_args_t * p_args = p_instance_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; + } + /* Clear the BSP IRQ Flag */ R_BSP_IrqStatusClear(R_FSP_CurrentIrqGet()); - args.event = event; + p_args->event = event; #if BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE /* Store the correct event into the callback argument */ if (ADC_ADICR_CALIBRATION_INTERRUPT_DISABLED != p_instance_ctrl->p_reg->ADICR) { - args.event = ADC_EVENT_CALIBRATION_COMPLETE; + p_args->event = ADC_EVENT_CALIBRATION_COMPLETE; /* Restore the interrupt source to disable interrupts after calibration is done. */ p_instance_ctrl->p_reg->ADICR = 0U; @@ -1423,18 +1487,43 @@ static void r_adc_scan_end_common_isr (adc_event_t event) #endif /* Store the unit number into the callback argument */ - args.unit = p_instance_ctrl->p_cfg->unit; + p_args->unit = p_instance_ctrl->p_cfg->unit; /* Initialize the channel to 0. It is not used in this implementation. */ - args.channel = ADC_CHANNEL_0; + p_args->channel = ADC_CHANNEL_0; /* Populate the context field. */ - args.p_context = p_instance_ctrl->p_cfg->p_context; + p_args->p_context = p_instance_ctrl->p_context; /* If a callback was provided, call it with the argument */ - if (NULL != p_instance_ctrl->p_cfg->p_callback) + if (NULL != p_instance_ctrl->p_callback) + { +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_instance_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_instance_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. */ + adc_prv_ns_callback p_callback = (adc_prv_ns_callback) (p_instance_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_instance_ctrl->p_callback(p_args); +#endif + } + + if (NULL != p_instance_ctrl->p_callback_memory) { - p_instance_ctrl->p_cfg->p_callback(&args); + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = args; } /* Restore context if RTOS is used */ diff --git a/ra/fsp/src/r_agt/r_agt.c b/ra/fsp/src/r_agt/r_agt.c index 353bd0247..a7862559c 100644 --- a/ra/fsp/src/r_agt/r_agt.c +++ b/ra/fsp/src/r_agt/r_agt.c @@ -30,8 +30,6 @@ /** "AGT" in ASCII, used to determine if channel is open. */ #define AGT_OPEN (0x00414754ULL) -#define AGT_PRV_VALID_CHANNEL_MASK (0x3U) - #define AGT_COMPARE_MATCH_A_OUTPUT (0x03U) ///< Enabling AGTOAn pin #define AGT_COMPARE_MATCH_B_OUTPUT (0x30U) ///< Enabling AGTOBn pin @@ -57,6 +55,11 @@ /********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile agt_prv_ns_callback)(timer_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile agt_prv_ns_callback)(timer_callback_args_t * p_args); +#endif /*********************************************************************************************************************** * Private function prototypes @@ -111,6 +114,7 @@ const timer_api_t g_timer_on_agt = .dutyCycleSet = R_AGT_DutyCycleSet, .infoGet = R_AGT_InfoGet, .statusGet = R_AGT_StatusGet, + .callbackSet = R_AGT_CallbackSet, .close = R_AGT_Close, .versionGet = R_AGT_VersionGet }; @@ -178,6 +182,17 @@ fsp_err_t R_AGT_Open (timer_ctrl_t * const p_ctrl, timer_cfg_t const * const p_c R_BSP_IrqCfgEnable(p_cfg->cycle_end_irq, p_cfg->cycle_end_ipl, p_instance_ctrl); } + /* Set callback and context pointers */ + +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_instance_ctrl->callback_is_secure = true; +#endif + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + p_instance_ctrl->open = AGT_OPEN; /* All done. */ @@ -474,6 +489,58 @@ fsp_err_t R_AGT_StatusGet (timer_ctrl_t * const p_ctrl, timer_status_t * const p return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref timer_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_AGT_CallbackSet (timer_ctrl_t * const p_api_ctrl, + void ( * p_callback)(timer_callback_args_t *), + void const * const p_context, + timer_callback_args_t * const p_callback_memory) +{ + agt_instance_ctrl_t * p_ctrl = (agt_instance_ctrl_t *) p_api_ctrl; + +#if AGT_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(AGT_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if AGT_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + timer_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Stops counter, disables interrupts, disables output pins, and clears internal driver data. Implements * @ref timer_api_t::close. @@ -572,7 +639,7 @@ static fsp_err_t r_agt_open_param_checking (agt_instance_ctrl_t * p_instance_ctr FSP_ASSERT(p_cfg->period_counts <= AGT_MAX_PERIOD); /* Validate channel number. */ - FSP_ERROR_RETURN(((1U << p_cfg->channel) & AGT_PRV_VALID_CHANNEL_MASK), FSP_ERR_IP_CHANNEL_NOT_PRESENT); + FSP_ERROR_RETURN(((1U << p_cfg->channel) & BSP_FEATURE_AGT_VALID_CHANNEL_MASK), FSP_ERR_IP_CHANNEL_NOT_PRESENT); /* AGT_CLOCK_AGT0_UNDERFLOW is not allowed on AGT channel 0. */ agt_extended_cfg_t const * p_extend = (agt_extended_cfg_t const *) p_cfg->p_extend; @@ -871,21 +938,36 @@ void agt_int_isr (void) } /* Invoke the callback function if it is set. */ - if (NULL != p_instance_ctrl->p_cfg->p_callback) + if (NULL != p_instance_ctrl->p_callback) { /* Setup parameters for the user-supplied callback function. */ timer_callback_args_t callback_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. */ + timer_callback_args_t * p_args = p_instance_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &callback_args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + callback_args = *p_args; + } + if (agtcr & R_AGT0_AGTCR_TUNDF_Msk) { - callback_args.event = TIMER_EVENT_CYCLE_END; + p_args->event = TIMER_EVENT_CYCLE_END; } #if AGT_CFG_INPUT_SUPPORT_ENABLE else { - callback_args.event = TIMER_EVENT_CAPTURE_A; + p_args->event = TIMER_EVENT_CAPTURE_A; uint32_t reload_value = p_instance_ctrl->period - 1U; - callback_args.capture = reload_value - p_instance_ctrl->p_reg->AGT; + p_args->capture = reload_value - p_instance_ctrl->p_reg->AGT; /* The AGT counter is not reset in pulse width measurement mode. Reset it by software. Note that this * will restart the counter if a new capture has already started. Application writers must ensure that @@ -898,13 +980,39 @@ void agt_int_isr (void) { /* Period of input pulse = (initial value of counter [AGT register] - reading value of the read-out buffer) + 1 * Reference section 25.4.5 of the RA6M3 manual R01UH0886EJ0100. */ - callback_args.capture++; + p_args->capture++; } } #endif - callback_args.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&callback_args); + p_args->p_context = p_instance_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_instance_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_instance_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. */ + agt_prv_ns_callback p_callback = (agt_prv_ns_callback) (p_instance_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_instance_ctrl->p_callback(p_args); +#endif + + if (NULL != p_instance_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = callback_args; + } } /* Clear flags in AGTCR. */ diff --git a/ra/fsp/src/r_cac/r_cac.c b/ra/fsp/src/r_cac/r_cac.c index c095f9a34..29affd41b 100644 --- a/ra/fsp/src/r_cac/r_cac.c +++ b/ra/fsp/src/r_cac/r_cac.c @@ -79,6 +79,11 @@ /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile cac_prv_ns_callback)(cac_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile cac_prv_ns_callback)(cac_callback_args_t * p_args); +#endif /*********************************************************************************************************************** * Private global variables and functions @@ -115,6 +120,7 @@ const cac_api_t g_cac_on_cac = .startMeasurement = R_CAC_StartMeasurement, .stopMeasurement = R_CAC_StopMeasurement, .read = R_CAC_Read, + .callbackSet = R_CAC_CallbackSet, .close = R_CAC_Close, .versionGet = R_CAC_VersionGet }; @@ -155,6 +161,14 @@ fsp_err_t R_CAC_Open (cac_ctrl_t * const p_ctrl, cac_cfg_t const * const p_cfg) p_instance_ctrl->p_cfg = p_cfg; + /* Set callback and context pointers, if configured */ + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; +#if BSP_TZ_SECURE_BUILD + p_instance_ctrl->callback_is_secure = true; +#endif + /* Configure the CAC per the configuration. */ r_cac_hw_configure(p_instance_ctrl); @@ -242,6 +256,52 @@ fsp_err_t R_CAC_Read (cac_ctrl_t * const p_ctrl, uint16_t * const p_counter) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref cac_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_CAC_CallbackSet (cac_ctrl_t * const p_ctrl, + void ( * p_callback)(cac_callback_args_t *), + void const * const p_context, + cac_callback_args_t * const p_callback_memory) +{ + cac_instance_ctrl_t * p_instance_ctrl = (cac_instance_ctrl_t *) p_ctrl; + +#if CAC_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(CAC_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_instance_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if CAC_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + cac_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_instance_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), + FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + p_instance_ctrl->p_callback = p_callback; + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Release any resources that were allocated by the Open() or any subsequent CAC operations. * @@ -318,7 +378,7 @@ static void r_cac_hw_configure (cac_instance_ctrl_t * const p_instance_ctrl) R_BSP_MODULE_START(FSP_IP_CAC, 0); /* Disable measurements. */ - R_CAC->CACR0 = 0U; + R_CAC->CACR0 = 0; /* Read CFME bit to confirm the bit value has changed. See section 10.2.1 CAC Control Register 0 of the RA6M3 * manual R01UH0886EJ0100. */ @@ -391,20 +451,63 @@ static void r_cac_hw_configure (cac_instance_ctrl_t * const p_instance_ctrl) **********************************************************************************************************************/ static void r_cac_isr_handler (cac_event_t event, uint32_t clear_mask) { - IRQn_Type irq = R_FSP_CurrentIrqGet(); - cac_instance_ctrl_t * p_instance_ctrl = (cac_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + IRQn_Type irq = R_FSP_CurrentIrqGet(); + volatile cac_instance_ctrl_t * p_instance_ctrl = (cac_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - if (NULL != p_instance_ctrl->p_cfg->p_callback) + if (NULL != p_instance_ctrl->p_callback) { - /* Call the user defined callback. */ - cac_callback_args_t cb_data; - cb_data.event = event; - cb_data.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&cb_data); + /* 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. */ + cac_callback_args_t args; + cac_callback_args_t * p_args = p_instance_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->event = event; + p_args->p_context = p_instance_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_instance_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_instance_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. */ + cac_prv_ns_callback p_callback = (cac_prv_ns_callback) (p_instance_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_instance_ctrl->p_callback(p_args); +#endif + if (NULL != p_instance_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = args; + } } /* Clear the status flag. */ R_CAC->CAICR |= (uint8_t) clear_mask; + + /* Depending on MPU and cache settings, the register may need to be read back to ensure the write happens before + * clearing the IRQ in the ICU. */ + R_CAC->CAICR; + R_BSP_IrqStatusClear(irq); } diff --git a/ra/fsp/src/r_can/r_can.c b/ra/fsp/src/r_can/r_can.c index 9bda7bf57..ca4559aa7 100644 --- a/ra/fsp/src/r_can/r_can.c +++ b/ra/fsp/src/r_can/r_can.c @@ -102,9 +102,16 @@ typedef union } int_status_b; } can_error_interrrupt_status_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile can_prv_ns_callback)(can_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile can_prv_ns_callback)(can_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ +static void r_can_call_callback(can_instance_ctrl_t * p_ctrl, can_callback_args_t * p_args); static void r_can_switch_to_operation_mode(can_instance_ctrl_t * p_ctrl, can_operation_mode_t canm_mode_setting); static void r_can_mode_transition(can_instance_ctrl_t * p_ctrl, can_operation_mode_t operation_mode, @@ -143,6 +150,7 @@ const can_api_t g_can_on_can = .write = R_CAN_Write, .modeTransition = R_CAN_ModeTransition, .infoGet = R_CAN_InfoGet, + .callbackSet = R_CAN_CallbackSet, .versionGet = R_CAN_VersionGet }; @@ -275,6 +283,15 @@ fsp_err_t R_CAN_Open (can_ctrl_t * const p_api_ctrl, can_cfg_t const * const p_c /* Initialize the control block */ p_ctrl->p_cfg = p_cfg; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif + + /* Set callback and context pointers, if configured */ + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + /* Set the clock source to the user configured source. */ p_ctrl->clock_source = extended_cfg->clock_source; @@ -578,6 +595,51 @@ fsp_err_t R_CAN_InfoGet (can_ctrl_t * const p_api_ctrl, can_info_t * const p_inf return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref can_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_CAN_CallbackSet (can_ctrl_t * const p_api_ctrl, + void ( * p_callback)(can_callback_args_t *), + void const * const p_context, + can_callback_args_t * const p_callback_memory) +{ + can_instance_ctrl_t * p_ctrl = (can_instance_ctrl_t *) p_api_ctrl; + +#if CAN_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(CAN_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if CAN_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + can_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Get CAN module code and API versions. * @retval FSP_SUCCESS Operation succeeded. @@ -606,6 +668,61 @@ fsp_err_t R_CAN_VersionGet (fsp_version_t * const p_version) * Private Functions **********************************************************************************************************************/ +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to CAN instance control block + * @param[in] p_args Pointer to arguments on stack + **********************************************************************************************************************/ +static void r_can_call_callback (can_instance_ctrl_t * p_ctrl, can_callback_args_t * p_args) +{ + can_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. */ + can_callback_args_t * p_args_memory = p_ctrl->p_callback_memory; + if (NULL == p_args_memory) + { + /* Use provided args struct on stack */ + p_args_memory = p_args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args_memory; + + /* Copy the stacked args to callback memory */ + *p_args_memory = *p_args; + } + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args_memory); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + can_prv_ns_callback p_callback = (can_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args_memory); + } + +#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_memory); +#endif + + if (NULL != p_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_ctrl->p_callback_memory = args; + } +} + /*******************************************************************************************************************//** * Error ISR. * @@ -646,9 +763,9 @@ void can_error_isr (void) args.p_frame = NULL; args.channel = p_ctrl->p_cfg->channel; - args.p_context = p_ctrl->p_cfg->p_context; + args.p_context = p_ctrl->p_context; args.mailbox = mailbox; - p_ctrl->p_cfg->p_callback(&args); + r_can_call_callback(p_ctrl, &args); /* Check for mailboxes with data loss due to overrun, * if true, fire this interrupt again. @@ -739,8 +856,8 @@ void can_mailbox_rx_isr (void) args.mailbox = mailbox; args.channel = p_ctrl->p_cfg->channel; - args.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&args); + args.p_context = p_ctrl->p_context; + r_can_call_callback(p_ctrl, &args); /* Check for mailboxes with receive data, if true, fire this interrupt again */ if ((p_ctrl->p_reg->STR_b.NDST)) @@ -792,9 +909,9 @@ void can_mailbox_tx_isr (void) /* Set event argument to transmit complete. */ args.event = CAN_EVENT_TX_COMPLETE; args.channel = p_ctrl->p_cfg->channel; - args.p_context = p_ctrl->p_cfg->p_context; + args.p_context = p_ctrl->p_context; args.p_frame = NULL; - p_ctrl->p_cfg->p_callback(&args); + r_can_call_callback(p_ctrl, &args); /* Check for other mailboxes with pending transmit complete flags. */ if ((p_ctrl->p_reg->STR_b.SDST)) diff --git a/ra/fsp/src/r_cgc/r_cgc.c b/ra/fsp/src/r_cgc/r_cgc.c index 0fbe5cbe9..d409f080f 100644 --- a/ra/fsp/src/r_cgc/r_cgc.c +++ b/ra/fsp/src/r_cgc/r_cgc.c @@ -28,6 +28,12 @@ * Macro definitions **********************************************************************************************************************/ +#if BSP_TZ_NONSECURE_BUILD + #if defined(BSP_CFG_CLOCKS_SECURE) && BSP_CFG_CLOCKS_SECURE + #error "The CGC registers are only accessible in the TrustZone Secure Project." + #endif +#endif + /* "CGC" in ASCII, used to determine if the module is open. */ #define CGC_OPEN (0x00434743U) @@ -54,7 +60,11 @@ #define CGC_PRV_CKOCR_CKODIV_BIT (4) #if BSP_PRV_PLL_SUPPORTED - #define CGC_PRV_NUM_CLOCKS ((uint8_t) CGC_CLOCK_PLL + 1U) + #if BSP_PRV_PLL2_SUPPORTED + #define CGC_PRV_NUM_CLOCKS ((uint8_t) CGC_CLOCK_PLL2 + 1U) + #else + #define CGC_PRV_NUM_CLOCKS ((uint8_t) CGC_CLOCK_PLL + 1U) + #endif #else #define CGC_PRV_NUM_CLOCKS ((uint8_t) CGC_CLOCK_SUBCLOCK + 1U) #endif @@ -68,6 +78,7 @@ #define CGC_PRV_MOSCCR ((uint8_t *) 0x4001E032U) #define CGC_PRV_SOSCCR ((uint8_t *) 0x4001E480U) #define CGC_PRV_PLLCR ((uint8_t *) 0x4001E02AU) +#define CGC_PRV_PLL2CR ((uint8_t *) 0x4001E04AU) /* The closest supported power mode to use when exiting low speed or low voltage mode. */ #if BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ > 0U @@ -84,7 +95,6 @@ /* Specifications for PLL on MCUs with PLLCCR. */ #define CGC_PRV_PLLCCR_PLL_MIN_HZ (120000000U) -#define CGC_PRV_PLLCCR_PLL_MAX_HZ (240000000U) /* Specifications for PLL on MCUs with PLLCCR2. */ #define CGC_PRV_PLLCCR2_PLL_MIN_HZ (24000000U) @@ -110,6 +120,12 @@ typedef enum e_cgc_prv_change CGC_PRV_CHANGE_LPM_CGC = 1, } cgc_prv_change_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile cgc_prv_ns_callback)(cgc_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile cgc_prv_ns_callback)(cgc_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -138,14 +154,27 @@ static fsp_err_t r_cgc_pll_parameter_check(cgc_pll_cfg_t const * const p_pll_cfg #endif #endif -#if BSP_PRV_PLL_SUPPORTED -static uint32_t r_cgc_pllccr_calculate(cgc_pll_cfg_t const * const p_pll_cfg); +#if BSP_PRV_PLL_SUPPORTED || BSP_PRV_PLL2_SUPPORTED +static uint32_t r_cgc_pllccr_calculate(cgc_pll_cfg_t const * const p_pll_cfg); + + #if BSP_PRV_PLL_SUPPORTED + static inline cgc_clock_t r_cgc_pll_clocksource_get(void); -static fsp_err_t r_cgc_pll_hz_calculate(cgc_pll_cfg_t const * const p_pll_cfg, uint32_t * const p_pll_hz); -static void r_cgc_pll_cfg(uint32_t pll_hz, uint32_t pllccr); -static fsp_err_t r_cgc_pllccr_pll_hz_calculate(cgc_pll_cfg_t const * const p_pll_cfg, - uint32_t * const p_pll_hz, - uint32_t * const p_pllccr); + + #endif + + #if BSP_PRV_PLL2_SUPPORTED && CGC_CFG_PARAM_CHECKING_ENABLE + +static inline cgc_clock_t r_cgc_pll2_clocksource_get(void); + + #endif + +static fsp_err_t r_cgc_pll_hz_calculate(cgc_pll_cfg_t const * const p_pll_cfg, uint32_t * const p_pll_hz); +static void r_cgc_pll_cfg(uint32_t pll_hz, uint32_t pllccr); +static fsp_err_t r_cgc_pllccr_pll_hz_calculate(cgc_pll_cfg_t const * const p_pll_cfg, + uint32_t * const p_pll_hz, + uint32_t * const p_pllccr, + cgc_clock_t pll); #endif @@ -179,6 +208,9 @@ static uint8_t volatile * const gp_cgc_clock_stp_registers[CGC_PRV_NUM_CLOCKS] = #if BSP_PRV_PLL_SUPPORTED [CGC_CLOCK_PLL] = CGC_PRV_PLLCR, #endif +#if BSP_PRV_PLL2_SUPPORTED + [CGC_CLOCK_PLL2] = CGC_PRV_PLL2CR, +#endif }; /* How long of a software delay is required after starting each clock before activating it as the system clock. */ @@ -192,6 +224,9 @@ static const uint8_t g_cgc_software_wait_us[CGC_PRV_NUM_CLOCKS] = #if BSP_PRV_PLL_SUPPORTED [CGC_CLOCK_PLL] = 0U, // PLL has a stabilization wait flag #endif +#if BSP_PRV_PLL2_SUPPORTED + [CGC_CLOCK_PLL2] = 0U, // PLL2 has a stabilization wait flag +#endif }; /* Create a mask of the uppermost bits of all valid clock dividers in SCKDIVCR. */ @@ -215,6 +250,7 @@ const cgc_api_t g_cgc_on_cgc = .oscStopDetectEnable = R_CGC_OscStopDetectEnable, .oscStopDetectDisable = R_CGC_OscStopDetectDisable, .oscStopStatusClear = R_CGC_OscStopStatusClear, + .callbackSet = R_CGC_CallbackSet, .close = R_CGC_Close, .versionGet = R_CGC_VersionGet, }; @@ -248,10 +284,16 @@ fsp_err_t R_CGC_Open (cgc_ctrl_t * const p_ctrl, cgc_cfg_t const * const p_cfg) FSP_ERROR_RETURN(CGC_OPEN != p_instance_ctrl->open, FSP_ERR_ALREADY_OPEN); #endif +#if BSP_TZ_SECURE_BUILD + p_instance_ctrl->callback_is_secure = true; +#endif + /* Store the control structure in a private global variable so the oscillation stop detection function can be * called from the NMI callback. */ - gp_cgc_ctrl = p_instance_ctrl; - p_instance_ctrl->p_callback = p_cfg->p_callback; + gp_cgc_ctrl = p_instance_ctrl; + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; /* Mark the module as open so other APIs can be used. */ p_instance_ctrl->open = CGC_OPEN; @@ -263,7 +305,7 @@ fsp_err_t R_CGC_Open (cgc_ctrl_t * const p_ctrl, cgc_cfg_t const * const p_cfg) * Reconfigures all main system clocks. This API can be used for any of the following purposes: * - start or stop clocks * - change the system clock source - * - configure the PLL multiplication and division ratios when starting the PLL + * - configure the PLL/PLL2 multiplication and division ratios when starting the PLL * - change the system dividers * * If the requested system clock source has a stabilization flag, this function blocks waiting for the stabilization @@ -281,7 +323,7 @@ fsp_err_t R_CGC_Open (cgc_ctrl_t * const p_ctrl, cgc_cfg_t const * const p_cfg) * - RA2A1: see footnotes of Table 9.2 "Clock generation circuit specifications for the internal clocks" in the RA2A1 * manual R01UH0888EJ0100 * - * Do not attempt to stop the requested clock source or the source of the PLL if the PLL will be running after this + * Do not attempt to stop the requested clock source or the source of a PLL if the PLL will be running after this * operation completes. * * Implements @ref cgc_api_t::clocksCfg. @@ -291,6 +333,7 @@ fsp_err_t R_CGC_Open (cgc_ctrl_t * const p_ctrl, cgc_cfg_t const * const p_cfg) * * @retval FSP_SUCCESS Clock configuration applied successfully. * @retval FSP_ERR_ASSERTION Invalid input argument. + * @retval FSP_ERR_UNSUPPORTED PLL/PLL2 is not available on this MCU. * @retval FSP_ERR_NOT_OPEN Module is not open. * @retval FSP_ERR_IN_USE Attempt to stop the current system clock or the PLL source clock. * @retval FSP_ERR_CLOCK_ACTIVE PLL configuration cannot be changed while PLL is running. @@ -328,7 +371,11 @@ fsp_err_t R_CGC_ClocksCfg (cgc_ctrl_t * const p_ctrl, cgc_clocks_cfg_t const * c options[CGC_CLOCK_SUBCLOCK] = CGC_CLOCK_CHANGE_NONE; #if CGC_CFG_PARAM_CHECKING_ENABLE #if !BSP_PRV_PLL_SUPPORTED - FSP_ASSERT(CGC_CLOCK_CHANGE_START != p_clock_cfg->pll_state); + FSP_ERROR_RETURN(CGC_CLOCK_CHANGE_START != p_clock_cfg->pll_state, FSP_ERR_UNSUPPORTED); + #endif + + #if !BSP_PRV_PLL2_SUPPORTED + FSP_ERROR_RETURN(CGC_CLOCK_CHANGE_START != p_clock_cfg->pll2_state, FSP_ERR_UNSUPPORTED); #endif #if BSP_CFG_USE_LOW_VOLTAGE_MODE @@ -354,7 +401,7 @@ fsp_err_t R_CGC_ClocksCfg (cgc_ctrl_t * const p_ctrl, cgc_clocks_cfg_t const * c uint32_t pllccr = 0U; if (CGC_CLOCK_CHANGE_START == p_clock_cfg->pll_state) { - err = r_cgc_pllccr_pll_hz_calculate(&p_clock_cfg->pll_cfg, &pll_hz, &pllccr); + err = r_cgc_pllccr_pll_hz_calculate(&p_clock_cfg->pll_cfg, &pll_hz, &pllccr, CGC_CLOCK_PLL); FSP_ERROR_RETURN(FSP_SUCCESS == err, err); } @@ -371,6 +418,30 @@ fsp_err_t R_CGC_ClocksCfg (cgc_ctrl_t * const p_ctrl, cgc_clocks_cfg_t const * c #endif #endif +#if BSP_PRV_PLL2_SUPPORTED + options[CGC_CLOCK_PLL2] = p_clock_cfg->pll2_state; + + uint32_t pll2_hz = 0U; + uint32_t pll2ccr = 0U; + if (CGC_CLOCK_CHANGE_START == p_clock_cfg->pll2_state) + { + err = r_cgc_pllccr_pll_hz_calculate(&p_clock_cfg->pll2_cfg, &pll2_hz, &pll2ccr, CGC_CLOCK_PLL2); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + + #if CGC_CFG_PARAM_CHECKING_ENABLE + + /* Check the PLL2 parameters if starting PLL2. */ + if (CGC_CLOCK_CHANGE_START == p_clock_cfg->pll2_state) + { + err = + r_cgc_pll_parameter_check(&p_clock_cfg->pll2_cfg, + (CGC_CLOCK_CHANGE_START != options[p_clock_cfg->pll2_cfg.source_clock])); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif +#endif + #if CGC_CFG_PARAM_CHECKING_ENABLE /* Do not attempt to stop the new system clock. */ @@ -386,6 +457,17 @@ fsp_err_t R_CGC_ClocksCfg (cgc_ctrl_t * const p_ctrl, cgc_clocks_cfg_t const * c } } #endif + #if BSP_PRV_PLL2_SUPPORTED + + /* Do not attempt to stop the source of PLL2 if PLL2 will be running after this operation completes. */ + if (CGC_CLOCK_CHANGE_STOP != options[CGC_CLOCK_PLL2]) + { + if ((CGC_CLOCK_CHANGE_START == options[CGC_CLOCK_PLL2]) || r_cgc_clock_run_state_get(CGC_CLOCK_PLL2)) + { + FSP_ERROR_RETURN(CGC_CLOCK_CHANGE_STOP != options[p_clock_cfg->pll2_cfg.source_clock], FSP_ERR_IN_USE); + } + } + #endif #endif /* Prerequisite to starting clocks or changing the system clock. */ @@ -405,6 +487,20 @@ fsp_err_t R_CGC_ClocksCfg (cgc_ctrl_t * const p_ctrl, cgc_clocks_cfg_t const * c } } #endif +#if BSP_PRV_PLL2_SUPPORTED + if (CGC_CLOCK_CHANGE_START == p_clock_cfg->pll2_state) + { + /* Configure PLL2 and store frequency in BSP. */ + R_SYSTEM->PLL2CCR = (uint16_t) pll2ccr; + + if (CGC_CLOCK_CHANGE_START == options[p_clock_cfg->pll_cfg.source_clock]) + { + /* Need to start PLL source clock and let it stabilize before starting PLL. */ + r_cgc_clock_change(p_clock_cfg->pll2_cfg.source_clock, CGC_CLOCK_CHANGE_START); + FSP_HARDWARE_REGISTER_WAIT(r_cgc_clock_check(p_clock_cfg->pll2_cfg.source_clock), FSP_SUCCESS); + } + } +#endif /* Start or stop clocks based on the input configuration. Start with PLL clock, so it can be stopped before trying * to stop the PLL source clock. */ @@ -506,7 +602,7 @@ fsp_err_t R_CGC_ClockStart (cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source, fsp_err_t err = FSP_SUCCESS; FSP_PARAMETER_NOT_USED(err); // unused in some build configurations -#if !BSP_PRV_PLL_SUPPORTED +#if !BSP_PRV_PLL_SUPPORTED && !BSP_PRV_PLL2_SUPPORTED FSP_PARAMETER_NOT_USED(p_pll_cfg); #endif #if CGC_CFG_PARAM_CHECKING_ENABLE @@ -516,8 +612,15 @@ fsp_err_t R_CGC_ClockStart (cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source, #if !BSP_PRV_PLL_SUPPORTED FSP_ASSERT(CGC_CLOCK_PLL != clock_source); #endif + #if !BSP_PRV_PLL2_SUPPORTED + FSP_ASSERT(CGC_CLOCK_PLL2 != clock_source); + #endif #if BSP_PRV_PLL_SUPPORTED - if (CGC_CLOCK_PLL == clock_source) + if ((CGC_CLOCK_PLL == clock_source) + #if BSP_PRV_PLL2_SUPPORTED + || (CGC_CLOCK_PLL2 == clock_source) + #endif + ) { /* p_pll_cfg is required to start PLL. */ FSP_ASSERT(NULL != p_pll_cfg); @@ -533,9 +636,13 @@ fsp_err_t R_CGC_ClockStart (cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source, #if BSP_PRV_PLL_SUPPORTED uint32_t pll_hz; uint32_t pllccr; - if (CGC_CLOCK_PLL == clock_source) + if ((CGC_CLOCK_PLL == clock_source) + #if BSP_PRV_PLL2_SUPPORTED + || (CGC_CLOCK_PLL2 == clock_source) + #endif + ) { - err = r_cgc_pllccr_pll_hz_calculate(p_pll_cfg, &pll_hz, &pllccr); + err = r_cgc_pllccr_pll_hz_calculate(p_pll_cfg, &pll_hz, &pllccr, clock_source); FSP_ERROR_RETURN(FSP_SUCCESS == err, err); } @@ -552,6 +659,17 @@ fsp_err_t R_CGC_ClockStart (cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source, { r_cgc_pll_cfg(pll_hz, pllccr); } + + #if BSP_PRV_PLL2_SUPPORTED + else if (CGC_CLOCK_PLL2 == clock_source) + { + R_SYSTEM->PLL2CCR = (uint16_t) pllccr; + } + else + { + /* Do nothing. */ + } + #endif #endif /* Start the clock. */ @@ -567,7 +685,7 @@ fsp_err_t R_CGC_ClockStart (cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source, /*******************************************************************************************************************//** * Stop the specified clock if it is active. Implements @ref cgc_api_t::clockStop. * - * Do not attempt to stop the current system clock source. Do not attempt to stop the source clock of the PLL if the + * Do not attempt to stop the current system clock source. Do not attempt to stop the source clock of a PLL if the * PLL is running. * * @retval FSP_SUCCESS Clock stopped successfully. @@ -600,7 +718,11 @@ fsp_err_t R_CGC_ClockStop (cgc_ctrl_t * const p_ctrl, cgc_clock_t clock_source) #if BSP_PRV_PLL_SUPPORTED /* If PLL is operating, the PLL clock source cannot be stopped. */ - FSP_ERROR_RETURN(!((r_cgc_clock_run_state_get(CGC_CLOCK_PLL) && (r_cgc_pll_clocksource_get() == clock_source))), + FSP_ERROR_RETURN(!((r_cgc_clock_run_state_get(CGC_CLOCK_PLL) && (r_cgc_pll_clocksource_get() == clock_source))) + #if BSP_PRV_PLL2_SUPPORTED + && !((r_cgc_clock_run_state_get(CGC_CLOCK_PLL2) && (r_cgc_pll2_clocksource_get() == clock_source))) + #endif + , FSP_ERR_IN_USE); #endif @@ -792,6 +914,16 @@ fsp_err_t R_CGC_OscStopDetectEnable (cgc_ctrl_t * const p_ctrl) /* Verify p_instance_ctrl is not NULL and the module is open. */ fsp_err_t err = r_cgc_common_parameter_checking(p_instance_ctrl); FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + #if defined(BSP_TZ_NONSECURE_BUILD) && BSP_TZ_NONSECURE_BUILD + + /* The NMI must be configured to TrustZone Non-secure in order to be used in a Non-secure project. */ + FSP_ASSERT(0U != (SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk)); + #elif defined(BSP_TZ_SECURE_BUILD) && BSP_TZ_SECURE_BUILD + + /* The NMI must be configured to TrustZone Secure in order to be used in a Secure project. */ + FSP_ASSERT(0U == (SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk)); + #endif #else FSP_PARAMETER_NOT_USED(p_instance_ctrl); #endif @@ -960,6 +1092,56 @@ fsp_err_t R_CGC_OscStopStatusClear (cgc_ctrl_t * const p_ctrl) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements cgc_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. + **********************************************************************************************************************/ +fsp_err_t R_CGC_CallbackSet (cgc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(cgc_callback_args_t *), + void const * const p_context, + cgc_callback_args_t * const p_callback_memory) +{ + cgc_instance_ctrl_t * p_ctrl = (cgc_instance_ctrl_t *) p_api_ctrl; + +#if BSP_TZ_SECURE_BUILD + bool callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + +#if CGC_CFG_PARAM_CHECKING_ENABLE + + /* Verify p_ctrl is not NULL and the module is open. */ + fsp_err_t err = r_cgc_common_parameter_checking(p_ctrl); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + /* Verify that the callback is not NULL. */ + FSP_ASSERT(NULL != p_callback); + + #if BSP_TZ_SECURE_BUILD + if (!callback_is_secure) + { + FSP_ASSERT(NULL != p_callback_memory); + } + #endif +#endif + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = callback_is_secure; +#endif + + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /******************************************************************************************************************//** * Closes the CGC module. Implements @ref cgc_api_t::close. * @@ -1037,9 +1219,12 @@ static fsp_err_t r_cgc_common_parameter_checking (cgc_instance_ctrl_t * p_instan static void r_cgc_pre_change (cgc_prv_change_t change) { #if !BSP_CFG_USE_LOW_VOLTAGE_MODE + #if BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM /* Disable flash cache. */ - R_FCACHE->FCACHEE = 0U; + R_BSP_FlashCacheDisable(); + #endif + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); #endif if (CGC_PRV_CHANGE_LPM_CGC == change) @@ -1072,13 +1257,9 @@ static void r_cgc_post_change (cgc_prv_change_t change) #if !BSP_CFG_USE_LOW_VOLTAGE_MODE R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); - - /* Invalidate flash cache. */ - R_FCACHE->FCACHEIV = 1U; - FSP_HARDWARE_REGISTER_WAIT(R_FCACHE->FCACHEIV, 0U); - - /* Enable flash cache. */ - R_FCACHE->FCACHEE = 1U; + #if BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM + R_BSP_FlashCacheEnable(); + #endif #endif } @@ -1104,6 +1285,9 @@ static bool r_cgc_subosc_mode_possible (uint32_t sckdivcr) if ((((!R_SYSTEM->HOCOCR) || (!R_SYSTEM->MOCOCR)) || (!R_SYSTEM->MOSCCR)) #if BSP_PRV_PLL_SUPPORTED || (!R_SYSTEM->PLLCR) + #endif + #if BSP_PRV_PLL2_SUPPORTED + || (!R_SYSTEM->PLL2CR) #endif ) { @@ -1163,7 +1347,11 @@ static bool r_cgc_low_speed_or_voltage_mode_possible (uint32_t sckdivcr, uint8_t #if BSP_PRV_PLL_SUPPORTED /* Low speed mode is only possible if the PLL is stopped. */ - return (bool) R_SYSTEM->PLLCR; + return (bool) R_SYSTEM->PLLCR + #if BSP_PRV_PLL2_SUPPORTED + || R_SYSTEM->PLL2CR + #endif + ; #else /* BSP_PRV_PLL_SUPPORTED */ return true; #endif @@ -1454,10 +1642,10 @@ static fsp_err_t r_cgc_pll_hz_calculate (cgc_pll_cfg_t const * const p_pll_cfg, #if CGC_CFG_PARAM_CHECKING_ENABLE - /* The PLL output frequency must be between 120 MHz and 240 MHz on this MCU (see Table 9.1 "Specifications of the + /* The PLL output frequency must be between 120 MHz and 240 MHz on most MCUs (see Table 9.1 "Specifications of the * clock generation circuit for the clock sources" in the RA6M3 manual R01UH0886EJ0100). */ FSP_ASSERT(pll_hz >= CGC_PRV_PLLCCR_PLL_MIN_HZ); - FSP_ASSERT(pll_hz <= CGC_PRV_PLLCCR_PLL_MAX_HZ); + FSP_ASSERT(pll_hz <= BSP_FEATURE_CGC_PLLCCR_MAX_HZ); #endif #else // 2U == BSP_FEATURE_CGC_PLLCCR_TYPE uint32_t multiplier = (p_pll_cfg->multiplier + 1U) >> 1; @@ -1560,6 +1748,20 @@ static inline cgc_clock_t r_cgc_pll_clocksource_get (void) #endif +#if BSP_PRV_PLL2_SUPPORTED && CGC_CFG_PARAM_CHECKING_ENABLE + +/*******************************************************************************************************************//** + * This function returns the PLL2 clock source. + * + * @return PLL2 clock source + **********************************************************************************************************************/ +static inline cgc_clock_t r_cgc_pll2_clocksource_get (void) +{ + return R_SYSTEM->PLL2CCR_b.PL2SRCSEL == 1U ? CGC_CLOCK_HOCO : CGC_CLOCK_MAIN_OSC; +} + +#endif + #if BSP_PRV_PLL_SUPPORTED /*******************************************************************************************************************//** @@ -1568,6 +1770,7 @@ static inline cgc_clock_t r_cgc_pll_clocksource_get (void) * @param[in] p_pll_cfg Pointer to clock system configuration * @param[out] p_pll_hz Pointer to store calculated PLL frequency * @param[out] p_pllccr Pointer to store calculated PLLCCR value + * @param[out] pll PLL to be configured (if PLL2 is supported) * * @retval FSP_SUCCESS No errors detected in PLL configuration. * @retval FSP_ERR_ASSERTION Invalid input argument. @@ -1575,21 +1778,44 @@ static inline cgc_clock_t r_cgc_pll_clocksource_get (void) **********************************************************************************************************************/ static fsp_err_t r_cgc_pllccr_pll_hz_calculate (cgc_pll_cfg_t const * const p_pll_cfg, uint32_t * const p_pll_hz, - uint32_t * const p_pllccr) + uint32_t * const p_pllccr, + cgc_clock_t pll) { + #if !BSP_PRV_PLL2_SUPPORTED + FSP_PARAMETER_NOT_USED(pll); + #endif + /* Calculate the PLLCCR register. */ uint32_t pllccr = r_cgc_pllccr_calculate(p_pll_cfg); - /* PLLCCR cannot be changed while PLL is running. Verify requested PLLCCR value is unchanged or the PLL is - * currently stopped. */ - FSP_ERROR_RETURN( #if 1U == BSP_FEATURE_CGC_PLLCCR_TYPE - (R_SYSTEM->PLLCCR == pllccr) - #else // 2U == BSP_FEATURE_CGC_PLLCCR_TYPE - (R_SYSTEM->PLLCCR2 == pllccr) + volatile uint16_t * p_pllccr_reg; + #else + volatile uint8_t * p_pllccr_reg; + #endif + + #if BSP_PRV_PLL2_SUPPORTED + if (CGC_CLOCK_PLL == pll) #endif - || (CGC_PRV_CLOCK_STATE_STOPPED == r_cgc_clock_run_state_get(CGC_CLOCK_PLL)), - FSP_ERR_CLOCK_ACTIVE); + { + #if 1U == BSP_FEATURE_CGC_PLLCCR_TYPE + p_pllccr_reg = &(R_SYSTEM->PLLCCR); + #else + p_pllccr_reg = &(R_SYSTEM->PLLCCR2); + #endif + } + + #if BSP_PRV_PLL2_SUPPORTED + else + { + p_pllccr_reg = &(R_SYSTEM->PLL2CCR); + } + #endif + + /* PLLCCR cannot be changed while PLL is running. Verify requested PLLCCR value is unchanged or the PLL is + * currently stopped. */ + FSP_ERROR_RETURN((*p_pllccr_reg == pllccr) || (CGC_PRV_CLOCK_STATE_STOPPED == r_cgc_clock_run_state_get(pll)), + FSP_ERR_CLOCK_ACTIVE); /* Calculate the new PLL frequency. Parameter checking is performed during this calculation if parameter * checking is enabled, but the calculation is required even if parameter checking is not enabled. */ @@ -1650,9 +1876,46 @@ static void r_cgc_nmi_internal_callback (bsp_grp_irq_t irq) if (NULL != gp_cgc_ctrl->p_callback) { cgc_callback_args_t args; - args.event = CGC_EVENT_OSC_STOP_DETECT; - args.p_context = gp_cgc_ctrl->p_context; + + cgc_callback_args_t * p_args = gp_cgc_ctrl->p_callback_memory; + if (NULL == p_args) + { + p_args = &args; + } + else + { + args = *p_args; + } + + p_args->event = CGC_EVENT_OSC_STOP_DETECT; + p_args->p_context = gp_cgc_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (gp_cgc_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + gp_cgc_ctrl->p_callback(&args); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + cgc_prv_ns_callback p_callback = (cgc_prv_ns_callback) (gp_cgc_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. */ gp_cgc_ctrl->p_callback(&args); +#endif + + if (NULL != gp_cgc_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *gp_cgc_ctrl->p_callback_memory = args; + } } } } diff --git a/ra/fsp/src/r_ctsu/r_ctsu.c b/ra/fsp/src/r_ctsu/r_ctsu.c index 69bcaedcb..433deed0d 100644 --- a/ra/fsp/src/r_ctsu/r_ctsu.c +++ b/ra/fsp/src/r_ctsu/r_ctsu.c @@ -32,105 +32,120 @@ **********************************************************************************************************************/ /** "CTSU" in ASCII, used to determine if device is open. */ -#define CTSU_OPEN (0x43545355U) +#define CTSU_OPEN (0x43545355U) /* Macro definitions for register setting */ -#define CTSU_PON_OFF (0) // CTSU hardware macro power off -#define CTSU_PON_ON (1) // CTSU hardware macro power on -#define CTSU_CSW_OFF (0) // Capacitance switch turned off -#define CTSU_CSW_ON (1) // Capacitance switch turned on - -#define CTSU_CR1_MODIFY_BIT (0xC8) // MD1, MD0, ATUNE1 -#define CTSU_SOVF (0x20) // Overflow bit -#define CTSU_CORRECTION_AVERAGE (32) -#define CTSU_SHIFT_AMOUNT (15) -#define CTSU_COUNT_MAX (0xFFFF) -#define CTSU_PCLKB_FREQ_MHZ (1000000) -#define CTSU_PCLKB_FREQ_RANGE1 (32) -#define CTSU_PCLKB_FREQ_RANGE2 (64) -#define CTSU_PCLKB_FREQ_RANGE3 (128) -#define CTSU_WAIT_TIME (500) +#define CTSU_PON_OFF (0) // CTSU hardware macro power off +#define CTSU_PON_ON (1) // CTSU hardware macro power on +#define CTSU_CSW_OFF (0) // Capacitance switch turned off +#define CTSU_CSW_ON (1) // Capacitance switch turned on + +#define CTSU_CR1_MODIFY_BIT (0xC8) // MD1, MD0, ATUNE1 +#define CTSU_SOVF (0x20) // Overflow bit +#define CTSU_CORRECTION_AVERAGE (32) +#define CTSU_SHIFT_AMOUNT (15) +#define CTSU_COUNT_MAX (0xFFFF) +#define CTSU_PCLKB_FREQ_MHZ (1000000) +#define CTSU_PCLKB_FREQ_RANGE1 (32) +#define CTSU_PCLKB_FREQ_RANGE2 (64) +#define CTSU_PCLKB_FREQ_RANGE3 (128) +#define CTSU_WAIT_TIME (500) /* Macro definitions for initial offset tuning */ -#define CTSU_TUNING_MAX (0x03FF) -#define CTSU_TUNING_MIN (0x0000) -#define CTSU_TUNING_VALUE_SELF (15360) -#define CTSU_TUNING_VALUE_MUTUAL (10240) +#define CTSU_TUNING_MAX (0x03FF) +#define CTSU_TUNING_MIN (0x0000) +#define CTSU_TUNING_VALUE_SELF (15360) +#define CTSU_TUNING_VALUE_MUTUAL (10240) +#define CTSU_TUNING_OT_COUNT (25) #if (BSP_FEATURE_CTSU_VERSION == 2) - #define CTSU_SST_RECOMMEND (0x1F) // The value of SST should be fixed - #define CTSU_SNUM_RECOMMEND (0x07) // The value of SNUM should be fixed - #define CTSU_SNUM_MAX (0xFF) // The maximum value of SNUM - #define CTSU_ICOMP0 (0x80) // ICOMP0 bit - #define CTSU_ICOMP1 (0x40) // ICOMP1 bit - #define CTSU_ICOMPRST (0x20) // ICOMPRST bit - #define CTSU_CR0_MODIFY_BIT (0xC0) // TXVSEL - #define CTSU_CR2_MODIFY_BIT (0x33) // POSEL, ATUNE2, MD2 - #define CTSU_SUADJ_RECOMMEND (0x0080) - #define CTSU_MUTUAL_BUF_SIZE (CTSU_CFG_NUM_SUMULTI * 2) - #define CTSU_REG_TRIMA (*(uint32_t *) 0x407EC3A4) - #define CTSU_REG_TRIMB (*(uint32_t *) 0x407EC3A8) + #define CTSU_SST_RECOMMEND (0x1F) // The recommend value of SST + #define CTSU_SST_RECOMMEND_CURRENT (0x3F) // The recommend value of SST with current + #define CTSU_SNUM_RECOMMEND (0x07) // The value of SNUM should be fixed + #define CTSU_SNUM_MAX (0xFF) // The maximum value of SNUM + #define CTSU_ICOMP0 (0x80) // ICOMP0 bit + #define CTSU_ICOMP1 (0x40) // ICOMP1 bit + #define CTSU_ICOMPRST (0x20) // ICOMPRST bit + #define CTSU_CR0_MODIFY_BIT (0xC0) // TXVSEL + #define CTSU_CR2_MODIFY_BIT (0x33) // POSEL, ATUNE2, MD2 + #define CTSU_SUADJ_MAX (0xFF) // The maximum value of SUADJx + #define CTSU_SUADJ_SSCNT_ADJ (0x20) // The value of Adjusting SCADJx by SSCNT + #define CTSU_MUTUAL_BUF_SIZE (CTSU_CFG_NUM_SUMULTI * 2) + #define CTSU_REG_TRIMA (*(uint32_t *) 0x407EC3A4) + #define CTSU_REG_TRIMB (*(uint32_t *) 0x407EC3A8) /* Macro definitions for correction */ - #define CTSU_CORRECTION_STD_VAL (19200) // 20UC standard value - #define CTSU_CORRECTION_STD_UNIT (1920) // 2UC value - #define CTSU_CORRECTION_SUMULTI (0x20) // SUMULTI step - #define CTSU_CORRECTION_OFFSET_UNIT (120) // (CTSU_CORRECTION_STD_VAL / 256) * 2 - #define CTSU_CORRECTION_TRIMB_MAX (0xFF) - #define CTSU_CORRECTION_TRIMB_SIGN_BIT (0x80) - #define CTSU_CORRECTION_BIT10 (0x0400) - #define CTSU_CORRECTION_BIT9 (0x0200) - #define CTSU_CORRECTION_BIT8 (0x0100) - #define CTSU_CORRECTION_BIT7 (0x0080) + #if (CTSU_CFG_LOW_VOLTAGE_MODE == 0) + #define CTSU_CORRECTION_STD_VAL (19200) // 20UC standard value + #define CTSU_CORRECTION_STD_UNIT (1920) // 2UC value + #define CTSU_CORRECTION_OFFSET_UNIT (120) // (7680 / 64) + #else + #define CTSU_CORRECTION_STD_VAL (15360) // 20UC standard value * 0.8 + #define CTSU_CORRECTION_STD_UNIT (1536) // 2UC value * 0.8 + #define CTSU_CORRECTION_OFFSET_UNIT (96) // (7680 / 64) * 0.8 + #endif + #define CTSU_CORRECTION_SUMULTI (0x20) // SUMULTI step + #define CTSU_CORRECTION_TRIMB_MAX (0xFF) + #define CTSU_CORRECTION_TRIMB_SIGN_BIT (0x80) + #define CTSU_CORRECTION_RTRIM_THRESHOLD1 (0xA0) + #define CTSU_CORRECTION_RTRIM_THRESHOLD2 (0x50) + #define CTSU_CORRECTION_TRIMB_THRESHOLD1 (0xC0) + #define CTSU_CORRECTION_TRIMB_THRESHOLD2 (0x3F) + #define CTSU_CORRECTION_BIT10 (0x0400) + #define CTSU_CORRECTION_BIT9 (0x0200) + #define CTSU_CORRECTION_BIT8 (0x0100) + #define CTSU_CORRECTION_BIT7 (0x0080) #if (CTSU_CFG_NUM_CFC != 0) - #define CTSU_CORRCFC_POINT_NUM (5) // number of table - #define CTSU_CORRCFC_CENTER_POINT ((CTSU_CORRCFC_POINT_NUM - 1) / 2) // number of center point - #define CTSU_CORRCFC_TS_MAX (36) // Maximum number of TS terminal - #define CTSU_CORRCFC_SHIFT8 (8) // Definition of 8bit shift + #define CTSU_CORRCFC_POINT_NUM (5) // number of table + #define CTSU_CORRCFC_CENTER_POINT ((CTSU_CORRCFC_POINT_NUM - 1) / 2) // number of center point + #define CTSU_CORRCFC_TS_MAX (36) // Maximum number of TS terminal + #define CTSU_CORRCFC_SHIFT8 (8) // Definition of 8bit shift #endif #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) - #define CTSU_REG_ADCTDR (*(uint16_t *) 0x4005C040) // ADCTDR address - #define CTSU_CALIB_REF (6140000 / CTSU_CFG_VCC_MV) // 1.5V Reference value (4096 * 1500) - #define CTSU_CALIB_AVERAGE_TIME (64) // ADC average time - #define CTSU_CALIB_THRESHOLD ((0x1000 * 4) / CTSU_CFG_VCC_MV) // RTRIM calib threshold - #define CTSU_CALIB_CTSUSO (0x3C0) // 150uA offset - #define CTSU_CALIB_ADSSTRL (0x3F) // Sampling time + #define CTSU_REG_ADCTDR (*(uint16_t *) 0x4005C040) // ADCTDR address + #if (CTSU_CFG_LOW_VOLTAGE_MODE == 0) + #define CTSU_CALIB_REF ((6144000 * 10) / CTSU_CFG_VCC_MV) // 1.5V Reference value (4096 * 1500 * 10) + #else + #define CTSU_CALIB_REF ((4915200 * 10) / CTSU_CFG_VCC_MV) // 1.2V Reference value (4096 * 1200 * 10) + #endif + #define CTSU_CALIB_AVERAGE_TIME (64) // ADC average time + #define CTSU_CALIB_THRESHOLD ((0x1000 * 4) / CTSU_CFG_VCC_MV) // RTRIM calib threshold + #define CTSU_CALIB_CTSUSO (0x3C0) // 150uA offset + #define CTSU_CALIB_ADSSTRL (0x3F) // Sampling time #endif #endif #if (BSP_FEATURE_CTSU_VERSION == 1) - #define CTSU_TXVSEL (0x80) // TXVSEL bit - #define CTSU_SST_RECOMMEND (0x10) // The value of SST should be fixed to 00010000b - #define CTSU_SNUM_MAX (0x3F) // The maximum value of SNUM - #define CTSU_SDPA_MAX (0x1F) // The maximum value of SDPA - #define CTSU_PRRATIO_RECOMMEND (3) // Recommended setting value - #define CTSU_PRMODE_62_PULSES (2) // 62 pulses (recommended setting value) - #define CTSU_SOFF_ON (0) // High-pass noise reduction function turned on - #define CTSU_SSMOD (0) // The value of SSMOD should be fixed to 00b - #define CTSU_SSCNT (3) // The value of SSCNT should be fixed to 11b - #define CTSU_RICOA_RECOMMEND (0x0F) // Recommended setting value - #define CTSU_ICOG_100 (0) // ICOG = 100% - #define CTSU_ICOG_66 (1) // ICOG = 66% - #define CTSU_ICOG_50 (2) // ICOG = 50% - #define CTSU_ICOG_40 (3) // ICOG = 40% - #define CTSU_MUTUAL_BUF_SIZE (1) + #define CTSU_TXVSEL (0x80) // TXVSEL bit + #define CTSU_SST_RECOMMEND (0x10) // The value of SST should be fixed to 00010000b + #define CTSU_SNUM_MAX (0x3F) // The maximum value of SNUM + #define CTSU_SDPA_MAX (0x1F) // The maximum value of SDPA + #define CTSU_PRRATIO_RECOMMEND (3) // Recommended setting value + #define CTSU_PRMODE_62_PULSES (2) // 62 pulses (recommended setting value) + #define CTSU_SOFF_ON (0) // High-pass noise reduction function turned on + #define CTSU_SSMOD (0) // The value of SSMOD should be fixed to 00b + #define CTSU_SSCNT (3) // The value of SSCNT should be fixed to 11b + #define CTSU_RICOA_RECOMMEND (0x0F) // Recommended setting value + #define CTSU_ICOG_100 (0) // ICOG = 100% + #define CTSU_ICOG_66 (1) // ICOG = 66% + #define CTSU_ICOG_50 (2) // ICOG = 50% + #define CTSU_ICOG_40 (3) // ICOG = 40% + #define CTSU_MUTUAL_BUF_SIZE (1) /* Macro definitions for correction */ - #define CTSU_REGISTER_CTSUERRS (*(uint16_t *) 0x4008101c) - #define CTSU_CTSUERRS_VALUE (0x0082) #if (BSP_CFG_MCU_PART_SERIES == 2) || (BSP_CFG_MCU_PART_SERIES == 4) - #define CTSU_CORRECTION_1ST_STD_VAL (40960UL) // ICOG = 66% - #define CTSU_CORRECTION_2ND_STD_VAL (24824) // ICOG = 40%, (x = 40960 * 40 / 66) - #define CTSU_WAFER_PARAMETER (0.96523525) - #define CTSU_ICOG_RECOMMEND (CTSU_ICOG_66) // Recommended setting value + #define CTSU_CORRECTION_1ST_STD_VAL (40960UL) // ICOG = 66% + #define CTSU_CORRECTION_2ND_STD_VAL (24824) // ICOG = 40%, (x = 40960 * 40 / 66) + #define CTSU_WAFER_PARAMETER (0.96523525) + #define CTSU_ICOG_RECOMMEND (CTSU_ICOG_66) // Recommended setting value #endif #if (BSP_CFG_MCU_PART_SERIES == 6) - #define CTSU_CORRECTION_1ST_STD_VAL (27306UL) // ICOG = 66%, (x = 40960 * 66 / 100) - #define CTSU_CORRECTION_2ND_STD_VAL (16384) // ICOG = 40%, (x = 40960 * 40 / 100) - #define CTSU_WAFER_PARAMETER (1) - #define CTSU_ICOG_RECOMMEND (CTSU_ICOG_100) // Recommended setting value + #define CTSU_CORRECTION_1ST_STD_VAL (27306UL) // ICOG = 66%, (x = 40960 * 66 / 100) + #define CTSU_CORRECTION_2ND_STD_VAL (16384) // ICOG = 40%, (x = 40960 * 40 / 100) + #define CTSU_WAFER_PARAMETER (1) + #define CTSU_ICOG_RECOMMEND (CTSU_ICOG_100) // Recommended setting value #endif #endif @@ -148,14 +163,19 @@ typedef struct st_ctsu_correction_calc typedef struct st_ctsu_correction_multi { - ctsu_range_t range; - uint16_t snum; uint16_t pri[CTSU_CFG_NUM_SUMULTI]; uint16_t snd[CTSU_CFG_NUM_SUMULTI]; uint32_t offset[CTSU_CFG_NUM_SUMULTI]; + int32_t offset_error[CTSU_CFG_NUM_SUMULTI]; ctsu_correction_calc_t calc; } ctsu_correction_multi_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile ctsu_prv_ns_callback)(ctsu_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile ctsu_prv_ns_callback)(ctsu_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -185,6 +205,7 @@ static void ctsu_correction_data_get(ctsu_instance_ctrl_t * const p_instance_ctr #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) static void ctsu_correction_calib_rtrim(ctsu_instance_ctrl_t * const p_instance_ctrl); +static void ctsu_correction_offset_adjust(uint16_t * p_adj_data, uint16_t raw_data, int32_t offset_error); #endif #endif @@ -208,7 +229,7 @@ static const fsp_version_t g_ctsu_version = .code_version_minor = CTSU_CODE_VERSION_MINOR }; static uint16_t g_ctsu_element_index = 0; -static uint8_t g_ctsu_tuning_complete[CTSU_CFG_NUM_SELF_ELEMENTS + CTSU_CFG_NUM_MUTUAL_ELEMENTS]; +static uint8_t g_ctsu_tuning_count[CTSU_CFG_NUM_SELF_ELEMENTS + CTSU_CFG_NUM_MUTUAL_ELEMENTS]; static int32_t g_ctsu_tuning_diff[CTSU_CFG_NUM_SELF_ELEMENTS + CTSU_CFG_NUM_MUTUAL_ELEMENTS]; static ctsu_ctsuwr_t g_ctsu_ctsuwr[(CTSU_CFG_NUM_SELF_ELEMENTS + CTSU_CFG_NUM_MUTUAL_ELEMENTS) * CTSU_CFG_NUM_SUMULTI]; #if (CTSU_CFG_NUM_SELF_ELEMENTS != 0) @@ -246,11 +267,12 @@ static const ioport_cfg_t g_ctsu_tscap_pin_cfg = **********************************************************************************************************************/ const ctsu_api_t g_ctsu_on_ctsu = { - .open = R_CTSU_Open, - .scanStart = R_CTSU_ScanStart, - .dataGet = R_CTSU_DataGet, - .close = R_CTSU_Close, - .versionGet = R_CTSU_VersionGet, + .open = R_CTSU_Open, + .scanStart = R_CTSU_ScanStart, + .dataGet = R_CTSU_DataGet, + .close = R_CTSU_Close, + .callbackSet = R_CTSU_CallbackSet, + .versionGet = R_CTSU_VersionGet, }; /*******************************************************************************************************************//** @@ -284,6 +306,7 @@ fsp_err_t R_CTSU_Open (ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cf #if (BSP_FEATURE_CTSU_VERSION == 2) uint16_t i; uint32_t pclkb_mhz; + uint16_t suadj[3]; #endif #if (CTSU_CFG_PARAM_CHECKING_ENABLE == 1) @@ -311,6 +334,7 @@ fsp_err_t R_CTSU_Open (ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cf #endif p_instance_ctrl->state = CTSU_STATE_INIT; + /* Save configurations. */ p_instance_ctrl->p_ctsu_cfg = p_cfg; /* Initialize driver control structure (address setting) */ @@ -336,10 +360,10 @@ fsp_err_t R_CTSU_Open (ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cf g_ctsu_mutual_element_index = (uint8_t) (g_ctsu_mutual_element_index + p_instance_ctrl->num_elements); } #endif - p_instance_ctrl->p_tuning_complete = &g_ctsu_tuning_complete[g_ctsu_element_index]; - p_instance_ctrl->p_tuning_diff = &g_ctsu_tuning_diff[g_ctsu_element_index]; - p_instance_ctrl->p_ctsuwr = &g_ctsu_ctsuwr[g_ctsu_element_index * CTSU_CFG_NUM_SUMULTI]; - g_ctsu_element_index = (uint8_t) (g_ctsu_element_index + p_instance_ctrl->num_elements); + p_instance_ctrl->p_tuning_count = &g_ctsu_tuning_count[g_ctsu_element_index]; + p_instance_ctrl->p_tuning_diff = &g_ctsu_tuning_diff[g_ctsu_element_index]; + p_instance_ctrl->p_ctsuwr = &g_ctsu_ctsuwr[g_ctsu_element_index * CTSU_CFG_NUM_SUMULTI]; + g_ctsu_element_index = (uint8_t) (g_ctsu_element_index + p_instance_ctrl->num_elements); /* Set Value */ p_instance_ctrl->num_moving_average = p_cfg->num_moving_average; @@ -401,8 +425,8 @@ fsp_err_t R_CTSU_Open (ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cf #endif for (element_id = 0; element_id < p_instance_ctrl->num_elements; element_id++) { - p_instance_ctrl->p_tuning_complete[element_id] = 0; - p_instance_ctrl->p_tuning_diff[element_id] = 0; + p_instance_ctrl->p_tuning_count[element_id] = 0; + p_instance_ctrl->p_tuning_diff[element_id] = 0; element_cfgs = (p_cfg->p_elements + element_id); #if (BSP_FEATURE_CTSU_VERSION == 2) if (CTSU_MODE_CURRENT_SCAN == p_cfg->md) @@ -544,6 +568,7 @@ fsp_err_t R_CTSU_Open (ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cf /* High resolution pulse mode */ R_CTSU->CTSUCRA_b.SDPSEL = 1; + R_CTSU->CTSUCRA_b.FCMODE = 1; R_CTSU->CTSUSST = CTSU_SST_RECOMMEND; R_CTSU->CTSUCALIB_b.CCOCLK = 0; R_CTSU->CTSUCALIB_b.SUCLKEN = 0; @@ -576,23 +601,48 @@ fsp_err_t R_CTSU_Open (ctsu_ctrl_t * const p_ctrl, ctsu_cfg_t const * const p_cf p_instance_ctrl->p_corrcfc_info = &g_ctsu_corrcfc_info; #endif - R_CTSU->CTSUCRA_b.LOAD = 1; - R_CTSU->CTSUCALIB_b.CCOCLK = 1; - R_CTSU->CTSUCALIB_b.SUCLKEN = 1; + R_CTSU->CTSUCRA_b.LOAD = 1; + R_CTSU->CTSUCRB_b.SSCNT = 1; + R_CTSU->CTSUCALIB_b.SUCARRY = 0; + R_CTSU->CTSUCALIB_b.CCOCALIB = 0; + R_CTSU->CTSUCALIB_b.CCOCLK = 1; + R_CTSU->CTSUCALIB_b.TSOC = 0; + R_CTSU->CTSUCALIB_b.SUCLKEN = 1; + + /* Read SUADJD byte */ + suadj[0] = (uint16_t) ((CTSU_REG_TRIMA >> 16) & CTSU_SUADJ_MAX); + + /* Adjust multi freq */ + suadj[1] = (uint16_t) ((suadj[0] * (CTSU_CFG_SUMULTI1 + 1)) / (CTSU_CFG_SUMULTI0 + 1)); + suadj[2] = (uint16_t) ((suadj[0] * (CTSU_CFG_SUMULTI2 + 1)) / (CTSU_CFG_SUMULTI0 + 1)); - R_CTSU->CTSUCRA_b.FCMODE = 0; - R_CTSU->CTSUSUCLK0 = (uint16_t) (CTSU_CFG_SUMULTI0 << 8) | CTSU_SUADJ_RECOMMEND; - R_CTSU->CTSUSUCLK1 = (uint16_t) (CTSU_CFG_SUMULTI1 << 8) | CTSU_SUADJ_RECOMMEND; - R_CTSU->CTSUSUCLK2 = (uint16_t) (CTSU_CFG_SUMULTI2 << 8) | CTSU_SUADJ_RECOMMEND; - R_CTSU->CTSUCRA_b.FCMODE = 1; + /* Adjust SSCNT setting */ + suadj[0] = (uint16_t) (suadj[0] - (CTSU_SUADJ_SSCNT_ADJ * R_CTSU->CTSUCRB_b.SSCNT)); + suadj[1] = (uint16_t) (suadj[1] - (CTSU_SUADJ_SSCNT_ADJ * R_CTSU->CTSUCRB_b.SSCNT)); + suadj[2] = (uint16_t) (suadj[2] - (CTSU_SUADJ_SSCNT_ADJ * R_CTSU->CTSUCRB_b.SSCNT)); + + /* Set CTSUSUCLK register */ + R_CTSU->CTSUCRA_b.SDPSEL = 0; + R_CTSU->CTSUSUCLK0 = (uint16_t) (CTSU_CFG_SUMULTI0 << 8) | suadj[0]; + R_CTSU->CTSUSUCLK1 = (uint16_t) (CTSU_CFG_SUMULTI1 << 8) | suadj[1]; + R_CTSU->CTSUSUCLK2 = (uint16_t) (CTSU_CFG_SUMULTI2 << 8) | suadj[2]; + R_CTSU->CTSUCRA_b.SDPSEL = 1; #endif p_instance_ctrl->p_correction_info = &g_ctsu_correction_info; p_instance_ctrl->rd_index = 0; p_instance_ctrl->wr_index = 0; - p_instance_ctrl->p_callback = p_cfg->p_callback; p_instance_ctrl->state = CTSU_STATE_IDLE; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_instance_ctrl->callback_is_secure = true; +#endif + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + /* Mark driver as open */ p_instance_ctrl->open = CTSU_OPEN; @@ -672,6 +722,7 @@ fsp_err_t R_CTSU_ScanStart (ctsu_ctrl_t * const p_ctrl) R_CTSU->CTSUCR2 = (uint8_t) (temp | (p_instance_ctrl->ctsucr2 & CTSU_CR2_MODIFY_BIT)); // POSEL, ATUNE2, MD2 if (CTSU_MODE_CURRENT_SCAN == p_instance_ctrl->p_ctsu_cfg->md) { + R_CTSU->CTSUSST = CTSU_SST_RECOMMEND_CURRENT; R_CTSU->CTSUCRA_b.DCMODE = 1; R_CTSU->CTSUCRA_b.DCBACK = 1; R_CTSU->CTSUMCH_b.MCA0 = 1; @@ -681,6 +732,7 @@ fsp_err_t R_CTSU_ScanStart (ctsu_ctrl_t * const p_ctrl) } else { + R_CTSU->CTSUSST = CTSU_SST_RECOMMEND; R_CTSU->CTSUCRA_b.DCMODE = 0; R_CTSU->CTSUCRA_b.DCBACK = 0; R_CTSU->CTSUMCH_b.MCA0 = 1; @@ -708,6 +760,7 @@ fsp_err_t R_CTSU_ScanStart (ctsu_ctrl_t * const p_ctrl) #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) else { + R_CTSU->CTSUSST = CTSU_SST_RECOMMEND; ctsu_correction_scan_start(); } #endif @@ -749,14 +802,11 @@ fsp_err_t R_CTSU_ScanStart (ctsu_ctrl_t * const p_ctrl) #endif #endif - /* Initialize CTSU hardware control block */ - R_CTSU->CTSUCR0 |= 0x10; + p_instance_ctrl->state = CTSU_STATE_SCANNING; - /* CTSU scan start */ + /* Set CTSU_STRT bit to start scan */ R_CTSU->CTSUCR0 |= 0x01; ///< CTSU_STRT - p_instance_ctrl->state = CTSU_STATE_SCANNING; - return err; } @@ -847,6 +897,42 @@ fsp_err_t R_CTSU_DataGet (ctsu_ctrl_t * const p_ctrl, uint16_t * p_data) return err; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements ctsu_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. + **********************************************************************************************************************/ +fsp_err_t R_CTSU_CallbackSet (ctsu_ctrl_t * const p_api_ctrl, + void ( * p_callback)(ctsu_callback_args_t *), + void const * const p_context, + ctsu_callback_args_t * const p_callback_memory) +{ + ctsu_instance_ctrl_t * p_ctrl = (ctsu_instance_ctrl_t *) p_api_ctrl; + +#if (CTSU_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(CTSU_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * @brief Disables specified CTSU control block. Implements @ref ctsu_api_t::close. * @@ -941,9 +1027,9 @@ fsp_err_t ctsu_transfer_open (ctsu_instance_ctrl_t * const p_instance_ctrl) p_info->dest_addr_mode = TRANSFER_ADDR_MODE_FIXED; p_info->size = TRANSFER_SIZE_4_BYTE; p_info->p_dest = (void *) &R_CTSU->CTSUSO; - p_info->mode = TRANSFER_MODE_REPEAT; - p_info->repeat_area = TRANSFER_REPEAT_AREA_SOURCE; - p_info->length = (uint16_t) (p_instance_ctrl->num_elements * CTSU_CFG_NUM_SUMULTI); + p_info->mode = TRANSFER_MODE_BLOCK; + p_info->repeat_area = TRANSFER_REPEAT_AREA_DESTINATION; + p_info->length = 1; #endif #if (BSP_FEATURE_CTSU_VERSION == 1) p_info->dest_addr_mode = TRANSFER_ADDR_MODE_INCREMENTED; @@ -972,9 +1058,9 @@ fsp_err_t ctsu_transfer_open (ctsu_instance_ctrl_t * const p_instance_ctrl) p_info->src_addr_mode = TRANSFER_ADDR_MODE_FIXED; p_info->size = TRANSFER_SIZE_2_BYTE; p_info->p_dest = p_instance_ctrl->p_mutual_raw; - p_info->mode = TRANSFER_MODE_REPEAT; - p_info->repeat_area = TRANSFER_REPEAT_AREA_DESTINATION; - p_info->length = (uint16_t) (p_instance_ctrl->num_elements * CTSU_CFG_NUM_SUMULTI); + p_info->mode = TRANSFER_MODE_BLOCK; + p_info->repeat_area = TRANSFER_REPEAT_AREA_SOURCE; + p_info->length = 1; #endif #if (BSP_FEATURE_CTSU_VERSION == 1) p_info->src_addr_mode = TRANSFER_ADDR_MODE_INCREMENTED; @@ -1034,44 +1120,44 @@ fsp_err_t ctsu_transfer_configure (ctsu_instance_ctrl_t * const p_instance_ctrl) p_transfer = p_instance_ctrl->p_ctsu_cfg->p_transfer_tx; p_info = p_transfer->p_cfg->p_info; #if (BSP_FEATURE_CTSU_VERSION == 2) + p_info->length = 1; if (CTSU_CORRECTION_RUN == g_ctsu_correction_info.status) { - p_info->length = 1; - p_info->p_src = (void *) &(g_ctsu_correction_info.ctsuwr); + p_info->num_blocks = 1; + p_info->p_src = (void *) &(g_ctsu_correction_info.ctsuwr); } #if (CTSU_CFG_NUM_CFC != 0) else if (CTSU_CORRECTION_RUN == g_ctsu_corrcfc_info.status) { - p_info->length = 1; - p_info->p_src = (void *) &(g_ctsu_corrcfc_info.ctsuwr); + p_info->num_blocks = 1; + p_info->p_src = (void *) &(g_ctsu_corrcfc_info.ctsuwr); } #endif else { if (CTSU_MODE_CURRENT_SCAN == p_instance_ctrl->p_ctsu_cfg->md) { - p_info->length = p_instance_ctrl->num_elements; + p_info->num_blocks = p_instance_ctrl->num_elements; } else { - p_info->length = (uint16_t) (p_instance_ctrl->num_elements * CTSU_CFG_NUM_SUMULTI); + p_info->num_blocks = (uint16_t) (p_instance_ctrl->num_elements * CTSU_CFG_NUM_SUMULTI); } p_info->p_src = p_instance_ctrl->p_ctsuwr; } #endif #if (BSP_FEATURE_CTSU_VERSION == 1) + p_info->length = 3; if (CTSU_CORRECTION_RUN == g_ctsu_correction_info.status) { p_info->num_blocks = 1; - p_info->length = 3; p_info->p_src = (void *) &(g_ctsu_correction_info.ctsuwr); } else { p_info->num_blocks = p_instance_ctrl->num_elements; - p_info->length = 3; p_info->p_src = p_instance_ctrl->p_ctsuwr; } #endif @@ -1082,30 +1168,31 @@ fsp_err_t ctsu_transfer_configure (ctsu_instance_ctrl_t * const p_instance_ctrl) p_transfer = p_instance_ctrl->p_ctsu_cfg->p_transfer_rx; p_info = p_transfer->p_cfg->p_info; #if (BSP_FEATURE_CTSU_VERSION == 2) + p_info->length = 1; if (CTSU_CORRECTION_RUN == g_ctsu_correction_info.status) { - p_info->length = 1; - p_info->p_dest = (void *) &g_ctsu_correction_info.scanbuf; - p_info->p_src = (void *) &R_CTSU->CTSUSC; + p_info->num_blocks = 1; + p_info->p_dest = (void *) &g_ctsu_correction_info.scanbuf; + p_info->p_src = (void *) &R_CTSU->CTSUSC; } #if (CTSU_CFG_NUM_CFC != 0) else if (CTSU_CORRECTION_RUN == g_ctsu_corrcfc_info.status) { - p_info->length = g_ctsu_corrcfc_info.num_ts; - p_info->p_dest = (void *) g_ctsu_corrcfc_info.scanbuf; - p_info->p_src = (void *) &R_CTSU->CTSUCFCCNT; + p_info->num_blocks = g_ctsu_corrcfc_info.num_ts; + p_info->p_dest = (void *) g_ctsu_corrcfc_info.scanbuf; + p_info->p_src = (void *) &R_CTSU->CTSUCFCCNT; } #endif else { if (CTSU_MODE_CURRENT_SCAN == p_instance_ctrl->p_ctsu_cfg->md) { - p_info->length = p_instance_ctrl->num_elements; + p_info->num_blocks = p_instance_ctrl->num_elements; } else { - p_info->length = (uint16_t) (p_instance_ctrl->num_elements * CTSU_CFG_NUM_SUMULTI); + p_info->num_blocks = (uint16_t) (p_instance_ctrl->num_elements * CTSU_CFG_NUM_SUMULTI); } p_info->p_dest = p_instance_ctrl->p_self_raw; @@ -1113,8 +1200,8 @@ fsp_err_t ctsu_transfer_configure (ctsu_instance_ctrl_t * const p_instance_ctrl) #if (CTSU_CFG_NUM_MUTUAL_ELEMENTS != 0) if (CTSU_MODE_MUTUAL_FULL_SCAN == (CTSU_MODE_MUTUAL_FULL_SCAN & p_instance_ctrl->p_ctsu_cfg->md)) { - p_info->p_dest = p_instance_ctrl->p_mutual_raw; - p_info->length = (uint16_t) (p_info->length * 2); ///< Primary and Secondary + p_info->p_dest = p_instance_ctrl->p_mutual_raw; + p_info->num_blocks = (uint16_t) (p_info->num_blocks * 2); ///< Primary and Secondary } #if (CTSU_CFG_NUM_CFC != 0) @@ -1127,16 +1214,15 @@ fsp_err_t ctsu_transfer_configure (ctsu_instance_ctrl_t * const p_instance_ctrl) } #endif #if (BSP_FEATURE_CTSU_VERSION == 1) + p_info->length = 2; if (CTSU_CORRECTION_RUN == g_ctsu_correction_info.status) { p_info->num_blocks = 1; - p_info->length = 2; p_info->p_dest = (void *) &g_ctsu_correction_info.scanbuf; } else { p_info->num_blocks = p_instance_ctrl->num_elements; - p_info->length = 2; p_info->p_dest = p_instance_ctrl->p_self_raw; #if (CTSU_CFG_NUM_MUTUAL_ELEMENTS != 0) if (CTSU_MODE_MUTUAL_FULL_SCAN == (CTSU_MODE_MUTUAL_FULL_SCAN & p_instance_ctrl->p_ctsu_cfg->md)) @@ -1173,6 +1259,7 @@ void ctsu_initial_offset_tuning (ctsu_instance_ctrl_t * const p_instance_ctrl) uint16_t corr_data[CTSU_CFG_NUM_SUMULTI]; uint16_t target_val; int32_t ctsuso; + uint32_t snum; #if (CTSU_CFG_NUM_SELF_ELEMENTS != 0) if (CTSU_MODE_SELF_MULTI_SCAN == p_instance_ctrl->p_ctsu_cfg->md) @@ -1191,7 +1278,7 @@ void ctsu_initial_offset_tuning (ctsu_instance_ctrl_t * const p_instance_ctrl) /* element_id through each element for control block */ for (element_id = 0; element_id < p_instance_ctrl->num_elements; element_id++) { - if (0 == *(p_instance_ctrl->p_tuning_complete + element_id)) + if (CTSU_TUNING_OT_COUNT != *(p_instance_ctrl->p_tuning_count + element_id)) { #if (BSP_FEATURE_CTSU_VERSION == 1) #if (CTSU_CFG_NUM_SELF_ELEMENTS != 0) @@ -1264,8 +1351,7 @@ void ctsu_initial_offset_tuning (ctsu_instance_ctrl_t * const p_instance_ctrl) p_instance_ctrl->p_ctsuwr[element_id].ctsuso0 |= ctsuso; #endif #if (BSP_FEATURE_CTSU_VERSION == 2) - element_top = (uint16_t) (element_id * CTSU_CFG_NUM_SUMULTI); - complete_flag = 1; + element_top = (uint16_t) (element_id * CTSU_CFG_NUM_SUMULTI); for (i = 0; i < CTSU_CFG_NUM_SUMULTI; i++) { #if (CTSU_CFG_NUM_SELF_ELEMENTS != 0) @@ -1281,15 +1367,13 @@ void ctsu_initial_offset_tuning (ctsu_instance_ctrl_t * const p_instance_ctrl) } #endif + snum = (p_instance_ctrl->p_ctsuwr[(element_id * CTSU_CFG_NUM_SUMULTI)].ctsuso >> 10) & + CTSU_SNUM_MAX; + corr_data[i] = (uint16_t) ((uint32_t) (corr_data[i] * (CTSU_SNUM_RECOMMEND + 1)) / (snum + 1)); + /* Calculate CTSUSO equivalent difference between current value and target value */ diff = (int32_t) (corr_data[i] - target_val) / (CTSU_CORRECTION_OFFSET_UNIT >> p_instance_ctrl->range); - /* If the difference is large, tuning value may not be able to match, so create the next opportunity */ - if ((diff > 10) || (diff < -10)) - { - complete_flag = 0; - } - ctsuso = (int32_t) (p_instance_ctrl->p_ctsuwr[element_top + i].ctsuso & CTSU_TUNING_MAX); ctsuso += diff; @@ -1297,15 +1381,24 @@ void ctsu_initial_offset_tuning (ctsu_instance_ctrl_t * const p_instance_ctrl) if (ctsuso < 0) { ctsuso = 0; - *(p_instance_ctrl->p_tuning_complete + element_id) = 1; + complete_flag++; } else if (ctsuso > CTSU_TUNING_MAX) { ctsuso = CTSU_TUNING_MAX; - *(p_instance_ctrl->p_tuning_complete + element_id) = 1; + complete_flag++; } else { + /* If the difference is large, tuning value may not be able to match, so create the next opportunity */ + if (0 == diff) + { + complete_flag++; + } + else + { + (*(p_instance_ctrl->p_tuning_count + element_id))++; + } } /* Set the result of the calculated CTSUSO */ @@ -1316,14 +1409,14 @@ void ctsu_initial_offset_tuning (ctsu_instance_ctrl_t * const p_instance_ctrl) } else { - num_complete++; + complete_flag = CTSU_CFG_NUM_SUMULTI; } - if (complete_flag) + if (CTSU_CFG_NUM_SUMULTI == complete_flag) { complete_flag = 0; num_complete++; - *(p_instance_ctrl->p_tuning_complete + element_id) = 1; + *(p_instance_ctrl->p_tuning_count + element_id) = CTSU_TUNING_OT_COUNT; } } @@ -1592,14 +1685,28 @@ void ctsu_end_isr (void) ctsu_instance_ctrl_t * p_instance_ctrl = (ctsu_instance_ctrl_t *) R_FSP_IsrContextGet(irq); ctsu_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. */ + ctsu_callback_args_t * p_args = p_instance_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; + } + /** Clear the BSP IRQ Flag */ R_BSP_IrqStatusClear(R_FSP_CurrentIrqGet()); - args.event = CTSU_EVENT_SCAN_COMPLETE; + p_args->event = CTSU_EVENT_SCAN_COMPLETE; if (R_CTSU->CTSUST & CTSU_SOVF) { - args.event |= CTSU_EVENT_OVERFLOW; + p_args->event |= CTSU_EVENT_OVERFLOW; R_CTSU->CTSUST &= (uint8_t) (~CTSU_SOVF); } @@ -1608,12 +1715,12 @@ void ctsu_end_isr (void) { if (R_CTSU->CTSUSR0 & CTSU_ICOMP0) { - args.event |= CTSU_EVENT_ICOMP; + p_args->event |= CTSU_EVENT_ICOMP; } if (R_CTSU->CTSUSR0 & CTSU_ICOMP1) { - args.event |= CTSU_EVENT_ICOMP1; + p_args->event |= CTSU_EVENT_ICOMP1; } R_CTSU->CTSUSR0 |= CTSU_ICOMPRST; @@ -1626,31 +1733,60 @@ void ctsu_end_isr (void) __NOP(); __NOP(); R_CTSU->CTSUCR1 |= 0x01; - args.event |= CTSU_EVENT_ICOMP; + p_args->event |= CTSU_EVENT_ICOMP; } #endif #if (BSP_FEATURE_CTSU_VERSION == 2) + #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) if (CTSU_CORRECTION_RUN != g_ctsu_correction_info.status) { if (CTSU_MODE_CORRECTION_SCAN == p_instance_ctrl->p_ctsu_cfg->md) { - R_CTSU->CTSUCRA_b.FCMODE = 0; - R_CTSU->CTSUSUCLK0 = (uint16_t) (CTSU_CFG_SUMULTI0 << 8) | CTSU_SUADJ_RECOMMEND; - R_CTSU->CTSUCRB_b.SSCNT = 0; + R_CTSU->CTSUCRA_b.SDPSEL = 0; + R_CTSU->CTSUSUCLK0 = (uint16_t) ((CTSU_CFG_SUMULTI0 << 8) | g_ctsu_correction_info.suadj0); + R_CTSU->CTSUCRB_b.SSCNT = 1; R_CTSU->CTSUCALIB_b.SUCARRY = 0; R_CTSU->CTSUCALIB_b.CCOCALIB = 0; R_CTSU->CTSUCALIB_b.CCOCLK = 1; R_CTSU->CTSUCALIB_b.TSOC = 0; - R_CTSU->CTSUCRA_b.FCMODE = 1; + R_CTSU->CTSUCRA_b.SDPSEL = 1; } } + #endif #endif + p_instance_ctrl->state = CTSU_STATE_SCANNED; + p_args->p_context = p_instance_ctrl->p_context; + + /* If a callback was provided, call it with the argument */ + if (NULL != p_instance_ctrl->p_callback) + { +#if BSP_TZ_SECURE_BUILD - /* if callback present, check for error and do callback */ - if (p_instance_ctrl->p_callback != NULL) + /* p_callback can point to a secure function or a non-secure function. */ + if (p_instance_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_instance_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. */ + ctsu_prv_ns_callback p_callback = (ctsu_prv_ns_callback) (p_instance_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_instance_ctrl->p_callback(p_args); +#endif + } + + if (NULL != p_instance_ctrl->p_callback_memory) { - p_instance_ctrl->p_callback(&args); + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = args; } /* reset indexes */ @@ -1688,20 +1824,36 @@ void ctsu_correction_process (ctsu_instance_ctrl_t * const p_instance_ctrl) trimb = CTSU_REG_TRIMB; for (i = 0; i < CTSU_RANGE_NUM; i++) { - trimb_byte = (trimb >> (i * 8)) & CTSU_CORRECTION_TRIMB_MAX; + trimb_byte = (trimb >> (i * 8)) & CTSU_CORRECTION_TRIMB_MAX; + error_registance[i] = (uint16_t) (trimb_byte & (uint8_t) (~CTSU_CORRECTION_TRIMB_SIGN_BIT)); if (trimb_byte & CTSU_CORRECTION_TRIMB_SIGN_BIT) { - /* Plus : bit8(0.50) and bit7(0.25) set 0, bit9(1.00) set 1 */ - error_registance[i] = - (uint16_t) ((trimb_byte & (uint8_t) (~CTSU_CORRECTION_TRIMB_SIGN_BIT)) | CTSU_CORRECTION_BIT9); + if ((CTSU_REG_TRIMA > CTSU_CORRECTION_RTRIM_THRESHOLD1) && (trimb_byte >= CTSU_CORRECTION_TRIMB_THRESHOLD1)) + { + /* Minus2 : bit8(0.50) set 1 */ + error_registance[i] = (error_registance[i] | CTSU_CORRECTION_BIT8); + } + else + { + /* Plus : bit9(1.00) set 1 */ + error_registance[i] = (error_registance[i] | CTSU_CORRECTION_BIT9); + } } else { - /* Minus : bit8(0.50) and bit7(0.25) set 1 */ - error_registance[i] = (uint16_t) (trimb_byte | CTSU_CORRECTION_BIT7 | CTSU_CORRECTION_BIT8); + if ((CTSU_REG_TRIMA < CTSU_CORRECTION_RTRIM_THRESHOLD2) && (trimb_byte <= CTSU_CORRECTION_TRIMB_THRESHOLD2)) + { + /* Plus2 : bit7(0.25) and bit9(1.00) set 1 */ + error_registance[i] = (error_registance[i] | CTSU_CORRECTION_BIT7 | CTSU_CORRECTION_BIT9); + } + else + { + /* Minus : bit8(0.50) and bit7(0.25) set 1 */ + error_registance[i] = (error_registance[i] | CTSU_CORRECTION_BIT7 | CTSU_CORRECTION_BIT8); + } } - /* Reverse sign, and 6-bit left shift, 512 to 32768 */ + /* 6-bit left shift, 512 to 32768 */ error_registance[i] = (uint16_t) (error_registance[i] << (CTSU_SHIFT_AMOUNT - 9)); } @@ -1744,7 +1896,7 @@ void ctsu_correction_process (ctsu_instance_ctrl_t * const p_instance_ctrl) /* 1.25uA * (j + 1), SUCARRY is required for greater than 10uA */ for (j = 0; j < CTSU_CORRECTION_POINT_NUM; j++) { - R_CTSU->CTSUCRA_b.FCMODE = 0; + R_CTSU->CTSUCRA_b.SDPSEL = 0; if (8 > j) { R_CTSU->CTSUSUCLK0 = (uint16_t) (((j + 1) * CTSU_CORRECTION_SUMULTI) - 1); @@ -1756,16 +1908,10 @@ void ctsu_correction_process (ctsu_instance_ctrl_t * const p_instance_ctrl) R_CTSU->CTSUSUCLK0 = (uint16_t) (((j - 3) * CTSU_CORRECTION_SUMULTI) - 1); } - R_CTSU->CTSUCRA_b.FCMODE = 1; + R_CTSU->CTSUCRA_b.SDPSEL = 1; ctsu_correction_measurement(p_instance_ctrl, &g_ctsu_correction_info.dac_value[j]); } - R_CTSU->CTSUCRB_b.SSCNT = 0; - R_CTSU->CTSUCALIB_b.SUCARRY = 0; - R_CTSU->CTSUCALIB_b.CCOCALIB = 0; - R_CTSU->CTSUCALIB_b.CCOCLK = 1; - R_CTSU->CTSUCALIB_b.TSOC = 0; - /* Step4 : Calculate the coefficient between step2 and step3. */ for (i = 0; i < CTSU_RANGE_NUM; i++) { @@ -1825,9 +1971,6 @@ void ctsu_correction_process (ctsu_instance_ctrl_t * const p_instance_ctrl) R_CTSU->CTSUCR1 |= (CTSU_MODE_SELF_MULTI_SCAN << 6); R_CTSU->CTSUCHAC[0] = 0x01; - /* Initialize CTSU hardware control block */ - R_CTSU->CTSUCR0 |= 0x10; - g_ctsu_correction_info.ctsuwr.ctsussc = (CTSU_SSDIV_0500 << 8); g_ctsu_correction_info.ctsuwr.ctsuso0 = 0x0000; @@ -1835,7 +1978,8 @@ void ctsu_correction_process (ctsu_instance_ctrl_t * const p_instance_ctrl) g_ctsu_correction_info.ctsuwr.ctsuso1 = (uint16_t) ((CTSU_ICOG_66 << 13) | (ctsu_sdpa << 8) | CTSU_RICOA_RECOMMEND); /* Correction measurement setting */ - CTSU_REGISTER_CTSUERRS |= (uint16_t) CTSU_CTSUERRS_VALUE; + R_CTSU->CTSUERRS_b.CTSUSPMD = 2; + R_CTSU->CTSUERRS_b.CTSUTSOC = 1; R_BSP_SoftwareDelay(CTSU_WAIT_TIME, BSP_DELAY_UNITS_MICROSECONDS); /* First value measurement */ @@ -1871,7 +2015,9 @@ void ctsu_correction_process (ctsu_instance_ctrl_t * const p_instance_ctrl) #endif /* Normal measurement setting */ - CTSU_REGISTER_CTSUERRS = (uint16_t) 0x0000; + R_CTSU->CTSUERRS_b.CTSUTSOC = 0; + R_CTSU->CTSUERRS_b.CTSUSPMD = 0; + R_BSP_SoftwareDelay(CTSU_WAIT_TIME, BSP_DELAY_UNITS_MICROSECONDS); if ((0 != g_ctsu_correction_info.first_val) && (0 != g_ctsu_correction_info.second_val)) @@ -1949,6 +2095,7 @@ void ctsu_correction_scan_start (void) /* Setting time of measurement */ g_ctsu_correction_info.ctsuwr.ctsuso = (CTSU_SNUM_RECOMMEND << 10); + g_ctsu_correction_info.suadj0 = (uint8_t) (R_CTSU->CTSUSUCLK0 & CTSU_SUADJ_MAX); if (g_ctsu_correction_info.scan_index < CTSU_CORRECTION_POINT_NUM) { @@ -1957,7 +2104,7 @@ void ctsu_correction_scan_start (void) R_CTSU->CTSUCALIB_b.CCOCALIB = 1; R_CTSU->CTSUCALIB_b.TSOC = 1; - R_CTSU->CTSUCRA_b.FCMODE = 0; + R_CTSU->CTSUCRA_b.SDPSEL = 0; if (8 > g_ctsu_correction_info.scan_index) { R_CTSU->CTSUSUCLK0 = (uint16_t) (((g_ctsu_correction_info.scan_index + 1) * CTSU_CORRECTION_SUMULTI) - 1); @@ -1971,7 +2118,11 @@ void ctsu_correction_scan_start (void) (uint16_t) (((g_ctsu_correction_info.scan_index - 3) * CTSU_CORRECTION_SUMULTI) - 1); } - R_CTSU->CTSUCRA_b.FCMODE = 1; + R_CTSU->CTSUCRA_b.SDPSEL = 1; + + /* Dummy setting */ + R_CTSU->CTSUCHACA = 1; + R_CTSU->CTSUCHACB = 0; } else { @@ -2067,6 +2218,26 @@ void ctsu_correction_calib_rtrim (ctsu_instance_ctrl_t * const p_instance_ctrl) int16_t dir = 0; uint16_t comp = 0; + adctdr_sum = 0; + for (i = 0; i < CTSU_CALIB_AVERAGE_TIME; i++) + { + p_instance_ctrl->p_ctsu_cfg->p_adc_instance->p_api->scanStart( + p_instance_ctrl->p_ctsu_cfg->p_adc_instance->p_ctrl); + + /* Wait for conversion to complete. */ + status.state = ADC_STATE_SCAN_IN_PROGRESS; + while (ADC_STATE_SCAN_IN_PROGRESS == status.state) + { + p_instance_ctrl->p_ctsu_cfg->p_adc_instance->p_api->scanStatusGet( + p_instance_ctrl->p_ctsu_cfg->p_adc_instance->p_ctrl, + &status); + } + + adctdr_sum += (uint32_t) (CTSU_REG_ADCTDR); + } + + g_ctsu_correction_info.tscap_voltage = (uint16_t) ((adctdr_sum * 10) / CTSU_CALIB_AVERAGE_TIME); + /* Self single scan mode */ R_CTSU->CTSUCRA_b.LOAD = 1; R_CTSU->CTSUCRA_b.MD0 = 0; @@ -2111,7 +2282,7 @@ void ctsu_correction_calib_rtrim (ctsu_instance_ctrl_t * const p_instance_ctrl) adctdr_sum += (uint32_t) (CTSU_REG_ADCTDR); } - adctdr_ave = (uint16_t) (adctdr_sum / CTSU_CALIB_AVERAGE_TIME); + adctdr_ave = (uint16_t) ((adctdr_sum * 10) / CTSU_CALIB_AVERAGE_TIME); diff = (int16_t) (adctdr_ave - CTSU_CALIB_REF); /* The change unit of the voltage by the RTRIM register is about 4mV (4096 * 4) = 16.384 */ @@ -2151,6 +2322,35 @@ void ctsu_correction_calib_rtrim (ctsu_instance_ctrl_t * const p_instance_ctrl) R_CTSU->CTSUCRA_b.DCBACK = 0; } +/*********************************************************************************************************************** + * ctsu_correction_offset_adjust + ***********************************************************************************************************************/ +void ctsu_correction_offset_adjust (uint16_t * p_adj_data, uint16_t raw_data, int32_t offset_error) +{ + if (offset_error > 0) + { + if (0 > (int32_t) (raw_data - offset_error)) + { + *p_adj_data = (uint16_t) (raw_data - offset_error); + } + else + { + *p_adj_data = 0; + } + } + else + { + if (CTSU_COUNT_MAX < (int32_t) (raw_data - offset_error)) + { + *p_adj_data = CTSU_COUNT_MAX; + } + else + { + *p_adj_data = (uint16_t) (raw_data - offset_error); + } + } +} + #endif #endif #endif @@ -2185,6 +2385,7 @@ void ctsu_correction_calc (uint16_t * correction_data, uint16_t raw_data, ctsu_c { calc_flag = 1; } + #else if (CTSU_CORRECTION_COMPLETE == g_ctsu_correction_info.status) { @@ -2220,7 +2421,7 @@ void ctsu_correction_calc (uint16_t * correction_data, uint16_t raw_data, ctsu_c /* Get difference of Correction coefficient */ diff_coefficient = - (int32_t) (g_ctsu_correction_info.second_coefficient - g_ctsu_correction_info.first_coefficient); + (int32_t) (g_ctsu_correction_info.first_coefficient - g_ctsu_correction_info.second_coefficient); /* Get multiplication of g_diff_cofficient and (g_ctsu_correction_info.first_val - raw_data_coff) */ mul_diffcoff_diff1valsval = (diff_coefficient * (int32_t) (g_ctsu_correction_info.first_val - cmp_data)); @@ -2370,6 +2571,18 @@ void ctsu_correction_exec (ctsu_instance_ctrl_t * const p_instance_ctrl) ctsuso = (p_instance_ctrl->p_ctsuwr[(element_id * CTSU_CFG_NUM_SUMULTI) + i].ctsuso & CTSU_TUNING_MAX); multi.offset[i] = (ctsuso * (uint32_t) (CTSU_CORRECTION_OFFSET_UNIT >> multi.calc.range)); + #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) + #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) + + /* Correction offset current by TSCAP voltage error */ + multi.offset_error[i] = + (int32_t) ((g_ctsu_correction_info.tscap_voltage << CTSU_SHIFT_AMOUNT) / CTSU_CALIB_REF); + multi.offset_error[i] = + (int32_t) (((multi.offset[i] * (uint32_t) multi.offset_error[i]) >> CTSU_SHIFT_AMOUNT) - + multi.offset[i]); + multi.offset[i] = (multi.offset[i] + (uint32_t) multi.offset_error[i]); + #endif + #endif } #if (CTSU_CFG_NUM_SELF_ELEMENTS != 0) @@ -2379,6 +2592,13 @@ void ctsu_correction_exec (ctsu_instance_ctrl_t * const p_instance_ctrl) for (i = 0; i < CTSU_CFG_NUM_SUMULTI; i++) { multi.pri[i] = p_instance_ctrl->p_self_raw[(element_id * CTSU_CFG_NUM_SUMULTI) + i]; + #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) + #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) + ctsu_correction_offset_adjust(&multi.pri[i], + p_instance_ctrl->p_self_raw[(element_id * CTSU_CFG_NUM_SUMULTI) + i], + multi.offset_error[i]); + #endif + #endif multi.snd[i] = 0; } @@ -2399,7 +2619,14 @@ void ctsu_correction_exec (ctsu_instance_ctrl_t * const p_instance_ctrl) if (CTSU_MODE_CURRENT_SCAN == p_instance_ctrl->p_ctsu_cfg->md) { - ctsu_correction_calc(p_self_work, *(p_instance_ctrl->p_self_raw + element_id), &multi.calc); + multi.pri[0] = p_instance_ctrl->p_self_raw[element_id]; + #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) + #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) + ctsu_correction_offset_adjust(&multi.pri[0], p_instance_ctrl->p_self_raw[element_id], + multi.offset_error[0]); + #endif + #endif + ctsu_correction_calc(p_self_work, multi.pri[0], &multi.calc); } #endif #if (CTSU_CFG_NUM_MUTUAL_ELEMENTS != 0) @@ -2411,6 +2638,18 @@ void ctsu_correction_exec (ctsu_instance_ctrl_t * const p_instance_ctrl) { multi.pri[i] = p_instance_ctrl->p_mutual_raw[(element_id * CTSU_MUTUAL_BUF_SIZE) + (i * 2)]; multi.snd[i] = p_instance_ctrl->p_mutual_raw[(element_id * CTSU_MUTUAL_BUF_SIZE) + (i * 2) + 1]; + #if (CTSU_CFG_TEMP_CORRECTION_SUPPORT == 1) + #if (CTSU_CFG_CALIB_RTRIM_SUPPORT == 1) + ctsu_correction_offset_adjust(&multi.pri[i], + p_instance_ctrl->p_mutual_raw[(element_id * CTSU_MUTUAL_BUF_SIZE) + + (i * 2)], + multi.offset_error[i]); + ctsu_correction_offset_adjust(&multi.snd[i], + p_instance_ctrl->p_mutual_raw[(element_id * CTSU_MUTUAL_BUF_SIZE) + + (i * 2) + 1], + multi.offset_error[i]); + #endif + #endif } if (CTSU_TUNING_COMPLETE == p_instance_ctrl->tuning) @@ -2663,9 +2902,9 @@ void ctsu_corrcfc_process (ctsu_instance_ctrl_t * const p_instance_ctrl) for (j = 0; j < CTSU_CORRCFC_POINT_NUM; j++) { - R_CTSU->CTSUCRA_b.FCMODE = 0; + R_CTSU->CTSUCRA_b.SDPSEL = 0; R_CTSU->CTSUSUCLK0 = (uint16_t) (((j + CTSU_CORRCFC_CENTER_POINT) * CTSU_CORRECTION_SUMULTI) - 1); - R_CTSU->CTSUCRA_b.FCMODE = 1; + R_CTSU->CTSUCRA_b.SDPSEL = 1; ctsu_corrcfc_measurement(p_instance_ctrl, &g_ctsu_corrcfc_info.value[index][j], CTSU_CORRCFC_POINT_NUM); } diff --git a/ra/fsp/src/r_dmac/r_dmac.c b/ra/fsp/src/r_dmac/r_dmac.c index 7c933528e..62eb45b24 100644 --- a/ra/fsp/src/r_dmac/r_dmac.c +++ b/ra/fsp/src/r_dmac/r_dmac.c @@ -40,7 +40,8 @@ /* Calculate the mask bits for byte alignment from the transfer_size_t. */ #define DMAC_PRV_MASK_ALIGN_N_BYTES(x) ((1U << (x)) - 1U) -#define DMAC_PRV_REG(ch) ((R_DMAC0_Type *) ((R_DMAC1 - R_DMAC0) * ch + R_DMAC0)) +#define DMAC_PRV_REG(ch) ((R_DMAC0_Type *) (((uint32_t) R_DMAC1 - (uint32_t) R_DMAC0) * ch + \ + (uint32_t) R_DMAC0)) /* Transfer Count Register A Bit Field Definitions */ #define DMAC_PRV_DMCRA_LOW_OFFSET (0U) @@ -182,6 +183,7 @@ fsp_err_t R_DMAC_Open (transfer_ctrl_t * const p_api_ctrl, transfer_cfg_t const /* Enable DMAC Operation. */ R_BSP_MODULE_START(FSP_IP_DMAC, p_extend->channel); + R_DMA->DMAST = 1; /* Configure the transfer settings. */ diff --git a/ra/fsp/src/r_doc/r_doc.c b/ra/fsp/src/r_doc/r_doc.c index 4ba0c4271..6cd3715cb 100644 --- a/ra/fsp/src/r_doc/r_doc.c +++ b/ra/fsp/src/r_doc/r_doc.c @@ -37,6 +37,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile doc_prv_ns_callback)(doc_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile doc_prv_ns_callback)(doc_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -63,11 +69,12 @@ static const fsp_version_t g_doc_version = const doc_api_t g_doc_on_doc = { - .open = R_DOC_Open, - .close = R_DOC_Close, - .statusGet = R_DOC_StatusGet, - .write = R_DOC_Write, - .versionGet = R_DOC_VersionGet, + .open = R_DOC_Open, + .close = R_DOC_Close, + .statusGet = R_DOC_StatusGet, + .write = R_DOC_Write, + .versionGet = R_DOC_VersionGet, + .callbackSet = R_DOC_CallbackSet, }; /*********************************************************************************************************************** @@ -107,6 +114,14 @@ fsp_err_t R_DOC_Open (doc_ctrl_t * const p_api_ctrl, doc_cfg_t const * const p_c /* save pointers for later use */ p_ctrl->p_cfg = p_cfg; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_ctrl->callback_is_secure = true; +#endif + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; /* Power on the DOC module. */ R_BSP_MODULE_START(FSP_IP_DOC, 0); @@ -239,6 +254,44 @@ fsp_err_t R_DOC_VersionGet (fsp_version_t * const p_version) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements doc_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. + **********************************************************************************************************************/ +fsp_err_t R_DOC_CallbackSet (doc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(doc_callback_args_t *), + void const * const p_context, + doc_callback_args_t * const p_callback_memory) +{ + doc_instance_ctrl_t * p_ctrl = (doc_instance_ctrl_t *) p_api_ctrl; + +#if (DOC_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(DOC_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + + /* Store callback and context */ + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * @} (end addtogroup DOC) **********************************************************************************************************************/ @@ -262,14 +315,51 @@ void doc_int_isr (void) doc_instance_ctrl_t * p_ctrl = (doc_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - /* Call the callback */ - doc_callback_args_t cb_data; + /* Call callback */ + doc_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. */ + doc_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->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD - /* Set data to identify callback to the user. */ - cb_data.p_context = p_ctrl->p_cfg->p_context; + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + doc_prv_ns_callback p_callback = (doc_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args); + } + +#else - /* Call the callback. */ - p_ctrl->p_cfg->p_callback(&cb_data); + /* 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; + } /* clear DOPCF flag */ R_DOC->DOCR = (uint8_t) (R_DOC_DOCR_DOPCFCL_Msk | (p_ctrl->p_cfg->event)); diff --git a/ra/fsp/src/r_dtc/r_dtc.c b/ra/fsp/src/r_dtc/r_dtc.c index e7770a337..c02b0b1d5 100644 --- a/ra/fsp/src/r_dtc/r_dtc.c +++ b/ra/fsp/src/r_dtc/r_dtc.c @@ -264,7 +264,11 @@ fsp_err_t R_DTC_Reset (transfer_ctrl_t * const p_api_ctrl, /* Disable read skip prior to modifying settings. It will be enabled later * (See DTC Section 18.4.1 of the RA6M3 manual R01UH0886EJ0100). */ +#if FSP_PRIV_TZ_USE_SECURE_REGS + R_DTC->DTCCR_SEC = DTC_PRV_RRS_DISABLE; +#else R_DTC->DTCCR = DTC_PRV_RRS_DISABLE; +#endif /* Reset transfer based on input parameters. */ if (NULL != p_src) @@ -291,7 +295,11 @@ fsp_err_t R_DTC_Reset (transfer_ctrl_t * const p_api_ctrl, } /* Enable read skip after all settings are written. */ +#if FSP_PRIV_TZ_USE_SECURE_REGS + R_DTC->DTCCR_SEC = DTC_PRV_RRS_ENABLE; +#else R_DTC->DTCCR = DTC_PRV_RRS_ENABLE; +#endif /* This is an exception to FSP Architecture Parameter Checking (May return an error after modifying registers). */ /* Enable transfers on this activation source. */ @@ -518,7 +526,11 @@ static void r_dtc_state_initialize (void) memset(&gp_dtc_vector_table, 0U, DTC_VECTOR_TABLE_ENTRIES * sizeof(transfer_info_t *)); /* Set DTC vector table. */ - R_DTC->DTCVBR = (uint32_t) &gp_dtc_vector_table; +#if FSP_PRIV_TZ_USE_SECURE_REGS + R_DTC->DTCVBR_SEC = (uint32_t) gp_dtc_vector_table; +#else + R_DTC->DTCVBR = (uint32_t) gp_dtc_vector_table; +#endif /* Enable the DTC Peripheral */ R_DTC->DTCST = 1U; @@ -535,13 +547,21 @@ static void r_dtc_set_info (dtc_instance_ctrl_t * p_ctrl, transfer_info_t * p_in /* Disable read skip prior to modifying settings. It will be enabled later * (See DTC Section 18.4.1 of the RA6M3 manual R01UH0886EJ0100). */ +#if FSP_PRIV_TZ_USE_SECURE_REGS + R_DTC->DTCCR_SEC = DTC_PRV_RRS_DISABLE; +#else R_DTC->DTCCR = DTC_PRV_RRS_DISABLE; +#endif /* Update the entry in the DTC Vector table. */ gp_dtc_vector_table[p_ctrl->irq] = p_info; /* Enable read skip after all settings are written. */ +#if DTC_PRV_USE_SECURE_REGS + R_DTC->DTCCR_SEC = DTC_PRV_RRS_ENABLE; +#else R_DTC->DTCCR = DTC_PRV_RRS_ENABLE; +#endif } /*******************************************************************************************************************//** diff --git a/ra/fsp/src/r_ether/r_ether.c b/ra/fsp/src/r_ether/r_ether.c index cdec7b6b9..b4d865aaf 100644 --- a/ra/fsp/src/r_ether/r_ether.c +++ b/ra/fsp/src/r_ether/r_ether.c @@ -309,7 +309,8 @@ fsp_err_t R_ETHER_Open (ether_ctrl_t * const p_ctrl, ether_cfg_t const * const p i < (p_instance_ctrl->p_ether_cfg->num_tx_descriptors + p_instance_ctrl->p_ether_cfg->num_rx_descriptors); i++) { - memset(p_instance_ctrl->p_ether_cfg->pp_ether_buffers[i], 0x00, + memset(p_instance_ctrl->p_ether_cfg->pp_ether_buffers[i], + 0x00, p_instance_ctrl->p_ether_cfg->ether_buffer_size); } @@ -1530,7 +1531,9 @@ static fsp_err_t ether_do_link (ether_instance_ctrl_t * const p_instance_ctrl, c * Enable PAUSE for full duplex link depending on * the pause resolution results */ - ether_pause_resolution(local_pause_bits, partner_pause_bits, &transmit_pause_set, + ether_pause_resolution(local_pause_bits, + partner_pause_bits, + &transmit_pause_set, &receive_pause_set); if (ETHER_PAUSE_XMIT_ON == transmit_pause_set) diff --git a/ra/fsp/src/r_ether_phy/targets/KSZ8091RNB/r_ether_phy_target_ksz8091rnb.c b/ra/fsp/src/r_ether_phy/targets/KSZ8091RNB/r_ether_phy_target_ksz8091rnb.c index 1f554677b..4d3192033 100644 --- a/ra/fsp/src/r_ether_phy/targets/KSZ8091RNB/r_ether_phy_target_ksz8091rnb.c +++ b/ra/fsp/src/r_ether_phy/targets/KSZ8091RNB/r_ether_phy_target_ksz8091rnb.c @@ -37,8 +37,13 @@ ***********************************************************************************************************************/ /* Vendor Specific PHY Registers */ - #define ETHER_PHY_REG_INTERRUPT_CONTROL (0x1B) - #define ETHER_PHY_REG_PHY_CONTROL2 (0x1F) + #define ETHER_PHY_REG_INTERRUPT_CONTROL (0x1B) + #define ETHER_PHY_REG_PHY_CONTROL2 (0x1F) + + #define ETHER_PHY_REG_INTERRUPT_CONTROL_LUIE_OFFSET (0x8) + #define ETHER_PHY_REG_INTERRUPT_CONTROL_LDIE_OFFSET (0xA) + #define ETHER_PHY_REG_PHY_CONTROL2_RMII_RCS_OFFSET (0x7) + #define ETHER_PHY_REG_PHY_CONTROL2_RMII_IL_OFFSET (0x9) /*********************************************************************************************************************** * Exported global variables (to be accessed by other files) @@ -75,17 +80,20 @@ void ether_phy_targets_initialize (ether_phy_instance_ctrl_t * p_instance_ctrl) * b10=1:Enable link-down interrupt * b8=1 :Enable link-up interrupt */ - ether_phy_write(p_instance_ctrl, ETHER_PHY_REG_INTERRUPT_CONTROL, 0x0500); + ether_phy_write(p_instance_ctrl, + ETHER_PHY_REG_INTERRUPT_CONTROL, + (0x1 << ETHER_PHY_REG_INTERRUPT_CONTROL_LUIE_OFFSET | 0x1 << + ETHER_PHY_REG_INTERRUPT_CONTROL_LDIE_OFFSET)); ether_phy_read(p_instance_ctrl, ETHER_PHY_REG_INTERRUPT_CONTROL); reg = ether_phy_read(p_instance_ctrl, ETHER_PHY_REG_PHY_CONTROL2); /* b7=1:RMII 50MHz clock mode; clock input to XI(pin 9) is 50MHz */ #if (ETHER_PHY_CFG_USE_REF_CLK == 0) - reg |= 0x0080; + reg |= (0x1 << ETHER_PHY_REG_PHY_CONTROL2_RMII_RCS_OFFSET); #endif /* b9=0:Interrupt pin active low */ - reg &= 0xfdff; + reg &= (uint16_t) ~ETHER_PHY_REG_PHY_CONTROL2_RMII_IL_OFFSET; ether_phy_write(p_instance_ctrl, ETHER_PHY_REG_PHY_CONTROL2, reg); } /* End of function ether_phy_targets_initialize() */ diff --git a/ra/fsp/src/r_flash_hp/r_flash_hp.c b/ra/fsp/src/r_flash_hp/r_flash_hp.c index 2d5c68e2b..e5db8e648 100644 --- a/ra/fsp/src/r_flash_hp/r_flash_hp.c +++ b/ra/fsp/src/r_flash_hp/r_flash_hp.c @@ -32,6 +32,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile flash_hp_prv_ns_callback)(flash_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile flash_hp_prv_ns_callback)(flash_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Macro definitions **********************************************************************************************************************/ @@ -95,7 +101,11 @@ /** Configuration set Command offset*/ #define FLASH_HP_FCU_CONFIG_SET_ID_BYTE (0x0000A150U) -#define FLASH_HP_FCU_CONFIG_SET_ACCESS_STARTUP (0x0000A160U) +#if !(defined(BSP_MCU_GROUP_RA6M4) || defined(BSP_MCU_GROUP_RA4M3) || defined(BSP_MCU_GROUP_RA4M2)) + #define FLASH_HP_FCU_CONFIG_SET_ACCESS_STARTUP (0x0000A160U) +#else + #define FLASH_HP_FCU_CONFIG_SET_ACCESS_STARTUP (0x0100A130U) +#endif /* Zero based offset into g_configuration_area_data[] for FAWS */ #define FLASH_HP_FCU_CONFIG_SET_FAWS_OFFSET (2U) @@ -126,6 +136,11 @@ #define FLASH_HP_FENTRYR_READ_MODE (0xAA00U) +#define FLASH_HP_FMEPROT_LOCK (0xD901) +#define FLASH_HP_FMEPROT_UNLOCK (0xD900) + +#define FLASH_HP_OFS_SAS_MASK (0x7FFFU) + #define FLASH_HP_FAEINT_DFAEIE (0x08) #define FLASH_HP_FAEINT_CMDLKIE (0x10) #define FLASH_HP_FAEINT_CFAEIE (0x80) @@ -173,7 +188,8 @@ #if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) static uint16_t g_configuration_area_data[FLASH_HP_CONFIG_SET_ACCESS_WORD_CNT] = {UINT16_MAX}; #endif -#define FLASH_LP_DF_START_ADDRESS (0x40100000) + +#define FLASH_HP_DF_START_ADDRESS (BSP_FEATURE_FLASH_DATA_FLASH_START) static const flash_block_info_t g_code_flash_macro_info[] = { @@ -199,8 +215,8 @@ static const flash_regions_t g_flash_code_region = const flash_block_info_t g_data_flash_macro_info = { - .block_section_st_addr = FLASH_LP_DF_START_ADDRESS, - .block_section_end_addr = FLASH_LP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES - 1, + .block_section_st_addr = FLASH_HP_DF_START_ADDRESS, + .block_section_end_addr = FLASH_HP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES - 1, .block_size = FLASH_HP_DATA_BLOCK_SIZE, .block_size_write = BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE }; @@ -240,6 +256,8 @@ static fsp_err_t flash_hp_write_data(flash_hp_instance_ctrl_t * const p_ctrl, ui static fsp_err_t flash_hp_check_errors(fsp_err_t previous_error, uint32_t error_bits, fsp_err_t return_error) PLACE_IN_RAM_SECTION; +static void r_flash_hp_call_callback(flash_hp_instance_ctrl_t * p_ctrl, flash_event_t event); + #if (FLASH_HP_CFG_DATA_FLASH_PROGRAMMING_ENABLE == 1) static fsp_err_t flash_hp_df_blank_check(flash_hp_instance_ctrl_t * const p_ctrl, @@ -286,10 +304,10 @@ static fsp_err_t flash_hp_set_id_code(flash_hp_instance_ctrl_t * p_ctrl, static fsp_err_t r_flash_hp_common_parameter_checking(flash_hp_instance_ctrl_t * const p_ctrl); -static fsp_err_t r_flash_hp_write_read_bc_parameter_checking(flash_hp_instance_ctrl_t * const p_ctrl, - uint32_t flash_address, - uint32_t const num_bytes, - bool check_write); +static fsp_err_t r_flash_hp_write_bc_parameter_checking(flash_hp_instance_ctrl_t * const p_ctrl, + uint32_t flash_address, + uint32_t const num_bytes, + bool check_write); #endif @@ -312,6 +330,7 @@ const flash_api_t g_flash_on_flash_hp = .reset = R_FLASH_HP_Reset, .startupAreaSelect = R_FLASH_HP_StartUpAreaSelect, .updateFlashClockFreq = R_FLASH_HP_UpdateFlashClockFreq, + .callbackSet = R_FLASH_HP_CallbackSet, .versionGet = R_FLASH_HP_VersionGet }; @@ -366,15 +385,24 @@ fsp_err_t R_FLASH_HP_Open (flash_ctrl_t * const p_api_ctrl, flash_cfg_t const * { FSP_ERROR_RETURN(p_cfg->irq >= (IRQn_Type) 0, FSP_ERR_IRQ_BSP_DISABLED); FSP_ERROR_RETURN(p_cfg->err_irq >= (IRQn_Type) 0, FSP_ERR_IRQ_BSP_DISABLED); - FSP_ASSERT(p_cfg->p_callback); } #endif /* Set the parameters struct based on the user supplied settings */ p_ctrl->p_cfg = p_cfg; - if (p_cfg->data_flash_bgo) + if (true == p_cfg->data_flash_bgo) { + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + +#if BSP_TZ_SECURE_BUILD + + /* If a callback is not supplied this will get set during callbackSet */ + p_ctrl->callback_is_secure = true; +#endif + /* Enable FCU interrupts. */ R_FACI_HP->FRDYIE = 1U; R_BSP_IrqCfgEnable(p_cfg->irq, p_cfg->ipl, p_ctrl); @@ -434,7 +462,7 @@ fsp_err_t R_FLASH_HP_Write (flash_ctrl_t * const p_api_ctrl, #if (FLASH_HP_CFG_PARAM_CHECKING_ENABLE == 1) /* Verify write parameters. If failure return error. */ - err = r_flash_hp_write_read_bc_parameter_checking(p_ctrl, flash_address, num_bytes, true); + err = r_flash_hp_write_bc_parameter_checking(p_ctrl, flash_address, num_bytes, true); FSP_ERROR_RETURN((err == FSP_SUCCESS), err); #endif @@ -501,6 +529,11 @@ fsp_err_t R_FLASH_HP_Erase (flash_ctrl_t * const p_api_ctrl, uint32_t const addr err = r_flash_hp_common_parameter_checking(p_ctrl); FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + if (true == p_ctrl->p_cfg->data_flash_bgo) + { + FSP_ASSERT(NULL != p_ctrl->p_callback); + } + /* If invalid number of blocks return error. */ FSP_ERROR_RETURN(num_blocks != 0U, FSP_ERR_INVALID_BLOCKS); #endif @@ -549,11 +582,11 @@ fsp_err_t R_FLASH_HP_Erase (flash_ctrl_t * const p_api_ctrl, uint32_t const addr #if (FLASH_HP_CFG_PARAM_CHECKING_ENABLE == 1) uint32_t num_bytes = num_blocks * BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE; - FSP_ERROR_RETURN((start_address >= (FLASH_LP_DF_START_ADDRESS)) && - (start_address < (FLASH_LP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES)), + FSP_ERROR_RETURN((start_address >= (FLASH_HP_DF_START_ADDRESS)) && + (start_address < (FLASH_HP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES)), FSP_ERR_INVALID_ADDRESS); - FSP_ERROR_RETURN(start_address + num_bytes <= (FLASH_LP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES), + FSP_ERROR_RETURN(start_address + num_bytes <= (FLASH_HP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES), FSP_ERR_INVALID_BLOCKS); #endif @@ -599,7 +632,7 @@ fsp_err_t R_FLASH_HP_BlankCheck (flash_ctrl_t * const p_api_ctrl, #if (FLASH_HP_CFG_PARAM_CHECKING_ENABLE == 1) /* Check parameters. If failure return error */ - err = r_flash_hp_write_read_bc_parameter_checking(p_ctrl, address, num_bytes, false); + err = r_flash_hp_write_bc_parameter_checking(p_ctrl, address, num_bytes, false); FSP_ERROR_RETURN((err == FSP_SUCCESS), err); #endif @@ -697,7 +730,7 @@ fsp_err_t R_FLASH_HP_IdCodeSet (flash_ctrl_t * const p_api_ctrl, fsp_err_t err = FSP_SUCCESS; -#if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) +#if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) && (BSP_FEATURE_FLASH_SUPPORTS_ID_CODE == 1) #if (FLASH_HP_CFG_PARAM_CHECKING_ENABLE) /* Verify the id bytes are not in code flash. They will not be available in P/E mode. */ @@ -754,7 +787,7 @@ fsp_err_t R_FLASH_HP_AccessWindowSet (flash_ctrl_t * const p_api_ctrl, fsp_err_t err = FSP_SUCCESS; -#if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) +#if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) && (BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW == 1) #if (FLASH_HP_CFG_PARAM_CHECKING_ENABLE) /* Verify the control block is not null and is opened. */ @@ -806,7 +839,7 @@ fsp_err_t R_FLASH_HP_AccessWindowClear (flash_ctrl_t * const p_api_ctrl) fsp_err_t err = FSP_SUCCESS; -#if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) +#if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) && (BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW == 1) #if (FLASH_HP_CFG_PARAM_CHECKING_ENABLE) /* Verify the control block is not null and is opened. */ @@ -1019,6 +1052,51 @@ fsp_err_t R_FLASH_HP_Close (flash_ctrl_t * const p_api_ctrl) return err; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref flash_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_FLASH_HP_CallbackSet (flash_ctrl_t * const p_api_ctrl, + void ( * p_callback)(flash_callback_args_t *), + void const * const p_context, + flash_callback_args_t * const p_callback_memory) +{ + flash_hp_instance_ctrl_t * p_ctrl = (flash_hp_instance_ctrl_t *) p_api_ctrl; + +#if FLASH_HP_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(FLASH_HP_OPEN == p_ctrl->opened, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if FLASH_HP_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + flash_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * This function gets FLASH HAL driver version * @retval FSP_SUCCESS Operation performed successfully @@ -1277,10 +1355,10 @@ static fsp_err_t flash_hp_df_write (flash_hp_instance_ctrl_t * const p_ctrl) * the maximum range. * @retval FSP_ERR_INVALID_ADDRESS Invalid address was input or address not on programming boundary. **********************************************************************************************************************/ -static fsp_err_t r_flash_hp_write_read_bc_parameter_checking (flash_hp_instance_ctrl_t * const p_ctrl, - uint32_t flash_address, - uint32_t const num_bytes, - bool check_write) +static fsp_err_t r_flash_hp_write_bc_parameter_checking (flash_hp_instance_ctrl_t * const p_ctrl, + uint32_t flash_address, + uint32_t const num_bytes, + bool check_write) { /* Verify the control block is not null and is opened. Verify the flash isn't in use. */ fsp_err_t err = r_flash_hp_common_parameter_checking(p_ctrl); @@ -1288,6 +1366,11 @@ static fsp_err_t r_flash_hp_write_read_bc_parameter_checking (flash_hp_instance_ uint32_t write_size; + if (p_ctrl->p_cfg->data_flash_bgo == true) + { + FSP_ASSERT(NULL != p_ctrl->p_callback); + } + /* If invalid address or number of bytes return error. */ #if (FLASH_HP_CFG_CODE_FLASH_PROGRAMMING_ENABLE == 1) if (flash_address < BSP_ROM_SIZE_BYTES) @@ -1299,10 +1382,10 @@ static fsp_err_t r_flash_hp_write_read_bc_parameter_checking (flash_hp_instance_ #endif { #if (FLASH_HP_CFG_DATA_FLASH_PROGRAMMING_ENABLE == 1) - FSP_ERROR_RETURN((flash_address >= (FLASH_LP_DF_START_ADDRESS)) && - (flash_address < (FLASH_LP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES)), + FSP_ERROR_RETURN((flash_address >= (FLASH_HP_DF_START_ADDRESS)) && + (flash_address < (FLASH_HP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES)), FSP_ERR_INVALID_ADDRESS); - FSP_ERROR_RETURN((flash_address + num_bytes <= (FLASH_LP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES)), + FSP_ERROR_RETURN((flash_address + num_bytes <= (FLASH_HP_DF_START_ADDRESS + BSP_DATA_FLASH_SIZE_BYTES)), FSP_ERR_INVALID_SIZE); write_size = BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE; #else @@ -1757,12 +1840,11 @@ static fsp_err_t flash_hp_pe_mode_exit () /* If the device is coming out of code flash p/e mode restore the flash cache state. */ if (FLASH_HP_FENTRYR_CF_PE_MODE == pe_mode) { - /* 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); +#if BSP_FEATURE_FLASH_HP_HAS_FMEPROT + R_FACI_HP->FMEPROT = FLASH_HP_FMEPROT_LOCK; +#endif - R_FCACHE->FCACHEE = 1U; + R_BSP_FlashCacheEnable(); } /* If a command locked state was detected earlier, then return that error. */ @@ -2006,10 +2088,6 @@ static fsp_err_t flash_hp_set_startup_area_boot (flash_hp_instance_ctrl_t * p_ct flash_startup_area_swap_t swap_type, bool is_temporary) { - /* Do not call functions with multiple volatile parameters. */ - uint32_t faws = R_FACI_HP->FAWMON_b.FAWS; - uint32_t fawe = R_FACI_HP->FAWMON_b.FAWE; - /* Update Flash state and enter Code Flash P/E mode */ fsp_err_t err = flash_hp_enter_pe_cf_mode(p_ctrl); FSP_ERROR_RETURN(FSP_SUCCESS == err, err); @@ -2020,8 +2098,21 @@ static fsp_err_t flash_hp_set_startup_area_boot (flash_hp_instance_ctrl_t * p_ct } else { + // todo should FSUACR be cleared? + #if BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW + + /* Do not call functions with multiple volatile parameters. */ + uint32_t faws = R_FACI_HP->FAWMON_b.FAWS; + uint32_t fawe = R_FACI_HP->FAWMON_b.FAWE; + /* Configure the configuration area to be written. */ flash_hp_configuration_area_data_setup(~swap_type & 0x1, faws, fawe); + #else + memset(g_configuration_area_data, UINT8_MAX, sizeof(g_configuration_area_data)); + + g_configuration_area_data[FLASH_HP_FCU_CONFIG_SET_FAWE_BTFLG_OFFSET] = + (uint16_t) (((((uint16_t) ~swap_type) & 0x1U) << 15U) | FLASH_HP_OFS_SAS_MASK); + #endif /* Write the configuration area to the access/startup region. */ err = flash_hp_configuration_area_write(p_ctrl, FLASH_HP_FCU_CONFIG_SET_ACCESS_STARTUP); @@ -2164,13 +2255,11 @@ void fcu_fiferr_isr (void) { /* Save context if RTOS is used */ FSP_CONTEXT_SAVE - flash_callback_args_t cb_data; - IRQn_Type irq = R_FSP_CurrentIrqGet(); + flash_event_t event; + IRQn_Type irq = R_FSP_CurrentIrqGet(); flash_hp_instance_ctrl_t * p_ctrl = (flash_hp_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - cb_data.p_context = p_ctrl->p_cfg->p_context; - uint32_t fastat = R_FACI_HP->FASTAT; uint32_t fstatr_errors = R_FACI_HP->FSTATR & FLASH_HP_FSTATR_ERROR_MASK; @@ -2178,28 +2267,28 @@ void fcu_fiferr_isr (void) /* Check for the data flash memory access violation flag. */ if (fastat & FLASH_HP_FASTAT_DFAE) { - cb_data.event = FLASH_EVENT_ERR_DF_ACCESS; + event = FLASH_EVENT_ERR_DF_ACCESS; } /* Check for the code flash memory access violation flag. */ else if (fastat & FLASH_HP_FASTAT_CFAE) { - cb_data.event = FLASH_EVENT_ERR_CF_ACCESS; + event = FLASH_EVENT_ERR_CF_ACCESS; } /* Check if the command Lock bit is set. */ else if (fastat & FLASH_HP_FASTAT_CMDLK) { if (fstatr_errors & (FLASH_HP_FSTATR_PRGERR | FLASH_HP_FSTATR_ERSERR)) { - cb_data.event = FLASH_EVENT_ERR_FAILURE; + event = FLASH_EVENT_ERR_FAILURE; } else { - cb_data.event = FLASH_EVENT_ERR_CMD_LOCKED; + event = FLASH_EVENT_ERR_CMD_LOCKED; } } else { - cb_data.event = FLASH_EVENT_ERR_FAILURE; + event = FLASH_EVENT_ERR_FAILURE; } /* Reset the FCU: This will stop any existing processes and exit PE mode*/ @@ -2209,7 +2298,7 @@ void fcu_fiferr_isr (void) R_BSP_IrqStatusClear(irq); /* Call the user callback. */ - p_ctrl->p_cfg->p_callback(&cb_data); + r_flash_hp_call_callback(p_ctrl, event); /* Restore context if RTOS is used */ FSP_CONTEXT_RESTORE @@ -2228,14 +2317,12 @@ void fcu_frdyi_isr (void) bool operation_completed = false; /*Wait counter used for DBFULL flag*/ - flash_callback_args_t cb_data; + flash_event_t event; IRQn_Type irq = R_FSP_CurrentIrqGet(); flash_hp_instance_ctrl_t * p_ctrl = (flash_hp_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - cb_data.p_context = p_ctrl->p_cfg->p_context; - /* Clear the Interrupt Request*/ R_BSP_IrqStatusClear(irq); @@ -2253,13 +2340,13 @@ void fcu_frdyi_isr (void) if (FSP_SUCCESS != err) { flash_hp_reset(p_ctrl); - cb_data.event = FLASH_EVENT_ERR_FAILURE; + event = FLASH_EVENT_ERR_FAILURE; } } /*Done writing all bytes*/ else { - cb_data.event = FLASH_EVENT_WRITE_COMPLETE; + event = FLASH_EVENT_WRITE_COMPLETE; operation_completed = true; } } @@ -2272,7 +2359,7 @@ void fcu_frdyi_isr (void) /* If all blocks are erased*/ else { - cb_data.event = FLASH_EVENT_ERASE_COMPLETE; + event = FLASH_EVENT_ERASE_COMPLETE; operation_completed = true; } } @@ -2282,11 +2369,11 @@ void fcu_frdyi_isr (void) operation_completed = true; if (R_FACI_HP->FBCSTAT == 0x01U) { - cb_data.event = FLASH_EVENT_NOT_BLANK; + event = FLASH_EVENT_NOT_BLANK; } else { - cb_data.event = FLASH_EVENT_BLANK; + event = FLASH_EVENT_BLANK; } } @@ -2300,12 +2387,66 @@ void fcu_frdyi_isr (void) p_ctrl->current_operation = FLASH_OPERATION_NON_BGO; /* Set data to identify callback to user, then call user callback. */ - p_ctrl->p_cfg->p_callback(&cb_data); + r_flash_hp_call_callback(p_ctrl, event); } FSP_CONTEXT_RESTORE } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to FLASH_HP instance control block + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_flash_hp_call_callback (flash_hp_instance_ctrl_t * p_ctrl, flash_event_t event) +{ + flash_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. */ + flash_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->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + flash_hp_prv_ns_callback p_callback = (flash_hp_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; + } +} + /*******************************************************************************************************************//** * This function switches the peripheral to P/E mode for Data Flash. * @param[in] p_ctrl Pointer to the Flash control block. @@ -2367,8 +2508,10 @@ static fsp_err_t flash_hp_enter_pe_cf_mode (flash_hp_instance_ctrl_t * const p_c /* Timeout counter. */ volatile uint32_t wait_count = FLASH_HP_FRDY_CMD_TIMEOUT; - /* While the Flash API is in use we will disable the FLash Cache. */ - R_FCACHE->FCACHEE = 0U; + /* While the Flash API is in use we will disable the flash cache. */ + #if BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM + R_BSP_FlashCacheDisable(); + #endif /* If interrupts are being used then disable interrupts. */ if (p_ctrl->p_cfg->data_flash_bgo == true) @@ -2380,6 +2523,10 @@ static fsp_err_t flash_hp_enter_pe_cf_mode (flash_hp_instance_ctrl_t * const p_c R_BSP_IrqDisable(p_ctrl->p_cfg->err_irq); } + #if BSP_FEATURE_FLASH_HP_HAS_FMEPROT + R_FACI_HP->FMEPROT = FLASH_HP_FMEPROT_UNLOCK; + #endif + /* Enter code flash PE mode */ R_FACI_HP->FENTRYR = FLASH_HP_FENTRYR_TRANSITION_TO_CF_PE; @@ -2390,8 +2537,9 @@ static fsp_err_t flash_hp_enter_pe_cf_mode (flash_hp_instance_ctrl_t * const p_c /* Wait until FENTRYR is 0x0001UL unless timeout occurs. */ if (wait_count == 0U) { + /* if FENTRYR is not set after max timeout, FSP_ERR_PE_FAILURE*/ - err = FSP_ERR_PE_FAILURE; + return FSP_ERR_PE_FAILURE; } wait_count--; diff --git a/ra/fsp/src/r_flash_lp/r_flash_lp.c b/ra/fsp/src/r_flash_lp/r_flash_lp.c index 32fb1387c..c138bd791 100644 --- a/ra/fsp/src/r_flash_lp/r_flash_lp.c +++ b/ra/fsp/src/r_flash_lp/r_flash_lp.c @@ -327,6 +327,7 @@ const flash_api_t g_flash_on_flash_lp = .reset = R_FLASH_LP_Reset, .startupAreaSelect = R_FLASH_LP_StartUpAreaSelect, .updateFlashClockFreq = R_FLASH_LP_UpdateFlashClockFreq, + .callbackSet = R_FLASH_LP_CallbackSet, .versionGet = R_FLASH_LP_VersionGet }; @@ -1035,6 +1036,25 @@ fsp_err_t R_FLASH_LP_Close (flash_ctrl_t * const p_api_ctrl) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Stub function + * Implements @ref flash_api_t::callbackSet. + * + * @retval FSP_ERR_UNSUPPORTED Function has not been implemented. + **********************************************************************************************************************/ +fsp_err_t R_FLASH_LP_CallbackSet (flash_ctrl_t * const p_api_ctrl, + void ( * p_callback)(flash_callback_args_t *), + void const * const p_context, + flash_callback_args_t * const p_callback_memory) +{ + FSP_PARAMETER_NOT_USED(p_api_ctrl); + FSP_PARAMETER_NOT_USED(p_callback); + FSP_PARAMETER_NOT_USED(p_callback_memory); + FSP_PARAMETER_NOT_USED(p_context); + + return FSP_ERR_UNSUPPORTED; +} + /*******************************************************************************************************************//** * Get Flash LP driver version. * @@ -1788,13 +1808,7 @@ static fsp_err_t r_flash_lp_pe_mode_exit (flash_lp_instance_ctrl_t * const p_ctr if (flash_pe_mode == FLASH_LP_FENTRYR_CF_PE_MODE) { #if BSP_FEATURE_BSP_FLASH_CACHE - - /* Invalidate flash cache. */ - R_FCACHE->FCACHEIV = 1U; - FSP_HARDWARE_REGISTER_WAIT(R_FCACHE->FCACHEIV, 0U); - - /* Enable flash cache. */ - R_FCACHE->FCACHEE = 1U; + R_BSP_FlashCacheEnable(); #endif #if BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER R_FACI_LP->PFBER = 1; @@ -2468,7 +2482,7 @@ void r_flash_lp_cf_enter_pe_mode (flash_lp_instance_ctrl_t * const p_ctrl) R_FACI_LP->PFBER = 0; #endif #if BSP_FEATURE_BSP_FLASH_CACHE - R_FCACHE->FCACHEE = 0U; + R_BSP_FlashCacheDisable(); #endif if (p_ctrl->p_cfg->data_flash_bgo) diff --git a/ra/fsp/src/r_gpt/r_gpt.c b/ra/fsp/src/r_gpt/r_gpt.c index 39bc1d9ee..b53ba0af4 100644 --- a/ra/fsp/src/r_gpt/r_gpt.c +++ b/ra/fsp/src/r_gpt/r_gpt.c @@ -90,6 +90,12 @@ typedef enum e_gpt_prv_capture_event GPT_PRV_CAPTURE_EVENT_B, } gpt_prv_capture_event_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile gpt_prv_ns_callback)(timer_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile gpt_prv_ns_callback)(timer_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -119,6 +125,8 @@ static uint32_t gpt_gtior_calculate(timer_cfg_t const * const p_cfg, gpt_pin_lev #endif +static void r_gpt_call_callback(gpt_instance_ctrl_t * p_ctrl, timer_event_t event, uint32_t capture); + /*********************************************************************************************************************** * ISR prototypes **********************************************************************************************************************/ @@ -157,6 +165,7 @@ const timer_api_t g_timer_on_gpt = .dutyCycleSet = R_GPT_DutyCycleSet, .infoGet = R_GPT_InfoGet, .statusGet = R_GPT_StatusGet, + .callbackSet = R_GPT_CallbackSet, .close = R_GPT_Close, .versionGet = R_GPT_VersionGet }; @@ -725,6 +734,51 @@ fsp_err_t R_GPT_AdcTriggerSet (timer_ctrl_t * const p_ctrl, return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref timer_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_GPT_CallbackSet (timer_ctrl_t * const p_api_ctrl, + void ( * p_callback)(timer_callback_args_t *), + void const * const p_context, + timer_callback_args_t * const p_callback_memory) +{ + gpt_instance_ctrl_t * p_ctrl = (gpt_instance_ctrl_t *) p_api_ctrl; + +#if GPT_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(GPT_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if GPT_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + timer_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Stops counter, disables output pins, and clears internal driver data. Implements @ref timer_api_t::close. * @@ -848,6 +902,15 @@ static void gpt_common_open (gpt_instance_ctrl_t * const p_instance_ctrl, timer_ /* Save register base address. */ uint32_t base_address = (uint32_t) R_GPT0 + (p_cfg->channel * ((uint32_t) R_GPT1 - (uint32_t) R_GPT0)); p_instance_ctrl->p_reg = (R_GPT0_Type *) base_address; + +#if BSP_TZ_SECURE_BUILD + p_instance_ctrl->callback_is_secure = true; +#endif + + /* Set callback and context pointers, if configured */ + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; } /*******************************************************************************************************************//** @@ -879,7 +942,7 @@ static void gpt_hardware_initialize (gpt_instance_ctrl_t * const p_instance_ctrl * RA6M3 manual R01UH0886EJ0100) and other registers required by the driver. */ /* Dividers for GPT are half the enum value. */ - uint32_t gtcr_tpcs = p_cfg->source_div >> 1; + uint32_t gtcr_tpcs = p_cfg->source_div; uint32_t gtcr = gtcr_tpcs << R_GPT0_GTCR_TPCS_Pos; /* Store period register setting. The actual period and is one cycle longer than the register value for saw waves @@ -1114,8 +1177,19 @@ static void gpt_calculate_duty_cycle (gpt_instance_ctrl_t * const p_instance_ctr uint32_t const duty_cycle_counts, gpt_prv_duty_registers_t * p_duty_reg) { - /* 0% and 100% duty cycle are supported in OADTY/OBDTY. */ + /* Determine the current period. The actual period is one cycle longer than the register value for saw waves + * and twice the register value for triangle waves. Reference section 23.2.21 "General PWM Timer Cycle Setting + * Register (GTPR)". The setting passed to the configuration is expected to be half the desired duty cycle for + * triangle waves. */ uint32_t current_period = p_instance_ctrl->p_reg->GTPR; + #if GPT_PRV_EXTRA_FEATURES_ENABLED == GPT_CFG_OUTPUT_SUPPORT_ENABLE + if (p_instance_ctrl->p_cfg->mode < TIMER_MODE_TRIANGLE_WAVE_SYMMETRIC_PWM) + #endif + { + current_period++; + } + + /* 0% and 100% duty cycle are supported in OADTY/OBDTY. */ if (0U == duty_cycle_counts) { p_duty_reg->omdty = GPT_DUTY_CYCLE_MODE_0_PERCENT; @@ -1128,13 +1202,6 @@ static void gpt_calculate_duty_cycle (gpt_instance_ctrl_t * const p_instance_ctr { uint32_t temp_duty_cycle = duty_cycle_counts; - /* When the GPT_SHORTEST_LEVEL_ON is set, the high part of the PWM wave is at the end of the cycle. */ - gpt_extended_cfg_t * p_extend = (gpt_extended_cfg_t *) p_instance_ctrl->p_cfg->p_extend; - if (GPT_SHORTEST_LEVEL_ON == p_extend->shortest_pwm_signal) - { - temp_duty_cycle = current_period - temp_duty_cycle; - } - #if GPT_PRV_EXTRA_FEATURES_ENABLED == GPT_CFG_OUTPUT_SUPPORT_ENABLE if (p_instance_ctrl->p_cfg->mode >= TIMER_MODE_TRIANGLE_WAVE_SYMMETRIC_PWM) { @@ -1163,7 +1230,7 @@ static void gpt_calculate_duty_cycle (gpt_instance_ctrl_t * const p_instance_ctr static uint32_t gpt_clock_frequency_get (gpt_instance_ctrl_t * const p_instance_ctrl) { /* Look up PCLKD frequency and divide it by GPT PCLKD divider. */ - timer_source_div_t pclk_divisor = (timer_source_div_t) (p_instance_ctrl->p_reg->GTCR_b.TPCS << 1); + timer_source_div_t pclk_divisor = (timer_source_div_t) (p_instance_ctrl->p_reg->GTCR_b.TPCS); uint32_t pclk_freq_hz = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_PCLKD); return pclk_freq_hz >> pclk_divisor; @@ -1181,20 +1248,14 @@ static uint32_t gpt_clock_frequency_get (gpt_instance_ctrl_t * const p_instance_ static uint32_t gpt_gtior_calculate (timer_cfg_t const * const p_cfg, gpt_pin_level_t const stop_level) { /* The stop level is used as both the initial level and the stop level. */ - uint32_t gtior = R_GPT0_GTIOR_OAE_Msk | ((uint32_t) stop_level << GPT_PRV_GTIOR_STOP_LEVEL_BIT) | + uint32_t gtior = R_GPT0_GTIOR_OAE_Msk | ((uint32_t) stop_level << R_GPT0_GTIOR_OADFLT_Pos) | ((uint32_t) stop_level << GPT_PRV_GTIOR_INITIAL_LEVEL_BIT); - uint32_t gtion = GPT_PRV_GTIO_LOW_COMPARE_MATCH_HIGH_CYCLE_END; - gpt_pin_level_t compare_match = GPT_PIN_LEVEL_LOW; + uint32_t gtion = GPT_PRV_GTIO_LOW_COMPARE_MATCH_HIGH_CYCLE_END; if (TIMER_MODE_PWM == p_cfg->mode) { - gpt_extended_cfg_t * p_extend = (gpt_extended_cfg_t *) p_cfg->p_extend; - if (GPT_SHORTEST_LEVEL_ON == p_extend->shortest_pwm_signal) - { - /* Output high after compare match when GPT_SHORTEST_LEVEL_ON is used to generate the shortest PWM duty cycle. */ - compare_match = GPT_PIN_LEVEL_HIGH; - } + /* Use default: GTIOn is high at cycle end, then low at compare match. */ } #if GPT_PRV_EXTRA_FEATURES_ENABLED == GPT_CFG_OUTPUT_SUPPORT_ENABLE @@ -1208,15 +1269,10 @@ static uint32_t gpt_gtior_calculate (timer_cfg_t const * const p_cfg, gpt_pin_le /* In one-shot mode, the output pin goes high after the first compare match (one cycle after the timer starts counting). */ if (GPT_PIN_LEVEL_LOW == stop_level) { - compare_match = GPT_PIN_LEVEL_HIGH; + gtion = GPT_PRV_GTIO_HIGH_COMPARE_MATCH_LOW_CYCLE_END; } } - if (compare_match == GPT_PIN_LEVEL_HIGH) - { - gtion = GPT_PRV_GTIO_HIGH_COMPARE_MATCH_LOW_CYCLE_END; - } - gtior |= gtion; return gtior; @@ -1224,6 +1280,63 @@ static uint32_t gpt_gtior_calculate (timer_cfg_t const * const p_cfg, gpt_pin_le #endif +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to GPT instance control block + * @param[in] event Event code + * @param[in] capture Event capture counts (if applicable) + **********************************************************************************************************************/ +static void r_gpt_call_callback (gpt_instance_ctrl_t * p_ctrl, timer_event_t event, uint32_t capture) +{ + timer_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. */ + timer_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->event = event; + p_args->capture = capture; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + gpt_prv_ns_callback p_callback = (gpt_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; + } +} + /*******************************************************************************************************************//** * Common processing for input capture interrupt. * @@ -1256,13 +1369,11 @@ static void r_gpt_capture_common_isr (gpt_prv_capture_event_t event) } /* If a callback is provided, then call it with the captured counter value. */ - if (NULL != p_instance_ctrl->p_cfg->p_callback) + if (NULL != p_instance_ctrl->p_callback) { - timer_callback_args_t callback_args; - callback_args.event = (timer_event_t) ((uint32_t) TIMER_EVENT_CAPTURE_A + (uint32_t) event); - callback_args.capture = counter; - callback_args.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&callback_args); + r_gpt_call_callback(p_instance_ctrl, + (timer_event_t) ((uint32_t) TIMER_EVENT_CAPTURE_A + (uint32_t) event), + counter); } /* Restore context if RTOS is used */ @@ -1303,13 +1414,9 @@ void gpt_counter_overflow_isr (void) R_BSP_IrqClearPending(irq); } - if (NULL != p_instance_ctrl->p_cfg->p_callback) + if (NULL != p_instance_ctrl->p_callback) { - /* Set data to identify callback to user, then call user callback. */ - timer_callback_args_t callback_args; - callback_args.p_context = p_instance_ctrl->p_cfg->p_context; - callback_args.event = TIMER_EVENT_CYCLE_END; - p_instance_ctrl->p_cfg->p_callback(&callback_args); + r_gpt_call_callback(p_instance_ctrl, TIMER_EVENT_CYCLE_END, 0); } /* Restore context if RTOS is used */ @@ -1334,11 +1441,8 @@ void gpt_counter_underflow_isr (void) /* Recover ISR context saved in open. */ gpt_instance_ctrl_t * p_instance_ctrl = (gpt_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - /* Set data to identify callback to user, then call user callback. */ - timer_callback_args_t callback_args; - callback_args.p_context = p_instance_ctrl->p_cfg->p_context; - callback_args.event = TIMER_EVENT_TROUGH; - p_instance_ctrl->p_cfg->p_callback(&callback_args); + /* Call user callback. */ + r_gpt_call_callback(p_instance_ctrl, TIMER_EVENT_TROUGH, 0); /* Restore context if RTOS is used */ FSP_CONTEXT_RESTORE; diff --git a/ra/fsp/src/r_gpt_three_phase/r_gpt_three_phase.c b/ra/fsp/src/r_gpt_three_phase/r_gpt_three_phase.c index b9a033ded..d0be1682a 100644 --- a/ra/fsp/src/r_gpt_three_phase/r_gpt_three_phase.c +++ b/ra/fsp/src/r_gpt_three_phase/r_gpt_three_phase.c @@ -91,6 +91,7 @@ const three_phase_api_t g_gpt_three_phase_on_gpt_three_phase = .start = R_GPT_THREE_PHASE_Start, .reset = R_GPT_THREE_PHASE_Reset, .dutyCycleSet = R_GPT_THREE_PHASE_DutyCycleSet, + .callbackSet = R_GPT_THREE_PHASE_CallbackSet, .close = R_GPT_THREE_PHASE_Close, .versionGet = R_GPT_THREE_PHASE_VersionGet }; @@ -258,6 +259,9 @@ fsp_err_t R_GPT_THREE_PHASE_Reset (three_phase_ctrl_t * const p_ctrl) * In asymmetric PWM mode this enables both count-up and count-down PWM values to be set at trough (or crest) * exclusively. * + * @note It is recommended to call this function in a high-priority callback to ensure that it is not interrupted and + * that no GPT events occur during setting that would result in a duty cycle buffer load operation. + * * Example: * @snippet r_gpt_three_phase_example.c R_GPT_THREE_PHASE_DutyCycleSet * @@ -311,6 +315,37 @@ fsp_err_t R_GPT_THREE_PHASE_DutyCycleSet (three_phase_ctrl_t * const p_ctr return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback for the GPT U-channel with the option to provide memory for the callback argument + * structure. + * Implements @ref three_phase_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. + **********************************************************************************************************************/ +fsp_err_t R_GPT_THREE_PHASE_CallbackSet (three_phase_ctrl_t * const p_ctrl, + void ( * p_callback)(timer_callback_args_t *), + void const * const p_context, + timer_callback_args_t * const p_callback_memory) +{ + gpt_three_phase_instance_ctrl_t * p_instance_ctrl = (gpt_three_phase_instance_ctrl_t *) p_ctrl; + fsp_err_t err = FSP_SUCCESS; + +#if GPT_THREE_PHASE_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_callback); + FSP_ERROR_RETURN(GPT_THREE_PHASE_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + err = R_GPT_CallbackSet(p_instance_ctrl->p_cfg->p_timer_instance[p_instance_ctrl->p_cfg->callback_ch]->p_ctrl, + p_callback, + p_context, + p_callback_memory); + + return err; +} + /*******************************************************************************************************************//** * Stops counters, disables output pins, and clears internal driver data. Implements @ref three_phase_api_t::close. * diff --git a/ra/fsp/src/r_icu/r_icu.c b/ra/fsp/src/r_icu/r_icu.c index c23457f41..ed1d207a3 100644 --- a/ra/fsp/src/r_icu/r_icu.c +++ b/ra/fsp/src/r_icu/r_icu.c @@ -39,6 +39,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile icu_prv_ns_callback)(external_irq_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile icu_prv_ns_callback)(external_irq_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -64,11 +70,12 @@ static const fsp_version_t g_icu_version = /* ICU implementation of External IRQ API. */ const external_irq_api_t g_external_irq_on_icu = { - .open = R_ICU_ExternalIrqOpen, - .enable = R_ICU_ExternalIrqEnable, - .disable = R_ICU_ExternalIrqDisable, - .close = R_ICU_ExternalIrqClose, - .versionGet = R_ICU_ExternalIrqVersionGet + .open = R_ICU_ExternalIrqOpen, + .enable = R_ICU_ExternalIrqEnable, + .disable = R_ICU_ExternalIrqDisable, + .callbackSet = R_ICU_ExternalIrqCallbackSet, + .close = R_ICU_ExternalIrqClose, + .versionGet = R_ICU_ExternalIrqVersionGet }; /*******************************************************************************************************************//** @@ -121,6 +128,13 @@ fsp_err_t R_ICU_ExternalIrqOpen (external_irq_ctrl_t * const p_api_ctrl, externa uint32_t ielsr = R_ICU->IELSR[p_ctrl->irq]; R_ICU->IELSR[p_ctrl->irq] = 0; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_ctrl->p_callback_memory = NULL; + p_ctrl->callback_is_secure = true; +#endif + /* Initialize control block. */ p_ctrl->p_callback = p_cfg->p_callback; p_ctrl->p_context = p_cfg->p_context; @@ -207,6 +221,55 @@ fsp_err_t R_ICU_ExternalIrqDisable (external_irq_ctrl_t * const p_api_ctrl) 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. + **********************************************************************************************************************/ +fsp_err_t R_ICU_ExternalIrqCallbackSet (external_irq_ctrl_t * const p_api_ctrl, + void ( * p_callback)( + external_irq_callback_args_t *), + void const * const p_context, + external_irq_callback_args_t * const p_callback_memory) +{ + icu_instance_ctrl_t * p_ctrl = p_api_ctrl; + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + bool callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#else + FSP_PARAMETER_NOT_USED(p_callback_memory); +#endif + +#if ICU_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_ctrl); + FSP_ERROR_RETURN(ICU_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_callback); + + #if BSP_TZ_SECURE_BUILD + if (!callback_is_secure) + { + FSP_ASSERT(NULL != p_callback_memory); + } + #endif +#endif + +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = callback_is_secure; + p_ctrl->p_callback_memory = p_callback_memory; +#endif + + 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. * @@ -282,11 +345,43 @@ void r_icu_isr (void) if ((NULL != p_ctrl) && (NULL != p_ctrl->p_callback)) { +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + + external_irq_callback_args_t args; + if (p_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + args.channel = p_ctrl->channel; + args.p_context = p_ctrl->p_context; + p_ctrl->p_callback(&args); + } + else + { + /* Save current state of p_callback_args so that it can be shared between interrupts. */ + args = *p_ctrl->p_callback_memory; + + /* Set the callback args passed to the Non-secure calback. */ + p_ctrl->p_callback_memory->channel = p_ctrl->channel; + p_ctrl->p_callback_memory->p_context = p_ctrl->p_context; + + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + icu_prv_ns_callback p_callback = (icu_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_ctrl->p_callback_memory); + + /* Restore the state of p_callback_args. */ + *p_ctrl->p_callback_memory = args; + } + +#else + /* Set data to identify callback to user, then call user callback. */ external_irq_callback_args_t args; args.channel = p_ctrl->channel; args.p_context = p_ctrl->p_context; p_ctrl->p_callback(&args); +#endif } if (level_irq) diff --git a/ra/fsp/src/r_iic_master/r_iic_master.c b/ra/fsp/src/r_iic_master/r_iic_master.c index 2eb7b2a32..53903d916 100644 --- a/ra/fsp/src/r_iic_master/r_iic_master.c +++ b/ra/fsp/src/r_iic_master/r_iic_master.c @@ -133,6 +133,12 @@ typedef enum e_iic_master_transfer_dir_option IIC_MASTER_TRANSFER_DIR_READ = 0x1 } iic_master_transfer_dir_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile iic_master_prv_ns_callback)(i2c_master_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile iic_master_prv_ns_callback)(i2c_master_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -195,7 +201,8 @@ i2c_master_api_t const g_i2c_master_on_iic = .abort = R_IIC_MASTER_Abort, .slaveAddressSet = R_IIC_MASTER_SlaveAddressSet, .close = R_IIC_MASTER_Close, - .versionGet = R_IIC_MASTER_VersionGet + .versionGet = R_IIC_MASTER_VersionGet, + .callbackSet = R_IIC_MASTER_CallbackSet }; /*******************************************************************************************************************//** @@ -210,14 +217,15 @@ i2c_master_api_t const g_i2c_master_on_iic = /*******************************************************************************************************************//** * Opens the I2C device. * - * @retval FSP_SUCCESS Requested clock rate was set exactly. - * @retval FSP_ERR_ALREADY_OPEN Module is already open. - * @retval FSP_ERR_ASSERTION Parameter check failure due to one or more reasons below: - * 1. p_api_ctrl or p_cfg is NULL. - * 2. extended parameter is NULL. - * 3. Callback parameter is NULL. - * 4. Set the rate to fast mode plus on a channel which does not support it. - * 5. Invalid IRQ number assigned + * @retval FSP_SUCCESS Requested clock rate was set exactly. + * @retval FSP_ERR_ALREADY_OPEN Module is already open. + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT Channel is not available on this MCU. + * @retval FSP_ERR_ASSERTION Parameter check failure due to one or more reasons below: + * 1. p_api_ctrl or p_cfg is NULL. + * 2. extended parameter is NULL. + * 3. Callback parameter is NULL. + * 4. Set the rate to fast mode plus on a channel which does not support it. + * 5. Invalid IRQ number assigned **********************************************************************************************************************/ fsp_err_t R_IIC_MASTER_Open (i2c_master_ctrl_t * const p_api_ctrl, i2c_master_cfg_t const * const p_cfg) { @@ -226,13 +234,14 @@ fsp_err_t R_IIC_MASTER_Open (i2c_master_ctrl_t * const p_api_ctrl, i2c_master_cf FSP_ASSERT(p_api_ctrl != NULL); FSP_ASSERT(p_cfg != NULL); FSP_ASSERT(p_cfg->p_extend != NULL); - FSP_ASSERT(p_cfg->p_callback != NULL); FSP_ASSERT(p_cfg->rxi_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->txi_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->tei_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->eri_irq >= (IRQn_Type) 0); FSP_ERROR_RETURN(IIC_MASTER_OPEN != p_ctrl->open, FSP_ERR_ALREADY_OPEN); + FSP_ERROR_RETURN(BSP_FEATURE_IIC_VALID_CHANNEL_MASK & (1 << p_cfg->channel), FSP_ERR_IP_CHANNEL_NOT_PRESENT); + /* If rate is configured as Fast mode plus, check whether the channel supports it */ if (I2C_MASTER_RATE_FASTPLUS == p_cfg->rate) { @@ -248,9 +257,15 @@ fsp_err_t R_IIC_MASTER_Open (i2c_master_ctrl_t * const p_api_ctrl, i2c_master_cf p_ctrl->timeout_mode = ((iic_master_extended_cfg_t *) p_cfg->p_extend)->timeout_mode; /* Record the pointer to the configuration structure for later use */ - p_ctrl->p_cfg = p_cfg; - p_ctrl->slave = p_cfg->slave; - p_ctrl->addr_mode = p_cfg->addr_mode; + p_ctrl->p_cfg = p_cfg; + p_ctrl->slave = p_cfg->slave; + p_ctrl->addr_mode = p_cfg->addr_mode; + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif R_BSP_MODULE_START(FSP_IP_IIC, p_cfg->channel); @@ -408,6 +423,48 @@ fsp_err_t R_IIC_MASTER_SlaveAddressSet (i2c_master_ctrl_t * const p_api_ctrl, return err; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements i2c_master_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. + **********************************************************************************************************************/ +fsp_err_t R_IIC_MASTER_CallbackSet (i2c_master_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2c_master_callback_args_t *), + void const * const p_context, + i2c_master_callback_args_t * const p_callback_memory) +{ + iic_master_instance_ctrl_t * p_ctrl = (iic_master_instance_ctrl_t *) p_api_ctrl; + +#if (IIC_MASTER_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(IIC_MASTER_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if IIC_MASTER_CFG_PARAM_CHECKING_ENABLE + if (!p_ctrl->callback_is_secure) + { + FSP_ASSERT(p_callback_memory); + } + #endif +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Closes the I2C device. May power down IIC peripheral. * This function will safely terminate any in-progress I2C transfers. @@ -511,6 +568,7 @@ static fsp_err_t iic_master_read_write (i2c_master_ctrl_t * const p_api_ctrl, #if IIC_MASTER_CFG_PARAM_CHECKING_ENABLE FSP_ASSERT(p_buffer != NULL); FSP_ERROR_RETURN((p_ctrl->open == IIC_MASTER_OPEN), FSP_ERR_NOT_OPEN); + FSP_ASSERT(((iic_master_instance_ctrl_t *) p_api_ctrl)->p_callback != NULL); #if IIC_MASTER_CFG_DTC_ENABLE /* DTC on RX could actually receive 65535+3 = 65538 bytes as 3 bytes are handled separately. @@ -566,11 +624,25 @@ static fsp_err_t iic_master_read_write (i2c_master_ctrl_t * const p_api_ctrl, **********************************************************************************************************************/ static void iic_master_notify (iic_master_instance_ctrl_t * const p_ctrl, i2c_master_event_t const event) { - i2c_master_callback_args_t args = + i2c_master_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. */ + i2c_master_callback_args_t * p_args = p_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &args; + } + else { - .p_context = p_ctrl->p_cfg->p_context, - .event = event - }; + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args; + } + + p_args->p_context = p_ctrl->p_context; + p_args->event = event; + #if IIC_MASTER_CFG_DTC_ENABLE /* Stop any DTC assisted transfer for tx */ @@ -589,7 +661,32 @@ static void iic_master_notify (iic_master_instance_ctrl_t * const p_ctrl, i2c_ma #endif /* Now do the callback here */ - p_ctrl->p_cfg->p_callback(&args); +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + iic_master_prv_ns_callback p_callback = (iic_master_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; + } /* Clear the err flags */ p_ctrl->err = false; diff --git a/ra/fsp/src/r_iic_slave/r_iic_slave.c b/ra/fsp/src/r_iic_slave/r_iic_slave.c index 60c76a7c3..c1dbc322d 100644 --- a/ra/fsp/src/r_iic_slave/r_iic_slave.c +++ b/ra/fsp/src/r_iic_slave/r_iic_slave.c @@ -114,6 +114,11 @@ /********************************************************************************************************************** * Typedef definitions *********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile iic_slave_prv_ns_callback)(i2c_slave_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile iic_slave_prv_ns_callback)(i2c_slave_callback_args_t * p_args); +#endif /********************************************************************************************************************** * Private function prototypes @@ -127,6 +132,9 @@ static fsp_err_t iic_slave_read_write(i2c_slave_ctrl_t * const p_api_ctrl, uint8_t * const p_buffer, uint32_t const bytes, iic_slave_transfer_dir_t direction); +static void r_iic_slave_call_callback(iic_slave_instance_ctrl_t * p_ctrl, + i2c_slave_event_t event, + uint32_t transaction_count); /* Functions that manipulate hardware */ static void iic_open_hw_slave(iic_slave_instance_ctrl_t * const p_ctrl); @@ -157,11 +165,12 @@ static fsp_version_t const g_iic_slave_version = /* IIC Implementation of I2C device slave interface */ i2c_slave_api_t const g_i2c_slave_on_iic = { - .open = R_IIC_SLAVE_Open, - .read = R_IIC_SLAVE_Read, - .write = R_IIC_SLAVE_Write, - .close = R_IIC_SLAVE_Close, - .versionGet = R_IIC_SLAVE_VersionGet + .open = R_IIC_SLAVE_Open, + .read = R_IIC_SLAVE_Read, + .write = R_IIC_SLAVE_Write, + .close = R_IIC_SLAVE_Close, + .versionGet = R_IIC_SLAVE_VersionGet, + .callbackSet = R_IIC_SLAVE_CallbackSet }; /*******************************************************************************************************************//** @@ -176,14 +185,15 @@ i2c_slave_api_t const g_i2c_slave_on_iic = /******************************************************************************************************************//** * Opens the I2C slave device. * - * @retval FSP_SUCCESS I2C slave device opened successfully. - * @retval FSP_ERR_ALREADY_OPEN Module is already open. - * @retval FSP_ERR_ASSERTION Parameter check failure due to one or more reasons below: - * 1. p_api_ctrl or p_cfg is NULL. - * 2. extended parameter is NULL. - * 3. Callback parameter is NULL. - * 4. Set the rate to fast mode plus on a channel which does not support it. - * 5. Invalid IRQ number assigned + * @retval FSP_SUCCESS I2C slave device opened successfully. + * @retval FSP_ERR_ALREADY_OPEN Module is already open. + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT Channel is not available on this MCU. + * @retval FSP_ERR_ASSERTION Parameter check failure due to one or more reasons below: + * 1. p_api_ctrl or p_cfg is NULL. + * 2. extended parameter is NULL. + * 3. Callback parameter is NULL. + * 4. Set the rate to fast mode plus on a channel which does not support it. + * 5. Invalid IRQ number assigned *********************************************************************************************************************/ fsp_err_t R_IIC_SLAVE_Open (i2c_slave_ctrl_t * const p_api_ctrl, i2c_slave_cfg_t const * const p_cfg) { @@ -193,12 +203,13 @@ fsp_err_t R_IIC_SLAVE_Open (i2c_slave_ctrl_t * const p_api_ctrl, i2c_slave_cfg_t FSP_ASSERT(p_ctrl != NULL); FSP_ASSERT(p_cfg != NULL); FSP_ASSERT(p_cfg->p_extend != NULL); - FSP_ASSERT(p_cfg->p_callback != NULL); FSP_ASSERT(p_cfg->rxi_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->txi_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->tei_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->eri_irq >= (IRQn_Type) 0); + FSP_ERROR_RETURN(BSP_FEATURE_IIC_VALID_CHANNEL_MASK & (1 << p_cfg->channel), FSP_ERR_IP_CHANNEL_NOT_PRESENT); + FSP_ERROR_RETURN(IIC_SLAVE_OPEN != p_ctrl->open, FSP_ERR_ALREADY_OPEN); /* If rate is configured as Fast mode plus, check whether the channel supports it */ @@ -210,7 +221,14 @@ fsp_err_t R_IIC_SLAVE_Open (i2c_slave_ctrl_t * const p_api_ctrl, i2c_slave_cfg_t p_ctrl->p_reg = (R_IIC0_Type *) ((uint32_t) R_IIC0 + (p_cfg->channel * ((uint32_t) R_IIC1 - (uint32_t) R_IIC0))); /* Record the configuration on the device for use later */ - p_ctrl->p_cfg = p_cfg; + 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; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif + R_BSP_MODULE_START(FSP_IP_IIC, p_cfg->channel); /* Indicate that restart and stop condition detection yet to be enabled */ @@ -286,6 +304,48 @@ fsp_err_t R_IIC_SLAVE_Write (i2c_slave_ctrl_t * const p_api_ctrl, uint8_t * cons return err; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements i2c_slave_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. + **********************************************************************************************************************/ +fsp_err_t R_IIC_SLAVE_CallbackSet (i2c_slave_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2c_slave_callback_args_t *), + void const * const p_context, + i2c_slave_callback_args_t * const p_callback_memory) +{ + iic_slave_instance_ctrl_t * p_ctrl = (iic_slave_instance_ctrl_t *) p_api_ctrl; + +#if (IIC_SLAVE_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(IIC_SLAVE_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if IIC_SLAVE_CFG_PARAM_CHECKING_ENABLE + if (!p_ctrl->callback_is_secure) + { + FSP_ASSERT(p_callback_memory); + } + #endif +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /******************************************************************************************************************//** * Closes the I2C device. * @@ -376,6 +436,8 @@ static fsp_err_t iic_slave_read_write (i2c_slave_ctrl_t * const p_api_ctrl, /* Fail if there is already a transfer in progress */ FSP_ERROR_RETURN(IIC_SLAVE_TRANSFER_DIR_NOT_ESTABLISHED == p_ctrl->direction, FSP_ERR_IN_USE); + + FSP_ASSERT(((iic_slave_instance_ctrl_t *) p_api_ctrl)->p_callback != NULL); #endif /* Record the new information about this transfer */ @@ -448,15 +510,8 @@ static void iic_slave_notify (iic_slave_instance_ctrl_t * const p_ctrl, i2c_slav p_ctrl->p_reg->ICCR1 = (uint8_t) (IIC_SLAVE_ICCR1_ICE_BIT_MASK | IIC_SLAVE_PRV_SCL_SDA_NOT_DRIVEN); } - /* Invoke callback */ - /* Fill in the argument to the callback */ - - i2c_slave_callback_args_t args = - { - .p_context = p_ctrl->p_cfg->p_context, - .bytes = p_ctrl->transaction_count, - .event = slave_event - }; + /* Save transaction count */ + uint32_t transaction_count = p_ctrl->transaction_count; /* Reset the transaction count here */ p_ctrl->transaction_count = 0U; @@ -464,7 +519,7 @@ static void iic_slave_notify (iic_slave_instance_ctrl_t * const p_ctrl, i2c_slav p_ctrl->direction = IIC_SLAVE_TRANSFER_DIR_NOT_ESTABLISHED; /* Invoke the callback */ - p_ctrl->p_cfg->p_callback(&args); + r_iic_slave_call_callback(p_ctrl, slave_event, transaction_count); } /*******************************************************************************************************************//** @@ -475,14 +530,6 @@ static void iic_slave_notify (iic_slave_instance_ctrl_t * const p_ctrl, i2c_slav **********************************************************************************************************************/ static void iic_slave_callback_request (iic_slave_instance_ctrl_t * const p_ctrl, i2c_slave_event_t slave_event) { - /* Fill in the argument to the callback */ - i2c_slave_callback_args_t args = - { - .p_context = p_ctrl->p_cfg->p_context, - .event = slave_event, - .bytes = p_ctrl->transaction_count - }; - p_ctrl->direction = IIC_SLAVE_TRANSFER_DIR_NOT_ESTABLISHED; /* Disable timeout function */ @@ -490,7 +537,7 @@ static void iic_slave_callback_request (iic_slave_instance_ctrl_t * const p_ctrl /* Invoke the callback to notify the read request. * The application must call MasterWriteSlaveRead API in the callback.*/ - p_ctrl->p_cfg->p_callback(&args); + r_iic_slave_call_callback(p_ctrl, slave_event, p_ctrl->transaction_count); /* Allow timeouts to be generated on the low value of SCL using long count mode */ p_ctrl->p_reg->ICMR2 = IIC_SLAVE_BUS_MODE_REGISTER_2_MASK; @@ -655,6 +702,64 @@ static void iic_slave_initiate_transaction (iic_slave_instance_ctrl_t * p_ctrl, } } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to iic slave instance control block + * @param[in] event Event code + * @param[in] transaction_count Transaction count for iic slave + **********************************************************************************************************************/ +static void r_iic_slave_call_callback (iic_slave_instance_ctrl_t * p_ctrl, + i2c_slave_event_t event, + uint32_t transaction_count) +{ + i2c_slave_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. */ + i2c_slave_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->bytes = transaction_count; + p_args->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + iic_slave_prv_ns_callback p_callback = (iic_slave_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; + } +} + /******************************************************************************************************************//** * Handles the receive data full interrupt when operating as a slave. * diff --git a/ra/fsp/src/r_iwdt/r_iwdt.c b/ra/fsp/src/r_iwdt/r_iwdt.c index 253c417a1..7bd281901 100644 --- a/ra/fsp/src/r_iwdt/r_iwdt.c +++ b/ra/fsp/src/r_iwdt/r_iwdt.c @@ -67,6 +67,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile iwdt_prv_ns_callback)(wdt_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile iwdt_prv_ns_callback)(wdt_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -125,7 +131,7 @@ static const uint8_t g_wdt_division_lookup[] = }; /* Global pointer to control structure for use by the NMI callback. */ -static iwdt_instance_ctrl_t * gp_iwdt_ctrl = NULL; +static volatile iwdt_instance_ctrl_t * gp_iwdt_ctrl = NULL; /* Watchdog implementation of IWDT Driver */ const wdt_api_t g_wdt_on_iwdt = @@ -136,6 +142,7 @@ const wdt_api_t g_wdt_on_iwdt = .statusClear = R_IWDT_StatusClear, .counterGet = R_IWDT_CounterGet, .timeoutGet = R_IWDT_TimeoutGet, + .callbackSet = R_IWDT_CallbackSet, .versionGet = R_IWDT_VersionGet, }; @@ -159,6 +166,7 @@ const wdt_api_t g_wdt_on_iwdt = * @retval FSP_ERR_NOT_ENABLED An attempt to open the IWDT when the OFS0 register is not * configured for auto-start mode. * @retval FSP_ERR_ALREADY_OPEN Module is already open. This module can only be opened once. + * @retval FSP_ERR_INVALID_STATE The security state of the NMI and the module do not match. **********************************************************************************************************************/ fsp_err_t R_IWDT_Open (wdt_ctrl_t * const p_api_ctrl, wdt_cfg_t const * const p_cfg) { @@ -173,6 +181,13 @@ fsp_err_t R_IWDT_Open (wdt_ctrl_t * const p_api_ctrl, wdt_cfg_t const * const p_ FSP_ASSERT(NULL != p_cfg->p_callback); #endif + /* Ensure this module is in the same security state as the NMI */ + #if defined(BSP_TZ_NONSECURE_BUILD) && BSP_TZ_NONSECURE_BUILD + FSP_ERROR_RETURN(SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk, FSP_ERR_INVALID_STATE); + #elif defined(BSP_TZ_SECURE_BUILD) && BSP_TZ_SECURE_BUILD + FSP_ERROR_RETURN(!(SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk), FSP_ERR_INVALID_STATE); + #endif + /* Enum checking is done here because some enums in wdt_timeout_t are not supported by the IWDT peripheral (they are * included for other implementations of the watchdog interface). */ FSP_ASSERT((p_cfg->timeout == WDT_TIMEOUT_128) || (p_cfg->timeout == WDT_TIMEOUT_512) || \ @@ -371,6 +386,42 @@ fsp_err_t R_IWDT_TimeoutGet (wdt_ctrl_t * const p_api_ctrl, wdt_timeout_values_t return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements wdt_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. + **********************************************************************************************************************/ +fsp_err_t R_IWDT_CallbackSet (wdt_ctrl_t * const p_ctrl, + void ( * p_callback)(wdt_callback_args_t *), + void const * const p_context, + wdt_callback_args_t * const p_callback_memory) +{ + iwdt_instance_ctrl_t * p_instance_ctrl = (iwdt_instance_ctrl_t *) p_ctrl; + +#if IWDT_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(IWDT_OPEN == p_instance_ctrl->wdt_open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_instance_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + + p_instance_ctrl->p_callback = p_callback; + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Return IWDT HAL driver version. Implements @ref wdt_api_t::versionGet. * @@ -406,10 +457,49 @@ static void iwdt_nmi_internal_callback (bsp_grp_irq_t irq) { FSP_PARAMETER_NOT_USED(irq); - /* Call user registered callback */ - wdt_callback_args_t p_args; - p_args.p_context = gp_iwdt_ctrl->p_context; - gp_iwdt_ctrl->p_callback(&p_args); + wdt_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. */ + wdt_callback_args_t * p_args = gp_iwdt_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->p_context = gp_iwdt_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (gp_iwdt_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + gp_iwdt_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. */ + iwdt_prv_ns_callback p_callback = (iwdt_prv_ns_callback) (gp_iwdt_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. */ + gp_iwdt_ctrl->p_callback(p_args); +#endif + if (NULL != gp_iwdt_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *gp_iwdt_ctrl->p_callback_memory = args; + } } /*******************************************************************************************************************//** diff --git a/ra/fsp/src/r_lpm/r_lpm.c b/ra/fsp/src/r_lpm/r_lpm.c index 2670463ed..eaeacddf6 100644 --- a/ra/fsp/src/r_lpm/r_lpm.c +++ b/ra/fsp/src/r_lpm/r_lpm.c @@ -53,6 +53,9 @@ #define LPM_SW_STANDBY_STCONR (0x0U) #define LPM_SW_STANDBY_WAKE_STCONR (0x3U) +#define LPM_SNZREQCR1_OFFSET (0x32ULL) +#define LPM_WUPEN1_OFFSET (0x32ULL) + #define LPM_OPEN (0x524c504d) /*********************************************************************************************************************** @@ -345,7 +348,7 @@ fsp_err_t r_lpm_mcu_specific_low_power_check (lpm_cfg_t const * const p_cfg) { if (LPM_MODE_STANDBY_SNOOZE == p_cfg->low_power_mode) { - FSP_ERROR_RETURN(0U == ((uint32_t) p_cfg->snooze_request_source & (~BSP_FEATURE_LPM_SNZREQCR_MASK)), + FSP_ERROR_RETURN(0U == ((uint64_t) p_cfg->snooze_request_source & (~BSP_FEATURE_LPM_SNZREQCR_MASK)), FSP_ERR_INVALID_ARGUMENT); FSP_ERROR_RETURN(0U == ((uint32_t) p_cfg->snooze_end_sources & (~BSP_FEATURE_LPM_SNZEDCR_MASK)), FSP_ERR_INVALID_ARGUMENT); @@ -377,7 +380,7 @@ fsp_err_t r_lpm_mcu_specific_low_power_check (lpm_cfg_t const * const p_cfg) /* Do nothing. */ } - FSP_ERROR_RETURN(0U == ((uint32_t) p_cfg->standby_wake_sources & ~BSP_FEATURE_ICU_WUPEN_MASK), + FSP_ERROR_RETURN(0U == ((uint64_t) p_cfg->standby_wake_sources & ~BSP_FEATURE_ICU_WUPEN_MASK), FSP_ERR_INVALID_MODE); } @@ -465,7 +468,11 @@ fsp_err_t r_lpm_configure (lpm_cfg_t const * const p_cfg) } /* Set the request condition that can trigger entry in to snooze mode */ - R_SYSTEM->SNZREQCR = (uint32_t) p_cfg->snooze_request_source; + R_SYSTEM->SNZREQCR = (uint32_t) p_cfg->snooze_request_source & UINT32_MAX; + +#if BSP_FEATURE_LPM_HAS_SNZREQCR1 == 1 + R_SYSTEM->SNZREQCR1 = (uint32_t) (p_cfg->snooze_request_source >> LPM_SNZREQCR1_OFFSET) & UINT32_MAX; +#endif /* Enable/disable DTC operation */ snzcr |= (uint32_t) (p_cfg->dtc_state_in_snooze << R_SYSTEM_SNZCR_SNZDTCEN_Pos); @@ -474,7 +481,11 @@ fsp_err_t r_lpm_configure (lpm_cfg_t const * const p_cfg) R_ICU->SELSR0_b.SELS = (uint8_t) p_cfg->snooze_cancel_sources; /* Set all sources that can cause an exit from snooze mode to software standby. */ - R_SYSTEM->SNZEDCR = (uint8_t) p_cfg->snooze_end_sources; + R_SYSTEM->SNZEDCR = (uint8_t) p_cfg->snooze_end_sources & UINT8_MAX; + +#if BSP_FEATURE_LPM_HAS_SNZEDCR1 == 1 + R_SYSTEM->SNZEDCR1 = (uint8_t) (p_cfg->snooze_end_sources >> 8U) & UINT8_MAX; +#endif } /* Set SBYCR to Standby/Deep Standby. */ @@ -486,7 +497,10 @@ fsp_err_t r_lpm_configure (lpm_cfg_t const * const p_cfg) sbycr = (1U << R_SYSTEM_SBYCR_SSBY_Pos); #endif - R_ICU->WUPEN = p_cfg->standby_wake_sources; + R_ICU->WUPEN = (uint32_t) p_cfg->standby_wake_sources & UINT32_MAX; +#if BSP_FEATURE_ICU_HAS_WUPEN1 == 1 + R_ICU->WUPEN1 = (uint32_t) (p_cfg->standby_wake_sources >> LPM_WUPEN1_OFFSET) & UINT32_MAX; +#endif } else { @@ -558,9 +572,13 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) uint32_t saved_opccr = 0U; uint32_t saved_sopccr = 0U; uint32_t saved_ostdcr_ostde = 0U; - uint32_t saved_hocowtcr = 0U; - uint32_t new_hocowtcr = 0U; - uint32_t stopped_modules = 0; + #if BSP_FEATURE_CGC_HAS_HOCOWTCR == 1 + uint32_t saved_hocowtcr = 0U; + uint32_t new_hocowtcr = 0U; + #endif + #if BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED + uint32_t stopped_modules = 0; + #endif #endif if (1U == R_SYSTEM->SBYCR_b.SSBY) @@ -577,6 +595,9 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) FSP_ERROR_RETURN(FSP_SUCCESS == r_lpm_check_clocks(clock_source), FSP_ERR_INVALID_MODE); } + /* Enable writing to CGC and Low Power Mode registers. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_CGC); #else /* RA6 Series Only: @@ -586,8 +607,11 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) saved_opccr = R_SYSTEM->OPCCR_b.OPCM; saved_sopccr = R_SYSTEM->SOPCCR_b.SOPCM; + #if BSP_FEATURE_CGC_HAS_HOCOWTCR == 1 + /* Save HOCOWTCR_b.HSTS */ saved_hocowtcr = R_SYSTEM->HOCOWTCR_b.HSTS; + #endif /* Enable writing to CGC and Low Power Mode registers. */ R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); @@ -602,18 +626,25 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) { /* Verify clock settings. */ FSP_ERROR_RETURN(FSP_SUCCESS == r_lpm_check_clocks(clock_source), FSP_ERR_INVALID_MODE); + #if BSP_FEATURE_CGC_HAS_HOCOWTCR == 1 new_hocowtcr = LPM_SW_STANDBY_HOCOWTCR_SCI0_HSTS; } else { new_hocowtcr = LPM_SW_STANDBY_HOCOWTCR_HSTS; + #endif } + #if BSP_FEATURE_LPM_HAS_STCONR == 1 + /* Set STCONR based on the current system clock. */ if (LPM_CLOCK_HOCO == clock_source) { + #if BSP_FEATURE_CGC_HAS_HOCOWTCR == 1 + /* Set HOCOWTCR_b.HSTS when using HOCO as the system clock */ R_SYSTEM->HOCOWTCR_b.HSTS = R_SYSTEM_HOCOWTCR_HSTS_Msk & (new_hocowtcr << R_SYSTEM_HOCOWTCR_HSTS_Pos); + #endif R_SYSTEM->STCONR = LPM_SW_STANDBY_STCONR; } @@ -621,6 +652,7 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) { R_SYSTEM->STCONR = LPM_SW_STANDBY_WAKE_STCONR; } + #endif } else { @@ -671,6 +703,10 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) /* Enable Snooze mode (SNZCR.SNZE = 1) immediately before entering to Software Standby mode. * See Section 11.8.2 "Canceling Snooze Mode" in the RA6M3 manual R01UM0004EU0110 */ R_SYSTEM->SNZCR_b.SNZE = 1; + + /* Dummy read required. + * infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0321a/BIHICBGB.html */ + R_SYSTEM->SNZCR; } /* DSB should be last instruction executed before WFI @@ -690,10 +726,12 @@ fsp_err_t r_lpm_low_power_enter (lpm_instance_ctrl_t * const p_instance_ctrl) r_lpm_wait_for_operating_mode_flags(); /* Restore system registers to the values prior to entering standby. */ - R_SYSTEM->OPCCR = saved_opccr & R_SYSTEM_OPCCR_OPCM_Msk; - R_SYSTEM->SOPCCR = saved_sopccr & R_SYSTEM_SOPCCR_SOPCM_Msk; - R_SYSTEM->OSTDCR_b.OSTDE = 0x1U & saved_ostdcr_ostde; + R_SYSTEM->OPCCR = saved_opccr & R_SYSTEM_OPCCR_OPCM_Msk; + R_SYSTEM->SOPCCR = saved_sopccr & R_SYSTEM_SOPCCR_SOPCM_Msk; + R_SYSTEM->OSTDCR_b.OSTDE = 0x1U & saved_ostdcr_ostde; + #if BSP_FEATURE_CGC_HAS_HOCOWTCR == 1 R_SYSTEM->HOCOWTCR_b.HSTS = R_SYSTEM_HOCOWTCR_HSTS_Msk & (saved_hocowtcr << R_SYSTEM_HOCOWTCR_HSTS_Pos); + #endif /* Disable writing to CGC and Low Power Mode registers. */ R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); diff --git a/ra/fsp/src/r_lvd/r_lvd.c b/ra/fsp/src/r_lvd/r_lvd.c index 8e353f8a1..1cc383a1d 100644 --- a/ra/fsp/src/r_lvd/r_lvd.c +++ b/ra/fsp/src/r_lvd/r_lvd.c @@ -76,6 +76,11 @@ /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile lvd_prv_ns_callback)(lvd_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile lvd_prv_ns_callback)(lvd_callback_args_t * p_args); +#endif /*********************************************************************************************************************** * Private function prototypes @@ -115,14 +120,19 @@ static const fsp_version_t g_lvd_version = }; /* Look-up tables for writing to monitor 1 and monitor 2 registers. */ -static uint8_t volatile * const g_lvdncr0_lut[] = {&(R_SYSTEM->LVD1CR0), &(R_SYSTEM->LVD2CR0)}; -static uint8_t volatile * const g_lvdncr1_lut[] = {&(R_SYSTEM->LVD1CR1), &(R_SYSTEM->LVD2CR1)}; -static uint8_t volatile * const g_lvdnsr_lut[] = {&(R_SYSTEM->LVD1SR), &(R_SYSTEM->LVD2SR)}; -static uint32_t const g_lvdlvlr_offset_lut[] = +static uint8_t volatile * const g_lvdncr0_lut[] = {&(R_SYSTEM->LVD1CR0), &(R_SYSTEM->LVD2CR0)}; +static uint8_t volatile * const g_lvdncr1_lut[] = {&(R_SYSTEM->LVD1CR1), &(R_SYSTEM->LVD2CR1)}; +static uint8_t volatile * const g_lvdnsr_lut[] = {&(R_SYSTEM->LVD1SR), &(R_SYSTEM->LVD2SR)}; +#if (BSP_FEATURE_LVD_HAS_LVDLVLR == 1) +static uint32_t const g_lvdlvlr_offset_lut[] = { LVD_PRV_LVDLVLR_LVD1LVL_OFFSET, LVD_PRV_LVDLVLR_LVD2LVL_OFFSET }; static uint32_t const g_lvdlvlr_mask_lut[] = {LVD_PRV_LVDLVLR_LVD1LVL_MASK, LVD_PRV_LVDLVLR_LVD2LVL_MASK}; +#else +static uint8_t volatile * const g_lvdncmpcr_lut[] = {&(R_SYSTEM->LVD1CMPCR), &(R_SYSTEM->LVD2CMPCR)}; +static uint32_t const g_lvdnlvl_mask_lut[] = {R_SYSTEM_LVD1CMPCR_LVD1LVL_Msk, R_SYSTEM_LVD2CMPCR_LVD2LVL_Msk}; +#endif /*********************************************************************************************************************** * Global Variables @@ -136,6 +146,7 @@ const lvd_api_t g_lvd_on_lvd = .statusClear = R_LVD_StatusClear, .close = R_LVD_Close, .versionGet = R_LVD_VersionGet, + .callbackSet = R_LVD_CallbackSet }; /*******************************************************************************************************************//** @@ -174,6 +185,15 @@ fsp_err_t R_LVD_Open (lvd_ctrl_t * const p_api_ctrl, lvd_cfg_t const * const p_c /* Store the user configuration. */ p_ctrl->p_cfg = p_cfg; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_ctrl->callback_is_secure = true; +#endif + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + /* Store control structure so it can be accessed from NMI handler. */ gp_ctrls[p_ctrl->p_cfg->monitor_number - 1] = p_ctrl; @@ -256,6 +276,42 @@ fsp_err_t R_LVD_StatusClear (lvd_ctrl_t * const p_api_ctrl) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements lvd_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. + **********************************************************************************************************************/ +fsp_err_t R_LVD_CallbackSet (lvd_ctrl_t * const p_api_ctrl, + void ( * p_callback)(lvd_callback_args_t *), + void const * const p_context, + lvd_callback_args_t * const p_callback_memory) +{ + lvd_instance_ctrl_t * p_ctrl = (lvd_instance_ctrl_t *) p_api_ctrl; + +#if (LVD_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(LVD_OPENED == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Disables the LVD peripheral. Closes the driver instance. * @@ -275,7 +331,9 @@ fsp_err_t R_LVD_Close (lvd_ctrl_t * const p_api_ctrl) FSP_ERROR_RETURN(LVD_OPENED == p_ctrl->open, FSP_ERR_NOT_OPEN); #endif +#if BSP_FEATURE_LVD_HAS_LVDLVLR == 1 FSP_CRITICAL_SECTION_DEFINE; +#endif uint32_t monitor_index = p_ctrl->p_cfg->monitor_number - 1; @@ -314,6 +372,8 @@ fsp_err_t R_LVD_Close (lvd_ctrl_t * const p_api_ctrl) *(g_lvdncr0_lut[monitor_index]) = lvdncr0; +#if BSP_FEATURE_LVD_HAS_LVDLVLR == 1 + /* Critical section required because LVCMPCR register is shared with other instances. */ FSP_CRITICAL_SECTION_ENTER; @@ -321,6 +381,9 @@ fsp_err_t R_LVD_Close (lvd_ctrl_t * const p_api_ctrl) R_SYSTEM->LVCMPCR &= (uint8_t) ~(p_ctrl->p_cfg->monitor_number << LVD_PRV_LVCMPCR_LVD1E_OFFSET); FSP_CRITICAL_SECTION_EXIT; +#else + *(g_lvdncmpcr_lut[monitor_index]) &= (uint8_t) ~R_SYSTEM_LVD1CMPCR_LVD1E_Msk; +#endif R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LVD); @@ -435,6 +498,7 @@ static void r_lvd_hw_configure (lvd_instance_ctrl_t * p_ctrl) /* Enable access to LVD registers. */ R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LVD); +#if (BSP_FEATURE_LVD_HAS_LVDLVLR == 1) uint32_t lvdne_mask = p_ctrl->p_cfg->monitor_number << LVD_PRV_LVCMPCR_LVD1E_OFFSET; uint32_t lvdlvr_offset = g_lvdlvlr_offset_lut[monitor_index]; @@ -456,6 +520,44 @@ static void r_lvd_hw_configure (lvd_instance_ctrl_t * p_ctrl) R_SYSTEM->LVCMPCR |= (uint8_t) lvdne_mask; FSP_CRITICAL_SECTION_EXIT; +#else + uint8_t lvdne[LVD_PRV_NUMBER_OF_MONITORS]; + uint8_t i; + + /* Critical section required because LVCMPCR and LVDLVLR registers are shared with other instances. */ + FSP_CRITICAL_SECTION_ENTER; + + /* To change a LVDNLVL register both voltage detection circuits must be disabled. + * Disable the voltage detection circuit for all monitors before writing the LVDLVLR register. + * See section 7.2.2 "LVD1CMPCR : Voltage Monitoring 1 Comparator Control Register" in the RA6M4 manual R01HUM0890EJ0050.*/ + for (i = 0; i < LVD_PRV_NUMBER_OF_MONITORS; i++) + { + lvdne[i] = *(g_lvdncmpcr_lut[i]) & R_SYSTEM_LVD1CMPCR_LVD1E_Msk; // Preserve enable values for other monitors + *(g_lvdncmpcr_lut[i]) &= (uint8_t) ~R_SYSTEM_LVD1CMPCR_LVD1E_Msk; + } + + /* Configure the voltage threshold setting. */ + uint8_t lvdncmpcr = *(g_lvdncmpcr_lut[monitor_index]); + lvdncmpcr &= (uint8_t) ~(g_lvdnlvl_mask_lut[monitor_index]); + lvdncmpcr |= p_ctrl->p_cfg->voltage_threshold; + + /* Write the voltage level setting. */ + *(g_lvdncmpcr_lut[monitor_index]) = lvdncmpcr; + + /* Enable the voltage detection circuits. */ + for (i = 0; i < LVD_PRV_NUMBER_OF_MONITORS; i++) + { + if (monitor_index == i) + { + *(g_lvdncmpcr_lut[monitor_index]) |= R_SYSTEM_LVD1CMPCR_LVD1E_Msk; + } + else + { + *(g_lvdncmpcr_lut[i]) |= lvdne[i]; + } + } + FSP_CRITICAL_SECTION_EXIT; +#endif /* Write settings to control registers. */ *(g_lvdncr0_lut[monitor_index]) = (uint8_t) lvdncr0; @@ -575,10 +677,52 @@ static void lvd_common_isr_handler (lvd_instance_ctrl_t * p_ctrl) uint32_t monitor_index = p_ctrl->p_cfg->monitor_number - 1; lvd_callback_args_t callback_args; - callback_args.current_state = + + /* 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. */ + lvd_callback_args_t * p_args = p_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &callback_args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + callback_args = *p_args; + } + + p_args->current_state = (lvd_current_state_t) ((*(g_lvdnsr_lut[monitor_index]) & LVD_PRV_LVDNSR_MON_MASK) > 0); - callback_args.monitor_number = p_ctrl->p_cfg->monitor_number; - p_ctrl->p_cfg->p_callback(&callback_args); + p_args->monitor_number = p_ctrl->p_cfg->monitor_number; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + lvd_prv_ns_callback p_callback = (lvd_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 = callback_args; + } R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LVD); @@ -619,7 +763,6 @@ static void lvd_nmi_handler (bsp_grp_irq_t irq) { /* Save context if RTOS is used */ FSP_CONTEXT_SAVE - /* Call common isr handler. */ lvd_common_isr_handler(gp_ctrls[irq - BSP_GRP_IRQ_LVD1]); diff --git a/ra/fsp/src/r_ospi/r_ospi.c b/ra/fsp/src/r_ospi/r_ospi.c new file mode 100644 index 000000000..44072e5e0 --- /dev/null +++ b/ra/fsp/src/r_ospi/r_ospi.c @@ -0,0 +1,800 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "r_ospi.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define OSPI_PRV_OPEN (0x4F535049U) +#define OSPI_PRV_SHIFT(device_0_settings, device) \ + (device_0_settings << (device * 16U)) +#define OSPI_PRV_RMW(reg, device_0_settings, device) \ + ((reg & ~(uint32_t) OSPI_PRV_SHIFT(UINT16_MAX, device)) | (OSPI_PRV_SHIFT(device_0_settings, device))) +#define OSPI_PRV_RMW_MASKED(reg, mask, device_0_settings, device) \ + ((reg & ~(uint32_t) OSPI_PRV_SHIFT(mask, device)) | (OSPI_PRV_SHIFT(device_0_settings, device))) +#define OSPI_PRV_AUTOMATIC_CALIBRATION_NORMAL_END (3U) +#define OSPI_PRV_DIRECT_COMMAND_MASK (3U) +#define OSPI_PRV_DIRECT_ADDR_AND_DATA_MASK (7U) +#define OSPI_PRV_PAGE_SIZE_BYTES (256U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +static fsp_err_t r_ospi_automatic_calibration_seq(ospi_instance_ctrl_t * p_instance_ctrl); +static bool r_ospi_status_sub(ospi_instance_ctrl_t * p_instance_ctrl, uint8_t bit_pos); +static fsp_err_t r_ospi_spi_protocol_specific_settings(ospi_instance_ctrl_t * p_instance_ctrl, + spi_flash_protocol_t spi_protocol); +static void r_ospi_wen(ospi_instance_ctrl_t * p_instance_ctrl); +static void r_ospi_direct_transfer(ospi_instance_ctrl_t * p_instance_ctrl, + spi_flash_direct_transfer_t * const p_transfer, + spi_flash_direct_transfer_dir_t direction); + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/** Version data structure used by error logger macro. */ +static const fsp_version_t g_ospi_version = +{ + .api_version_minor = SPI_FLASH_API_VERSION_MINOR, + .api_version_major = SPI_FLASH_API_VERSION_MAJOR, + .code_version_major = OSPI_CODE_VERSION_MAJOR, + .code_version_minor = OSPI_CODE_VERSION_MINOR +}; + +/*******************************************************************************************************************//** + * @addtogroup OSPI + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Global Variables + **********************************************************************************************************************/ + +const spi_flash_api_t g_ospi_on_spi_flash = +{ + .open = R_OSPI_Open, + .directWrite = R_OSPI_DirectWrite, + .directRead = R_OSPI_DirectRead, + .directTransfer = R_OSPI_DirectTransfer, + .spiProtocolSet = R_OSPI_SpiProtocolSet, + .write = R_OSPI_Write, + .erase = R_OSPI_Erase, + .statusGet = R_OSPI_StatusGet, + .xipEnter = R_OSPI_XipEnter, + .xipExit = R_OSPI_XipExit, + .bankSet = R_OSPI_BankSet, + .close = R_OSPI_Close, + .versionGet = R_OSPI_VersionGet, +}; + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Open the OSPI driver module. After the driver is open, the OSPI can be accessed like internal flash memory. + * + * Implements @ref spi_flash_api_t::open. + * + * Example: + * @snippet r_ospi_example.c R_OSPI_Open + * + * @retval FSP_SUCCESS Configuration was successful. + * @retval FSP_ERR_ASSERTION The parameter p_ctrl or p_cfg is NULL. + * @retval FSP_ERR_ALREADY_OPEN Driver has already been opened with the same p_ctrl. + * @retval FSP_ERR_CALIBRATE_FAILED Failed to perform auto-calibrate. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_Open (spi_flash_ctrl_t * p_ctrl, spi_flash_cfg_t const * const p_cfg) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; + +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_cfg); + FSP_ASSERT(NULL != p_cfg->p_extend); + FSP_ERROR_RETURN(OSPI_PRV_OPEN != p_instance_ctrl->open, FSP_ERR_ALREADY_OPEN); +#endif + + /* Enable clock to the OSPI block */ + R_BSP_MODULE_START(FSP_IP_OSPI, 0U); + ospi_extended_cfg_t * p_cfg_extend = (ospi_extended_cfg_t *) p_cfg->p_extend; + + /* Initialize control block. */ + p_instance_ctrl->p_cfg = p_cfg; + p_instance_ctrl->spi_protocol = p_cfg->spi_protocol; + p_instance_ctrl->channel = p_cfg_extend->channel; + + /* Perform OSPI initial setup as described in hardware manual (see Section 34.3.6.1 + * 'Initial Settings' of the RA6M4 manual R01UH0890EJ0100). */ + + /* Set the device type as OctaFlash and storage capacity */ + R_OSPI->DSR[p_instance_ctrl->channel] = p_cfg_extend->memory_size & R_OSPI_DSR_DVSZ_Msk; + + /* DCSTR and DRCSTR values are designed to not change at the time of changing the SPI protocol. + * Minimum latencies are same for SPI and SOPI. + * In case the SPI protocol is intended to be changed to DOPI, these should be configured with latencies required for DOPI. + */ + ospi_timing_setting_t const * p_timing = p_cfg_extend->p_timing_settings; + R_OSPI->DCSTR = (uint32_t) (p_timing->cs_pulldown_lead << R_OSPI_DCSTR_DVSELLO_Pos) | + (uint32_t) (p_timing->cs_pullup_lag << R_OSPI_DCSTR_DVSELHI_Pos) | + (uint32_t) (p_timing->command_to_command_interval << + R_OSPI_DCSTR_DVSELCMD_Pos); + p_timing = p_cfg_extend->p_mem_mapped_read_timing_settings; + R_OSPI->DRCSTR = OSPI_PRV_RMW(R_OSPI->DRCSTR, + ((uint32_t) (p_cfg_extend->single_continuous_mode_read_idle_time << + R_OSPI_DRCSTR_CTRW0_Pos) | + (uint32_t) (p_timing->cs_pullup_lag << R_OSPI_DRCSTR_DVRDHI0_Pos) | + (uint32_t) (p_timing->cs_pulldown_lead << R_OSPI_DRCSTR_DVRDLO0_Pos) | + (uint32_t) (p_timing->command_to_command_interval << R_OSPI_DRCSTR_DVRDCMD0_Pos)), + p_instance_ctrl->channel); + + p_timing = p_cfg_extend->p_mem_mapped_write_timing_settings; + + /* Always keep single continuous write mode enabled with appropriate settings */ + R_OSPI->DWCSTR = OSPI_PRV_RMW(R_OSPI->DWCSTR, + ((uint32_t) (1U << R_OSPI_DWCSTR_CTW0_Pos) | + (uint32_t) (p_cfg_extend->single_continuous_mode_write_idle_time << + R_OSPI_DWCSTR_CTWW0_Pos) | + (uint32_t) (p_timing->cs_pullup_lag << R_OSPI_DWCSTR_DVWHI0_Pos) | + (uint32_t) (p_timing->cs_pulldown_lead << R_OSPI_DWCSTR_DVWLO0_Pos) | + (uint32_t) (p_timing->command_to_command_interval << R_OSPI_DWCSTR_DVWCMD0_Pos)), + p_instance_ctrl->channel); + + /* Max = 256 bytes, i.e., Page size */ + R_OSPI->DWSCTSR = OSPI_PRV_SHIFT(OSPI_PRV_PAGE_SIZE_BYTES << R_OSPI_DWSCTSR_CTSN0_Pos, p_instance_ctrl->channel); + + /* Read back to ensure value has been written */ + FSP_HARDWARE_REGISTER_WAIT(R_OSPI->DWSCTSR, + OSPI_PRV_SHIFT(OSPI_PRV_PAGE_SIZE_BYTES << R_OSPI_DWSCTSR_CTSN0_Pos, + p_instance_ctrl->channel)); + + /* Setup SPI protocol specific registers */ + fsp_err_t ret = r_ospi_spi_protocol_specific_settings(p_instance_ctrl, p_cfg->spi_protocol); + if (FSP_SUCCESS == ret) + { + p_instance_ctrl->open = OSPI_PRV_OPEN; + } + + return ret; +} + +/*******************************************************************************************************************//** + * Writes raw data directly to the OctaFlash. API not supported. Use R_OSPI_DirectTransfer + * + * Implements @ref spi_flash_api_t::directWrite. + * + * @retval FSP_ERR_UNSUPPORTED API not supported by OSPI. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_DirectWrite (spi_flash_ctrl_t * p_ctrl, + uint8_t const * const p_src, + uint32_t const bytes, + bool const read_after_write) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(p_src); + FSP_PARAMETER_NOT_USED(bytes); + FSP_PARAMETER_NOT_USED(read_after_write); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * Reads raw data directly from the OctaFlash. API not supported. Use R_OSPI_DirectTransfer. + * + * Implements @ref spi_flash_api_t::directRead. + * + * @retval FSP_ERR_UNSUPPORTED API not supported by OSPI. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_DirectRead (spi_flash_ctrl_t * p_ctrl, uint8_t * const p_dest, uint32_t const bytes) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(p_dest); + FSP_PARAMETER_NOT_USED(bytes); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * Read/Write raw data directly with the OctaFlash. + * + * Implements @ref spi_flash_api_t::directTransfer. + * + * Example: + * @snippet r_ospi_example.c R_OSPI_DirectTransfer + * + * @retval FSP_SUCCESS The flash was programmed successfully. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_DirectTransfer (spi_flash_ctrl_t * p_ctrl, + spi_flash_direct_transfer_t * const p_transfer, + spi_flash_direct_transfer_dir_t direction) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_transfer); + FSP_ASSERT(0 != p_transfer->command_length); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + r_ospi_direct_transfer(p_instance_ctrl, p_transfer, direction); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Enters Single Continuous Read/Write mode. + * + * Implements @ref spi_flash_api_t::xipEnter. + * + * @retval FSP_SUCCESS The flash was programmed successfully. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_XipEnter (spi_flash_ctrl_t * p_ctrl) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Single continuous read mode (CTR0/1) is enabled. Other values are set during Open */ + R_OSPI->DRCSTR = + OSPI_PRV_RMW_MASKED(R_OSPI->DRCSTR, + R_OSPI_DRCSTR_CTR0_Msk, + ((uint32_t) (1U << R_OSPI_DRCSTR_CTR0_Pos)), + p_instance_ctrl->channel); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Exits XIP (execute in place) mode. + * + * Implements @ref spi_flash_api_t::xipExit. + * + * @retval FSP_SUCCESS The flash was programmed successfully. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_XipExit (spi_flash_ctrl_t * p_ctrl) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Single continuous read mode (CTR0/1) is disabled. Other values are set during Open */ + R_OSPI->DRCSTR = OSPI_PRV_RMW_MASKED(R_OSPI->DRCSTR, R_OSPI_DRCSTR_CTR0_Msk, 0U, p_instance_ctrl->channel); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Program a page of data to the flash. + * + * Implements @ref spi_flash_api_t::write. + * + * Example: + * @snippet r_ospi_example.c R_OSPI_Write + * + * @retval FSP_SUCCESS The flash was programmed successfully. + * @retval FSP_ERR_ASSERTION p_instance_ctrl, p_dest or p_src is NULL, or byte_count crosses a page boundary. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + * @retval FSP_ERR_DEVICE_BUSY Another Write/Erase transaction is in progress. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_Write (spi_flash_ctrl_t * p_ctrl, + uint8_t const * const p_src, + uint8_t * const p_dest, + uint32_t byte_count) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_src); + FSP_ASSERT(NULL != p_dest); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(OSPI_PRV_PAGE_SIZE_BYTES >= byte_count); + FSP_ASSERT(0 != byte_count); +#endif + + FSP_ERROR_RETURN(false == r_ospi_status_sub(p_instance_ctrl, p_instance_ctrl->p_cfg->write_status_bit), + FSP_ERR_DEVICE_BUSY); + + r_ospi_wen(p_instance_ctrl); + + uint32_t i = 0; + + /* Perform entire write opetation keeping the same access width to remain in single continuous write mode (see Section 34.5.1, point#3 + * 'Single continuous write operation' of the RA6M4 manual R01UH0890EJ0100). + * + * A change in access width will reissue the write command only when the access width change happens at a 128-bit boundary. + * This is not handled by the code code below. + * Moreover, a blocking wait (until WIP = 0) needs to be introduced in order to change the access width within this API. + * Below is a conservative approach to perform the entire transfer with a fixed access width. + * Also, memcpy should not be used here to take advantage of larger access widths. + * + * *//* Word access */ + if (0 == byte_count % 4U) + { + uint32_t * p_word_aligned_dest = (uint32_t *) p_dest; + uint32_t * p_word_aligned_src = (uint32_t *) p_src; + for (i = 0; i < byte_count / 4U; i++) + { + *p_word_aligned_dest = *p_word_aligned_src; + p_word_aligned_dest++; + p_word_aligned_src++; + } + } + /* Half Word access */ + else if (0 == byte_count % 2U) + { + uint16_t * p_half_word_aligned_dest = (uint16_t *) p_dest; + uint16_t * p_half_word_aligned_src = (uint16_t *) p_src; + for (i = 0; i < byte_count / 2U; i++) + { + *p_half_word_aligned_dest = *p_half_word_aligned_src; + p_half_word_aligned_dest++; + p_half_word_aligned_src++; + } + } + /* Byte access */ + else + { + for (i = 0; i < byte_count; i++) + { + p_dest[i] = p_src[i]; + } + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Erase a block or sector of flash. The byte_count must exactly match one of the erase sizes defined in spi_flash_cfg_t. + * For chip erase, byte_count must be SPI_FLASH_ERASE_SIZE_CHIP_ERASE. + * + * Implements @ref spi_flash_api_t::erase. + * + * @retval FSP_SUCCESS The command to erase the flash was executed successfully. + * @retval FSP_ERR_ASSERTION p_instance_ctrl or p_device_address is NULL, byte_count doesn't match an erase + * size defined in spi_flash_cfg_t, or byte_count is set to 0. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + * @retval FSP_ERR_DEVICE_BUSY The device is busy. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_Erase (spi_flash_ctrl_t * p_ctrl, uint8_t * const p_device_address, uint32_t byte_count) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; + +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_device_address); + FSP_ASSERT(0 != byte_count); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + spi_flash_cfg_t const * p_cfg = p_instance_ctrl->p_cfg; + uint16_t erase_command = 0; + uint32_t chip_address = (uint32_t) p_device_address - BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS; + bool send_address = true; + ospi_extended_cfg_t * p_cfg_extend = (ospi_extended_cfg_t *) p_cfg->p_extend; + FSP_ERROR_RETURN(false == r_ospi_status_sub(p_instance_ctrl, p_cfg->write_status_bit), FSP_ERR_DEVICE_BUSY); + + for (uint32_t index = 0; index < p_cfg->erase_command_list_length; index++) + { + /* If requested byte_count is supported by underlying flash, store the command. */ + if (byte_count == p_cfg->p_erase_command_list[index].size) + { + if (p_cfg_extend->memory_size == byte_count) + { + /* Don't send address for chip erase. */ + send_address = false; + } + + erase_command = p_cfg->p_erase_command_list[index].command; + break; + } + } + +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(0U != erase_command); +#endif + r_ospi_wen(p_instance_ctrl); + + spi_flash_direct_transfer_t direct_command = {0}; + direct_command.command = erase_command; + direct_command.address = chip_address; + direct_command.address_length = (true == send_address) ? + (OSPI_PRV_DIRECT_ADDR_AND_DATA_MASK & (p_cfg->address_bytes + 1U)) : 0U; + direct_command.command_length = (SPI_FLASH_PROTOCOL_EXTENDED_SPI == p_instance_ctrl->spi_protocol) ? + 1U : (p_cfg_extend->p_opi_commands->command_bytes & OSPI_PRV_DIRECT_COMMAND_MASK); + + r_ospi_direct_transfer(p_instance_ctrl, &direct_command, SPI_FLASH_DIRECT_TRANSFER_DIR_WRITE); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Gets the write or erase status of the flash. + * + * Implements @ref spi_flash_api_t::statusGet. + * + * Example: + * @snippet r_ospi_example.c R_OSPI_StatusGet + * + * @retval FSP_SUCCESS The write status is in p_status. + * @retval FSP_ERR_ASSERTION p_instance_ctrl or p_status is NULL. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_StatusGet (spi_flash_ctrl_t * p_ctrl, spi_flash_status_t * const p_status) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; + +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_status); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Read device status. */ + p_status->write_in_progress = r_ospi_status_sub(p_instance_ctrl, p_instance_ctrl->p_cfg->write_status_bit); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Selects the bank to access. + * + * Implements @ref spi_flash_api_t::bankSet. + * + * @retval FSP_ERR_UNSUPPORTED API not supported by OSPI. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_BankSet (spi_flash_ctrl_t * p_ctrl, uint32_t bank) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; + + FSP_PARAMETER_NOT_USED(p_instance_ctrl); + FSP_PARAMETER_NOT_USED(bank); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * Sets the SPI protocol. + * + * Implements @ref spi_flash_api_t::spiProtocolSet. + * + * @retval FSP_SUCCESS SPI protocol updated on MCU peripheral. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + * @retval FSP_ERR_CALIBRATE_FAILED Failed to perform auto-calibrate. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_SpiProtocolSet (spi_flash_ctrl_t * p_ctrl, spi_flash_protocol_t spi_protocol) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; + +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + p_instance_ctrl->spi_protocol = spi_protocol; + + /* Update the SPI protocol and its associated registers. */ + return r_ospi_spi_protocol_specific_settings(p_instance_ctrl, spi_protocol); +} + +/*******************************************************************************************************************//** + * Close the OSPI driver module. + * + * Implements @ref spi_flash_api_t::close. + * + * @retval FSP_SUCCESS Configuration was successful. + * @retval FSP_ERR_ASSERTION p_instance_ctrl is NULL. + * @retval FSP_ERR_NOT_OPEN Driver is not opened. + **********************************************************************************************************************/ +fsp_err_t R_OSPI_Close (spi_flash_ctrl_t * p_ctrl) +{ + ospi_instance_ctrl_t * p_instance_ctrl = (ospi_instance_ctrl_t *) p_ctrl; + +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(OSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + p_instance_ctrl->open = 0U; + + /* Disable clock to the OSPI block */ + R_BSP_MODULE_STOP(FSP_IP_OSPI, 0U); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Get the driver version based on compile time macros. + * + * Implements @ref spi_flash_api_t::versionGet. + * + * @retval FSP_SUCCESS Successful close. + * @retval FSP_ERR_ASSERTION p_version is NULL. + * + **********************************************************************************************************************/ +fsp_err_t R_OSPI_VersionGet (fsp_version_t * const p_version) +{ +#if OSPI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_version); +#endif + + p_version->version_id = g_ospi_version.version_id; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup OSPI) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Perform initialization based on SPI/OPI protocol + * + * @param[in] p_instance_ctrl Pointer to OSPI specific control structure + * @param[in] spi_protocol SPI/OPI protocol request + * + * @retval FSP_SUCCESS Protocol based settings completed successfully. + * @retval FSP_ERR_CALIBRATE_FAILED Auto-Calibration failed. + **********************************************************************************************************************/ +static fsp_err_t r_ospi_spi_protocol_specific_settings (ospi_instance_ctrl_t * p_instance_ctrl, + spi_flash_protocol_t spi_protocol) +{ + spi_flash_cfg_t const * p_cfg = p_instance_ctrl->p_cfg; + ospi_extended_cfg_t * p_cfg_extend = (ospi_extended_cfg_t *) p_cfg->p_extend; + fsp_err_t ret = FSP_SUCCESS; + ospi_device_number_t channel = p_instance_ctrl->channel; + + /* In case of SOPI mode enable pre-cycle as described in hardware manual (see Section 34.2.12 + * 'CDSR : Controller and Device Setting Register' Note 1 of the RA6M4 manual R01UH0890EJ0100). */ + uint32_t cdsr = R_OSPI->CDSR; + cdsr &= ~((uint32_t) (R_OSPI_CDSR_DV0TTYP_Msk << (channel * R_OSPI_CDSR_DV1TTYP_Pos)) | + (uint32_t) (R_OSPI_CDSR_DV0PC_Msk << channel)); + + /* Right shifted to match enum to register value */ + cdsr |= ((((uint32_t) spi_protocol) >> 1U) << (channel * R_OSPI_CDSR_DV1TTYP_Pos)); + + /* Enable pre-cycle setting in case of SOPI. ANDed to filter out SOPI enum from other mode enums. */ + cdsr |= ((((uint32_t) spi_protocol) & 1U) << (R_OSPI_CDSR_DV0PC_Pos + channel)); + + /* Keep DLFT disabled. No easy recovery from deadlock */ + cdsr |= 1U << R_OSPI_CDSR_DLFT_Pos; + R_OSPI->CDSR = cdsr; + + /* OPI mode */ + if (SPI_FLASH_PROTOCOL_EXTENDED_SPI != spi_protocol) + { + ospi_opi_command_set_t const * p_opi_commands = p_cfg_extend->p_opi_commands; + R_OSPI->MRWCSR = OSPI_PRV_RMW(R_OSPI->MRWCSR, + ((uint32_t) (((uint32_t) p_cfg->address_bytes + 1U) << R_OSPI_MRWCSR_MRAL0_Pos) | + (uint32_t) (p_opi_commands->command_bytes << R_OSPI_MRWCSR_MRCL0_Pos) | + (uint32_t) (((uint32_t) p_cfg->address_bytes + 1U) << R_OSPI_MRWCSR_MWAL0_Pos) | + (uint32_t) (p_opi_commands->command_bytes << R_OSPI_MRWCSR_MWCL0_Pos)), + channel); + + /* Set MDLR (Memory Map Dummy Length Reg) with Read dummy length setting */ + R_OSPI->MDLR = + OSPI_PRV_RMW(R_OSPI->MDLR, + ((uint32_t) (p_cfg_extend->opi_mem_read_dummy_cycles << R_OSPI_MDLR_DV0RDL_Pos)), + channel); + + /* Specifies the read and write commands for Device */ + uint32_t read_command = (uint32_t) ((SPI_FLASH_PROTOCOL_SOPI == spi_protocol) ? + p_opi_commands->read_command : p_opi_commands->dual_read_command); + R_OSPI->MRWCR[channel] = (uint32_t) p_opi_commands->page_program_command << R_OSPI_MRWCR_DMWCMD0_Pos | + read_command; + + /* Perform auto-calibration to appropriately update MDTR DVnDEL field */ + if (0 == p_cfg_extend->data_latch_delay_clocks) + { + ret = r_ospi_automatic_calibration_seq(p_instance_ctrl); + } + else + { + /* The OctalFlash is pre-calibrated with the existing clock settings. Do not auto-calibrate. */ + R_OSPI->MDTR = + OSPI_PRV_RMW_MASKED(R_OSPI->MDTR, + R_OSPI_MDTR_DV0DEL_Msk, + ((uint32_t) (p_cfg_extend->data_latch_delay_clocks << R_OSPI_MDTR_DV0DEL_Pos)), + channel); + } + } + else + { + /* Command length is forced to 1 byte for SPI mode */ + R_OSPI->MRWCSR = OSPI_PRV_RMW(R_OSPI->MRWCSR, + ((uint32_t) (((uint32_t) p_cfg->address_bytes + 1U) << R_OSPI_MRWCSR_MRAL0_Pos) | + (uint32_t) (1U << R_OSPI_MRWCSR_MRCL0_Pos) | + (uint32_t) (((uint32_t) p_cfg->address_bytes + 1U) << R_OSPI_MRWCSR_MWAL0_Pos) | + (uint32_t) (1U << R_OSPI_MRWCSR_MWCL0_Pos)), + channel); + + /* Specifies the read and write commands for Device 0 */ + R_OSPI->MRWCR[channel] = (uint32_t) p_cfg->page_program_command << R_OSPI_MRWCR_DMWCMD0_Pos | + (uint32_t) p_cfg->read_command << R_OSPI_MRWCR_DMRCMD0_Pos; + + /* Single continuous read mode (CTR) must be disabled for SPI mode */ + R_OSPI->DRCSTR = OSPI_PRV_RMW_MASKED(R_OSPI->DRCSTR, R_OSPI_DRCSTR_CTR0_Msk, 0U, channel); + + /* Clear auto-calibration value */ + R_OSPI->MDTR = OSPI_PRV_RMW_MASKED(R_OSPI->MDTR, R_OSPI_MDTR_DV0DEL_Msk, 0U, channel); + } + + return ret; +} + +/*******************************************************************************************************************//** + * Gets device status. + * + * @param[in] p_instance_ctrl Pointer to a driver handle + * @param[in] bit_pos Write-in-progress bit position + * + * @return True if busy, false if not. + **********************************************************************************************************************/ +static bool r_ospi_status_sub (ospi_instance_ctrl_t * p_instance_ctrl, uint8_t bit_pos) +{ + spi_flash_cfg_t const * p_cfg = p_instance_ctrl->p_cfg; + spi_flash_direct_transfer_t direct_command = {0}; + if (SPI_FLASH_PROTOCOL_EXTENDED_SPI == p_instance_ctrl->spi_protocol) + { + direct_command.command = p_cfg->status_command; + direct_command.command_length = 1U; + } + else + { + ospi_opi_command_set_t const * p_opi_commands = ((ospi_extended_cfg_t *) p_cfg->p_extend)->p_opi_commands; + direct_command.command = p_opi_commands->status_command; + direct_command.command_length = p_opi_commands->command_bytes & OSPI_PRV_DIRECT_COMMAND_MASK; + direct_command.address_length = (p_cfg->address_bytes + 1U) & + OSPI_PRV_DIRECT_ADDR_AND_DATA_MASK; + direct_command.dummy_cycles = 4U; + } + + direct_command.data_length = 1U; + r_ospi_direct_transfer(p_instance_ctrl, &direct_command, SPI_FLASH_DIRECT_TRANSFER_DIR_READ); + + return (direct_command.data >> bit_pos) & 1U; +} + +/*******************************************************************************************************************//** + * Send Write enable command to the OctaFlash + * + * @param[in] p_instance_ctrl Pointer to OSPI specific control structure + **********************************************************************************************************************/ +static void r_ospi_wen (ospi_instance_ctrl_t * p_instance_ctrl) +{ + spi_flash_direct_transfer_t direct_command = {0}; + spi_flash_cfg_t const * p_cfg = p_instance_ctrl->p_cfg; + if (SPI_FLASH_PROTOCOL_EXTENDED_SPI == p_instance_ctrl->spi_protocol) + { + direct_command.command = p_cfg->write_enable_command; + direct_command.command_length = 1U; + } + else + { + ospi_opi_command_set_t const * p_opi_commands = ((ospi_extended_cfg_t *) p_cfg->p_extend)->p_opi_commands; + direct_command.command = p_opi_commands->write_enable_command; + direct_command.command_length = p_opi_commands->command_bytes & OSPI_PRV_DIRECT_COMMAND_MASK; + } + + r_ospi_direct_transfer(p_instance_ctrl, &direct_command, SPI_FLASH_DIRECT_TRANSFER_DIR_WRITE); +} + +/*******************************************************************************************************************//** + * Perform Automatic Calibration + * + * @param[in] p_instance_ctrl Pointer to OSPI specific control structure + * + * @retval FSP_SUCCESS Auto-Calibration completed successfully. + * @retval FSP_ERR_CALIBRATE_FAILED Auto-Calibration failed. + **********************************************************************************************************************/ +static fsp_err_t r_ospi_automatic_calibration_seq (ospi_instance_ctrl_t * p_instance_ctrl) +{ + fsp_err_t ret = FSP_SUCCESS; + ospi_device_number_t channel = p_instance_ctrl->channel; + + /* Default ACTR value is long enough for stable environment */ + R_OSPI->ACAR[channel] = + (uint32_t) ((ospi_extended_cfg_t *) p_instance_ctrl->p_cfg->p_extend)->p_autocalibration_preamble_pattern_addr; + uint32_t cdsr = R_OSPI->CDSR; + + /* Enable auto-calibration and allow MDTR update */ + R_OSPI->CDSR = cdsr | (uint32_t) ((1U << (R_OSPI_CDSR_ACMEME0_Pos + channel))) | + (uint32_t) (1U << R_OSPI_CDSR_ACMODE_Pos); + + /* Using default values for DQSSOPI nad DQSDOPI counter */ + /* MDTR.DVnDEL: Typical value(VCC=3.3, 25 degree C, typical sample) is around 0x80 */ + while (0 == (R_OSPI->ACSR & (uint32_t) (R_OSPI_ACSR_ACSR0_Msk << (channel * R_OSPI_ACSR_ACSR1_Pos)))) + { + /* TODO: Add timeout */ + } + + /* Disable automatic calibration */ + R_OSPI->CDSR = cdsr; + if ((OSPI_PRV_AUTOMATIC_CALIBRATION_NORMAL_END << (channel * R_OSPI_ACSR_ACSR1_Pos)) != + (R_OSPI->ACSR & (uint32_t) (R_OSPI_ACSR_ACSR0_Msk << (channel * R_OSPI_ACSR_ACSR1_Pos)))) + { + ret = FSP_ERR_CALIBRATE_FAILED; + } + + /* Clear automatic calibration status */ + R_OSPI->ACSR = + (uint32_t) (R_OSPI->ACSR & + ~(uint32_t) (R_OSPI_ACSR_ACSR0_Msk << (channel * R_OSPI_ACSR_ACSR1_Pos))); + + return ret; +} + +/*******************************************************************************************************************//** + * Performs direct data transfer with the OctaFlash + * + * @param[in] p_instance_ctrl Pointer to OSPI specific control structure + * @param[in] p_transfer Pointer to transfer parameters + * @param[in] direction Read/Write + **********************************************************************************************************************/ +static void r_ospi_direct_transfer (ospi_instance_ctrl_t * p_instance_ctrl, + spi_flash_direct_transfer_t * const p_transfer, + spi_flash_direct_transfer_dir_t direction) +{ + R_OSPI->DCR = p_transfer->command; /* Write OSPI command. */ + R_OSPI->DAR = p_transfer->address; /* Write OSPI address */ + /* Direct Read/Write settings */ + R_OSPI->DCSR = (uint32_t) (p_transfer->command_length << R_OSPI_DCSR_CMDLEN_Pos) | + (uint32_t) (p_transfer->address_length << R_OSPI_DCSR_ADLEN_Pos) | + (uint32_t) (p_transfer->dummy_cycles << R_OSPI_DCSR_DMLEN_Pos) | + + /* Right shifted to match enum to register value */ + (uint32_t) ((p_instance_ctrl->spi_protocol >> 2U) << R_OSPI_DCSR_DOPI_Pos) | + (uint32_t) (p_instance_ctrl->channel << R_OSPI_DCSR_ACDV_Pos) | + (uint32_t) (p_transfer->data_length << R_OSPI_DCSR_DALEN_Pos); + if (SPI_FLASH_DIRECT_TRANSFER_DIR_WRITE == direction) + { + if (0 == p_transfer->data_length) + { + /* Write any data. This will only send out command or command & address based on the settings above */ + R_OSPI->CWNDR = (uint32_t) OSPI_PRV_OPEN; + } + else + { + R_OSPI->CWDR = p_transfer->data; + } + } + else + { + p_transfer->data = R_OSPI->CRR; + } +} diff --git a/ra/fsp/src/r_poeg/r_poeg.c b/ra/fsp/src/r_poeg/r_poeg.c index a9427cfca..375137c6c 100644 --- a/ra/fsp/src/r_poeg/r_poeg.c +++ b/ra/fsp/src/r_poeg/r_poeg.c @@ -41,6 +41,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile poeg_prv_ns_callback)(poeg_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile poeg_prv_ns_callback)(poeg_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -74,6 +80,7 @@ const poeg_api_t g_poeg_on_poeg = .reset = R_POEG_Reset, .outputDisable = R_POEG_OutputDisable, .statusGet = R_POEG_StatusGet, + .callbackSet = R_POEG_CallbackSet, .close = R_POEG_Close, .versionGet = R_POEG_VersionGet }; @@ -136,6 +143,14 @@ fsp_err_t R_POEG_Open (poeg_ctrl_t * const p_ctrl, poeg_cfg_t const * const p_cf ((uint32_t) p_cfg->polarity << R_GPT_POEG0_POEGG_INV_Pos) | ((uint32_t) p_cfg->noise_filter << R_GPT_POEG0_POEGG_NFEN_Pos); + /* Set callback and context pointers, if configured */ + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; +#if BSP_TZ_SECURE_BUILD + p_instance_ctrl->callback_is_secure = true; +#endif + /* Make sure the module is marked open before enabling the interrupt since the interrupt could fire immediately. */ p_instance_ctrl->open = POEG_OPEN; @@ -221,6 +236,52 @@ fsp_err_t R_POEG_StatusGet (poeg_ctrl_t * const p_ctrl, poeg_status_t * const p_ return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref poeg_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_POEG_CallbackSet (poeg_ctrl_t * const p_ctrl, + void ( * p_callback)(poeg_callback_args_t *), + void const * const p_context, + poeg_callback_args_t * const p_callback_memory) +{ + poeg_instance_ctrl_t * p_instance_ctrl = (poeg_instance_ctrl_t *) p_ctrl; + +#if POEG_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(POEG_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_instance_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if POEG_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + poeg_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_instance_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), + FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + p_instance_ctrl->p_callback = p_callback; + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Disables POEG interrupt. Implements @ref poeg_api_t::close. * @@ -283,15 +344,54 @@ void poeg_event_isr (void) /* Save context if RTOS is used */ FSP_CONTEXT_SAVE; + poeg_callback_args_t args; + IRQn_Type irq = R_FSP_CurrentIrqGet(); /* Recover ISR context saved in open. */ - poeg_instance_ctrl_t * p_instance_ctrl = (poeg_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + volatile poeg_instance_ctrl_t * p_instance_ctrl = (poeg_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + /* 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. */ + poeg_callback_args_t * p_args = p_instance_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->p_context = p_instance_ctrl->p_context; - /* Set data to identify callback to user, then call user callback. */ - poeg_callback_args_t callback_args; - callback_args.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&callback_args); +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_instance_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_instance_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. */ + poeg_prv_ns_callback p_callback = (poeg_prv_ns_callback) (p_instance_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_instance_ctrl->p_callback(p_args); +#endif + if (NULL != p_instance_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = args; + } /* Clear pending IRQ to make sure it doesn't fire again after exiting. This is a level interrupt, so it must be * cleared at the end of the ISR. */ diff --git a/ra/fsp/src/r_qspi/r_qspi.c b/ra/fsp/src/r_qspi/r_qspi.c index 481bf8918..6da0443d2 100644 --- a/ra/fsp/src/r_qspi/r_qspi.c +++ b/ra/fsp/src/r_qspi/r_qspi.c @@ -433,7 +433,7 @@ fsp_err_t R_QSPI_Erase (spi_flash_ctrl_t * p_ctrl, uint8_t * const p_device_addr FSP_ASSERT(NULL != p_device_address); #endif - uint8_t erase_command = 0; + uint16_t erase_command = 0; uint32_t chip_address = (uint32_t) p_device_address - QSPI_DEVICE_START_ADDRESS + R_QSPI->SFMCNT1; bool send_address = true; @@ -561,6 +561,7 @@ fsp_err_t R_QSPI_BankSet (spi_flash_ctrl_t * p_ctrl, uint32_t bank) * @retval FSP_SUCCESS SPI protocol updated on MCU peripheral. * @retval FSP_ERR_ASSERTION A required pointer is NULL. * @retval FSP_ERR_NOT_OPEN Driver is not opened. + * @retval FSP_ERR_INVALID_ARGUMENT Invalid SPI protocol requested. **********************************************************************************************************************/ fsp_err_t R_QSPI_SpiProtocolSet (spi_flash_ctrl_t * p_ctrl, spi_flash_protocol_t spi_protocol) { @@ -569,6 +570,7 @@ fsp_err_t R_QSPI_SpiProtocolSet (spi_flash_ctrl_t * p_ctrl, spi_flash_protocol_t #if QSPI_CFG_PARAM_CHECKING_ENABLE FSP_ASSERT(NULL != p_instance_ctrl); FSP_ERROR_RETURN(QSPI_PRV_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(SPI_FLASH_PROTOCOL_QPI >= spi_protocol, FSP_ERR_INVALID_ARGUMENT); #else FSP_PARAMETER_NOT_USED(p_instance_ctrl); #endif diff --git a/ra/fsp/src/r_rtc/r_rtc.c b/ra/fsp/src/r_rtc/r_rtc.c index 852f798f7..f8a2c6b64 100644 --- a/ra/fsp/src/r_rtc/r_rtc.c +++ b/ra/fsp/src/r_rtc/r_rtc.c @@ -86,6 +86,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile rtc_prv_ns_callback)(rtc_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile rtc_prv_ns_callback)(rtc_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -123,6 +129,7 @@ const rtc_api_t g_rtc_on_rtc = .periodicIrqRateSet = R_RTC_PeriodicIrqRateSet, .infoGet = R_RTC_InfoGet, .errorAdjustmentSet = R_RTC_ErrorAdjustmentSet, + .callbackSet = R_RTC_CallbackSet, .versionGet = R_RTC_VersionGet, }; @@ -146,6 +153,8 @@ static void r_rtc_config_rtc_interrupts(rtc_instance_ctrl_t * const p_ctrl, rtc_ static void r_rtc_irq_set(bool irq_enable_flag, uint8_t mask); +static void r_rtc_call_callback(rtc_instance_ctrl_t * p_ctrl, rtc_event_t event); + #if RTC_CFG_PARAM_CHECKING_ENABLE static fsp_err_t r_rtc_rfrl_validate(uint32_t value); @@ -205,6 +214,15 @@ fsp_err_t R_RTC_Open (rtc_ctrl_t * const p_ctrl, rtc_cfg_t const * const p_cfg) /* Save the configuration */ p_instance_ctrl->p_cfg = p_cfg; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_instance_ctrl->callback_is_secure = true; +#endif + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + #if RTC_CFG_PARAM_CHECKING_ENABLE /* Verify the frequency comparison value for RFRL when using LOCO */ @@ -699,6 +717,43 @@ fsp_err_t R_RTC_VersionGet (fsp_version_t * p_version) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements rtc_api_t::callbackSet + * + * @retval FSP_SUCCESS Baud rate was successfully changed. + * @retval FSP_ERR_ASSERTION Pointer to RTC control block is NULL or the RTC is not configured to use the + * internal clock. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + **********************************************************************************************************************/ +fsp_err_t R_RTC_CallbackSet (rtc_ctrl_t * const p_ctrl, + void ( * p_callback)(rtc_callback_args_t *), + void const * const p_context, + rtc_callback_args_t * const p_callback_memory) +{ + rtc_instance_ctrl_t * p_instance_ctrl = (rtc_instance_ctrl_t *) p_ctrl; + +#if (RTC_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(RTC_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_instance_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_instance_ctrl->p_callback = p_callback; + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * @} (end addtpgroup RTC) **********************************************************************************************************************/ @@ -838,6 +893,60 @@ static void r_rtc_irq_set (bool irq_enable_flag, uint8_t mask) } } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to RTC instance control block + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_rtc_call_callback (rtc_instance_ctrl_t * p_ctrl, rtc_event_t event) +{ + rtc_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. */ + rtc_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->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + rtc_prv_ns_callback p_callback = (rtc_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args); + } + +#else + + /* If the project is not Trustzone Secure, then it will never need to change security state in order to call the callback. */ + p_ctrl->p_callback(p_args); +#endif + if (NULL != p_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_ctrl->p_callback_memory = args; + } +} + #if RTC_CFG_PARAM_CHECKING_ENABLE /*******************************************************************************************************************//** @@ -1243,18 +1352,18 @@ void rtc_alarm_periodic_isr (void) if (NULL != p_ctrl->p_cfg->p_callback) { /* Set data to identify callback to user, then call user callback. */ - rtc_callback_args_t rtc_context_data; + rtc_event_t event; if (irq == p_ctrl->p_cfg->alarm_irq) { - rtc_context_data.event = RTC_EVENT_ALARM_IRQ; + event = RTC_EVENT_ALARM_IRQ; } else { - rtc_context_data.event = RTC_EVENT_PERIODIC_IRQ; + event = RTC_EVENT_PERIODIC_IRQ; } - rtc_context_data.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&rtc_context_data); + /* Call callback */ + r_rtc_call_callback(p_ctrl, event); } /* Clear the IR flag in the ICU */ diff --git a/ra/fsp/src/r_sce/SCE_ProcCommon.h b/ra/fsp/src/r_sce/SCE_ProcCommon.h index 72d97b5e5..b2da7a549 100644 --- a/ra/fsp/src/r_sce/SCE_ProcCommon.h +++ b/ra/fsp/src/r_sce/SCE_ProcCommon.h @@ -24,6 +24,8 @@ #include #include "bsp_api.h" /* For Crypto Error codes */ +#include "SCE_module.h" + /* ================================================================================ */ /* ================ SCE ================ */ /* ================================================================================ */ @@ -31,137 +33,5000 @@ /** * @brief Trusted Security IP (SCE) */ - -typedef struct /*!< SCE Structure */ +typedef struct { - volatile uint32_t REG_00H; /*!< SCE register */ - volatile uint32_t REG_04H; /*!< SCE register */ - volatile uint32_t REG_08H; /*!< SCE register */ - volatile uint32_t REG_0CH; /*!< SCE register */ - volatile uint32_t REG_10H; /*!< SCE register */ - volatile uint32_t REG_14H; /*!< SCE register */ - volatile uint32_t REG_18H; /*!< SCE register */ - volatile uint32_t REG_1CH; /*!< SCE register */ - volatile uint32_t REG_20H; /*!< SCE register */ - volatile uint32_t REG_24H; /*!< SCE register */ - volatile uint32_t REG_28H; /*!< SCE register */ - volatile uint32_t REG_2CH; /*!< SCE register */ - volatile uint32_t REG_30H; /*!< SCE register */ - volatile uint32_t REG_34H; /*!< SCE register */ - volatile uint32_t REG_38H; /*!< SCE register */ - volatile uint32_t REG_3CH; /*!< SCE register */ - volatile uint32_t REG_40H; /*!< SCE register */ - volatile uint32_t REG_44H; /*!< SCE register */ - volatile uint32_t REG_48H; /*!< SCE register */ - volatile uint32_t REG_4CH; /*!< SCE register */ - volatile uint32_t REG_50H; /*!< SCE register */ - volatile uint32_t REG_54H; /*!< SCE register */ - volatile uint32_t REG_58H; /*!< SCE register */ - volatile uint32_t REG_5CH; /*!< SCE register */ - volatile uint32_t REG_60H; /*!< SCE register */ - volatile uint32_t REG_64H; /*!< SCE register */ - volatile uint32_t REG_68H; /*!< SCE register */ - volatile uint32_t REG_6CH; /*!< SCE register */ - volatile uint32_t REG_70H; /*!< SCE register */ - volatile uint32_t REG_74H; /*!< SCE register */ - volatile uint32_t REG_78H; /*!< SCE register */ - volatile uint32_t REG_7CH; /*!< SCE register */ - volatile uint32_t REG_80H; /*!< SCE register */ - volatile uint32_t REG_84H; /*!< SCE register */ - volatile uint32_t REG_88H; /*!< SCE register */ - volatile uint32_t REG_8CH; /*!< SCE register */ - volatile uint32_t REG_90H; /*!< SCE register */ - volatile uint32_t REG_94H; /*!< SCE register */ - volatile uint32_t REG_98H; /*!< SCE register */ - volatile uint32_t REG_9CH; /*!< SCE register */ - volatile uint32_t REG_A0H; /*!< SCE register */ - volatile uint32_t REG_A4H; /*!< SCE register */ - volatile uint32_t REG_A8H; /*!< SCE register */ - volatile uint32_t REG_ACH; /*!< SCE register */ - volatile uint32_t REG_B0H; /*!< SCE register */ - volatile uint32_t REG_B4H; /*!< SCE register */ - volatile uint32_t REG_B8H; /*!< SCE register */ - volatile uint32_t REG_BCH; /*!< SCE register */ - volatile uint32_t REG_C0H; /*!< SCE register */ - volatile uint32_t REG_C4H; /*!< SCE register */ - volatile uint32_t REG_C8H; /*!< SCE register */ - volatile uint32_t REG_CCH; /*!< SCE register */ - volatile uint32_t REG_D0H; /*!< SCE register */ - volatile uint32_t REG_D4H; /*!< SCE register */ - volatile uint32_t REG_D8H; /*!< SCE register */ - volatile uint32_t REG_DCH; /*!< SCE register */ - volatile uint32_t REG_E0H; /*!< SCE register */ - volatile uint32_t REG_E4H; /*!< SCE register */ - volatile uint32_t REG_E8H; /*!< SCE register */ - volatile uint32_t REG_ECH; /*!< SCE register */ - volatile uint32_t REG_F0H; /*!< SCE register */ - volatile uint32_t REG_F4H; /*!< SCE register */ - volatile uint32_t REG_F8H; /*!< SCE register */ - volatile uint32_t REG_FCH; /*!< SCE register */ - volatile uint32_t REG_100H; /*!< SCE register */ - volatile uint32_t REG_104H; /*!< SCE register */ - volatile uint32_t REG_108H; /*!< SCE register */ - volatile uint32_t REG_10CH; /*!< SCE register */ - volatile uint32_t REG_110H; /*!< SCE register */ - volatile uint32_t REG_114H; /*!< SCE register */ - volatile uint32_t REG_118H; /*!< SCE register */ - volatile uint32_t REG_11CH; /*!< SCE register */ - volatile uint32_t REG_120H; /*!< SCE register */ - volatile uint32_t REG_124H; /*!< SCE register */ - volatile uint32_t REG_128H; /*!< SCE register */ - volatile uint32_t REG_12CH; /*!< SCE register */ - volatile uint32_t REG_130H; /*!< SCE register */ - volatile uint32_t REG_134H; /*!< SCE register */ - volatile uint32_t REG_138H; /*!< SCE register */ - volatile uint32_t REG_13CH; /*!< SCE register */ - volatile uint32_t REG_140H; /*!< SCE register */ - volatile uint32_t REG_144H; /*!< SCE register */ - volatile uint32_t REG_148H; /*!< SCE register */ - volatile uint32_t REG_14CH; /*!< SCE register */ - volatile uint32_t REG_150H; /*!< SCE register */ - volatile uint32_t REG_154H; /*!< SCE register */ - volatile uint32_t REG_158H; /*!< SCE register */ - volatile uint32_t REG_15CH; /*!< SCE register */ - volatile uint32_t REG_160H; /*!< SCE register */ - volatile uint32_t REG_164H; /*!< SCE register */ - volatile uint32_t REG_168H; /*!< SCE register */ - volatile uint32_t REG_16CH; /*!< SCE register */ - volatile uint32_t REG_170H; /*!< SCE register */ - volatile uint32_t REG_174H; /*!< SCE register */ - volatile uint32_t REG_178H; /*!< SCE register */ - volatile uint32_t REG_17CH; /*!< SCE register */ - volatile uint32_t REG_180H; /*!< SCE register */ - volatile uint32_t REG_184H; /*!< SCE register */ - volatile uint32_t REG_188H; /*!< SCE register */ - volatile uint32_t REG_18CH; /*!< SCE register */ - volatile uint32_t REG_190H; /*!< SCE register */ - volatile uint32_t REG_194H; /*!< SCE register */ - volatile uint32_t REG_198H; /*!< SCE register */ - volatile uint32_t REG_19CH; /*!< SCE register */ - volatile uint32_t REG_1A0H; /*!< SCE register */ - volatile uint32_t REG_1A4H; /*!< SCE register */ - volatile uint32_t REG_1A8H; /*!< SCE register */ - volatile uint32_t REG_1ACH; /*!< SCE register */ - volatile uint32_t REG_1B0H; /*!< SCE register */ - volatile uint32_t REG_1B4H; /*!< SCE register */ - volatile uint32_t REG_1B8H; /*!< SCE register */ - volatile uint32_t REG_1BCH; /*!< SCE register */ - volatile uint32_t REG_1C0H; /*!< SCE register */ - volatile uint32_t REG_1C4H; /*!< SCE register */ - volatile uint32_t REG_1C8H; /*!< SCE register */ - volatile uint32_t REG_1CCH; /*!< SCE register */ - volatile uint32_t REG_1D0H; /*!< SCE register */ - volatile uint32_t REG_1D4H; /*!< SCE register */ - volatile uint32_t REG_1D8H; /*!< SCE register */ - volatile uint32_t REG_1DCH; /*!< SCE register */ - volatile uint32_t REG_1E0H; /*!< SCE register */ - volatile uint32_t REG_1E4H; /*!< SCE register */ - volatile uint32_t REG_1E8H; /*!< SCE register */ - volatile uint32_t REG_1ECH; /*!< SCE register */ - volatile uint32_t REG_1F0H; /*!< SCE register */ - volatile uint32_t REG_1F4H; /*!< SCE register */ - volatile uint32_t REG_1F8H; /*!< SCE register */ - volatile uint32_t REG_1FCH; /*!< SCE register */ + union + { + __IOM uint32_t REG_00H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_00H_b; + }; + union + { + __IOM uint32_t REG_04H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_04H_b; + }; + union + { + __IOM uint32_t REG_08H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_08H_b; + }; + union + { + __IOM uint32_t REG_0CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_0CH_b; + }; + union + { + __IOM uint32_t REG_10H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_10H_b; + }; + union + { + __IOM uint32_t REG_14H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_14H_b; + }; + union + { + __IOM uint32_t REG_18H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_18H_b; + }; + union + { + __IOM uint32_t REG_1CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1CH_b; + }; + union + { + __IOM uint32_t REG_20H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_20H_b; + }; + union + { + __IOM uint32_t REG_24H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_24H_b; + }; + union + { + __IOM uint32_t REG_28H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_28H_b; + }; + union + { + __IOM uint32_t REG_2CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_2CH_b; + }; + union + { + __IOM uint32_t REG_30H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_30H_b; + }; + union + { + __IOM uint32_t REG_34H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_34H_b; + }; + union + { + __IOM uint32_t REG_38H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_38H_b; + }; + union + { + __IOM uint32_t REG_3CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_3CH_b; + }; + union + { + __IOM uint32_t REG_40H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_40H_b; + }; + union + { + __IOM uint32_t REG_44H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_44H_b; + }; + union + { + __IOM uint32_t REG_48H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_48H_b; + }; + union + { + __IOM uint32_t REG_4CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_4CH_b; + }; + union + { + __IOM uint32_t REG_50H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_50H_b; + }; + union + { + __IOM uint32_t REG_54H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_54H_b; + }; + union + { + __IOM uint32_t REG_58H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_58H_b; + }; + union + { + __IOM uint32_t REG_5CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_5CH_b; + }; + union + { + __IOM uint32_t REG_60H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_60H_b; + }; + union + { + __IOM uint32_t REG_64H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_64H_b; + }; + union + { + __IOM uint32_t REG_68H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_68H_b; + }; + union + { + __IOM uint32_t REG_6CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_6CH_b; + }; + union + { + __IOM uint32_t REG_70H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_70H_b; + }; + union + { + __IOM uint32_t REG_74H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_74H_b; + }; + union + { + __IOM uint32_t REG_78H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_78H_b; + }; + union + { + __IOM uint32_t REG_7CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_7CH_b; + }; + union + { + __IOM uint32_t REG_80H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_80H_b; + }; + union + { + __IOM uint32_t REG_84H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_84H_b; + }; + union + { + __IOM uint32_t REG_88H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_88H_b; + }; + union + { + __IOM uint32_t REG_8CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_8CH_b; + }; + union + { + __IOM uint32_t REG_90H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_90H_b; + }; + union + { + __IOM uint32_t REG_94H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_94H_b; + }; + union + { + __IOM uint32_t REG_98H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_98H_b; + }; + union + { + __IOM uint32_t REG_9CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_9CH_b; + }; + union + { + __IOM uint32_t REG_A0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_A0H_b; + }; + union + { + __IOM uint32_t REG_A4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_A4H_b; + }; + union + { + __IOM uint32_t REG_A8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_A8H_b; + }; + union + { + __IOM uint32_t REG_ACH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_ACH_b; + }; + union + { + __IOM uint32_t REG_B0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_B0H_b; + }; + union + { + __IOM uint32_t REG_B4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_B4H_b; + }; + union + { + __IOM uint32_t REG_B8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_B8H_b; + }; + union + { + __IOM uint32_t REG_BCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_BCH_b; + }; + union + { + __IOM uint32_t REG_C0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_C0H_b; + }; + union + { + __IOM uint32_t REG_C4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_C4H_b; + }; + union + { + __IOM uint32_t REG_C8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_C8H_b; + }; + union + { + __IOM uint32_t REG_CCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_CCH_b; + }; + union + { + __IOM uint32_t REG_D0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_D0H_b; + }; + union + { + __IOM uint32_t REG_D4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_D4H_b; + }; + union + { + __IOM uint32_t REG_D8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_D8H_b; + }; + union + { + __IOM uint32_t REG_DCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_DCH_b; + }; + union + { + __IOM uint32_t REG_E0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_E0H_b; + }; + union + { + __IOM uint32_t REG_E4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_E4H_b; + }; + union + { + __IOM uint32_t REG_E8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_E8H_b; + }; + union + { + __IOM uint32_t REG_ECH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_ECH_b; + }; + union + { + __IOM uint32_t REG_F0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_F0H_b; + }; + union + { + __IOM uint32_t REG_F4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_F4H_b; + }; + union + { + __IOM uint32_t REG_F8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_F8H_b; + }; + union + { + __IOM uint32_t REG_FCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_FCH_b; + }; + union + { + __IOM uint32_t REG_100H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_100H_b; + }; + union + { + __IOM uint32_t REG_104H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_104H_b; + }; + union + { + __IOM uint32_t REG_108H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_108H_b; + }; + union + { + __IOM uint32_t REG_10CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_10CH_b; + }; + union + { + __IOM uint32_t REG_110H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_110H_b; + }; + union + { + __IOM uint32_t REG_114H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_114H_b; + }; + union + { + __IOM uint32_t REG_118H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_118H_b; + }; + union + { + __IOM uint32_t REG_11CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_11CH_b; + }; + union + { + __IOM uint32_t REG_120H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_120H_b; + }; + union + { + __IOM uint32_t REG_124H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_124H_b; + }; + union + { + __IOM uint32_t REG_128H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_128H_b; + }; + union + { + __IOM uint32_t REG_12CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_12CH_b; + }; + union + { + __IOM uint32_t REG_130H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_130H_b; + }; + union + { + __IOM uint32_t REG_134H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_134H_b; + }; + union + { + __IOM uint32_t REG_138H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_138H_b; + }; + union + { + __IOM uint32_t REG_13CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_13CH_b; + }; + union + { + __IOM uint32_t REG_140H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_140H_b; + }; + union + { + __IOM uint32_t REG_144H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_144H_b; + }; + union + { + __IOM uint32_t REG_148H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_148H_b; + }; + union + { + __IOM uint32_t REG_14CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_14CH_b; + }; + union + { + __IOM uint32_t REG_150H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_150H_b; + }; + union + { + __IOM uint32_t REG_154H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_154H_b; + }; + union + { + __IOM uint32_t REG_158H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_158H_b; + }; + union + { + __IOM uint32_t REG_15CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_15CH_b; + }; + union + { + __IOM uint32_t REG_160H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_160H_b; + }; + union + { + __IOM uint32_t REG_164H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_164H_b; + }; + union + { + __IOM uint32_t REG_168H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_168H_b; + }; + union + { + __IOM uint32_t REG_16CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_16CH_b; + }; + union + { + __IOM uint32_t REG_170H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_170H_b; + }; + union + { + __IOM uint32_t REG_174H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_174H_b; + }; + union + { + __IOM uint32_t REG_178H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_178H_b; + }; + union + { + __IOM uint32_t REG_17CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_17CH_b; + }; + union + { + __IOM uint32_t REG_180H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_180H_b; + }; + union + { + __IOM uint32_t REG_184H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_184H_b; + }; + union + { + __IOM uint32_t REG_188H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_188H_b; + }; + union + { + __IOM uint32_t REG_18CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_18CH_b; + }; + union + { + __IOM uint32_t REG_190H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_190H_b; + }; + union + { + __IOM uint32_t REG_194H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_194H_b; + }; + union + { + __IOM uint32_t REG_198H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_198H_b; + }; + union + { + __IOM uint32_t REG_19CH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_19CH_b; + }; + union + { + __IOM uint32_t REG_1A0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1A0H_b; + }; + union + { + __IOM uint32_t REG_1A4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1A4H_b; + }; + union + { + __IOM uint32_t REG_1A8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1A8H_b; + }; + union + { + __IOM uint32_t REG_1ACH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1ACH_b; + }; + union + { + __IOM uint32_t REG_1B0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1B0H_b; + }; + union + { + __IOM uint32_t REG_1B4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1B4H_b; + }; + union + { + __IOM uint32_t REG_1B8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1B8H_b; + }; + union + { + __IOM uint32_t REG_1BCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1BCH_b; + }; + union + { + __IOM uint32_t REG_1C0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1C0H_b; + }; + union + { + __IOM uint32_t REG_1C4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1C4H_b; + }; + union + { + __IOM uint32_t REG_1C8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1C8H_b; + }; + union + { + __IOM uint32_t REG_1CCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1CCH_b; + }; + union + { + __IOM uint32_t REG_1D0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1D0H_b; + }; + union + { + __IOM uint32_t REG_1D4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1D4H_b; + }; + union + { + __IOM uint32_t REG_1D8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1D8H_b; + }; + union + { + __IOM uint32_t REG_1DCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1DCH_b; + }; + union + { + __IOM uint32_t REG_1E0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1E0H_b; + }; + union + { + __IOM uint32_t REG_1E4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1E4H_b; + }; + union + { + __IOM uint32_t REG_1E8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1E8H_b; + }; + union + { + __IOM uint32_t REG_1ECH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1ECH_b; + }; + union + { + __IOM uint32_t REG_1F0H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1F0H_b; + }; + union + { + __IOM uint32_t REG_1F4H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1F4H_b; + }; + union + { + __IOM uint32_t REG_1F8H; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1F8H_b; + }; + union + { + __IOM uint32_t REG_1FCH; + struct + { + __IOM uint32_t B0 : 1; + __IOM uint32_t B1 : 1; + __IOM uint32_t B2 : 1; + __IOM uint32_t B3 : 1; + __IOM uint32_t B4 : 1; + __IOM uint32_t B5 : 1; + __IOM uint32_t B6 : 1; + __IOM uint32_t B7 : 1; + __IOM uint32_t B8 : 1; + __IOM uint32_t B9 : 1; + __IOM uint32_t B10 : 1; + __IOM uint32_t B11 : 1; + __IOM uint32_t B12 : 1; + __IOM uint32_t B13 : 1; + __IOM uint32_t B14 : 1; + __IOM uint32_t B15 : 1; + __IOM uint32_t B16 : 1; + __IOM uint32_t B17 : 1; + __IOM uint32_t B18 : 1; + __IOM uint32_t B19 : 1; + __IOM uint32_t B20 : 1; + __IOM uint32_t B21 : 1; + __IOM uint32_t B22 : 1; + __IOM uint32_t B23 : 1; + __IOM uint32_t B24 : 1; + __IOM uint32_t B25 : 1; + __IOM uint32_t B26 : 1; + __IOM uint32_t B27 : 1; + __IOM uint32_t B28 : 1; + __IOM uint32_t B29 : 1; + __IOM uint32_t B30 : 1; + __IOM uint32_t B31 : 1; + } REG_1FCH_b; + }; } SCE_Type; // for bit access @@ -232,17 +5097,11 @@ typedef struct /*!< SCE Structure #define SCE_REG_31_Pos 31 /*!< SCE REG_xxxH: bit 31 Position */ #define SCE_REG_31_Msk (0x01UL << SCE_REG_31_Pos) /*!< SCE REG_xxxH: bit 31 Mask */ -/* ================================================================================ */ -/* ================ Peripheral memory map ================ */ -/* ================================================================================ */ - -#define SCE_BASE 0x400C0000UL // should be changed for TAHOE - /* ================================================================================ */ /* ================ Peripheral declaration ================ */ /* ================================================================================ */ -#define SCE ((volatile SCE_Type *) SCE_BASE) +#define SCE ((SCE_Type *) SCE_BASE) // macro definishion diff --git a/ra/fsp/src/r_sce/common/hw_sce_common.h b/ra/fsp/src/r_sce/common/hw_sce_common.h index 777030ab2..463ac24d9 100644 --- a/ra/fsp/src/r_sce/common/hw_sce_common.h +++ b/ra/fsp/src/r_sce/common/hw_sce_common.h @@ -31,9 +31,6 @@ ***********************************************************************************************************************/ #include "bsp_api.h" -/* TODO_SCE RELEASE Remove mock reference */ -#if !BSP_MCU_MOCKED - /*********************************************************************************************************************** * Macro definitions ***********************************************************************************************************************/ @@ -59,11 +56,11 @@ **********************************************************************************************************************/ __STATIC_INLINE void HW_SCE_PowerOn (void) { - #if (defined(BSP_MCU_GROUP_RA2A1) || defined(BSP_MCU_GROUP_RA2L1)) +#if (defined(BSP_MCU_GROUP_RA2A1) || defined(BSP_MCU_GROUP_RA2L1)) // S1 MCU series has separate power control for RNG R_MSTP->MSTPCRC_b.MSTPC28 = 0; - #endif +#endif // power on the SCE module R_MSTP->MSTPCRC_b.MSTPC31 = 0; @@ -71,18 +68,16 @@ __STATIC_INLINE void HW_SCE_PowerOn (void) __STATIC_INLINE void HW_SCE_PowerOff (void) { - #if (defined(BSP_MCU_GROUP_RA2A1) || defined(BSP_MCU_GROUP_RA2L1)) +#if (defined(BSP_MCU_GROUP_RA2A1) || defined(BSP_MCU_GROUP_RA2L1)) // S1 MCU series has separate power control for RNG R_MSTP->MSTPCRC_b.MSTPC28 = 1; - #endif +#endif // power off the SCE module R_MSTP->MSTPCRC_b.MSTPC31 = 1; } -#endif /* BSP_MCU_MOCKED */ - #endif /* HW_SCE_COMMON_H */ /*******************************************************************************************************************//** diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_AES_adapt.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_AES_adapt.c new file mode 100644 index 000000000..60e54cff7 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_AES_adapt.c @@ -0,0 +1,204 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#include "hw_sce_ra_private.h" +#include "hw_sce_private.h" + +typedef enum e_sce_aes_key_size +{ + SCE_AES_KEY_SIZE_128 = 0, + SCE_AES_KEY_SIZE_256 +} sce_aes_key_size_t; + +fsp_err_t (* init[])(const uint32_t * InData_Cmd, const uint32_t * InData_KeyIndex, const uint32_t * InData_IV) = +{ + [SCE_AES_KEY_SIZE_128] = HW_SCE_Aes128EncryptDecryptInitSub, + [SCE_AES_KEY_SIZE_256] = HW_SCE_Aes256EncryptDecryptInitSub, +}; + +void (* update[])(const uint32_t * InData_Text, uint32_t * OutData_Text, const uint32_t MAX_CNT) = +{ + [SCE_AES_KEY_SIZE_128] = HW_SCE_Aes128EncryptDecryptUpdateSub, + [SCE_AES_KEY_SIZE_256] = HW_SCE_Aes256EncryptDecryptUpdateSub, +}; + +fsp_err_t (* final[])(void) = +{ + [SCE_AES_KEY_SIZE_128] = HW_SCE_Aes128EncryptDecryptFinalSub, + [SCE_AES_KEY_SIZE_256] = HW_SCE_Aes256EncryptDecryptFinalSub, +}; + +static fsp_err_t hw_sce_aes_encrypt_decrypt(sce_aes_key_size_t key_size, + uint32_t command, + const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text); + +static fsp_err_t hw_sce_aes_encrypt_decrypt (sce_aes_key_size_t key_size, + uint32_t command, + const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + fsp_err_t status = FSP_ERR_CRYPTO_SCE_FAIL; + uint32_t indata_cmd = change_endian_long(command); /* ECB-Encrypt */ + uint32_t Dummy_IV[4] = {0}; + status = init[key_size](&indata_cmd, InData_KeyIndex, Dummy_IV); + if (FSP_SUCCESS == status) + { + update[key_size](InData_Text, OutData_Text, num_words); + status = final[key_size](); + } + + if (FSP_SUCCESS != status) + { + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + return FSP_SUCCESS; + } +} + +fsp_err_t HW_SCE_AES_128EcbEncryptUsingEncryptedKey (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_128, + 0x00000000u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_128EcbDecryptUsingEncryptedKey (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_128, + 0x00000001u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_128EcbEncrypt (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_128, + 0x00000000u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_128EcbDecrypt (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_128, + 0x00000001u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_256EcbEncryptUsingEncryptedKey (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_256, + 0x00000000u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_256EcbDecryptUsingEncryptedKey (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_256, + 0x00000001u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_256EcbEncrypt (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_256, + 0x00000000u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_256EcbDecrypt (const uint32_t * InData_KeyIndex, + const uint32_t num_words, + const uint32_t * InData_Text, + uint32_t * OutData_Text) +{ + return hw_sce_aes_encrypt_decrypt(SCE_AES_KEY_SIZE_256, + 0x00000001u, + InData_KeyIndex, + num_words, + InData_Text, + OutData_Text); +} + +fsp_err_t HW_SCE_AES_128CreateEncryptedKey (uint32_t * OutData_KeyIndex) +{ + if (FSP_SUCCESS != HW_SCE_GenerateAes128RandomKeyIndexSub(OutData_KeyIndex)) + { + return FSP_ERR_CRYPTO_SCE_FAIL; + } + + return FSP_SUCCESS; +} + +fsp_err_t HW_SCE_AES_256CreateEncryptedKey (uint32_t * OutData_KeyIndex) +{ + if (FSP_SUCCESS != HW_SCE_GenerateAes256RandomKeyIndexSub(OutData_KeyIndex)) + { + return FSP_ERR_CRYPTO_SCE_FAIL; + } + + return FSP_SUCCESS; +} diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_ECC_adapt.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_ECC_adapt.c new file mode 100644 index 000000000..3f37a966b --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_ECC_adapt.c @@ -0,0 +1,305 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ +#include "hw_sce_ra_private.h" +#include "hw_sce_private.h" + +fsp_err_t HW_SCE_ECC_256HrkGenerateKey (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + uint32_t * OutData_KeyIndex, + uint32_t * OutData_PubKey) +{ + return HW_SCE_GenerateEccRandomKeyIndexSub(InData_DomainParam, InData_G, OutData_PubKey, OutData_KeyIndex); +} + +fsp_err_t HW_SCE_ECC_256GenerateKey (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + uint32_t * OutData_PrivKey, + uint32_t * OutData_PubKey) +{ + FSP_PARAMETER_NOT_USED(InData_DomainParam); + FSP_PARAMETER_NOT_USED(InData_G); + FSP_PARAMETER_NOT_USED(OutData_PrivKey); + FSP_PARAMETER_NOT_USED(OutData_PubKey); + return FSP_ERR_UNSUPPORTED; +} + +fsp_err_t HW_SCE_ECC_384GenerateKey (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + uint32_t * OutData_PrivKey, + uint32_t * OutData_PubKey) +{ + FSP_PARAMETER_NOT_USED(InData_DomainParam); + FSP_PARAMETER_NOT_USED(InData_G); + FSP_PARAMETER_NOT_USED(OutData_PrivKey); + FSP_PARAMETER_NOT_USED(OutData_PubKey); + return FSP_ERR_UNSUPPORTED; +} + +fsp_err_t HW_SCE_ECC_384HrkGenerateKey (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + uint32_t * OutData_KeyIndex, + uint32_t * OutData_PubKey) +{ + FSP_PARAMETER_NOT_USED(InData_G); + + return HW_SCE_GenerateEccP384RandomKeyIndexSub(InData_DomainParam, OutData_PubKey, OutData_KeyIndex); +} + +fsp_err_t HW_SCE_ECC_256WrappedScalarMultiplication (const uint32_t * InData_CurveType, + const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_P, + uint32_t * OutData_R) +{ + return HW_SCE_Ecc256ScalarMultiplicationSub(InData_CurveType, InData_Cmd, InData_KeyIndex, InData_P, OutData_R); +} + +fsp_err_t HW_SCE_ECC_384WrappedScalarMultiplication (const uint32_t * InData_CurveType, + const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_P, + uint32_t * OutData_R) +{ + FSP_PARAMETER_NOT_USED(InData_Cmd); + return HW_SCE_Ecc384ScalarMultiplicationSub(InData_CurveType, InData_KeyIndex, InData_P, OutData_R); +} + +fsp_err_t HW_SCE_ECC_256GenerateSign (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + const uint32_t * InData_PrivKey, + const uint32_t * InData_MsgDgst, + uint32_t * OutData_R, + uint32_t * OutData_S) +{ + uint32_t signature[HW_SCE_ECDSA_DATA_BYTE_SIZE / 4U] = {0}; + uint32_t wrapped_private_key[13U]; + sce_oem_cmd_t key_command; + + /* NIST curve */ + if (0U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P256_PRIVATE; + } + /* Brainpool Curve */ + else if (1U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P256R1_PRIVATE; + } + /* Koblitz curve */ + else + { + key_command = SCE_OEM_CMD_ECC_SECP256K1_PRIVATE; + } + + /* Install the plaintext private key to get the wrapped key */ + fsp_err_t err = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + key_command, + NULL, + NULL, + (const uint8_t *)InData_PrivKey, + wrapped_private_key); + if (FSP_SUCCESS == err) + { + err = HW_SCE_EcdsaSigunatureGenerateSub(InData_DomainParam, + InData_G, + wrapped_private_key, + InData_MsgDgst, + signature); + } + if (FSP_SUCCESS == err) + { + memcpy(OutData_R, signature, (HW_SCE_ECDSA_DATA_BYTE_SIZE / 2U)); + memcpy(OutData_S, &signature[(HW_SCE_ECDSA_DATA_BYTE_SIZE / 4U) / 2U], (HW_SCE_ECDSA_DATA_BYTE_SIZE / 2U)); + } + + return err; +} + +fsp_err_t HW_SCE_ECC_256HrkGenerateSign (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_MsgDgst, + uint32_t * OutData_R, + uint32_t * OutData_S) +{ + uint32_t signature[(HW_SCE_ECDSA_DATA_BYTE_SIZE / 4U)] = {0}; + fsp_err_t err = HW_SCE_EcdsaSigunatureGenerateSub(InData_DomainParam, + InData_G, + InData_KeyIndex, + InData_MsgDgst, + signature); + if (FSP_SUCCESS == err) + { + memcpy(OutData_R, signature, (HW_SCE_ECDSA_DATA_BYTE_SIZE / 2U)); + memcpy(OutData_S, &signature[(HW_SCE_ECDSA_DATA_BYTE_SIZE / 4U) / 2U], (HW_SCE_ECDSA_DATA_BYTE_SIZE / 2U)); + } + + return err; +} + +fsp_err_t HW_SCE_ECC_384GenerateSign (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + const uint32_t * InData_PrivKey, + const uint32_t * InData_MsgDgst, + uint32_t * OutData_R, + uint32_t * OutData_S) +{ + uint32_t signature[HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 4U] = {0}; + uint32_t wrapped_private_key[17U]; + sce_oem_cmd_t key_command; + /* NIST curve */ + if (0U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P384_PRIVATE; + } + /* Brainpool Curve */ + else if (1U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P384R1_PRIVATE; + } + /* Koblitz curve unsupported */ + else + { + return FSP_ERR_UNSUPPORTED; + } + /* Install the plaintext private key to get the wrapped key */ + fsp_err_t err = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + key_command, + NULL, + NULL, + (const uint8_t *)InData_PrivKey, + wrapped_private_key); + if (FSP_SUCCESS == err) + { + err = + HW_SCE_EcdsaP384SigunatureGenerateSub(InData_DomainParam, wrapped_private_key, InData_MsgDgst, signature); + } + if (FSP_SUCCESS == err) + { + memcpy(OutData_R, signature, (HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 2U)); + memcpy(OutData_S, &signature[(HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 4U) / 2U], (HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 2U)); + } + + return err; +} + +fsp_err_t HW_SCE_ECC_384HrkGenerateSign (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_MsgDgst, + uint32_t * OutData_R, + uint32_t * OutData_S) +{ + uint32_t signature[HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 4U] = {0}; + fsp_err_t err = HW_SCE_EcdsaP384SigunatureGenerateSub(InData_DomainParam, InData_KeyIndex, InData_MsgDgst, signature); + if (FSP_SUCCESS == err) + { + memcpy(OutData_R, signature, (HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 2U)); + memcpy(OutData_S, &signature[(HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 4U) / 2U], (HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 2U)); + } + + return err; +} + +fsp_err_t HW_SCE_ECC_256VerifySign (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + const uint32_t * InData_PubKey, + const uint32_t * InData_MsgDgst, + const uint32_t * InData_R, + const uint32_t * InData_S) +{ + uint32_t signature[HW_SCE_ECDSA_DATA_BYTE_SIZE / 4U] = {0}; + uint32_t formatted_public_key[21U]; + memcpy(signature, InData_R, (HW_SCE_ECDSA_DATA_BYTE_SIZE / 2U)); + memcpy(&signature[(HW_SCE_ECDSA_DATA_BYTE_SIZE / 4U) / 2U], InData_S, (HW_SCE_ECDSA_DATA_BYTE_SIZE / 2U)); + sce_oem_cmd_t key_command; + /* NIST curve */ + if (0U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P256_PUBLIC; + } + /* Brainpool Curve */ + else if (1U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P256R1_PUBLIC; + } + /* Koblitz curve */ + else + { + key_command = SCE_OEM_CMD_ECC_SECP256K1_PUBLIC; + } + /* Install the plaintext public key to get the formatted public key */ + fsp_err_t err = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + key_command, + NULL, + NULL, + (const uint8_t *)InData_PubKey, + formatted_public_key); + if (FSP_SUCCESS == err) + { + /* InData_DomainParam = curve type; InData_G = command */ + err = HW_SCE_EcdsaSigunatureVerificationSub(InData_DomainParam, InData_G, formatted_public_key, InData_MsgDgst, + signature); + } + return err; +} + +fsp_err_t HW_SCE_ECC_384VerifySign (const uint32_t * InData_DomainParam, + const uint32_t * InData_G, + const uint32_t * InData_PubKey, + const uint32_t * InData_MsgDgst, + const uint32_t * InData_R, + const uint32_t * InData_S) +{ + uint32_t signature[HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 4U] = {0}; + uint32_t formatted_public_key[29U]; + memcpy(signature, InData_R, (HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 2U)); + memcpy(&signature[(HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 4U) / 2U], InData_S, (HW_SCE_ECDSA_P384_DATA_BYTE_SIZE / 2U)); + + sce_oem_cmd_t key_command; + /* NIST curve */ + if (0U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P384_PUBLIC; + } + /* Brainpool Curve */ + else if (1U == *InData_DomainParam) + { + key_command = SCE_OEM_CMD_ECC_P384R1_PUBLIC; + } + /* Koblitz curve unsupported */ + else + { + return FSP_ERR_UNSUPPORTED; + } + /* Install the plaintext public key to get the formatted public key */ + fsp_err_t err = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + key_command, + NULL, + NULL, + (const uint8_t *)InData_PubKey, + formatted_public_key); + if (FSP_SUCCESS == err) + { + err = HW_SCE_EcdsaP384SigunatureVerificationSub(InData_DomainParam, formatted_public_key, InData_MsgDgst, signature); + } + + return err; +} diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_HASH_adapt.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_HASH_adapt.c new file mode 100644 index 000000000..8af494886 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_HASH_adapt.c @@ -0,0 +1,31 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#include "hw_sce_ra_private.h" +#include "hw_sce_private.h" + +fsp_err_t HW_SCE_SHA256_UpdateHash (const uint32_t * p_source, uint32_t num_words, uint32_t * p_digest) +{ + uint32_t out_data[8] = {0}; + fsp_err_t err = HW_SCE_Sha224256GenerateMessageDigestSub(p_digest, p_source, num_words, out_data); + memcpy(p_digest, out_data, (4U * num_words)); + + return err; +} diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_RSA_adapt.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_RSA_adapt.c new file mode 100644 index 000000000..4cdf1651d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_RSA_adapt.c @@ -0,0 +1,213 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ +#include "hw_sce_private.h" +#include "hw_sce_ra_private.h" + +fsp_err_t HW_SCE_RSA_4096PublicKeyEncrypt (const uint32_t * InData_Text, + const uint32_t * InData_PublicKey, + const uint32_t * InData_N, + uint32_t * OutData_Text) + +{ + fsp_err_t err = FSP_SUCCESS; + + /* Create storage to hold the generated OEM key index */ + sce_rsa4096_public_key_index_t formatted_rsa_public_key_output; + uint8_t formatted_rsa_public_key_input[HW_SCE_RSA4096_NE_KEY_BYTE_SIZE] = {0}; + memcpy(&formatted_rsa_public_key_input[0], InData_N, HW_SCE_RSA_4096_KEY_N_LENGTH_BYTE_SIZE); + memcpy(&formatted_rsa_public_key_input[HW_SCE_RSA_4096_KEY_N_LENGTH_BYTE_SIZE], + InData_PublicKey, + HW_SCE_RSA_4096_KEY_E_LENGTH_BYTE_SIZE); + + err = + HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + SCE_OEM_CMD_RSA4096_PUBLIC, + NULL, + NULL, + (const uint8_t *) &formatted_rsa_public_key_input, + (uint32_t *) &formatted_rsa_public_key_output.value); + + if (FSP_SUCCESS == err) + { + err = HW_SCE_Rsa4096ModularExponentEncryptSub((uint32_t *) &formatted_rsa_public_key_output.value, + InData_Text, + OutData_Text); + } + + return err; +} + +fsp_err_t HW_SCE_RSA_3072PublicKeyEncrypt (const uint32_t * InData_Text, + const uint32_t * InData_PublicKey, + const uint32_t * InData_N, + uint32_t * OutData_Text) + +{ + fsp_err_t err = FSP_SUCCESS; + + /* Create storage to hold the generated OEM key index */ + sce_rsa3072_public_key_index_t formatted_rsa_public_key_output; + uint8_t formatted_rsa_public_key_input[HW_SCE_RSA3072_NE_KEY_BYTE_SIZE] = {0}; + memcpy(&formatted_rsa_public_key_input[0], InData_N, HW_SCE_RSA_3072_KEY_N_LENGTH_BYTE_SIZE); + memcpy(&formatted_rsa_public_key_input[HW_SCE_RSA_3072_KEY_N_LENGTH_BYTE_SIZE], + InData_PublicKey, + HW_SCE_RSA_3072_KEY_E_LENGTH_BYTE_SIZE); + + err = + HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + SCE_OEM_CMD_RSA3072_PUBLIC, + NULL, + NULL, + (const uint8_t *) &formatted_rsa_public_key_input, + (uint32_t *) &formatted_rsa_public_key_output.value); + + if (FSP_SUCCESS == err) + { + err = HW_SCE_Rsa3072ModularExponentEncryptSub((uint32_t *) &formatted_rsa_public_key_output.value, + InData_Text, + OutData_Text); + } + + return err; +} + +fsp_err_t HW_SCE_RSA_2048KeyGenerate (uint32_t num_tries, + uint32_t * OutData_PrivateKey, + uint32_t * OutData_N, + uint32_t * OutData_DomainParam) + +{ + FSP_PARAMETER_NOT_USED(num_tries); + FSP_PARAMETER_NOT_USED(OutData_PrivateKey); + FSP_PARAMETER_NOT_USED(OutData_N); + FSP_PARAMETER_NOT_USED(OutData_DomainParam); + + return FSP_ERR_UNSUPPORTED; +} + +fsp_err_t HW_SCE_RSA_2048PublicKeyEncrypt (const uint32_t * InData_Text, + const uint32_t * InData_PublicKey, + const uint32_t * InData_N, + uint32_t * OutData_Text) + +{ + fsp_err_t err = FSP_SUCCESS; + + /* Create storage to hold the generated OEM key index */ + sce_rsa2048_public_key_index_t formatted_rsa_public_key_output; + uint8_t formatted_rsa_public_key_input[HW_SCE_RSA2048_NE_KEY_BYTE_SIZE] = {0}; + memcpy(&formatted_rsa_public_key_input[0], InData_N, HW_SCE_RSA_2048_KEY_N_LENGTH_BYTE_SIZE); + memcpy(&formatted_rsa_public_key_input[HW_SCE_RSA_2048_KEY_N_LENGTH_BYTE_SIZE], + InData_PublicKey, + HW_SCE_RSA_2048_KEY_E_LENGTH_BYTE_SIZE); + + err = + HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + SCE_OEM_CMD_RSA2048_PUBLIC, + NULL, + NULL, + (const uint8_t *) &formatted_rsa_public_key_input, + (uint32_t *) &formatted_rsa_public_key_output.value); + + if (FSP_SUCCESS == err) + { + err = HW_SCE_Rsa2048ModularExponentEncryptSub((uint32_t *) &formatted_rsa_public_key_output.value, + InData_Text, + OutData_Text); + } + + return err; +} + +fsp_err_t HW_SCE_RSA_2048PrivateKeyDecrypt (const uint32_t * InData_Text, + const uint32_t * InData_PrivateKey, + const uint32_t * InData_N, + uint32_t * OutData_Text) + +{ + FSP_PARAMETER_NOT_USED(InData_PrivateKey); + fsp_err_t err = FSP_SUCCESS; + + /* Create storage to hold the generated OEM key index */ + sce_rsa2048_private_key_index_t encrypted_rsa_key; + + /*This function requires the plaintext RSA key is provided in a single buffer in the order: + * Public Key (N) of size RSA_MODULUS_SIZE_BYTES(x) + * Private Key (D) of size private_key_size_bytes + * The buffer in mbedtls_rsa_private() already contains the data in that format, so InData_N + * is directly provided to this function. + */ + err = + HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, SCE_OEM_CMD_RSA2048_PRIVATE, NULL, NULL, + (const uint8_t *) InData_N, (uint32_t *) &encrypted_rsa_key.value); + + if (FSP_SUCCESS == err) + { + err = HW_SCE_Rsa2048ModularExponentDecryptSub((uint32_t *) &encrypted_rsa_key.value, InData_Text, OutData_Text); + } + + return err; +} + +fsp_err_t HW_SCE_HRK_RSA_2048KeyGenerate (uint32_t num_tries, + uint32_t * OutData_KeyIndex, + uint32_t * OutData_N, + uint32_t * OutData_DomainParam) + +{ + sce_rsa2048_key_pair_index_t key_pair_index = {0}; + fsp_err_t err = FSP_SUCCESS; + + /* P.Q are the prime 1 and 2 fields that are in some cases generated when the private key is generated. + * This was the case with W1D; but this information is not provided on the RA6M4. + * There is no functional issue since the procedures do not require it for operation, + * however mbedCrypto requires these fields to be non-zero in order for the private key_export to work. + * These dummy values are placed into those fields to get past the non-zero check. */ + uint8_t dummy_P_Q[20] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; + + err = + HW_SCE_GenerateRsa2048RandomKeyIndexSub(num_tries, + (uint32_t *) &key_pair_index.public.value, + (uint32_t *) &key_pair_index.private.value); + + if (FSP_SUCCESS == err) + { + memcpy(OutData_KeyIndex, &key_pair_index.private.value, sizeof(key_pair_index.private.value)); + memcpy(OutData_N, &key_pair_index.public.value.key_n, sizeof(key_pair_index.public.value.key_n)); + memcpy(OutData_DomainParam, dummy_P_Q, sizeof(dummy_P_Q)); + } + + return err; +} + +fsp_err_t HW_SCE_HRK_RSA_2048PrivateKeyDecrypt (const uint32_t * InData_Text, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_N, + uint32_t * OutData_Text) + +{ + FSP_PARAMETER_NOT_USED(InData_N); + + fsp_err_t err = FSP_SUCCESS; + + err = HW_SCE_Rsa2048ModularExponentDecryptSub((uint32_t *) InData_KeyIndex, InData_Text, OutData_Text); + + return err; +} diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_adapt.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_adapt.c new file mode 100644 index 000000000..862bb493d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/adaptors/r_sce_adapt.c @@ -0,0 +1,184 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "SCE_ProcCommon.h" +#include "hw_sce_ra_private.h" +#include "hw_sce_private.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +uint32_t S_RAM[HW_SCE_SRAM_WORD_SIZE]; +uint32_t S_HEAP[HW_SCE_SHEAP_WORD_SIZE]; +uint32_t S_INST[HW_SCE_SINST_WORD_SIZE]; +uint32_t S_INST2[HW_SCE_SINST2_WORD_SIZE]; + +uint32_t INST_DATA_SIZE; + +/******************************************************* + * The following are valid SCE lifecycle states: + * + * CM1(Lifecycle state) + * + * CM2(Lifecycle state) + * + * SSD(Lifecycle state) + * + * NSECSD(Lifecycle state) + * + * DPL(Lifecycle state) + * + * LCK_DBG(Lifecycle state) + * + * LCK_BOOT(Lifecycle state) + * + * RMA_REQ(Lifecycle state) + * + * RMA_ACK(Lifecycle state) + ****************************************************/ + +#define FSP_SCE_DLMMON_MASK 0x0000000F /* for lcs in stored in R_PSCU->DLMMON */ + +const uint32_t sce_oem_key_size[SCE_OEM_CMD_NUM] = +{ + SCE_OEM_KEY_SIZE_DUMMY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_DUMMY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_DUMMY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_DUMMY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_DUMMY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_AES128_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_AES192_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_AES256_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_AES128_XTS_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_AES256_XTS_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA1024_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA1024_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA2048_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA2048_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA3072_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA3072_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA4096_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_RSA4096_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP192_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP192_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP224_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP224_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP256_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP256_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP384_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP384_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_HMAC_SHA224_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_HMAC_SHA256_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP256R1_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP256R1_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP384R1_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP384R1_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP512R1_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCP512R1_PRIVATE_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCSECP256K1_PUBLICK_KEY_INST_DATA_WORD, + SCE_OEM_KEY_SIZE_ECCSECP256K1_PRIVATE_KEY_INST_DATA_WORD, +}; + +/* Find the lifecycle state load the hardware unique key */ +/* returns fsp_err_t */ + +fsp_err_t HW_SCE_HUK_Load_LCS (void) +{ + uint32_t lc_state = R_PSCU->DLMMON & FSP_SCE_DLMMON_MASK; + + return HW_SCE_LoadHukSub(&lc_state); +} + +/* SCE9 specific initialization functions */ +/* returns fsp_err_t */ + +fsp_err_t HW_SCE_McuSpecificInit (void) +{ + fsp_err_t iret = FSP_ERR_CRYPTO_SCE_FAIL; + + // power on the SCE module + HW_SCE_PowerOn(); + + HW_SCE_SoftwareResetSub(); + iret = HW_SCE_SelfCheck1Sub(); + + if (FSP_SUCCESS == iret) + { + iret = HW_SCE_SelfCheck2Sub(); + + /* Change SCE to little endian mode */ + SCE->REG_1D4H = 0x0000ffff; + if (FSP_SUCCESS == iret) + { + iret = HW_SCE_HUK_Load_LCS(); + + if (FSP_SUCCESS == iret) + { + iret = HW_SCE_FwIntegrityCheck(); + } + } + } + + return iret; +} + +fsp_err_t HW_SCE_RNG_Read (uint32_t * OutData_Text) +{ + if (FSP_SUCCESS != HW_SCE_GenerateRandomNumberSub(OutData_Text)) + { + return FSP_ERR_CRYPTO_SCE_FAIL; + } + + return FSP_SUCCESS; +} + +fsp_err_t HW_SCE_GenerateOemKeyIndexPrivate (const sce_oem_key_type_t key_type, + const sce_oem_cmd_t cmd, + const uint8_t * encrypted_provisioning_key, + const uint8_t * iv, + const uint8_t * encrypted_oem_key, + uint32_t * key_index) +{ + uint32_t indata_key_type[1] = {0}; + uint32_t indata_cmd[1] = {0}; + uint32_t install_key_ring_index[1] = {0}; + indata_key_type[0] = key_type; + indata_cmd[0] = (cmd); + install_key_ring_index[0] = 0U; + + INST_DATA_SIZE = sce_oem_key_size[cmd] - 4U; + + /* Casting uint32_t pointer is used for address. */ + return HW_SCE_GenerateOemKeyIndexSub(indata_key_type, + indata_cmd, + install_key_ring_index, + (uint32_t *) encrypted_provisioning_key, + (uint32_t *) iv, + (uint32_t *) encrypted_oem_key, + key_index); +} + +uint32_t change_endian_long (uint32_t a) +{ + return __REV(a); +} diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func000.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func000.c new file mode 100644 index 000000000..d11b95dfa --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func000.c @@ -0,0 +1,102 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func000(uint32_t *InData_PaddedMsg, int32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x000000b4u; + for (iLoop = 0; iLoop < MAX_CNT; iLoop = iLoop + 16) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PaddedMsg[iLoop + 0]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 1]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 2]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 3]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 4]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 5]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 6]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 7]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 8]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 9]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 10]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 11]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 12]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 13]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 14]; + SCE->REG_100H = InData_PaddedMsg[iLoop + 15]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_104H = 0x00000000u; + SCE->REG_1CH = 0x00001600u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func000.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func001.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func001.c new file mode 100644 index 000000000..a9dc906b2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func001.c @@ -0,0 +1,136 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func001(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_A4H = 0x00040805u; + SCE->REG_E0H = 0x81040000u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_A4H = 0x00050805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00005143u; + SCE->REG_104H = 0x00000f51u; + SCE->REG_A4H = 0x00000c85u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_A4H = 0x00000cc5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_B0H = 0x00000100u; + SCE->REG_A4H = 0x00008887u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + SCE->REG_100H = change_endian_long(0x36363636u); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func001.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func002.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func002.c new file mode 100644 index 000000000..e1fbd0a88 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func002.c @@ -0,0 +1,118 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func002(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_00H = 0x00005143u; + SCE->REG_104H = 0x00000f51u; + SCE->REG_A4H = 0x00000c85u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_A4H = 0x00000cc5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_B0H = 0x00000100u; + SCE->REG_A4H = 0x00008887u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + SCE->REG_100H = change_endian_long(0x5c5c5c5cu); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func002.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func027.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func027.c new file mode 100644 index 000000000..3fe52818b --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func027.c @@ -0,0 +1,328 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func027_r2(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x01305c44u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0142859du; + SCE->REG_ECH = 0x00000080u; + SCE->REG_C4H = 0x00443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000c3e1cu; + SCE->REG_E0H = 0x810103c0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00003b62u; + SCE->REG_D0H = 0x00000e00u; + SCE->REG_C4H = 0x02f087bfu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+28 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+28 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+28 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+28 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+32 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+32 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+32 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+32 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+36 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+36 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+36 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+36 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x00000015u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+40 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+40 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+40 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+40 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+44 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+44 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+44 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+44 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+48 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+48 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+48 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+48 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x00000013u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+52 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+52 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+52 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+52 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+56 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+56 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+56 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+56 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+60 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+60 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+60 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+60 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x0000001du; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+64 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+64 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+64 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+64 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+68 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+68 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+68 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+68 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+72 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+72 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+72 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+72 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x0000001cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+76 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+76 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+76 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+76 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+80 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+80 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+80 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+80 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+84 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+84 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+84 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+84 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000b62u; + SCE->REG_D0H = 0x00000200u; + SCE->REG_C4H = 0x00f087bfu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+88 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+88 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+88 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+88 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+92 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+92 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+92 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+92 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+96 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+96 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+96 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+96 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x000007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+100 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+100 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+100 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+100 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func027_r2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func028.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func028.c new file mode 100644 index 000000000..7e8a40314 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func028.c @@ -0,0 +1,185 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func028_r2(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x01166403u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x013659ffu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_C4H = 0x00443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000c3e1cu; + SCE->REG_E0H = 0x810103c0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00001762u; + SCE->REG_D0H = 0x00000500u; + SCE->REG_C4H = 0x02f087bfu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+0 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+0 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+0 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+0 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+4 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+4 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+4 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+4 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+8 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+8 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+8 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+8 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+12 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+12 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+12 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+12 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+16 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+16 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+16 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+16 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+20 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+20 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+20 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+20 + 3]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x0000001bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x000007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+24 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+24 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+24 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+24 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func028_r2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func043.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func043.c new file mode 100644 index 000000000..defeadce4 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func043.c @@ -0,0 +1,178 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func043(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0x763017c1u, 0xa6e06e5cu, 0x413ee7c5u, 0x8be19d82u); + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x000001d0u; + SCE->REG_E0H = 0x8188000au; + SCE->REG_C4H = 0x00080805u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x661813d3u, 0x1f0216ddu, 0xdb1c9067u, 0xe4e2daeeu); + SCE->REG_C4H = 0x00090805u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x41d550f1u, 0x3237f543u, 0x559f9bcau, 0x9aceaba9u); + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x000001c0u; + SCE->REG_E0H = 0x8184000au; + SCE->REG_C4H = 0x000c0805u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x3778e67fu, 0x59eb9657u, 0x649d9837u, 0x6e6ab952u); + SCE->REG_C4H = 0x00000b8cu; + SCE->REG_E0H = 0x810100e0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x80040140u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00008d40u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x00009140u; + SCE->REG_ECH = 0x01000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00448a04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00008e95u; + SCE->REG_E0H = 0x81040140u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00008d40u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x00009140u; + SCE->REG_ECH = 0x02000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00448a04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00098e15u; + SCE->REG_E0H = 0x81040140u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x1bbad22du, 0xbc25efb7u, 0x0737ee54u, 0x5dcc4009u); + SCE->REG_C4H = 0x00080805u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func043.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func044.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func044.c new file mode 100644 index 000000000..9b8fb004a --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func044.c @@ -0,0 +1,128 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func044(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xcc2b6612u, 0x09aeabefu, 0xf30f09aau, 0xcd0102c9u); + SCE->REG_ECH = 0x00008ce0u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x000090e0u; + SCE->REG_ECH = 0x01000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00448a04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00008e94u; + SCE->REG_E0H = 0x810100e0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00008ce0u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x000090e0u; + SCE->REG_ECH = 0x02000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00448a04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00098e14u; + SCE->REG_E0H = 0x810100e0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x99fe09e3u, 0x8a2aaee4u, 0xdcec14e9u, 0x4d2dcd38u); + SCE->REG_C4H = 0x00080805u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func044.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func048.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func048.c new file mode 100644 index 000000000..4c7d37735 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func048.c @@ -0,0 +1,78 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func048(uint32_t* ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(ARG1[0]); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func048.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func049.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func049.c new file mode 100644 index 000000000..bf8e69012 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func049.c @@ -0,0 +1,78 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func049(uint32_t* ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010080u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(ARG1[0]); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func049.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func050.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func050.c new file mode 100644 index 000000000..16d2f435f --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func050.c @@ -0,0 +1,74 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func050(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_138H = 0xf597806Au; + SCE->REG_F0H = 0x00000000u; + SCE->REG_14H = 0x10000000u; + SCE->REG_10CH = change_endian_long(ARG1); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func050.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func051.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func051.c new file mode 100644 index 000000000..04c7c4401 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func051.c @@ -0,0 +1,73 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func051(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_138H = 0xf597806Au; + SCE->REG_F0H = 0x00000000u; + SCE->REG_10CH = 0x00010001u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func051.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func052.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func052.c new file mode 100644 index 000000000..882e4850e --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func052.c @@ -0,0 +1,82 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func052(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func051(); + SCE->REG_28H = 0x00000001u; + SCE->REG_3CH = change_endian_long(ARG1); + SCE->REG_14H = 0x00003008u; + SCE->REG_14H = 0x00003018u; + SCE->REG_1D0H = 0x00000000u; + SCE->REG_1D0H = 0x00000000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func052.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func053.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func053.c new file mode 100644 index 000000000..7afa3da9a --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func053.c @@ -0,0 +1,82 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func053(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func051(); + SCE->REG_80H = 0x00000001u; + SCE->REG_8CH = change_endian_long(ARG1); + SCE->REG_14H = 0x00003008u; + SCE->REG_14H = 0x00003018u; + SCE->REG_1D0H = 0x00000000u; + SCE->REG_1D0H = 0x00000000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func053.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func054.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func054.c new file mode 100644 index 000000000..0460a9f27 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func054.c @@ -0,0 +1,74 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func054(uint32_t ARG1, uint32_t ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_14H = change_endian_long(ARG1); + SCE->REG_14H = change_endian_long(ARG2); + SCE->REG_1D0H = 0x00000000u; + SCE->REG_1D0H = 0x00000000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func054.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func057.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func057.c new file mode 100644 index 000000000..3fbc1c4d2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func057.c @@ -0,0 +1,522 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func057_r1(uint32_t* ARG1, uint32_t* ARG2, uint32_t* ARG3) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xf31fc280u, 0xb1f04b9eu, 0x9454ff9bu, 0x9c90f37eu); + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[0]; + SCE->REG_100H = ARG1[1]; + SCE->REG_100H = ARG1[2]; + SCE->REG_100H = ARG1[3]; + SCE->REG_104H = 0x00000051u; + SCE->REG_A4H = 0x00050804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000ffu); + HW_SCE_p_func101(0xab47b184u, 0xfa6aa1bfu, 0x2f5a393fu, 0x383be959u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x000034e4u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000feu); + HW_SCE_p_func101(0x8579d3eau, 0x0270bbfcu, 0x83222df1u, 0x72d3673du); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x09b4fe19u, 0xcd9e71fau, 0x41f1394cu, 0xd138ac96u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00050804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func081(); + SCE->REG_ECH = 0x00007c01u; + SCE->REG_1CH = 0x00600000u; + SCE->REG_1D0H = 0x00000000u; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0xd863f335u, 0x104e1c40u, 0x70842eb1u, 0xa48e0ba2u); + SCE->REG_00H = 0x80002100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00d049a6u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02e087b6u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[0]; + SCE->REG_100H = ARG2[1]; + SCE->REG_100H = ARG2[2]; + SCE->REG_100H = ARG2[3]; + for (iLoop = 0; iLoop < (INST_DATA_SIZE-8) ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[4+iLoop + 0]; + SCE->REG_100H = ARG2[4+iLoop + 1]; + SCE->REG_100H = ARG2[4+iLoop + 2]; + SCE->REG_100H = ARG2[4+iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+iLoop + 0] = SCE->REG_100H; + ARG3[1+iLoop + 1] = SCE->REG_100H; + ARG3[1+iLoop + 2] = SCE->REG_100H; + ARG3[1+iLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+iLoop + 0] = SCE->REG_100H; + ARG3[1+iLoop + 1] = SCE->REG_100H; + ARG3[1+iLoop + 2] = SCE->REG_100H; + ARG3[1+iLoop + 3] = SCE->REG_100H; + iLoop = iLoop + 4; + oLoop = iLoop; + HW_SCE_p_func202();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x4ca67631u, 0xbfe8efa6u, 0x42650b01u, 0x9a59c797u); + } + else if (0x0a000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0xc39300fcu, 0x932823bau, 0xdc7a21f7u, 0x41e8b020u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_00H = 0x00003183u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func061(0,ARG2); + iLoop = 0 + 32; + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_D0H = 0x40000700u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_04H = 0x00000282u; + for(oLoop=0; oLoop<32; oLoop=oLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+oLoop + 0] = SCE->REG_100H; + ARG3[1+oLoop + 1] = SCE->REG_100H; + ARG3[1+oLoop + 2] = SCE->REG_100H; + ARG3[1+oLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x4efe8e8au, 0xfeed2dfcu, 0xdadb5c4au, 0x65e1b33du); + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00d049a5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + iLoop = iLoop + 4; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + SCE->REG_00H = 0x00002113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+oLoop + 0] = SCE->REG_100H; + ARG3[1+oLoop + 1] = SCE->REG_100H; + ARG3[1+oLoop + 2] = SCE->REG_100H; + ARG3[1+oLoop + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B6) + { + /* waiting */ + } + HW_SCE_p_func100(0xa393ce95u, 0x386cc78fu, 0x4a0dde05u, 0x23b90198u); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func062(36,ARG3); + oLoop = 36 + 32; + HW_SCE_p_func101(0xb78e40beu, 0x9a507c58u, 0xa058119cu, 0x4604a55au); + } + else if (0x0b000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x0ec0ae03u, 0xbdb21de0u, 0x33e56e86u, 0x9376b996u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_00H = 0x00003183u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func061(0,ARG2); + iLoop = 0 + 32; + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func062(0,ARG3); + oLoop = 0 + 32; + HW_SCE_p_func100(0x04750e53u, 0x7952bb79u, 0xc5800b7eu, 0x403b9779u); + SCE->REG_00H = 0x00003183u; + SCE->REG_2CH = 0x00000011u; + HW_SCE_p_func061(32,ARG2); + iLoop = 32 + 32; + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000021u; + HW_SCE_p_func062(32,ARG3); + oLoop = 32 + 32; + HW_SCE_p_func100(0xf1f9707fu, 0x25d81b4fu, 0x22350d39u, 0x14f1ca2au); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func062(64,ARG3); + oLoop = 64 + 32; + HW_SCE_p_func101(0x03dad023u, 0xcec3eca2u, 0xaa31e30fu, 0x45a27577u); + } + else if (0x0c000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x40b8f383u, 0xcc74ecfdu, 0xa253bdf2u, 0x5d08ae64u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func063(0,ARG2); + iLoop = 0 + 64; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_04H = 0x00000202u; + for(oLoop=0; oLoop<64; oLoop=oLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+oLoop + 0] = SCE->REG_100H; + ARG3[1+oLoop + 1] = SCE->REG_100H; + ARG3[1+oLoop + 2] = SCE->REG_100H; + ARG3[1+oLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xd5560200u, 0x28a09e8eu, 0xdf18a10au, 0xa09ce3bdu); + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00d049a5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + iLoop = iLoop + 4; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + SCE->REG_00H = 0x00002113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+oLoop + 0] = SCE->REG_100H; + ARG3[1+oLoop + 1] = SCE->REG_100H; + ARG3[1+oLoop + 2] = SCE->REG_100H; + ARG3[1+oLoop + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B6) + { + /* waiting */ + } + HW_SCE_p_func100(0xb55664d8u, 0xdda299b2u, 0xa618943du, 0x763fa4a4u); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func064(68,ARG3); + oLoop = 68 + 64; + HW_SCE_p_func101(0x197c0cd4u, 0x2641e686u, 0xca561b5au, 0x3a15237au); + } + else if (0x0d000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0xbe980790u, 0x643b9dc7u, 0x163962b6u, 0xc3cc6613u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func063(0,ARG2); + iLoop = 0 + 64; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func064(0,ARG3); + oLoop = 0 + 64; + HW_SCE_p_func100(0x7e2b313au, 0xa6926a4du, 0x837b0236u, 0xe47c35d1u); + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func063(64,ARG2); + iLoop = 64 + 64; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func064(64,ARG3); + oLoop = 64 + 64; + HW_SCE_p_func100(0xee7b76e5u, 0xc6116ce8u, 0x9952521eu, 0xf6ef1e2fu); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func064(128,ARG3); + oLoop = 128 + 64; + HW_SCE_p_func101(0x0bbc011eu, 0x8bf07c60u, 0x4ce1e9aau, 0x24601a0cu); + } + else if (0x12000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0xdb02e3c5u, 0x8f35d0d4u, 0xb1fca80fu, 0xd78d93b5u); + SCE->REG_00H = 0x80002100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00d049a6u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02e08886u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[0]; + SCE->REG_100H = ARG2[1]; + SCE->REG_100H = ARG2[2]; + SCE->REG_100H = ARG2[3]; + for (iLoop = 0; iLoop < (INST_DATA_SIZE-8) ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[4+iLoop + 0]; + SCE->REG_100H = ARG2[4+iLoop + 1]; + SCE->REG_100H = ARG2[4+iLoop + 2]; + SCE->REG_100H = ARG2[4+iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+iLoop + 0] = SCE->REG_100H; + ARG3[1+iLoop + 1] = SCE->REG_100H; + ARG3[1+iLoop + 2] = SCE->REG_100H; + ARG3[1+iLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+iLoop + 0] = SCE->REG_100H; + ARG3[1+iLoop + 1] = SCE->REG_100H; + ARG3[1+iLoop + 2] = SCE->REG_100H; + ARG3[1+iLoop + 3] = SCE->REG_100H; + iLoop = iLoop + 4; + oLoop = iLoop; + HW_SCE_p_func202();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x0052d385u, 0xd76d9a95u, 0x7739e2c2u, 0x966b5ef3u); + } + HW_SCE_p_func100(0xd3371c6du, 0xd24af252u, 0x239fe0dcu, 0x815b0e6cu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG3[1+oLoop + 0] = SCE->REG_100H; + ARG3[1+oLoop + 1] = SCE->REG_100H; + ARG3[1+oLoop + 2] = SCE->REG_100H; + ARG3[1+oLoop + 3] = SCE->REG_100H; + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x000049a5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + SCE->REG_A4H = 0x00900c45u; + SCE->REG_00H = 0x00001113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00007c1cu; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func057_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func058.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func058.c new file mode 100644 index 000000000..6672fd601 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func058.c @@ -0,0 +1,159 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func058(uint32_t* ARG1, uint32_t ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xf09a7897u, 0xa3a7a023u, 0x3b7a61fdu, 0x362e6610u); + SCE->REG_C4H = 0x00443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000c3e1cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0174d08au); + HW_SCE_p_func100(0x884433ccu, 0x9a27dd57u, 0x8cdc7aa3u, 0xbb2d9912u); + SCE->REG_ECH = 0x00009020u; + SCE->REG_ECH = 0x01000000u; + SCE->REG_C4H = 0x00440a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000c0e1cu; + SCE->REG_E0H = 0x81010020u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xa363e8a4u, 0x95c20c4fu, 0x7c0172d7u, 0xdab18365u); + SCE->REG_A4H = 0x02fb073du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG2 + 0]; + SCE->REG_100H = S_FLASH2[ARG2 + 1]; + SCE->REG_100H = S_FLASH2[ARG2 + 2]; + SCE->REG_100H = S_FLASH2[ARG2 + 3]; + HW_SCE_p_func100(0xc113d43fu, 0x19520dc7u, 0x0b311f0au, 0x07b8b3c5u); + SCE->REG_A4H = 0x000007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG2+4 + 0]; + SCE->REG_100H = S_FLASH2[ARG2+4 + 1]; + SCE->REG_100H = S_FLASH2[ARG2+4 + 2]; + SCE->REG_100H = S_FLASH2[ARG2+4 + 3]; + SCE->REG_A4H = 0x00800c45u; + SCE->REG_00H = 0x00001113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00087a05u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[0]; + SCE->REG_100H = ARG1[1]; + SCE->REG_100H = ARG1[2]; + SCE->REG_100H = ARG1[3]; + HW_SCE_p_func100(0x81625709u, 0x8fa95ce2u, 0xa44190b7u, 0xe2458f05u); + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00097a05u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[4]; + SCE->REG_100H = ARG1[5]; + SCE->REG_100H = ARG1[6]; + SCE->REG_100H = ARG1[7]; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func058.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func059.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func059.c new file mode 100644 index 000000000..bcb573eb0 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func059.c @@ -0,0 +1,108 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func059(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xaf5c1169u, 0xccd8bd52u, 0x88a2f82fu, 0xd9406fc9u); + SCE->REG_ECH = 0x00008d40u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x00009140u; + SCE->REG_ECH = 0x01000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00442a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x00082e0du; + SCE->REG_E0H = 0x81040140u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xef23bf66u, 0x10c19a29u, 0x3551f208u, 0xce071e80u); + SCE->REG_ECH = 0x00008d40u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x00009140u; + SCE->REG_ECH = 0x02000000u; + SCE->REG_C4H = 0x00092e0du; + SCE->REG_E0H = 0x81040140u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func059.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func060.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func060.c new file mode 100644 index 000000000..43f3cb9ca --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func060.c @@ -0,0 +1,84 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func060(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_18H = 0x00000004u; + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_24H = 0x00004804u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func060.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func061.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func061.c new file mode 100644 index 000000000..6b355eebf --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func061.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func061(uint32_t ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00001f61u; + SCE->REG_B0H = 0x00000700u; + SCE->REG_A4H = 0x00d0c9a7u; + for(iLoop=ARG1; iLoopREG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func061.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func062.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func062.c new file mode 100644 index 000000000..164342466 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func062.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func062(uint32_t ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_D0H = 0x40000700u; + SCE->REG_C4H = 0x00e087b7u; + SCE->REG_04H = 0x00000282u; + for(oLoop=ARG1; oLoopREG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func062.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func063.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func063.c new file mode 100644 index 000000000..5f098fb3e --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func063.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func063(uint32_t ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00003f61u; + SCE->REG_B0H = 0x00000f00u; + SCE->REG_A4H = 0x00d0c9a7u; + for(iLoop=ARG1; iLoopREG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func063.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func064.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func064.c new file mode 100644 index 000000000..6f2d9a5f1 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func064.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func064(uint32_t ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00e087b7u; + SCE->REG_04H = 0x00000202u; + for(oLoop=ARG1; oLoopREG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func064.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func065.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func065.c new file mode 100644 index 000000000..ff3863091 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func065.c @@ -0,0 +1,484 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func065_r1(uint32_t* ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0x23a20f43u, 0xb31e013bu, 0x7d30fa57u, 0xddf885eeu); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000011u); + HW_SCE_p_func101(0xabc8f62eu, 0xa0b4b4cdu, 0xabed9fedu, 0x55efaa74u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x000034e4u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000011u); + HW_SCE_p_func101(0x79da836fu, 0x01a8f4b7u, 0x4410b933u, 0x7d62b94du); + HW_SCE_p_func044(); + HW_SCE_p_func100(0xfef7fdd1u, 0x5e78f5c3u, 0xd66fdca4u, 0x5b2ab651u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00050804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func081(); + SCE->REG_ECH = 0x00007c01u; + SCE->REG_1CH = 0x00600000u; + SCE->REG_1D0H = 0x00000000u; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x3b31b2c7u, 0xfdedce3fu, 0xf2657d0au, 0x9d2cac16u); + SCE->REG_00H = 0x80002100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00000886u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02e087b6u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[0]; + SCE->REG_100H = ARG1[1]; + SCE->REG_100H = ARG1[2]; + SCE->REG_100H = ARG1[3]; + for (iLoop = 0; iLoop < (INST_DATA_SIZE-4) ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[4+iLoop + 0]; + SCE->REG_100H = ARG1[4+iLoop + 1]; + SCE->REG_100H = ARG1[4+iLoop + 2]; + SCE->REG_100H = ARG1[4+iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+iLoop + 0] = SCE->REG_100H; + ARG2[1+iLoop + 1] = SCE->REG_100H; + ARG2[1+iLoop + 2] = SCE->REG_100H; + ARG2[1+iLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+iLoop + 0] = SCE->REG_100H; + ARG2[1+iLoop + 1] = SCE->REG_100H; + ARG2[1+iLoop + 2] = SCE->REG_100H; + ARG2[1+iLoop + 3] = SCE->REG_100H; + iLoop = iLoop + 4; + oLoop = iLoop; + HW_SCE_p_func202();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x26483003u, 0x4db2d050u, 0x1fb2570au, 0x627d3e3bu); + } + else if (0x0a000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x2be8ca08u, 0xf05b8eaau, 0xeb20462au, 0xc40e8c69u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_00H = 0x00003183u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func066(0,ARG1); + iLoop = 0 + 32; + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_D0H = 0x40000700u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_04H = 0x00000282u; + for(oLoop=0; oLoop<32; oLoop=oLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xc47ff753u, 0x04506ad6u, 0x013e3dd5u, 0xbe1ead25u); + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00000885u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[iLoop + 0]; + SCE->REG_100H = ARG1[iLoop + 1]; + SCE->REG_100H = ARG1[iLoop + 2]; + SCE->REG_100H = ARG1[iLoop + 3]; + iLoop = iLoop + 4; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + SCE->REG_00H = 0x00002113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B6) + { + /* waiting */ + } + HW_SCE_p_func100(0x3b861e61u, 0xb600ea62u, 0x4bf70f4eu, 0xff3c1866u); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func062(36,ARG2); + oLoop = 36 + 32; + HW_SCE_p_func101(0x23e8fb2eu, 0x74657e4du, 0x076514e5u, 0xb519809cu); + } + else if (0x0b000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x65278693u, 0x04fabe2eu, 0xfc2fa6d5u, 0x9de2decbu); + SCE->REG_28H = 0x009f0001u; + SCE->REG_00H = 0x00003183u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func066(0,ARG1); + iLoop = 0 + 32; + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func062(0,ARG2); + oLoop = 0 + 32; + HW_SCE_p_func100(0x7fa0d5a1u, 0x3517f529u, 0x36e90eafu, 0x91f1dc4bu); + SCE->REG_00H = 0x00003183u; + SCE->REG_2CH = 0x00000011u; + HW_SCE_p_func066(32,ARG1); + iLoop = 32 + 32; + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000021u; + HW_SCE_p_func062(32,ARG2); + oLoop = 32 + 32; + HW_SCE_p_func100(0xcaa3bb50u, 0xd6691c2bu, 0xc5ff2240u, 0x7f7071bdu); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func062(64,ARG2); + oLoop = 64 + 32; + HW_SCE_p_func101(0x8427d069u, 0x71e1837eu, 0x1d040576u, 0x0c34e400u); + } + else if (0x0c000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0xa26076b9u, 0x10e94805u, 0x196f6ef1u, 0xf38da63du); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func067(0,ARG1); + iLoop = 0 + 64; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_04H = 0x00000202u; + for(oLoop=0; oLoop<64; oLoop=oLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xa56b7d5du, 0xf4486507u, 0x64d0b38fu, 0x04fb55a5u); + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00000885u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[iLoop + 0]; + SCE->REG_100H = ARG1[iLoop + 1]; + SCE->REG_100H = ARG1[iLoop + 2]; + SCE->REG_100H = ARG1[iLoop + 3]; + iLoop = iLoop + 4; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + SCE->REG_00H = 0x00002113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B6) + { + /* waiting */ + } + HW_SCE_p_func100(0x4aed1905u, 0xe5d8ff2eu, 0xcee610e7u, 0x2b56f36cu); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func064(68,ARG2); + oLoop = 68 + 64; + HW_SCE_p_func101(0x953dbb7cu, 0x684783a0u, 0xec9db7b7u, 0xeadfcaa6u); + } + else if (0x0d000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x0da69955u, 0x4c58a953u, 0x660176a5u, 0xb9ae0c4eu); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func067(0,ARG1); + iLoop = 0 + 64; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func064(0,ARG2); + oLoop = 0 + 64; + HW_SCE_p_func100(0x58754c97u, 0xd4752e10u, 0x9fa38d8fu, 0xbe29908fu); + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func067(64,ARG1); + iLoop = 64 + 64; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func064(64,ARG2); + oLoop = 64 + 64; + HW_SCE_p_func100(0x3ab34648u, 0x51ed9b48u, 0x476e0a97u, 0x9dd57620u); + HW_SCE_p_func060(); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func064(128,ARG2); + oLoop = 128 + 64; + HW_SCE_p_func101(0x25db8d2cu, 0xd2c88a95u, 0x654191cbu, 0x45fcaca9u); + } + else if (0x12000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func100(0x546d42e4u, 0x4fab67fau, 0x54171dfeu, 0x01b96779u); + SCE->REG_00H = 0x80002100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00000886u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02e08886u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[0]; + SCE->REG_100H = ARG1[1]; + SCE->REG_100H = ARG1[2]; + SCE->REG_100H = ARG1[3]; + for (iLoop = 0; iLoop < (INST_DATA_SIZE-4) ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG1[4+iLoop + 0]; + SCE->REG_100H = ARG1[4+iLoop + 1]; + SCE->REG_100H = ARG1[4+iLoop + 2]; + SCE->REG_100H = ARG1[4+iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+iLoop + 0] = SCE->REG_100H; + ARG2[1+iLoop + 1] = SCE->REG_100H; + ARG2[1+iLoop + 2] = SCE->REG_100H; + ARG2[1+iLoop + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+iLoop + 0] = SCE->REG_100H; + ARG2[1+iLoop + 1] = SCE->REG_100H; + ARG2[1+iLoop + 2] = SCE->REG_100H; + ARG2[1+iLoop + 3] = SCE->REG_100H; + iLoop = iLoop + 4; + oLoop = iLoop; + HW_SCE_p_func202();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x0afcbf2fu, 0xc4a4aabau, 0x39c6470fu, 0x02417d40u); + } + HW_SCE_p_func100(0xd3371c6du, 0xd24af252u, 0x239fe0dcu, 0x815b0e6cu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + ARG2[1+oLoop + 0] = SCE->REG_100H; + ARG2[1+oLoop + 1] = SCE->REG_100H; + ARG2[1+oLoop + 2] = SCE->REG_100H; + ARG2[1+oLoop + 3] = SCE->REG_100H; + SCE->REG_ECH = 0x00007c1cu; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func065_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func066.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func066.c new file mode 100644 index 000000000..55d6be917 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func066.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func066(uint32_t ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00001f61u; + SCE->REG_B0H = 0x00000700u; + SCE->REG_A4H = 0x00008887u; + for(iLoop=ARG1; iLoopREG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func066.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func067.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func067.c new file mode 100644 index 000000000..4ea2a87ec --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func067.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func067(uint32_t ARG1, uint32_t* ARG2) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00003f61u; + SCE->REG_B0H = 0x00000f00u; + SCE->REG_A4H = 0x00008887u; + for(iLoop=ARG1; iLoopREG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = ARG2[iLoop + 0]; + SCE->REG_100H = ARG2[iLoop + 1]; + SCE->REG_100H = ARG2[iLoop + 2]; + SCE->REG_100H = ARG2[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func067.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func068.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func068.c new file mode 100644 index 000000000..b45d6cb5e --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func068.c @@ -0,0 +1,108 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func068(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xd4a52766u, 0x8a66b39cu, 0x3e9135a1u, 0x2cc5d444u); + SCE->REG_ECH = 0x00008d40u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x00009140u; + SCE->REG_ECH = 0x01000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00442a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x00082e0cu; + SCE->REG_E0H = 0x81010140u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xb473d362u, 0xa92dfd51u, 0x9eb15e5au, 0x0ba44048u); + SCE->REG_ECH = 0x00008d40u; + SCE->REG_ECH = 0x00ffffffu; + SCE->REG_ECH = 0x00009140u; + SCE->REG_ECH = 0x02000000u; + SCE->REG_C4H = 0x00092e0cu; + SCE->REG_E0H = 0x81010140u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func068.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func070.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func070.c new file mode 100644 index 000000000..ef42caca4 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func070.c @@ -0,0 +1,284 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func070_r2(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0131ec45u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x014bb610u; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x01542614u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x01ba24feu; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x01bb59d6u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00870001u; + SCE->REG_C4H = 0x00443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000c3e1cu; + SCE->REG_E0H = 0x810103c0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00002f62u; + SCE->REG_D0H = 0x00000b00u; + SCE->REG_C4H = 0x02f087bfu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+68 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+68 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+68 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+68 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+72 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+72 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+72 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+72 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000015u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+76 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+76 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+76 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+76 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+80 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+80 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+80 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+80 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000009au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+84 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+84 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+84 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+84 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+88 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+88 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+88 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+88 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000001du; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+92 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+92 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+92 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+92 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+96 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+96 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+96 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+96 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000009du; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+100 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+100 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+100 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+100 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+104 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+104 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+104 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+104 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+108 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+108 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+108 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+108 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+112 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+112 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+112 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+112 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x000007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+116 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+116 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+116 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+116 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func070_r2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func071.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func071.c new file mode 100644 index 000000000..2f650bdc0 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func071.c @@ -0,0 +1,336 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func071_r2(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x017d423au; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0163c737u; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x017c67d8u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0126ddb5u; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x01bcfa36u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00870001u; + SCE->REG_C4H = 0x00443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000c3e1cu; + SCE->REG_E0H = 0x810103c0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00003f62u; + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x02f087bfu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+0 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+0 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+0 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+0 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+4 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+4 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+4 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+4 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+8 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+8 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+8 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+8 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+12 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+12 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+12 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+12 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000001bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+16 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+16 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+16 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+16 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+20 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+20 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+20 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+20 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000098u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+24 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+24 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+24 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+24 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+28 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+28 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+28 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+28 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000099u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+32 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+32 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+32 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+32 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+36 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+36 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+36 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+36 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000094u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+40 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+40 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+40 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+40 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+44 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+44 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+44 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+44 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000095u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+48 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+48 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+48 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+48 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+52 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+52 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+52 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+52 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000009cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+56 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+56 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+56 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+56 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+60 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+60 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+60 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+60 + 3]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000009du; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x000007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_FLASH2[ARG1+64 + 0]; + SCE->REG_100H = S_FLASH2[ARG1+64 + 1]; + SCE->REG_100H = S_FLASH2[ARG1+64 + 2]; + SCE->REG_100H = S_FLASH2[ARG1+64 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func071_r2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func074.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func074.c new file mode 100644 index 000000000..7748ee081 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func074.c @@ -0,0 +1,90 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func074_r1(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000023u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001du; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000017u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000015u; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000013u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func074_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func075.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func075.c new file mode 100644 index 000000000..f43962b0a --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func075.c @@ -0,0 +1,90 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func075_r1(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000022u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000016u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000012u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func075_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func076.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func076.c new file mode 100644 index 000000000..f98149efd --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func076.c @@ -0,0 +1,78 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func076(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000019u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001fu; + SCE->REG_ECH = 0x00000080u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func076.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func077.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func077.c new file mode 100644 index 000000000..f63b6122b --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func077.c @@ -0,0 +1,78 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func077(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001eu; + SCE->REG_ECH = 0x00000080u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func077.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func080.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func080.c new file mode 100644 index 000000000..3ecf76770 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func080.c @@ -0,0 +1,86 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func080(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_C4H = 0x00440a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x00080e9cu; + SCE->REG_E0H = 0x81010020u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func080.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func081.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func081.c new file mode 100644 index 000000000..b918e939f --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func081.c @@ -0,0 +1,152 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func081(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x00003424u; + SCE->REG_ECH = 0x3420a880u; + SCE->REG_ECH = 0x0000000au; + SCE->REG_ECH = 0x10000821u; + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000000du; + SCE->REG_ECH = 0x342028e4u; + SCE->REG_ECH = 0x10000821u; + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000012u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_104H = 0x00000958u; + SCE->REG_E0H = 0x808a001fu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000012u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000014u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000016u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000018u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000001cu); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000001eu); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000020u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000000eu); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000010u); + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000022u); + for(iLoop=0; iLoop<10; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x00003bdfu; + SCE->REG_ECH = 0x3800089eu; + SCE->REG_ECH = 0x10003427u; + SCE->REG_ECH = 0x000027fdu; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func081.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func100.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func100.c new file mode 100644 index 000000000..e7f7eccf1 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func100.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func100(uint32_t ARG1, uint32_t ARG2, uint32_t ARG3, uint32_t ARG4) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_C4H = 0x000f3a8du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(ARG1); + SCE->REG_100H = change_endian_long(ARG2); + SCE->REG_100H = change_endian_long(ARG3); + SCE->REG_100H = change_endian_long(ARG4); + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B16) + { + /* waiting */ + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func100.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func101.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func101.c new file mode 100644 index 000000000..17edf1a06 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func101.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func101(uint32_t ARG1, uint32_t ARG2, uint32_t ARG3, uint32_t ARG4) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_C4H = 0x000e3a8du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(ARG1); + SCE->REG_100H = change_endian_long(ARG2); + SCE->REG_100H = change_endian_long(ARG3); + SCE->REG_100H = change_endian_long(ARG4); + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B17) + { + /* waiting */ + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func101.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func102.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func102.c new file mode 100644 index 000000000..7e76d7c72 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func102.c @@ -0,0 +1,80 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func102(uint32_t ARG1, uint32_t ARG2, uint32_t ARG3, uint32_t ARG4) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_C4H = 0x000d3a8du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(ARG1); + SCE->REG_100H = change_endian_long(ARG2); + SCE->REG_100H = change_endian_long(ARG3); + SCE->REG_100H = change_endian_long(ARG4); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func102.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func103.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func103.c new file mode 100644 index 000000000..daed00e47 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func103.c @@ -0,0 +1,116 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func103(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000252u; + SCE->REG_C4H = 0x01003774u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x010037f4u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x010037f4u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x00060805u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01073644u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x000b0805u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func103.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func200.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func200.c new file mode 100644 index 000000000..c6b7ee2e6 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func200.c @@ -0,0 +1,87 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func200(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_04H = 0x00000000u; + SCE->REG_104H = 0x00000000u; + SCE->REG_1CH = 0x002c0000u; + SCE->REG_1CH = 0x002d0000u; + SCE->REG_B0H = 0x00000001u; + SCE->REG_A4H = 0x00000000u; + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00000000u; + SCE->REG_1CH = 0x002e0000u; + SCE->REG_1CH = 0x002f0000u; + SCE->REG_D0H = 0x00000001u; + SCE->REG_C4H = 0x00000000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func200.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func202.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func202.c new file mode 100644 index 000000000..dbeeedecf --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func202.c @@ -0,0 +1,77 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func202(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_04H = 0x00000000u; + SCE->REG_104H = 0x00000000u; + SCE->REG_A4H = 0x00000000u; + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00000000u; + SCE->REG_C4H = 0x00000000u; + SCE->REG_1CH = 0x00000900u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func202.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func206.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func206.c new file mode 100644 index 000000000..2aeaf2be2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func206.c @@ -0,0 +1,76 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func206(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_04H = 0x00000000u; + SCE->REG_104H = 0x00000000u; + SCE->REG_1CH = 0x002c0000u; + SCE->REG_1CH = 0x002d0000u; + SCE->REG_B0H = 0x00000001u; + SCE->REG_A4H = 0x00000000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func206.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func300.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func300.c new file mode 100644 index 000000000..32f931b2f --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func300.c @@ -0,0 +1,1180 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func300(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x38008fc0u; + SCE->REG_ECH = 0x0000001fu; + SCE->REG_ECH = 0x1000381fu; + SCE->REG_ECH = 0x100027e1u; + SCE->REG_ECH = 0x00002fc0u; + SCE->REG_ECH = 0x38008c00u; + SCE->REG_ECH = 0x80000000u; + SCE->REG_ECH = 0x20002c40u; + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000863u; + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_ECH = 0x1000d060u; + SCE->REG_ECH = 0x38008c00u; + SCE->REG_ECH = 0x80000000u; + SCE->REG_ECH = 0x2000d061u; + SCE->REG_ECH = 0x38008860u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x7cb9bdc4u, 0xe2ed2e73u, 0x4a5b41a8u, 0x425eb43eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xd0c4c720u, 0x1d3105e5u, 0x59d8a4afu, 0x0aca73a5u); + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000a41u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008860u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x05080e70u, 0x42335a73u, 0xa2816ca7u, 0x60d9a58eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x5439d1d0u, 0xf77edaccu, 0x57b2b29fu, 0xdd61d360u); + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x38008c00u; + SCE->REG_ECH = 0x80000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x6881e9fbu, 0x06aa6fdfu, 0x762ffc17u, 0x0ae7d84au); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x1e20aafbu, 0x0da3797bu, 0x1af729a3u, 0x9c0738b4u); + } + else + { + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x646bf0ddu, 0x564d0572u, 0xea3a4866u, 0x1d52fff8u); + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x900019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000941u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x38008c00u; + SCE->REG_ECH = 0x80000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x5784ad1eu, 0x63814257u, 0x33a4b910u, 0x1700cf71u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x8b0b83e6u, 0x57999af5u, 0x29955b52u, 0xa5f96b63u); + } + else + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xdd3bb8cau, 0x5d1667a4u, 0x248aebc8u, 0x3a8569d1u); + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000145u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x38008c00u; + SCE->REG_ECH = 0x80000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x3a6b9affu, 0x96c744c5u, 0x2ba5e0d7u, 0x473b64d7u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x6d4b179bu, 0xd894c624u, 0x41aec014u, 0x3b6a07ccu); + } + else + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x4585ea52u, 0xc7508304u, 0xa730e47du, 0x56bff85au); + } + SCE->REG_ECH = 0x38000bc4u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x19bb82dau, 0x8e4d3bddu, 0x159c1223u, 0x100a1ebfu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x00002f80u; + HW_SCE_p_func100(0x9496dc85u, 0x5565ff4fu, 0x0e3ae0fcu, 0x5fccf5f2u); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; + } + else + { + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000208u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001141u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000941u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800094d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xdc69660au, 0x37cc1f51u, 0x3a646afcu, 0x133dad9du); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xb93c6b4eu, 0xdaa196c9u, 0xf84a2b35u, 0x80f87383u); + } + else + { + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xc769e365u, 0x6330fdfdu, 0x3604efb4u, 0xb017fb9eu); + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800002d1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x8000014au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00016c00u; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func300.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func301.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func301.c new file mode 100644 index 000000000..241ef399d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func301.c @@ -0,0 +1,264 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func301(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00009004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00004804u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800016c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006c04u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006c04u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func301.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func302.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func302.c new file mode 100644 index 000000000..a3bc06bad --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func302.c @@ -0,0 +1,1172 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func302(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x38008fc0u; + SCE->REG_ECH = 0x0000001fu; + SCE->REG_ECH = 0x1000381fu; + SCE->REG_ECH = 0x100027e1u; + SCE->REG_ECH = 0x00002fc0u; + SCE->REG_ECH = 0x38008c00u; + SCE->REG_ECH = 0x80000000u; + SCE->REG_ECH = 0x20002c40u; + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x0be803f1u, 0xaf43b4fbu, 0xc4b808e5u, 0x656569c2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x7e98a73bu, 0xd8a9ce59u, 0xdb79f215u, 0xa333be2cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000863u; + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x97923a72u, 0xf3c1b530u, 0x377b742du, 0x1cfbe97fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x7b388408u, 0x87cdbf3du, 0x2de37e3eu, 0x6980acafu); + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000a41u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x8c171365u, 0x2d85eca3u, 0x2870eac6u, 0x0728f6e1u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xf0b2a5cfu, 0x92e837e0u, 0xc8e075efu, 0x5e47de2eu); + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x2c7196a2u, 0x36fb8304u, 0xafce3eb1u, 0xaeaee9a8u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xb5777ab6u, 0x40e740a5u, 0x49575931u, 0xf19d5425u); + } + else + { + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xb2724ea1u, 0x7c74561fu, 0xa0b5d998u, 0x57550da6u); + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x900019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000941u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x75ba536du, 0x2e30f36cu, 0xb3324f38u, 0x5968458cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x802b0684u, 0x69264948u, 0x4286494bu, 0x3bdd8e36u); + } + else + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x44ebc595u, 0x10b0e3a3u, 0x777d4c82u, 0xd06d541bu); + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000145u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xb09dccf4u, 0x63be4033u, 0x60160e20u, 0xcbb759d4u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x7eb1a8abu, 0xbac3f161u, 0x463f7896u, 0x8c21338au); + } + else + { + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xfc93967bu, 0xa7d222e5u, 0x1a38ceaeu, 0x64f35868u); + } + } + else + { + HW_SCE_p_func101(0x42dbdae1u, 0xd6c90dadu, 0xf0da9152u, 0x4af05ac5u); + } + SCE->REG_ECH = 0x38000bc4u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x04c62050u, 0x85471239u, 0x431e9a1eu, 0x94e9736cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x00002f80u; + HW_SCE_p_func100(0x0ca11aceu, 0xf756a0aau, 0x85202c6bu, 0xeafbb7edu); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; + } + else + { + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000208u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001141u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000941u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800094d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00002c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800002d1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000302cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x8000014au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000282cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func101(0x52430301u, 0x4929e648u, 0xddef7975u, 0x2d2cf120u); + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; + } + } + else + { + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func101(0x2feff25fu, 0xfcd487ebu, 0x6afa67d6u, 0x32960ea4u); + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func302.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func304.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func304.c new file mode 100644 index 000000000..45d3a8634 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func304.c @@ -0,0 +1,2173 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func304(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000024u; + SCE->REG_ECH = 0x00003c1eu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d779u; + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x00000b18u; + SCE->REG_E0H = 0x80010300u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x000000adu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000031fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x3800db1fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xe5986152u, 0x77a0ec4cu, 0x96bf2690u, 0x6a2cacffu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x10ff3fe3u, 0x4b460b48u, 0x277e1172u, 0x463feb78u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d379u; + HW_SCE_p_func101(0x969611fbu, 0x4648fd51u, 0x43577ed6u, 0xff05cec7u); + } + HW_SCE_p_func100(0xab8c8692u, 0xebf4f03eu, 0xcca553b8u, 0x62b91c3au); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x017da167u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf2ca2938u, 0xa80f39e9u, 0xc43330dau, 0xf5fde800u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func313(1156); + HW_SCE_p_func100(0xb49d7ef6u, 0x65fe3fafu, 0xcdf2ff51u, 0x40cac15bu); + HW_SCE_p_func314(1156+64); + SCE->REG_ECH = 0x00000b5au; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000d77cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x3800db7au; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x01dd3aa3u, 0xe9b30484u, 0xe9ee2277u, 0xf9d02553u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000157u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000110u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xd26d42ffu, 0xc3695e06u, 0x9cf5af99u, 0x9bfeede5u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00003340u; + HW_SCE_p_func101(0xefd40792u, 0x390bb84au, 0x4c63e1c2u, 0x269e897bu); + } + else + { + HW_SCE_p_func101(0x7ea798c1u, 0x39d52927u, 0xb2a79290u, 0xfca05510u); + oLoop1 = 0; + } + } + SCE->REG_ECH = 0x0000d37cu; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x00002b9au; + SCE->REG_ECH = 0x0000375cu; + HW_SCE_p_func101(0xb4818009u, 0x9240b2ceu, 0x392a2156u, 0xedf546aeu); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xcf9e1796u, 0xe867c7f2u, 0x0c8b147au, 0x5844a87eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x64029b2fu, 0x0f0e1921u, 0x574ab5cbu, 0x278bca4bu); + oLoop1 = 0; + } + else + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002f40u; + HW_SCE_p_func101(0xe2b49ae6u, 0x659727f9u, 0x3a18be25u, 0x6e781766u); + } + } + HW_SCE_p_func101(0xa170ddb7u, 0x02cde70cu, 0x20f0afa1u, 0x6e9e2b7au); + } + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000b39u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000d77du; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x3800db7bu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x3d1e1391u, 0xc39a7bdbu, 0x02df7a57u, 0xa1095da7u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000157u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000110u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x9ffb65aau, 0x2cf47374u, 0x960cbf4bu, 0xe0d92891u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00003320u; + HW_SCE_p_func101(0x9f6d4d47u, 0x5a540a97u, 0x90e36ff3u, 0xb3e0c0e5u); + } + else + { + HW_SCE_p_func101(0x428b2571u, 0xa7416f10u, 0x0de2c174u, 0x45a203f0u); + oLoop1 = 0; + } + } + SCE->REG_ECH = 0x0000d37du; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x00002b99u; + SCE->REG_ECH = 0x0000373cu; + HW_SCE_p_func101(0x6acd5fb2u, 0xdf585e2eu, 0x1c716be9u, 0xff0414eau); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xcdb35358u, 0x9476764cu, 0xa8981e90u, 0xdd46be8bu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xbd0b86adu, 0x8c871c31u, 0xdfd5d06cu, 0xf4194799u); + oLoop1 = 0; + } + else + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002f20u; + HW_SCE_p_func101(0x568a7b8bu, 0x164d8cdeu, 0xdb712a97u, 0xf572288du); + } + } + HW_SCE_p_func101(0xc33dc603u, 0x8a8373acu, 0x372774ccu, 0x978192f9u); + } + HW_SCE_p_func100(0x3461b0c9u, 0xd8ad5898u, 0xe4570345u, 0x8d731553u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x013fd1d7u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcdb27765u, 0x54ad18a7u, 0x2a027349u, 0xaa40ee12u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(1088); + HW_SCE_p_func100(0x6ca37557u, 0xd24a3739u, 0x7c970af6u, 0x200ecc3eu); + HW_SCE_p_func314(1088+64); + HW_SCE_p_func100(0x65e7019au, 0xc524e055u, 0x269764ceu, 0x48b54eefu); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x0000480cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a2b89bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xdbfd0b8cu, 0x55072b70u, 0x2b8d035au, 0xe0f5939au); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(1224); + HW_SCE_p_func100(0xdc20f138u, 0xd0d20635u, 0x62fe940fu, 0x16494aeeu); + HW_SCE_p_func314(1224+64); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00800001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x80010380u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800103a0u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x000000adu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000031fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000012u; + SCE->REG_104H = 0x00000767u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x40000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_34H = 0x00000030u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800dbbeu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x71b9f77bu, 0x15ebca7bu, 0xf7ac0f68u, 0x4f17baf2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000d375u; + HW_SCE_p_func101(0x3adaeacau, 0x6e43d4abu, 0x8db7589fu, 0xc4323a0eu); + } + else + { + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000d775u; + HW_SCE_p_func101(0x7efebc70u, 0xe8bbac54u, 0x76d54f63u, 0xc908420bu); + } + HW_SCE_p_func100(0xc22d191fu, 0x4585204au, 0xe46132b0u, 0x3b5fcb5au); + SCE->REG_34H = 0x00000c00u; + SCE->REG_24H = 0x8000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x013d2cc1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6d3ccc34u, 0xfd034277u, 0xe9f917a1u, 0x4b7fe353u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func313(1428); + HW_SCE_p_func100(0xae117735u, 0x1a2569e6u, 0x41130d87u, 0x42e20119u); + HW_SCE_p_func314(1428+64); + HW_SCE_p_func100(0x0f09dc1bu, 0x0d25ed9bu, 0xc647791bu, 0x2b003f89u); + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c80cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a2b89bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(1224); + SCE->REG_ECH = 0x0000d776u; + SCE->REG_ECH = 0x3800db75u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x5cc64a69u, 0xf2a44982u, 0xc740beb0u, 0x6a2516bdu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x33b90ce4u, 0x5db0e894u, 0x00e112ddu, 0xf58dcd06u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x0000d376u; + SCE->REG_28H = 0x00800001u; + SCE->REG_104H = 0x00000257u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_2CH = 0x00000110u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0xFFFFFFFFu); + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xae9e04cfu, 0xd330fbdeu, 0x30d4edf8u, 0xc9a2ff40u); + } + else + { + SCE->REG_ECH = 0x0000d776u; + SCE->REG_28H = 0x00800001u; + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00000067u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xcd1f90deu, 0x9ac953a4u, 0xfeda1414u, 0xec875363u); + } + } + else + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x5f5687adu, 0xae101c00u, 0x054dc8e3u, 0x12360356u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x0000d376u; + SCE->REG_28H = 0x00800001u; + SCE->REG_104H = 0x00000257u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_2CH = 0x00000110u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0xFFFFFFFFu); + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xffbb0cbcu, 0x0e646d5cu, 0xce376485u, 0x470e965bu); + } + else + { + SCE->REG_ECH = 0x0000d776u; + SCE->REG_28H = 0x00800001u; + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00000067u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xd2c19e49u, 0xe40ff80du, 0x83aeb8a3u, 0xbd0e4c85u); + } + } + HW_SCE_p_func100(0x18b5fb6cu, 0x7d7790ffu, 0x9c25c4f6u, 0x8c05cb7fu); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000189u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02000189u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000189u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02000189u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016be062u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xda802bb3u, 0x2d8929d6u, 0x76e9e8cfu, 0xdbc5b788u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(1360); + HW_SCE_p_func100(0xe6339cf1u, 0xb532bf6au, 0xa3482974u, 0xd9807aecu); + HW_SCE_p_func314(1360+64); + HW_SCE_p_func100(0x6bc0e5eau, 0x4aedebcau, 0xa9fcf8f6u, 0x785dfbb8u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000008u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x000037dcu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016be062u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcb65077au, 0x4d3fa4b8u, 0x1cfe2b93u, 0x8d794d55u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(1360); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x017da167u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x402e7dbfu, 0xfadf9e7eu, 0x4687ad22u, 0x8fe85d29u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(1156); + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x80010380u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x810103c0u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x81010380u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x800103c0u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00008fc0u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_ECH = 0x0000d777u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x3000dbc3u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x00002bddu; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000d377u; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x00002b9eu; + SCE->REG_ECH = 0x000037dcu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x013d2cc1u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1428); + SCE->REG_ECH = 0x00000bffu; + SCE->REG_ECH = 0x3800db77u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xc0dff601u, 0xdd161907u, 0x3683b9ecu, 0xfbd124aeu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func100(0x143b4871u, 0xb551f34eu, 0xd21077e6u, 0x930f4960u); + SCE->REG_E0H = 0x810103c0u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for (oLoop2 = 0; oLoop2 < S_RAM[0]; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002fe0u; + HW_SCE_p_func101(0xe0c3f7d3u, 0x43549f5eu, 0x91d5a220u, 0xc0ccba56u); + } + HW_SCE_p_func101(0x5615313fu, 0x56817861u, 0xebc2c1acu, 0x5531da32u); + } + else + { + HW_SCE_p_func100(0x32226c01u, 0x47382077u, 0x5543d625u, 0x0538b162u); + SCE->REG_E0H = 0x810103c0u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for (oLoop2 = 0; oLoop2 < S_RAM[0]; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002fe0u; + HW_SCE_p_func101(0xda5dda6eu, 0x33afdb96u, 0x36b203a6u, 0x4450e14au); + } + HW_SCE_p_func101(0x3afc982bu, 0x640862e2u, 0xdee123a1u, 0xca8502c7u); + } + SCE->REG_ECH = 0x38000bdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + HW_SCE_p_func100(0x06131c0au, 0x4c7c54f5u, 0x3ab8cdceu, 0xb791ca1cu); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000008u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016be062u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1360); + SCE->REG_ECH = 0x3800db76u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x8abe5331u, 0x481743e0u, 0x5b657230u, 0xbf6f27d2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000190u); + HW_SCE_p_func101(0x8f559563u, 0x97af0837u, 0xd313a066u, 0xa2705e73u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xb42e3262u, 0x9859ebaeu, 0x954f236bu, 0x77816924u); + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d378u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d778u; + SCE->REG_ECH = 0x00000080u; + HW_SCE_p_func100(0xc9ed9bb6u, 0x433b0541u, 0xcc23870au, 0x214a676bu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016efbeau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x713e9a08u, 0x75913315u, 0x841cf33du, 0xb3a1c40du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(1292); + HW_SCE_p_func100(0x76276a5du, 0xf64ab6d3u, 0x8e0a61c5u, 0x3355b0fdu); + HW_SCE_p_func314(1292+64); + HW_SCE_p_func100(0xb5d07c20u, 0x8e60825au, 0x1ca4c842u, 0x53189972u); + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x81010320u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x81010340u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x80010300u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000d77eu; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x3000db7cu; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x00002fc0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x3000db7du; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x00002fc0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x3000dbc0u; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d77eu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d37eu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x013fd1d7u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1088); + SCE->REG_ECH = 0x3000db7cu; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d76bu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d36bu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x000037dau; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000097u; + HW_SCE_p_func101(0x3f40f3f7u, 0xbcae5503u, 0xa1e66292u, 0x25e9989cu); + HW_SCE_p_func310(); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3000db7du; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d76bu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d36bu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x000037d9u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000098u; + HW_SCE_p_func101(0x2549e4eau, 0xa0d3cc6fu, 0x23a5edaau, 0xd5bffedau); + HW_SCE_p_func310(); + HW_SCE_p_func100(0xe6e2105fu, 0xf966fefeu, 0x430a3701u, 0x6a1b7bcbu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x017da167u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1156); + SCE->REG_ECH = 0x3000db7eu; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d76bu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d36bu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x000037d8u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000099u; + HW_SCE_p_func101(0xfa5ebe91u, 0x608dd2a2u, 0x703e6190u, 0xe345f97au); + HW_SCE_p_func310(); + HW_SCE_p_func100(0x7098f4e1u, 0x755029a7u, 0xcf086487u, 0x3a769432u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016efbeau); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1292); + SCE->REG_ECH = 0x3800db78u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xb5e88869u, 0x47d1e807u, 0x1f8e358du, 0x13c8289fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00800001u; + SCE->REG_104H = 0x00000257u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_2CH = 0x00000190u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0xFFFFFFFFu); + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x1e90575au, 0x6f9e8914u, 0x56924477u, 0x20dfd07du); + } + else + { + HW_SCE_p_func101(0xee9e77e3u, 0x6eae0791u, 0x4ab75099u, 0x0a8da033u); + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x3800db79u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x6dfc72e1u, 0x4aa97e03u, 0x9fefa641u, 0xb7d6a06au); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func100(0xa6fcc1c7u, 0x509bfa42u, 0xd75055a0u, 0x559ad70fu); + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d368u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d768u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a2b89bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1224); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d372u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d772u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000098d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xc3143860u, 0xcb79a6fdu, 0x9bf4bad1u, 0x20e4b647u); + } + else + { + HW_SCE_p_func100(0x8d0528ddu, 0x4e505ffbu, 0xe5a9e4e6u, 0x71567e2eu); + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d368u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d768u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d772u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a2b89bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(1224); + HW_SCE_p_func101(0x5fc4a8f8u, 0x188438f1u, 0x443f6818u, 0xdc8f97a7u); + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000024u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func304.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func307.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func307.c new file mode 100644 index 000000000..22d8615f5 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func307.c @@ -0,0 +1,521 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func307(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000090u; + SCE->REG_ECH = 0x00003c1eu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000080u; + HW_SCE_p_func101(0x46765f77u, 0x5749f546u, 0xffae0ff7u, 0x8b2d018eu); + HW_SCE_p_func311(); + SCE->REG_ECH = 0x00000a73u; + SCE->REG_ECH = 0x00000a31u; + for(jLoop = 0; jLoop < 32; jLoop = jLoop + 1) + { + SCE->REG_ECH = 0x00002e20u; + SCE->REG_ECH = 0x38002673u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x0efed670u, 0x4c5eb194u, 0xde5be454u, 0x29041d0fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x733f12abu, 0xecc5543eu, 0xc537a171u, 0x48357424u); + } + else + { + HW_SCE_p_func100(0x2d664c4du, 0xd9d9fd9du, 0xe34eae6au, 0x62d43b41u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c85beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe804d856u, 0xe4909999u, 0xa52e04fdu, 0xfe75ac58u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(204); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016bcaa1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x517c7161u, 0x77c03114u, 0x61d87db2u, 0x4f1c9985u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(136); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x989e30fdu, 0xfb087ef5u, 0xec2e871bu, 0x64eb0658u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(476); + HW_SCE_p_func100(0xbf56fa09u, 0x821175ccu, 0x1891f091u, 0x8f3b024au); + HW_SCE_p_func314(476+64); + HW_SCE_p_func100(0xd2825fcdu, 0xc659f6e8u, 0x10029c48u, 0x47827fb5u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa3c241c7u, 0x45c0ad6bu, 0xe6a7bb38u, 0x84b04d8bu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(612); + HW_SCE_p_func100(0x3f406e95u, 0x13025ff8u, 0xf8b51b24u, 0x4c05351cu); + HW_SCE_p_func314(612+64); + HW_SCE_p_func100(0x0830ae7au, 0x6d43b3e9u, 0xd4ccc5eau, 0xe6dcdce5u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x40901979u, 0xc4600862u, 0x60d83598u, 0xf0d8941fu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(408); + HW_SCE_p_func100(0x2c04ab0bu, 0x0e747ad8u, 0x7eb80229u, 0xf876f457u); + HW_SCE_p_func314(408+64); + HW_SCE_p_func100(0xa016bd2cu, 0x3aa9aa45u, 0x7542dc38u, 0xdcc879c6u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x20c49ee6u, 0x329d4116u, 0xa1fa89feu, 0x0340299cu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(544); + HW_SCE_p_func100(0x6e9c8d98u, 0x6120d3adu, 0x665f0919u, 0x27efb3bau); + HW_SCE_p_func314(544+64); + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000081u; + HW_SCE_p_func101(0xca53192fu, 0x211abfddu, 0xa870386fu, 0xb8e79d3eu); + HW_SCE_p_func309(); + HW_SCE_p_func100(0xcd35d372u, 0x54dbdbceu, 0xb0afbbdbu, 0xf796fc29u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c85beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xaee9f5b2u, 0x522163adu, 0x95ef5614u, 0x66787e86u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(204); + HW_SCE_p_func100(0x2e1850f0u, 0x07ff76f0u, 0xce36e13cu, 0x6eea89e8u); + HW_SCE_p_func314(204+64); + HW_SCE_p_func100(0x05d76537u, 0xa64e6099u, 0x19533700u, 0x491094b8u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016bcaa1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe6475365u, 0x1fae56fbu, 0x565db664u, 0xa6771660u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(136); + HW_SCE_p_func100(0xfe310ec6u, 0xff3bb340u, 0x3af230a3u, 0xbcedede9u); + HW_SCE_p_func314(136+64); + HW_SCE_p_func101(0x9fa02c96u, 0xfaf805deu, 0x6623feddu, 0xbc1389aeu); + } + SCE->REG_ECH = 0x3800da9fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x3d92f89au, 0xa4b197f4u, 0x583087f9u, 0x353f282du); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x60afc885u, 0xc0ff181bu, 0x12ea81aeu, 0x2804d93eu); + } + else + { + HW_SCE_p_func100(0xb9b491e0u, 0x1463bd81u, 0x8cdca180u, 0x461e2b79u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c85beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x909714ffu, 0xd0219bf6u, 0x9f8fbbbdu, 0xd4083fd2u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(204); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016bcaa1u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(136); + HW_SCE_p_func100(0x5592c700u, 0x5a6eaa8au, 0xd9bf08bdu, 0x69ab981du); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x5925d68du, 0x7a61ecf6u, 0x5bae60ccu, 0x83f7e3a4u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(476); + HW_SCE_p_func100(0xa3ca016bu, 0x8aaf93d3u, 0xbdc90e30u, 0x56d8ac7du); + HW_SCE_p_func314(476+64); + HW_SCE_p_func100(0xb313c752u, 0x5c602865u, 0xec2fe69cu, 0x7be094a4u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa821b521u, 0x461c4e09u, 0x65b8de9cu, 0x3ce623a5u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(408); + HW_SCE_p_func100(0x1360b584u, 0xf686799du, 0xab5b69bfu, 0x19469924u); + HW_SCE_p_func314(408+64); + HW_SCE_p_func100(0x7af0c270u, 0x7ed6ff84u, 0x92765f4fu, 0xc608e17fu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0132d44bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6964e4b4u, 0xe864d305u, 0xc84d8bb4u, 0x07ec5ec8u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(68); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01432c7au); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(0); + HW_SCE_p_func100(0xd7e164c0u, 0x1ecc338bu, 0x510e64e7u, 0x6a2613a5u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4e82d9a2u, 0x40be6e96u, 0x0fe40003u, 0x6ff6e827u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(612); + HW_SCE_p_func100(0xa348c089u, 0x43d0ff84u, 0x778ff6b8u, 0x67521438u); + HW_SCE_p_func314(612+64); + HW_SCE_p_func100(0xdc825e03u, 0x32ed1ec4u, 0x42c88adfu, 0x371b0bc8u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0e29cd80u, 0x38300037u, 0x45986240u, 0x957d7b77u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(544); + HW_SCE_p_func100(0x4e55f63au, 0x2241701bu, 0x4a60cce7u, 0x29c0bbd9u); + HW_SCE_p_func314(544+64); + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000082u; + HW_SCE_p_func101(0x8389d01fu, 0xe6c6ffddu, 0x142d5ccfu, 0x7a0e9c6du); + HW_SCE_p_func309(); + HW_SCE_p_func100(0xdee3518fu, 0xb273ad82u, 0x9fe71ee7u, 0x2edf8f2cu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c85beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb9c1509fu, 0xbf54f012u, 0x98c8652au, 0x203d25fcu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(204); + HW_SCE_p_func100(0x8eea8326u, 0x2d4020ceu, 0x4d41424cu, 0xe4982805u); + HW_SCE_p_func314(204+64); + HW_SCE_p_func100(0xbf7df5f8u, 0x324650cau, 0x225fdd08u, 0x90466761u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016bcaa1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x45705ce6u, 0xd8eacde4u, 0x3a795df3u, 0xbe5b4797u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(136); + HW_SCE_p_func100(0x1fe6691eu, 0xe9108d9au, 0x57f0bf4cu, 0x6708d01cu); + HW_SCE_p_func314(136+64); + SCE->REG_ECH = 0x0000d260u; + HW_SCE_p_func101(0x6358b604u, 0x6dc2d12bu, 0x6cbb7715u, 0x3eb0ec45u); + } + SCE->REG_ECH = 0x01816e94u; + HW_SCE_p_func101(0xf737726cu, 0x7dc9f6f9u, 0xe1731169u, 0x6df578f1u); + } + SCE->REG_ECH = 0x38008a20u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + HW_SCE_p_func100(0x07ff897au, 0x247d24c7u, 0xfbf81f2cu, 0x1baceb97u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c85beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x5035ba16u, 0xf255a3adu, 0x1ed0bc13u, 0x92e894d5u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(204); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016bcaa1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4a5f6826u, 0xfa67b379u, 0x995c12b3u, 0x2c6cab19u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(136); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9f2effcau, 0xfa8f0918u, 0x75ac2514u, 0xf921ad9fu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(476); + HW_SCE_p_func100(0x932f0373u, 0x17ca4781u, 0x75f63f1du, 0x12347107u); + HW_SCE_p_func314(476+64); + HW_SCE_p_func100(0x5e19c95eu, 0x1bf7f515u, 0xa49b9e82u, 0xdebab01eu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc5a99131u, 0x9797c7d3u, 0xea9c1037u, 0xb9f0451du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(408); + HW_SCE_p_func100(0x95a8001eu, 0x9fb1b0ecu, 0xf62ab0a9u, 0x2b362008u); + HW_SCE_p_func314(408+64); + HW_SCE_p_func100(0x4bcfab8fu, 0x3ffb18cfu, 0x786aa6c9u, 0x3bab7324u); + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4078b7d0u, 0x46f98634u, 0x880c48a1u, 0x7cf1df0du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(612); + HW_SCE_p_func100(0x68145b96u, 0x8dfc7766u, 0xc0a86193u, 0x9d16ea7au); + HW_SCE_p_func314(612+64); + HW_SCE_p_func100(0xb2940826u, 0xa63e577fu, 0x926b6b1eu, 0x16a88b70u); + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x17c2749cu, 0x8d75c162u, 0xfd7d6916u, 0x945b30a9u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(544); + HW_SCE_p_func100(0x5cdf4f3du, 0xc1445dfau, 0x7c2cd0aau, 0x42ffc8a0u); + HW_SCE_p_func314(544+64); + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000083u; + HW_SCE_p_func101(0x24e91976u, 0x418be7b2u, 0x2aeeec01u, 0x65afa0b3u); + HW_SCE_p_func309(); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000090u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func307.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func308.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func308.c new file mode 100644 index 000000000..171bf0964 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func308.c @@ -0,0 +1,427 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func308(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0x8c2d8cf6u, 0x8d56e617u, 0x4e381155u, 0x0522ae21u); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000024u; + SCE->REG_ECH = 0x00003c1eu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000b5au; + SCE->REG_ECH = 0x0000d77cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x3800db7au; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d37cu; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00002b5du; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x00003b5eu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0161d833u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe9363776u, 0x8ffc645cu, 0x22b826ccu, 0x70a25e76u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(1020); + HW_SCE_p_func100(0x073d446bu, 0xeccd11c7u, 0x5b0e9e5fu, 0x98abb4ccu); + HW_SCE_p_func314(1020+64); + HW_SCE_p_func100(0xfbf01920u, 0xb35ecab2u, 0x10236fdfu, 0xa5cebfeau); + SCE->REG_ECH = 0x00000b39u; + SCE->REG_ECH = 0x0000d77du; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x3800db7bu; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d37du; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00002b3du; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x00003b3eu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x013fd1d7u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x659d1915u, 0x355d44e1u, 0x0a383dc2u, 0xfc52da53u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(1088); + HW_SCE_p_func100(0xff1123e5u, 0x5c8c6531u, 0x4477a46du, 0x1d416236u); + HW_SCE_p_func314(1088+64); + HW_SCE_p_func100(0xd336b7c0u, 0xc1d5ac1cu, 0x38833731u, 0x970f8d08u); + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x81010320u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x81010340u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000080au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x80010300u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000d77eu; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x3000db7cu; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x00002fc0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x3000db7du; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x00002fc0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x3000dbc0u; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d77eu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d37eu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000058d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x013fd1d7u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1088); + SCE->REG_ECH = 0x3000db7cu; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d76bu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d36bu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x000037dau; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000097u; + HW_SCE_p_func101(0x2d831169u, 0xf3e9c45fu, 0x86a9a7dbu, 0x48bfc00cu); + HW_SCE_p_func310(); + HW_SCE_p_func100(0x5ba57e89u, 0x2ad0cf5cu, 0xc546cbb0u, 0xdfd6101du); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0161d833u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(1020); + SCE->REG_ECH = 0x3000db7du; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d76bu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d36bu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x000037d9u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000098u; + HW_SCE_p_func101(0xfb0daf22u, 0xfc7f120eu, 0x6e4b02adu, 0x7c564c8au); + HW_SCE_p_func310(); + SCE->REG_ECH = 0x3800db7eu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x6ce6e688u, 0x1ca60eafu, 0x25c7e486u, 0x73068e9au); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x81010300u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x80001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x2a06ba12u, 0xe8bfbe05u, 0xfc7ae4e6u, 0x2454e45au); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x81010300u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x80001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xa71d69d5u, 0x3fd3bbc8u, 0xcfd2107au, 0xc1462c2cu); + } + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d372u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d772u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d768u; + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000024u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func308.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func309.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func309.c new file mode 100644 index 000000000..2ca462575 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func309.c @@ -0,0 +1,3066 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func309(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0x507efdf0u, 0x2d03401au, 0xf5398ec0u, 0x286217ffu); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000028u; + SCE->REG_ECH = 0x00003c1eu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000b7bu; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x230f406fu, 0xda7f5edcu, 0x27c3bebbu, 0x1ca2d98fu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(476); + SCE->REG_ECH = 0x0000d77au; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(612); + SCE->REG_ECH = 0x0000d77bu; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000090u; + HW_SCE_p_func101(0x6cc0e7d9u, 0x458cdd1fu, 0x11511bb6u, 0x77d8e29au); + HW_SCE_p_func308(); + HW_SCE_p_func100(0xb8612113u, 0xf762b28au, 0x1e228883u, 0x606b460fu); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x00003fbeu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f0b809u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x07650df4u, 0x218ae494u, 0x62a374a7u, 0x69f77c6du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(884); + HW_SCE_p_func100(0x3b9e2e17u, 0x00dc30b0u, 0xd4f87fbdu, 0x78cc9f77u); + HW_SCE_p_func314(884+64); + HW_SCE_p_func100(0x34f500c3u, 0x1e7d953du, 0x5a457d14u, 0x1456c4e7u); + SCE->REG_ECH = 0x3000db72u; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d770u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d366u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d766u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x045fd001u, 0x1c068ffcu, 0xf9ad4dc2u, 0x0dc15f12u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func313(816); + HW_SCE_p_func100(0x23ee48a2u, 0x420f6666u, 0x7f916148u, 0xbcaeb32fu); + HW_SCE_p_func314(816+64); + HW_SCE_p_func100(0xedc72e02u, 0x9067ecb0u, 0xbd01da64u, 0x475ec240u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x000000a0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d371u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d771u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c90cfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa0d2af88u, 0x564963feu, 0xfda15b9fu, 0x0a9b6eb2u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(952); + HW_SCE_p_func100(0x8efeada1u, 0x86c947d3u, 0x97c19f1du, 0xc42b5457u); + HW_SCE_p_func314(952+64); + HW_SCE_p_func100(0x9b785ba7u, 0xca31ebe8u, 0xf0c98a00u, 0x3de02bd5u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbc1763d6u, 0xbaf51d99u, 0x286abac4u, 0x4afbbf25u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(544); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x20f12a95u, 0x2310397au, 0x9acc6944u, 0x9593ac91u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(612); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d77bu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xffceae7au, 0x6ced0145u, 0xa2b22416u, 0x66e29adcu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(408); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(476); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x0000000cu; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d77au; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000091u; + HW_SCE_p_func101(0x38ac0cdfu, 0x425c549bu, 0x4671434cu, 0xe7db001cu); + HW_SCE_p_func308(); + HW_SCE_p_func100(0xdcd705d9u, 0xc956e1bau, 0x824590e2u, 0xe2a4d2bau); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(816); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x3800db66u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xc5cbb3acu, 0x5a613e5fu, 0xe6719980u, 0xf4de0324u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0x5618de29u, 0x7dbf376bu, 0xdc848924u, 0xc3253b00u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xb8196e42u, 0x78ff726au, 0xcffc4955u, 0x6a8728b9u); + } + HW_SCE_p_func100(0x2f82a82du, 0xbf4bcf6au, 0x553f6038u, 0x8cac813cu); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000d766u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x89e121cdu, 0x93dc5382u, 0x515ddcadu, 0x04b38724u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(816); + HW_SCE_p_func100(0xae198934u, 0x9f1bc69cu, 0x05bffac6u, 0x9ba4919fu); + HW_SCE_p_func314(816+64); + HW_SCE_p_func100(0x8459fdfbu, 0x6264fd2cu, 0x58015355u, 0x6a1a691fu); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c90cfu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(952); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_ECH = 0x3800db71u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x13094415u, 0x7c03e279u, 0x87253dceu, 0x8671997bu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0xf526deaau, 0x635f2504u, 0x0c669acau, 0x08b6f407u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xc43db222u, 0xe635f693u, 0xeba2377du, 0xd87d0b4cu); + } + HW_SCE_p_func100(0xabd3f950u, 0x60198146u, 0xadd1361cu, 0xd933adc9u); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d371u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d771u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c90cfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0737b74fu, 0x953016b6u, 0xb66797cbu, 0x75808618u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(952); + HW_SCE_p_func100(0x78ef5134u, 0x844af139u, 0xd4823d75u, 0xf6f97fd9u); + HW_SCE_p_func314(952+64); + HW_SCE_p_func100(0xe5f9bbbeu, 0x96509cc3u, 0x8318b854u, 0x9bd50be0u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xaa1376c8u, 0x78c0ff2au, 0xbe1af5b8u, 0xda3a88cfu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(408); + SCE->REG_ECH = 0x0000d77au; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9bedacc0u, 0x8f425520u, 0x027f1c14u, 0xc15dde50u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(544); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000d77bu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(680); + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000092u; + HW_SCE_p_func101(0xb3093a43u, 0xac9c9129u, 0x503622eeu, 0x14cdab75u); + HW_SCE_p_func304(); + HW_SCE_p_func100(0xe32e76f5u, 0x11a6942du, 0xdf08bb94u, 0x69570b0du); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(816); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_ECH = 0x3800db72u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x62b11180u, 0x0ee880b8u, 0xc1c11bd2u, 0x15f65922u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000190u); + HW_SCE_p_func101(0x0d868a6au, 0x65052db0u, 0xe774b17au, 0xab134626u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x4507bc11u, 0xdf51099eu, 0x7400ad3bu, 0xadedb23du); + } + HW_SCE_p_func100(0x1db9f65du, 0x7a78d897u, 0xb589b7bau, 0x0d86c3a2u); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d366u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d766u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x90e33230u, 0xd7da6c0cu, 0xabd9d876u, 0x2d38ff3bu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(816); + HW_SCE_p_func100(0x9fd81c3du, 0x58ca1673u, 0xa58d4cbbu, 0x1a9d9068u); + HW_SCE_p_func314(816+64); + HW_SCE_p_func100(0x0d1d631du, 0x1c5ababau, 0xd136b9c0u, 0x6a317f80u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c90cfu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(952); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_ECH = 0x3800db71u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x0e836fc7u, 0x884c03cfu, 0x77ffdf45u, 0x4db53950u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0xe5becc29u, 0x9802628eu, 0xae42ccabu, 0xd07c1c64u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x29b7a504u, 0xc94a398du, 0x66872d1bu, 0x8601d289u); + } + HW_SCE_p_func100(0x0b00de3du, 0x621ec070u, 0xab514fd4u, 0x37132da0u); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d371u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d771u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c90cfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcc64659cu, 0x8f163d4au, 0x02a5e2a5u, 0x5b33e3c2u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(952); + HW_SCE_p_func100(0x5ca187ebu, 0x6d8317b9u, 0x3a029136u, 0x64db1852u); + HW_SCE_p_func314(952+64); + HW_SCE_p_func100(0xe3b6589cu, 0xab1e9255u, 0x276afe4cu, 0x0aabeb6fu); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_ECH = 0x00003b9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3000db68u; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d77au; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d37au; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012dc3c7u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(748); + SCE->REG_ECH = 0x0000d77bu; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000093u; + HW_SCE_p_func101(0x297b5087u, 0xb154b2a1u, 0x00f202ecu, 0x33047f78u); + HW_SCE_p_func308(); + HW_SCE_p_func100(0x86e1c646u, 0x99aeac35u, 0x85f6aae8u, 0x98139038u); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f0b809u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(884); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_ECH = 0x3800db72u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xd506cd07u, 0xc57d0308u, 0x73a273d2u, 0x115959dfu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000190u); + HW_SCE_p_func101(0xe51785d3u, 0x16e71b98u, 0x2b674987u, 0xecd2eb45u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xec1d90edu, 0xafea5063u, 0x4014965au, 0xc4644ea5u); + } + HW_SCE_p_func100(0x8212523fu, 0x83dc322du, 0x9e84585du, 0xf22dd763u); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d370u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d770u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f0b809u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcfb1c7c9u, 0xb6df7dcdu, 0x49ba0092u, 0x5d22b17du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(884); + HW_SCE_p_func100(0x1de4b4b9u, 0xab0b62a0u, 0x23a8f5e1u, 0x3cf5363eu); + HW_SCE_p_func314(884+64); + HW_SCE_p_func100(0xd2cfce67u, 0xfb8ed3a2u, 0x08f387fau, 0xda42e922u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(816); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x3800db66u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x6d365454u, 0x4239bc0bu, 0x853c3d8du, 0x207b1244u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0x3945b5a2u, 0x4da29a16u, 0x105b508eu, 0xac563ff4u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x964d6119u, 0x7782c2d7u, 0x7e79dd33u, 0xce9d6cd1u); + } + HW_SCE_p_func100(0xeb4eea4au, 0xadad34cfu, 0x6f717270u, 0xc9e241eeu); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d366u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d766u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xdf42a902u, 0x8d143a96u, 0x81d9c449u, 0x99d9b6a3u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(816); + HW_SCE_p_func100(0x5f571992u, 0x76ecf695u, 0xf56636dfu, 0x4d8743e8u); + HW_SCE_p_func314(816+64); + HW_SCE_p_func100(0x58beab10u, 0x244d3763u, 0x6eea2fb4u, 0x309d7802u); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c90cfu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(952); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_ECH = 0x3800db71u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x933c9b61u, 0x0b68a76bu, 0xf68bd356u, 0x641ef71fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0xf6014c4cu, 0x8056f7b7u, 0x72b2ba3au, 0xa19a3635u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x1764ff9fu, 0x1a8492b3u, 0xc49a1d32u, 0x2dc11287u); + } + HW_SCE_p_func100(0xad074cdcu, 0xea7ae448u, 0x7324e020u, 0xd3129bcbu); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d371u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d771u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000014u; + SCE->REG_ECH = 0x00003b9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_ECH = 0x3000db71u; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d77au; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d37au; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000d77bu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(680); + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000094u; + HW_SCE_p_func101(0x51e65f45u, 0x2cdb1de0u, 0xf57eea4au, 0x2c370be4u); + HW_SCE_p_func304(); + HW_SCE_p_func100(0x725794c2u, 0x871ac300u, 0xac83aff0u, 0xf400d18du); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(816); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x3800db66u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xc31cbbd1u, 0x268d2b25u, 0xe7a62786u, 0x27e369bcu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0x4ca8e691u, 0xd83998fau, 0x26c5f9f2u, 0xe71b8a45u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xf54c3628u, 0x49f01760u, 0xcd33d93du, 0xfeedfa57u); + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_ECH = 0x3800db72u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x239e8ef4u, 0x45342004u, 0x4cd0d273u, 0x246ec09du); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000190u); + HW_SCE_p_func101(0x73401201u, 0xa84dc3b4u, 0x54435447u, 0x3f45b6bdu); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x69bf6174u, 0xbd2a73a4u, 0x831c564bu, 0xc86a28cfu); + } + HW_SCE_p_func100(0xcece2e3du, 0x451a005bu, 0x84c56b5eu, 0x0934d294u); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d366u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d766u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x14512db2u, 0x44a5245au, 0x46a63ddau, 0xe66d64d7u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(816); + HW_SCE_p_func100(0x8e38417cu, 0x84dd6705u, 0x34259ec4u, 0xad64a68du); + HW_SCE_p_func314(816+64); + HW_SCE_p_func100(0x2f4e25f7u, 0x508e0b9au, 0x9d404c48u, 0x813169cdu); + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_ECH = 0x00003b9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3000db68u; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d77au; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d37au; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012dc3c7u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(748); + SCE->REG_ECH = 0x0000d77bu; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000095u; + HW_SCE_p_func101(0x882fccf7u, 0xa9db782bu, 0x0cb6d375u, 0x49f70d6du); + HW_SCE_p_func308(); + HW_SCE_p_func100(0x023d5574u, 0xd6d309ffu, 0x25ba5b5eu, 0x580371f1u); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000c8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010b238bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(816); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x3800db66u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x7455c717u, 0x6006723au, 0x42eb0f2du, 0x9b272b9du); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0xa1bc46c7u, 0x07125db3u, 0xa32ee9a0u, 0x47f7555cu); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0xc879e5dcu, 0x17888d82u, 0x5f5c4d9bu, 0xc82298aeu); + } + HW_SCE_p_func100(0x0d5b76d6u, 0xb70cd2cfu, 0x3b074b32u, 0xb6516a0fu); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d366u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d766u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f0b809u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(884); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x3800db70u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x5dfa8bb0u, 0xf9addc81u, 0x8a267091u, 0x100b0e96u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000110u); + HW_SCE_p_func101(0x97d49d5cu, 0xb0f0efeau, 0xeee5ba07u, 0x48ea7fe7u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x77cef942u, 0x2ac856acu, 0x6ee1e859u, 0x95e98234u); + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000018u; + SCE->REG_ECH = 0x3800db72u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x0b686405u, 0x878db4bbu, 0xd8c40795u, 0xfe6a6eb6u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func315(0x00000190u); + HW_SCE_p_func101(0xdb27deefu, 0xd2f2fcedu, 0x462b8a78u, 0x7eabc0c4u); + } + else + { + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x99186c2fu, 0xd463674bu, 0xa9b83865u, 0xedc5f09du); + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x3800db66u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x7c788bcau, 0xa3bb3c75u, 0xb469bc2fu, 0x85b3a642u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x04000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000030u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x00003b9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000004cu; + SCE->REG_ECH = 0x00003f9eu; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000030u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00800001u; + SCE->REG_104H = 0x00000257u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_2CH = 0x00000190u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0xFFFFFFFFu); + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x775d82a9u, 0x6e093bcdu, 0xaee304d3u, 0xd1452d0bu); + } + else + { + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func101(0x68e145aeu, 0xf73293aau, 0x898193e4u, 0x8bab27edu); + } + HW_SCE_p_func100(0x5ec7873du, 0x6d0dd9e3u, 0xeef645ecu, 0xc612a596u); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x02816fdeu; + SCE->REG_ECH = 0x30008bc0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00020020u; + SCE->REG_ECH = 0x0000d37eu; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000d77eu; + SCE->REG_ECH = 0x00000080u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb9165f89u, 0xf87676cau, 0x3bc818f5u, 0x726d1a94u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012dc3c7u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(748); + SCE->REG_ECH = 0x3800db7eu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x084f91efu, 0xd3cb359bu, 0x5514cb43u, 0xeb853283u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + oLoop1 = 1; + while(oLoop1 == 1) + { + HW_SCE_p_func100(0x053fe767u, 0x7e88b106u, 0x364f0755u, 0x687c7376u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x06001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x000000a0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_104H = 0x00000157u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000110u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xfe9804e6u, 0x12645ab9u, 0xdae649f1u, 0x0ec657c8u); + } + else + { + HW_SCE_p_func101(0x9e0b8c35u, 0xdd07524au, 0x03cc62fau, 0x826984e6u); + oLoop1 = 0; + } + } + HW_SCE_p_func101(0x1f5625b7u, 0xda5863eeu, 0x88bfd0b1u, 0x9cba4d84u); + } + else + { + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x06001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x000000a0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xa5d602dcu, 0x83ac45edu, 0x9d872697u, 0x8b1a9561u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0xcad68de3u, 0xaf4e1f11u, 0x82c8a327u, 0x940029c3u); + oLoop1 = 0; + } + else + { + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x06001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x80c0001eu; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8088001eu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x000000a0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00800001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_104H = 0x00000157u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000110u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x8081001eu; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000050u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x8188001eu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000090u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000a0u; + SCE->REG_E0H = 0x81c0001eu; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xe24acd49u, 0x60443dd8u, 0x248474a6u, 0x58cab95eu); + } + } + HW_SCE_p_func101(0xdd2a0b5cu, 0x766c6608u, 0xe17bc4d7u, 0xa3f93441u); + } + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000028u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func309.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func310.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func310.c new file mode 100644 index 000000000..3734454db --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func310.c @@ -0,0 +1,197 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func310(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_ECH = 0x3800db6bu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x37586798u, 0xceb0a5e6u, 0xd919e7e3u, 0xc7566c27u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func100(0xba3e67acu, 0x77923dc6u, 0xf20f94eeu, 0x8caa5b29u); + SCE->REG_E0H = 0x810103c0u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for (oLoop2 = 0; oLoop2 < S_RAM[0]; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002fe0u; + HW_SCE_p_func101(0xa399fe47u, 0x7f8396a0u, 0xa5800b1bu, 0xa90e187au); + } + HW_SCE_p_func101(0xfd179c04u, 0x17853e37u, 0xb53c5511u, 0xfa864017u); + } + else + { + HW_SCE_p_func100(0x249f2fc5u, 0x3cc969d5u, 0x8b2fc801u, 0x391bc107u); + SCE->REG_E0H = 0x810103c0u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for (oLoop2 = 0; oLoop2 < S_RAM[0]; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00800001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x82001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002fe0u; + HW_SCE_p_func101(0xf1d57656u, 0xc866fae8u, 0x1d69570cu, 0xc958fbf8u); + } + HW_SCE_p_func101(0xb4b60db5u, 0x46826080u, 0xe4c9f49du, 0x86683fceu); + } + SCE->REG_ECH = 0x38000bdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func310.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func311.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func311.c new file mode 100644 index 000000000..250fb6aea --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func311.c @@ -0,0 +1,660 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func311(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xfd4b176bu, 0xd5a81478u, 0x6420f33du, 0xf5728f32u); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000002cu; + SCE->REG_ECH = 0x00003c1eu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x04000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa9ea96d7u, 0x43b13488u, 0x024e5431u, 0x4c64617bu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012dc3c7u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(748); + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + oLoop1 = 1; + while(oLoop1 == 1) + { + HW_SCE_p_func100(0xd6e08aa7u, 0xec23e33du, 0x69c55027u, 0xb230fa25u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x6a97a04bu, 0x686aafbau, 0x37cc5886u, 0xf353c266u); + oLoop1 = 0; + } + else + { + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func101(0x7f0eb3ebu, 0x8636ae7eu, 0xa78fc1fau, 0x8247ea08u); + } + } + HW_SCE_p_func100(0xb4873111u, 0xecb38ea8u, 0x15a4ff05u, 0x06e2ba67u); + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x016bcaa1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x089ef4feu, 0x15bbe85fu, 0x80a2f025u, 0x29ff60e2u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(136); + HW_SCE_p_func100(0x99313b51u, 0x88d8f2e1u, 0xdb56f33bu, 0xb6d38a7fu); + HW_SCE_p_func314(136+64); + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0xcfda5444u, 0x2be84e0fu, 0xe0e2bd7bu, 0xa7c355d9u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019c85beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa765abb1u, 0x26cce39du, 0x4b9fdea1u, 0xf6435bdbu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(204); + HW_SCE_p_func100(0x8d279c22u, 0xfc68a162u, 0x2fbd3f61u, 0x61c9e67fu); + HW_SCE_p_func314(204+64); + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000a52u; + for (iLoop = 0; iLoop < 256; iLoop = iLoop + 1) + { + HW_SCE_p_func100(0x9bdc8e76u, 0xa1c2a576u, 0xf7908ae4u, 0xa3ee9d7fu); + SCE->REG_24H = 0x040049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0400d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(680); + SCE->REG_ECH = 0x00002e40u; + HW_SCE_p_func101(0x7d34eb40u, 0x5747f818u, 0x1be65614u, 0xd6ed34b3u); + } + HW_SCE_p_func100(0x142ecffcu, 0x326510a6u, 0x8cbe023bu, 0x026a5df9u); + SCE->REG_ECH = 0x38008a40u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + SCE->REG_24H = 0x040049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x040019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0400d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x020019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb896da45u, 0x16e2080fu, 0x293b4f68u, 0x9dc078e9u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x718e4ecbu, 0x6d103300u, 0xcb1eb1bbu, 0x52ffc030u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(408); + HW_SCE_p_func100(0xf0047e74u, 0xc38cc552u, 0x8a3454a0u, 0x0dc9fc09u); + HW_SCE_p_func314(408+64); + HW_SCE_p_func100(0xb89c82d1u, 0xca37b6d4u, 0xfebe0198u, 0x2992116au); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8c0b1577u, 0xd80af8b9u, 0x8a28fa6au, 0xb8691f5au); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(544); + HW_SCE_p_func100(0x6a8f8a7bu, 0xea162157u, 0xf8e0b9d6u, 0xb3d9155bu); + HW_SCE_p_func314(544+64); + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0x0cd9debeu, 0x90441b42u, 0x6c48e06du, 0xd5ce096eu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x95056b4fu, 0xa2022506u, 0xd5895c90u, 0xc9016455u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(476); + HW_SCE_p_func100(0x8de7ac54u, 0x2086ac6eu, 0xda5ccc3du, 0x720b13b1u); + HW_SCE_p_func314(476+64); + HW_SCE_p_func100(0xd9c89923u, 0xda6185eeu, 0x520354eau, 0x62d3ec2bu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8c5f3115u, 0x6e3076f9u, 0xc072f381u, 0x3dceb2c9u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(612); + HW_SCE_p_func100(0x0221233fu, 0x3eb2c7f3u, 0x2f53721bu, 0x87b0f538u); + HW_SCE_p_func314(612+64); + SCE->REG_ECH = 0x00000a52u; + for (iLoop = 0; iLoop < 4; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000085u; + HW_SCE_p_func101(0x6d1dde65u, 0x27e804aau, 0x0353a48au, 0xc63e1af4u); + HW_SCE_p_func309(); + HW_SCE_p_func100(0x52609d4fu, 0x2847540du, 0xe7fd5f89u, 0xf730b53du); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe6b75748u, 0xf45d1592u, 0xee7bfe91u, 0x326aca9du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(476); + HW_SCE_p_func100(0xe9fe5121u, 0xce726d25u, 0xa83a96a3u, 0xb8b584aau); + HW_SCE_p_func314(476+64); + HW_SCE_p_func100(0xb3bc9911u, 0xf6c18db0u, 0xfc732293u, 0x3cd6f686u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6dd6c2adu, 0x7c99c2a6u, 0x3a7d202du, 0x33864215u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(612); + HW_SCE_p_func100(0x00e68939u, 0x22376fe5u, 0x1dc88c20u, 0x4f16dbfeu); + HW_SCE_p_func314(612+64); + HW_SCE_p_func100(0x225f07a7u, 0xe5c06b6bu, 0xd5ad4e40u, 0x77a94de9u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x161d0285u, 0x582fea60u, 0x8ddb0abfu, 0xf3e3813fu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(408); + HW_SCE_p_func100(0xba986d4au, 0x8c0c05c3u, 0x9106460cu, 0x4fcb22b1u); + HW_SCE_p_func314(408+64); + HW_SCE_p_func100(0xba3a26c5u, 0xab973a6du, 0x113d70d0u, 0x17ceceabu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xed966499u, 0xffbb31adu, 0x0babdc9eu, 0x028e43eau); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(544); + HW_SCE_p_func100(0x70e80bbeu, 0x80e52ebcu, 0xc889fbaeu, 0x908cde5du); + HW_SCE_p_func314(544+64); + SCE->REG_ECH = 0x00002e40u; + HW_SCE_p_func101(0xe79021aau, 0x8e1a3178u, 0x17485e2au, 0x7739cc4au); + } + SCE->REG_ECH = 0x38008a40u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + HW_SCE_p_func100(0xa7713f01u, 0xff3d0159u, 0x902c8403u, 0xa6e08877u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01a67f45u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xd79142abu, 0xdda79cd3u, 0xa39e379bu, 0x30387819u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(476); + HW_SCE_p_func100(0x840d4a08u, 0x2d844345u, 0xcafbbf9fu, 0x5f275859u); + HW_SCE_p_func314(476+64); + HW_SCE_p_func100(0xebcced92u, 0x52a220a6u, 0x4b7a4cfbu, 0xe36bc013u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011f5dcdu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf2e9a370u, 0x660aefceu, 0x405fff51u, 0xb7af9bb1u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(408); + HW_SCE_p_func100(0x17c8247cu, 0xa0ddb080u, 0x9e68312cu, 0xef695d8eu); + HW_SCE_p_func314(408+64); + HW_SCE_p_func100(0x8de20e43u, 0x8198b797u, 0x50909c69u, 0xe206fb6eu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0132d44bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8bd2bbe9u, 0x0be9aca0u, 0x6bf6b397u, 0x2b511dbfu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(68); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01432c7au); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8921c32eu, 0x0b09dafau, 0x0a0bda14u, 0x9944d54cu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(0); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019fce91u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x2541ef28u, 0x061e859cu, 0xe88ecdd7u, 0x0f6035d5u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(612); + HW_SCE_p_func100(0x4d51142bu, 0x42fff715u, 0x472627e9u, 0x603bdc70u); + HW_SCE_p_func314(612+64); + HW_SCE_p_func100(0x0efd708cu, 0xcc94585bu, 0xc223494au, 0xc6eb2968u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01e59c3du); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa3fc9c35u, 0x200d7e68u, 0x469464dau, 0x5b9149ecu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(544); + HW_SCE_p_func100(0xcbb87f2cu, 0xcdf462d9u, 0x6ff399b9u, 0x9b315f2du); + HW_SCE_p_func314(544+64); + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000086u; + HW_SCE_p_func101(0x3cbf7cedu, 0x9f0ca8c1u, 0x9fc1b0a7u, 0x1fb8e5cbu); + HW_SCE_p_func309(); + HW_SCE_p_func100(0xd887c518u, 0x5a403aa4u, 0xc6176be4u, 0x5ce2816eu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0132d44bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x33ef899cu, 0x80ff43e7u, 0x24d6eaa4u, 0x1fcd4bb9u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(68); + HW_SCE_p_func100(0x4eb32dd0u, 0x894b3a68u, 0x790aeb44u, 0x83d869b6u); + HW_SCE_p_func314(68+64); + HW_SCE_p_func100(0x6441f351u, 0x8a23ac4eu, 0xaf9adeadu, 0xeae53c32u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01432c7au); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbdf03440u, 0x37792dbcu, 0x58df6b26u, 0x61fffe27u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(0); + HW_SCE_p_func100(0x10098830u, 0x68ef79e5u, 0x8d4399a9u, 0x320f688fu); + HW_SCE_p_func314(0+64); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000002cu; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func311.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func312.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func312.c new file mode 100644 index 000000000..40c477e21 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func312.c @@ -0,0 +1,109 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func312(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00003f62u; + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x42f087bfu; + for (iLoop2 = 0; iLoop2 < 64 ; iLoop2 = iLoop2 + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 0]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 1]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 2]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x400007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 0]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 1]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 2]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func312.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func313.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func313.c new file mode 100644 index 000000000..c3f1b966c --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func313.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func313(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x42e087bfu; + SCE->REG_04H = 0x00000202u; + for (iLoop2 = 0; iLoop2 < 64 ; iLoop2 = iLoop2 + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[ARG1+iLoop2 + 0] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 1] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 2] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func313.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func314.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func314.c new file mode 100644 index 000000000..c6653cf11 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func314.c @@ -0,0 +1,96 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func314(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x400009cdu; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000213u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[ARG1 + 0] = SCE->REG_100H; + S_HEAP[ARG1 + 1] = SCE->REG_100H; + S_HEAP[ARG1 + 2] = SCE->REG_100H; + S_HEAP[ARG1 + 3] = SCE->REG_100H; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func314.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func315.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func315.c new file mode 100644 index 000000000..a32908109 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func315.c @@ -0,0 +1,96 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func315(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_28H = 0x00800001u; + SCE->REG_104H = 0x00000157u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_E0H = 0x8181001eu; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = ARG1; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000050u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func315.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func316.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func316.c new file mode 100644 index 000000000..8a23a6b8b --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func316.c @@ -0,0 +1,703 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func316(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x00003fbeu; + SCE->REG_28H = 0x009f0001u; + SCE->REG_ECH = 0x0000d779u; + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x80010300u; + SCE->REG_00H = 0x00008307u; + SCE->REG_2CH = 0x000000acu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000031fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000e0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_ECH = 0x3800db1fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x8dd5b077u, 0xd50c776fu, 0x9d162b11u, 0xab952327u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00a70001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x00000682u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000d379u; + HW_SCE_p_func101(0x1eb5c006u, 0x14f8b611u, 0x3c79c58bu, 0x2b91f0c0u); + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x0000001cu; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f0u; + HW_SCE_p_func101(0x2d145c92u, 0x70901d38u, 0x611110efu, 0x988983bfu); + HW_SCE_p_func317(); + SCE->REG_ECH = 0x00003759u; + SCE->REG_24H = 0x000050d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x0000001du; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f1u; + HW_SCE_p_func101(0x82531a33u, 0xa8d87c8fu, 0x6ac862c0u, 0x734e49c8u); + HW_SCE_p_func317(); + SCE->REG_24H = 0x000050d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x0000b0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000c00u; + SCE->REG_24H = 0x8000ecd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00007cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000bcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + for(oLoop2 = 0; oLoop2 < 32; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x00000189u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000030u; + SCE->REG_24H = 0x80007cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000002c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x00001151u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x511e8e8eu, 0xd9e12ddbu, 0xf22bed32u, 0x73de2ff2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x1e68f2e3u, 0xb5e7bbfcu, 0x18236343u, 0xecce8c56u); + } + else + { + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000006c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x040091c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x91b9177bu, 0xc40e686du, 0xce3d3442u, 0x8db507f8u); + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000006c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xffb51ee1u, 0x2551d008u, 0x419923a9u, 0xa6a91ad0u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x8bafbae7u, 0xcc319b8eu, 0x09db8e30u, 0x6719a39au); + } + else + { + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000006c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x040091c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x4ee65c47u, 0x1e802413u, 0xe499d1a8u, 0xdb8fab6au); + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800db20u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x1d570422u, 0xba2e8875u, 0x4417d7b7u, 0x75e2ba4au); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000002c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000002c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x00001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x5930a123u, 0xe735b3d5u, 0xc4d172b9u, 0x05e9d5b3u); + } + else + { + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x0000d4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x8000dcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xaa453373u, 0xe70c1f7bu, 0x2794ae86u, 0x1e04ffb8u); + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x00004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + HW_SCE_p_func100(0x1424e022u, 0x37343771u, 0xa0416005u, 0x010b4e36u); + SCE->REG_E0H = 0x81010340u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + SCE->REG_ECH = 0x3800db7cu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xd4918aa4u, 0x20669ad3u, 0x6d1f6b3fu, 0x6459ad47u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + for (oLoop2 = 0; oLoop2 < S_RAM[0]; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00002fe0u; + HW_SCE_p_func101(0xb7698563u, 0x1d329d6bu, 0x968a2dceu, 0xd32a5eadu); + } + HW_SCE_p_func101(0x8cfc7f48u, 0x1596a76du, 0xe304f64au, 0xe359ab67u); + } + else + { + for (oLoop2 = 0; oLoop2 < S_RAM[0]; oLoop2 = oLoop2 + 1) + { + SCE->REG_24H = 0x00001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00002fe0u; + HW_SCE_p_func101(0x4e152c24u, 0xe90797beu, 0x172490f0u, 0x260bc8bcu); + } + HW_SCE_p_func101(0xb6fea3f5u, 0x85e41681u, 0xb3f14e96u, 0x5022aeefu); + } + SCE->REG_ECH = 0x38000b5fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800db79u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x40f924e5u, 0xc4f5438du, 0xb74cc091u, 0xf662ab19u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a00001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x0270d572u, 0x600e206bu, 0x72b67275u, 0xfd7bff07u); + } + else + { + HW_SCE_p_func101(0x145e3f7du, 0x4bd25dc4u, 0x94ed56edu, 0x32ddd531u); + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func316.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func317.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func317.c new file mode 100644 index 000000000..80eba1cf0 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func317.c @@ -0,0 +1,251 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func317(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x00003fbeu; + SCE->REG_28H = 0x00a30001u; + SCE->REG_ECH = 0x00000b39u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800103c0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3800dbdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x54c736d5u, 0x1687cea2u, 0xb9a27aefu, 0x0efb8de2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800103c0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00a30001u; + SCE->REG_ECH = 0x3800dbdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xb050152eu, 0x4b531e69u, 0x106eb6e5u, 0xa55c8f7fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00002f20u; + HW_SCE_p_func101(0x53c53629u, 0xc624f94du, 0xcc1a9552u, 0x5b2c6d97u); + } + else + { + HW_SCE_p_func101(0x1279d640u, 0x26ecf237u, 0x637e567bu, 0xdf3efeccu); + oLoop1 = 0; + } + } + SCE->REG_ECH = 0x0000537fu; + HW_SCE_p_func101(0x7cb89078u, 0x36f852b6u, 0xb36ce496u, 0xdd7983beu); + } + else + { + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800103c0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00a30001u; + SCE->REG_ECH = 0x3800dbdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x3b020f6eu, 0xeb260ad7u, 0xa93e0aa8u, 0x95ef9e82u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x8624917eu, 0x91b076eeu, 0x5dbd5e14u, 0x70155193u); + oLoop1 = 0; + } + else + { + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00002f20u; + HW_SCE_p_func101(0x09722fbau, 0xa95ea208u, 0x4ad6f5a0u, 0xeaae6343u); + } + } + SCE->REG_ECH = 0x0000577fu; + HW_SCE_p_func101(0x654a6dd5u, 0x21175d16u, 0x4cab116eu, 0xbfd1f105u); + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func317.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func318.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func318.c new file mode 100644 index 000000000..df5accfe2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func318.c @@ -0,0 +1,3214 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func318(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000008u; + SCE->REG_ECH = 0x00003fbeu; + HW_SCE_p_func100(0x8c693a67u, 0xb13f66fbu, 0xa25ea81bu, 0x560d7c20u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x2074e03cu, 0x98ab4303u, 0xc1cce9b5u, 0xd43ba3ebu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(480); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbf51ada8u, 0x1fc04491u, 0xc988fb18u, 0xfaa5c11du); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(616); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0dfaa529u, 0x282e920du, 0xf64592dfu, 0x9f7c68adu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(444); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9c1a0702u, 0xedb2e972u, 0x22852fd3u, 0x1855837cu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(580); + HW_SCE_p_func323(); + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x38d4cc3du, 0xce4e1aa8u, 0x561920b3u, 0x7adf0eb5u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x452bbfd4u, 0x121cc6aau, 0xbd3daaf0u, 0xedaf7d58u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x45fea76au, 0x2c6eb1dcu, 0xe2b278ceu, 0x6e651334u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa434e2acu, 0x846c8258u, 0x9bafbdf5u, 0xc50a1cf7u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0x451158f5u, 0x81c038e1u, 0x097a63bbu, 0xe2348aedu); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0x65dae8bdu, 0x14d558ceu, 0x16b8aafcu, 0x6bd59a86u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x00005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000098d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x050df3ffu, 0x4aecfa26u, 0x639cc9a9u, 0xc359e623u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(408); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf1362f19u, 0x84c03fcfu, 0xb31f41a3u, 0x709874b2u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(544); + HW_SCE_p_func323(); + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0266126au, 0x5478a930u, 0x489ca55cu, 0x04eecab0u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0xedb8ae49u, 0xbfdb28e5u, 0x05f80921u, 0xc430a4acu); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x8b69697du, 0x2c955d96u, 0x8ceae065u, 0x540a0614u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xea10d2f9u, 0xa280b4beu, 0x3834e872u, 0x0458f807u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x934fc829u, 0x8913448fu, 0x5fda9cfeu, 0x8343d6e1u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x83a90bf3u, 0xb6654be1u, 0xe1dbfccau, 0xf7375c69u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x9536bf06u, 0x9ecd622au, 0xd94cdfbcu, 0xf5391467u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x00005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000098d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x74787d02u, 0x0c72fbacu, 0xd30f6441u, 0x26867c12u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(444); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc61ecfffu, 0xa9953287u, 0xb4500ebfu, 0xd34162e6u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(580); + HW_SCE_p_func323(); + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x51aedde7u, 0x9413ad77u, 0xec2342bbu, 0xa4a9cbecu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func321(952); + HW_SCE_p_func100(0xf03ed4f3u, 0x5745c781u, 0x0b42d870u, 0x0c7db3cbu); + HW_SCE_p_func314(952+36); + HW_SCE_p_func100(0x5674c372u, 0x77e8dea9u, 0x5a55452au, 0xab9bb69du); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x70b5c05cu, 0x8660d602u, 0xd1c971cbu, 0x76e117c1u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x2c5ddd9cu, 0x9b4b818au, 0x1977f83du, 0x1f6e88f4u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0x10413e6au, 0x338ea4acu, 0x559a535au, 0x0e97cb42u); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0xc8d87a13u, 0x28ba25bdu, 0x4ece54ccu, 0x3d697361u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x00005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000098d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x52ffcbfbu, 0x25c68561u, 0x0eeed611u, 0x9cf5088du); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x2114e727u, 0x4d307b50u, 0x94f1eb46u, 0xa38d9ce8u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0x09bae1beu, 0xd3e14145u, 0x7d2ba63fu, 0x23c194deu); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0x05752256u, 0x4096e871u, 0xafb2d8f2u, 0x9810e5c7u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x2ec33011u, 0xbcb2710eu, 0xc81ed862u, 0x457fdff6u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbf2131abu, 0xab0a83eau, 0x7065e26cu, 0xcd6c7bcdu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0x1c4648e5u, 0x3a746a56u, 0x40a6b1c3u, 0x8b198efeu); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x413a569au, 0x477e2227u, 0xcb5e412du, 0x020d1af2u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x5571223au, 0xb8e696adu, 0xa27da0c5u, 0xa0de4e32u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4b3715c5u, 0x62ff3f7bu, 0xc93b1343u, 0x9e7c130au); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x21fecf08u, 0xc8e1e918u, 0x8addf0e1u, 0x930bd727u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0xae7ec822u, 0x07a1ce62u, 0x55ae5ea0u, 0x5cf840acu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xde7eba77u, 0x66ec29ebu, 0x09990687u, 0x799c56eeu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(952); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0b4fe097u, 0xc820684du, 0x02412687u, 0x6e212565u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(952); + HW_SCE_p_func100(0x395026a9u, 0x6c42a3fbu, 0x07b2fd77u, 0x2c39ed94u); + HW_SCE_p_func314(952+36); + HW_SCE_p_func100(0x2cbbbb51u, 0xb5c1b6d5u, 0x83276d22u, 0x0c8a2248u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xaaaa7ac4u, 0xfb5bed0eu, 0x8be2cb55u, 0xe7fd0473u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(480); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x31ff55c9u, 0x8140b0f5u, 0xceb9a311u, 0xf8a6f300u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(616); + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x0000c8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d3c420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xacaeb6e8u, 0xd069eaffu, 0xfd178003u, 0xc18b9d75u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(896); + HW_SCE_p_func100(0xbf3b464fu, 0x49a9553fu, 0xc387c770u, 0xc7f9b17du); + HW_SCE_p_func314(896+36); + HW_SCE_p_func100(0x1f7f68abu, 0x91a1a4efu, 0x664851deu, 0x26452beeu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x726ceea7u, 0xbde2b6e5u, 0xe19911d3u, 0xecccacfeu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa17ed11eu, 0x2ef17845u, 0x267746bfu, 0xb3fd52dfu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0xfc753a2bu, 0xf34825afu, 0x03876e89u, 0x51b76719u); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0xf3047cc0u, 0x32c7c135u, 0x77bbf376u, 0xe4c5bdcau); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x61da3608u, 0x2332ad99u, 0x3f516d34u, 0xcd2305dfu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc8e8a814u, 0x05a35651u, 0xaca24a7fu, 0x0ea729fau); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x1dde4b25u, 0x530e5bb0u, 0xc5becf97u, 0x35b81685u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x27d54b6du, 0xeefed33fu, 0xc73bc03bu, 0xd427373du); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa900c2c0u, 0x602b64dcu, 0x5d44f94bu, 0x4fe44840u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xaf0d3c1cu, 0x50563233u, 0xe2b291b6u, 0xe0e17dd0u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0xbea9c41cu, 0x79c109f4u, 0xc1a7ff55u, 0xcadfd250u); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x647ca49eu, 0xb06921a5u, 0xe84a252du, 0xc598c5a4u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x91c27ea4u, 0x049f5f5au, 0xc129ce0cu, 0x64a8e27bu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xd55a5390u, 0x35f33131u, 0xd6a62829u, 0x7d2fa738u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(408); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(544); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f0u; + HW_SCE_p_func101(0x5b38f724u, 0xe9aa7946u, 0xa88a1bbfu, 0x4d8a1c23u); + HW_SCE_p_func316(); + HW_SCE_p_func100(0xe81e581cu, 0x1b609ef3u, 0x346419fdu, 0x8a3fe878u); + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa1941a0eu, 0xcdcde287u, 0x1b756ae4u, 0xe9bdb894u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xea1c0bbdu, 0x9ae71488u, 0xfa0a43b3u, 0xa5729ea2u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x066e4ff9u, 0xf8dbab9fu, 0xafc2b53au, 0xf9846ca7u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x692d67d5u, 0xe8de307bu, 0xcb829d7fu, 0x92fe6f5cu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc1fc96f6u, 0x295eac95u, 0x7352e482u, 0x21ae2cb1u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(952); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1b397203u, 0xf394d796u, 0x8b40b8a1u, 0x7c0e538eu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(952); + HW_SCE_p_func100(0x0f0d9326u, 0x089c4bf1u, 0x39dc51eau, 0x3703a5acu); + HW_SCE_p_func314(952+36); + HW_SCE_p_func100(0xa124c08bu, 0xc2ecaa23u, 0x531ca0f3u, 0x40c3e724u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4b859310u, 0x0b9fd51fu, 0xf76e1dc8u, 0xff37911eu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x5372057au, 0xf005e4a0u, 0x4dbb9b05u, 0xa278ffb8u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0x80f4b23du, 0x05c58c40u, 0x4e36b493u, 0xb12e2146u); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x69e11c7fu, 0x60427693u, 0x38ce5d4cu, 0x8be945a7u); + SCE->REG_28H = 0x008f0001u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000408u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x0000080cu; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c00u; + SCE->REG_24H = 0x8000f4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x000050d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb76505f2u, 0xebf3eb95u, 0x4fa359a1u, 0x04a325bbu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(752); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d3c420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x287e45eeu, 0xeb5626adu, 0x449bc603u, 0xf05aa3fau); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(896); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d3c420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xeb481312u, 0x27c8327du, 0x7f4519acu, 0xde7645abu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(896); + HW_SCE_p_func100(0x7feadcc7u, 0x4d7648c9u, 0xa9f88d13u, 0xbb0d7a6fu); + HW_SCE_p_func314(896+36); + HW_SCE_p_func100(0xc2684d93u, 0x6d5d6e62u, 0x909d3383u, 0x31c612e1u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe5b4cae5u, 0xbcfc9e35u, 0x66ccaeedu, 0x09b575afu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe7e196efu, 0x8bda93e4u, 0x06cfe5f7u, 0x42a9bdfeu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0xb8a0f1b1u, 0x10d2babbu, 0xe39d0053u, 0xca6a2be4u); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0xc8bff03bu, 0x822949adu, 0x1d0275c3u, 0x66aa2304u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xd088dc87u, 0x1e079d65u, 0x58f71342u, 0xfe73372eu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6a449ba3u, 0x644592a8u, 0xe4c0d031u, 0x0111d512u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x136d4dceu, 0x8829fe81u, 0xe1fdab6cu, 0x90d661c3u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0xdd6d1badu, 0x3f4fd94fu, 0x17bb48e3u, 0x7955ea13u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x47c671eeu, 0xac239171u, 0x21208ac1u, 0x6f45b650u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x89c44f64u, 0xcbc5e25au, 0x5f99f504u, 0x071f488eu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0x79a12141u, 0x224ee8dcu, 0x5ab33560u, 0xc20b192au); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x81c4a87bu, 0xe2676d1du, 0xbac0211au, 0x5ff29039u); + SCE->REG_28H = 0x008f0001u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000810u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c20u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000030u; + SCE->REG_24H = 0x80007cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe1c00d44u, 0xa3b1d245u, 0x3379eef5u, 0xa7a32ecdu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(716); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x7e4caf6cu, 0xd26d5b9cu, 0x2009e623u, 0xd5135784u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcec6776eu, 0x068afdfbu, 0x5b95a84bu, 0x37dea6cdu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0x5bb04bc7u, 0x40307f33u, 0x4438611cu, 0xce77ef4cu); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0xc23e5bffu, 0x3ff2f682u, 0x86ffb501u, 0x4b33968bu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe6aa096du, 0xd2c44e40u, 0x4bd7380eu, 0x1ee64b02u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x66651932u, 0xdd1276c0u, 0xcb505742u, 0xa96b774au); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0xc92bb4b8u, 0x3ec1b9beu, 0x6e7c1b1fu, 0x55983590u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x96245bd7u, 0x56105797u, 0x13f7872cu, 0xe823d68du); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf5e906f9u, 0x44bb39adu, 0xd0519e29u, 0x7475f442u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(952); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x06aff7d1u, 0x18aea6c8u, 0x86f229c2u, 0xf0e58cddu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(952); + HW_SCE_p_func100(0x68d7ffdbu, 0x48eebde8u, 0x65c5ae8bu, 0xfcd43c74u); + HW_SCE_p_func314(952+36); + HW_SCE_p_func100(0x58880bd1u, 0xa03cce13u, 0x5cb152e7u, 0x54ed01dbu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbeb6df12u, 0xb51f6599u, 0x04dd5c6du, 0xf91a1791u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x25cafafeu, 0x8c3c0489u, 0x66ca83ffu, 0xd6d66e08u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0x1f46ab53u, 0x124cc60cu, 0x8ad45ce5u, 0x7fb59dd1u); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x9b79a0f6u, 0xcb67c0b6u, 0xa3a3e1b3u, 0xd73496bbu); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6e0e8a8au, 0x6b6b1bf9u, 0xb4b8663bu, 0x628bad41u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ff6162u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func322(952); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f1u; + HW_SCE_p_func101(0x95bda937u, 0x8aa1ebf4u, 0x011ebbfbu, 0xc72e05a2u); + HW_SCE_p_func316(); + HW_SCE_p_func100(0xd5706a1cu, 0x9efead44u, 0x8624f1b4u, 0xe4ed91eeu); + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf27d42d7u, 0x9aebe897u, 0xa4bf4ed6u, 0xea904263u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x7b35e1c2u, 0x376987cdu, 0xffea7a71u, 0xfa1ff3f6u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0xcc82736au, 0x582bd5fau, 0x3a5ab3c7u, 0x73c1f935u); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0xc3892749u, 0x72d1a0c4u, 0x4bbe56d8u, 0x16968510u); + SCE->REG_28H = 0x008f0001u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000408u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x0000080cu; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c00u; + SCE->REG_24H = 0x8000f4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_24H = 0x000050d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1e9fc4b4u, 0xa5142e28u, 0x2f8d26a5u, 0xf5e585f3u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(752); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x48326af2u, 0x44f85d94u, 0x71fcc7abu, 0xb1d54290u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1c1d2aacu, 0xee5bfa48u, 0x15543797u, 0xd62be25cu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0xbff66f32u, 0xdeaa2ffau, 0xaeea0bf2u, 0x57221606u); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0x3f4de62au, 0xd4a7763cu, 0x72a2c25du, 0xfee76446u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x408a6332u, 0x70c85823u, 0xba550647u, 0x6c7a0118u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xce068befu, 0x594ede3cu, 0xdd21f885u, 0x161bb234u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x06577a13u, 0x046c382au, 0x87202106u, 0x4aadd486u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x693044b9u, 0xf444e09du, 0x9cd38744u, 0xe79400dfu); + SCE->REG_28H = 0x008f0001u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000810u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c20u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000030u; + SCE->REG_24H = 0x80007cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x02c0a883u, 0x19bc9bf8u, 0x8a4d98f1u, 0xe96ed903u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(716); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xfa3c622cu, 0xbe404837u, 0xeaf69b97u, 0x06fe547bu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x302b59aau, 0x3c798675u, 0xb2620a09u, 0xabfc9999u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x2caa1a54u, 0x74f01619u, 0x52968b85u, 0xde32ac27u); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0xaf3e4354u, 0xc389c01cu, 0x8632c676u, 0x37f71c4fu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xfa47bbbcu, 0x2186ab9bu, 0x6cbb06aeu, 0x24eec58du); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(992); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbba4691bu, 0xe809e7ecu, 0x87cc4caeu, 0x36e4d9ceu); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(992); + HW_SCE_p_func100(0xc300af1du, 0x00630fe3u, 0x587a44c0u, 0x979fcffdu); + HW_SCE_p_func314(992+36); + HW_SCE_p_func100(0x1add51aau, 0xd1792bb8u, 0x5da32e2du, 0xd9009259u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6533e676u, 0x00320303u, 0x5c57fa97u, 0xcd8f78d4u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x014842beu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func322(992); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f2u; + HW_SCE_p_func101(0x20156d0du, 0x4a6debf6u, 0xcd98c326u, 0xc2592cf4u); + HW_SCE_p_func316(); + HW_SCE_p_func100(0xb2a69fbdu, 0xd54a0102u, 0xa4ae8bc1u, 0xb09ac9cbu); + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x21279ea7u, 0x8885e559u, 0xfee5f26fu, 0xb8e8810eu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc61bc8d8u, 0xa17db7e5u, 0x4cf9ace0u, 0x8f4f62c0u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x3511825fu, 0xa1ad11c6u, 0x31304478u, 0x31441f8au); + HW_SCE_p_func314(816+36); + HW_SCE_p_func100(0x7afc6944u, 0x3665a4b9u, 0xe89d431eu, 0x812626ecu); + SCE->REG_28H = 0x008f0001u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000408u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x0000080cu; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c00u; + SCE->REG_24H = 0x8000f4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_24H = 0x000050d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9370c3b9u, 0x1148f325u, 0xe6e883c1u, 0x1554a40eu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(752); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d3c420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x5de51f5au, 0xd2ab8b57u, 0x5b4abc0au, 0xb66fa0ecu); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(896); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d3c420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x73ba7d8eu, 0x3ec086e9u, 0xb7f46379u, 0x9bfbb9e7u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(896); + HW_SCE_p_func100(0x98fcf7c7u, 0xdb8e3b77u, 0x6d7956d9u, 0x27e79ea2u); + HW_SCE_p_func314(896+36); + HW_SCE_p_func100(0xf4cbee06u, 0x7c2204a2u, 0x9d9edc3fu, 0xf500a0deu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4327aa73u, 0xc6d287bbu, 0x43f83e20u, 0x2d47933du); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x898cf445u, 0xcd6ecfe9u, 0xb1e7dd5du, 0x3e376e78u); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0xe04ac6d1u, 0xbbd060d9u, 0x5333fbedu, 0xb1c7a350u); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0x78baf84bu, 0xd1b8ce55u, 0x026ec1a4u, 0x85342454u); + SCE->REG_28H = 0x008f0001u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000810u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c20u; + SCE->REG_24H = 0x80005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000030u; + SCE->REG_24H = 0x80007cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8da0cac8u, 0x7f4719efu, 0xdd188136u, 0xc4b4b9c7u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(716); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbf53761fu, 0x094a3437u, 0xe9a062d0u, 0xd6a2d246u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(856); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcc697f8bu, 0x92ad849au, 0xa4431439u, 0x9d2a656du); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x55bcde64u, 0x94f0b7ceu, 0xc4beae7eu, 0x801ee81du); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func321(816); + HW_SCE_p_func100(0x20b7209eu, 0x64136fe8u, 0x7c127365u, 0xde84756bu); + HW_SCE_p_func314(816+36); + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x800103e0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x800103c0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x3800dbffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x0e0631dfu, 0xffba1140u, 0xdb43c976u, 0xa4eb562cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0xffffffffu; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x1d28f437u, 0x93b026e2u, 0xf16d82e8u, 0x9f89524au); + } + else + { + SCE->REG_ECH = 0x00000800u; + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xf946db7du, 0x8ce722a7u, 0xd1bf9f9fu, 0x652119e5u); + } + HW_SCE_p_func100(0xf758d158u, 0x1da3af1cu, 0x8442f130u, 0x481aeb30u); + SCE->REG_ECH = 0x000034ffu; + SCE->REG_ECH = 0x00003420u; + SCE->REG_ECH = 0x00003440u; + SCE->REG_ECH = 0x00003460u; + SCE->REG_ECH = 0x00003480u; + SCE->REG_ECH = 0x000034a0u; + SCE->REG_ECH = 0x000034c0u; + SCE->REG_E0H = 0x81080000u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_34H = 0x00000804u; + SCE->REG_24H = 0x800090d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c04u; + SCE->REG_24H = 0x800090d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x8000b0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8ce9f145u, 0x0583725du, 0x018addc6u, 0x34a422fau); + SCE->REG_00H = 0x00002393u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func321(856); + HW_SCE_p_func100(0xc6b3739cu, 0xd28a9d79u, 0x1a35fa37u, 0xa6242a49u); + HW_SCE_p_func314(856+36); + HW_SCE_p_func100(0x55afc622u, 0xa9d4b88eu, 0x14cfedb9u, 0x2b7144c8u); + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x800090d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d3c420u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func322(896); + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x3800dbdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x1c438645u, 0x94e7987fu, 0xd13e1a83u, 0xe5515679u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0xffffffffu; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x82001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x94647d15u, 0xf787c49eu, 0xef925afeu, 0x6482c67eu); + } + else + { + SCE->REG_ECH = 0x00000800u; + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x2a5c9e0bu, 0x8043cdf5u, 0x8b7f2110u, 0x0d8657c3u); + } + SCE->REG_ECH = 0x000034feu; + SCE->REG_ECH = 0x00003420u; + SCE->REG_ECH = 0x00003440u; + SCE->REG_ECH = 0x00003460u; + SCE->REG_ECH = 0x00003480u; + SCE->REG_ECH = 0x000034a0u; + SCE->REG_ECH = 0x000034c0u; + SCE->REG_E0H = 0x81080000u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_34H = 0x00000804u; + SCE->REG_24H = 0x800090d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c04u; + SCE->REG_24H = 0x800090d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000004u; + SCE->REG_24H = 0x8000b0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0x9a8f5bd4u, 0x7c50c72bu, 0x2584aed1u, 0xbffc5331u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018fa058u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf8a9bcacu, 0xaa6f357fu, 0x644801e7u, 0x96ba6801u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func322(816); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef0d63u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbb149186u, 0x526dc394u, 0xedf700e9u, 0x16c04c42u); + SCE->REG_00H = 0x00003293u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func322(856); + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1a9e726bu, 0xffb2129bu, 0x15e2b7fbu, 0x10575273u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4f21d1bcu, 0xb4adf116u, 0xa072f0c8u, 0x5bc08591u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(716); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(752); + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c00u; + SCE->REG_24H = 0x800060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x800103e0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x3800dbffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xbf8f24dcu, 0xa8611807u, 0xd3d73e92u, 0x917d5611u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800103e0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3800dbffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x16bbe080u, 0x3a58b36du, 0x9c3bd981u, 0x89c7e361u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x74ef9fabu, 0x4f103f45u, 0x28e539d5u, 0x8781be87u); + oLoop1 = 0; + } + else + { + HW_SCE_p_func101(0xa8588d4eu, 0xd6390acau, 0x96539494u, 0x6e8e682fu); + } + } + } + else + { + oLoop1 = 1; + while(oLoop1 == 1) + { + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800103e0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3800dbffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x362dfab8u, 0x92e5f78au, 0x438ce431u, 0xf280d849u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x08586c47u, 0x91f65898u, 0xd0f33d44u, 0x5c1d4285u); + oLoop1 = 0; + } + else + { + HW_SCE_p_func101(0x09a1a341u, 0x90a8d52au, 0x83a061f8u, 0x02856805u); + } + } + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000008u; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func318.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func319.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func319.c new file mode 100644 index 000000000..8b5e32cc7 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func319.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func319(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_D0H = 0x00000700u; + SCE->REG_C4H = 0x42e087bfu; + SCE->REG_04H = 0x00000282u; + for (iLoop2 = 0; iLoop2 < 32 ; iLoop2 = iLoop2 + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[ARG1+iLoop2 + 0] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 1] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 2] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func319.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func320.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func320.c new file mode 100644 index 000000000..7e4e739f2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func320.c @@ -0,0 +1,109 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func320(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00001f62u; + SCE->REG_D0H = 0x00000700u; + SCE->REG_C4H = 0x42f087bfu; + for (iLoop2 = 0; iLoop2 < 32 ; iLoop2 = iLoop2 + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 0]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 1]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 2]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x400007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 0]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 1]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 2]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func320.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func321.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func321.c new file mode 100644 index 000000000..b211f54fc --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func321.c @@ -0,0 +1,91 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func321(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_D0H = 0x00000800u; + SCE->REG_C4H = 0x42e087bfu; + SCE->REG_04H = 0x00000292u; + for (iLoop2 = 0; iLoop2 < 36 ; iLoop2 = iLoop2 + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[ARG1+iLoop2 + 0] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 1] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 2] = SCE->REG_100H; + S_HEAP[ARG1+iLoop2 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func321.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func322.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func322.c new file mode 100644 index 000000000..0c8967151 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func322.c @@ -0,0 +1,109 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func322(uint32_t ARG1) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00002362u; + SCE->REG_D0H = 0x00000800u; + SCE->REG_C4H = 0x42f087bfu; + for (iLoop2 = 0; iLoop2 < 36 ; iLoop2 = iLoop2 + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 0]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 1]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 2]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x400007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 0]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 1]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 2]; + SCE->REG_100H = S_HEAP[ARG1+iLoop2 + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func322.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func323.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func323.c new file mode 100644 index 000000000..abfb14544 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func323.c @@ -0,0 +1,184 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func323(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x000060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000002c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x00000981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000002c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a30001u; + SCE->REG_24H = 0x00001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00a70001u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000480au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000c02u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000801u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000054d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func323.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func324.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func324.c new file mode 100644 index 000000000..b8140d134 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func324.c @@ -0,0 +1,944 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func324(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003fbeu; + HW_SCE_p_func100(0xba800165u, 0x9d0773f6u, 0xc404520bu, 0x64890201u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xd5fc2c48u, 0x3ee36e03u, 0x5d0a4911u, 0x3a0bf64du); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8b104378u, 0x5c4821e6u, 0xd5ad0910u, 0x350a2659u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(716); + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(752); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + oLoop1 = 1; + while(oLoop1 == 1) + { + HW_SCE_p_func100(0xf53e35c6u, 0xd82158c6u, 0xb88968fcu, 0xc7b36f20u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x905bfec7u, 0x34f45708u, 0x8a2c63ffu, 0x0f52cc31u); + oLoop1 = 0; + } + else + { + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func101(0x6fd622f4u, 0xc5c30bdbu, 0x97754975u, 0xabab04e2u); + } + } + HW_SCE_p_func100(0x21bbb393u, 0xcd9f14a3u, 0x26a0865fu, 0x7ab63a5fu); + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001981u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001181u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef2f1cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xfc6ff514u, 0xa79a0df4u, 0x7e3fac51u, 0x4283d461u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(136); + HW_SCE_p_func100(0x94f25a99u, 0xdcf9f94bu, 0xcc235501u, 0x569b42ddu); + HW_SCE_p_func314(136+32); + HW_SCE_p_func100(0xc3c50340u, 0x1fed1a99u, 0xc269950cu, 0xe7766b8eu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012e06e6u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8cebb57cu, 0x04b0382fu, 0x60452136u, 0xde3445a7u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(172); + HW_SCE_p_func100(0xf53e25d8u, 0x61d4a5ceu, 0xd3c4952au, 0x9acca047u); + HW_SCE_p_func314(172+32); + HW_SCE_p_func100(0xb8a00ca9u, 0x28cfa0d8u, 0x81dd7ba0u, 0xa28e4d9fu); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0100abe1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6f9aab8fu, 0xabe2fdc1u, 0xd809f527u, 0x5f0cfc44u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(208); + HW_SCE_p_func100(0x85986bc9u, 0xdfec6f9fu, 0xd0187c6du, 0x35b96576u); + HW_SCE_p_func314(208+32); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000a52u; + for (iLoop = 0; iLoop < 128; iLoop = iLoop + 1) + { + HW_SCE_p_func100(0x676328e0u, 0x613dcc15u, 0xb5174525u, 0x35e75a6fu); + SCE->REG_24H = 0x040049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0400d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x23195e77u, 0x97f9f9e3u, 0x3a294c80u, 0x21a31b5fu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(716); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x00002e40u; + HW_SCE_p_func101(0xe6f2fb13u, 0x44ac6782u, 0xacacfa2cu, 0xc6ce06bau); + } + SCE->REG_ECH = 0x38008a40u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + HW_SCE_p_func100(0xdff19989u, 0xed86b6e4u, 0x810692d1u, 0x4054ba1fu); + SCE->REG_24H = 0x040049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x040019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0400d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x020019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb252e8f6u, 0xa305ef14u, 0xae64b69au, 0x585821f5u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(680); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe3ac09b8u, 0xed2ade8eu, 0x09e0d6a0u, 0x53c92617u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(716); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4a733c3du, 0x2b978923u, 0xc70ac96au, 0xf892a403u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0x6a895ce5u, 0x6c42347fu, 0x214cfe83u, 0x59e7049eu); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0xdea06f25u, 0x53d8df33u, 0x9c88cf0eu, 0x67a0090au); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xbf3bc416u, 0x136f6b3eu, 0xacf5f90fu, 0x3425f707u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0x1c85df96u, 0x3d70a07du, 0x430218bcu, 0xb738452du); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0x4894e0eau, 0x1ed6fd66u, 0x44c98fa9u, 0x93476849u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x27653520u, 0xaf747027u, 0xdc554257u, 0xf7ab9d4bu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(544); + HW_SCE_p_func100(0x799b94d4u, 0xc20a7cd7u, 0x9cca7baau, 0x7cb589a4u); + HW_SCE_p_func314(544+32); + HW_SCE_p_func100(0x88fb9181u, 0xb55c73deu, 0x7d7588f0u, 0xf5f0778cu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf3a6d287u, 0xc0bae19au, 0x4a678488u, 0x782770a3u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(580); + HW_SCE_p_func100(0x713444a7u, 0xc18c9532u, 0x50c8e298u, 0x48490351u); + HW_SCE_p_func314(580+32); + HW_SCE_p_func100(0xc516255bu, 0xc4f1442cu, 0xe9885d55u, 0xb986eeb2u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x54c6a527u, 0x13c8e927u, 0xb44ce6aau, 0xeb9e9d3fu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0x265120a7u, 0x73fc5c2eu, 0xef24e3f8u, 0x4fbcfaadu); + HW_SCE_p_func314(480+32); + HW_SCE_p_func100(0x61f0fe5eu, 0x0f4cbddfu, 0x1ad3a9e8u, 0x1a0d7668u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x7be00fceu, 0x9aeb3edeu, 0x25026ce9u, 0xc2d0db59u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(616); + HW_SCE_p_func100(0x73a48fa9u, 0x38d334c0u, 0xadf63b4du, 0xf330a5ccu); + HW_SCE_p_func314(616+32); + SCE->REG_ECH = 0x00000a52u; + for (iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f0u; + HW_SCE_p_func101(0x20fa9c73u, 0xbbf1986du, 0x9bfb0b9du, 0x272b4a9eu); + HW_SCE_p_func318(); + HW_SCE_p_func100(0x91e54cabu, 0xdaa2840bu, 0xe523dc34u, 0x667f6b46u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb669ddffu, 0xc3ef8260u, 0x5350ad91u, 0x9fa7b544u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0x147c2639u, 0x9cc02970u, 0x583dd0dbu, 0x528abff7u); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0x1714ce33u, 0x4aad3236u, 0x7b544d55u, 0xd9609333u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1cd470e5u, 0x633c9ff4u, 0x1cdcb115u, 0x26eda65cu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0xb9364cc7u, 0xbefc7673u, 0x0e7a2b28u, 0x2ad0bb86u); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0x51f70bf0u, 0x01fd1d85u, 0x88cd7d7au, 0xc11c13c1u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x859aa5c9u, 0x89c173aeu, 0x7aab7a3eu, 0x4bd05495u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0xa64744e4u, 0xa6a5a5c4u, 0x6f2d5dc6u, 0x2fe1048eu); + HW_SCE_p_func314(480+32); + HW_SCE_p_func100(0xfa4d90b8u, 0x0d966024u, 0x19970766u, 0x2c40f92eu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x7f6a3d31u, 0x15656e45u, 0x8350c92bu, 0xa29a076du); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(544); + HW_SCE_p_func100(0xe8a70fe7u, 0x4d8a9e70u, 0x3f48c23au, 0x89eeb55eu); + HW_SCE_p_func314(544+32); + HW_SCE_p_func100(0x5c04f776u, 0x21f0f81fu, 0x4e3a8a5bu, 0x76098a00u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x472aaf2au, 0xf9d8f81cu, 0x07508940u, 0xd7a49d5au); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(580); + HW_SCE_p_func100(0x05d64b3fu, 0x793b0085u, 0xa705f245u, 0xe95259deu); + HW_SCE_p_func314(580+32); + HW_SCE_p_func100(0xfa3b4138u, 0xbe30de6cu, 0xfc3bd1eau, 0x2e93d150u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa6ec6b8cu, 0xaa9fd90bu, 0x46b98ebeu, 0xfbe37dfcu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(616); + HW_SCE_p_func100(0x0f67fcf6u, 0xd661c9b8u, 0x78b71659u, 0xdc1671e7u); + HW_SCE_p_func314(616+32); + SCE->REG_ECH = 0x00002e40u; + HW_SCE_p_func101(0x61371d76u, 0x8955c0e3u, 0xf57d2ea6u, 0x6b052d94u); + } + SCE->REG_ECH = 0x38008a40u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f1u; + HW_SCE_p_func101(0x8bba8cdbu, 0xa7e18e91u, 0xf71d87c8u, 0x797aa69cu); + HW_SCE_p_func318(); + HW_SCE_p_func100(0x322547acu, 0x9b5539eeu, 0x631909e9u, 0xa317cbbbu); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1759ee18u, 0x3b01deecu, 0x6a8590f4u, 0xf6c5f969u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0x96c47023u, 0x7df6d2ccu, 0xf3632006u, 0x6fe7f4f8u); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0x91a24210u, 0xcbb101b4u, 0xb5ba4705u, 0xfbf14b32u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x2c310da3u, 0x5ea30255u, 0xa29d782eu, 0x0bc1f93eu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0x8b87eef7u, 0x213e09a1u, 0xa69cfedbu, 0xfb9276f3u); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0xd41003bau, 0x105fbe5au, 0x561c8390u, 0x4b945c86u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x48db3531u, 0x94b996bdu, 0x060dbf20u, 0x9520a664u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0xb51fc317u, 0xc794cd92u, 0xb477efbcu, 0x81dce284u); + HW_SCE_p_func314(480+32); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f2u; + HW_SCE_p_func101(0xbf232622u, 0x10d13a51u, 0x848c8464u, 0x5f80635du); + HW_SCE_p_func318(); + HW_SCE_p_func100(0x30a00026u, 0x69802337u, 0x7cd74e4fu, 0x52041efcu); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01d34587u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x553d552eu, 0xb04761ecu, 0x3077aef8u, 0x831743f4u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(272); + HW_SCE_p_func100(0x7432c608u, 0xc9fed9c7u, 0xec726f19u, 0x8d5f8875u); + HW_SCE_p_func314(272+32); + HW_SCE_p_func100(0xaace0e99u, 0x42f2e878u, 0xdd957896u, 0xcd0de241u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01315552u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x5c31900bu, 0x2680183du, 0xe043b5a4u, 0x8db6cf2du); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(308); + HW_SCE_p_func100(0xcdd8331eu, 0xa782fd53u, 0xc031e37eu, 0xf9541b33u); + HW_SCE_p_func314(308+32); + HW_SCE_p_func100(0x36ab5860u, 0x7d1990c3u, 0xd106d439u, 0xd15c9b71u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011a27dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6fc441bdu, 0x7bce0d3bu, 0xe350cbc9u, 0x0d856aceu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(344); + HW_SCE_p_func100(0xe4f910e8u, 0x57082666u, 0x3975f343u, 0xeb5a48a4u); + HW_SCE_p_func314(344+32); + HW_SCE_p_func100(0x8de19a0bu, 0x8f9aed6fu, 0x47fdf7ecu, 0x62fb4c80u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x26831bc6u, 0xcde42f4fu, 0x8b4d5307u, 0xca3cecfeu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0x68d5d8f0u, 0x2d218dd1u, 0xd6eea468u, 0xb35336b8u); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0x021c7250u, 0x492cdf1fu, 0x3a45037fu, 0xefeca1b5u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0cb3fc26u, 0xcb04bc14u, 0xb6de0377u, 0x53ba5f3fu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0x2e642543u, 0x4902544au, 0x51f5ebe8u, 0x72794910u); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0x8f9d782eu, 0x81c16d66u, 0x5e85807eu, 0x6ef1b6d8u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc718fd71u, 0x78b1a7f1u, 0x20b0a1fcu, 0x08efeaa0u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0x1703905fu, 0x2588568cu, 0x62ecbe40u, 0x232f9133u); + HW_SCE_p_func314(480+32); + HW_SCE_p_func100(0x3a1733d4u, 0x86275a46u, 0x6eccc0a1u, 0x33a7dc95u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01fe1091u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8e52d68bu, 0x1f5c3894u, 0x691f3877u, 0x2243d7a3u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(0); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019969f4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x29bf281fu, 0x90730ae8u, 0x5c16ffe4u, 0x9746b752u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000013u; + HW_SCE_p_func320(36); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019de420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc6d651f1u, 0xea4e04fbu, 0x1e97b80eu, 0x728f545cu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(72); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4f8d632au, 0xfd956a83u, 0x8a13de73u, 0x6dd74cadu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(544); + HW_SCE_p_func100(0xc1fe21f7u, 0x1494de69u, 0xb4a7584bu, 0x901cd492u); + HW_SCE_p_func314(544+32); + HW_SCE_p_func100(0x0e1dc5d7u, 0x2032e656u, 0x84c0fcffu, 0x1b85a4d7u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x085429ddu, 0x35c43703u, 0x5059446fu, 0x997691b1u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(580); + HW_SCE_p_func100(0x6d916213u, 0xb2da4cceu, 0x367fbab5u, 0x2acea943u); + HW_SCE_p_func314(580+32); + HW_SCE_p_func100(0x18057ff5u, 0x754a8c51u, 0x086a4be3u, 0x90067525u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x325a9a89u, 0x535dc5d9u, 0x1f05a791u, 0xcd2f9884u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(616); + HW_SCE_p_func100(0xc75b4b8fu, 0x620e68b0u, 0xbbebe121u, 0xe12fba81u); + HW_SCE_p_func314(616+32); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f3u; + HW_SCE_p_func101(0x06aa632cu, 0x2c294586u, 0x524b9262u, 0x937064feu); + HW_SCE_p_func318(); + HW_SCE_p_func100(0x7ea795a3u, 0x8915f2cbu, 0xa7c41020u, 0x0f89207eu); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01fe1091u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9a6b4727u, 0x19829e58u, 0xb07a6fc7u, 0x1ec71baeu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(0); + HW_SCE_p_func100(0xb85e4c02u, 0x1065c4d4u, 0x565140bcu, 0x9e233683u); + HW_SCE_p_func314(0+32); + HW_SCE_p_func100(0x0f6b1778u, 0xbd59c987u, 0x90211bb5u, 0x109bfbf8u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019969f4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb356879fu, 0xa9e41716u, 0x28645099u, 0x0bf86938u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(36); + HW_SCE_p_func100(0xb6a059a7u, 0xb27e1a91u, 0xe6575256u, 0x7d8b8dbcu); + HW_SCE_p_func314(36+32); + HW_SCE_p_func100(0xe0209cc9u, 0xc3e5b064u, 0xe233e02bu, 0xb82949e6u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019de420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcf7deda8u, 0xb4cb207eu, 0x706bb36cu, 0xd048408eu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(72); + HW_SCE_p_func100(0x39eb6316u, 0x27f38705u, 0x8667e6f3u, 0xf04bff62u); + HW_SCE_p_func314(72+32); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func324.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func325.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func325.c new file mode 100644 index 000000000..c904dd279 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_func325.c @@ -0,0 +1,710 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_p_func325(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003fbeu; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f0u; + HW_SCE_p_func101(0x19b9f8aeu, 0x00dc1eecu, 0xf9dd9c29u, 0x487dca94u); + HW_SCE_p_func324(); + SCE->REG_ECH = 0x00000a73u; + SCE->REG_ECH = 0x00000a31u; + for(jLoop = 0; jLoop < 32; jLoop = jLoop + 1) + { + SCE->REG_ECH = 0x00002e20u; + SCE->REG_ECH = 0x38002673u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x5ff32453u, 0x873c3af2u, 0x1ef0a9f2u, 0xeea1abc8u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0xd91c4453u, 0x71906777u, 0x65eb6ac8u, 0x68116537u); + } + else + { + HW_SCE_p_func100(0x6f5b19e9u, 0xdac83bf0u, 0x54111c06u, 0xb860b781u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef2f1cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe22eb519u, 0x6de82dcfu, 0xb8f9baceu, 0xbc0d647du); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(136); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012e06e6u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x1cdea842u, 0xb564ce9eu, 0xaf62b09du, 0xa657fcd4u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000013u; + HW_SCE_p_func320(172); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0100abe1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6ae3808fu, 0x31e8aaa5u, 0x83c15ab1u, 0x0e1e2a56u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(208); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xdbf17b2cu, 0x6294819cu, 0x1e63b419u, 0x687af4b1u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0x6cafabccu, 0xab9a7899u, 0x3e4e3a72u, 0x7238056du); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0x2a966046u, 0xe5910a6au, 0xb9af8bc2u, 0x93b2ee87u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf0bb19d3u, 0x6d0a732fu, 0x79edce81u, 0x499d547fu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0xb6c9eb32u, 0xad8b6a5au, 0x5b45535du, 0xdb899e90u); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0xc8542ac7u, 0x35039915u, 0xfe02b565u, 0x41720439u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6977f72au, 0xf0c40367u, 0x67b15bacu, 0x3c1c7ed3u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0x043ee0feu, 0x624f430cu, 0xb8984341u, 0x2e9b0883u); + HW_SCE_p_func314(480+32); + HW_SCE_p_func100(0x990f8d9cu, 0xbae662edu, 0x9243df9fu, 0x70f27c08u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x882daaf8u, 0x19e744beu, 0x796e7434u, 0x58deac8cu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(544); + HW_SCE_p_func100(0xa65ba385u, 0xd358b3d1u, 0x514a28beu, 0xc75e4c3cu); + HW_SCE_p_func314(544+32); + HW_SCE_p_func100(0x8e27c19eu, 0x824b7d7eu, 0xe50f28fdu, 0x7e778871u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x90947f6fu, 0x28cf15d5u, 0xe7bf2d71u, 0xc95bc76cu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(580); + HW_SCE_p_func100(0xd47910a8u, 0x77c0c723u, 0x9458a5c8u, 0xf065fe99u); + HW_SCE_p_func314(580+32); + HW_SCE_p_func100(0x462657d5u, 0xd8ee238bu, 0x244727e6u, 0x5fbb2ec0u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x95cd2f1bu, 0xac924fb3u, 0x07bbac8eu, 0x5868deb3u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(616); + HW_SCE_p_func100(0xb8afe95du, 0xf0a676a8u, 0x278ca2e7u, 0xd432ab29u); + HW_SCE_p_func314(616+32); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f0u; + HW_SCE_p_func101(0x4b583ae7u, 0x56d78152u, 0xd8cd207fu, 0x9097cbb4u); + HW_SCE_p_func318(); + HW_SCE_p_func100(0xa29f08dau, 0x8b21226du, 0xba1aa171u, 0x8c03bd6bu); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef2f1cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x3e09f796u, 0x1f5513bau, 0xf2906a3au, 0xf6a264a1u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(136); + HW_SCE_p_func100(0x83f2f5c5u, 0xdb4b3aa1u, 0xacb5ab71u, 0xe7159fd6u); + HW_SCE_p_func314(136+32); + HW_SCE_p_func100(0xc6cc13adu, 0x22bf318cu, 0xd52ea535u, 0x0bfda6bcu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012e06e6u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4434b13au, 0x76d201adu, 0x198d4932u, 0xd9a8e8c6u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(172); + HW_SCE_p_func100(0x2034127au, 0x60179772u, 0x9d4f2692u, 0xf359f550u); + HW_SCE_p_func314(172+32); + HW_SCE_p_func100(0x03be931eu, 0x9b569d30u, 0xf39d0140u, 0x2f929436u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0100abe1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xd22044a4u, 0x1911ee48u, 0x559c468eu, 0x6062e4e5u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(208); + HW_SCE_p_func100(0xf4dc0b69u, 0xee39d2a1u, 0x3638a4f4u, 0x87ad8cf6u); + HW_SCE_p_func314(208+32); + HW_SCE_p_func101(0x48c6011cu, 0x2d1d0c0eu, 0x3ad508d0u, 0x1863f5c7u); + } + SCE->REG_ECH = 0x3800da9fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x06fcfb29u, 0xb5045fefu, 0x87993562u, 0x6e1bce5du); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0xa3dd6937u, 0x1080ea7cu, 0xc0f8663bu, 0x39b34e02u); + } + else + { + HW_SCE_p_func100(0x540eaafeu, 0x60f8d266u, 0x51ba7ec8u, 0x6541c4a3u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef2f1cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xd329fbd9u, 0x86370735u, 0x1cd4c4d4u, 0x1fb5eb99u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(136); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012e06e6u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x301cecd5u, 0x4564a991u, 0xbc369ba9u, 0x4a2cf3e1u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000013u; + HW_SCE_p_func320(172); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0100abe1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf8299ab7u, 0x076dd2d1u, 0xc71f95d9u, 0x3f74c2beu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(208); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x955095f2u, 0xd4c1cc44u, 0x0ce404d9u, 0x52d5d7b5u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0xe316b5d0u, 0xdc820713u, 0x5f194abdu, 0xee24561du); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0x9ac19dcdu, 0x11319817u, 0x001f0298u, 0xd44474ddu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf2b7c604u, 0xc4d8ae51u, 0xa1400e6du, 0x4ac2cfe5u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0xc8a82995u, 0x69c2c9d0u, 0xa23c78e5u, 0xa1933962u); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0x3e8777a9u, 0x035aba94u, 0xf0b79fbeu, 0xe1b3f6a2u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xeaa6d560u, 0xabad2c3au, 0xdc290ad1u, 0x39475f8bu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0x2b3c96c7u, 0xb57a384du, 0x2a0d1079u, 0x0b244eddu); + HW_SCE_p_func314(480+32); + HW_SCE_p_func100(0x818d681cu, 0x3c100869u, 0xd540af50u, 0x53b53f03u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01fe1091u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x575886ccu, 0x974ffacdu, 0x38c459acu, 0xc330f9f3u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(0); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019969f4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc1082ebfu, 0xb40fb8aeu, 0x79c8c97cu, 0xed24f889u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000013u; + HW_SCE_p_func320(36); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019de420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9fb715ddu, 0xd24805b2u, 0xe75eea3fu, 0x21359476u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(72); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x3d283b5bu, 0xc0006d6eu, 0x5de47c42u, 0x0b5c8f89u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(544); + HW_SCE_p_func100(0x94a39151u, 0xb687a632u, 0x001e36d5u, 0xf6e53aecu); + HW_SCE_p_func314(544+32); + HW_SCE_p_func100(0x244d5b4du, 0xe0528084u, 0xa5561169u, 0x921196d6u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x813a2c73u, 0xc5f64d97u, 0x9fd7d1dbu, 0x38014a6du); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(580); + HW_SCE_p_func100(0xa5186967u, 0xf53547d6u, 0x1f89c868u, 0x20367485u); + HW_SCE_p_func314(580+32); + HW_SCE_p_func100(0x459a5ae0u, 0x3c7dce9du, 0x7515a16eu, 0x531936b7u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf3133da1u, 0x77545f92u, 0x2c13ae9bu, 0x8ab362ebu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(616); + HW_SCE_p_func100(0x58ee5ddbu, 0x9061965bu, 0xfdbfec79u, 0xab87a7f8u); + HW_SCE_p_func314(616+32); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f1u; + HW_SCE_p_func101(0x55a0f782u, 0xc388d766u, 0xc11aff3bu, 0x804653c6u); + HW_SCE_p_func318(); + HW_SCE_p_func100(0x8f95701eu, 0x150383aau, 0x313ca36du, 0x62f31989u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef2f1cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x27b6018du, 0xc2d58137u, 0xdaca4f73u, 0xa52f81c8u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(136); + HW_SCE_p_func100(0x7431f476u, 0x94a93defu, 0x3ba1ad1du, 0x21d00227u); + HW_SCE_p_func314(136+32); + HW_SCE_p_func100(0x25a731a2u, 0x4a77f567u, 0xe605568cu, 0x0e3a4862u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012e06e6u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4d9ad891u, 0x883ad05fu, 0x12dd6651u, 0x691f5aafu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(172); + HW_SCE_p_func100(0x0e617478u, 0xaec9a0f7u, 0xab6c622bu, 0xc06428feu); + HW_SCE_p_func314(172+32); + HW_SCE_p_func100(0x8c9380feu, 0x7636013au, 0x4796f2c7u, 0xb9a6e0b0u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0100abe1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe3018af1u, 0x5ca863f5u, 0xc01f235du, 0xd337275fu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(208); + HW_SCE_p_func100(0xb42aa5c7u, 0xde19d9cau, 0x018b5d65u, 0xef529d6fu); + HW_SCE_p_func314(208+32); + SCE->REG_ECH = 0x0000d260u; + HW_SCE_p_func101(0x96bd80abu, 0xe755313eu, 0x61b1ac43u, 0xfe71c8cfu); + } + SCE->REG_ECH = 0x01816e94u; + HW_SCE_p_func101(0xa7c7f7dfu, 0x2e444bafu, 0x34990ba4u, 0x0ce22f12u); + } + SCE->REG_ECH = 0x38008a20u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + HW_SCE_p_func100(0x6deb8b57u, 0x94b7124bu, 0x66285537u, 0x5db62f05u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ef2f1cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xaf2a241bu, 0xd409fd47u, 0x4b0764afu, 0xf4628897u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(136); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012e06e6u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xcb93e799u, 0x927f831eu, 0x87824be8u, 0xbd7dd869u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000013u; + HW_SCE_p_func320(172); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0100abe1u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe14b8260u, 0xc2f90836u, 0xa4e4ccfeu, 0xb9181958u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(208); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x011af8f9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc8121ceau, 0x80714d15u, 0x8cef80eeu, 0xb7b9ecb1u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(408); + HW_SCE_p_func100(0x135ecb32u, 0xf40d3d5au, 0x5b75cd89u, 0x555e08a7u); + HW_SCE_p_func314(408+32); + HW_SCE_p_func100(0xd562a946u, 0xb0463152u, 0x1be9639cu, 0xa25bfe98u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0130aeffu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xfb0b81a2u, 0x0475c67eu, 0xb2f3371fu, 0x9c99e5e5u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(444); + HW_SCE_p_func100(0x247abdc4u, 0x8088223au, 0x4c2a3bd3u, 0xf6f4099cu); + HW_SCE_p_func314(444+32); + HW_SCE_p_func100(0x486c7a40u, 0x6761da7eu, 0xf076a48eu, 0x4c49b7bfu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010964eau); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xc1ba29d8u, 0x6b9bded9u, 0xd2a90427u, 0x65629fb1u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(480); + HW_SCE_p_func100(0x22079e19u, 0x70a0624fu, 0xef51c3adu, 0xc38e93d3u); + HW_SCE_p_func314(480+32); + HW_SCE_p_func100(0xa9f9e0a8u, 0x6a85e3a5u, 0x0642606au, 0xdd999e86u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000001c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ac62c9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xb1ebc7b9u, 0x0f36ca8au, 0x8f9b5f56u, 0x44721820u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(616); + HW_SCE_p_func100(0x68433359u, 0x306beee5u, 0x552d671du, 0x7168bbbcu); + HW_SCE_p_func314(616+32); + HW_SCE_p_func100(0xe33d52b8u, 0x809c11a1u, 0xf5117386u, 0xcc37fadcu); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01574730u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x48c37190u, 0x8bbefda8u, 0x978c9cddu, 0x53e45d9bu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(544); + HW_SCE_p_func100(0xa3b1323fu, 0xf6874d14u, 0x8668673bu, 0x7990152fu); + HW_SCE_p_func314(544+32); + HW_SCE_p_func100(0x7daabbc8u, 0x38612bfeu, 0xf86a0b66u, 0x934059b4u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f11123u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x47bab8c1u, 0xafc73bcfu, 0x5e08a50du, 0x30704306u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000023u; + HW_SCE_p_func319(580); + HW_SCE_p_func100(0x6a8a5afdu, 0x62926c28u, 0x8e1be5b5u, 0x89cbfff9u); + HW_SCE_p_func314(580+32); + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f2u; + HW_SCE_p_func101(0xe3857bc5u, 0x0bf35aafu, 0xe3f75101u, 0x83c810b1u); + HW_SCE_p_func318(); + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x00003bbeu; + SCE->REG_ECH = 0x00007c1du; + SCE->REG_1CH = 0x00602000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_func325.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p00.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p00.c new file mode 100644 index 000000000..785e7b51a --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p00.c @@ -0,0 +1,74 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_SoftwareResetSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_138H = 0x00000000u; + SCE->REG_1D0H = 0x00000000u; + SCE->REG_1D0H = 0x00000000u; + SCE->REG_1D0H = 0x00000000u; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p00.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p01.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p01.c new file mode 100644 index 000000000..f3d439a45 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p01.c @@ -0,0 +1,128 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_SelfCheck1Sub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_SelfCheck1SubSub(); + + SCE->REG_138H = 0xf597806Au; + SCE->REG_F0H = 0x00000000u; + SCE->REG_04H = 0x00000001u; + SCE->REG_10CH = 0x00000701u; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_80H = 0x00000001u; + SCE->REG_28H = 0x00000001u; + SCE->REG_7CH = 0x00000001u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000008u; + SCE->REG_84H = 0x00010101u; + SCE->REG_13CH = 0x00000F00u; + SCE->REG_88H = 0x00008002u; + SCE->REG_104H = 0x00000352u; + HW_SCE_p_func101(change_endian_long(0xe1a2a5d8u), change_endian_long(0x821a5428u), change_endian_long(0x7c777ac3u), change_endian_long(0xfd151290u)); + SCE->REG_88H = 0x00000000u; + SCE->REG_104H = 0x00000352u; + SCE->REG_C4H = 0x000f3a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x9ed66559u; + SCE->REG_100H = 0x8e5bcbb9u; + SCE->REG_100H = 0xd2f5d1d3u; + SCE->REG_100H = 0xae209b90u; + HW_SCE_p_func101(change_endian_long(0xf4e6ce80u), change_endian_long(0x39773b0fu), change_endian_long(0x86227f8fu), change_endian_long(0x2b810040u)); + HW_SCE_p_func100(change_endian_long(0x3e5590a5u), change_endian_long(0x96fa7453u), change_endian_long(0x0e213a19u), change_endian_long(0x12498aecu)); + SCE->REG_04H = 0x00001001u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_18H_b.B13)) + { + SCE->REG_1BCH = 0x00000020u; + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_08H = 0x0000FFFFu; + SCE->REG_13CH = 0x00000220u; + HW_SCE_p_func102(change_endian_long(0x62cb9591u), change_endian_long(0x72556c92u), change_endian_long(0x45cac937u), change_endian_long(0x8431be8fu)); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p01.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p02.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p02.c new file mode 100644 index 000000000..141b8547a --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p02.c @@ -0,0 +1,383 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_SelfCheck2Sub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00000201u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00093b8cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x01c7ba56u; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00070804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x00000000u; + SCE->REG_ECH = 0x3000a820u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_ECH = 0x00010020u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_ECH = 0x00000080u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00002008u; + SCE->REG_ECH = 0x00000863u; + SCE->REG_ECH = 0x00000884u; + SCE->REG_ECH = 0x000008a5u; + SCE->REG_ECH = 0x0000b4c0u; + SCE->REG_ECH = 0x00000013u; + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000348u; + SCE->REG_ECH = 0x0000b500u; + SCE->REG_ECH = 0x000000b7u; + for(jLoop = 0; jLoop < 32; jLoop = jLoop + 1) + { + HW_SCE_p_func100(change_endian_long(0x600eb3f3u), change_endian_long(0x5be54db5u), change_endian_long(0xd957da80u), change_endian_long(0xb7be0bbdu)); + SCE->REG_ECH = 0x00007c01u; + SCE->REG_1CH = 0x00600000u; + SCE->REG_1D0H = 0x00000000u; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x0020901cu; + HW_SCE_p_func101(change_endian_long(0x1cb8f160u), change_endian_long(0x44a42eb9u), change_endian_long(0xb9d9de91u), change_endian_long(0xf7e69233u)); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x0020901eu; + HW_SCE_p_func101(change_endian_long(0x59fb7336u), change_endian_long(0x9c8f2482u), change_endian_long(0xc090f97fu), change_endian_long(0x0dba80dfu)); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x0020901du; + HW_SCE_p_func101(change_endian_long(0xed4e6151u), change_endian_long(0xc771e206u), change_endian_long(0x81266996u), change_endian_long(0x2bbee94du)); + } + SCE->REG_C4H = 0x41001e5eu; + SCE->REG_00H = 0x80002401u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001200u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B30) + { + /* waiting */ + } + SCE->REG_00H = 0x00000001u; + SCE->REG_C4H = 0x00000000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x0010B008u; + SCE->REG_ECH = 0x00000800u; + SCE->REG_E0H = 0x80900000u; + SCE->REG_00H = 0x00008443u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000038a0u; + SCE->REG_ECH = 0x00003405u; + SCE->REG_ECH = 0x00002804u; + SCE->REG_ECH = 0x342028e0u; + SCE->REG_ECH = 0x10005066u; + SCE->REG_ECH = 0x34202808u; + SCE->REG_ECH = 0x10005066u; + SCE->REG_ECH = 0x00003485u; + HW_SCE_p_func101(change_endian_long(0x48b1bfc2u), change_endian_long(0x2f0d98c0u), change_endian_long(0xff07792fu), change_endian_long(0x166d190cu)); + } + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000B50u; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x000008c6u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b4a0u; + SCE->REG_ECH = 0x00000002u; + for(iLoop = 0; iLoop < 16; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x01003804u; + SCE->REG_ECH = 0x342028e0u; + SCE->REG_ECH = 0x10005066u; + SCE->REG_ECH = 0x00002440u; + SCE->REG_ECH = 0x00002cc0u; + SCE->REG_ECH = 0x00002485u; + } + SCE->REG_ECH = 0x00002c20u; + SCE->REG_ECH = 0x38008840u; + SCE->REG_ECH = 0x00002000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_1CH = 0x00402000u; + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000033u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x0000003cu; + SCE->REG_ECH = 0x01003804u; + SCE->REG_ECH = 0x342028e0u; + SCE->REG_ECH = 0x10005066u; + SCE->REG_ECH = 0x00002cc0u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x0000003eu; + SCE->REG_ECH = 0x01003804u; + SCE->REG_ECH = 0x342028e0u; + SCE->REG_ECH = 0x10005066u; + SCE->REG_ECH = 0x38008860u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(change_endian_long(0xaddf6f7bu), change_endian_long(0xae6de2f8u), change_endian_long(0xf97e7cdau), change_endian_long(0x68b0a447u)); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(change_endian_long(0x2c21e21cu), change_endian_long(0x8f10bb7au), change_endian_long(0x7714e304u), change_endian_long(0x3807136cu)); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_RETRY; + } + else + { + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x0000001cu; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000cc4u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x00000000u; + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x41001eddu; + SCE->REG_00H = 0x00002413u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000000u; + SCE->REG_E0H = 0x80040080u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(change_endian_long(0xcfbe1fc5u), change_endian_long(0xae3c0b75u), change_endian_long(0xfa1b775cu), change_endian_long(0xfccd985au)); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x000b0804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x00000000u; + SCE->REG_104H = 0x00000352u; + SCE->REG_C4H = 0x00070805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x00000000u; + SCE->REG_100H = 0x00000000u; + SCE->REG_100H = 0x00000000u; + SCE->REG_100H = 0x00000001u; + HW_SCE_p_func100(change_endian_long(0xd69c553bu), change_endian_long(0x72e04337u), change_endian_long(0xcf6834e5u), change_endian_long(0x29b2da04u)); + SCE->REG_D0H = 0x00000100u; + SCE->REG_C4H = 0x0100b7f7u; + SCE->REG_E0H = 0x81080000u; + SCE->REG_00H = 0x00002823u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x000b0805u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x00070805u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(change_endian_long(0x1c99323fu), change_endian_long(0x6c63dba1u), change_endian_long(0x38229203u), change_endian_long(0x22d91767u)); + HW_SCE_p_func103(); + HW_SCE_p_func100(change_endian_long(0x80b45ab9u), change_endian_long(0x4d97ab5fu), change_endian_long(0x3ef09550u), change_endian_long(0xa94d5b6eu)); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x010d0c04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x00000000u; + HW_SCE_p_func100(change_endian_long(0xe6c8760fu), change_endian_long(0x099c6fc6u), change_endian_long(0x1406eda2u), change_endian_long(0x580bd39cu)); + HW_SCE_p_func103(); + HW_SCE_p_func100(change_endian_long(0xff2b1e8au), change_endian_long(0x3e6453b3u), change_endian_long(0xe33170b8u), change_endian_long(0xe2d6af49u)); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = 0x00000000u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[16] = change_endian_long(SCE->REG_100H); + S_RAM[17] = change_endian_long(SCE->REG_100H); + S_RAM[18] = change_endian_long(SCE->REG_100H); + S_RAM[19] = change_endian_long(SCE->REG_100H); + SCE->REG_13CH = 0x00000221u; + HW_SCE_p_func102(change_endian_long(0xf3939357u), change_endian_long(0x04e0f3c0u), change_endian_long(0x2c7db127u), change_endian_long(0x9914e276u)); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p02.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p07.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p07.c new file mode 100644 index 000000000..edf432f31 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p07.c @@ -0,0 +1,201 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateAes128RandomKeyIndexSub(uint32_t *OutData_KeyIndex) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00000701u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0xf7efeb7eu, 0x5bdda299u, 0xe42a1e4fu, 0x767dea6au); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000007u); + HW_SCE_p_func101(0x513bef76u, 0xa59e0bb3u, 0xcdfad875u, 0x8d637e2eu); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000007u); + HW_SCE_p_func101(0x83e1178eu, 0x3dd77044u, 0x3cd5df94u, 0x9ce47099u); + HW_SCE_p_func044(); + HW_SCE_p_func100(0xeae16410u, 0x81a2bb97u, 0x822b834eu, 0x1611ebcau); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func100(0xf2419c1cu, 0xefb76c05u, 0x2d1e5187u, 0xe3503335u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02e487b5u; + SCE->REG_E0H = 0x81040000u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x248dcc14u, 0x40944f2bu, 0x3a2a8f3fu, 0x66cf1e3fu); + SCE->REG_104H = 0x00000352u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000001u); + SCE->REG_04H = 0x00000222u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[1] = SCE->REG_100H; + OutData_KeyIndex[2] = SCE->REG_100H; + OutData_KeyIndex[3] = SCE->REG_100H; + OutData_KeyIndex[4] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[5] = SCE->REG_100H; + OutData_KeyIndex[6] = SCE->REG_100H; + OutData_KeyIndex[7] = SCE->REG_100H; + OutData_KeyIndex[8] = SCE->REG_100H; + HW_SCE_p_func102(0x8728d316u, 0xba08805au, 0x85a1e7e1u, 0xc29c1790u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p07.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p08.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p08.c new file mode 100644 index 000000000..c1fd1d731 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p08.c @@ -0,0 +1,227 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateAes256RandomKeyIndexSub(uint32_t *OutData_KeyIndex) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00000801u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0xabd3565cu, 0x38ca4728u, 0x0c8efe13u, 0x081a2236u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000008u); + HW_SCE_p_func101(0x10a39676u, 0xc3d8a8a9u, 0xfbeb969eu, 0x182d783du); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000008u); + HW_SCE_p_func101(0x6c226c1bu, 0xb630a761u, 0xa2d8c6f3u, 0x672d12aeu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x6079276cu, 0x59d50fb9u, 0xbd4e561au, 0x86e05366u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func100(0xe69703ebu, 0xba7394ccu, 0x4cb5d6e4u, 0xb4745793u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80080000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xbd01dcc1u, 0x16cd31d6u, 0x6634e7beu, 0xff62b791u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x78c9115au, 0xc5dd48b9u, 0x7e7ed9a3u, 0xe62efcacu); + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02e487b7u; + SCE->REG_E0H = 0x81080000u; + SCE->REG_00H = 0x00002823u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000352u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000002u); + SCE->REG_04H = 0x00000232u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[1] = SCE->REG_100H; + OutData_KeyIndex[2] = SCE->REG_100H; + OutData_KeyIndex[3] = SCE->REG_100H; + OutData_KeyIndex[4] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[5] = SCE->REG_100H; + OutData_KeyIndex[6] = SCE->REG_100H; + OutData_KeyIndex[7] = SCE->REG_100H; + OutData_KeyIndex[8] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[9] = SCE->REG_100H; + OutData_KeyIndex[10] = SCE->REG_100H; + OutData_KeyIndex[11] = SCE->REG_100H; + OutData_KeyIndex[12] = SCE->REG_100H; + HW_SCE_p_func102(0x3b696d5fu, 0x686352f3u, 0x37f6ff6fu, 0x9a7c40c2u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p08.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p20.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p20.c new file mode 100644 index 000000000..d683ecfc1 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p20.c @@ -0,0 +1,105 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateRandomNumberSub(uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00002001u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0x39474ca5u, 0x2734ab38u, 0xac8a3b6eu, 0xd618ffa1u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func100(0x78680554u, 0x7e6bcbf3u, 0x28e0c2d1u, 0x77ed0e82u); + SCE->REG_04H = 0x00000213u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + HW_SCE_p_func102(0xabc3a4dbu, 0x2a94f5aeu, 0xd92f7679u, 0x10c3f31bu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p20.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p21.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p21.c new file mode 100644 index 000000000..4c464249c --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p21.c @@ -0,0 +1,140 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Ghash(uint32_t *InData_HV, uint32_t *InData_IV, uint32_t *InData_Text, uint32_t *OutData_DataT, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00002101u; + SCE->REG_108H = 0x00000000u; + SCE->REG_7CH = 0x00000001u; + SCE->REG_7CH = 0x00000041u; + SCE->REG_74H = 0x00001000u; + SCE->REG_104H = 0x00000364u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_HV[0]; + SCE->REG_100H = InData_HV[1]; + SCE->REG_100H = InData_HV[2]; + SCE->REG_100H = InData_HV[3]; + SCE->REG_74H = 0x00000004u; + SCE->REG_104H = 0x00000364u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + SCE->REG_74H = 0x00000002u; + SCE->REG_104H = 0x000000b4u; + for (iLoop = 0; iLoop < MAX_CNT ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_104H = 0x00000000u; + HW_SCE_p_func100(0xa49f2fb4u, 0xcf741bfeu, 0x976976aeu, 0xda8be0abu); + SCE->REG_74H = 0x00000008u; + SCE->REG_04H = 0x00000513u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_DataT[0] = SCE->REG_100H; + OutData_DataT[1] = SCE->REG_100H; + OutData_DataT[2] = SCE->REG_100H; + OutData_DataT[3] = SCE->REG_100H; + HW_SCE_p_func102(0xe069ddfdu, 0x5f466981u, 0x494caa8au, 0xc542b9fdu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p21.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p26.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p26.c new file mode 100644 index 000000000..8edcbe80e --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p26.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_FwIntegrityCheck(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00002601u; + SCE->REG_108H = 0x00000000u; + SCE->REG_13CH = 0x00000202u; + HW_SCE_p_func102(0xe8e880e8u, 0xe878ca41u, 0x69b6222du, 0x05286da4u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p26.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29a.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29a.c new file mode 100644 index 000000000..90a2fa316 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29a.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128GcmEncryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x000000b4u; + for (iLoop = 0; iLoop < MAX_CNT; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataA[iLoop + 0]; + SCE->REG_100H = InData_DataA[iLoop + 1]; + SCE->REG_100H = InData_DataA[iLoop + 2]; + SCE->REG_100H = InData_DataA[iLoop + 3]; + } + SCE->REG_104H = 0x00000000u; + HW_SCE_p_func101(0x8088b49eu, 0x287d03e4u, 0x7eb933fau, 0xf28efb78u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p29a.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29f.c new file mode 100644 index 000000000..12594caeb --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29f.c @@ -0,0 +1,232 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes128GcmEncryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *OutData_Text, uint32_t *OutData_DataT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000168u; + SCE->REG_E0H = 0x80020100u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[1]; + SCE->REG_ECH = 0x0000b580u; + SCE->REG_ECH = 0x0000007Fu; + SCE->REG_ECH = 0x0000b5a0u; + SCE->REG_ECH = 0xFFFFFF00u; + SCE->REG_ECH = 0x0c0029a9u; + SCE->REG_ECH = 0x04a02988u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xfe06d472u, 0x69cf4b13u, 0x7a562175u, 0x8da35523u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x12e1a862u, 0x8ae14d30u, 0x4731fe0bu, 0x84935df2u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x00003409u; + SCE->REG_ECH = 0x00036800u; + SCE->REG_ECH = 0x08008c00u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x6e99cd58u, 0xb62fe0d1u, 0x3716c8d1u, 0x1d656d8eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_B0H = 0x00000020u; + SCE->REG_A4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bffu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002be0u; + SCE->REG_ECH = 0x12003c3fu; + SCE->REG_ECH = 0x00002fe0u; + } + HW_SCE_p_func100(0x6af5fab4u, 0x61f52c93u, 0x79227bf9u, 0xaee63054u); + SCE->REG_A4H = 0x00000885u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x81840001u; + SCE->REG_00H = 0x00004813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000113u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + HW_SCE_p_func101(0xb0489486u, 0x0908e3b3u, 0x61d62485u, 0x6753ec82u); + } + SCE->REG_104H = 0x00000164u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataALen[0]; + SCE->REG_100H = InData_DataALen[1]; + SCE->REG_E0H = 0x81020100u; + SCE->REG_00H = 0x0000580bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001600u; + SCE->REG_74H = 0x00000000u; + SCE->REG_A4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x50b775adu, 0xb5496f3eu, 0xb8bdee5du, 0x600352ffu); + SCE->REG_B0H = 0x00000020u; + SCE->REG_A4H = 0x000087b5u; + SCE->REG_00H = 0x00001513u; + SCE->REG_74H = 0x00000008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000113u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_DataT[0] = SCE->REG_100H; + OutData_DataT[1] = SCE->REG_100H; + OutData_DataT[2] = SCE->REG_100H; + OutData_DataT[3] = SCE->REG_100H; + HW_SCE_p_func102(0x86f4482du, 0x6d4f5eceu, 0x9a8b3afdu, 0xe6b404bbu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p29f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29i.c new file mode 100644 index 000000000..97f7765df --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29i.c @@ -0,0 +1,401 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes128GcmEncryptInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t *InData_IV) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00002901u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyType[0]; + SCE->REG_ECH = 0x38008800u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x14acce85u, 0xe0e82b06u, 0x325e8e2bu, 0x080c3070u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x6632700eu, 0x54bb2b0au, 0x0628c928u, 0x67a53130u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000029u); + HW_SCE_p_func101(0x1d5278e5u, 0xa5f75927u, 0xbe17b68bu, 0xe94b042du); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000005u; + HW_SCE_p_func101(0xe901524bu, 0x3472aa7bu, 0xaba040b0u, 0xa105b27bu); + } + else + { + SCE->REG_ECH = 0x00003547u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000029u); + HW_SCE_p_func101(0x5de8814fu, 0x0934c569u, 0x807e2b3du, 0x9714458eu); + HW_SCE_p_func068(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x2a46c04bu; + HW_SCE_p_func101(0xc33a264eu, 0x5c158979u, 0xd4fbbf71u, 0xd47008abu); + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000029u); + HW_SCE_p_func101(0x41acb932u, 0x1a93d263u, 0x1040891fu, 0x85c5664eu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0xd177a4d2u, 0x55fd89a4u, 0x4101c1d1u, 0xdbacd9feu); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040080u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0x7c240052u, 0x386c9704u, 0xb361b7ffu, 0x1e4f00bfu); + } + else + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x00ff0000u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00120000u; + SCE->REG_ECH = 0x1000d3c0u; + SCE->REG_ECH = 0x3800d80fu; + SCE->REG_ECH = 0x2000d3c1u; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x000000feu; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x1000d3c2u; + SCE->REG_ECH = 0x38008bc0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00003540u; + SCE->REG_ECH = 0x00003561u; + SCE->REG_ECH = 0x00003582u; + SCE->REG_ECH = 0x000035a3u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000029u); + HW_SCE_p_func101(0x068dd838u, 0xf01d1660u, 0x2496a07du, 0x5528979bu); + HW_SCE_p_func059(); + HW_SCE_p_func100(0x85c33db3u, 0xfaf76717u, 0x874d3287u, 0x50161587u); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_E0H = 0x80040080u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_100H = InData_KeyIndex[13]; + SCE->REG_100H = InData_KeyIndex[14]; + SCE->REG_100H = InData_KeyIndex[15]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x7dac9b7fu, 0x2a43d5c2u, 0x2af22cbeu, 0x0b247357u); + } + HW_SCE_p_func100(0x8bff74d4u, 0x226b6052u, 0x135a49e1u, 0xaf348c2bu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x66eabf73u, 0xf41d1e94u, 0xf9a72548u, 0x06165eacu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_7CH = 0x00000001u; + SCE->REG_7CH = 0x00000041u; + SCE->REG_104H = 0x00000051u; + SCE->REG_A4H = 0x00000a84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00005113u; + SCE->REG_74H = 0x00001000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_74H = 0x00000004u; + SCE->REG_104H = 0x00000354u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_74H = 0x00000002u; + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p29i_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29t.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29t.c new file mode 100644 index 000000000..4b72cf1d3 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29t.c @@ -0,0 +1,88 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128GcmEncryptUpdateTransitionSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_A4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000051u; + SCE->REG_B0H = 0x00000020u; + SCE->REG_A4H = 0x00008734u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p29t.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29u.c new file mode 100644 index 000000000..fc4621970 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p29u.c @@ -0,0 +1,123 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128GcmEncryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xd135b74du, 0x36d11479u, 0x00318697u, 0xeebc1beeu); + SCE->REG_00H = 0x80007100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x00000020u; + SCE->REG_A4H = 0x000087b6u; + SCE->REG_C4H = 0x00000886u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + for (iLoop = 4; iLoop < MAX_CNT; iLoop = iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + HW_SCE_p_func200();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x77860a67u, 0xe59ac361u, 0x8fe185ddu, 0xc14fe253u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p29u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p2b.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p2b.c new file mode 100644 index 000000000..1e2e4a30d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p2b.c @@ -0,0 +1,2301 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateRsa2048RandomKeyIndexSub(uint32_t MAX_CNT, uint32_t *OutData_PubKeyIndex, uint32_t *OutData_PrivKeyIndex) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00002b01u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0x8c22ebc6u, 0xbac7b812u, 0x923c6843u, 0xf8ce1439u); + HW_SCE_p_func103(); + HW_SCE_p_func100(0x94583792u, 0x24e30c80u, 0x32f50786u, 0x671c03ecu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01080c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_ECH = 0x00000a31u; + for(kLoop = 0; kLoop < MAX_CNT; kLoop = kLoop + 1) + { + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00003043u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00002f57u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00030005u); + SCE->REG_100H = change_endian_long(0x0007000bu); + SCE->REG_100H = change_endian_long(0x000d0011u); + SCE->REG_100H = change_endian_long(0x00130017u); + SCE->REG_100H = change_endian_long(0x001d001fu); + SCE->REG_100H = change_endian_long(0x00250029u); + SCE->REG_100H = change_endian_long(0x002b002fu); + SCE->REG_100H = change_endian_long(0x003b003du); + SCE->REG_100H = change_endian_long(0x00430047u); + SCE->REG_100H = change_endian_long(0x0049004fu); + SCE->REG_100H = change_endian_long(0x00530059u); + SCE->REG_100H = change_endian_long(0x00610065u); + SCE->REG_100H = change_endian_long(0x0067006bu); + SCE->REG_100H = change_endian_long(0x006d0071u); + SCE->REG_100H = change_endian_long(0x007f0083u); + SCE->REG_100H = change_endian_long(0x0089008bu); + SCE->REG_100H = change_endian_long(0x00950097u); + SCE->REG_100H = change_endian_long(0x009d00a3u); + SCE->REG_100H = change_endian_long(0x00a700adu); + SCE->REG_100H = change_endian_long(0x00b300b5u); + SCE->REG_100H = change_endian_long(0x00bf00c1u); + SCE->REG_100H = change_endian_long(0x00c500c7u); + SCE->REG_100H = change_endian_long(0x00d300dfu); + SCE->REG_100H = change_endian_long(0x00e300e5u); + SCE->REG_100H = change_endian_long(0x00e900efu); + SCE->REG_100H = change_endian_long(0x00f100fbu); + SCE->REG_100H = change_endian_long(0x01010107u); + SCE->REG_100H = change_endian_long(0x010d010fu); + SCE->REG_100H = change_endian_long(0x01150119u); + SCE->REG_100H = change_endian_long(0x011b0125u); + SCE->REG_100H = change_endian_long(0x01330137u); + SCE->REG_100H = change_endian_long(0x0139013du); + SCE->REG_100H = change_endian_long(0x014b0151u); + SCE->REG_100H = change_endian_long(0x015b015du); + SCE->REG_100H = change_endian_long(0x01610167u); + SCE->REG_100H = change_endian_long(0x016f0175u); + SCE->REG_100H = change_endian_long(0x017b017fu); + SCE->REG_100H = change_endian_long(0x0185018du); + SCE->REG_100H = change_endian_long(0x01910199u); + SCE->REG_100H = change_endian_long(0x01a301a5u); + SCE->REG_100H = change_endian_long(0x01af01b1u); + SCE->REG_100H = change_endian_long(0x01b701bbu); + SCE->REG_100H = change_endian_long(0x01c101c9u); + SCE->REG_100H = change_endian_long(0x01cd01cfu); + SCE->REG_100H = change_endian_long(0x01d301dfu); + SCE->REG_100H = change_endian_long(0x01e701ebu); + SCE->REG_100H = change_endian_long(0x01f301f7u); + SCE->REG_100H = change_endian_long(0x01fd0000u); + SCE->REG_ECH = 0x000008c6u; + SCE->REG_00H = 0x00000343u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x80b00006u; + SCE->REG_00H = 0x000083c3u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x009f0001u; + HW_SCE_p_func100(0x7e5acf8bu, 0xd2737edau, 0x4eae0493u, 0x1a30791cu); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000d01fu; + SCE->REG_E0H = 0x81040000u; + SCE->REG_00H = 0x00003813u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop = 0; iLoop < 24; iLoop = iLoop + 4) + { + HW_SCE_p_func100(0x07a1fbc9u, 0xe02e1b04u, 0xfe51796bu, 0x3e56e547u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xd2b54d13u, 0xf1bac9dbu, 0x985665fcu, 0x4686ee7du); + } + HW_SCE_p_func100(0x07a1fbc9u, 0xe02e1b04u, 0xfe51796bu, 0x3e56e547u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000d060u; + SCE->REG_E0H = 0x81040000u; + SCE->REG_00H = 0x00003813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000011u; + SCE->REG_104H = 0x00001f57u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0xB51EB851u); + SCE->REG_100H = change_endian_long(0xEB851EB8u); + SCE->REG_100H = change_endian_long(0x51EB851Eu); + SCE->REG_100H = change_endian_long(0xB851EB85u); + SCE->REG_100H = change_endian_long(0x1EB851EBu); + SCE->REG_100H = change_endian_long(0x851EB851u); + SCE->REG_100H = change_endian_long(0xEB851EB8u); + SCE->REG_100H = change_endian_long(0x51EB851Eu); + SCE->REG_100H = change_endian_long(0xB851EB85u); + SCE->REG_100H = change_endian_long(0x1EB851EBu); + SCE->REG_100H = change_endian_long(0x851EB851u); + SCE->REG_100H = change_endian_long(0xEB851EB8u); + SCE->REG_100H = change_endian_long(0x51EB851Eu); + SCE->REG_100H = change_endian_long(0xB851EB85u); + SCE->REG_100H = change_endian_long(0x1EB851EBu); + SCE->REG_100H = change_endian_long(0x851EB851u); + SCE->REG_100H = change_endian_long(0xEB851EB8u); + SCE->REG_100H = change_endian_long(0x51EB851Eu); + SCE->REG_100H = change_endian_long(0xB851EB85u); + SCE->REG_100H = change_endian_long(0x1EB851EBu); + SCE->REG_100H = change_endian_long(0x851EB851u); + SCE->REG_100H = change_endian_long(0xEB851EB8u); + SCE->REG_100H = change_endian_long(0x51EB851Eu); + SCE->REG_100H = change_endian_long(0xB851EB85u); + SCE->REG_100H = change_endian_long(0x1EB851EBu); + SCE->REG_100H = change_endian_long(0x851EB851u); + SCE->REG_100H = change_endian_long(0xEB851EB8u); + SCE->REG_100H = change_endian_long(0x51EB851Eu); + SCE->REG_100H = change_endian_long(0xB851EB85u); + SCE->REG_100H = change_endian_long(0x1EB851EBu); + SCE->REG_100H = change_endian_long(0x851EB851u); + SCE->REG_100H = change_endian_long(0xEB851B5Cu); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xf2a4147au, 0x0eab872fu, 0x3dd27a2bu, 0x1960df16u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x2b6e9024u, 0x64c4b8b0u, 0xb11bfcd4u, 0xf8f01459u); + continue; + } + else + { + HW_SCE_p_func101(0xbce884a9u, 0xb4300625u, 0xeb8ed2e5u, 0x145cbbdau); + } + SCE->REG_ECH = 0x38008a20u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x1ff30c58u, 0x2c43ede7u, 0x51891153u, 0xc6f0919au); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x491d7813u, 0x9669f2a6u, 0x8ab8a647u, 0xebc5b55fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001d91u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x512c888cu, 0xac3c9b30u, 0x350fde63u, 0xaae062a7u); + } + else + { + HW_SCE_p_func101(0xc1f2ef4fu, 0x557853acu, 0x59b8831bu, 0x4b149043u); + } + SCE->REG_2CH = 0x00000011u; + SCE->REG_104H = 0x00000357u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x10000000u); + SCE->REG_00H = 0x00003073u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x87807a30u, 0x9f5ca829u, 0xe1175f96u, 0x1a9e6e75u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x6e42246au, 0x0051e8dcu, 0x3afb2da8u, 0xfc5b0241u); + continue; + } + else + { + HW_SCE_p_func101(0xc6d10669u, 0x9f4ff89du, 0x8038e04au, 0x9a3e17b0u); + } + } + else + { + HW_SCE_p_func101(0x07901e4cu, 0x0cebe917u, 0x0f834a0eu, 0x9f2d080eu); + } + SCE->REG_ECH = 0x000008c6u; + SCE->REG_ECH = 0x0000094au; + for(iLoop = 0; iLoop < 96; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x01003906u; + SCE->REG_ECH = 0x00002cc0u; + SCE->REG_ECH = 0x00002cc0u; + SCE->REG_E0H = 0x81010100u; + SCE->REG_00H = 0x0000307fu; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00003807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00004006u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x85dde662u, 0xd8fc3123u, 0x89de60c8u, 0x07d5ef2eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x0000d140u; + HW_SCE_p_func101(0x28a65192u, 0xe2a959dbu, 0xd43404eau, 0x7339fd84u); + break; + } + else + { + HW_SCE_p_func101(0x11a06545u, 0x32ad1e6fu, 0xdeb595cdu, 0xe97bc932u); + } + } + SCE->REG_ECH = 0x38008940u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x11867603u, 0x6f83bc5au, 0xaa875c8du, 0x12f9e1ecu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0xa0c54035u, 0xdbc1038cu, 0x6dffe9ffu, 0x22939bb3u); + continue; + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_00H = 0x0000307fu; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000057u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00010001u); + SCE->REG_24H = 0x00004006u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x7c533ae2u, 0x000734a8u, 0x356810bau, 0x487c1ecfu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0xa64df750u, 0x1eacebc9u, 0xa9607bc6u, 0xea154560u); + } + else + { + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000189u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0x79f5b90au, 0xd7922a5au, 0xac0169c2u, 0x03577a52u); + SCE->REG_18H = 0x00000004u; + SCE->REG_38H = 0x00004080u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000044d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x8a4e89beu, 0xad785403u, 0x03489702u, 0x2497f830u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x0c4d57c7u, 0x3f5c6c0fu, 0x0a22b208u, 0xc6301377u); + continue; + } + SCE->REG_24H = 0x000098d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x80a0000au; + SCE->REG_00H = 0x00008383u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b560u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_B0H = 0x00000700u; + SCE->REG_A4H = 0x42e0873fu; + SCE->REG_00H = 0x00001383u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000051u; + SCE->REG_A4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_A4H = 0x400009cdu; + SCE->REG_00H = 0x00001113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x38008a20u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xf96cb05eu, 0x7a810f51u, 0x46e8fa5eu, 0x812236d7u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_7CH = 0x00000021u; + SCE->REG_00H = 0x00005113u; + SCE->REG_74H = 0x00000004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x87016245u, 0x5e83f673u, 0x602e7aebu, 0xeb5683b0u); + } + else + { + SCE->REG_7CH = 0x00000041u; + SCE->REG_00H = 0x00005113u; + SCE->REG_74H = 0x00000004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x239b33b8u, 0xd6eb409fu, 0x93df7b47u, 0xb35986dcu); + } + HW_SCE_p_func100(0xeaa4de27u, 0x5c6570b3u, 0x23239a44u, 0xb259bd4du); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000929u; + SCE->REG_ECH = 0x0000b4c0u; + SCE->REG_ECH = 0x000000fcu; + SCE->REG_ECH = 0x00003906u; + SCE->REG_ECH = 0x00008d00u; + SCE->REG_ECH = 0xfffffffeu; + SCE->REG_ECH = 0x00003d06u; + SCE->REG_ECH = 0x00000908u; + for(iLoop = 0; iLoop < 32; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x000038e6u; + SCE->REG_ECH = 0x0000a8c0u; + SCE->REG_ECH = 0x00000004u; + for(jLoop = 0; jLoop < 32; jLoop = jLoop + 1) + { + SCE->REG_ECH = 0x38008900u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x11816907u; + SCE->REG_ECH = 0x38008900u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x10002d20u; + SCE->REG_ECH = 0x000168e7u; + } + } + SCE->REG_ECH = 0x00003549u; + SCE->REG_ECH = 0x0000a540u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_ECH = 0x0002694au; + SCE->REG_E0H = 0x81010140u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + SCE->REG_ECH = 0x000037eau; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + for(iLoop = 0; iLoop < S_RAM[0]; iLoop = iLoop + 1) + { + SCE->REG_24H = 0x00000185u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000185u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000185u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000185u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x000033e0u; + HW_SCE_p_func101(0x25f7c21cu, 0xa58e2d37u, 0xc7d2c302u, 0x94a4950cu); + } + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func100(0x3ffbde47u, 0xdf842701u, 0x3ed2ea1fu, 0x92f4b6cdu); + SCE->REG_ECH = 0x00026d4au; + SCE->REG_ECH = 0x00002949u; + SCE->REG_E0H = 0x81010140u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + SCE->REG_ECH = 0x000037eau; + for(iLoop = 0; iLoop < S_RAM[0]; iLoop = iLoop + 1) + { + SCE->REG_24H = 0x2000018du; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x000033e0u; + HW_SCE_p_func101(0xf2494d23u, 0x208dc9cfu, 0x9eaacfe5u, 0xe3122179u); + } + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func100(0xb09a35c9u, 0x5d8bb3e6u, 0xfc920928u, 0x6f246efau); + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000a52u; + SCE->REG_24H = 0x00006404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006c04u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x81010160u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop = 0; iLoop < S_RAM[0]; iLoop = iLoop + 1) + { + SCE->REG_2CH = 0x00000010u; + for(jLoop = 0; jLoop < 32; jLoop = jLoop + 4) + { + HW_SCE_p_func100(0x80f0c0afu, 0xb016844bu, 0xab5eb905u, 0x9689d197u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x615822e9u, 0xfce99d10u, 0xc52ef231u, 0xd71f309au); + } + HW_SCE_p_func100(0xad8720efu, 0x8c70ba5eu, 0xc306a7e5u, 0x8d3defeeu); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00009008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_18H = 0x00000004u; + SCE->REG_38H = 0x00000c40u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x5025e1b2u, 0xe9c90814u, 0x20f9ebb3u, 0x8d9af69eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x00002e40u; + HW_SCE_p_func101(0x400c3652u, 0x19b00af6u, 0x415d810du, 0x6580bbf1u); + } + else + { + HW_SCE_p_func100(0x87f0e1cbu, 0x06afd9adu, 0xc94c17ecu, 0xc9d9cfc0u); + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006c04u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_E0H = 0x81010120u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0+1 + 0] = change_endian_long(SCE->REG_100H); + SCE->REG_ECH = 0x000037e9u; + for(jLoop = 0; jLoop < S_RAM[0+1]; jLoop = jLoop + 1) + { + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x8ec7a622u, 0xc2ecfd33u, 0x4596d1b1u, 0xdd384955u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (0u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x00002e40u; + HW_SCE_p_func101(0xd4b47306u, 0x947e48e2u, 0xe08a050cu, 0x6baf7466u); + break; + } + else + { + SCE->REG_24H = 0x00004c0cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000880cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xe518ad9du, 0x5640af24u, 0x34eac94eu, 0x014d63edu); + } + } + SCE->REG_ECH = 0x38008a40u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x98765488u, 0x67b2035eu, 0x3880187bu, 0x02273ca1u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0xdbe391c8u, 0xe36886d3u, 0x44ecc41bu, 0x542e2e2du); + break; + } + else + { + HW_SCE_p_func101(0x624f8893u, 0xe40b8b49u, 0x8082da1au, 0xc20670a6u); + } + } + } + SCE->REG_ECH = 0x38000a4bu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xd67e7880u, 0xe9c8649eu, 0x28a2b1cau, 0xa1387d95u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_ECH = 0x00002e20u; + SCE->REG_ECH = 0x38008a20u; + SCE->REG_ECH = 0x00000002u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xc0f8142au, 0x43ece9e1u, 0xe5a42c4cu, 0x95e232e0u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x144c6c66u, 0x8a422809u, 0xaca7266eu, 0xcd70f9f0u); + break; + } + else + { + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x817dcc5du, 0x7630144fu, 0x631df7e6u, 0xd908d8c8u); + } + } + else + { + HW_SCE_p_func101(0xdbba2aa6u, 0xbe5543d3u, 0xd39ab5a0u, 0x758fd189u); + } + } + } + SCE->REG_ECH = 0x38008a20u; + SCE->REG_ECH = 0x00000002u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x43009d9cu, 0xb0aaa3a1u, 0x29a32de2u, 0x777a8077u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xdcc9ddc5u, 0x77d8925bu, 0xe4eec2cfu, 0x8a66a099u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + HW_SCE_p_func100(0xc897604bu, 0x7ea24896u, 0x6b2b64f0u, 0x4757ffa2u); + SCE->REG_ECH = 0x0000b5c0u; + SCE->REG_ECH = 0x00010001u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x42e087bfu; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_04H = 0x00000202u; + for (iLoop = 0; iLoop < 64; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[iLoop + 0] = SCE->REG_100H; + S_HEAP[iLoop + 1] = SCE->REG_100H; + S_HEAP[iLoop + 2] = SCE->REG_100H; + S_HEAP[iLoop + 3] = SCE->REG_100H; + } + HW_SCE_p_func100(0xf04437edu, 0xd2f2aa45u, 0x8905e13bu, 0x87f50a93u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x400009cdu; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[iLoop + 0] = SCE->REG_100H; + S_HEAP[iLoop + 1] = SCE->REG_100H; + S_HEAP[iLoop + 2] = SCE->REG_100H; + S_HEAP[iLoop + 3] = SCE->REG_100H; + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + while(1) + { + SCE->REG_24H = 0x00008006u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x02a10e8bu, 0x345b9ec9u, 0x69707df5u, 0xf1d88be4u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func101(0x9493fa8fu, 0xc27e5124u, 0x25f9ca01u, 0x5acd770du); + break; + } + else + { + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000d0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x0c4f97b0u, 0x9a3e48e8u, 0x89031f6bu, 0x5b814724u); + } + } + SCE->REG_24H = 0x000094d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000c002u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000dcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000000u; + SCE->REG_24H = 0x0000b80au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x000030ffu; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000057u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00010001u); + SCE->REG_2CH = 0x00000002u; + SCE->REG_24H = 0x0000c002u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_E0H = 0x800100c0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b500u; + SCE->REG_ECH = 0x00010001u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + while(1) + { + HW_SCE_p_func100(0x2601c365u, 0x86269c2cu, 0x8bd2d673u, 0x7fd6e24eu); + HW_SCE_p_func103(); + HW_SCE_p_func100(0x628d9e05u, 0xdbb7daa3u, 0xa04bf479u, 0x0ed0c908u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01090c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_ECH = 0x0000094au; + SCE->REG_E0H = 0x80c0000au; + SCE->REG_00H = 0x00018303u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x91cef570u, 0x5ddcb017u, 0x1a28922fu, 0xde55c6f6u); + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x42e097bfu; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + SCE->REG_04H = 0x00000202u; + for (iLoop=68; iLoop<132; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[iLoop + 0] = SCE->REG_100H; + S_HEAP[iLoop + 1] = SCE->REG_100H; + S_HEAP[iLoop + 2] = SCE->REG_100H; + S_HEAP[iLoop + 3] = SCE->REG_100H; + } + HW_SCE_p_func100(0x85c5fb6eu, 0xd3462e3cu, 0xefde4039u, 0x337f35b6u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x400019cdu; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[iLoop + 0] = SCE->REG_100H; + S_HEAP[iLoop + 1] = SCE->REG_100H; + S_HEAP[iLoop + 2] = SCE->REG_100H; + S_HEAP[iLoop + 3] = SCE->REG_100H; + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_00H = 0x0000301fu; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x810100c0u; + SCE->REG_00H = 0x00003807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000301fu; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x81010100u; + SCE->REG_00H = 0x00003807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_2CH = 0x00000000u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c002u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00003506u; + SCE->REG_E0H = 0x800100c0u; + SCE->REG_00H = 0x0000031fu; + SCE->REG_2CH = 0x0000002cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x380088c0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x84072e81u, 0xb4707fe1u, 0x210e80f2u, 0x478f4a77u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00003f61u; + SCE->REG_B0H = 0x00000f00u; + SCE->REG_A4H = 0x42f087bfu; + SCE->REG_00H = 0x00013103u; + SCE->REG_2CH = 0x00000014u; + for (iLoop = 0; iLoop < 64; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[iLoop + 0]; + SCE->REG_100H = S_HEAP[iLoop + 1]; + SCE->REG_100H = S_HEAP[iLoop + 2]; + SCE->REG_100H = S_HEAP[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x4d7de79eu, 0x7aee29b9u, 0xfdb1ad36u, 0xe56bb109u); + break; + } + else + { + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_00H = 0x00003083u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x0000880eu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00003f62u; + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x42f097bfu; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + for (iLoop=68; iLoop<132; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[iLoop + 0]; + SCE->REG_100H = S_HEAP[iLoop + 1]; + SCE->REG_100H = S_HEAP[iLoop + 2]; + SCE->REG_100H = S_HEAP[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x400017bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[iLoop + 0]; + SCE->REG_100H = S_HEAP[iLoop + 1]; + SCE->REG_100H = S_HEAP[iLoop + 2]; + SCE->REG_100H = S_HEAP[iLoop + 3]; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000094au; + SCE->REG_E0H = 0x81c0000au; + SCE->REG_00H = 0x00013803u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xd78e57d3u, 0x88d3ecf5u, 0x786fbc37u, 0x62fe7edfu); + } + } + SCE->REG_ECH = 0x00007c06u; + SCE->REG_1CH = 0x00602000u; + SCE->REG_A4H = 0x400007bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[iLoop + 0]; + SCE->REG_100H = S_HEAP[iLoop + 1]; + SCE->REG_100H = S_HEAP[iLoop + 2]; + SCE->REG_100H = S_HEAP[iLoop + 3]; + SCE->REG_A4H = 0x00800c45u; + SCE->REG_00H = 0x00001113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xe8af30a3u, 0x68c2064eu, 0x712f8903u, 0xf66d4c14u); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0xd6fee8b4u, 0xfeb8e1cfu, 0xec897771u, 0x8805760eu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01090c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func100(0x7a264cd4u, 0x63f846bdu, 0x4e808fcau, 0xacfd971fu); + SCE->REG_D0H = 0x00000f00u; + SCE->REG_C4H = 0x42e097bfu; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + SCE->REG_04H = 0x00000202u; + for (iLoop=68; iLoop<132; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[iLoop + 0] = SCE->REG_100H; + S_HEAP[iLoop + 1] = SCE->REG_100H; + S_HEAP[iLoop + 2] = SCE->REG_100H; + S_HEAP[iLoop + 3] = SCE->REG_100H; + } + HW_SCE_p_func100(0x771da7e3u, 0x9729dd62u, 0xae475f17u, 0x8047367cu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x400019cdu; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_HEAP[iLoop + 0] = SCE->REG_100H; + S_HEAP[iLoop + 1] = SCE->REG_100H; + S_HEAP[iLoop + 2] = SCE->REG_100H; + S_HEAP[iLoop + 3] = SCE->REG_100H; + HW_SCE_p_func100(0x34fa079fu, 0x31773c42u, 0xb11338adu, 0x91df1e11u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_24H = 0x0000b8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000002u; + SCE->REG_24H = 0x00007b0au; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0xfcbf0001u; + SCE->REG_24H = 0x0000c8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000002bu); + HW_SCE_p_func101(0x04fca964u, 0x90725814u, 0x17b38229u, 0xc9c8f0b5u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000002bu); + HW_SCE_p_func101(0xea8d2962u, 0x23b0c731u, 0x02063f7bu, 0x360e6545u); + HW_SCE_p_func044(); + HW_SCE_p_func100(0xfb3eaadcu, 0x1b4c926bu, 0x41d898b5u, 0x5d237607u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func100(0x15b39e7du, 0xbc172d9fu, 0x0dbd45d3u, 0x9d30cd21u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_04H = 0x00000202u; + for(iLoop=0; iLoop<64; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[iLoop+1 + 0] = SCE->REG_100H; + OutData_PubKeyIndex[iLoop+1 + 1] = SCE->REG_100H; + OutData_PubKeyIndex[iLoop+1 + 2] = SCE->REG_100H; + OutData_PubKeyIndex[iLoop+1 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xea7a2df8u, 0x6d487225u, 0x96637959u, 0xd7948d95u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08884u; + SCE->REG_E0H = 0x810101c0u; + SCE->REG_00H = 0x00002807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[65] = SCE->REG_100H; + OutData_PubKeyIndex[66] = SCE->REG_100H; + OutData_PubKeyIndex[67] = SCE->REG_100H; + OutData_PubKeyIndex[68] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B6) + { + /* waiting */ + } + HW_SCE_p_func100(0xf17df3bdu, 0xa237d4c4u, 0x31891948u, 0x398bde44u); + SCE->REG_18H = 0x00000004u; + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_24H = 0x00004804u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00e087b7u; + SCE->REG_04H = 0x00000202u; + for(iLoop=68; iLoop<132; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[iLoop+1 + 0] = SCE->REG_100H; + OutData_PubKeyIndex[iLoop+1 + 1] = SCE->REG_100H; + OutData_PubKeyIndex[iLoop+1 + 2] = SCE->REG_100H; + OutData_PubKeyIndex[iLoop+1 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x77aecc1au, 0xc4e61c3cu, 0x32de60c5u, 0xc40e7285u); + SCE->REG_104H = 0x00000352u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000010u); + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[133] = SCE->REG_100H; + OutData_PubKeyIndex[134] = SCE->REG_100H; + OutData_PubKeyIndex[135] = SCE->REG_100H; + OutData_PubKeyIndex[136] = SCE->REG_100H; + HW_SCE_p_func100(0xb77e9d11u, 0x739cdbb4u, 0xb03798c4u, 0x99c1079bu); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000fdu); + HW_SCE_p_func101(0x394f8441u, 0xfba13dc3u, 0x22815382u, 0xff49cec6u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000000du; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000fdu); + HW_SCE_p_func101(0x66692d56u, 0x5e6c77cau, 0xed7b634fu, 0x905615c9u); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x35fa4854u, 0xcef1ec09u, 0xab49a001u, 0x599a6c24u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func100(0x06f73d5fu, 0x532f17d5u, 0x54dc5af0u, 0x6eee362du); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x02e087b7u; + SCE->REG_04H = 0x00000202u; + for(iLoop=0; iLoop<64; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[iLoop+1 + 0] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 1] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 2] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xbecdb75cu, 0xbca8b94eu, 0x0b91504cu, 0xc1f7fc25u); + SCE->REG_00H = 0x00012103u; + SCE->REG_104H = 0x00000031u; + SCE->REG_B0H = 0x00000f00u; + SCE->REG_A4H = 0x42f097bfu; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00e087b7u; + SCE->REG_04H = 0x00000202u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[68]; + SCE->REG_100H = S_HEAP[69]; + SCE->REG_100H = S_HEAP[70]; + SCE->REG_100H = S_HEAP[71]; + for (iLoop = 64; iLoop < 124 ; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[iLoop+8 + 0]; + SCE->REG_100H = S_HEAP[iLoop+8 + 1]; + SCE->REG_100H = S_HEAP[iLoop+8 + 2]; + SCE->REG_100H = S_HEAP[iLoop+8 + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[iLoop+1 + 0] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 1] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 2] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[iLoop+1 + 0] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 1] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 2] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 3] = SCE->REG_100H; + SCE->REG_104H = 0x00000000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_C8H_b.B6) + { + /* waiting */ + } + SCE->REG_A4H = 0x400017bdu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_HEAP[132]; + SCE->REG_100H = S_HEAP[133]; + SCE->REG_100H = S_HEAP[134]; + SCE->REG_100H = S_HEAP[135]; + SCE->REG_A4H = 0x00800c45u; + SCE->REG_00H = 0x00001113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x9ac4e83au, 0xf48e1713u, 0xe59c8f74u, 0xb22f3529u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00e087b7u; + SCE->REG_04H = 0x00000202u; + for(iLoop=128; iLoop<192; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[iLoop+1 + 0] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 1] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 2] = SCE->REG_100H; + OutData_PrivKeyIndex[iLoop+1 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x36d14ec8u, 0xb8c807a7u, 0x74d82cfdu, 0x7a62a60bu); + SCE->REG_104H = 0x00000352u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000030u); + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[193] = SCE->REG_100H; + OutData_PrivKeyIndex[194] = SCE->REG_100H; + OutData_PrivKeyIndex[195] = SCE->REG_100H; + OutData_PrivKeyIndex[196] = SCE->REG_100H; + HW_SCE_p_func102(0x772f0564u, 0x25d380e3u, 0x92a87dc9u, 0x37b7f321u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p2b_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32a.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32a.c new file mode 100644 index 000000000..fbf460a87 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32a.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128GcmDecryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x000000b4u; + for (iLoop = 0; iLoop < MAX_CNT; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataA[iLoop + 0]; + SCE->REG_100H = InData_DataA[iLoop + 1]; + SCE->REG_100H = InData_DataA[iLoop + 2]; + SCE->REG_100H = InData_DataA[iLoop + 3]; + } + SCE->REG_104H = 0x00000000u; + HW_SCE_p_func101(0xbb74c4ecu, 0xf373c42au, 0xcf167a41u, 0x01ba60d7u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p32a.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32f.c new file mode 100644 index 000000000..dfabe2dd2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32f.c @@ -0,0 +1,301 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes128GcmDecryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataT, uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *InData_DataTLen, uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000168u; + SCE->REG_E0H = 0x80020100u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[1]; + SCE->REG_ECH = 0x0000b580u; + SCE->REG_ECH = 0x0000007Fu; + SCE->REG_ECH = 0x0000b5a0u; + SCE->REG_ECH = 0xFFFFFF00u; + SCE->REG_ECH = 0x0c0029a9u; + SCE->REG_ECH = 0x04a02988u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010140u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataTLen[0]; + SCE->REG_ECH = 0x38008940u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x34202beau; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xe345fde3u, 0x2356cb88u, 0xa560904eu, 0xdbc1d8feu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xf54b1f76u, 0x2f5a2aafu, 0xb19cb855u, 0xc7b45181u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x00003409u; + SCE->REG_ECH = 0x00036800u; + SCE->REG_ECH = 0x08008c00u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x2334eeedu, 0xa7dc4fb9u, 0x14fdd072u, 0x6a73430bu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00000885u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_D0H = 0x00000020u; + SCE->REG_C4H = 0x000087b5u; + SCE->REG_00H = 0x00007113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bffu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002be0u; + SCE->REG_ECH = 0x12003c3fu; + SCE->REG_ECH = 0x00002fe0u; + } + HW_SCE_p_func100(0xc455334au, 0xb086101bu, 0x21bdd270u, 0x96aa95c4u); + SCE->REG_C4H = 0x00000885u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x81840001u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000213u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + HW_SCE_p_func101(0xa64451e5u, 0xd6dfce91u, 0x9ea12341u, 0xdb8910d2u); + } + SCE->REG_104H = 0x00000164u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataALen[0]; + SCE->REG_100H = InData_DataALen[1]; + SCE->REG_E0H = 0x81020100u; + SCE->REG_00H = 0x0000580bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001600u; + SCE->REG_74H = 0x00000000u; + SCE->REG_C4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_D0H = 0x00000020u; + SCE->REG_C4H = 0x000087b5u; + SCE->REG_00H = 0x00002513u; + SCE->REG_74H = 0x00000008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bffu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002beau; + SCE->REG_ECH = 0x12003c3fu; + SCE->REG_ECH = 0x00002fe0u; + } + SCE->REG_104H = 0x00000362u; + SCE->REG_C4H = 0x00050805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataT[0]; + SCE->REG_100H = InData_DataT[1]; + SCE->REG_100H = InData_DataT[2]; + SCE->REG_100H = InData_DataT[3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x81840001u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x00000000u; + HW_SCE_p_func100(0xffff5ca7u, 0x6a8cdc67u, 0x10a7aad0u, 0xbe4102d8u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x21114e57u, 0x64bc06a8u, 0x18c1a96eu, 0xf12e134eu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_AUTHENTICATION; + } + else + { + HW_SCE_p_func102(0x54f55d1cu, 0x159ecbc9u, 0x3f90b5c6u, 0x9629a939u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p32f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32i.c new file mode 100644 index 000000000..5b16e3114 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32i.c @@ -0,0 +1,516 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes128GcmDecryptInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t *InData_IV) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00003201u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyType[0]; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x38008800u; + SCE->REG_ECH = 0x00000002u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x717c7867u, 0x54b3db59u, 0xf733f6adu, 0x08933694u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xb32b9023u, 0x24f2ee1au, 0x9b53c05au, 0x9a3965beu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000032u); + HW_SCE_p_func101(0x5ac26175u, 0x3e3950b9u, 0x3a17208du, 0xacd9c2fcu); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000005u; + HW_SCE_p_func101(0xfc2e4213u, 0xa406243cu, 0x89b4493cu, 0xd459c7bau); + } + else + { + SCE->REG_ECH = 0x00003547u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000032u); + HW_SCE_p_func101(0x3136f03du, 0x13cefeacu, 0x38471846u, 0xb5290306u); + HW_SCE_p_func068(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0146c04bu; + HW_SCE_p_func101(0x5d699af5u, 0x8e5d7ed4u, 0x709a8d2bu, 0x2ee32018u); + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000032u); + HW_SCE_p_func101(0x7a5351fdu, 0x60372278u, 0x4f1ff6c5u, 0xa75f4137u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040080u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0xd6326ea8u, 0x43f9f29fu, 0xcd13f106u, 0x80e8934bu); + } + else + { + SCE->REG_ECH = 0x38008800u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x34d06864u, 0xfcdeb896u, 0x6bf199cau, 0x8dd419d7u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x00ff0000u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00120000u; + SCE->REG_ECH = 0x1000d3c0u; + SCE->REG_ECH = 0x3800d80eu; + SCE->REG_ECH = 0x2000d3c1u; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x000000feu; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x1000d3c2u; + SCE->REG_ECH = 0x38008bc0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00003540u; + SCE->REG_ECH = 0x00003561u; + SCE->REG_ECH = 0x00003582u; + SCE->REG_ECH = 0x000035a3u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000032u); + HW_SCE_p_func101(0xfdbb289cu, 0xb29b7e31u, 0x8abf765cu, 0x1f97cc5eu); + HW_SCE_p_func059(); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_E0H = 0x80040080u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_100H = InData_KeyIndex[13]; + SCE->REG_100H = InData_KeyIndex[14]; + SCE->REG_100H = InData_KeyIndex[15]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xa077dacau, 0x4e0be9edu, 0x33810a24u, 0x5b0571bbu); + } + else + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010140u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000005u); + HW_SCE_p_func101(0x9b614c1au, 0xbb50c8ccu, 0xaed5668du, 0x7f6205dau); + HW_SCE_p_func068(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0195f71du; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000005u); + HW_SCE_p_func101(0xae0bda23u, 0x6d486cb9u, 0x4cd9b7bbu, 0xc741ba11u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_E0H = 0x80040080u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xa7c07c76u, 0xc417f413u, 0x41723116u, 0x10163c9fu); + } + } + HW_SCE_p_func100(0xf6afb1f0u, 0x49b85b75u, 0x1de05501u, 0x9a451cf9u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xb07a6c46u, 0x392fbf2cu, 0x101414cfu, 0x13d1fd8au); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x4bc6b123u, 0x27352405u, 0xd72a388eu, 0x427382d1u); + SCE->REG_E0H = 0x81040000u; + SCE->REG_C4H = 0x00080805u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_7CH = 0x00000001u; + SCE->REG_7CH = 0x00000041u; + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000a84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00005213u; + SCE->REG_74H = 0x00001000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_74H = 0x00000004u; + SCE->REG_104H = 0x00000354u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_74H = 0x00000002u; + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p32i_r2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32t.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32t.c new file mode 100644 index 000000000..774787274 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32t.c @@ -0,0 +1,88 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128GcmDecryptUpdateTransitionSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_C4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x00000020u; + SCE->REG_C4H = 0x00008734u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p32t.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32u.c new file mode 100644 index 000000000..e675059bb --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p32u.c @@ -0,0 +1,123 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128GcmDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0xee3369f2u, 0x4cc24009u, 0xa590fb85u, 0x1e4adbfau); + SCE->REG_00H = 0x80007100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00000886u; + SCE->REG_D0H = 0x00000020u; + SCE->REG_C4H = 0x000087b6u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + for (iLoop = 4; iLoop < MAX_CNT; iLoop = iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + HW_SCE_p_func200();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x00387a92u, 0xed4c3d7du, 0x8509db59u, 0x6fa710fbu); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p32u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34a.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34a.c new file mode 100644 index 000000000..4726e3859 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34a.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256GcmEncryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x000000b4u; + for (iLoop = 0; iLoop < MAX_CNT; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataA[iLoop + 0]; + SCE->REG_100H = InData_DataA[iLoop + 1]; + SCE->REG_100H = InData_DataA[iLoop + 2]; + SCE->REG_100H = InData_DataA[iLoop + 3]; + } + SCE->REG_104H = 0x00000000u; + HW_SCE_p_func101(0x65222c83u, 0xcd363485u, 0xa00084afu, 0x0097f3ddu); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p34a.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34f.c new file mode 100644 index 000000000..fa240ecd4 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34f.c @@ -0,0 +1,232 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes256GcmEncryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *OutData_Text, uint32_t *OutData_DataT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000168u; + SCE->REG_E0H = 0x80020100u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[1]; + SCE->REG_ECH = 0x0000b580u; + SCE->REG_ECH = 0x0000007Fu; + SCE->REG_ECH = 0x0000b5a0u; + SCE->REG_ECH = 0xFFFFFF00u; + SCE->REG_ECH = 0x0c0029a9u; + SCE->REG_ECH = 0x04a02988u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xa2ab3ccbu, 0x3ea9b7f2u, 0x3b45fa5bu, 0xfac762d6u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x777e8592u, 0x90e4b57au, 0x7f2ed30fu, 0x2e356c35u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x00003409u; + SCE->REG_ECH = 0x00036800u; + SCE->REG_ECH = 0x08008c00u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xe4e6cd10u, 0x3d0d8d18u, 0x895d69adu, 0xafeb01eau); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_B0H = 0x40000020u; + SCE->REG_A4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bffu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002be0u; + SCE->REG_ECH = 0x12003c3fu; + SCE->REG_ECH = 0x00002fe0u; + } + HW_SCE_p_func100(0x3352beb1u, 0x697d6205u, 0x55fced5eu, 0x0fa0b58fu); + SCE->REG_A4H = 0x00000885u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x81840001u; + SCE->REG_00H = 0x00004813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000113u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + HW_SCE_p_func101(0xa76d4578u, 0x5bffb46eu, 0xd9142159u, 0x21b1a27eu); + } + SCE->REG_104H = 0x00000164u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataALen[0]; + SCE->REG_100H = InData_DataALen[1]; + SCE->REG_E0H = 0x81020100u; + SCE->REG_00H = 0x0000580bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001600u; + SCE->REG_74H = 0x00000000u; + SCE->REG_A4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x49d5260eu, 0x6eabc9cdu, 0x9f44122du, 0x2f7a78a6u); + SCE->REG_B0H = 0x40000020u; + SCE->REG_A4H = 0x000087b5u; + SCE->REG_00H = 0x00001513u; + SCE->REG_74H = 0x00000008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000113u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_DataT[0] = SCE->REG_100H; + OutData_DataT[1] = SCE->REG_100H; + OutData_DataT[2] = SCE->REG_100H; + OutData_DataT[3] = SCE->REG_100H; + HW_SCE_p_func102(0x213da8b3u, 0x9303aa36u, 0x5b9260beu, 0x4508a912u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p34f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34i.c new file mode 100644 index 000000000..ffb1c05c5 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34i.c @@ -0,0 +1,240 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes256GcmEncryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00003401u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000034u); + HW_SCE_p_func101(0x4f1e8043u, 0x4502e53fu, 0x43702881u, 0x0158ec3du); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000034u); + HW_SCE_p_func101(0xb24b7cd7u, 0xdafe0b5cu, 0xfc302551u, 0x142780eeu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x3dadf477u, 0xaa79b613u, 0xe024c3e0u, 0x6739d560u); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x0dc0d94du, 0x916dcb2au, 0x0abb86a0u, 0x6c1b2403u); + SCE->REG_A4H = 0x00090805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x653cab86u, 0x62f0afbeu, 0x0e891ff6u, 0x6f16d588u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x8bbd7bcbu, 0xb89b00efu, 0xa480cd72u, 0xbc8671cfu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040080u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[3]; + SCE->REG_7CH = 0x00000001u; + SCE->REG_7CH = 0x00000041u; + SCE->REG_104H = 0x00000051u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x00008a84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00005113u; + SCE->REG_74H = 0x00001000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_74H = 0x00000004u; + SCE->REG_104H = 0x00000354u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_74H = 0x00000002u; + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p34i.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34t.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34t.c new file mode 100644 index 000000000..8d1531a24 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34t.c @@ -0,0 +1,88 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256GcmEncryptUpdateTransitionSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_A4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000051u; + SCE->REG_B0H = 0x00000020u; + SCE->REG_A4H = 0x00008734u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p34t.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34u.c new file mode 100644 index 000000000..0a5cb67c1 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p34u.c @@ -0,0 +1,123 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256GcmEncryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0x94658c4fu, 0xe13a0b2fu, 0x5b75a986u, 0xebbaa242u); + SCE->REG_00H = 0x80007100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x40000020u; + SCE->REG_A4H = 0x000087b6u; + SCE->REG_C4H = 0x00000886u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + for (iLoop = 4; iLoop < MAX_CNT; iLoop = iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + HW_SCE_p_func200();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x5b8ac4aau, 0x7d383cd9u, 0x1d09e873u, 0x3f17373fu); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p34u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36a.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36a.c new file mode 100644 index 000000000..5d5e1631e --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36a.c @@ -0,0 +1,85 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256GcmDecryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x000000b4u; + for (iLoop = 0; iLoop < MAX_CNT; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataA[iLoop + 0]; + SCE->REG_100H = InData_DataA[iLoop + 1]; + SCE->REG_100H = InData_DataA[iLoop + 2]; + SCE->REG_100H = InData_DataA[iLoop + 3]; + } + SCE->REG_104H = 0x00000000u; + HW_SCE_p_func101(0x7b602332u, 0xc4339367u, 0xf9d25d4bu, 0x632c076eu); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p36a.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36f.c new file mode 100644 index 000000000..3e3e0609d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36f.c @@ -0,0 +1,301 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes256GcmDecryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataT, uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *InData_DataTLen, uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_104H = 0x00000168u; + SCE->REG_E0H = 0x80020100u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_TextLen[1]; + SCE->REG_ECH = 0x0000b580u; + SCE->REG_ECH = 0x0000007Fu; + SCE->REG_ECH = 0x0000b5a0u; + SCE->REG_ECH = 0xFFFFFF00u; + SCE->REG_ECH = 0x0c0029a9u; + SCE->REG_ECH = 0x04a02988u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010140u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataTLen[0]; + SCE->REG_ECH = 0x38008940u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_ECH = 0x34202beau; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x18cbbc67u, 0xb6f57f2eu, 0xde3361b3u, 0x6adcdf24u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x4f0d908du, 0xf301e51bu, 0xcf69e9efu, 0x651a3635u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x00003409u; + SCE->REG_ECH = 0x00036800u; + SCE->REG_ECH = 0x08008c00u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x5d383a10u, 0x51e5e005u, 0x791700abu, 0x579427d6u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00000885u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_D0H = 0x40000020u; + SCE->REG_C4H = 0x000087b5u; + SCE->REG_00H = 0x00007113u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bffu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002be0u; + SCE->REG_ECH = 0x12003c3fu; + SCE->REG_ECH = 0x00002fe0u; + } + HW_SCE_p_func100(0x6c205451u, 0x3598ed83u, 0x6671b2c1u, 0x5e0c223du); + SCE->REG_C4H = 0x00000885u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x81840001u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000213u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + HW_SCE_p_func101(0x21068dd5u, 0xaff8800bu, 0x4dd41e59u, 0x4790d650u); + } + SCE->REG_104H = 0x00000164u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataALen[0]; + SCE->REG_100H = InData_DataALen[1]; + SCE->REG_E0H = 0x81020100u; + SCE->REG_00H = 0x0000580bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001600u; + SCE->REG_74H = 0x00000000u; + SCE->REG_C4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_D0H = 0x40000020u; + SCE->REG_C4H = 0x000087b5u; + SCE->REG_00H = 0x00002513u; + SCE->REG_74H = 0x00000008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bffu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002beau; + SCE->REG_ECH = 0x12003c3fu; + SCE->REG_ECH = 0x00002fe0u; + } + SCE->REG_104H = 0x00000362u; + SCE->REG_C4H = 0x00050805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_DataT[0]; + SCE->REG_100H = InData_DataT[1]; + SCE->REG_100H = InData_DataT[2]; + SCE->REG_100H = InData_DataT[3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x81840001u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x00000000u; + HW_SCE_p_func100(0xa74fff9au, 0xd3933c3bu, 0x43f4b2ceu, 0x4a7e5283u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x2e4778e7u, 0x1e5f555bu, 0x893c4abfu, 0x7241f880u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_AUTHENTICATION; + } + else + { + HW_SCE_p_func102(0x7a084c94u, 0x6fda4b16u, 0xef812686u, 0xb0c16c35u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p36f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36i.c new file mode 100644 index 000000000..ff463a376 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36i.c @@ -0,0 +1,249 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes256GcmDecryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00003601u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000036u); + HW_SCE_p_func101(0x6e47a7bcu, 0x4d4dda09u, 0xd4fd37e3u, 0x4e9d6be8u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000036u); + HW_SCE_p_func101(0x08681549u, 0x364e6a94u, 0xce358c02u, 0x20f838b3u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_E0H = 0x80080000u; + SCE->REG_00H = 0x00008223u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x8e70b58cu, 0xd001ee91u, 0x5ae7a0b3u, 0xf136c4d9u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xa9e6f3aeu, 0xacd0bfaau, 0xe005a0fdu, 0xae5b258au); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0xb06163bdu, 0x5e4525d5u, 0x8415ba90u, 0x28857abbu); + SCE->REG_E0H = 0x81080000u; + SCE->REG_C4H = 0x00080805u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x2ed25b81u, 0x0831d289u, 0xc21be4dfu, 0xbe708663u); + SCE->REG_C4H = 0x00090805u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040080u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[3]; + SCE->REG_7CH = 0x00000001u; + SCE->REG_7CH = 0x00000041u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00008a84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00005213u; + SCE->REG_74H = 0x00001000u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_74H = 0x00000004u; + SCE->REG_104H = 0x00000354u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_74H = 0x00000002u; + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p36i.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36t.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36t.c new file mode 100644 index 000000000..310b113da --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36t.c @@ -0,0 +1,88 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256GcmDecryptUpdateTransitionSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_C4H = 0x00040805u; + SCE->REG_E0H = 0x81040080u; + SCE->REG_00H = 0x00002813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x00000020u; + SCE->REG_C4H = 0x00008734u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p36t.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36u.c new file mode 100644 index 000000000..ef9b1836f --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p36u.c @@ -0,0 +1,123 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256GcmDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func100(0x001e4f2bu, 0x3c22c7bau, 0x4a63c948u, 0x18076020u); + SCE->REG_00H = 0x80007100u; + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00000886u; + SCE->REG_D0H = 0x40000020u; + SCE->REG_C4H = 0x000087b6u; + SCE->REG_04H = 0x0000c200u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + for (iLoop = 4; iLoop < MAX_CNT; iLoop = iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + HW_SCE_p_func200();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x07698af7u, 0xd862af5au, 0x4e5cb293u, 0x1d825a3fu); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p36u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p40.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p40.c new file mode 100644 index 000000000..534b6bc32 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p40.c @@ -0,0 +1,356 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_LoadHukSub(uint32_t *InData_LC) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00004001u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + HW_SCE_p_func048(InData_LC); + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000009u; + SCE->REG_ECH = 0x34202801u; + SCE->REG_ECH = 0x20003401u; + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00602000u; +if (InData_LC[0] == 0x00000000) + { + SCE->REG_1CH = 0x00b80000u; + HW_SCE_p_func101(0xe83b7e4eu, 0xdb097f27u, 0xb31d59d5u, 0x0daab77bu); + } +else if (InData_LC[0] == 0x00000001) + { + SCE->REG_1CH = 0x00b00000u; + HW_SCE_p_func101(0x78659d26u, 0x860f5f45u, 0x80267e4eu, 0x1f70b510u); + } +else if (InData_LC[0] == 0x00000002) + { + SCE->REG_1CH = 0x00b10000u; + HW_SCE_p_func101(0x2751871bu, 0xe89c2f48u, 0xf573d4cfu, 0x115ecb07u); + } +else if (InData_LC[0] == 0x00000003) + { + SCE->REG_1CH = 0x00b20000u; + HW_SCE_p_func101(0xbba17e71u, 0xbc808154u, 0x1e078979u, 0x86405b9au); + } +else if (InData_LC[0] == 0x00000004) + { + SCE->REG_1CH = 0x00b30000u; + HW_SCE_p_func101(0x4f20b598u, 0xd0dabac4u, 0xc7ad0190u, 0x75198e1cu); + } +else if (InData_LC[0] == 0x00000005) + { + SCE->REG_1CH = 0x00b40000u; + HW_SCE_p_func101(0xf19a5f31u, 0x21feee6au, 0xce2fb686u, 0x6804e1f8u); + } +else if (InData_LC[0] == 0x00000006) + { + SCE->REG_1CH = 0x00b50000u; + HW_SCE_p_func101(0x0524bae4u, 0xa2bdb569u, 0x3882d45bu, 0x0c17e0a9u); + } +else if (InData_LC[0] == 0x00000007) + { + SCE->REG_1CH = 0x00b60000u; + HW_SCE_p_func101(0xa9029f34u, 0x03b9f72cu, 0x0c3dea38u, 0x2168dc2bu); + } +else if (InData_LC[0] == 0x00000008) + { + SCE->REG_1CH = 0x00b70000u; + HW_SCE_p_func101(0x370593d5u, 0xa06496acu, 0x346be3f9u, 0x4ab24229u); + } + else + { + SCE->REG_ECH = 0x38000c00u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func101(0x4ef037fcu, 0x717efbf1u, 0x95329c71u, 0x33958d8du); + } + HW_SCE_p_func100(0xc49e2b89u, 0x3ccaecb7u, 0xa622a807u, 0x78f51bbeu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x0c3811c9u, 0xb8dedefdu, 0xeb431a83u, 0xd5122286u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_104H = 0x00000352u; + SCE->REG_C4H = 0x000f3a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x7e2fdbffu); + SCE->REG_100H = change_endian_long(0xd4e34e49u); + SCE->REG_100H = change_endian_long(0x86044a47u); + SCE->REG_100H = change_endian_long(0x78ea77fbu); + HW_SCE_p_func100(0x5a22ea97u, 0xb775468eu, 0xc77479b3u, 0xa7c5d2eau); + SCE->REG_C4H = 0x20443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x20083e1cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01ea725du); + HW_SCE_p_func100(0xfbcffc6bu, 0xce9dd311u, 0x605e19c8u, 0xfe10bb07u); + SCE->REG_C4H = 0x20443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x20093e1cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x02ea725du); + SCE->REG_104H = 0x00000352u; + SCE->REG_C4H = 0x000f3a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x1201f0d2u); + SCE->REG_100H = change_endian_long(0x9fc1d562u); + SCE->REG_100H = change_endian_long(0x4f02fc25u); + SCE->REG_100H = change_endian_long(0x6b60ff19u); + HW_SCE_p_func100(0xba5d965cu, 0x54ecb6f4u, 0xf3e2d5bfu, 0xcf8889bcu); + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b5u; + SCE->REG_E8H = 0x80000000u; + SCE->REG_00H = 0x00002613u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00f087b5u; + SCE->REG_E8H = 0x80000004u; + SCE->REG_00H = 0x00002613u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xae1e176eu, 0x880b1b75u, 0x6486a9a3u, 0x9cf0492au); + SCE->REG_A4H = 0x00090805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x000001b0u; + SCE->REG_ECH = 0x00003c01u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + SCE->REG_E8H = 0x80000008u; + SCE->REG_00H = 0x00002613u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_C4H = 0x00800c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000251u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x00448a04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x00008e84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019ee295u); + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x00008e84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x029ee295u); + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x000001d0u; + SCE->REG_E0H = 0x80880001u; + SCE->REG_00H = 0x00008123u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xf779cdc0u, 0x8979d743u, 0x8cdcd58bu, 0xabca3852u); + SCE->REG_C4H = 0x20443a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x200c3e1cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0152db38u); + SCE->REG_C4H = 0x00440a0cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_C4H = 0x00000e9cu; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01f7370eu); + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x000001c0u; + SCE->REG_E0H = 0x80840001u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_13CH = 0x00000211u; + HW_SCE_p_func102(0xff71be6bu, 0xdfbc00b3u, 0xa5a52bdau, 0x8b9ab0edu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p40_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47f.c new file mode 100644 index 000000000..56c2ffff4 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47f.c @@ -0,0 +1,115 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes128EncryptDecryptFinalSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x2567e134u, 0x1c59a254u, 0x33a91a4au, 0x06f2d769u); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0xaeef1b59u, 0xa2d2eaadu, 0x59797dcdu, 0x3d305810u); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x39200434u, 0x3a9b8bf3u, 0x9bd38d07u, 0xf8813cd9u); + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0xea6f2734u, 0xa16e75a5u, 0xe73f8298u, 0x686c805bu); + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x160ec850u, 0x256044acu, 0x2e147e96u, 0xc4166693u); + } + HW_SCE_p_func100(0x1aee5930u, 0xbae62181u, 0x010b5253u, 0xf8837913u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x456c3ac1u, 0x66da1c4fu, 0xb41b43bcu, 0x951bd5f4u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func102(0x8984c019u, 0x50eb8683u, 0x6fdd4b33u, 0xe6447ca1u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p47f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47i.c new file mode 100644 index 000000000..f24dcf907 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47i.c @@ -0,0 +1,371 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes128EncryptDecryptInitSub (const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_IV) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00004701u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + SCE->REG_E0H = 0x80010000u; + SCE->REG_104H = 0x00000068u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x3000a800u; + SCE->REG_ECH = 0x00000006u; + SCE->REG_ECH = 0x00010020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000006u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x3420a800u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xb52dabe4u, 0x204b14aau, 0xc2240b7du, 0x23a73aa2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000047u); + HW_SCE_p_func101(0xd4e33cfeu, 0xd2687192u, 0x90dacf91u, 0x23025eabu); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000047u); + HW_SCE_p_func101(0x187b7158u, 0x36068296u, 0xc75b90d8u, 0x3c2e975fu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x5250cc11u, 0xb301ced7u, 0x9817c7a8u, 0x9bd7e48bu); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x50aac0e4u, 0x44f73738u, 0x16915f2fu, 0xb58af45eu); + } + else + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040040u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x000037e2u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x00ff0000u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x1000d3c0u; + SCE->REG_ECH = 0x38008800u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_ECH = 0x1000b540u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_ECH = 0x2000b540u; + SCE->REG_ECH = 0x0000000eu; + SCE->REG_ECH = 0x3800584au; + SCE->REG_ECH = 0x2000d3c1u; + SCE->REG_ECH = 0x000037e2u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x000000feu; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x1000d3c2u; + SCE->REG_ECH = 0x38008bc0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x0000a800u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_ECH = 0x00003542u; + SCE->REG_ECH = 0x00003563u; + SCE->REG_ECH = 0x00003584u; + SCE->REG_ECH = 0x000035a5u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000047u); + HW_SCE_p_func101(0x777d2dd1u, 0x6efca390u, 0x2da7d617u, 0x6914cb47u); + HW_SCE_p_func059(); + HW_SCE_p_func100(0x1d35c958u, 0x8ab99b81u, 0x1fab250au, 0xeeb14dabu); + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x02f087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0xe1960594u, 0x2cad8339u, 0xefabb8bbu, 0x59e74638u); + } + HW_SCE_p_func100(0xfc1f2510u, 0xf5be6b44u, 0x98aa6735u, 0xcb95d279u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x5e7915ecu, 0xb154b7a3u, 0x2b870eaeu, 0x15ea0d85u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0xfcc75883u, 0x8b53d34bu, 0x64cd4158u, 0x2f466f82u); + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00600000u; + SCE->REG_1D0H = 0x00000000u; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x3b9bc948u, 0xecccd80bu, 0x3d091b4fu, 0xc60b0873u); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0xf1a717d0u, 0x39aef144u, 0xaeaf235cu, 0x114d5fb4u); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0xc3ba43adu, 0xc15afa63u, 0x48f007e8u, 0xda48eeb4u); + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0x7a684752u, 0x024be5efu, 0x579221adu, 0x47a0a264u); + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0x0d80a60bu, 0x4b29a5abu, 0x2db3f5b8u, 0xbbdf960eu); + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p47i.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47u.c new file mode 100644 index 000000000..7e4169b59 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p47u.c @@ -0,0 +1,175 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes128EncryptDecryptUpdateSub (const uint32_t * InData_Text, uint32_t * OutData_Text, + const uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x9c2bad13u, 0x79b50416u, 0x08b4a371u, 0xa6936ecau); + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00000a86u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x1f26deedu, 0x56986197u, 0x4d36f8e9u, 0xd2396fe3u); + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00004a86u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x46890128u, 0xa4bea142u, 0x46108c23u, 0x5eb9e253u); + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x00000e96u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0xf1e2c1c3u, 0xabc1c083u, 0xb30732a7u, 0x8c59ae8du); + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x000049a6u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0xb0e543a4u, 0xa63ab851u, 0xb0bb040bu, 0x54ffef58u); + SCE->REG_104H = 0x000000b1u; + SCE->REG_A4H = 0x000007b6u; + SCE->REG_04H = 0x0000c100u; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + for (iLoop = 4; iLoop < MAX_CNT ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[MAX_CNT-4 + 0] = SCE->REG_100H; + OutData_Text[MAX_CNT-4 + 1] = SCE->REG_100H; + OutData_Text[MAX_CNT-4 + 2] = SCE->REG_100H; + OutData_Text[MAX_CNT-4 + 3] = SCE->REG_100H; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x3e045906u, 0x3dab084bu, 0x7f066ce2u, 0xc6491214u); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0xfb0d3b5cu, 0x665b5756u, 0xf6d445c4u, 0xf1f34104u); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0xbee7945au, 0x9846b5c0u, 0x2a31d3d7u, 0xa5080511u); + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0xe585a470u, 0xf5c70a3au, 0x81d43f35u, 0xe506b30fu); + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x115cf208u, 0xb5af7fdeu, 0x2d878176u, 0xb6d311d0u); + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p47u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50f.c new file mode 100644 index 000000000..d35655703 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50f.c @@ -0,0 +1,115 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes256EncryptDecryptFinalSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0xa53a714eu, 0xce2b3fd6u, 0x3801fd1bu, 0xa2b83ef5u); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x82fe7aceu, 0xacd65af6u, 0x959bdef5u, 0x8e151cecu); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x0863ac10u, 0x4a52da44u, 0xd5687f54u, 0x4962b267u); + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0xcd1f7364u, 0xc1420ba6u, 0x87d65bffu, 0xb3858d7fu); + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x39f66ff5u, 0x749d4554u, 0x3bed7a06u, 0xf39940fau); + } + HW_SCE_p_func100(0x2b31b234u, 0x798ccde6u, 0x81ae9de2u, 0x634149d6u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x7d67ba6du, 0x40f2ca12u, 0x3fc845eau, 0xccc18a2eu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func102(0xda587a2au, 0x27b36189u, 0x2078e407u, 0xeeeb0a36u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p50f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50i.c new file mode 100644 index 000000000..761d6f823 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50i.c @@ -0,0 +1,407 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Aes256EncryptDecryptInitSub (const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_IV) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00005001u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + SCE->REG_E0H = 0x80010000u; + SCE->REG_104H = 0x00000068u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x3000a800u; + SCE->REG_ECH = 0x00000006u; + SCE->REG_ECH = 0x00010020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000006u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x3420a800u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x0e21cf93u, 0x39ff2075u, 0x975fe4d6u, 0xe5002de5u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000050u); + HW_SCE_p_func101(0x63a10ee4u, 0x1c9962a7u, 0xc5c75ca8u, 0xa459db17u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000050u); + HW_SCE_p_func101(0xf21f08acu, 0xafe1d606u, 0x64a4b8e0u, 0x872de97bu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x66dc5d68u, 0x94d4454cu, 0x572c97f9u, 0xb1ae352du); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xa3d98bd6u, 0xde409614u, 0x4865160bu, 0xe2778f91u); + SCE->REG_A4H = 0x00090805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x1c335020u, 0x9f787ee6u, 0x3c9df4ebu, 0xfc302bdbu); + } + else + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040040u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x000037e2u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x00ff0000u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00010000u; + SCE->REG_ECH = 0x1000d3c0u; + SCE->REG_ECH = 0x38008800u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_ECH = 0x1000b540u; + SCE->REG_ECH = 0x0000000fu; + SCE->REG_ECH = 0x2000b540u; + SCE->REG_ECH = 0x0000000eu; + SCE->REG_ECH = 0x3800584au; + SCE->REG_ECH = 0x2000d3c1u; + SCE->REG_ECH = 0x000037e2u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x000000feu; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x1000d3c2u; + SCE->REG_ECH = 0x38008bc0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x0000a800u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_ECH = 0x00003542u; + SCE->REG_ECH = 0x00003563u; + SCE->REG_ECH = 0x00003584u; + SCE->REG_ECH = 0x000035a5u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000050u); + HW_SCE_p_func101(0x328609eau, 0xd57d7798u, 0xfb710b61u, 0xc3f90299u); + HW_SCE_p_func059(); + HW_SCE_p_func100(0xfc41514eu, 0x17da911bu, 0xd1be8b6au, 0xb76ef6c2u); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_A4H = 0x00080805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x0d06633fu, 0x33b5eaf5u, 0xe669c903u, 0xe82117f6u); + SCE->REG_A4H = 0x00090805u; + SCE->REG_00H = 0x00001213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_100H = InData_KeyIndex[13]; + SCE->REG_100H = InData_KeyIndex[14]; + SCE->REG_100H = InData_KeyIndex[15]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x6477171au, 0x6c3a64ebu, 0x25a1b356u, 0xca8dc5d9u); + } + HW_SCE_p_func100(0x870632e2u, 0xcc4d5f31u, 0xd07aaac5u, 0x05592fc6u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xa0f62086u, 0xb4d95257u, 0x4a8a8cb7u, 0xb3231c7fu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x535d3514u, 0xdabd83b5u, 0x3c1e4e54u, 0xf7550eb2u); + SCE->REG_ECH = 0x00007c00u; + SCE->REG_1CH = 0x00600000u; + SCE->REG_1D0H = 0x00000000u; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0x5910877eu, 0x9a9688e0u, 0xd01879feu, 0xac44966au); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func101(0xc15c53ebu, 0x5467c50fu, 0x454ecc55u, 0xef61db5eu); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0x2a869265u, 0xd7aa0acdu, 0xe047eb03u, 0xa0403e78u); + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0x612ecac0u, 0x2675bbd3u, 0x23f488dcu, 0x2b4c76a5u); + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000361u; + SCE->REG_A4H = 0x00040805u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_IV[0]; + SCE->REG_100H = InData_IV[1]; + SCE->REG_100H = InData_IV[2]; + SCE->REG_100H = InData_IV[3]; + HW_SCE_p_func101(0x6882b60du, 0xc5fccc00u, 0x0f996f3eu, 0xf655eecfu); + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p50i.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50u.c new file mode 100644 index 000000000..32260fa6d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p50u.c @@ -0,0 +1,180 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Aes256EncryptDecryptUpdateSub (const uint32_t * InData_Text, uint32_t * OutData_Text, + const uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x12fec111u, 0x837686bcu, 0x29da676fu, 0x2a15b6c6u); + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x00008a86u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x57bd8fe5u, 0x5a462c45u, 0x9678f8abu, 0x95526c3fu); + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x0000ca86u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x587a8d69u, 0xa2d8f37eu, 0xc55267b3u, 0x7b67886cu); + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x00008e96u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0xb2c8f072u, 0x646e4af5u, 0xa7435e98u, 0x59950484u); + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x0000c9a6u; + SCE->REG_04H = 0x0000c100u; + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_104H = 0x00000362u; + HW_SCE_p_func100(0x6e63e543u, 0x0b1c2b84u, 0x13059a4fu, 0xe340fb26u); + SCE->REG_104H = 0x000000b1u; + SCE->REG_B0H = 0x40000000u; + SCE->REG_A4H = 0x000087b6u; + SCE->REG_04H = 0x0000c100u; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + for (iLoop = 4; iLoop < MAX_CNT ; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[iLoop + 0]; + SCE->REG_100H = InData_Text[iLoop + 1]; + SCE->REG_100H = InData_Text[iLoop + 2]; + SCE->REG_100H = InData_Text[iLoop + 3]; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[iLoop-4 + 0] = SCE->REG_100H; + OutData_Text[iLoop-4 + 1] = SCE->REG_100H; + OutData_Text[iLoop-4 + 2] = SCE->REG_100H; + OutData_Text[iLoop-4 + 3] = SCE->REG_100H; + } + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[MAX_CNT-4 + 0] = SCE->REG_100H; + OutData_Text[MAX_CNT-4 + 1] = SCE->REG_100H; + OutData_Text[MAX_CNT-4 + 2] = SCE->REG_100H; + OutData_Text[MAX_CNT-4 + 3] = SCE->REG_100H; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0xb89f76b5u, 0xee125499u, 0x98999e50u, 0x3ea99faau); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0xf861eaa0u, 0xb24c5d5du, 0x3e2a924cu, 0x5c7ad83bu); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x279da2a4u, 0x7268bac3u, 0xe5d5d986u, 0xb26c9b0fu); + } + else if (0x03000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0xf1bdb534u, 0x2313da8du, 0x7fd36cd2u, 0x78f418cau); + } + else if (0x04000000u == (SCE->REG_1CH & 0xff000000u)) + { + HW_SCE_p_func206();//DisableINTEGRATE_WRRDYBandINTEGRATE_RDRDYBinthisfunction. + HW_SCE_p_func101(0x2db3fdb1u, 0xe0c0ef7fu, 0x665c0a8du, 0xd752d49eu); + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p50u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p56.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p56.c new file mode 100644 index 000000000..4fc1512b4 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p56.c @@ -0,0 +1,392 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Rsa2048ModularExponentEncryptSub(const uint32_t *InData_KeyIndex, const uint32_t *InData_Text, uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00005601u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000056u); + HW_SCE_p_func101(0xdc0a590bu, 0x6e3392ffu, 0x97adc5b9u, 0x633171bbu); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000000cu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000056u); + HW_SCE_p_func101(0xfc2447fau, 0x9cf0143bu, 0x85110c57u, 0x2b7cbdcfu); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00000001u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + SCE->REG_104H = 0x00008362u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x02e08887u; + for(iLoop=0; iLoop<64; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[65]; + SCE->REG_100H = InData_KeyIndex[66]; + SCE->REG_100H = InData_KeyIndex[67]; + SCE->REG_100H = InData_KeyIndex[68]; + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00f087b7u; + for(iLoop=68; iLoop<132; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[133]; + SCE->REG_100H = InData_KeyIndex[134]; + SCE->REG_100H = InData_KeyIndex[135]; + SCE->REG_100H = InData_KeyIndex[136]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x0493bf32u, 0x4fd6ac99u, 0x18fd6dbdu, 0x235e32ddu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xe07e4daau, 0x5778972bu, 0xd2cb35fdu, 0x1c09d955u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x30b546ddu, 0x1c282749u, 0xd166b5dfu, 0x5f659d4bu); + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00003f67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_100H = InData_Text[4]; + SCE->REG_100H = InData_Text[5]; + SCE->REG_100H = InData_Text[6]; + SCE->REG_100H = InData_Text[7]; + SCE->REG_100H = InData_Text[8]; + SCE->REG_100H = InData_Text[9]; + SCE->REG_100H = InData_Text[10]; + SCE->REG_100H = InData_Text[11]; + SCE->REG_100H = InData_Text[12]; + SCE->REG_100H = InData_Text[13]; + SCE->REG_100H = InData_Text[14]; + SCE->REG_100H = InData_Text[15]; + SCE->REG_100H = InData_Text[16]; + SCE->REG_100H = InData_Text[17]; + SCE->REG_100H = InData_Text[18]; + SCE->REG_100H = InData_Text[19]; + SCE->REG_100H = InData_Text[20]; + SCE->REG_100H = InData_Text[21]; + SCE->REG_100H = InData_Text[22]; + SCE->REG_100H = InData_Text[23]; + SCE->REG_100H = InData_Text[24]; + SCE->REG_100H = InData_Text[25]; + SCE->REG_100H = InData_Text[26]; + SCE->REG_100H = InData_Text[27]; + SCE->REG_100H = InData_Text[28]; + SCE->REG_100H = InData_Text[29]; + SCE->REG_100H = InData_Text[30]; + SCE->REG_100H = InData_Text[31]; + SCE->REG_100H = InData_Text[32]; + SCE->REG_100H = InData_Text[33]; + SCE->REG_100H = InData_Text[34]; + SCE->REG_100H = InData_Text[35]; + SCE->REG_100H = InData_Text[36]; + SCE->REG_100H = InData_Text[37]; + SCE->REG_100H = InData_Text[38]; + SCE->REG_100H = InData_Text[39]; + SCE->REG_100H = InData_Text[40]; + SCE->REG_100H = InData_Text[41]; + SCE->REG_100H = InData_Text[42]; + SCE->REG_100H = InData_Text[43]; + SCE->REG_100H = InData_Text[44]; + SCE->REG_100H = InData_Text[45]; + SCE->REG_100H = InData_Text[46]; + SCE->REG_100H = InData_Text[47]; + SCE->REG_100H = InData_Text[48]; + SCE->REG_100H = InData_Text[49]; + SCE->REG_100H = InData_Text[50]; + SCE->REG_100H = InData_Text[51]; + SCE->REG_100H = InData_Text[52]; + SCE->REG_100H = InData_Text[53]; + SCE->REG_100H = InData_Text[54]; + SCE->REG_100H = InData_Text[55]; + SCE->REG_100H = InData_Text[56]; + SCE->REG_100H = InData_Text[57]; + SCE->REG_100H = InData_Text[58]; + SCE->REG_100H = InData_Text[59]; + SCE->REG_100H = InData_Text[60]; + SCE->REG_100H = InData_Text[61]; + SCE->REG_100H = InData_Text[62]; + SCE->REG_100H = InData_Text[63]; + SCE->REG_18H = 0x00000004u; + SCE->REG_38H = 0x00000338u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_00H = 0x00003807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + HW_SCE_p_func100(0x305b97ceu, 0x263481e9u, 0x9ae65b13u, 0xb79bccfeu); + SCE->REG_2CH = 0x00000020u; + SCE->REG_04H = 0x00000303u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + OutData_Text[4] = SCE->REG_100H; + OutData_Text[5] = SCE->REG_100H; + OutData_Text[6] = SCE->REG_100H; + OutData_Text[7] = SCE->REG_100H; + OutData_Text[8] = SCE->REG_100H; + OutData_Text[9] = SCE->REG_100H; + OutData_Text[10] = SCE->REG_100H; + OutData_Text[11] = SCE->REG_100H; + OutData_Text[12] = SCE->REG_100H; + OutData_Text[13] = SCE->REG_100H; + OutData_Text[14] = SCE->REG_100H; + OutData_Text[15] = SCE->REG_100H; + OutData_Text[16] = SCE->REG_100H; + OutData_Text[17] = SCE->REG_100H; + OutData_Text[18] = SCE->REG_100H; + OutData_Text[19] = SCE->REG_100H; + OutData_Text[20] = SCE->REG_100H; + OutData_Text[21] = SCE->REG_100H; + OutData_Text[22] = SCE->REG_100H; + OutData_Text[23] = SCE->REG_100H; + OutData_Text[24] = SCE->REG_100H; + OutData_Text[25] = SCE->REG_100H; + OutData_Text[26] = SCE->REG_100H; + OutData_Text[27] = SCE->REG_100H; + OutData_Text[28] = SCE->REG_100H; + OutData_Text[29] = SCE->REG_100H; + OutData_Text[30] = SCE->REG_100H; + OutData_Text[31] = SCE->REG_100H; + OutData_Text[32] = SCE->REG_100H; + OutData_Text[33] = SCE->REG_100H; + OutData_Text[34] = SCE->REG_100H; + OutData_Text[35] = SCE->REG_100H; + OutData_Text[36] = SCE->REG_100H; + OutData_Text[37] = SCE->REG_100H; + OutData_Text[38] = SCE->REG_100H; + OutData_Text[39] = SCE->REG_100H; + OutData_Text[40] = SCE->REG_100H; + OutData_Text[41] = SCE->REG_100H; + OutData_Text[42] = SCE->REG_100H; + OutData_Text[43] = SCE->REG_100H; + OutData_Text[44] = SCE->REG_100H; + OutData_Text[45] = SCE->REG_100H; + OutData_Text[46] = SCE->REG_100H; + OutData_Text[47] = SCE->REG_100H; + OutData_Text[48] = SCE->REG_100H; + OutData_Text[49] = SCE->REG_100H; + OutData_Text[50] = SCE->REG_100H; + OutData_Text[51] = SCE->REG_100H; + OutData_Text[52] = SCE->REG_100H; + OutData_Text[53] = SCE->REG_100H; + OutData_Text[54] = SCE->REG_100H; + OutData_Text[55] = SCE->REG_100H; + OutData_Text[56] = SCE->REG_100H; + OutData_Text[57] = SCE->REG_100H; + OutData_Text[58] = SCE->REG_100H; + OutData_Text[59] = SCE->REG_100H; + OutData_Text[60] = SCE->REG_100H; + OutData_Text[61] = SCE->REG_100H; + OutData_Text[62] = SCE->REG_100H; + OutData_Text[63] = SCE->REG_100H; + HW_SCE_p_func102(0xa498754bu, 0x729577e0u, 0x423a9c49u, 0xbf249dabu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p56.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p57.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p57.c new file mode 100644 index 000000000..b6f66de27 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p57.c @@ -0,0 +1,387 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Rsa2048ModularExponentDecryptSub(uint32_t *InData_KeyIndex, const uint32_t *InData_Text, uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00005701u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000057u); + HW_SCE_p_func101(0x1d6969f5u, 0x0401b04bu, 0x453404b5u, 0x19622c0cu); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000000du; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000057u); + HW_SCE_p_func101(0xea15afbeu, 0x0eadbcbbu, 0x001b01dbu, 0x7a5e95e1u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00000001u; + SCE->REG_28H = 0x00bf0001u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + SCE->REG_104H = 0x0000bf62u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x02f087b7u; + for(iLoop=0; iLoop<64; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000821u; + SCE->REG_E0H = 0x80c00001u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00f087b7u; + SCE->REG_00H = 0x00018203u; + for(iLoop=65; iLoop<129; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + SCE->REG_D0H = 0x40000f00u; + SCE->REG_C4H = 0x00f087b7u; + for(iLoop=128; iLoop<192; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[193]; + SCE->REG_100H = InData_KeyIndex[194]; + SCE->REG_100H = InData_KeyIndex[195]; + SCE->REG_100H = InData_KeyIndex[196]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xb1001691u, 0xf4028eb7u, 0x295866f2u, 0x7f84fd00u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x06324a76u, 0x607c42abu, 0x43889fe9u, 0xc012d247u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x2779abe0u, 0x47d803e3u, 0x6a378f2du, 0x69477a0eu); + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00003f67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_100H = InData_Text[4]; + SCE->REG_100H = InData_Text[5]; + SCE->REG_100H = InData_Text[6]; + SCE->REG_100H = InData_Text[7]; + SCE->REG_100H = InData_Text[8]; + SCE->REG_100H = InData_Text[9]; + SCE->REG_100H = InData_Text[10]; + SCE->REG_100H = InData_Text[11]; + SCE->REG_100H = InData_Text[12]; + SCE->REG_100H = InData_Text[13]; + SCE->REG_100H = InData_Text[14]; + SCE->REG_100H = InData_Text[15]; + SCE->REG_100H = InData_Text[16]; + SCE->REG_100H = InData_Text[17]; + SCE->REG_100H = InData_Text[18]; + SCE->REG_100H = InData_Text[19]; + SCE->REG_100H = InData_Text[20]; + SCE->REG_100H = InData_Text[21]; + SCE->REG_100H = InData_Text[22]; + SCE->REG_100H = InData_Text[23]; + SCE->REG_100H = InData_Text[24]; + SCE->REG_100H = InData_Text[25]; + SCE->REG_100H = InData_Text[26]; + SCE->REG_100H = InData_Text[27]; + SCE->REG_100H = InData_Text[28]; + SCE->REG_100H = InData_Text[29]; + SCE->REG_100H = InData_Text[30]; + SCE->REG_100H = InData_Text[31]; + SCE->REG_100H = InData_Text[32]; + SCE->REG_100H = InData_Text[33]; + SCE->REG_100H = InData_Text[34]; + SCE->REG_100H = InData_Text[35]; + SCE->REG_100H = InData_Text[36]; + SCE->REG_100H = InData_Text[37]; + SCE->REG_100H = InData_Text[38]; + SCE->REG_100H = InData_Text[39]; + SCE->REG_100H = InData_Text[40]; + SCE->REG_100H = InData_Text[41]; + SCE->REG_100H = InData_Text[42]; + SCE->REG_100H = InData_Text[43]; + SCE->REG_100H = InData_Text[44]; + SCE->REG_100H = InData_Text[45]; + SCE->REG_100H = InData_Text[46]; + SCE->REG_100H = InData_Text[47]; + SCE->REG_100H = InData_Text[48]; + SCE->REG_100H = InData_Text[49]; + SCE->REG_100H = InData_Text[50]; + SCE->REG_100H = InData_Text[51]; + SCE->REG_100H = InData_Text[52]; + SCE->REG_100H = InData_Text[53]; + SCE->REG_100H = InData_Text[54]; + SCE->REG_100H = InData_Text[55]; + SCE->REG_100H = InData_Text[56]; + SCE->REG_100H = InData_Text[57]; + SCE->REG_100H = InData_Text[58]; + SCE->REG_100H = InData_Text[59]; + SCE->REG_100H = InData_Text[60]; + SCE->REG_100H = InData_Text[61]; + SCE->REG_100H = InData_Text[62]; + SCE->REG_100H = InData_Text[63]; + SCE->REG_E0H = 0x00000100u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x000000fcu; + SCE->REG_18H = 0x00000004u; + SCE->REG_38H = 0x00000248u; + SCE->REG_E0H = 0x81c0001fu; + SCE->REG_00H = 0x00013803u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_E0H = 0x00000000u; + HW_SCE_p_func100(0x3df61758u, 0x0c41d91eu, 0xe9275f9fu, 0x2a583f2bu); + SCE->REG_2CH = 0x00000020u; + SCE->REG_04H = 0x00000303u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + OutData_Text[4] = SCE->REG_100H; + OutData_Text[5] = SCE->REG_100H; + OutData_Text[6] = SCE->REG_100H; + OutData_Text[7] = SCE->REG_100H; + OutData_Text[8] = SCE->REG_100H; + OutData_Text[9] = SCE->REG_100H; + OutData_Text[10] = SCE->REG_100H; + OutData_Text[11] = SCE->REG_100H; + OutData_Text[12] = SCE->REG_100H; + OutData_Text[13] = SCE->REG_100H; + OutData_Text[14] = SCE->REG_100H; + OutData_Text[15] = SCE->REG_100H; + OutData_Text[16] = SCE->REG_100H; + OutData_Text[17] = SCE->REG_100H; + OutData_Text[18] = SCE->REG_100H; + OutData_Text[19] = SCE->REG_100H; + OutData_Text[20] = SCE->REG_100H; + OutData_Text[21] = SCE->REG_100H; + OutData_Text[22] = SCE->REG_100H; + OutData_Text[23] = SCE->REG_100H; + OutData_Text[24] = SCE->REG_100H; + OutData_Text[25] = SCE->REG_100H; + OutData_Text[26] = SCE->REG_100H; + OutData_Text[27] = SCE->REG_100H; + OutData_Text[28] = SCE->REG_100H; + OutData_Text[29] = SCE->REG_100H; + OutData_Text[30] = SCE->REG_100H; + OutData_Text[31] = SCE->REG_100H; + OutData_Text[32] = SCE->REG_100H; + OutData_Text[33] = SCE->REG_100H; + OutData_Text[34] = SCE->REG_100H; + OutData_Text[35] = SCE->REG_100H; + OutData_Text[36] = SCE->REG_100H; + OutData_Text[37] = SCE->REG_100H; + OutData_Text[38] = SCE->REG_100H; + OutData_Text[39] = SCE->REG_100H; + OutData_Text[40] = SCE->REG_100H; + OutData_Text[41] = SCE->REG_100H; + OutData_Text[42] = SCE->REG_100H; + OutData_Text[43] = SCE->REG_100H; + OutData_Text[44] = SCE->REG_100H; + OutData_Text[45] = SCE->REG_100H; + OutData_Text[46] = SCE->REG_100H; + OutData_Text[47] = SCE->REG_100H; + OutData_Text[48] = SCE->REG_100H; + OutData_Text[49] = SCE->REG_100H; + OutData_Text[50] = SCE->REG_100H; + OutData_Text[51] = SCE->REG_100H; + OutData_Text[52] = SCE->REG_100H; + OutData_Text[53] = SCE->REG_100H; + OutData_Text[54] = SCE->REG_100H; + OutData_Text[55] = SCE->REG_100H; + OutData_Text[56] = SCE->REG_100H; + OutData_Text[57] = SCE->REG_100H; + OutData_Text[58] = SCE->REG_100H; + OutData_Text[59] = SCE->REG_100H; + OutData_Text[60] = SCE->REG_100H; + OutData_Text[61] = SCE->REG_100H; + OutData_Text[62] = SCE->REG_100H; + OutData_Text[63] = SCE->REG_100H; + HW_SCE_p_func102(0x2486d860u, 0x24678ef0u, 0x84ba5d03u, 0x0b42a66du); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p57.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p6e.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p6e.c new file mode 100644 index 000000000..b3125580b --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p6e.c @@ -0,0 +1,246 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateOemKeyIndexSub(uint32_t *InData_KeyType, uint32_t *InData_Cmd, uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00006e01u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800103e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyType[0]; + SCE->REG_ECH = 0x38000fffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x785685e4u, 0x1eb8d70du, 0xe603298au, 0xf0890493u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func049(InData_Cmd); + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(InData_SharedKeyIndex[0]); + SCE->REG_ECH = 0x000037e4u; + SCE->REG_ECH = 0x3420a880u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x3420a880u; + SCE->REG_ECH = 0x00000024u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x3420a820u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x1fc2eb2au, 0xb7a01ddau, 0xe60b956au, 0x2cd96153u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x158158fau, 0xac8c3ed0u, 0xa6fff060u, 0x701fd272u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000349fu; + OFS_ADR = InData_SharedKeyIndex[0] << 3; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000006eu); + HW_SCE_p_func101(0x4e05f96fu, 0x9b1167c2u, 0x75157ed6u, 0x55f37badu); + HW_SCE_p_func058(InData_SessionKey,OFS_ADR); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010380u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000006eu); + HW_SCE_p_func101(0xe5d19a97u, 0xbbcdd6dau, 0x4233f284u, 0x7d0593bau); + HW_SCE_p_func057_r1(InData_IV,InData_InstData,OutData_KeyIndex); + HW_SCE_p_func100(0x0ab4814bu, 0xb8367889u, 0x271bcf2fu, 0x4feba308u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x9e5039cbu, 0xd69d6c2au, 0xa37c0068u, 0x3994c7b9u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func100(0x8daed06bu, 0x2a351c5cu, 0x97281b51u, 0x096a7d03u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func102(0x5d24c640u, 0x65732df6u, 0x707f16f3u, 0x63de5db7u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } + else + { + HW_SCE_p_func049(InData_Cmd); + SCE->REG_ECH = 0x000037e4u; + SCE->REG_ECH = 0x3420a880u; + SCE->REG_ECH = 0x00000005u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x3420a880u; + SCE->REG_ECH = 0x00000024u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x3ddcbafau, 0x68190098u, 0x71aaccc8u, 0x13400e2fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x32392174u, 0x42e93794u, 0xfb704f82u, 0x2fa0736cu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000349fu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010380u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000006eu); + HW_SCE_p_func101(0xf791c673u, 0xdde49f4cu, 0xe3b14380u, 0x967940b2u); + HW_SCE_p_func065_r1(InData_InstData,OutData_KeyIndex); + HW_SCE_p_func100(0x1cf9ac81u, 0x590924eau, 0xd4425eb1u, 0xd5db5292u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_KeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func102(0x61423c7fu, 0xf3f4807eu, 0x10a36a81u, 0x6c3dbeadu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p6e_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p72.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p72.c new file mode 100644 index 000000000..7b81799e7 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p72.c @@ -0,0 +1,150 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Sha224256GenerateMessageDigestSub(const uint32_t *InData_InitVal, const uint32_t *InData_PaddedMsg, const uint32_t MAX_CNT, uint32_t *OutData_MsgDigest) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00007201u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0x89b55281u, 0x097f6146u, 0xd6a77de8u, 0xec3b48deu); + SCE->REG_7CH = 0x00000011u; + SCE->REG_104H = 0x00000764u; + SCE->REG_74H = 0x00000004u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_InitVal[0]; + SCE->REG_100H = InData_InitVal[1]; + SCE->REG_100H = InData_InitVal[2]; + SCE->REG_100H = InData_InitVal[3]; + SCE->REG_100H = InData_InitVal[4]; + SCE->REG_100H = InData_InitVal[5]; + SCE->REG_100H = InData_InitVal[6]; + SCE->REG_100H = InData_InitVal[7]; + SCE->REG_104H = 0x000000b4u; + SCE->REG_74H = 0x08000002u; + for (iLoop = 0; iLoop < MAX_CNT ; iLoop = iLoop + 16) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 0]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 1]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 2]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 3]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 4]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 5]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 6]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 7]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 8]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 9]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 10]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 11]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 12]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 13]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 14]; + SCE->REG_100H = InData_PaddedMsg[0+iLoop + 15]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_74H = 0x00000000u; + SCE->REG_104H = 0x00000000u; + SCE->REG_1CH = 0x00001600u; + SCE->REG_74H = 0x00000008u; + SCE->REG_04H = 0x00000523u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_MsgDigest[0] = SCE->REG_100H; + OutData_MsgDigest[1] = SCE->REG_100H; + OutData_MsgDigest[2] = SCE->REG_100H; + OutData_MsgDigest[3] = SCE->REG_100H; + OutData_MsgDigest[4] = SCE->REG_100H; + OutData_MsgDigest[5] = SCE->REG_100H; + OutData_MsgDigest[6] = SCE->REG_100H; + OutData_MsgDigest[7] = SCE->REG_100H; + HW_SCE_p_func102(0x482a4372u, 0x21f251ebu, 0x29dc06a6u, 0x84167a56u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p72.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76f.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76f.c new file mode 100644 index 000000000..dc3a74f93 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76f.c @@ -0,0 +1,313 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Sha256HmacFinalSub(uint32_t *InData_Cmd, uint32_t *InData_MAC, uint32_t *InData_length, uint32_t *OutData_MAC) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_74H = 0x00000000u; + SCE->REG_28H = 0x00870001u; + SCE->REG_00H = 0x00003523u; + SCE->REG_74H = 0x00000008u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_7CH = 0x00000011u; + SCE->REG_104H = 0x00000754u; + SCE->REG_74H = 0x00000004u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x6a09e667u); + SCE->REG_100H = change_endian_long(0xbb67ae85u); + SCE->REG_100H = change_endian_long(0x3c6ef372u); + SCE->REG_100H = change_endian_long(0xa54ff53au); + SCE->REG_100H = change_endian_long(0x510e527fu); + SCE->REG_100H = change_endian_long(0x9b05688cu); + SCE->REG_100H = change_endian_long(0x1f83d9abu); + SCE->REG_100H = change_endian_long(0x5be0cd19u); + SCE->REG_74H = 0x00000002u; + HW_SCE_p_func002(); + SCE->REG_00H = 0x00005323u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000054u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x80000000u); + SCE->REG_F8H = 0x00000040u; + SCE->REG_104H = 0x00000154u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_100H = change_endian_long(0x00000300u); + /* WAIT_LOOP */ + while (0u != SCE->REG_74H_b.B18) + { + /* waiting */ + } + SCE->REG_74H = 0x00000000u; + SCE->REG_1CH = 0x00001600u; + SCE->REG_E0H = 0x80010000u; + SCE->REG_104H = 0x00000068u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_ECH = 0x1000b780u; + SCE->REG_ECH = 0x00002000u; + SCE->REG_ECH = 0x2000b780u; + SCE->REG_ECH = 0x00001000u; + SCE->REG_ECH = 0x38000f9bu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x5645d712u, 0xf440c1a2u, 0x355c8516u, 0x48ad4f74u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x9f0753abu, 0x672d8e04u, 0x33faac82u, 0xa4233a9eu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x38000c00u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x63745b29u, 0xaebe8cc7u, 0x7085ee73u, 0x8e5d85a1u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func100(0x5b5be3a7u, 0x336987a4u, 0x9aa80c8cu, 0x48f5e12au); + SCE->REG_74H = 0x00000008u; + SCE->REG_04H = 0x00000523u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_MAC[0] = SCE->REG_100H; + OutData_MAC[1] = SCE->REG_100H; + OutData_MAC[2] = SCE->REG_100H; + OutData_MAC[3] = SCE->REG_100H; + OutData_MAC[4] = SCE->REG_100H; + OutData_MAC[5] = SCE->REG_100H; + OutData_MAC[6] = SCE->REG_100H; + OutData_MAC[7] = SCE->REG_100H; + HW_SCE_p_func102(0xf3b0da21u, 0xaa2c1883u, 0x81dcbe92u, 0x1211e78fu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + else + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_length[0]; + SCE->REG_ECH = 0x3420a820u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x3420a820u; + SCE->REG_ECH = 0x00000021u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x787f2c3cu, 0x51494157u, 0x8d21dbdau, 0xae4b1106u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x48ebd1e7u, 0x8950bad9u, 0xacd6fb88u, 0x66f4b1edu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008523u; + SCE->REG_74H = 0x00000008u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000800u; + for (iLoop = 0; iLoop < 32; iLoop = iLoop+1) + { + SCE->REG_ECH = 0x3c002be1u; + SCE->REG_ECH = 0x12003c1fu; + SCE->REG_ECH = 0x00002fe0u; + } + SCE->REG_A4H = 0x00040805u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_A4H = 0x00050805u; + SCE->REG_00H = 0x00001813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000761u; + SCE->REG_A4H = 0x00900c05u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_MAC[0]; + SCE->REG_100H = InData_MAC[1]; + SCE->REG_100H = InData_MAC[2]; + SCE->REG_100H = InData_MAC[3]; + SCE->REG_A4H = 0x00900c45u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_MAC[4]; + SCE->REG_100H = InData_MAC[5]; + SCE->REG_100H = InData_MAC[6]; + SCE->REG_100H = InData_MAC[7]; + HW_SCE_p_func100(0xfcc31f34u, 0x1b5c3390u, 0x9e47672du, 0x93c96d76u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x7db6d140u, 0xac1e40a8u, 0x55d31ba6u, 0xdf750b0bu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func102(0x8e622b72u, 0x844d725fu, 0xd2e4a8e7u, 0x6bff87e6u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p76f.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76i.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76i.c new file mode 100644 index 000000000..87fcaa060 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76i.c @@ -0,0 +1,339 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Sha256HmacInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t LEN) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00007601u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + SCE->REG_7CH = 0x00000011u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyType[0]; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0xf359ed55u, 0xeaf5291fu, 0x95c1799fu, 0x61437f67u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000076u); + HW_SCE_p_func101(0x950afab4u, 0xf29174adu, 0x4756ab39u, 0x919653d1u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000001bu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000076u); + HW_SCE_p_func101(0x15227eb5u, 0x2c6484bau, 0xec96f901u, 0x9e5bf753u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_E0H = 0x80080000u; + SCE->REG_00H = 0x00008223u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b760u; + SCE->REG_ECH = 0x00003000u; + HW_SCE_p_func101(0x2deea867u, 0xb7d5bae0u, 0x3157a392u, 0x9b767470u); + } + else + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x00ff0000u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00020000u; + SCE->REG_ECH = 0x1000d3c0u; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x38008fe0u; + SCE->REG_ECH = 0x00003000u; + SCE->REG_ECH = 0x2000d3c1u; + SCE->REG_ECH = 0x00003760u; + SCE->REG_ECH = 0x00008f60u; + SCE->REG_ECH = 0x00003000u; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x000000feu; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_ECH = 0x1000d3c2u; + SCE->REG_ECH = 0x38008bc0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00003540u; + SCE->REG_ECH = 0x00003561u; + SCE->REG_ECH = 0x00003582u; + SCE->REG_ECH = 0x000035a3u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000076u); + HW_SCE_p_func101(0xc893c247u, 0x8ee29456u, 0xf2c5efc8u, 0x848d8db3u); + HW_SCE_p_func059(); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[4]; + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_E0H = 0x80080000u; + SCE->REG_00H = 0x00008223u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_100H = InData_KeyIndex[13]; + SCE->REG_100H = InData_KeyIndex[14]; + SCE->REG_100H = InData_KeyIndex[15]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func101(0x45ae9272u, 0x79061a99u, 0xea79821du, 0xe5f9bcc5u); + } + HW_SCE_p_func100(0x063a8108u, 0x8c07b7a6u, 0x7e2e826fu, 0xe2a527e9u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x618eda6cu, 0xd48d8015u, 0xaa3ad2fbu, 0xb0d44b36u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_7CH = 0x00000011u; + SCE->REG_104H = 0x00000754u; + SCE->REG_74H = 0x00000004u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x6a09e667u); + SCE->REG_100H = change_endian_long(0xbb67ae85u); + SCE->REG_100H = change_endian_long(0x3c6ef372u); + SCE->REG_100H = change_endian_long(0xa54ff53au); + SCE->REG_100H = change_endian_long(0x510e527fu); + SCE->REG_100H = change_endian_long(0x9b05688cu); + SCE->REG_100H = change_endian_long(0x1f83d9abu); + SCE->REG_100H = change_endian_long(0x5be0cd19u); + SCE->REG_74H = 0x00000002u; + HW_SCE_p_func001(); + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p76i.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76u.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76u.c new file mode 100644 index 000000000..72cf5ecfc --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p76u.c @@ -0,0 +1,72 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_Sha256HmacUpdateSub(uint32_t *InData_PaddedMsg, uint32_t MAX_CNT) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + HW_SCE_p_func000(InData_PaddedMsg, MAX_CNT); + HW_SCE_p_func101(0x04493113u, 0xd0a36523u, 0x247a2f8fu, 0x9bf01b74u); +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p76u.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p79.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p79.c new file mode 100644 index 000000000..f3cbc8773 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p79.c @@ -0,0 +1,831 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Rsa3072ModularExponentEncryptSub(const uint32_t *InData_KeyIndex, const uint32_t *InData_Text, uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00007901u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000079u); + HW_SCE_p_func101(0x0fd665fbu, 0x35663e4cu, 0x472c9c29u, 0x480cabf3u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0000000eu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000079u); + HW_SCE_p_func101(0x6b0497cfu, 0x2c4fe92bu, 0x51befe47u, 0xb7bd24b5u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00006362u; + SCE->REG_D0H = 0x40001800u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + for(iLoop=0; iLoop<32; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + for(iLoop=32; iLoop<64; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + for(iLoop=64; iLoop<96; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + SCE->REG_E0H = 0x80010280u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x7ee8691bu, 0x37b5f60au, 0x87859dc1u, 0x394206a8u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x1e94bb70u, 0xd0807b52u, 0xb19b60a0u, 0x875879ffu); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x115bdcb3u, 0x073a2576u, 0xa28bdb20u, 0x2f2d587au); + HW_SCE_p_func103(); + HW_SCE_p_func100(0xa970f4fau, 0xb28af495u, 0x5d28b925u, 0x2ec6dfa3u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x010c0c04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func100(0x4350ff0fu, 0x54672d5au, 0x3e9ea952u, 0xed9785dau); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x830263b0u, 0x987f3967u, 0xdd7089eau, 0xfb6164b3u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(752); + HW_SCE_p_func100(0x7d8ff34eu, 0x39614ffau, 0x02d73beeu, 0x32051da9u); + HW_SCE_p_func314(752+32); + HW_SCE_p_func100(0x336798e0u, 0x6d49a1fbu, 0x49bd8f75u, 0x8a0e9fa7u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xa0287871u, 0x20908695u, 0x4fda4e72u, 0x8d0d67a8u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func319(716); + HW_SCE_p_func100(0xe3e3d8acu, 0xa1e30561u, 0x83e21b2eu, 0x7d239563u); + HW_SCE_p_func314(716+32); + HW_SCE_p_func100(0xfa3af305u, 0xdb097dcfu, 0xf809dec6u, 0xfd840cdeu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9fd08737u, 0x4f2d0f36u, 0x1b1a4873u, 0xf3b346f4u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func319(680); + HW_SCE_p_func100(0xe3cbffc7u, 0xa0ff85e1u, 0x18893f9fu, 0xae2c8b0eu); + HW_SCE_p_func314(680+32); + SCE->REG_00H = 0x0000037fu; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x800103e0u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3800dbe0u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00001f67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_100H = InData_Text[4]; + SCE->REG_100H = InData_Text[5]; + SCE->REG_100H = InData_Text[6]; + SCE->REG_100H = InData_Text[7]; + SCE->REG_100H = InData_Text[8]; + SCE->REG_100H = InData_Text[9]; + SCE->REG_100H = InData_Text[10]; + SCE->REG_100H = InData_Text[11]; + SCE->REG_100H = InData_Text[12]; + SCE->REG_100H = InData_Text[13]; + SCE->REG_100H = InData_Text[14]; + SCE->REG_100H = InData_Text[15]; + SCE->REG_100H = InData_Text[16]; + SCE->REG_100H = InData_Text[17]; + SCE->REG_100H = InData_Text[18]; + SCE->REG_100H = InData_Text[19]; + SCE->REG_100H = InData_Text[20]; + SCE->REG_100H = InData_Text[21]; + SCE->REG_100H = InData_Text[22]; + SCE->REG_100H = InData_Text[23]; + SCE->REG_100H = InData_Text[24]; + SCE->REG_100H = InData_Text[25]; + SCE->REG_100H = InData_Text[26]; + SCE->REG_100H = InData_Text[27]; + SCE->REG_100H = InData_Text[28]; + SCE->REG_100H = InData_Text[29]; + SCE->REG_100H = InData_Text[30]; + SCE->REG_100H = InData_Text[31]; + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_2CH = 0x00000014u; + SCE->REG_104H = 0x00003f67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[32]; + SCE->REG_100H = InData_Text[33]; + SCE->REG_100H = InData_Text[34]; + SCE->REG_100H = InData_Text[35]; + SCE->REG_100H = InData_Text[36]; + SCE->REG_100H = InData_Text[37]; + SCE->REG_100H = InData_Text[38]; + SCE->REG_100H = InData_Text[39]; + SCE->REG_100H = InData_Text[40]; + SCE->REG_100H = InData_Text[41]; + SCE->REG_100H = InData_Text[42]; + SCE->REG_100H = InData_Text[43]; + SCE->REG_100H = InData_Text[44]; + SCE->REG_100H = InData_Text[45]; + SCE->REG_100H = InData_Text[46]; + SCE->REG_100H = InData_Text[47]; + SCE->REG_100H = InData_Text[48]; + SCE->REG_100H = InData_Text[49]; + SCE->REG_100H = InData_Text[50]; + SCE->REG_100H = InData_Text[51]; + SCE->REG_100H = InData_Text[52]; + SCE->REG_100H = InData_Text[53]; + SCE->REG_100H = InData_Text[54]; + SCE->REG_100H = InData_Text[55]; + SCE->REG_100H = InData_Text[56]; + SCE->REG_100H = InData_Text[57]; + SCE->REG_100H = InData_Text[58]; + SCE->REG_100H = InData_Text[59]; + SCE->REG_100H = InData_Text[60]; + SCE->REG_100H = InData_Text[61]; + SCE->REG_100H = InData_Text[62]; + SCE->REG_100H = InData_Text[63]; + SCE->REG_100H = InData_Text[64]; + SCE->REG_100H = InData_Text[65]; + SCE->REG_100H = InData_Text[66]; + SCE->REG_100H = InData_Text[67]; + SCE->REG_100H = InData_Text[68]; + SCE->REG_100H = InData_Text[69]; + SCE->REG_100H = InData_Text[70]; + SCE->REG_100H = InData_Text[71]; + SCE->REG_100H = InData_Text[72]; + SCE->REG_100H = InData_Text[73]; + SCE->REG_100H = InData_Text[74]; + SCE->REG_100H = InData_Text[75]; + SCE->REG_100H = InData_Text[76]; + SCE->REG_100H = InData_Text[77]; + SCE->REG_100H = InData_Text[78]; + SCE->REG_100H = InData_Text[79]; + SCE->REG_100H = InData_Text[80]; + SCE->REG_100H = InData_Text[81]; + SCE->REG_100H = InData_Text[82]; + SCE->REG_100H = InData_Text[83]; + SCE->REG_100H = InData_Text[84]; + SCE->REG_100H = InData_Text[85]; + SCE->REG_100H = InData_Text[86]; + SCE->REG_100H = InData_Text[87]; + SCE->REG_100H = InData_Text[88]; + SCE->REG_100H = InData_Text[89]; + SCE->REG_100H = InData_Text[90]; + SCE->REG_100H = InData_Text[91]; + SCE->REG_100H = InData_Text[92]; + SCE->REG_100H = InData_Text[93]; + SCE->REG_100H = InData_Text[94]; + SCE->REG_100H = InData_Text[95]; + SCE->REG_28H = 0x009f0001u; + HW_SCE_p_func100(0x3b932c9du, 0xe60b45f9u, 0x4c68dc70u, 0xbab75753u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019de420u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xf14dc81du, 0x08c983d3u, 0x2ab61a1eu, 0x451526acu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func319(72); + HW_SCE_p_func100(0x2038a22au, 0xb18b5053u, 0xaeaa8fb6u, 0x146a776cu); + HW_SCE_p_func314(72+32); + HW_SCE_p_func100(0x98d4795du, 0xc5730533u, 0x8758a926u, 0x59185715u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019969f4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x219de09du, 0x3123024fu, 0x16875a12u, 0x75a53b8eu); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000025u; + HW_SCE_p_func319(36); + HW_SCE_p_func100(0x95492014u, 0xb970b606u, 0x4ce340ceu, 0x17ca043au); + HW_SCE_p_func314(36+32); + HW_SCE_p_func100(0x815aba79u, 0x0c7e88ddu, 0xaa881027u, 0x49e7c658u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01fe1091u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x50c99eb5u, 0xb362b304u, 0xa260fd0cu, 0xd13b0444u); + SCE->REG_00H = 0x00002383u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func319(0); + HW_SCE_p_func100(0x99efb969u, 0xc88fe10cu, 0x3a83bfc6u, 0xd056ba30u); + HW_SCE_p_func314(0+32); + HW_SCE_p_func100(0x037788a3u, 0x79be5549u, 0xe46f539eu, 0x5aab9302u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000040d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00a10000u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019410dfu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x526c5725u, 0x2b7bafbcu, 0x6f8db96cu, 0xeb735ef5u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(680); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x010273a4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x0865271cu, 0x120ff1a1u, 0x71f5a98au, 0xfccde033u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000011u; + HW_SCE_p_func320(716); + SCE->REG_24H = 0x000016c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x018e0c4cu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xaf4abd00u, 0x732a43fdu, 0xf1b0a12cu, 0x8b129d76u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func320(752); + SCE->REG_24H = 0x000060d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x000080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x009f0001u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01fe1091u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x31290a2bu, 0xbf7356c4u, 0x4d0cccfau, 0x22e1373fu); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func320(0); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019969f4u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x8c99cd47u, 0x2868da89u, 0x91452e8eu, 0x7963c836u); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000015u; + HW_SCE_p_func320(36); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x019de420u); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00003283u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func320(72); + SCE->REG_24H = 0x0000a0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00bf0001u; + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x3578337cu, 0xf2829ff4u, 0xcfc2f8a8u, 0xf4ebc9bau); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xa3c643d5u, 0xbeb0bc69u, 0xc8cb1884u, 0x31c8ab72u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x00000079u; + HW_SCE_p_func101(0xee77e57cu, 0x9533b284u, 0x8d1c3bc5u, 0x7dafdaabu); + HW_SCE_p_func325(); + SCE->REG_28H = 0x009f0001u; + HW_SCE_p_func100(0x89f73d3fu, 0x7ca8dee1u, 0x9173e011u, 0x633d40e3u); + SCE->REG_2CH = 0x00000020u; + SCE->REG_04H = 0x00000382u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + OutData_Text[4] = SCE->REG_100H; + OutData_Text[5] = SCE->REG_100H; + OutData_Text[6] = SCE->REG_100H; + OutData_Text[7] = SCE->REG_100H; + OutData_Text[8] = SCE->REG_100H; + OutData_Text[9] = SCE->REG_100H; + OutData_Text[10] = SCE->REG_100H; + OutData_Text[11] = SCE->REG_100H; + OutData_Text[12] = SCE->REG_100H; + OutData_Text[13] = SCE->REG_100H; + OutData_Text[14] = SCE->REG_100H; + OutData_Text[15] = SCE->REG_100H; + OutData_Text[16] = SCE->REG_100H; + OutData_Text[17] = SCE->REG_100H; + OutData_Text[18] = SCE->REG_100H; + OutData_Text[19] = SCE->REG_100H; + OutData_Text[20] = SCE->REG_100H; + OutData_Text[21] = SCE->REG_100H; + OutData_Text[22] = SCE->REG_100H; + OutData_Text[23] = SCE->REG_100H; + OutData_Text[24] = SCE->REG_100H; + OutData_Text[25] = SCE->REG_100H; + OutData_Text[26] = SCE->REG_100H; + OutData_Text[27] = SCE->REG_100H; + OutData_Text[28] = SCE->REG_100H; + OutData_Text[29] = SCE->REG_100H; + OutData_Text[30] = SCE->REG_100H; + OutData_Text[31] = SCE->REG_100H; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func100(0xa42466f5u, 0x57bd3bb3u, 0xb6f415b2u, 0xe32c0359u); + SCE->REG_2CH = 0x00000022u; + SCE->REG_04H = 0x00000302u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[32] = SCE->REG_100H; + OutData_Text[33] = SCE->REG_100H; + OutData_Text[34] = SCE->REG_100H; + OutData_Text[35] = SCE->REG_100H; + OutData_Text[36] = SCE->REG_100H; + OutData_Text[37] = SCE->REG_100H; + OutData_Text[38] = SCE->REG_100H; + OutData_Text[39] = SCE->REG_100H; + OutData_Text[40] = SCE->REG_100H; + OutData_Text[41] = SCE->REG_100H; + OutData_Text[42] = SCE->REG_100H; + OutData_Text[43] = SCE->REG_100H; + OutData_Text[44] = SCE->REG_100H; + OutData_Text[45] = SCE->REG_100H; + OutData_Text[46] = SCE->REG_100H; + OutData_Text[47] = SCE->REG_100H; + OutData_Text[48] = SCE->REG_100H; + OutData_Text[49] = SCE->REG_100H; + OutData_Text[50] = SCE->REG_100H; + OutData_Text[51] = SCE->REG_100H; + OutData_Text[52] = SCE->REG_100H; + OutData_Text[53] = SCE->REG_100H; + OutData_Text[54] = SCE->REG_100H; + OutData_Text[55] = SCE->REG_100H; + OutData_Text[56] = SCE->REG_100H; + OutData_Text[57] = SCE->REG_100H; + OutData_Text[58] = SCE->REG_100H; + OutData_Text[59] = SCE->REG_100H; + OutData_Text[60] = SCE->REG_100H; + OutData_Text[61] = SCE->REG_100H; + OutData_Text[62] = SCE->REG_100H; + OutData_Text[63] = SCE->REG_100H; + OutData_Text[64] = SCE->REG_100H; + OutData_Text[65] = SCE->REG_100H; + OutData_Text[66] = SCE->REG_100H; + OutData_Text[67] = SCE->REG_100H; + OutData_Text[68] = SCE->REG_100H; + OutData_Text[69] = SCE->REG_100H; + OutData_Text[70] = SCE->REG_100H; + OutData_Text[71] = SCE->REG_100H; + OutData_Text[72] = SCE->REG_100H; + OutData_Text[73] = SCE->REG_100H; + OutData_Text[74] = SCE->REG_100H; + OutData_Text[75] = SCE->REG_100H; + OutData_Text[76] = SCE->REG_100H; + OutData_Text[77] = SCE->REG_100H; + OutData_Text[78] = SCE->REG_100H; + OutData_Text[79] = SCE->REG_100H; + OutData_Text[80] = SCE->REG_100H; + OutData_Text[81] = SCE->REG_100H; + OutData_Text[82] = SCE->REG_100H; + OutData_Text[83] = SCE->REG_100H; + OutData_Text[84] = SCE->REG_100H; + OutData_Text[85] = SCE->REG_100H; + OutData_Text[86] = SCE->REG_100H; + OutData_Text[87] = SCE->REG_100H; + OutData_Text[88] = SCE->REG_100H; + OutData_Text[89] = SCE->REG_100H; + OutData_Text[90] = SCE->REG_100H; + OutData_Text[91] = SCE->REG_100H; + OutData_Text[92] = SCE->REG_100H; + OutData_Text[93] = SCE->REG_100H; + OutData_Text[94] = SCE->REG_100H; + OutData_Text[95] = SCE->REG_100H; + HW_SCE_p_func102(0xfeb44e6eu, 0x7548637du, 0x57cf5ec8u, 0xef21b7b0u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p79_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p7b.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p7b.c new file mode 100644 index 000000000..34168a577 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p7b.c @@ -0,0 +1,787 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Rsa4096ModularExponentEncryptSub(const uint32_t *InData_KeyIndex, const uint32_t *InData_Text, uint32_t *OutData_Text) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00007b01u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000007bu); + HW_SCE_p_func101(0xc0289cc8u, 0x0da9ca5au, 0x10386cecu, 0xb3028594u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x00000010u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000007bu); + HW_SCE_p_func101(0x2309da37u, 0xf0f28872u, 0x6cfd2509u, 0xa7f31384u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_28H = 0x00bf0001u; + SCE->REG_104H = 0x00007f62u; + SCE->REG_D0H = 0x40001f00u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + for(iLoop=0; iLoop<64; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + for(iLoop=64; iLoop<128; iLoop=iLoop+4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + SCE->REG_E0H = 0x80010280u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+5 + 3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x903b968eu, 0xad9da53cu, 0xaba0cd07u, 0x97b48c76u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x54d41d5au, 0x06b3a163u, 0x53f979b9u, 0x47bf5286u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x461f3249u, 0x2efadb3eu, 0xbaf07020u, 0xaeeceaecu); + HW_SCE_p_func103(); + HW_SCE_p_func100(0xe5463b0du, 0xcd954697u, 0x740fdb08u, 0xc51bf68cu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x010c0c04u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + HW_SCE_p_func100(0x666934e9u, 0x793e6d91u, 0x0e43c17eu, 0x0616660cu); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012dc3c7u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xe5642d63u, 0xc3d07339u, 0xa16918beu, 0xa74ae22eu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(748); + HW_SCE_p_func100(0x3839dc3du, 0x00caee54u, 0xce7cc0a9u, 0xc779149fu); + HW_SCE_p_func314(748+64); + HW_SCE_p_func100(0x82eca6bdu, 0xdb97e979u, 0x36f8c5f4u, 0x8f0548a4u); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4fa851eau, 0xfe31e49eu, 0xbf16a61au, 0x411d969cu); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000022u; + HW_SCE_p_func313(680); + HW_SCE_p_func100(0x9810dd6au, 0x2c76d595u, 0xd604ae28u, 0xf8772679u); + HW_SCE_p_func314(680+64); + SCE->REG_00H = 0x000003ffu; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_E0H = 0x800103e0u; + SCE->REG_00H = 0x00008307u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x3800dbe0u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + HW_SCE_p_func100(0x2fd0da4fu, 0xc0180b8eu, 0x9b930e08u, 0x25b04aecu); + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00003f67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[0]; + SCE->REG_100H = InData_Text[1]; + SCE->REG_100H = InData_Text[2]; + SCE->REG_100H = InData_Text[3]; + SCE->REG_100H = InData_Text[4]; + SCE->REG_100H = InData_Text[5]; + SCE->REG_100H = InData_Text[6]; + SCE->REG_100H = InData_Text[7]; + SCE->REG_100H = InData_Text[8]; + SCE->REG_100H = InData_Text[9]; + SCE->REG_100H = InData_Text[10]; + SCE->REG_100H = InData_Text[11]; + SCE->REG_100H = InData_Text[12]; + SCE->REG_100H = InData_Text[13]; + SCE->REG_100H = InData_Text[14]; + SCE->REG_100H = InData_Text[15]; + SCE->REG_100H = InData_Text[16]; + SCE->REG_100H = InData_Text[17]; + SCE->REG_100H = InData_Text[18]; + SCE->REG_100H = InData_Text[19]; + SCE->REG_100H = InData_Text[20]; + SCE->REG_100H = InData_Text[21]; + SCE->REG_100H = InData_Text[22]; + SCE->REG_100H = InData_Text[23]; + SCE->REG_100H = InData_Text[24]; + SCE->REG_100H = InData_Text[25]; + SCE->REG_100H = InData_Text[26]; + SCE->REG_100H = InData_Text[27]; + SCE->REG_100H = InData_Text[28]; + SCE->REG_100H = InData_Text[29]; + SCE->REG_100H = InData_Text[30]; + SCE->REG_100H = InData_Text[31]; + SCE->REG_100H = InData_Text[32]; + SCE->REG_100H = InData_Text[33]; + SCE->REG_100H = InData_Text[34]; + SCE->REG_100H = InData_Text[35]; + SCE->REG_100H = InData_Text[36]; + SCE->REG_100H = InData_Text[37]; + SCE->REG_100H = InData_Text[38]; + SCE->REG_100H = InData_Text[39]; + SCE->REG_100H = InData_Text[40]; + SCE->REG_100H = InData_Text[41]; + SCE->REG_100H = InData_Text[42]; + SCE->REG_100H = InData_Text[43]; + SCE->REG_100H = InData_Text[44]; + SCE->REG_100H = InData_Text[45]; + SCE->REG_100H = InData_Text[46]; + SCE->REG_100H = InData_Text[47]; + SCE->REG_100H = InData_Text[48]; + SCE->REG_100H = InData_Text[49]; + SCE->REG_100H = InData_Text[50]; + SCE->REG_100H = InData_Text[51]; + SCE->REG_100H = InData_Text[52]; + SCE->REG_100H = InData_Text[53]; + SCE->REG_100H = InData_Text[54]; + SCE->REG_100H = InData_Text[55]; + SCE->REG_100H = InData_Text[56]; + SCE->REG_100H = InData_Text[57]; + SCE->REG_100H = InData_Text[58]; + SCE->REG_100H = InData_Text[59]; + SCE->REG_100H = InData_Text[60]; + SCE->REG_100H = InData_Text[61]; + SCE->REG_100H = InData_Text[62]; + SCE->REG_100H = InData_Text[63]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0132d44bu); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x3279f1d9u, 0x0f2dfdfbu, 0x0f0ffcb2u, 0x6357c36au); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000020u; + HW_SCE_p_func313(68); + HW_SCE_p_func100(0xf2add757u, 0xfa02b79bu, 0x6c5ffee4u, 0x82be2125u); + HW_SCE_p_func314(68+64); + HW_SCE_p_func100(0x692e1d9fu, 0x0ff2e4d0u, 0x35103c8du, 0x81420ab6u); + SCE->REG_2CH = 0x00000014u; + SCE->REG_104H = 0x00003f67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Text[64]; + SCE->REG_100H = InData_Text[65]; + SCE->REG_100H = InData_Text[66]; + SCE->REG_100H = InData_Text[67]; + SCE->REG_100H = InData_Text[68]; + SCE->REG_100H = InData_Text[69]; + SCE->REG_100H = InData_Text[70]; + SCE->REG_100H = InData_Text[71]; + SCE->REG_100H = InData_Text[72]; + SCE->REG_100H = InData_Text[73]; + SCE->REG_100H = InData_Text[74]; + SCE->REG_100H = InData_Text[75]; + SCE->REG_100H = InData_Text[76]; + SCE->REG_100H = InData_Text[77]; + SCE->REG_100H = InData_Text[78]; + SCE->REG_100H = InData_Text[79]; + SCE->REG_100H = InData_Text[80]; + SCE->REG_100H = InData_Text[81]; + SCE->REG_100H = InData_Text[82]; + SCE->REG_100H = InData_Text[83]; + SCE->REG_100H = InData_Text[84]; + SCE->REG_100H = InData_Text[85]; + SCE->REG_100H = InData_Text[86]; + SCE->REG_100H = InData_Text[87]; + SCE->REG_100H = InData_Text[88]; + SCE->REG_100H = InData_Text[89]; + SCE->REG_100H = InData_Text[90]; + SCE->REG_100H = InData_Text[91]; + SCE->REG_100H = InData_Text[92]; + SCE->REG_100H = InData_Text[93]; + SCE->REG_100H = InData_Text[94]; + SCE->REG_100H = InData_Text[95]; + SCE->REG_100H = InData_Text[96]; + SCE->REG_100H = InData_Text[97]; + SCE->REG_100H = InData_Text[98]; + SCE->REG_100H = InData_Text[99]; + SCE->REG_100H = InData_Text[100]; + SCE->REG_100H = InData_Text[101]; + SCE->REG_100H = InData_Text[102]; + SCE->REG_100H = InData_Text[103]; + SCE->REG_100H = InData_Text[104]; + SCE->REG_100H = InData_Text[105]; + SCE->REG_100H = InData_Text[106]; + SCE->REG_100H = InData_Text[107]; + SCE->REG_100H = InData_Text[108]; + SCE->REG_100H = InData_Text[109]; + SCE->REG_100H = InData_Text[110]; + SCE->REG_100H = InData_Text[111]; + SCE->REG_100H = InData_Text[112]; + SCE->REG_100H = InData_Text[113]; + SCE->REG_100H = InData_Text[114]; + SCE->REG_100H = InData_Text[115]; + SCE->REG_100H = InData_Text[116]; + SCE->REG_100H = InData_Text[117]; + SCE->REG_100H = InData_Text[118]; + SCE->REG_100H = InData_Text[119]; + SCE->REG_100H = InData_Text[120]; + SCE->REG_100H = InData_Text[121]; + SCE->REG_100H = InData_Text[122]; + SCE->REG_100H = InData_Text[123]; + SCE->REG_100H = InData_Text[124]; + SCE->REG_100H = InData_Text[125]; + SCE->REG_100H = InData_Text[126]; + SCE->REG_100H = InData_Text[127]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01432c7au); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x6856f51bu, 0x67c3861bu, 0x0f98564fu, 0x1c2173b6u); + SCE->REG_00H = 0x00012303u; + SCE->REG_2CH = 0x00000024u; + HW_SCE_p_func313(0); + HW_SCE_p_func100(0x2cc7c29fu, 0x55989bb4u, 0xe0885821u, 0x47946e2bu); + HW_SCE_p_func314(0+64); + HW_SCE_p_func100(0x4a70a9f1u, 0x00cbb8f2u, 0xd7e7b87cu, 0xb4b60fccu); + SCE->REG_24H = 0x000040d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00a10000u; + SCE->REG_24H = 0x000005c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000581u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01b9d3a9u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x9ac95ad5u, 0x6a879f56u, 0x923eb619u, 0x26d3747bu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(680); + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x012dc3c7u); + HW_SCE_p_func080(); + HW_SCE_p_func100(0x4f01d2cfu, 0x0d4eb0adu, 0xcaba60efu, 0x3970713cu); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + HW_SCE_p_func312(748); + SCE->REG_24H = 0x000080d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x01432c7au); + HW_SCE_p_func080(); + HW_SCE_p_func100(0xacafc88eu, 0xdbd38fc2u, 0xb6c15c6au, 0x17f023f3u); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + HW_SCE_p_func312(0); + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x80010020u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0132d44bu); + HW_SCE_p_func080(); + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000010u; + HW_SCE_p_func312(68); + SCE->REG_24H = 0x04001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x060049c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x02001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xee4a893eu, 0x61180774u, 0x5f024dfeu, 0x354fe237u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xcbeb2459u, 0x60ad9840u, 0x6aa33f73u, 0xc3e165e4u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000007bu; + HW_SCE_p_func101(0xad1ea16du, 0xf8e9b417u, 0x6e7fb16au, 0x0cb69393u); + HW_SCE_p_func307(); + HW_SCE_p_func100(0x79311285u, 0xe19252e8u, 0x6b8254d5u, 0x5380f50eu); + SCE->REG_2CH = 0x00000020u; + SCE->REG_04H = 0x00000302u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[0] = SCE->REG_100H; + OutData_Text[1] = SCE->REG_100H; + OutData_Text[2] = SCE->REG_100H; + OutData_Text[3] = SCE->REG_100H; + OutData_Text[4] = SCE->REG_100H; + OutData_Text[5] = SCE->REG_100H; + OutData_Text[6] = SCE->REG_100H; + OutData_Text[7] = SCE->REG_100H; + OutData_Text[8] = SCE->REG_100H; + OutData_Text[9] = SCE->REG_100H; + OutData_Text[10] = SCE->REG_100H; + OutData_Text[11] = SCE->REG_100H; + OutData_Text[12] = SCE->REG_100H; + OutData_Text[13] = SCE->REG_100H; + OutData_Text[14] = SCE->REG_100H; + OutData_Text[15] = SCE->REG_100H; + OutData_Text[16] = SCE->REG_100H; + OutData_Text[17] = SCE->REG_100H; + OutData_Text[18] = SCE->REG_100H; + OutData_Text[19] = SCE->REG_100H; + OutData_Text[20] = SCE->REG_100H; + OutData_Text[21] = SCE->REG_100H; + OutData_Text[22] = SCE->REG_100H; + OutData_Text[23] = SCE->REG_100H; + OutData_Text[24] = SCE->REG_100H; + OutData_Text[25] = SCE->REG_100H; + OutData_Text[26] = SCE->REG_100H; + OutData_Text[27] = SCE->REG_100H; + OutData_Text[28] = SCE->REG_100H; + OutData_Text[29] = SCE->REG_100H; + OutData_Text[30] = SCE->REG_100H; + OutData_Text[31] = SCE->REG_100H; + OutData_Text[32] = SCE->REG_100H; + OutData_Text[33] = SCE->REG_100H; + OutData_Text[34] = SCE->REG_100H; + OutData_Text[35] = SCE->REG_100H; + OutData_Text[36] = SCE->REG_100H; + OutData_Text[37] = SCE->REG_100H; + OutData_Text[38] = SCE->REG_100H; + OutData_Text[39] = SCE->REG_100H; + OutData_Text[40] = SCE->REG_100H; + OutData_Text[41] = SCE->REG_100H; + OutData_Text[42] = SCE->REG_100H; + OutData_Text[43] = SCE->REG_100H; + OutData_Text[44] = SCE->REG_100H; + OutData_Text[45] = SCE->REG_100H; + OutData_Text[46] = SCE->REG_100H; + OutData_Text[47] = SCE->REG_100H; + OutData_Text[48] = SCE->REG_100H; + OutData_Text[49] = SCE->REG_100H; + OutData_Text[50] = SCE->REG_100H; + OutData_Text[51] = SCE->REG_100H; + OutData_Text[52] = SCE->REG_100H; + OutData_Text[53] = SCE->REG_100H; + OutData_Text[54] = SCE->REG_100H; + OutData_Text[55] = SCE->REG_100H; + OutData_Text[56] = SCE->REG_100H; + OutData_Text[57] = SCE->REG_100H; + OutData_Text[58] = SCE->REG_100H; + OutData_Text[59] = SCE->REG_100H; + OutData_Text[60] = SCE->REG_100H; + OutData_Text[61] = SCE->REG_100H; + OutData_Text[62] = SCE->REG_100H; + OutData_Text[63] = SCE->REG_100H; + HW_SCE_p_func100(0x05cf816cu, 0xaebbba33u, 0xc92ae771u, 0x1fba7f70u); + SCE->REG_2CH = 0x00000022u; + SCE->REG_04H = 0x00000302u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Text[64] = SCE->REG_100H; + OutData_Text[65] = SCE->REG_100H; + OutData_Text[66] = SCE->REG_100H; + OutData_Text[67] = SCE->REG_100H; + OutData_Text[68] = SCE->REG_100H; + OutData_Text[69] = SCE->REG_100H; + OutData_Text[70] = SCE->REG_100H; + OutData_Text[71] = SCE->REG_100H; + OutData_Text[72] = SCE->REG_100H; + OutData_Text[73] = SCE->REG_100H; + OutData_Text[74] = SCE->REG_100H; + OutData_Text[75] = SCE->REG_100H; + OutData_Text[76] = SCE->REG_100H; + OutData_Text[77] = SCE->REG_100H; + OutData_Text[78] = SCE->REG_100H; + OutData_Text[79] = SCE->REG_100H; + OutData_Text[80] = SCE->REG_100H; + OutData_Text[81] = SCE->REG_100H; + OutData_Text[82] = SCE->REG_100H; + OutData_Text[83] = SCE->REG_100H; + OutData_Text[84] = SCE->REG_100H; + OutData_Text[85] = SCE->REG_100H; + OutData_Text[86] = SCE->REG_100H; + OutData_Text[87] = SCE->REG_100H; + OutData_Text[88] = SCE->REG_100H; + OutData_Text[89] = SCE->REG_100H; + OutData_Text[90] = SCE->REG_100H; + OutData_Text[91] = SCE->REG_100H; + OutData_Text[92] = SCE->REG_100H; + OutData_Text[93] = SCE->REG_100H; + OutData_Text[94] = SCE->REG_100H; + OutData_Text[95] = SCE->REG_100H; + OutData_Text[96] = SCE->REG_100H; + OutData_Text[97] = SCE->REG_100H; + OutData_Text[98] = SCE->REG_100H; + OutData_Text[99] = SCE->REG_100H; + OutData_Text[100] = SCE->REG_100H; + OutData_Text[101] = SCE->REG_100H; + OutData_Text[102] = SCE->REG_100H; + OutData_Text[103] = SCE->REG_100H; + OutData_Text[104] = SCE->REG_100H; + OutData_Text[105] = SCE->REG_100H; + OutData_Text[106] = SCE->REG_100H; + OutData_Text[107] = SCE->REG_100H; + OutData_Text[108] = SCE->REG_100H; + OutData_Text[109] = SCE->REG_100H; + OutData_Text[110] = SCE->REG_100H; + OutData_Text[111] = SCE->REG_100H; + OutData_Text[112] = SCE->REG_100H; + OutData_Text[113] = SCE->REG_100H; + OutData_Text[114] = SCE->REG_100H; + OutData_Text[115] = SCE->REG_100H; + OutData_Text[116] = SCE->REG_100H; + OutData_Text[117] = SCE->REG_100H; + OutData_Text[118] = SCE->REG_100H; + OutData_Text[119] = SCE->REG_100H; + OutData_Text[120] = SCE->REG_100H; + OutData_Text[121] = SCE->REG_100H; + OutData_Text[122] = SCE->REG_100H; + OutData_Text[123] = SCE->REG_100H; + OutData_Text[124] = SCE->REG_100H; + OutData_Text[125] = SCE->REG_100H; + OutData_Text[126] = SCE->REG_100H; + OutData_Text[127] = SCE->REG_100H; + HW_SCE_p_func102(0xd5b1053bu, 0x51915abdu, 0x25d683eeu, 0x9890acd5u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p7b_r1.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9a.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9a.c new file mode 100644 index 000000000..7f0c17346 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9a.c @@ -0,0 +1,682 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Ecc256ScalarMultiplicationSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, const uint32_t *InData_PubKey, uint32_t *OutData_R) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00009a01u; + SCE->REG_108H = 0x00000000u; + SCE->REG_28H = 0x00870001u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010380u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_104H = 0x00000f68u; + SCE->REG_E0H = 0x8090001eu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop + 1) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[iLoop + 0]; + } + for (iLoop = 0; iLoop < 2; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x00000bffu; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000d3e0u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_ECH = 0x1000d3e0u; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x000037beu; + SCE->REG_ECH = 0x0000a7a0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000383du; + SCE->REG_ECH = 0x38001001u; + SCE->REG_ECH = 0x1000d3e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x38000fffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x0000a7c0u; + SCE->REG_ECH = 0x00000020u; + } + SCE->REG_ECH = 0x30000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d3e1u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x38000f9cu; + SCE->REG_ECH = 0x1000d3e1u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x9f58c96cu, 0x24afabb1u, 0xd7924d6du, 0xffcb5f05u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xe52fe7beu, 0x50ce0297u, 0xd96d5fb9u, 0x734916fbu); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000009au); + HW_SCE_p_func101(0x6026ca65u, 0x5c1ca45du, 0x10ae9afcu, 0x9e7b87b4u); + HW_SCE_p_func043(); + HW_SCE_p_func074_r1(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000009au); + HW_SCE_p_func101(0x832ab6cbu, 0xf2fc811cu, 0x465c0d18u, 0x085b85d7u); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000011u; + for (iLoop = 0; iLoop < 8; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x3d38fe92u, 0x745739efu, 0x96383b59u, 0x1fcc88e9u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x71c33e0du, 0xb021c479u, 0x6b63089eu, 0x571fde41u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x86959a7cu, 0xa4eed527u, 0xeeec7768u, 0xff9ea61bu); + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000004C8u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000031Cu; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000013Cu; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000001F8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x1ed97c6fu, 0x109d0bc2u, 0xfa651f26u, 0xf32e898eu); + HW_SCE_p_func070_r2(OFS_ADR); + HW_SCE_p_func100(0xd1fe94f1u, 0x147cf197u, 0xf1f0ff33u, 0xab3dc8c1u); + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000dcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000820u; + SCE->REG_24H = 0x80009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000808u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x0000009au; + SCE->REG_ECH = 0x0000377cu; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<256;iLoop=iLoop+1) + { + HW_SCE_p_func101(0xae6f33b4u, 0x064fc23eu, 0x7a4c092bu, 0xd9ff2a9eu); + HW_SCE_p_func300(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xf42c3d9eu, 0x179e2b97u, 0xac23a620u, 0xc94db83bu); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xfa0e2dd1u, 0x0d9f7059u, 0xe5c47b66u, 0x1267bf4fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xd1535a62u, 0x712ffe15u, 0x35a7c325u, 0xaec12d1fu); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0xbfa07cbbu, 0x892d135cu, 0x6f39790au, 0x1ebe4fcbu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xcd606843u, 0x98cbb1f5u, 0x4052dda2u, 0x61b8fdd1u); + } + else + { + HW_SCE_p_func101(0x0ce52ca3u, 0x9ceedb58u, 0x5f26d152u, 0x98cc1206u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x84355fe5u, 0xb797abfcu, 0xc5bc5e73u, 0xf3cdaec0u); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func301(); + HW_SCE_p_func100(0x0c5448bdu, 0xe38e6a0du, 0xbc1dc8f3u, 0xc7fa8025u); + SCE->REG_2CH = 0x00000022u; + SCE->REG_04H = 0x00000322u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_R[0] = SCE->REG_100H; + OutData_R[1] = SCE->REG_100H; + OutData_R[2] = SCE->REG_100H; + OutData_R[3] = SCE->REG_100H; + OutData_R[4] = SCE->REG_100H; + OutData_R[5] = SCE->REG_100H; + OutData_R[6] = SCE->REG_100H; + OutData_R[7] = SCE->REG_100H; + HW_SCE_p_func100(0x11f40d9du, 0xc57e5588u, 0x575e1647u, 0x235ad24bu); + SCE->REG_2CH = 0x00000023u; + SCE->REG_04H = 0x00000322u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_R[8] = SCE->REG_100H; + OutData_R[9] = SCE->REG_100H; + OutData_R[10] = SCE->REG_100H; + OutData_R[11] = SCE->REG_100H; + OutData_R[12] = SCE->REG_100H; + OutData_R[13] = SCE->REG_100H; + OutData_R[14] = SCE->REG_100H; + OutData_R[15] = SCE->REG_100H; + HW_SCE_p_func102(0x69e7c53au, 0x0f736cf0u, 0xc4577672u, 0x449008dcu); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p9a_r3.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9b.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9b.c new file mode 100644 index 000000000..f59270e1d --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_p9b.c @@ -0,0 +1,614 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_Ecc384ScalarMultiplicationSub(const uint32_t *InData_CurveType, const uint32_t *InData_KeyIndex, const uint32_t *InData_PubKey, uint32_t *OutData_R) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x00009b01u; + SCE->REG_108H = 0x00000000u; + SCE->REG_28H = 0x008b0001u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000009bu); + HW_SCE_p_func101(0x05ccca86u, 0xc9809ae4u, 0x1b82b071u, 0xab553c28u); + HW_SCE_p_func043(); + HW_SCE_p_func076(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x0000009bu); + HW_SCE_p_func101(0xba343e79u, 0xfe31a1f3u, 0x7dbd0515u, 0xb71fd7bau); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000b62u; + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x02f087b7u; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x00000011u; + for (iLoop = 0; iLoop < 12; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xa67b83a2u, 0xc869f5b9u, 0x79ac9b3au, 0x05db1be5u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xf1c61cd6u, 0x638a9ff7u, 0x30d2fddfu, 0x66063230u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + HW_SCE_p_func100(0x4d994ba1u, 0x0e83dd5fu, 0x1ad395aeu, 0xf05795a2u); + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000002B4u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000003D8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x7c3c2b42u, 0x77da4ba5u, 0xdd828a5fu, 0xf0ae4b81u); + HW_SCE_p_func027_r2(OFS_ADR); + HW_SCE_p_func100(0xada38979u, 0x5574dcfbu, 0xcbcebb86u, 0x44cc9663u); + SCE->REG_24H = 0x0000dcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000820u; + SCE->REG_24H = 0x80009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000808u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00000b67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[0]; + SCE->REG_100H = InData_PubKey[1]; + SCE->REG_100H = InData_PubKey[2]; + SCE->REG_100H = InData_PubKey[3]; + SCE->REG_100H = InData_PubKey[4]; + SCE->REG_100H = InData_PubKey[5]; + SCE->REG_100H = InData_PubKey[6]; + SCE->REG_100H = InData_PubKey[7]; + SCE->REG_100H = InData_PubKey[8]; + SCE->REG_100H = InData_PubKey[9]; + SCE->REG_100H = InData_PubKey[10]; + SCE->REG_100H = InData_PubKey[11]; + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00000b67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[12]; + SCE->REG_100H = InData_PubKey[13]; + SCE->REG_100H = InData_PubKey[14]; + SCE->REG_100H = InData_PubKey[15]; + SCE->REG_100H = InData_PubKey[16]; + SCE->REG_100H = InData_PubKey[17]; + SCE->REG_100H = InData_PubKey[18]; + SCE->REG_100H = InData_PubKey[19]; + SCE->REG_100H = InData_PubKey[20]; + SCE->REG_100H = InData_PubKey[21]; + SCE->REG_100H = InData_PubKey[22]; + SCE->REG_100H = InData_PubKey[23]; + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000180u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x0000009bu; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<384;iLoop=iLoop+1) + { + HW_SCE_p_func101(0xd1a20304u, 0x7ec5a832u, 0xfe786d80u, 0x8db0ff21u); + HW_SCE_p_func300(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xd89c8381u, 0xd1f4a61cu, 0x434fe417u, 0x7150d01du); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x62b875dcu, 0x77b1bd44u, 0x9da356ddu, 0x268018dbu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x142493c0u, 0x7f78d4e0u, 0xc34d38b2u, 0x5166c60eu); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x6dfda009u, 0xdb9d8c6fu, 0x5f3558dfu, 0x4eeb90f1u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x97eb165fu, 0x003b8d10u, 0xd9f32031u, 0xa635451cu); + } + else + { + HW_SCE_p_func101(0x3775974eu, 0xfd8b4302u, 0x33a3cd37u, 0x5bcc8a49u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0xa93bfadeu, 0x9ae6845au, 0x6ec11109u, 0x707f0125u); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000030u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func301(); + HW_SCE_p_func100(0x036d9c54u, 0xe4a2ebc2u, 0x357cde20u, 0xd1165e27u); + SCE->REG_2CH = 0x00000022u; + SCE->REG_04H = 0x00000332u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_R[0] = SCE->REG_100H; + OutData_R[1] = SCE->REG_100H; + OutData_R[2] = SCE->REG_100H; + OutData_R[3] = SCE->REG_100H; + OutData_R[4] = SCE->REG_100H; + OutData_R[5] = SCE->REG_100H; + OutData_R[6] = SCE->REG_100H; + OutData_R[7] = SCE->REG_100H; + OutData_R[8] = SCE->REG_100H; + OutData_R[9] = SCE->REG_100H; + OutData_R[10] = SCE->REG_100H; + OutData_R[11] = SCE->REG_100H; + HW_SCE_p_func100(0x05a57fffu, 0x0c4047f5u, 0xb8df91a5u, 0x33f572e9u); + SCE->REG_2CH = 0x00000023u; + SCE->REG_04H = 0x00000332u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_R[12] = SCE->REG_100H; + OutData_R[13] = SCE->REG_100H; + OutData_R[14] = SCE->REG_100H; + OutData_R[15] = SCE->REG_100H; + OutData_R[16] = SCE->REG_100H; + OutData_R[17] = SCE->REG_100H; + OutData_R[18] = SCE->REG_100H; + OutData_R[19] = SCE->REG_100H; + OutData_R[20] = SCE->REG_100H; + OutData_R[21] = SCE->REG_100H; + OutData_R[22] = SCE->REG_100H; + OutData_R[23] = SCE->REG_100H; + HW_SCE_p_func102(0xd6535d3fu, 0x32ed02a4u, 0xf2ad998eu, 0x83ac46d5u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_p9b_r2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pe2.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pe2.c new file mode 100644 index 000000000..95c0c992a --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pe2.c @@ -0,0 +1,639 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_TlsEncryptPreMasterSecretSub(uint32_t *InData_PubKey, uint32_t *InData_PreMasterSecret, uint32_t *OutData_PreMasterSecret) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000e201u; + SCE->REG_108H = 0x00000000u; + SCE->REG_C4H = 0x200e1a0du; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = S_RAM[16+0 + 0]; + SCE->REG_100H = S_RAM[16+0 + 1]; + SCE->REG_100H = S_RAM[16+0 + 2]; + SCE->REG_100H = S_RAM[16+0 + 3]; + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040000u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[3]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x00ff0000u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00050000u; + SCE->REG_ECH = 0x1000d3c0u; + SCE->REG_ECH = 0x3800d80fu; + SCE->REG_ECH = 0x2000d3c1u; + SCE->REG_ECH = 0x000037e0u; + SCE->REG_ECH = 0x00008fe0u; + SCE->REG_ECH = 0x000000ffu; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_ECH = 0x1000d3c2u; + SCE->REG_ECH = 0x38008bc0u; + SCE->REG_ECH = 0x00000007u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xd244310fu, 0x547e382fu, 0xb318a02du, 0x464efc11u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x2b469163u, 0xf6f625a5u, 0xdc4f65eau, 0xba0c2c3bu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_104H = 0x00000368u; + SCE->REG_E0H = 0x80040140u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[0]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[1]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[2]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[3]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000e2u); + HW_SCE_p_func101(0xad6085ccu, 0x12c5aee4u, 0x062f76d2u, 0x4b1b7c5cu); + HW_SCE_p_func059(); + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x0154569cu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000e2u); + HW_SCE_p_func101(0x7075c45fu, 0x1a6cd664u, 0x19982f0cu, 0x6ac487efu); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000b62u; + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x02f087b7u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[4]; + SCE->REG_100H = InData_PreMasterSecret[5]; + SCE->REG_100H = InData_PreMasterSecret[6]; + SCE->REG_100H = InData_PreMasterSecret[7]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[8]; + SCE->REG_100H = InData_PreMasterSecret[9]; + SCE->REG_100H = InData_PreMasterSecret[10]; + SCE->REG_100H = InData_PreMasterSecret[11]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[12]; + SCE->REG_100H = InData_PreMasterSecret[13]; + SCE->REG_100H = InData_PreMasterSecret[14]; + SCE->REG_100H = InData_PreMasterSecret[15]; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x808c0004u; + SCE->REG_00H = 0x00008233u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PreMasterSecret[16]; + SCE->REG_100H = InData_PreMasterSecret[17]; + SCE->REG_100H = InData_PreMasterSecret[18]; + SCE->REG_100H = InData_PreMasterSecret[19]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xd487b857u, 0x9f922469u, 0x451b1220u, 0xfcede821u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xfb3a85c0u, 0xa030b5deu, 0x5f5e6b3fu, 0x927f1b5au); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x00003540u; + SCE->REG_ECH = 0x00003561u; + SCE->REG_ECH = 0x00003582u; + SCE->REG_ECH = 0x000035a3u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000033u); + HW_SCE_p_func101(0x9713facau, 0x937b3cc7u, 0xbe78ed55u, 0xc139bf30u); + HW_SCE_p_func059(); + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func100(0x5e488b1du, 0xc49fa0bbu, 0x83027809u, 0x516eb597u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00008c00u; + SCE->REG_ECH = 0x0000ffffu; + SCE->REG_ECH = 0x00009000u; + SCE->REG_ECH = 0x00028080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_00H = 0x00003807u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x01020408u; + SCE->REG_ECH = 0x0000b4a0u; + SCE->REG_ECH = 0x10204080u; + SCE->REG_ECH = 0x0000b4c0u; + SCE->REG_ECH = 0x80200802u; + SCE->REG_ECH = 0x0000b4e0u; + SCE->REG_ECH = 0x40100401u; + SCE->REG_ECH = 0x00000bdeu; + for (iLoop = 0; iLoop < 12; iLoop = iLoop + 1) + { + HW_SCE_p_func100(0x8b40139du, 0xd6c54d3du, 0x6f325de6u, 0x8d189cc4u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80040000u; + SCE->REG_00H = 0x00008213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00001004u; + SCE->REG_ECH = 0x00001025u; + SCE->REG_ECH = 0x00001046u; + SCE->REG_ECH = 0x00001067u; + SCE->REG_E0H = 0x81040000u; + SCE->REG_00H = 0x00003813u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00002fc0u; + HW_SCE_p_func101(0x2382cdc1u, 0x4eacc78bu, 0x8824b301u, 0xe86064aeu); + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x0000000Cu; + SCE->REG_ECH = 0x38000bdfu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_1CH = 0x00402000u; + HW_SCE_p_func100(0x393cedfbu, 0x2b489645u, 0x0928e755u, 0x1d0d4efeu); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80030000u; + SCE->REG_00H = 0x0000820fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00000207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00001004u; + SCE->REG_ECH = 0x00001025u; + SCE->REG_ECH = 0x00001046u; + SCE->REG_E0H = 0x80010140u; + SCE->REG_104H = 0x00000058u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0xffffff00u); + SCE->REG_ECH = 0x00000c4au; + SCE->REG_E0H = 0x81030000u; + SCE->REG_00H = 0x0000380fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000070u; + SCE->REG_E0H = 0x818c0001u; + SCE->REG_00H = 0x00003833u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00008362u; + SCE->REG_D0H = 0x40001f00u; + SCE->REG_C4H = 0x02f087b7u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000014u; + for (iLoop = 0; iLoop < 64; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[iLoop+4 + 0]; + SCE->REG_100H = InData_PubKey[iLoop+4 + 1]; + SCE->REG_100H = InData_PubKey[iLoop+4 + 2]; + SCE->REG_100H = InData_PubKey[iLoop+4 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00013203u; + SCE->REG_2CH = 0x00000012u; + for (iLoop = 0; iLoop < 64; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[iLoop+68 + 0]; + SCE->REG_100H = InData_PubKey[iLoop+68 + 1]; + SCE->REG_100H = InData_PubKey[iLoop+68 + 2]; + SCE->REG_100H = InData_PubKey[iLoop+68 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00f087b5u; + for (iLoop = 0; iLoop < 4; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[iLoop+132 + 0]; + SCE->REG_100H = InData_PubKey[iLoop+132 + 1]; + SCE->REG_100H = InData_PubKey[iLoop+132 + 2]; + SCE->REG_100H = InData_PubKey[iLoop+132 + 3]; + } + SCE->REG_E0H = 0x800100a0u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_PubKey[136]; + SCE->REG_100H = InData_PubKey[137]; + SCE->REG_100H = InData_PubKey[138]; + SCE->REG_100H = InData_PubKey[139]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x140b5355u, 0xd93e8fc0u, 0xa2d44b0du, 0x34fee3cdu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x5540526au, 0x26f6cb09u, 0x86e149a9u, 0x729f605eu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func100(0xe572cffbu, 0xf3bbd0b8u, 0xda874279u, 0x563805dbu); + SCE->REG_18H = 0x00000004u; + SCE->REG_34H = 0x00000000u; + SCE->REG_38H = 0x00000338u; + SCE->REG_E0H = 0x810100a0u; + SCE->REG_00H = 0x00003807u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_28H = 0x00bf0001u; + HW_SCE_p_func100(0x36d94340u, 0x4ed480ffu, 0xb1240401u, 0xfa036355u); + SCE->REG_2CH = 0x00000020u; + SCE->REG_04H = 0x00000302u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PreMasterSecret[0] = SCE->REG_100H; + OutData_PreMasterSecret[1] = SCE->REG_100H; + OutData_PreMasterSecret[2] = SCE->REG_100H; + OutData_PreMasterSecret[3] = SCE->REG_100H; + OutData_PreMasterSecret[4] = SCE->REG_100H; + OutData_PreMasterSecret[5] = SCE->REG_100H; + OutData_PreMasterSecret[6] = SCE->REG_100H; + OutData_PreMasterSecret[7] = SCE->REG_100H; + OutData_PreMasterSecret[8] = SCE->REG_100H; + OutData_PreMasterSecret[9] = SCE->REG_100H; + OutData_PreMasterSecret[10] = SCE->REG_100H; + OutData_PreMasterSecret[11] = SCE->REG_100H; + OutData_PreMasterSecret[12] = SCE->REG_100H; + OutData_PreMasterSecret[13] = SCE->REG_100H; + OutData_PreMasterSecret[14] = SCE->REG_100H; + OutData_PreMasterSecret[15] = SCE->REG_100H; + OutData_PreMasterSecret[16] = SCE->REG_100H; + OutData_PreMasterSecret[17] = SCE->REG_100H; + OutData_PreMasterSecret[18] = SCE->REG_100H; + OutData_PreMasterSecret[19] = SCE->REG_100H; + OutData_PreMasterSecret[20] = SCE->REG_100H; + OutData_PreMasterSecret[21] = SCE->REG_100H; + OutData_PreMasterSecret[22] = SCE->REG_100H; + OutData_PreMasterSecret[23] = SCE->REG_100H; + OutData_PreMasterSecret[24] = SCE->REG_100H; + OutData_PreMasterSecret[25] = SCE->REG_100H; + OutData_PreMasterSecret[26] = SCE->REG_100H; + OutData_PreMasterSecret[27] = SCE->REG_100H; + OutData_PreMasterSecret[28] = SCE->REG_100H; + OutData_PreMasterSecret[29] = SCE->REG_100H; + OutData_PreMasterSecret[30] = SCE->REG_100H; + OutData_PreMasterSecret[31] = SCE->REG_100H; + OutData_PreMasterSecret[32] = SCE->REG_100H; + OutData_PreMasterSecret[33] = SCE->REG_100H; + OutData_PreMasterSecret[34] = SCE->REG_100H; + OutData_PreMasterSecret[35] = SCE->REG_100H; + OutData_PreMasterSecret[36] = SCE->REG_100H; + OutData_PreMasterSecret[37] = SCE->REG_100H; + OutData_PreMasterSecret[38] = SCE->REG_100H; + OutData_PreMasterSecret[39] = SCE->REG_100H; + OutData_PreMasterSecret[40] = SCE->REG_100H; + OutData_PreMasterSecret[41] = SCE->REG_100H; + OutData_PreMasterSecret[42] = SCE->REG_100H; + OutData_PreMasterSecret[43] = SCE->REG_100H; + OutData_PreMasterSecret[44] = SCE->REG_100H; + OutData_PreMasterSecret[45] = SCE->REG_100H; + OutData_PreMasterSecret[46] = SCE->REG_100H; + OutData_PreMasterSecret[47] = SCE->REG_100H; + OutData_PreMasterSecret[48] = SCE->REG_100H; + OutData_PreMasterSecret[49] = SCE->REG_100H; + OutData_PreMasterSecret[50] = SCE->REG_100H; + OutData_PreMasterSecret[51] = SCE->REG_100H; + OutData_PreMasterSecret[52] = SCE->REG_100H; + OutData_PreMasterSecret[53] = SCE->REG_100H; + OutData_PreMasterSecret[54] = SCE->REG_100H; + OutData_PreMasterSecret[55] = SCE->REG_100H; + OutData_PreMasterSecret[56] = SCE->REG_100H; + OutData_PreMasterSecret[57] = SCE->REG_100H; + OutData_PreMasterSecret[58] = SCE->REG_100H; + OutData_PreMasterSecret[59] = SCE->REG_100H; + OutData_PreMasterSecret[60] = SCE->REG_100H; + OutData_PreMasterSecret[61] = SCE->REG_100H; + OutData_PreMasterSecret[62] = SCE->REG_100H; + OutData_PreMasterSecret[63] = SCE->REG_100H; + HW_SCE_p_func102(0x42190fa2u, 0x278edf46u, 0xcf71ae2du, 0x42257106u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pe2.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf0.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf0.c new file mode 100644 index 000000000..73c7983cf --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf0.c @@ -0,0 +1,1598 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_EcdsaSigunatureGenerateSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, const uint32_t *InData_MsgDgst, uint32_t *OutData_Signature) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000f001u; + SCE->REG_108H = 0x00000000u; + SCE->REG_28H = 0x00870001u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010380u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x0000b7c0u; + SCE->REG_ECH = 0x000000c0u; + SCE->REG_104H = 0x00000768u; + SCE->REG_E0H = 0x8088001eu; + for (iLoop = 0; iLoop < 8; iLoop = iLoop + 1) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_MsgDgst[iLoop + 0]; + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000d3e0u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_ECH = 0x1000d3e0u; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x000037beu; + SCE->REG_ECH = 0x0000a7a0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000383du; + SCE->REG_ECH = 0x38001001u; + SCE->REG_ECH = 0x1000d3e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x30000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d3e1u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x38000f9cu; + SCE->REG_ECH = 0x1000d3e1u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xf5d8c06eu, 0xc83bb08au, 0xae510efbu, 0x36a7af08u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x8f775961u, 0x0b5a28aau, 0x87943f60u, 0x0f2c8f26u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func100(0x405aceaau, 0x2e5e12d4u, 0x11fcc9ccu, 0xf58f11d1u); + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000004C8u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000031Cu; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000013Cu; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000001F8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x45761474u, 0x57cc450bu, 0x5ceb52e5u, 0x6b5c37e2u); + HW_SCE_p_func070_r2(OFS_ADR); + HW_SCE_p_func100(0x00613584u, 0x5c3272c3u, 0x996ad0bdu, 0x304f803du); + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func103(); + HW_SCE_p_func100(0x6805778au, 0x816c6846u, 0x3b6d78aeu, 0x3bcdbe72u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001228u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0xebac350fu, 0x45ec962fu, 0x32c6f830u, 0xe58ac3c3u); + HW_SCE_p_func071_r2(OFS_ADR); + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x8000acd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f0u; + SCE->REG_ECH = 0x0000373cu; + SCE->REG_ECH = 0x00000b9cu; + HW_SCE_p_func100(0xf3ab3173u, 0x27de0948u, 0x5353a013u, 0x2e638bd8u); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<256;iLoop=iLoop+1) + { + HW_SCE_p_func101(0x3c677163u, 0xea4d3d2eu, 0xafceb4b7u, 0xe2e493feu); + HW_SCE_p_func300(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xa7c1a7c6u, 0x18421ea5u, 0x850f9fdbu, 0xfaf97de6u); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xa9085fbeu, 0x25a8489cu, 0xe5f22119u, 0x0e253310u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x85ca9aa5u, 0x59e5f5b6u, 0x4e2034b2u, 0x9a0a1c47u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x32739d60u, 0x0e2671edu, 0x23998dfeu, 0x4f6c4200u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x8258f1e6u, 0x553b5587u, 0x4f1e0975u, 0xd75763f4u); + } + else + { + HW_SCE_p_func101(0x539fd0d3u, 0xea3031bau, 0x97e22ba0u, 0x5000a199u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x5919a370u, 0x0f6d04c5u, 0xce11e96au, 0x4d2ef3fau); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800016c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006c04u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000ecd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000828u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xc94388e0u, 0x9a7e6cb9u, 0xce5c4ac7u, 0xb132c2d9u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x117e7a37u, 0xe9611638u, 0xe3b97e76u, 0xadd63588u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00000ac0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0xf488209bu, 0x8754f3d9u, 0x9dcac910u, 0x6a315209u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x564da9c0u, 0x175afa15u, 0xdb42594eu, 0x2a5f439fu); + } + else + { + HW_SCE_p_func101(0x707f79d8u, 0xf36e9205u, 0xc8bbbdfcu, 0xa87d56c3u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x4e12ae86u, 0x9ec13781u, 0x54edd46au, 0x1512b2b6u); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x000000c0u; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f0u); + HW_SCE_p_func101(0xf1d0563cu, 0xbbd53440u, 0x9277dcaau, 0xf580df08u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x00003799u; + HW_SCE_p_func074_r1(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f0u); + HW_SCE_p_func101(0xeb59fefbu, 0xc02a6ecbu, 0xdaec63f0u, 0x7971ef3du); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000762u; + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02f087b7u; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000018u; + for (iLoop = 0; iLoop < 8; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x8a7f35bcu, 0x18556ebdu, 0xb1818f43u, 0x312f0c9fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x508e103bu, 0x5176429fu, 0x3455628au, 0x1a3d6475u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x80000c2du; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x8000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x54820b6au, 0x3952524au, 0xa5020e8bu, 0x902155ffu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xca61be04u, 0xf4a62121u, 0x1d40756bu, 0x97a09354u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func100(0x64195d93u, 0xee1713e1u, 0x2b8c720bu, 0xb8b83929u); + SCE->REG_2CH = 0x0000002bu; + SCE->REG_04H = 0x00000322u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Signature[0] = SCE->REG_100H; + OutData_Signature[1] = SCE->REG_100H; + OutData_Signature[2] = SCE->REG_100H; + OutData_Signature[3] = SCE->REG_100H; + OutData_Signature[4] = SCE->REG_100H; + OutData_Signature[5] = SCE->REG_100H; + OutData_Signature[6] = SCE->REG_100H; + OutData_Signature[7] = SCE->REG_100H; + HW_SCE_p_func100(0x7f837de5u, 0x2783bdc9u, 0x09f9efa6u, 0xdc30d0abu); + SCE->REG_2CH = 0x0000002au; + SCE->REG_04H = 0x00000322u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Signature[8] = SCE->REG_100H; + OutData_Signature[9] = SCE->REG_100H; + OutData_Signature[10] = SCE->REG_100H; + OutData_Signature[11] = SCE->REG_100H; + OutData_Signature[12] = SCE->REG_100H; + OutData_Signature[13] = SCE->REG_100H; + OutData_Signature[14] = SCE->REG_100H; + OutData_Signature[15] = SCE->REG_100H; + HW_SCE_p_func102(0x582e0cefu, 0x9b53cdceu, 0x3672fe6du, 0x4599d89du); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pf0_r4.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf1.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf1.c new file mode 100644 index 000000000..5ebc50ca4 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf1.c @@ -0,0 +1,2605 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_EcdsaSigunatureVerificationSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, const uint32_t *InData_MsgDgst, const uint32_t *InData_Signature) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000f101u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010380u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_104H = 0x00001768u; + SCE->REG_E0H = 0x8098001eu; + for (iLoop = 0; iLoop < 16; iLoop = iLoop + 1) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Signature[iLoop + 0]; + } + for (iLoop = 0; iLoop < 8; iLoop = iLoop + 1) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_MsgDgst[iLoop + 0]; + } + for (iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + SCE->REG_ECH = 0x00000bffu; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000d3e0u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x38000c00u; + SCE->REG_ECH = 0x1000d3e0u; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000381eu; + SCE->REG_ECH = 0x000037beu; + SCE->REG_ECH = 0x0000a7a0u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000383du; + SCE->REG_ECH = 0x38001001u; + SCE->REG_ECH = 0x1000d3e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x38000fffu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00260000u; + SCE->REG_ECH = 0x0000a7c0u; + SCE->REG_ECH = 0x00000020u; + } + SCE->REG_ECH = 0x30000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d3e1u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x38000f9cu; + SCE->REG_ECH = 0x1000d3e1u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0xb3a4bb56u, 0x412a388cu, 0x4f9be231u, 0xe3706b28u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x0ea78a51u, 0xe36bea34u, 0xc54dd04cu, 0xa2ffc22au); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_28H = 0x00870001u; + HW_SCE_p_func100(0x55305e12u, 0x530c0fb5u, 0x1c13599eu, 0x4532a352u); + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000004C8u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000031Cu; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000013Cu; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000001F8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x8f8943c0u, 0x598761b3u, 0xe9847b6eu, 0x8453ab3eu); + HW_SCE_p_func070_r2(OFS_ADR); + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000bcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8190001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000015u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000140u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d91u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x590b209bu, 0xc82029c5u, 0x60cf2f49u, 0x6b7025c3u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xf6aee8c1u, 0x440d430du, 0x36ee5c4eu, 0x8625dc70u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x2201181cu, 0x9eb62239u, 0x8daf8909u, 0x42c0e057u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xce3c73fbu, 0x286447d7u, 0x58f537c8u, 0xfb51f8bfu); + } + else + { + HW_SCE_p_func101(0xfcf15e4du, 0xa058aa75u, 0x613ad247u, 0x512b85e6u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x3c499c8au, 0x6ea4ec8fu, 0x030ea18cu, 0x70d4f24fu); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000120u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func100(0x7d936becu, 0xe1c658d1u, 0xd42327a8u, 0x9d36429eu); + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000094au; + SCE->REG_E0H = 0x8088000au; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000094d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x8000d4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func071_r2(OFS_ADR); + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x8000acd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x8088000au; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000025u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f1u; + SCE->REG_ECH = 0x0000377cu; + SCE->REG_ECH = 0x00000b9cu; + HW_SCE_p_func100(0x60e62d54u, 0x797b21c9u, 0x1e8cd1c3u, 0xd81aced7u); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<256;iLoop=iLoop+1) + { + HW_SCE_p_func101(0xf6ba2066u, 0x71c4054cu, 0x82369773u, 0x52f78ec2u); + HW_SCE_p_func302(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0x3bbc5587u, 0x0ec4b9dfu, 0xfc6d0c6au, 0x4b97b23cu); + } + SCE->REG_ECH = 0x00000a73u; + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x81880013u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x55b2bd60u, 0x788ffd90u, 0x69408616u, 0x9bf25968u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xbc5993a1u, 0x4614565bu, 0x1e1848c2u, 0xbf3b91dfu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x9392224cu, 0x4611f3adu, 0x503f7b17u, 0x7545889cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xa70971feu, 0x5d3a322cu, 0xdd3f98e8u, 0x8d873476u); + } + else + { + HW_SCE_p_func101(0xdd8687b0u, 0xce2201d7u, 0xba53b658u, 0xeab59d81u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x2957d6f7u, 0x2f37a3cdu, 0x94d16a5fu, 0x7d4f21fcu); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000120u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000379bu; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f1u); + HW_SCE_p_func101(0xa2143480u, 0xab721c7du, 0x400794fbu, 0x90b7f286u); + HW_SCE_p_func043(); + HW_SCE_p_func075_r1(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f1u); + HW_SCE_p_func101(0xdfb7aecbu, 0x249b9e49u, 0xbd4f48f9u, 0x09ce82beu); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_104H = 0x00000f62u; + SCE->REG_D0H = 0x40000300u; + SCE->REG_C4H = 0x02e08887u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[13]; + SCE->REG_100H = InData_KeyIndex[14]; + SCE->REG_100H = InData_KeyIndex[15]; + SCE->REG_100H = InData_KeyIndex[16]; + SCE->REG_00H = 0x00003223u; + SCE->REG_2CH = 0x0000001bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[17]; + SCE->REG_100H = InData_KeyIndex[18]; + SCE->REG_100H = InData_KeyIndex[19]; + SCE->REG_100H = InData_KeyIndex[20]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xcde594d5u, 0x132b8725u, 0xbc346b76u, 0xb366788au); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x1f11c475u, 0x7cc92153u, 0x52eadf9eu, 0xee64c69bu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x8088000au; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x000000C0u; + SCE->REG_E0H = 0x8088000au; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x00000001u; + SCE->REG_ECH = 0x00000b9cu; + HW_SCE_p_func100(0x26f45b8bu, 0x622dcf12u, 0x37ebeb9au, 0x07bc3f54u); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<256;iLoop=iLoop+1) + { + HW_SCE_p_func101(0xfa6fa228u, 0xead297ceu, 0x1fc0b519u, 0x12a298ecu); + HW_SCE_p_func302(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xf284d5a3u, 0x6e54b6ddu, 0x2b8ba9d2u, 0x19948033u); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xfff9e72au, 0x6a9b2259u, 0x9b87326cu, 0x07f21f83u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x7bf8560fu, 0x90b8357bu, 0x986d0b9eu, 0x78964becu); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81880013u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x000000C0u; + SCE->REG_E0H = 0x81880013u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x0000001bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000a41u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x900019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000941u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000145u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xf8dae94fu, 0x10eb8740u, 0xd99a2a7fu, 0x5994642eu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x3ebc5aabu, 0xb88b7fd2u, 0x30e22266u, 0xd261e34du); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_34H = 0x00000003u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0xa674de4bu, 0x7cfddb14u, 0x04a7a5f9u, 0xe48f30a2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x7073dd36u, 0x2dd6f3acu, 0xc91b5027u, 0xd78a65c5u); + } + else + { + HW_SCE_p_func101(0x92571603u, 0xfcfec157u, 0x36856296u, 0x6a9eb6b0u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x953447d6u, 0x130e6df0u, 0x513a9531u, 0xcf569436u); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000120u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000140u; + SCE->REG_E0H = 0x8188001fu; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00009004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x81880013u; + SCE->REG_00H = 0x00003823u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x0407c0bdu, 0x083c771au, 0xf0b7db95u, 0xc265fa8cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x85746d5fu, 0x25b93196u, 0x52b9dc3eu, 0x9cbb1883u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func102(0x06dfc759u, 0xb0c6aaa4u, 0x39be31bcu, 0x42fe0748u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } + } + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pf1_r3.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf4.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf4.c new file mode 100644 index 000000000..9668b3da8 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf4.c @@ -0,0 +1,850 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateEccRandomKeyIndexSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, uint32_t *OutData_PubKeyIndex, uint32_t *OutData_PrivKeyIndex) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1BCH & 0x1fu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000f401u; + SCE->REG_108H = 0x00000000u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010380u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Cmd[0]; + SCE->REG_ECH = 0x3020ab80u; + SCE->REG_ECH = 0x00000003u; + SCE->REG_ECH = 0x00060020u; + SCE->REG_ECH = 0x0000b780u; + SCE->REG_ECH = 0x00000002u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_ECH = 0x30000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000d3e1u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x38000f9cu; + SCE->REG_ECH = 0x1000d3e1u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x38008be0u; + SCE->REG_ECH = 0x00000002u; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + HW_SCE_p_func100(0x61eee86cu, 0xcb13e52eu, 0x0959472eu, 0x7f912219u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x874384e1u, 0x11b1983eu, 0x04bc55c7u, 0x166a1ad8u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func100(0xcee8c68fu, 0xd879df00u, 0x95b02707u, 0x7b8cb6deu); + SCE->REG_28H = 0x00870001u; + SCE->REG_ECH = 0x30003340u; + SCE->REG_ECH = 0x00050020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000004C8u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000031Cu; + SCE->REG_ECH = 0x00070040u; + SCE->REG_ECH = 0x30003380u; + SCE->REG_ECH = 0x00070020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00030040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x0000013Cu; + SCE->REG_ECH = 0x00050040u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000001F8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x46096261u, 0x56f41cd7u, 0x90a6aef4u, 0x6a809daau); + HW_SCE_p_func070_r2(OFS_ADR); + HW_SCE_p_func100(0xb2df82d6u, 0xd8db101eu, 0x46294cb8u, 0xeff1925au); + SCE->REG_34H = 0x00000400u; + SCE->REG_24H = 0x8000c0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00890001u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0x53bc48e0u, 0xf409e715u, 0x3c15c334u, 0x23cadbe8u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0x02dd0676u, 0x9678ebe1u, 0x10c7b8d2u, 0x520bc80fu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0xe1e50ca9u, 0x5e876405u, 0xe9d604d9u, 0xb03217d0u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x0000320bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00007c1cu; + SCE->REG_1CH = 0x00600000u; + SCE->REG_1D0H = 0x00000000u; + if (0x00000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_28H = 0x00890001u; + HW_SCE_p_func101(0x27e9ba0cu, 0xc682106bu, 0x0e239312u, 0x450aa767u); + } + else if (0x01000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_28H = 0x00880001u; + HW_SCE_p_func101(0x8f7dfdc3u, 0x6faa8ac8u, 0x1c6cf5fcu, 0x09387fffu); + } + else if (0x02000000u == (SCE->REG_1CH & 0xff000000u)) + { + SCE->REG_28H = 0x00870001u; + HW_SCE_p_func101(0x19521efau, 0x2f282005u, 0x0ae78c0du, 0x94ed7e6bu); + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_18H = 0x00000004u; + SCE->REG_24H = 0x0000a206u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_24H = 0x000016c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000682u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x00870001u; + SCE->REG_24H = 0x0000dcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000820u; + SCE->REG_24H = 0x80009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0xb0cc8c1au, 0xdabf4f6eu, 0x50ddfd40u, 0x55d7e34fu); + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000808u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func071_r2(OFS_ADR); + HW_SCE_p_func100(0x40c0ae57u, 0x29ba04aeu, 0xc761c11eu, 0x1bd201abu); + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x8000acd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f4u; + SCE->REG_ECH = 0x0000377cu; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<256;iLoop=iLoop+1) + { + HW_SCE_p_func101(0xc75067e4u, 0x65f5d835u, 0x270dd151u, 0x1ff8007fu); + HW_SCE_p_func300(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0x8e822641u, 0xa560dfdbu, 0xcd8aa6f6u, 0x7ac6e030u); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xe2066680u, 0xf0184b25u, 0xf343846fu, 0xa63764f2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x4356149eu, 0x5afb71ceu, 0xe511df28u, 0xdd8745e2u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000f4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x8088001fu; + SCE->REG_00H = 0x00008323u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<8; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x837faa79u, 0xae805b51u, 0xa4f2c9bfu, 0x7ffc4df8u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xaeabc302u, 0x1b959fdcu, 0xd1c51b83u, 0x95ab024fu); + } + else + { + HW_SCE_p_func101(0xbf206840u, 0x607bab5du, 0x9367a3bfu, 0x193a6d4au); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x4a374666u, 0x52864535u, 0xc339c67cu, 0x34409fbau); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000020u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func301(); + HW_SCE_p_func100(0xab9d9720u, 0xdce394c1u, 0xf00a566cu, 0x266678d5u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f4u); + HW_SCE_p_func101(0xd8882ff8u, 0xb938c560u, 0x5d570822u, 0x3cd2ca54u); + HW_SCE_p_func043(); + SCE->REG_ECH = 0x0000379bu; + HW_SCE_p_func074_r1(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f4u); + HW_SCE_p_func101(0xb255d103u, 0xd13ef5d2u, 0x45974775u, 0xadde338bu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x0e9623e0u, 0xf58c286au, 0xf778486au, 0x4df18dd9u); + SCE->REG_D0H = 0x40000100u; + SCE->REG_C4H = 0x02e087b7u; + SCE->REG_00H = 0x00002323u; + SCE->REG_2CH = 0x0000002du; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000222u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[1] = SCE->REG_100H; + OutData_PrivKeyIndex[2] = SCE->REG_100H; + OutData_PrivKeyIndex[3] = SCE->REG_100H; + OutData_PrivKeyIndex[4] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[5] = SCE->REG_100H; + OutData_PrivKeyIndex[6] = SCE->REG_100H; + OutData_PrivKeyIndex[7] = SCE->REG_100H; + OutData_PrivKeyIndex[8] = SCE->REG_100H; + HW_SCE_p_func100(0x3019d35cu, 0x645ddc1du, 0x35918009u, 0x199ce470u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[9] = SCE->REG_100H; + OutData_PrivKeyIndex[10] = SCE->REG_100H; + OutData_PrivKeyIndex[11] = SCE->REG_100H; + OutData_PrivKeyIndex[12] = SCE->REG_100H; + HW_SCE_p_func100(0x425dd56du, 0xaab5a89cu, 0x75d7c47fu, 0xdacdb289u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func100(0xec71435au, 0x62d6e866u, 0xaca8918du, 0x3c88529au); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000001u); + HW_SCE_p_func101(0x878f63fdu, 0x1d540d16u, 0x7ec1ac78u, 0xb20bf112u); + HW_SCE_p_func043(); + HW_SCE_p_func075_r1(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000002u); + HW_SCE_p_func101(0xb177a360u, 0xa939f773u, 0x7d142f97u, 0x6344bcedu); + HW_SCE_p_func044(); + HW_SCE_p_func100(0xbb1bd422u, 0xef8c3c92u, 0x4cd047dau, 0x8a62dbe3u); + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_00H = 0x00002323u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x00002313u; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000232u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[1] = SCE->REG_100H; + OutData_PubKeyIndex[2] = SCE->REG_100H; + OutData_PubKeyIndex[3] = SCE->REG_100H; + OutData_PubKeyIndex[4] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[5] = SCE->REG_100H; + OutData_PubKeyIndex[6] = SCE->REG_100H; + OutData_PubKeyIndex[7] = SCE->REG_100H; + OutData_PubKeyIndex[8] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[9] = SCE->REG_100H; + OutData_PubKeyIndex[10] = SCE->REG_100H; + OutData_PubKeyIndex[11] = SCE->REG_100H; + OutData_PubKeyIndex[12] = SCE->REG_100H; + HW_SCE_p_func100(0x5ca913fau, 0x6604aba7u, 0x5e907a49u, 0xe6ac5f43u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x00e08885u; + SCE->REG_00H = 0x00002313u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c4u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_04H = 0x00000222u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[13] = SCE->REG_100H; + OutData_PubKeyIndex[14] = SCE->REG_100H; + OutData_PubKeyIndex[15] = SCE->REG_100H; + OutData_PubKeyIndex[16] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[17] = SCE->REG_100H; + OutData_PubKeyIndex[18] = SCE->REG_100H; + OutData_PubKeyIndex[19] = SCE->REG_100H; + OutData_PubKeyIndex[20] = SCE->REG_100H; + HW_SCE_p_func100(0xa27751c1u, 0x16ee123cu, 0x8536a299u, 0x3fe25d73u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func102(0xd6c43818u, 0xa89dde83u, 0x15a5cc4au, 0x12255586u); + SCE->REG_1BCH = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pf4_r3.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf5.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf5.c new file mode 100644 index 000000000..d8c8dfa38 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf5.c @@ -0,0 +1,1543 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_EcdsaP384SigunatureGenerateSub(const uint32_t *InData_CurveType, const uint32_t *InData_KeyIndex, const uint32_t *InData_MsgDgst, uint32_t *OutData_Signature) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000f501u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0xa7f12ee1u, 0x27da227du, 0x9461ff19u, 0x6881bdbdu); + SCE->REG_28H = 0x008b0001u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000002B4u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000003D8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0xf46088a1u, 0xf9dbfbbbu, 0xb25ee1f4u, 0x85dd652du); + HW_SCE_p_func027_r2(OFS_ADR); + HW_SCE_p_func100(0xd55c4eb5u, 0x7f198c94u, 0x721f4f41u, 0x1814ae3du); + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func103(); + HW_SCE_p_func100(0xa166c3d1u, 0x63f3e146u, 0x3407e331u, 0x077ac6f2u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xbb59feb0u, 0x4dfb2a9bu, 0x836cc811u, 0x64f2af03u); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001228u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0x41d0bf49u, 0xaa66c69au, 0xf4980677u, 0xfd0c6fa7u); + HW_SCE_p_func028_r2(OFS_ADR); + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x8000acd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000020u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00005cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000180u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f5u; + SCE->REG_ECH = 0x00000b9cu; + HW_SCE_p_func100(0xfc034238u, 0xa16bf6e9u, 0xd5414d16u, 0x07a0874eu); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<384;iLoop=iLoop+1) + { + HW_SCE_p_func101(0x756940cau, 0x38631cc2u, 0x3a832969u, 0x9de523a9u); + HW_SCE_p_func300(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xc2cd7dc5u, 0x4cea4522u, 0xfd87c0a8u, 0x03011e3au); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x39c0dc33u, 0x9bcb18aau, 0x36173556u, 0x886fc9aeu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x11db319au, 0x49dca8d9u, 0x36d85a2fu, 0x6b6d45e6u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x04116ab8u, 0xf01acb4du, 0x8c467b1eu, 0x3d7c1bc3u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x0e9406bfu, 0x21a9c2a2u, 0xf4105826u, 0xfc3f06f7u); + } + else + { + HW_SCE_p_func101(0x72a17c90u, 0x7c36ae1eu, 0xb595c4e4u, 0xae6a585au); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x812e0e4eu, 0x578b4115u, 0x11558fe1u, 0x2dc4c15bu); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000030u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x818c001fu; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800016c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x818c001fu; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00006c04u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000ecd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000828u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0xcf6556d4u, 0xf5d2420bu, 0xc8dde221u, 0x0d9cb2c7u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x7fcc5618u, 0x320d458du, 0x741a2441u, 0x37fd27f7u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00000ac0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0xdb684c16u, 0xad882196u, 0x69ddeeb8u, 0x68182e14u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x09cb3c18u, 0x5022d562u, 0xbc96621fu, 0x02f4e99eu); + } + else + { + HW_SCE_p_func101(0xc154907du, 0x3be52efcu, 0xcaee0c01u, 0x3cc1eca4u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0xc37a8313u, 0x7f7e61f2u, 0xcf184d70u, 0xad35711du); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000030u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000011u; + SCE->REG_104H = 0x00000b67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_MsgDgst[0]; + SCE->REG_100H = InData_MsgDgst[1]; + SCE->REG_100H = InData_MsgDgst[2]; + SCE->REG_100H = InData_MsgDgst[3]; + SCE->REG_100H = InData_MsgDgst[4]; + SCE->REG_100H = InData_MsgDgst[5]; + SCE->REG_100H = InData_MsgDgst[6]; + SCE->REG_100H = InData_MsgDgst[7]; + SCE->REG_100H = InData_MsgDgst[8]; + SCE->REG_100H = InData_MsgDgst[9]; + SCE->REG_100H = InData_MsgDgst[10]; + SCE->REG_100H = InData_MsgDgst[11]; + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000020u; + SCE->REG_24H = 0x80001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f5u); + HW_SCE_p_func101(0x596a904bu, 0x3314484cu, 0xcdb16c37u, 0xa8077997u); + HW_SCE_p_func043(); + HW_SCE_p_func076(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f5u); + HW_SCE_p_func101(0xf196b0d1u, 0x2c071f11u, 0xef46062du, 0xe381c81du); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000b62u; + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x02f087b7u; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x00000018u; + for (iLoop = 0; iLoop < 12; iLoop = iLoop + 4) + { + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + } + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 0]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 1]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 2]; + SCE->REG_100H = InData_KeyIndex[iLoop+1 + 3]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0x040820f3u, 0x57958e1eu, 0xf4199077u, 0x88f0a702u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x5d4fa2dcu, 0x09346111u, 0xd90d7c4fu, 0x3877f5dau); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x80000c2du; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x8000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x47e77302u, 0xe077a25cu, 0xdb1110c9u, 0x5aa753c7u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x793d7493u, 0x9ec5b3eau, 0xb0aa4fc7u, 0x0c1c8446u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func100(0x146cf125u, 0xea842b6au, 0xe3494589u, 0xda9fcd01u); + SCE->REG_2CH = 0x0000002bu; + SCE->REG_04H = 0x00000332u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Signature[0] = SCE->REG_100H; + OutData_Signature[1] = SCE->REG_100H; + OutData_Signature[2] = SCE->REG_100H; + OutData_Signature[3] = SCE->REG_100H; + OutData_Signature[4] = SCE->REG_100H; + OutData_Signature[5] = SCE->REG_100H; + OutData_Signature[6] = SCE->REG_100H; + OutData_Signature[7] = SCE->REG_100H; + OutData_Signature[8] = SCE->REG_100H; + OutData_Signature[9] = SCE->REG_100H; + OutData_Signature[10] = SCE->REG_100H; + OutData_Signature[11] = SCE->REG_100H; + HW_SCE_p_func100(0xd530f48bu, 0x02e526f6u, 0x375ec265u, 0x6eb53f6fu); + SCE->REG_2CH = 0x0000002au; + SCE->REG_04H = 0x00000332u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_Signature[12] = SCE->REG_100H; + OutData_Signature[13] = SCE->REG_100H; + OutData_Signature[14] = SCE->REG_100H; + OutData_Signature[15] = SCE->REG_100H; + OutData_Signature[16] = SCE->REG_100H; + OutData_Signature[17] = SCE->REG_100H; + OutData_Signature[18] = SCE->REG_100H; + OutData_Signature[19] = SCE->REG_100H; + OutData_Signature[20] = SCE->REG_100H; + OutData_Signature[21] = SCE->REG_100H; + OutData_Signature[22] = SCE->REG_100H; + OutData_Signature[23] = SCE->REG_100H; + HW_SCE_p_func102(0x58b223e8u, 0x9262ba2cu, 0x01fed64bu, 0x9da18bd7u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pf5_r4.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf6.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf6.c new file mode 100644 index 000000000..de7075541 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf6.c @@ -0,0 +1,2581 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_EcdsaP384SigunatureVerificationSub(const uint32_t *InData_CurveType, const uint32_t *InData_KeyIndex, const uint32_t *InData_MsgDgst, const uint32_t *InData_Signature) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000f601u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0xde86a436u, 0x5028d235u, 0xd797fae2u, 0xe51894ddu); + SCE->REG_28H = 0x008b0001u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000002B4u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000003D8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x50f75db7u, 0x80f401ceu, 0x2b894e39u, 0xb0cb9752u); + HW_SCE_p_func027_r2(OFS_ADR); + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x80006cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000bcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000015u; + SCE->REG_104H = 0x00000b67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Signature[0]; + SCE->REG_100H = InData_Signature[1]; + SCE->REG_100H = InData_Signature[2]; + SCE->REG_100H = InData_Signature[3]; + SCE->REG_100H = InData_Signature[4]; + SCE->REG_100H = InData_Signature[5]; + SCE->REG_100H = InData_Signature[6]; + SCE->REG_100H = InData_Signature[7]; + SCE->REG_100H = InData_Signature[8]; + SCE->REG_100H = InData_Signature[9]; + SCE->REG_100H = InData_Signature[10]; + SCE->REG_100H = InData_Signature[11]; + SCE->REG_2CH = 0x00000010u; + SCE->REG_104H = 0x00000b67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_Signature[12]; + SCE->REG_100H = InData_Signature[13]; + SCE->REG_100H = InData_Signature[14]; + SCE->REG_100H = InData_Signature[15]; + SCE->REG_100H = InData_Signature[16]; + SCE->REG_100H = InData_Signature[17]; + SCE->REG_100H = InData_Signature[18]; + SCE->REG_100H = InData_Signature[19]; + SCE->REG_100H = InData_Signature[20]; + SCE->REG_100H = InData_Signature[21]; + SCE->REG_100H = InData_Signature[22]; + SCE->REG_100H = InData_Signature[23]; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000140u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000024u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d91u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x00000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001191u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x48dc9437u, 0x7d99e59au, 0x359b6d56u, 0x26bc5175u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xb0a214e8u, 0x3ea6e6fdu, 0x18a83f65u, 0x349085f8u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x4f50ce7au, 0x5b245d5du, 0x09650643u, 0x292d4bbfu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0xbfbe8c9cu, 0x3d95ed3cu, 0x3cf22247u, 0xa53ed86cu); + } + else + { + HW_SCE_p_func101(0xc389e42cu, 0x971fe1eau, 0xd116d4fcu, 0x87c07bd4u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x89976506u, 0x0f51be2du, 0x4581d2b3u, 0x31ad08acu); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000130u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func100(0x6e827556u, 0x95f748d3u, 0x599c27e2u, 0x22b78e38u); + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_2CH = 0x00000011u; + SCE->REG_104H = 0x00000b67u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_MsgDgst[0]; + SCE->REG_100H = InData_MsgDgst[1]; + SCE->REG_100H = InData_MsgDgst[2]; + SCE->REG_100H = InData_MsgDgst[3]; + SCE->REG_100H = InData_MsgDgst[4]; + SCE->REG_100H = InData_MsgDgst[5]; + SCE->REG_100H = InData_MsgDgst[6]; + SCE->REG_100H = InData_MsgDgst[7]; + SCE->REG_100H = InData_MsgDgst[8]; + SCE->REG_100H = InData_MsgDgst[9]; + SCE->REG_100H = InData_MsgDgst[10]; + SCE->REG_100H = InData_MsgDgst[11]; + SCE->REG_ECH = 0x0000094au; + SCE->REG_E0H = 0x808c000au; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000094d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x8000d4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func028_r2(OFS_ADR); + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x8000acd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x808c000au; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000025u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000180u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f6u; + SCE->REG_ECH = 0x00000b9cu; + HW_SCE_p_func100(0x207fcddau, 0x5d1f4932u, 0x025fe82bu, 0x311610c3u); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<384;iLoop=iLoop+1) + { + HW_SCE_p_func101(0x343faaa0u, 0xc8a220e1u, 0x9e286aadu, 0x12ebe9cfu); + HW_SCE_p_func302(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xfe611096u, 0xf63529f2u, 0x1bc80c49u, 0xb74546a0u); + } + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x818c0013u; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x77781b31u, 0x7ee34842u, 0x3e67a132u, 0x866f6dffu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x0d2df2eau, 0xcafdcc6du, 0x4b14a008u, 0xeecb2b39u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00004804u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x1f9de355u, 0x2cf5dd10u, 0xafc11e8cu, 0x2e0989d4u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x63ed1c79u, 0x60fce20bu, 0xfd1676abu, 0x4b71e169u); + } + else + { + HW_SCE_p_func101(0xf236aa04u, 0xdba8fd83u, 0xf47ee85eu, 0x10f90084u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x09d2c05eu, 0xfc984d92u, 0xe5594ea9u, 0x41078609u); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000130u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000e2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x800100e0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[0]; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f6u); + HW_SCE_p_func101(0xabde0957u, 0x0fbfdc07u, 0x816885b7u, 0x6864b23eu); + HW_SCE_p_func043(); + HW_SCE_p_func077(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f6u); + HW_SCE_p_func101(0x11952f36u, 0x92fa06b0u, 0xbec6cccfu, 0xdd60618cu); + HW_SCE_p_func044(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00040804u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_104H = 0x00001762u; + SCE->REG_D0H = 0x40000500u; + SCE->REG_C4H = 0x02e08887u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[1]; + SCE->REG_100H = InData_KeyIndex[2]; + SCE->REG_100H = InData_KeyIndex[3]; + SCE->REG_100H = InData_KeyIndex[4]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[5]; + SCE->REG_100H = InData_KeyIndex[6]; + SCE->REG_100H = InData_KeyIndex[7]; + SCE->REG_100H = InData_KeyIndex[8]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[9]; + SCE->REG_100H = InData_KeyIndex[10]; + SCE->REG_100H = InData_KeyIndex[11]; + SCE->REG_100H = InData_KeyIndex[12]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x00000010u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[13]; + SCE->REG_100H = InData_KeyIndex[14]; + SCE->REG_100H = InData_KeyIndex[15]; + SCE->REG_100H = InData_KeyIndex[16]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[17]; + SCE->REG_100H = InData_KeyIndex[18]; + SCE->REG_100H = InData_KeyIndex[19]; + SCE->REG_100H = InData_KeyIndex[20]; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[21]; + SCE->REG_100H = InData_KeyIndex[22]; + SCE->REG_100H = InData_KeyIndex[23]; + SCE->REG_100H = InData_KeyIndex[24]; + SCE->REG_00H = 0x00003233u; + SCE->REG_2CH = 0x0000001bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_104H = 0x00000362u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000087b5u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_KeyIndex[25]; + SCE->REG_100H = InData_KeyIndex[26]; + SCE->REG_100H = InData_KeyIndex[27]; + SCE->REG_100H = InData_KeyIndex[28]; + SCE->REG_C4H = 0x00900c45u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func100(0xf18601a4u, 0x70bb1760u, 0x318349cbu, 0xff5d1355u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x559c24e4u, 0xf2aa0acdu, 0x8b9b73a1u, 0x3b80136fu); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL; + } + else + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x808c000au; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b540u; + SCE->REG_ECH = 0x000000C0u; + SCE->REG_E0H = 0x808c000au; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000180u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x00000002u; + SCE->REG_ECH = 0x00000b9cu; + HW_SCE_p_func100(0xf316d8d2u, 0x79929798u, 0x751a3d39u, 0xe14b89b8u); + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<384;iLoop=iLoop+1) + { + HW_SCE_p_func101(0x67d6accfu, 0x410dac54u, 0xd335e1bfu, 0x3a9b29d0u); + HW_SCE_p_func302(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0x8dc9b62au, 0xea2a3202u, 0x330c3721u, 0xed7351f2u); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x53ca79ecu, 0x8c5fbfbeu, 0x789481f8u, 0x2f64684cu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x17c9dd80u, 0x82da83bfu, 0x0d790543u, 0x50485666u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x818c0013u; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x0000001au; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x000000C0u; + SCE->REG_E0H = 0x818c0013u; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x0000001bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x00009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000070d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x800048d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000a41u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x80000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80004cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x900019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000280u; + SCE->REG_24H = 0x800019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000941u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800015c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800040c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000200u; + SCE->REG_24H = 0x800012c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000951u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000149u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000080u; + SCE->REG_24H = 0x800060c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000c2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000060c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000d51u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000145u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x5a83c212u, 0x26eaa86eu, 0x1abecd3au, 0xf8dd0538u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x69e5c4abu, 0xbc0d5482u, 0xc110625bu, 0x71573c04u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000040u; + SCE->REG_E0H = 0x818c001fu; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x00000012u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x800068d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000100u; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x1fca6902u, 0xdb92fa7cu, 0x246ef741u, 0x05211b66u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x26c9111fu, 0x476535c1u, 0x13d0b543u, 0xe890e9f3u); + } + else + { + HW_SCE_p_func101(0x03806e32u, 0xa9ed89feu, 0x00e95f20u, 0x5db753ccu); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0xd048889eu, 0x80940a86u, 0x6baaaf20u, 0x544eb0bfu); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000130u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + SCE->REG_34H = 0x00000002u; + SCE->REG_24H = 0x80000dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000008u; + SCE->REG_24H = 0x800011c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000a2cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b7e0u; + SCE->REG_ECH = 0x00000140u; + SCE->REG_E0H = 0x818c001fu; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00009004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000040c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b660u; + SCE->REG_ECH = 0x00000000u; + SCE->REG_E0H = 0x818c0013u; + SCE->REG_00H = 0x00003833u; + SCE->REG_2CH = 0x00000014u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000009c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00001991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000991u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x5c2d0ec5u, 0xc2315674u, 0xdcad06ccu, 0x6322755fu); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0xdb95f1aau, 0xbf1fe75bu, 0xa804bf04u, 0x7c374249u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + HW_SCE_p_func102(0x914a2eb8u, 0x0568a5aeu, 0x5d214490u, 0xb78ae4f6u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } + } + } + } + } + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pf6_r3.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf9.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf9.c new file mode 100644 index 000000000..576019ec2 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_pf9.c @@ -0,0 +1,806 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +fsp_err_t HW_SCE_GenerateEccP384RandomKeyIndexSub(const uint32_t *InData_CurveType, uint32_t *OutData_PubKeyIndex, uint32_t *OutData_PrivKeyIndex) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + if (0x0u != (SCE->REG_1B8H & 0x1eu)) + { + return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT; + } + SCE->REG_84H = 0x0000f901u; + SCE->REG_108H = 0x00000000u; + HW_SCE_p_func100(0x71955c20u, 0x3ac12303u, 0x15fa1bdau, 0xb60a3db0u); + SCE->REG_28H = 0x008b0001u; + SCE->REG_104H = 0x00000068u; + SCE->REG_E0H = 0x80010340u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = InData_CurveType[0]; + SCE->REG_ECH = 0x38000f5au; + SCE->REG_ECH = 0x00030020u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000002B4u; + SCE->REG_ECH = 0x00000060u; + SCE->REG_ECH = 0x0000b400u; + SCE->REG_ECH = 0x000003D8u; + SCE->REG_ECH = 0x00000080u; + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + OFS_ADR = S_RAM[0]; + HW_SCE_p_func100(0x4f0f541eu, 0x1a44960eu, 0x563abdb1u, 0xe3baac79u); + HW_SCE_p_func027_r2(OFS_ADR); + HW_SCE_p_func100(0xc801a728u, 0x47ab14b5u, 0xf9ee4545u, 0xd37aac4fu); + SCE->REG_28H = 0x008d0001u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0x6d82e07fu, 0x8dad4d87u, 0xa9117322u, 0x58cdcce9u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + SCE->REG_2CH = 0x00000011u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0x60a4b8bau, 0x3aa18769u, 0xfaf0117du, 0x2d608defu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + HW_SCE_p_func100(0x11cdcd6cu, 0xa3872140u, 0x68e4fa6au, 0xe51f5637u); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x00003213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_00H = 0x0000320bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020bu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_18H = 0x00000004u; + SCE->REG_24H = 0x0000a206u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B10) + { + /* waiting */ + } + SCE->REG_18H = 0x00000000u; + SCE->REG_24H = 0x000016c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000682u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c2u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_28H = 0x008b0001u; + SCE->REG_24H = 0x0000dcd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000820u; + SCE->REG_24H = 0x80009cd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func100(0x60c968fcu, 0x219d0e28u, 0x9436dee9u, 0xcc67ad17u); + SCE->REG_24H = 0x000084d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00021028u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000c0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00004404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000e8d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000808u; + SCE->REG_24H = 0x8000f0d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func028_r2(OFS_ADR); + HW_SCE_p_func100(0xdfa41c30u, 0xd99f4cfdu, 0xf7a85de6u, 0xa99c9005u); + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x800088d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000802u; + SCE->REG_24H = 0x8000acd0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x00000bdeu; + SCE->REG_ECH = 0x00000842u; + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x0000b480u; + SCE->REG_ECH = 0x00000180u; + SCE->REG_ECH = 0x0000b7a0u; + SCE->REG_ECH = 0x000000f9u; + SCE->REG_ECH = 0x00000b9cu; + SCE->REG_E0H = 0x81010380u; + SCE->REG_04H = 0x00000607u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + S_RAM[0] = change_endian_long(SCE->REG_100H); + for(iLoop=0;iLoop<384;iLoop=iLoop+1) + { + HW_SCE_p_func101(0xfbcc0d7fu, 0x36080ac4u, 0xcf7b143cu, 0x6ff21498u); + HW_SCE_p_func300(); + if (S_RAM[0] == 0x00000001) + { + break; + } + HW_SCE_p_func101(0xa45737d5u, 0xb1b23b5au, 0x2de55314u, 0x1d084e61u); + } + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001f00u; + SCE->REG_1CH = 0x00210000u; + HW_SCE_p_func100(0x1daa4a2du, 0x7ce5aa27u, 0xa5415a80u, 0x914b2f17u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + HW_SCE_p_func102(0x162e3ccbu, 0x2f9a1e6fu, 0x693474d6u, 0x94d238e3u); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_ERR_CRYPTO_SCE_FAIL; + } + else + { + SCE->REG_24H = 0x00001dc0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_34H = 0x00000800u; + SCE->REG_24H = 0x8000f4d0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019c0u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00000591u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x0000a0c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00005004u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x00008404u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x0000b420u; + SCE->REG_ECH = 0x00000004u; + SCE->REG_ECH = 0x00000bffu; + SCE->REG_E0H = 0x808c001fu; + SCE->REG_00H = 0x00008333u; + SCE->REG_2CH = 0x00000021u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + for(iLoop=0; iLoop<12; iLoop=iLoop+1) + { + SCE->REG_ECH = 0x0000381fu; + for(jLoop=0; jLoop<32; jLoop=jLoop+1) + { + SCE->REG_24H = 0x0000102cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_ECH = 0x3800d81fu; + SCE->REG_E0H = 0x00000080u; + SCE->REG_1CH = 0x00A60000u; + SCE->REG_ECH = 0x00016c00u; + HW_SCE_p_func100(0x8f9c2a77u, 0xf33844d5u, 0x8455d6fdu, 0x13143ad2u); + SCE->REG_1CH = 0x00400000u; + SCE->REG_1D0H = 0x00000000u; + if (1u == (SCE->REG_1CH_b.B22)) + { + SCE->REG_24H = 0x0000082cu; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x100019b1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000019a1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + SCE->REG_24H = 0x000080c1u; + /* WAIT_LOOP */ + while (0u != SCE->REG_24H_b.B21) + { + /* waiting */ + } + HW_SCE_p_func101(0x86ef67c2u, 0xe8cf24d0u, 0x37804e2au, 0xf098530du); + } + else + { + HW_SCE_p_func101(0xf2132842u, 0x74acefcdu, 0x0c004a87u, 0x08b9d513u); + } + } + SCE->REG_ECH = 0x000027e1u; + HW_SCE_p_func101(0x01c83fafu, 0xef7c4381u, 0x10d53a54u, 0x051e247eu); + } + SCE->REG_ECH = 0x00008be0u; + SCE->REG_ECH = 0x00000030u; + SCE->REG_ECH = 0x00007c1fu; + SCE->REG_1CH = 0x00602000u; + HW_SCE_p_func301(); + HW_SCE_p_func100(0x88354d96u, 0xf9abfe45u, 0xcf2ad333u, 0x5c4b54aau); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f9u); + HW_SCE_p_func101(0xd43c4306u, 0xb91b575bu, 0xded4cef2u, 0x3eedd0dfu); + HW_SCE_p_func043(); + HW_SCE_p_func076(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x000000f9u); + HW_SCE_p_func101(0xa5113cbeu, 0x6d527565u, 0x8445bbf4u, 0xa1034407u); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x6762285cu, 0x0d4cf93du, 0xa3506f40u, 0x1ceecb69u); + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x02e087b7u; + SCE->REG_00H = 0x00002333u; + SCE->REG_2CH = 0x0000002du; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000232u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[1] = SCE->REG_100H; + OutData_PrivKeyIndex[2] = SCE->REG_100H; + OutData_PrivKeyIndex[3] = SCE->REG_100H; + OutData_PrivKeyIndex[4] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[5] = SCE->REG_100H; + OutData_PrivKeyIndex[6] = SCE->REG_100H; + OutData_PrivKeyIndex[7] = SCE->REG_100H; + OutData_PrivKeyIndex[8] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[9] = SCE->REG_100H; + OutData_PrivKeyIndex[10] = SCE->REG_100H; + OutData_PrivKeyIndex[11] = SCE->REG_100H; + OutData_PrivKeyIndex[12] = SCE->REG_100H; + HW_SCE_p_func100(0xe81c9889u, 0x67692950u, 0xbe826a22u, 0x2e8a4dbeu); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x00000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c5u; + SCE->REG_00H = 0x00002213u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[13] = SCE->REG_100H; + OutData_PrivKeyIndex[14] = SCE->REG_100H; + OutData_PrivKeyIndex[15] = SCE->REG_100H; + OutData_PrivKeyIndex[16] = SCE->REG_100H; + HW_SCE_p_func100(0x13b2eeb6u, 0xc897657du, 0x440a39ffu, 0xa369cdd9u); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PrivKeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func100(0x5582f747u, 0x39e01cb7u, 0x3691c4c7u, 0xe0da29edu); + HW_SCE_p_func103(); + SCE->REG_104H = 0x00000052u; + SCE->REG_C4H = 0x01000c84u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_E0H = 0x80010000u; + SCE->REG_00H = 0x00008207u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_00H = 0x0000020fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_ECH = 0x000034e0u; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000027u); + HW_SCE_p_func101(0x70f41c99u, 0xba1e2bc7u, 0xa7b2ae76u, 0xe6f2e9fcu); + HW_SCE_p_func043(); + HW_SCE_p_func077(); + SCE->REG_ECH = 0x000034feu; + SCE->REG_104H = 0x00000058u; + SCE->REG_E0H = 0x800103a0u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000028u); + HW_SCE_p_func101(0x2cabf676u, 0x643a1a6bu, 0xb94816b0u, 0xd195fadau); + HW_SCE_p_func044(); + HW_SCE_p_func100(0x3901d920u, 0x63dad967u, 0x365fd72cu, 0x2905477du); + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x02e08887u; + SCE->REG_00H = 0x00002333u; + SCE->REG_2CH = 0x00000022u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000232u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[1] = SCE->REG_100H; + OutData_PubKeyIndex[2] = SCE->REG_100H; + OutData_PubKeyIndex[3] = SCE->REG_100H; + OutData_PubKeyIndex[4] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[5] = SCE->REG_100H; + OutData_PubKeyIndex[6] = SCE->REG_100H; + OutData_PubKeyIndex[7] = SCE->REG_100H; + OutData_PubKeyIndex[8] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[9] = SCE->REG_100H; + OutData_PubKeyIndex[10] = SCE->REG_100H; + OutData_PubKeyIndex[11] = SCE->REG_100H; + OutData_PubKeyIndex[12] = SCE->REG_100H; + HW_SCE_p_func100(0xdc1ff7abu, 0x50b66339u, 0x2bc1b6f1u, 0x0303639fu); + SCE->REG_D0H = 0x40000200u; + SCE->REG_C4H = 0x00e08887u; + SCE->REG_00H = 0x00002333u; + SCE->REG_2CH = 0x00000023u; + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B25) + { + /* waiting */ + } + SCE->REG_1CH = 0x00001800u; + SCE->REG_04H = 0x00000232u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[13] = SCE->REG_100H; + OutData_PubKeyIndex[14] = SCE->REG_100H; + OutData_PubKeyIndex[15] = SCE->REG_100H; + OutData_PubKeyIndex[16] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[17] = SCE->REG_100H; + OutData_PubKeyIndex[18] = SCE->REG_100H; + OutData_PubKeyIndex[19] = SCE->REG_100H; + OutData_PubKeyIndex[20] = SCE->REG_100H; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[21] = SCE->REG_100H; + OutData_PubKeyIndex[22] = SCE->REG_100H; + OutData_PubKeyIndex[23] = SCE->REG_100H; + OutData_PubKeyIndex[24] = SCE->REG_100H; + HW_SCE_p_func100(0x7d1ad014u, 0xbcf9baa2u, 0x3a53ca7cu, 0x64a40b32u); + SCE->REG_104H = 0x00000052u; + SCE->REG_D0H = 0x40000000u; + SCE->REG_C4H = 0x000089c4u; + /* WAIT_LOOP */ + while (1u != SCE->REG_104H_b.B31) + { + /* waiting */ + } + SCE->REG_100H = change_endian_long(0x00000000u); + SCE->REG_04H = 0x00000212u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[25] = SCE->REG_100H; + OutData_PubKeyIndex[26] = SCE->REG_100H; + OutData_PubKeyIndex[27] = SCE->REG_100H; + OutData_PubKeyIndex[28] = SCE->REG_100H; + HW_SCE_p_func100(0x5e7bb2b6u, 0xa502456fu, 0xbca534c6u, 0x74f8870fu); + SCE->REG_E0H = 0x81010000u; + SCE->REG_04H = 0x00000606u; + /* WAIT_LOOP */ + while (1u != SCE->REG_04H_b.B30) + { + /* waiting */ + } + OutData_PubKeyIndex[0] = SCE->REG_100H; + HW_SCE_p_func102(0xad16c748u, 0x1d60a10du, 0xfbdbbe7au, 0xd146affau); + SCE->REG_1B8H = 0x00000040u; + /* WAIT_LOOP */ + while (0u != SCE->REG_18H_b.B12) + { + /* waiting */ + } + return FSP_SUCCESS; + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_pf9_r3.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_subprc01.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_subprc01.c new file mode 100644 index 000000000..0dc98aaa5 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/hw_sce_p_subprc01.c @@ -0,0 +1,213 @@ +/*********************************************************************************************************************** +* DISCLAIMER +* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No +* other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all +* applicable laws, including copyright laws. +* THIS SOFTWARE IS PROVIDED AND RENESAS MAKES NO WARRANTIES REGARDING +* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM +* EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES +* SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS +* SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of +* this software. By using this software, you agree to the additional terms and conditions found by accessing the +* following link: +* http://www.renesas.com/disclaimer +* +* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. +***********************************************************************************************************************/ +/*********************************************************************************************************************** +* History : DD.MM.YYYY Version Description +* : 05.10.2020 1.00 First Release. +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Includes , "Project Includes" +***********************************************************************************************************************/ +#include "r_sce_if.h" +#include "hw_sce_ra_private.h" + +/*********************************************************************************************************************** +Macro definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Typedef definitions +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Imported global variables and functions (from other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Exported global variables (to be accessed by other files) +***********************************************************************************************************************/ + +/*********************************************************************************************************************** +Private global variables and functions +***********************************************************************************************************************/ + +void HW_SCE_SelfCheck1SubSub(void) +{ + uint32_t iLoop = 0u, iLoop1 = 0u, iLoop2 = 0u, jLoop = 0u, kLoop = 0u, oLoop = 0u, oLoop1 = 0u, oLoop2 = 0u, KEY_ADR = 0u, OFS_ADR = 0u, MAX_CNT2 = 0u; + uint32_t dummy = 0u; + (void)iLoop; + (void)iLoop1; + (void)iLoop2; + (void)jLoop; + (void)kLoop; + (void)oLoop; + (void)oLoop1; + (void)oLoop2; + (void)dummy; + (void)KEY_ADR; + (void)OFS_ADR; + (void)MAX_CNT2; + SCE->REG_138H = 0xf597806Au; + SCE->REG_10CH = 0x00010001u; + SCE->REG_10H = 0x01234567u; + SCE->REG_7CH = 0x00000001u; + SCE->REG_78H = 0x00008007u; + SCE->REG_134H = 0x76543210u; + HW_SCE_p_func054(change_endian_long(0x00003008u), change_endian_long(0x00003018u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + HW_SCE_p_func050(change_endian_long(0x00010001u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000008u; + SCE->REG_68H = 0x00000417u; + SCE->REG_6CH = 0xabcdef01u; + HW_SCE_p_func054(change_endian_long(0x10003008u), change_endian_long(0x10003018u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + HW_SCE_p_func050(change_endian_long(0x00000001u)); + SCE->REG_28H = 0x00000001u; + SCE->REG_3CH = 0x00010173u; + SCE->REG_4CH = 0x23456789u; + SCE->REG_80H = 0x00000001u; + SCE->REG_8CH = 0x000080BBu; + SCE->REG_94H = 0xabcdef01u; + SCE->REG_7CH = 0x00000001u; + SCE->REG_78H = 0x0000011fu; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000008u; + SCE->REG_68H = 0x00000017u; + HW_SCE_p_func054(change_endian_long(0x72f01007u), change_endian_long(0x72f01017u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + for(iLoop = 0; iLoop < 6; iLoop = iLoop + 1) + { + HW_SCE_p_func050(change_endian_long(0x00000001u)); + HW_SCE_p_func054(change_endian_long(0x72f03007u), change_endian_long(0x72f03017u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + } + for(iLoop = 0; iLoop < 6; iLoop = iLoop + 1) + { + HW_SCE_p_func050(change_endian_long(0x00000001u)); + SCE->REG_28H = 0x00000001u; + SCE->REG_80H = 0x00000001u; + SCE->REG_7CH = 0x00000001u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000008u; + HW_SCE_p_func054(change_endian_long(0x72f03007u), change_endian_long(0x72f03017u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + } + for(iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + HW_SCE_p_func050(change_endian_long(0x00000001u)); + SCE->REG_28H = 0x00000001u; + SCE->REG_3CH = 0x00010173u; + SCE->REG_80H = 0x00000001u; + SCE->REG_B0H = 0x40000010u; + SCE->REG_D0H = 0x40000010u; + SCE->REG_A4H = 0x00008000u; + SCE->REG_C4H = 0x00008000u; + SCE->REG_8CH = 0x0000888Bu; + SCE->REG_7CH = 0x00000001u; + SCE->REG_78H = 0x00000007u; + /* WAIT_LOOP */ + while (0u != SCE->REG_64H_b.B11) + { + /* waiting */ + } + SCE->REG_64H = 0x00000008u; + SCE->REG_68H = 0x00000017u; + HW_SCE_p_func054(change_endian_long(0x7af03007u), change_endian_long(0x7af03017u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + } + HW_SCE_p_func051(); + SCE->REG_28H = 0x00000001u; + SCE->REG_3CH = 0x00810173u; + HW_SCE_p_func054(change_endian_long(0x00003008u), change_endian_long(0x00003018u)); + /* WAIT_LOOP */ + while (0u != SCE->REG_00H_b.B31) + { + /* waiting */ + } + for(iLoop = 0; iLoop < 6; iLoop = iLoop + 1) + { + HW_SCE_p_func052(change_endian_long(0x00810173u)); + } + for(iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + HW_SCE_p_func052(change_endian_long(0x0080197fu)); + } + for(iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + HW_SCE_p_func052(change_endian_long(0x00fe017bu)); + } + for(iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + HW_SCE_p_func052(change_endian_long(0x00af091Fu)); + } + HW_SCE_p_func053(change_endian_long(0x000380BBu)); + for(iLoop = 0; iLoop < 6; iLoop = iLoop + 1) + { + HW_SCE_p_func053(change_endian_long(0x000380BBu)); + } + for(iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + HW_SCE_p_func053(change_endian_long(0x000191BBu)); + } + for(iLoop = 0; iLoop < 3; iLoop = iLoop + 1) + { + HW_SCE_p_func053(change_endian_long(0x000185B7u)); + } +} + +/*********************************************************************************************************************** +End of function ./input_dir/S6C1/Cryptographic_PlainKey/HW_SCE_p_subprc01.prc +***********************************************************************************************************************/ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/s_flash2.c b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/s_flash2.c new file mode 100644 index 000000000..e803ba6a1 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/primitive/s_flash2.c @@ -0,0 +1,761 @@ +/********************************************************************************************************************** + * DISCLAIMER + * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No + * other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all + * applicable laws, including copyright laws. + * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING + * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM + * EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES + * SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO + * THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of + * this software. By using this software, you agree to the additional terms and conditions found by accessing the + * following link: + * http://www.renesas.com/disclaimer + * + * Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved. + *********************************************************************************************************************/ +/********************************************************************************************************************** + * File Name : s_flash.c + * Version : 1.09 + * Description : Key information file. + *********************************************************************************************************************/ +/********************************************************************************************************************** + * History : DD.MM.YYYY Version Description + * : 31.03.2020 1.09 First Release + *********************************************************************************************************************/ + +/********************************************************************************************************************** + Includes , "Project Includes" + *********************************************************************************************************************/ +#include "r_sce_if.h" + +/********************************************************************************************************************** + Macro definitions + *********************************************************************************************************************/ + +/********************************************************************************************************************** + Typedef definitions + *********************************************************************************************************************/ + +/********************************************************************************************************************** + Exported global variables + *********************************************************************************************************************/ +uint32_t const S_FLASH2[] = +{ +#ifndef __ARMEB__ /* Little endian */ + 0xdd502103, 0xd9183176, 0x71a905af, 0xfec6c807, + 0x93ca3bcb, 0x12e7b5e8, 0xfb59e99d, 0x8f3d8dd9, + 0xe2fbde9d, 0x2d97cadf, 0xab178605, 0x9c1cfdef, + 0x4ca22949, 0x4032cc5d, 0x7c0774ed, 0x3b97134b, + 0x4a15273b, 0xbb6e4195, 0xe4e8eade, 0x7e1a663a, + 0x834c97fa, 0xe814872a, 0xba83f030, 0x5a476c81, + 0x9d048cc2, 0xd5363ffa, 0x60c89876, 0x5eb4e383, + 0x7546e44d, 0x1020d8ae, 0x659f651f, 0x31202e98, + 0x151c8ea1, 0x068191e2, 0xcc55a315, 0x3e5d9265, + 0x491d6e35, 0x5ca371ca, 0x76dde15e, 0x956a2fcc, + 0xf139beed, 0x126cdc36, 0xc6758140, 0x4959bf70, + 0x146c840c, 0x4ac37409, 0xd5a0f83e, 0xb5faca5e, + 0xa6e62ab5, 0x5b89b2bb, 0xf9a99e96, 0xa0549da1, + 0x23ecd0e3, 0xde0d6717, 0x84279612, 0x51d37326, + 0x05dbd8e3, 0x46cf99ba, 0xefe8b388, 0x4b3c2762, + 0x29774aa4, 0x7b0cd205, 0x66a4911d, 0x7bbe274d, + 0xff564352, 0x5ec47ee4, 0x20b53536, 0xd2c49bce, + 0xdc2fbc7b, 0x174d7f9f, 0xf5fec4d3, 0xb07c4d83, + 0x6c4ed5ec, 0xb0a395fc, 0xb12e6414, 0x4b99c00f, + 0x4e5b8ef7, 0x073cec04, 0x72e04fd2, 0x493d2687, + 0x00fa2924, 0xfd412295, 0x6123ea82, 0x793c42df, + 0x6acbc9ed, 0xce2ce5f0, 0x381b7d86, 0x9e60a724, + 0x2b4d6674, 0x9ff7e07f, 0x10306f0a, 0xbf1aa3fe, + 0x1910beca, 0x52459b47, 0x17378cf6, 0x3bb240e3, + 0xfa43e7ea, 0x7f7fb3e0, 0x2f824b27, 0x18686740, + 0xd0c486ce, 0xdfb0726a, 0x2bbd32c7, 0x5edb0058, + 0x0b62df82, 0x55eef53f, 0xf9238b1c, 0x26af924d, + 0x7d977012, 0x4f1126bb, 0x7b887564, 0x99c1b1c7, + 0x72ac7491, 0x0ed3dc58, 0xce5c704f, 0x952f7570, + 0xdfaa5f69, 0x5b237031, 0x888d2540, 0x802121e8, + 0xc5642c69, 0xe3444168, 0xf17d2b54, 0x1cfab3eb, + 0x0e62628a, 0x8e21497e, 0xfe08555f, 0xc043ea33, + 0xd10041c4, 0x790d5a7c, 0x403efe1d, 0xc368e331, + 0x05b2b426, 0x7df201c2, 0xd5d56897, 0xe8f3340b, + 0x925849c6, 0x63c03afd, 0x2d4ce596, 0x0bd72787, + 0x51e10cc4, 0x19fc7c4e, 0x583de3c5, 0x5db86155, + 0x5555f5bd, 0xec96f0e3, 0xfb58fbc1, 0x812997d8, + 0xcdb0111a, 0x6c37393a, 0xede922e7, 0x945a51d2, + 0xbcbb9315, 0x3ea7242f, 0x9505420f, 0x490d7d17, + 0x7a9623e5, 0xc9386691, 0xe826fc95, 0x9b4af647, + 0x74a8f50e, 0x870ea4e7, 0x1533eb0a, 0x29616e0b, + 0x285933dc, 0x02a0d596, 0x3b781c4c, 0x3eb05458, + 0x1e3e275c, 0x3a159d48, 0x73ebe204, 0x468acc45, + 0x85cf6a1d, 0xd1055350, 0xe0e4f622, 0x1304e990, + 0x09e4aa7e, 0x72e7ee98, 0xb1de602f, 0x44beec64, + 0xe26e1dfe, 0xdffdfd01, 0x62c668b4, 0x8245c35c, + 0xbcb225f8, 0x811e185c, 0x7283352f, 0x96c17572, + 0x9ac73d4c, 0x79a5c426, 0x4e61bed9, 0x1a9c0649, + 0x07a3f222, 0xe1aed316, 0x62d97ed7, 0x7fd40d97, + 0x02cc6bc7, 0x179ec919, 0x5d1273dd, 0x393ddfa4, + 0x33a57a1d, 0xad3cbbb2, 0x8f249c68, 0xfe19dc28, + 0x4a5bd96b, 0xf19096dd, 0x3ed59c48, 0x94777cc8, + 0x28c61df6, 0xf56d2df1, 0xe2a87678, 0x4c16b6c0, + 0xb35fbe16, 0xdb30f584, 0x9c5bbcd4, 0x442bd65f, + 0x12dcad82, 0xb575a8b7, 0xbadd7e9b, 0x21388394, + 0x1b738c96, 0xfe123240, 0x7e11bb78, 0xc813085d, + 0xf280bb1a, 0x3bee0a85, 0x2bfea15b, 0x1a1ddc12, + 0x830b641e, 0xda11d02b, 0x290be194, 0x337ce862, + 0x889274b6, 0x65188565, 0x97fdcc19, 0xd1fec76f, + 0xe5c01654, 0x41149690, 0x4fcf9e05, 0xc3d1c46d, + 0x0ca429f7, 0x86c6f8ff, 0xd7557d5b, 0x447735a6, + 0x996fe728, 0x0b96224b, 0x8048bedf, 0xaea8740f, + 0x273553f5, 0xfef21b6a, 0xb69b59fe, 0x2830b136, + 0x8e646d47, 0xbd70f0a7, 0xdca46c07, 0x625f8b13, + 0xdc10e10b, 0x78ed0540, 0x4dec07b9, 0x4b9797b7, + 0x2a74cd0d, 0x0ddeeaba, 0x71579b62, 0x1f869b4c, + 0x70d23a25, 0x8d0685b8, 0x4f1bda6e, 0x564a0ac0, + 0x533a7419, 0x5e17e68f, 0x44afde8d, 0x9600db58, + 0xcb9511d4, 0x8a3a2ae2, 0x2ad3e68b, 0xb4bc03b7, + 0x7a1a50ea, 0xe31dbe23, 0xda6d2dbe, 0xfccad5a0, + 0x0059c6d2, 0xf772170f, 0xbc8cac6a, 0x14da0a87, + 0xf2ec1a1f, 0xa3702b88, 0x15966394, 0x9c3e49b8, + 0x07bc5abc, 0xc1a30c87, 0xe898bb59, 0xf3d1ed4c, + 0xd3b0f9e1, 0x48cee253, 0xdf587104, 0x99773b42, + 0xbca2974c, 0x4c1ef8de, 0x28da0b84, 0x46341861, + 0x96a1dfb3, 0x10fb4725, 0x62a53cf2, 0x31bc54f3, + 0xfb046761, 0xd30d5365, 0x31ba0ef1, 0x60aed6f2, + 0xf022d530, 0xb99836c6, 0x7fcdc95d, 0x2211cbed, + 0xfc503ddc, 0x10c21f64, 0xacf00db4, 0x0b427a47, + 0x8ff773be, 0xdae8f5b9, 0x6ebe5924, 0xdb2460c8, + 0xafcfeb3d, 0x9368e608, 0xf42000c3, 0x2cf59f90, + 0xf7fe2adf, 0x9c552280, 0x44e58bfb, 0x735a3ecc, + 0xb1edfaae, 0xc2b6ceae, 0x9d549823, 0xfe008818, + 0xe2a06be5, 0x0c96afa9, 0x45e0baf4, 0x4dc7f084, + 0xccd00f50, 0xfc75da65, 0x983a17a5, 0x5fd64fad, + 0x338e4250, 0xfbcc2d40, 0x367b4bd7, 0xda2e30c2, + 0x58a8b55c, 0x49fc8b0f, 0x15132c39, 0xad64fa42, + 0x22a90ce0, 0x56cb83c3, 0xbe2bd150, 0x69fc9c11, + 0x44fe0878, 0xdf4c9866, 0x5a07f984, 0x792e6627, + 0x66a46566, 0x4db32f8a, 0xbd05806d, 0x04f1bcba, + 0x868cb837, 0x854f8df5, 0x6c7f55d9, 0x57e8f107, + 0xbcf6988b, 0x8e10ee89, 0xd4ffe0ab, 0x17e715a0, + 0x37148962, 0x43b72722, 0x03b2eb40, 0x6003d14e, + 0x06c74fbb, 0xed7b5cde, 0x8d2ea577, 0xc5fee509, + 0xc843ce52, 0x5bdffac2, 0x020d9e88, 0x2f0b8760, + 0x509d2bff, 0x97f464dd, 0xee55839e, 0xd4a61328, + 0xe76bd4ce, 0x54d7c908, 0x739b5f68, 0x53f814f3, + 0xff638447, 0x1bb93af1, 0x045c82d3, 0x33287474, + 0xf904311b, 0x27264390, 0x645b3078, 0x7768671a, + 0xcce1a520, 0xd9890be0, 0x35d58bb4, 0xcadadee9, + 0x49c31313, 0xfd0c9127, 0xfcc283fa, 0x4b5b8e06, + 0x9ee352c2, 0xbe1914bf, 0x9e97a769, 0x25d2c450, + 0x8542b849, 0xb9daaf9c, 0x42860a34, 0xc5918c84, + 0x2a580252, 0xc2c369c8, 0xabd27275, 0xf2aaac7e, + 0xbaa300dd, 0x39180f20, 0xc0bf3e94, 0xe56053ac, + 0x143d0424, 0x1a7ff8d4, 0x7f06dffe, 0xc076ce66, + 0x518405af, 0x103ccb20, 0xe023bc64, 0xdec520ba, + 0x86e1f9ca, 0xf0361144, 0x665e0314, 0x200dcd6a, + 0x92162fb1, 0x7d2b16f9, 0xed897397, 0x41abce1c, + 0x6b89a607, 0x9beb2abb, 0x5c76ed37, 0x25b97c6f, + 0x12d39ccf, 0xe35a84d0, 0x31968aa2, 0xbb4e7f17, + 0x265075a2, 0x5150e3a9, 0xcc214e98, 0x7a5c1021, + 0xe0037392, 0x30ca7678, 0x30cd8fd7, 0x87cfd362, + 0x03f353cb, 0x5831a5cf, 0xb506259e, 0x7d94dffe, + 0x9304beec, 0x87abd31f, 0x0e81dddc, 0x14adac14, + 0x5e3830ff, 0xed00f55d, 0xbc2ff45c, 0xffb38a2e, + 0x69c30468, 0xf80ba68f, 0xd8464e40, 0xd523bac9, + 0x623e1c2c, 0x278a1f49, 0x1c2b59a7, 0xf10374ff, + 0x23015b76, 0xeb5b389f, 0x1631a01a, 0x7ea30437, + 0xa5a9b11f, 0x3cbad734, 0xc374496e, 0x6e35ef35, + 0xe48f0357, 0xe173f2bf, 0xa75dfda7, 0x16be2987, + 0xd190ea85, 0x910fc8a8, 0x2ca722d3, 0xbf71d925, + 0x65d01ac5, 0x5cff3359, 0x40b84aa4, 0x6b6d0954, + 0x52408f93, 0x04d2cf59, 0xcaf00c4a, 0xb5221edc, + 0x4cfd2789, 0xf1bab227, 0x1bf22068, 0x2c81c491, + 0xbfa25d15, 0x441b4df0, 0x09d9de8a, 0x3347cb31, + 0x7adf3125, 0x62672ad3, 0x4bbfbb9f, 0xf57b75a4, + 0xa0233d5d, 0x60b00ca7, 0x23b841ca, 0xc718c214, + 0x5082684d, 0xeee25b34, 0x52803903, 0x8a51f447, + 0xdb67805b, 0x96833b66, 0xd174c1a5, 0x0f5ee545, + 0x1fc43ced, 0x99c227db, 0x7a0146ec, 0xbdb81b38, + 0xa3d5f003, 0xc5643ce4, 0x1018b54b, 0xe5d82d4b, + 0x4a59932f, 0xf9d91235, 0x518c0dbd, 0x660de337, + 0xc9a64ffc, 0xdbb6a6e4, 0x3d411199, 0xbdd1f96a, + 0x1323eac7, 0x7a928163, 0xccf3d625, 0x3a3502e7, + 0xa4537da8, 0x892c118c, 0xb946dc80, 0x8af172b5, + 0x88f7ba6d, 0x58c786ce, 0x13761cf8, 0xc80beec6, + 0x4a8f622a, 0x48ca6baa, 0x32a9660c, 0xee02a31f, + 0x2c817a10, 0x351a56cd, 0x4af7ce49, 0xc14d2666, + 0xcdeff3d3, 0x3b1c8e6b, 0x063f3657, 0xe546e05c, + 0x603b7339, 0x794057cc, 0x88df1dba, 0xbc442a47, + 0x67ddab33, 0xe7c183aa, 0xdd86777d, 0x7bac3e2c, + 0xb3b42b9b, 0xf955e506, 0xf7764ac7, 0x1f400ad5, + 0x940237ab, 0x098b2da1, 0xabfd0896, 0xabf8c5df, + 0x688ef4d5, 0x09021dfd, 0x821d393c, 0x2ce33f47, + 0x7392d1d8, 0x29d2cbf2, 0xca8727e3, 0x48cea0fb, + 0x6f4371f8, 0xc83b7ed9, 0x79b907f6, 0x54ff8797, + 0x6a32274a, 0xc8a740c5, 0x47807259, 0x32a2a1bb, + 0x2d034fc3, 0x6b4eb2ca, 0x18fb0e25, 0x20a9e8d2, + 0x4342026e, 0x3b56c06a, 0x37e20b60, 0xc4ea21db, + 0xa284b7ca, 0xa21ecb79, 0xb848bcf9, 0xa3460211, + 0x75fe4fb0, 0xf3a72543, 0xbf99d04a, 0xc1a4753b, + 0xeaf92e16, 0xd1164e0f, 0x0be2d5c3, 0xa8a8da35, + 0x661eefde, 0xc65199fc, 0x2d112c74, 0xc3e828cd, + 0xa54b5063, 0x9f4f9ab8, 0xe88439cf, 0x3ff6cd70, + 0x0f330953, 0x13134843, 0xb6a5b16c, 0x2943611f, + 0xe749e30e, 0x3fa9b536, 0x82e0ca78, 0x6f9cc4e6, + 0x1dd83a22, 0x01eade6a, 0x77a96e4a, 0x6f3b389c, + 0x4e7a3bbf, 0x617d0be8, 0x65d0f059, 0x15a49304, + 0xbebeca64, 0x98696bb1, 0x29224dcd, 0x95f785c4, + 0x86e2e92c, 0x74bc92c6, 0xbaf78504, 0x320800c6, + 0x4cc1f145, 0x0ea01105, 0x05b59e00, 0xcbdc815a, + 0xd7b3c257, 0xd08afa51, 0x5ae63462, 0x29f3d6fb, + 0xb7a2dd1a, 0x8529a664, 0x1acc9169, 0xfe87ae3d, + 0xf26e9222, 0x4b907865, 0x08987d01, 0x473d6e0d, + 0x5a0f091a, 0x5f1a6dd5, 0x5bbc4f12, 0x5ec3bfae, + 0xb9f5047f, 0xc5653d1e, 0x16f9bd89, 0x947f2496, + 0x8ebd60d2, 0x9aa27e72, 0xa8f2369d, 0x1572a262, + 0x628323f4, 0x6d896164, 0xaa78f219, 0x72fb6bb5, + 0xf47ae5fb, 0xcb8d6fd2, 0x0e77f409, 0x78d62979, + 0x849af546, 0xac2979ac, 0xffd89672, 0xe8434139, + 0xd6dd8f92, 0x1edaa1ac, 0x91689eea, 0xbec42797, + 0x4a0f84cf, 0x1de31bdd, 0x88e5308f, 0xbef6a8c9, + 0x5dea939b, 0xa6f79274, 0xe5ced6b1, 0xb37ca895, + 0xe63ee49e, 0xa872e3d8, 0xeba8353d, 0x55810932, + 0xb9ad1486, 0xefc6329e, 0x4229d6ea, 0x9adeb857, + 0x8a3d25c1, 0xd731b218, 0x85ddee44, 0xb0820515, + 0x31bef107, 0xe784f639, 0x8b91036a, 0xc909b142, + 0xbfaabdd3, 0xa4fde630, 0x04ea7ad9, 0xd8069c90, + 0x701c0ed7, 0xdc27bfe9, 0x182035cd, 0xf163217d, + 0x8bde8728, 0x3de76b4b, 0x1727193d, 0x6dc73cbf, + 0x548f72b4, 0x5a832952, 0xadcc68bc, 0x5fabd0fd, + 0xfd96ac69, 0xedfb4097, 0xc6a72fbc, 0x2f04e30d, + 0x4f3d5e5a, 0x75b2d6b1, 0x7d40b7a9, 0xe39116ac, + 0xf23776df, 0xea74b874, 0x6b0e0236, 0x1a3236fd, + 0x015ea4a5, 0x37030d18, 0x52f51bb2, 0xfb31a406, + 0xb133ff75, 0x3c60bbab, 0x59c416e9, 0x7103e149, + 0x0be6658e, 0xc5f8f73d, 0x0d988a5d, 0xc4ed0e71, + 0x3e65dbca, 0xcb14f81c, 0xb67956ad, 0xa5c50684, + 0x5835bd0c, 0x3730696b, 0x4bf0f287, 0x78087c67, + 0xaa863c01, 0xe736e736, 0xd8bced25, 0x522d8459, + 0x082eea3e, 0x7cf18dfe, 0xf0fc2868, 0xbfd64c9c, + 0xa074eb38, 0x638f2976, 0x161e5c1e, 0x95005dd6, + 0x88ca210f, 0xd5b13e47, 0xbc5cb4ac, 0x6992c128, + 0xe1900295, 0x2257a841, 0x096cfd92, 0xdec55d62, + 0xf0878bec, 0xb3c4fc12, 0x85b57766, 0x1aa86784, + 0xcc8949d8, 0x9bf18fe0, 0x8aa23170, 0x3d218a88, + 0x4a029bc0, 0x2791265b, 0x3e9882d0, 0x425f6e30, + 0xb775323e, 0x9334de4a, 0x1fe3301e, 0xc0442543, + 0x9fb8e1df, 0xb40b021b, 0x5da189d2, 0xd16e7eb4, + 0x8fecbcb6, 0xf05c7d5e, 0x253324e5, 0x6013163d, + 0x9298188a, 0x14b7fce2, 0x76363224, 0x243d780b, + 0xe05d0c2d, 0x6cdc5a60, 0xbd488af0, 0x2b298037, + 0xed4513ac, 0xe0f5ac19, 0xcae9a014, 0x97b79366, + 0xc9aee2ed, 0x13351f17, 0x96c70caf, 0x076653fd, + 0x3f7afe35, 0xf5c06030, 0x3e4334a8, 0xd425a8f0, + 0xfc7f290a, 0xaa0a90ff, 0xf97681ad, 0x59f0524c, + 0xfc7b83f9, 0xf21edfe4, 0x07fe6a1a, 0x83da8c92, + 0xdb06e2c4, 0xb021d08a, 0xd495dac1, 0x559d0aab, + 0xcf170bcb, 0xebfe13df, 0x03c0ef6b, 0x7a4565c9, + 0xa11c4835, 0x44e2a47f, 0x9d704950, 0xdf996a50, + 0xa0d7eb0e, 0x122b0857, 0xe4855aa6, 0x6e9d2747, + 0xbfb91d1b, 0x3b90c888, 0x5fe9bf6b, 0xb2407b78, + 0x838e633c, 0x16c20177, 0x0321e6ae, 0x71df1826, + 0x7caa5f26, 0x96ab8806, 0xc06dfe41, 0x505da2e6, + 0xa954d80e, 0x40b82273, 0x4386f1e2, 0xb2f947cd, + 0x675a3170, 0x9532537b, 0x762fdb3c, 0xb22e7228, + 0x3b28bb53, 0x8a17d9e1, 0x78c5f07c, 0x4d2df374, + 0x1f8ff85d, 0x5f8af236, 0xc19c0493, 0x5ef3671b, + 0x0711f7fa, 0x3d22b2cd, 0x6f641681, 0x84b9cbad, + 0x830281bb, 0xde280477, 0xfe5a057f, 0x616f9255, + 0xa0ffb83c, 0x842aded8, 0x86cf85da, 0x8940abd0, + 0xdd3e488e, 0x0dab64a4, 0x504bfef9, 0x8d398aaa, + 0xcd43ead3, 0xc2b5ff9b, 0x6ac81f5e, 0xe62dced4, + 0x2909919e, 0x16f352e0, 0x65881229, 0xd2d8acaa, + 0x65f70a6a, 0x0b8a5fc6, 0xa91a425c, 0x438e43c7, + 0xf1f71303, 0x65c41d35, 0xda1fd15c, 0xc9a4c1b9, + 0xde678b74, 0xbe577722, 0xea3924f1, 0x56c6a325, + 0x0f13a8f2, 0x1aea07c5, 0xb9d4b9f2, 0x4a07db18, + 0x73c86815, 0x226d2dfc, 0xbab580ba, 0x21be6ba6, + 0x94b7052e, 0xed03de61, 0x66a19aef, 0xf1b3ed38, + 0x6b7dafc5, 0x1d206b0d, 0x9690b505, 0x0f967889, + 0x2c195871, 0xa90432af, 0x24b5efa2, 0xb1f52492, + 0xc8c2e921, 0x8cec8fe6, 0xf8d4fe42, 0xab2212c3, + 0xc275a15e, 0x9c120bdd, 0x721692ba, 0xe4cb1268, + 0x49acb98b, 0x13860cd3, 0x76d7b85a, 0x16d69dae, + 0x1c737ca5, 0x9eccc24e, 0xd28f1c6c, 0x64bc4bd6, + 0xb58992a4, 0x9bac0bb7, 0x85be6629, 0x49dd9a6b, + 0xd2d5ae1e, 0x1ec75d7b, 0xa7e9c291, 0x2a3aee86, + 0x726971b1, 0x68bb63a2, 0xb503425e, 0x5775805f, + 0xe4dc02a9, 0xcbd8c400, 0x35c86be8, 0x79e0b3af, + 0xbbf681a4, 0xe5d0a875, 0x0ec0d0f8, 0x9ed6a9ec, + 0x5dc5fa4b, 0xe64fca20, 0xde288052, 0x29c0c225, + 0xcb310d63, 0x90acc224, 0xa818c8f7, 0x0c077083, + 0xd25404a4, 0x816862bc, 0xa32852f7, 0xf90d91b0, + 0x81f1d3c0, 0x7fe30fbe, 0xbf53df67, 0x46cd7e3a, + 0x293f1003, 0x7e8a708b, 0xf3a22fd5, 0x1ee08029, + 0xf82e333a, 0xee120124, 0x318341bc, 0x8a923a36, + 0x4c781a4c, 0xa9337bfc, 0x1e155798, 0x0217171a, + 0x77508d8e, 0xea901171, 0xa87f530c, 0x3660fa56, + 0xf3d87636, 0xe1d303aa, 0x3c60d96e, 0x7d4b15ed, + 0x82e6ed54, 0x6c959c04, 0xcbdd2827, 0xcb0bcb8f, + 0x4e808dfd, 0xb8d22b46, 0xf94ab7fa, 0x66db5448, + 0xf4ff6e95, 0x8a6724e4, 0x77dca78c, 0x12e71fc7, + 0x5046bccb, 0x0ade27dc, 0x059dc2c5, 0x19c698b3, + 0xf34f5737, 0xf11f53bb, 0xc8a6e4b1, 0xa7d0a738, + 0xd982d491, 0x0ed59903, 0x9548df4f, 0x6028afd5, + 0x74bee82d, 0x9700dd96, 0x8b8c34b0, 0x08f2125e, + 0x5bb546d7, 0x653fc881, 0x2917abe2, 0x5ac94013, + 0x9c2d5f1d, 0xfece8b17, 0xa67e590b, 0xdc16a9ee, + 0x8298f3d8, 0x75f16049, 0xfaacfb3c, 0x4fe9f9b8, + 0xd868e9c6, 0xef058afa, 0xac570f54, 0x1dd4a599, + 0xb6e111ce, 0x8d57de4c, 0x33ab91ce, 0x772b40c2, + 0x4f877818, 0xc295da38, 0x4dcb6473, 0xe83ad378, + 0x77d70454, 0xc913bc7e, 0xd89f0b02, 0xd257243b, + 0xedd8cdff, 0x2521beab, 0x68c5df9e, 0xe580f947, + 0xb89c6242, 0x959cd105, 0x03d5159e, 0xb4788a7d, + 0xd1008a7e, 0xcad8617a, 0x48669c60, 0x9de4ef78, + 0x4f517fe0, 0x2eb58ec2, 0x9b3ee14e, 0xddc869b6, + 0xe16db5b6, 0x570b1ecd, 0xb1a614f9, 0xd83e4405, + 0x60f1e0a8, 0x3d662f1a, 0xdbb9cb7e, 0xdec496a9, + 0xdd654171, 0x6d3c4e16, 0x88e09967, 0x104984c4, + 0x84c0112f, 0xf1169b6c, 0x77028d49, 0x08e1d448, + 0x0ebc3cdd, 0xba9cc9af, 0x33bec66b, 0xb477b767, + 0x2bb31438, 0x7cf54d08, 0x93794991, 0x1ea91a03, + 0x96ea31ad, 0xcd25d5f3, 0x7466a7df, 0x3e4bcd30, + 0x3bd97ca6, 0x6c9fe12b, 0x1f5d03de, 0xff172fac, + 0x4c4462d0, 0x820813ea, 0xef101884, 0x26c6728b, + 0x8b0533a2, 0xc786ad6d, 0x863b1483, 0xff05a19f, + 0x1c9ba2e5, 0xc3f5ee8c, 0x31a8a75e, 0xb780ad8f, + 0xadccef0d, 0x71b320de, 0x2bebaf18, 0x12c11d84, + 0x2ea4814c, 0xc09436b7, 0x01cb9224, 0x7d1372e4, + 0x71da541a, 0xf7f15add, 0xb7ed54c6, 0x0c8d324e, + 0xc932869a, 0x164ddef4, 0xef3fc071, 0xef4b4bf5, + 0x764fd1a0, 0x1f78d159, 0x5cea38ee, 0xd79917a1, + 0xd9fb3e46, 0x31b2f904, 0x8df7c0b1, 0xdf6b4884, + 0x7e9a34ce, 0x39205f7b, 0x409a1901, 0x63a3bf35, + 0xb544a6c3, 0xfaccd9ff, 0x43bce0b5, 0xb149b7f3, + 0xa0aad6d7, 0xcd086a1b, 0xcfb2e563, 0x8a419617, + 0x69b3ca01, 0xed9992d1, 0xca95b076, 0xc043119b, + 0x76df0789, 0xc7dedb91, 0x2af16340, 0x962bf359, + 0xbc3c4382, 0x3696e0dd, 0x1d799a9b, 0x1f2d7a21, + 0x25fd07de, 0xfdf497c9, 0x006ef6e0, 0x5c9ca8c3, + 0x6ac7ad94, 0x183ec408, 0xe1bb333c, 0x7a583226, + 0xfb1f881b, 0xf70f11ef, 0xbbd7811f, 0xd150d21e, + 0xeb23afa3, 0xfdb3f2c7, 0xe9d3a4be, 0x9a28b72d, + 0x1f0c2d17, 0xd0bcd29a, 0x5c7bf5b1, 0x81dba8f0, + 0xfcd37206, 0xe6642e1b, 0x38cc79e3, 0x293bb08c, + 0xd65cc8bf, 0x4c3a52d2, 0xab6aa13c, 0x250fe7fb, + 0x837a63e7, 0x2197af7f, 0xf6f42a80, 0x27ad39a2, + 0xc676f01c, 0x01959ee1, 0x714cfb31, 0x04cbb5dc, + 0xbd96e699, 0x0245d9db, 0xd37a57ad, 0x1bed9622, + 0xe2fe2df7, 0x16821c8a, 0xe9f1470b, 0xb6f5e02b, + 0xa893af17, 0xe89f83e2, 0xefd5578c, 0x7887a4f3, + 0xdd74f9ab, 0x186a5a0a, 0xfae9aeca, 0x8e2f4cf2, + 0x1c8e5436, 0x6324fe93, 0xae4dbf4e, 0xc6fb94f6, + 0x46536e72, 0x634ef238, 0x92f6d797, 0x998a4495, + 0xbc9045b5, 0x3711c67a, 0x06398c82, 0xd400d007, + 0x9a7ab900, 0x2bac3f07, 0x25287997, 0x3cf6ea82, + 0x8659ba53, 0x04225b0f, 0xf8d8df07, 0x2810ec68, + 0x6f6ac63a, 0x059421ec, 0xacbf0003, 0x8c814bd6, + 0x729f7df0, 0xa4e71474, 0xbe6fa67e, 0x285187ca, + 0xb4e10c6a, 0xe75eb871, 0x069f279a, 0x8f077838, + 0xc7da5fe8, 0x33f9018a, 0xb25ac608, 0x3800a999, + 0x4a0d5281, 0x0035732f, 0xf29716ea, 0xeadf79cf, + 0xaa334c92, 0x006c5e92, 0x800993b0, 0x73087119, + 0x8a96c964, 0xb77cf734, 0xf6cb19ce, 0xcfb89d15, + 0x3d540bc5, 0x857f1191, 0x2da68eb2, 0x2ef16da1, + 0xa57160fd, 0xbf16cf7b, 0x5bb56f3c, 0x0f3f3a96, + 0xe702a064, 0x2add1bb8, 0x05280bb0, 0x49445ab8, + 0xf560ef61, 0x3af163ab, 0xd35cb600, 0x8b8f9ae6, + 0x06576967, 0xd80dfea3, 0x259b0191, 0x2278a868, + 0xf45319d8, 0x425b6c40, 0x3bae950d, 0x26444870, + 0x4ff182bb, 0x2e53b357, 0x24a8f9b2, 0x7aae7740, + 0x2a360653, 0xdc564384, 0x053b1f16, 0x3dae0afa, + 0x11c0079d, 0x6ecc742c, 0x01cf0947, 0x68f33267, + 0x828d35ad, 0x6f4d5a11, 0x01d09dc1, 0x09aeefeb, + 0xf0e8412b, 0xa959fc23, 0x91bad736, 0x265b2075, + 0xe3ddc4b7, 0x07569527, 0xc34f7ec1, 0x0c97d192, + 0x0a43f79c, 0x7ad3abf4, 0xf69b9033, 0x1bdf0124, + 0x3961aaa6, 0xa7b78b13, 0xdcd1dffd, 0x59611fb2, + 0x64b2f04b, 0x506cc54e, 0x5f7fc2ab, 0xd22018a0, + 0x1e2064a9, 0x1db995c0, 0xeddc7fe1, 0xf91b245c, + 0xb062a7ad, 0xbe199ab8, 0x15d22c79, 0x7a7cdab2, + 0xc37df0be, 0x2007b582, 0x2f04c75f, 0x4b84ab20, + 0x1998d8e3, 0x2169ca81, 0xff3c8a5c, 0xc30af54a, + 0x87015fe3, 0xd52edcab, 0xed6c8706, 0x9db80ec3, + 0x10d62f38, 0xa5268e7d, 0x77ab0d49, 0xe60c8031, + 0x74288339, 0x0094f2e2, 0x9d850c3c, 0x9899990f, + 0x04dccf5e, 0x0c7fd917, 0x6d31624f, 0xfc003f1c, + 0x283add48, 0x7517c415, 0x2bf12ccd, 0xb66ce8b6, + 0x605be298, 0x685c18e1, 0x9970558c, 0x41a706e0, + 0xb90628db, 0x10857227, 0x37587353, 0xe6ba1c2e, + 0xf090e241, 0xf98cd147, 0x8985233d, 0xf2750b6d, + 0xf97cf9ae, 0x5d7ea61e, 0xe0e1671d, 0x49b8ae4a, + 0xeff49261, 0xdb288fdd, 0x19833ef2, 0xf1dd599f, + 0xb9611ffd, 0x6f4237cd, 0x0d0f54f0, 0x7245776a, + 0x404e9b1d, 0x8d20e5da, 0xf2d36b59, 0x00c9cabc, + 0x6db48924, 0xecae72b4, 0x6e76329b, 0xbf3f6b1a, + 0x91b8e699, 0x6c251849, 0x894f45ad, 0x99ae898a, + 0x177d0a36, 0x5ad9c3a0, 0x6dee12b7, 0xa3468398, + 0x167bc972, 0x9d6077b5, 0x926dfc50, 0xd03e6ce7, + 0x2acc9202, 0xcd06ca90, 0x0e817154, 0xc80d72e7, +#else /* Big endian */ + 0x032150dd, 0x763118d9, 0xaf05a971, 0x07c8c6fe, + 0xcb3bca93, 0xe8b5e712, 0x9de959fb, 0xd98d3d8f, + 0x9ddefbe2, 0xdfca972d, 0x058617ab, 0xeffd1c9c, + 0x4929a24c, 0x5dcc3240, 0xed74077c, 0x4b13973b, + 0x3b27154a, 0x95416ebb, 0xdeeae8e4, 0x3a661a7e, + 0xfa974c83, 0x2a8714e8, 0x30f083ba, 0x816c475a, + 0xc28c049d, 0xfa3f36d5, 0x7698c860, 0x83e3b45e, + 0x4de44675, 0xaed82010, 0x1f659f65, 0x982e2031, + 0xa18e1c15, 0xe2918106, 0x15a355cc, 0x65925d3e, + 0x356e1d49, 0xca71a35c, 0x5ee1dd76, 0xcc2f6a95, + 0xedbe39f1, 0x36dc6c12, 0x408175c6, 0x70bf5949, + 0x0c846c14, 0x0974c34a, 0x3ef8a0d5, 0x5ecafab5, + 0xb52ae6a6, 0xbbb2895b, 0x969ea9f9, 0xa19d54a0, + 0xe3d0ec23, 0x17670dde, 0x12962784, 0x2673d351, + 0xe3d8db05, 0xba99cf46, 0x88b3e8ef, 0x62273c4b, + 0xa44a7729, 0x05d20c7b, 0x1d91a466, 0x4d27be7b, + 0x524356ff, 0xe47ec45e, 0x3635b520, 0xce9bc4d2, + 0x7bbc2fdc, 0x9f7f4d17, 0xd3c4fef5, 0x834d7cb0, + 0xecd54e6c, 0xfc95a3b0, 0x14642eb1, 0x0fc0994b, + 0xf78e5b4e, 0x04ec3c07, 0xd24fe072, 0x87263d49, + 0x2429fa00, 0x952241fd, 0x82ea2361, 0xdf423c79, + 0xedc9cb6a, 0xf0e52cce, 0x867d1b38, 0x24a7609e, + 0x74664d2b, 0x7fe0f79f, 0x0a6f3010, 0xfea31abf, + 0xcabe1019, 0x479b4552, 0xf68c3717, 0xe340b23b, + 0xeae743fa, 0xe0b37f7f, 0x274b822f, 0x40676818, + 0xce86c4d0, 0x6a72b0df, 0xc732bd2b, 0x5800db5e, + 0x82df620b, 0x3ff5ee55, 0x1c8b23f9, 0x4d92af26, + 0x1270977d, 0xbb26114f, 0x6475887b, 0xc7b1c199, + 0x9174ac72, 0x58dcd30e, 0x4f705cce, 0x70752f95, + 0x695faadf, 0x3170235b, 0x40258d88, 0xe8212180, + 0x692c64c5, 0x684144e3, 0x542b7df1, 0xebb3fa1c, + 0x8a62620e, 0x7e49218e, 0x5f5508fe, 0x33ea43c0, + 0xc44100d1, 0x7c5a0d79, 0x1dfe3e40, 0x31e368c3, + 0x26b4b205, 0xc201f27d, 0x9768d5d5, 0x0b34f3e8, + 0xc6495892, 0xfd3ac063, 0x96e54c2d, 0x8727d70b, + 0xc40ce151, 0x4e7cfc19, 0xc5e33d58, 0x5561b85d, + 0xbdf55555, 0xe3f096ec, 0xc1fb58fb, 0xd8972981, + 0x1a11b0cd, 0x3a39376c, 0xe722e9ed, 0xd2515a94, + 0x1593bbbc, 0x2f24a73e, 0x0f420595, 0x177d0d49, + 0xe523967a, 0x916638c9, 0x95fc26e8, 0x47f64a9b, + 0x0ef5a874, 0xe7a40e87, 0x0aeb3315, 0x0b6e6129, + 0xdc335928, 0x96d5a002, 0x4c1c783b, 0x5854b03e, + 0x5c273e1e, 0x489d153a, 0x04e2eb73, 0x45cc8a46, + 0x1d6acf85, 0x505305d1, 0x22f6e4e0, 0x90e90413, + 0x7eaae409, 0x98eee772, 0x2f60deb1, 0x64ecbe44, + 0xfe1d6ee2, 0x01fdfddf, 0xb468c662, 0x5cc34582, + 0xf825b2bc, 0x5c181e81, 0x2f358372, 0x7275c196, + 0x4c3dc79a, 0x26c4a579, 0xd9be614e, 0x49069c1a, + 0x22f2a307, 0x16d3aee1, 0xd77ed962, 0x970dd47f, + 0xc76bcc02, 0x19c99e17, 0xdd73125d, 0xa4df3d39, + 0x1d7aa533, 0xb2bb3cad, 0x689c248f, 0x28dc19fe, + 0x6bd95b4a, 0xdd9690f1, 0x489cd53e, 0xc87c7794, + 0xf61dc628, 0xf12d6df5, 0x7876a8e2, 0xc0b6164c, + 0x16be5fb3, 0x84f530db, 0xd4bc5b9c, 0x5fd62b44, + 0x82addc12, 0xb7a875b5, 0x9b7eddba, 0x94833821, + 0x968c731b, 0x403212fe, 0x78bb117e, 0x5d0813c8, + 0x1abb80f2, 0x850aee3b, 0x5ba1fe2b, 0x12dc1d1a, + 0x1e640b83, 0x2bd011da, 0x94e10b29, 0x62e87c33, + 0xb6749288, 0x65851865, 0x19ccfd97, 0x6fc7fed1, + 0x5416c0e5, 0x90961441, 0x059ecf4f, 0x6dc4d1c3, + 0xf729a40c, 0xfff8c686, 0x5b7d55d7, 0xa6357744, + 0x28e76f99, 0x4b22960b, 0xdfbe4880, 0x0f74a8ae, + 0xf5533527, 0x6a1bf2fe, 0xfe599bb6, 0x36b13028, + 0x476d648e, 0xa7f070bd, 0x076ca4dc, 0x138b5f62, + 0x0be110dc, 0x4005ed78, 0xb907ec4d, 0xb797974b, + 0x0dcd742a, 0xbaeade0d, 0x629b5771, 0x4c9b861f, + 0x253ad270, 0xb885068d, 0x6eda1b4f, 0xc00a4a56, + 0x19743a53, 0x8fe6175e, 0x8ddeaf44, 0x58db0096, + 0xd41195cb, 0xe22a3a8a, 0x8be6d32a, 0xb703bcb4, + 0xea501a7a, 0x23be1de3, 0xbe2d6dda, 0xa0d5cafc, + 0xd2c65900, 0x0f1772f7, 0x6aac8cbc, 0x870ada14, + 0x1f1aecf2, 0x882b70a3, 0x94639615, 0xb8493e9c, + 0xbc5abc07, 0x870ca3c1, 0x59bb98e8, 0x4cedd1f3, + 0xe1f9b0d3, 0x53e2ce48, 0x047158df, 0x423b7799, + 0x4c97a2bc, 0xdef81e4c, 0x840bda28, 0x61183446, + 0xb3dfa196, 0x2547fb10, 0xf23ca562, 0xf354bc31, + 0x616704fb, 0x65530dd3, 0xf10eba31, 0xf2d6ae60, + 0x30d522f0, 0xc63698b9, 0x5dc9cd7f, 0xedcb1122, + 0xdc3d50fc, 0x641fc210, 0xb40df0ac, 0x477a420b, + 0xbe73f78f, 0xb9f5e8da, 0x2459be6e, 0xc86024db, + 0x3debcfaf, 0x08e66893, 0xc30020f4, 0x909ff52c, + 0xdf2afef7, 0x8022559c, 0xfb8be544, 0xcc3e5a73, + 0xaefaedb1, 0xaeceb6c2, 0x2398549d, 0x188800fe, + 0xe56ba0e2, 0xa9af960c, 0xf4bae045, 0x84f0c74d, + 0x500fd0cc, 0x65da75fc, 0xa5173a98, 0xad4fd65f, + 0x50428e33, 0x402dccfb, 0xd74b7b36, 0xc2302eda, + 0x5cb5a858, 0x0f8bfc49, 0x392c1315, 0x42fa64ad, + 0xe00ca922, 0xc383cb56, 0x50d12bbe, 0x119cfc69, + 0x7808fe44, 0x66984cdf, 0x84f9075a, 0x27662e79, + 0x6665a466, 0x8a2fb34d, 0x6d8005bd, 0xbabcf104, + 0x37b88c86, 0xf58d4f85, 0xd9557f6c, 0x07f1e857, + 0x8b98f6bc, 0x89ee108e, 0xabe0ffd4, 0xa015e717, + 0x62891437, 0x2227b743, 0x40ebb203, 0x4ed10360, + 0xbb4fc706, 0xde5c7bed, 0x77a52e8d, 0x09e5fec5, + 0x52ce43c8, 0xc2fadf5b, 0x889e0d02, 0x60870b2f, + 0xff2b9d50, 0xdd64f497, 0x9e8355ee, 0x2813a6d4, + 0xced46be7, 0x08c9d754, 0x685f9b73, 0xf314f853, + 0x478463ff, 0xf13ab91b, 0xd3825c04, 0x74742833, + 0x1b3104f9, 0x90432627, 0x78305b64, 0x1a676877, + 0x20a5e1cc, 0xe00b89d9, 0xb48bd535, 0xe9dedaca, + 0x1313c349, 0x27910cfd, 0xfa83c2fc, 0x068e5b4b, + 0xc252e39e, 0xbf1419be, 0x69a7979e, 0x50c4d225, + 0x49b84285, 0x9cafdab9, 0x340a8642, 0x848c91c5, + 0x5202582a, 0xc869c3c2, 0x7572d2ab, 0x7eacaaf2, + 0xdd00a3ba, 0x200f1839, 0x943ebfc0, 0xac5360e5, + 0x24043d14, 0xd4f87f1a, 0xfedf067f, 0x66ce76c0, + 0xaf058451, 0x20cb3c10, 0x64bc23e0, 0xba20c5de, + 0xcaf9e186, 0x441136f0, 0x14035e66, 0x6acd0d20, + 0xb12f1692, 0xf9162b7d, 0x977389ed, 0x1cceab41, + 0x07a6896b, 0xbb2aeb9b, 0x37ed765c, 0x6f7cb925, + 0xcf9cd312, 0xd0845ae3, 0xa28a9631, 0x177f4ebb, + 0xa2755026, 0xa9e35051, 0x984e21cc, 0x21105c7a, + 0x927303e0, 0x7876ca30, 0xd78fcd30, 0x62d3cf87, + 0xcb53f303, 0xcfa53158, 0x9e2506b5, 0xfedf947d, + 0xecbe0493, 0x1fd3ab87, 0xdcdd810e, 0x14acad14, + 0xff30385e, 0x5df500ed, 0x5cf42fbc, 0x2e8ab3ff, + 0x6804c369, 0x8fa60bf8, 0x404e46d8, 0xc9ba23d5, + 0x2c1c3e62, 0x491f8a27, 0xa7592b1c, 0xff7403f1, + 0x765b0123, 0x9f385beb, 0x1aa03116, 0x3704a37e, + 0x1fb1a9a5, 0x34d7ba3c, 0x6e4974c3, 0x35ef356e, + 0x57038fe4, 0xbff273e1, 0xa7fd5da7, 0x8729be16, + 0x85ea90d1, 0xa8c80f91, 0xd322a72c, 0x25d971bf, + 0xc51ad065, 0x5933ff5c, 0xa44ab840, 0x54096d6b, + 0x938f4052, 0x59cfd204, 0x4a0cf0ca, 0xdc1e22b5, + 0x8927fd4c, 0x27b2baf1, 0x6820f21b, 0x91c4812c, + 0x155da2bf, 0xf04d1b44, 0x8aded909, 0x31cb4733, + 0x2531df7a, 0xd32a6762, 0x9fbbbf4b, 0xa4757bf5, + 0x5d3d23a0, 0xa70cb060, 0xca41b823, 0x14c218c7, + 0x4d688250, 0x345be2ee, 0x03398052, 0x47f4518a, + 0x5b8067db, 0x663b8396, 0xa5c174d1, 0x45e55e0f, + 0xed3cc41f, 0xdb27c299, 0xec46017a, 0x381bb8bd, + 0x03f0d5a3, 0xe43c64c5, 0x4bb51810, 0x4b2dd8e5, + 0x2f93594a, 0x3512d9f9, 0xbd0d8c51, 0x37e30d66, + 0xfc4fa6c9, 0xe4a6b6db, 0x9911413d, 0x6af9d1bd, + 0xc7ea2313, 0x6381927a, 0x25d6f3cc, 0xe702353a, + 0xa87d53a4, 0x8c112c89, 0x80dc46b9, 0xb572f18a, + 0x6dbaf788, 0xce86c758, 0xf81c7613, 0xc6ee0bc8, + 0x2a628f4a, 0xaa6bca48, 0x0c66a932, 0x1fa302ee, + 0x107a812c, 0xcd561a35, 0x49cef74a, 0x66264dc1, + 0xd3f3efcd, 0x6b8e1c3b, 0x57363f06, 0x5ce046e5, + 0x39733b60, 0xcc574079, 0xba1ddf88, 0x472a44bc, + 0x33abdd67, 0xaa83c1e7, 0x7d7786dd, 0x2c3eac7b, + 0x9b2bb4b3, 0x06e555f9, 0xc74a76f7, 0xd50a401f, + 0xab370294, 0xa12d8b09, 0x9608fdab, 0xdfc5f8ab, + 0xd5f48e68, 0xfd1d0209, 0x3c391d82, 0x473fe32c, + 0xd8d19273, 0xf2cbd229, 0xe32787ca, 0xfba0ce48, + 0xf871436f, 0xd97e3bc8, 0xf607b979, 0x9787ff54, + 0x4a27326a, 0xc540a7c8, 0x59728047, 0xbba1a232, + 0xc34f032d, 0xcab24e6b, 0x250efb18, 0xd2e8a920, + 0x6e024243, 0x6ac0563b, 0x600be237, 0xdb21eac4, + 0xcab784a2, 0x79cb1ea2, 0xf9bc48b8, 0x110246a3, + 0xb04ffe75, 0x4325a7f3, 0x4ad099bf, 0x3b75a4c1, + 0x162ef9ea, 0x0f4e16d1, 0xc3d5e20b, 0x35daa8a8, + 0xdeef1e66, 0xfc9951c6, 0x742c112d, 0xcd28e8c3, + 0x63504ba5, 0xb89a4f9f, 0xcf3984e8, 0x70cdf63f, + 0x5309330f, 0x43481313, 0x6cb1a5b6, 0x1f614329, + 0x0ee349e7, 0x36b5a93f, 0x78cae082, 0xe6c49c6f, + 0x223ad81d, 0x6adeea01, 0x4a6ea977, 0x9c383b6f, + 0xbf3b7a4e, 0xe80b7d61, 0x59f0d065, 0x0493a415, + 0x64cabebe, 0xb16b6998, 0xcd4d2229, 0xc485f795, + 0x2ce9e286, 0xc692bc74, 0x0485f7ba, 0xc6000832, + 0x45f1c14c, 0x0511a00e, 0x009eb505, 0x5a81dccb, + 0x57c2b3d7, 0x51fa8ad0, 0x6234e65a, 0xfbd6f329, + 0x1adda2b7, 0x64a62985, 0x6991cc1a, 0x3dae87fe, + 0x22926ef2, 0x6578904b, 0x017d9808, 0x0d6e3d47, + 0x1a090f5a, 0xd56d1a5f, 0x124fbc5b, 0xaebfc35e, + 0x7f04f5b9, 0x1e3d65c5, 0x89bdf916, 0x96247f94, + 0xd260bd8e, 0x727ea29a, 0x9d36f2a8, 0x62a27215, + 0xf4238362, 0x6461896d, 0x19f278aa, 0xb56bfb72, + 0xfbe57af4, 0xd26f8dcb, 0x09f4770e, 0x7929d678, + 0x46f59a84, 0xac7929ac, 0x7296d8ff, 0x394143e8, + 0x928fddd6, 0xaca1da1e, 0xea9e6891, 0x9727c4be, + 0xcf840f4a, 0xdd1be31d, 0x8f30e588, 0xc9a8f6be, + 0x9b93ea5d, 0x7492f7a6, 0xb1d6cee5, 0x95a87cb3, + 0x9ee43ee6, 0xd8e372a8, 0x3d35a8eb, 0x32098155, + 0x8614adb9, 0x9e32c6ef, 0xead62942, 0x57b8de9a, + 0xc1253d8a, 0x18b231d7, 0x44eedd85, 0x150582b0, + 0x07f1be31, 0x39f684e7, 0x6a03918b, 0x42b109c9, + 0xd3bdaabf, 0x30e6fda4, 0xd97aea04, 0x909c06d8, + 0xd70e1c70, 0xe9bf27dc, 0xcd352018, 0x7d2163f1, + 0x2887de8b, 0x4b6be73d, 0x3d192717, 0xbf3cc76d, + 0xb4728f54, 0x5229835a, 0xbc68ccad, 0xfdd0ab5f, + 0x69ac96fd, 0x9740fbed, 0xbc2fa7c6, 0x0de3042f, + 0x5a5e3d4f, 0xb1d6b275, 0xa9b7407d, 0xac1691e3, + 0xdf7637f2, 0x74b874ea, 0x36020e6b, 0xfd36321a, + 0xa5a45e01, 0x180d0337, 0xb21bf552, 0x06a431fb, + 0x75ff33b1, 0xabbb603c, 0xe916c459, 0x49e10371, + 0x8e65e60b, 0x3df7f8c5, 0x5d8a980d, 0x710eedc4, + 0xcadb653e, 0x1cf814cb, 0xad5679b6, 0x8406c5a5, + 0x0cbd3558, 0x6b693037, 0x87f2f04b, 0x677c0878, + 0x013c86aa, 0x36e736e7, 0x25edbcd8, 0x59842d52, + 0x3eea2e08, 0xfe8df17c, 0x6828fcf0, 0x9c4cd6bf, + 0x38eb74a0, 0x76298f63, 0x1e5c1e16, 0xd65d0095, + 0x0f21ca88, 0x473eb1d5, 0xacb45cbc, 0x28c19269, + 0x950290e1, 0x41a85722, 0x92fd6c09, 0x625dc5de, + 0xec8b87f0, 0x12fcc4b3, 0x6677b585, 0x8467a81a, + 0xd84989cc, 0xe08ff19b, 0x7031a28a, 0x888a213d, + 0xc09b024a, 0x5b269127, 0xd082983e, 0x306e5f42, + 0x3e3275b7, 0x4ade3493, 0x1e30e31f, 0x432544c0, + 0xdfe1b89f, 0x1b020bb4, 0xd289a15d, 0xb47e6ed1, + 0xb6bcec8f, 0x5e7d5cf0, 0xe5243325, 0x3d161360, + 0x8a189892, 0xe2fcb714, 0x24323676, 0x0b783d24, + 0x2d0c5de0, 0x605adc6c, 0xf08a48bd, 0x3780292b, + 0xac1345ed, 0x19acf5e0, 0x14a0e9ca, 0x6693b797, + 0xede2aec9, 0x171f3513, 0xaf0cc796, 0xfd536607, + 0x35fe7a3f, 0x3060c0f5, 0xa834433e, 0xf0a825d4, + 0x0a297ffc, 0xff900aaa, 0xad8176f9, 0x4c52f059, + 0xf9837bfc, 0xe4df1ef2, 0x1a6afe07, 0x928cda83, + 0xc4e206db, 0x8ad021b0, 0xc1da95d4, 0xab0a9d55, + 0xcb0b17cf, 0xdf13feeb, 0x6befc003, 0xc965457a, + 0x35481ca1, 0x7fa4e244, 0x5049709d, 0x506a99df, + 0x0eebd7a0, 0x57082b12, 0xa65a85e4, 0x47279d6e, + 0x1b1db9bf, 0x88c8903b, 0x6bbfe95f, 0x787b40b2, + 0x3c638e83, 0x7701c216, 0xaee62103, 0x2618df71, + 0x265faa7c, 0x0688ab96, 0x41fe6dc0, 0xe6a25d50, + 0x0ed854a9, 0x7322b840, 0xe2f18643, 0xcd47f9b2, + 0x70315a67, 0x7b533295, 0x3cdb2f76, 0x28722eb2, + 0x53bb283b, 0xe1d9178a, 0x7cf0c578, 0x74f32d4d, + 0x5df88f1f, 0x36f28a5f, 0x93049cc1, 0x1b67f35e, + 0xfaf71107, 0xcdb2223d, 0x8116646f, 0xadcbb984, + 0xbb810283, 0x770428de, 0x7f055afe, 0x55926f61, + 0x3cb8ffa0, 0xd8de2a84, 0xda85cf86, 0xd0ab4089, + 0x8e483edd, 0xa464ab0d, 0xf9fe4b50, 0xaa8a398d, + 0xd3ea43cd, 0x9bffb5c2, 0x5e1fc86a, 0xd4ce2de6, + 0x9e910929, 0xe052f316, 0x29128865, 0xaaacd8d2, + 0x6a0af765, 0xc65f8a0b, 0x5c421aa9, 0xc7438e43, + 0x0313f7f1, 0x351dc465, 0x5cd11fda, 0xb9c1a4c9, + 0x748b67de, 0x227757be, 0xf12439ea, 0x25a3c656, + 0xf2a8130f, 0xc507ea1a, 0xf2b9d4b9, 0x18db074a, + 0x1568c873, 0xfc2d6d22, 0xba80b5ba, 0xa66bbe21, + 0x2e05b794, 0x61de03ed, 0xef9aa166, 0x38edb3f1, + 0xc5af7d6b, 0x0d6b201d, 0x05b59096, 0x8978960f, + 0x7158192c, 0xaf3204a9, 0xa2efb524, 0x9224f5b1, + 0x21e9c2c8, 0xe68fec8c, 0x42fed4f8, 0xc31222ab, + 0x5ea175c2, 0xdd0b129c, 0xba921672, 0x6812cbe4, + 0x8bb9ac49, 0xd30c8613, 0x5ab8d776, 0xae9dd616, + 0xa57c731c, 0x4ec2cc9e, 0x6c1c8fd2, 0xd64bbc64, + 0xa49289b5, 0xb70bac9b, 0x2966be85, 0x6b9add49, + 0x1eaed5d2, 0x7b5dc71e, 0x91c2e9a7, 0x86ee3a2a, + 0xb1716972, 0xa263bb68, 0x5e4203b5, 0x5f807557, + 0xa902dce4, 0x00c4d8cb, 0xe86bc835, 0xafb3e079, + 0xa481f6bb, 0x75a8d0e5, 0xf8d0c00e, 0xeca9d69e, + 0x4bfac55d, 0x20ca4fe6, 0x528028de, 0x25c2c029, + 0x630d31cb, 0x24c2ac90, 0xf7c818a8, 0x8370070c, + 0xa40454d2, 0xbc626881, 0xf75228a3, 0xb0910df9, + 0xc0d3f181, 0xbe0fe37f, 0x67df53bf, 0x3a7ecd46, + 0x03103f29, 0x8b708a7e, 0xd52fa2f3, 0x2980e01e, + 0x3a332ef8, 0x240112ee, 0xbc418331, 0x363a928a, + 0x4c1a784c, 0xfc7b33a9, 0x9857151e, 0x1a171702, + 0x8e8d5077, 0x711190ea, 0x0c537fa8, 0x56fa6036, + 0x3676d8f3, 0xaa03d3e1, 0x6ed9603c, 0xed154b7d, + 0x54ede682, 0x049c956c, 0x2728ddcb, 0x8fcb0bcb, + 0xfd8d804e, 0x462bd2b8, 0xfab74af9, 0x4854db66, + 0x956efff4, 0xe424678a, 0x8ca7dc77, 0xc71fe712, + 0xcbbc4650, 0xdc27de0a, 0xc5c29d05, 0xb398c619, + 0x37574ff3, 0xbb531ff1, 0xb1e4a6c8, 0x38a7d0a7, + 0x91d482d9, 0x0399d50e, 0x4fdf4895, 0xd5af2860, + 0x2de8be74, 0x96dd0097, 0xb0348c8b, 0x5e12f208, + 0xd746b55b, 0x81c83f65, 0xe2ab1729, 0x1340c95a, + 0x1d5f2d9c, 0x178bcefe, 0x0b597ea6, 0xeea916dc, + 0xd8f39882, 0x4960f175, 0x3cfbacfa, 0xb8f9e94f, + 0xc6e968d8, 0xfa8a05ef, 0x540f57ac, 0x99a5d41d, + 0xce11e1b6, 0x4cde578d, 0xce91ab33, 0xc2402b77, + 0x1878874f, 0x38da95c2, 0x7364cb4d, 0x78d33ae8, + 0x5404d777, 0x7ebc13c9, 0x020b9fd8, 0x3b2457d2, + 0xffcdd8ed, 0xabbe2125, 0x9edfc568, 0x47f980e5, + 0x42629cb8, 0x05d19c95, 0x9e15d503, 0x7d8a78b4, + 0x7e8a00d1, 0x7a61d8ca, 0x609c6648, 0x78efe49d, + 0xe07f514f, 0xc28eb52e, 0x4ee13e9b, 0xb669c8dd, + 0xb6b56de1, 0xcd1e0b57, 0xf914a6b1, 0x05443ed8, + 0xa8e0f160, 0x1a2f663d, 0x7ecbb9db, 0xa996c4de, + 0x714165dd, 0x164e3c6d, 0x6799e088, 0xc4844910, + 0x2f11c084, 0x6c9b16f1, 0x498d0277, 0x48d4e108, + 0xdd3cbc0e, 0xafc99cba, 0x6bc6be33, 0x67b777b4, + 0x3814b32b, 0x084df57c, 0x91497993, 0x031aa91e, + 0xad31ea96, 0xf3d525cd, 0xdfa76674, 0x30cd4b3e, + 0xa67cd93b, 0x2be19f6c, 0xde035d1f, 0xac2f17ff, + 0xd062444c, 0xea130882, 0x841810ef, 0x8b72c626, + 0xa233058b, 0x6dad86c7, 0x83143b86, 0x9fa105ff, + 0xe5a29b1c, 0x8ceef5c3, 0x5ea7a831, 0x8fad80b7, + 0x0defccad, 0xde20b371, 0x18afeb2b, 0x841dc112, + 0x4c81a42e, 0xb73694c0, 0x2492cb01, 0xe472137d, + 0x1a54da71, 0xdd5af1f7, 0xc654edb7, 0x4e328d0c, + 0x9a8632c9, 0xf4de4d16, 0x71c03fef, 0xf54b4bef, + 0xa0d14f76, 0x59d1781f, 0xee38ea5c, 0xa11799d7, + 0x463efbd9, 0x04f9b231, 0xb1c0f78d, 0x84486bdf, + 0xce349a7e, 0x7b5f2039, 0x01199a40, 0x35bfa363, + 0xc3a644b5, 0xffd9ccfa, 0xb5e0bc43, 0xf3b749b1, + 0xd7d6aaa0, 0x1b6a08cd, 0x63e5b2cf, 0x1796418a, + 0x01cab369, 0xd19299ed, 0x76b095ca, 0x9b1143c0, + 0x8907df76, 0x91dbdec7, 0x4063f12a, 0x59f32b96, + 0x82433cbc, 0xdde09636, 0x9b9a791d, 0x217a2d1f, + 0xde07fd25, 0xc997f4fd, 0xe0f66e00, 0xc3a89c5c, + 0x94adc76a, 0x08c43e18, 0x3c33bbe1, 0x2632587a, + 0x1b881ffb, 0xef110ff7, 0x1f81d7bb, 0x1ed250d1, + 0xa3af23eb, 0xc7f2b3fd, 0xbea4d3e9, 0x2db7289a, + 0x172d0c1f, 0x9ad2bcd0, 0xb1f57b5c, 0xf0a8db81, + 0x0672d3fc, 0x1b2e64e6, 0xe379cc38, 0x8cb03b29, + 0xbfc85cd6, 0xd2523a4c, 0x3ca16aab, 0xfbe70f25, + 0xe7637a83, 0x7faf9721, 0x802af4f6, 0xa239ad27, + 0x1cf076c6, 0xe19e9501, 0x31fb4c71, 0xdcb5cb04, + 0x99e696bd, 0xdbd94502, 0xad577ad3, 0x2296ed1b, + 0xf72dfee2, 0x8a1c8216, 0x0b47f1e9, 0x2be0f5b6, + 0x17af93a8, 0xe2839fe8, 0x8c57d5ef, 0xf3a48778, + 0xabf974dd, 0x0a5a6a18, 0xcaaee9fa, 0xf24c2f8e, + 0x36548e1c, 0x93fe2463, 0x4ebf4dae, 0xf694fbc6, + 0x726e5346, 0x38f24e63, 0x97d7f692, 0x95448a99, + 0xb54590bc, 0x7ac61137, 0x828c3906, 0x07d000d4, + 0x00b97a9a, 0x073fac2b, 0x97792825, 0x82eaf63c, + 0x53ba5986, 0x0f5b2204, 0x07dfd8f8, 0x68ec1028, + 0x3ac66a6f, 0xec219405, 0x0300bfac, 0xd64b818c, + 0xf07d9f72, 0x7414e7a4, 0x7ea66fbe, 0xca875128, + 0x6a0ce1b4, 0x71b85ee7, 0x9a279f06, 0x3878078f, + 0xe85fdac7, 0x8a01f933, 0x08c65ab2, 0x99a90038, + 0x81520d4a, 0x2f733500, 0xea1697f2, 0xcf79dfea, + 0x924c33aa, 0x925e6c00, 0xb0930980, 0x19710873, + 0x64c9968a, 0x34f77cb7, 0xce19cbf6, 0x159db8cf, + 0xc50b543d, 0x91117f85, 0xb28ea62d, 0xa16df12e, + 0xfd6071a5, 0x7bcf16bf, 0x3c6fb55b, 0x963a3f0f, + 0x64a002e7, 0xb81bdd2a, 0xb00b2805, 0xb85a4449, + 0x61ef60f5, 0xab63f13a, 0x00b65cd3, 0xe69a8f8b, + 0x67695706, 0xa3fe0dd8, 0x91019b25, 0x68a87822, + 0xd81953f4, 0x406c5b42, 0x0d95ae3b, 0x70484426, + 0xbb82f14f, 0x57b3532e, 0xb2f9a824, 0x4077ae7a, + 0x5306362a, 0x844356dc, 0x161f3b05, 0xfa0aae3d, + 0x9d07c011, 0x2c74cc6e, 0x4709cf01, 0x6732f368, + 0xad358d82, 0x115a4d6f, 0xc19dd001, 0xebefae09, + 0x2b41e8f0, 0x23fc59a9, 0x36d7ba91, 0x75205b26, + 0xb7c4dde3, 0x27955607, 0xc17e4fc3, 0x92d1970c, + 0x9cf7430a, 0xf4abd37a, 0x33909bf6, 0x2401df1b, + 0xa6aa6139, 0x138bb7a7, 0xfddfd1dc, 0xb21f6159, + 0x4bf0b264, 0x4ec56c50, 0xabc27f5f, 0xa01820d2, + 0xa964201e, 0xc095b91d, 0xe17fdced, 0x5c241bf9, + 0xada762b0, 0xb89a19be, 0x792cd215, 0xb2da7c7a, + 0xbef07dc3, 0x82b50720, 0x5fc7042f, 0x20ab844b, + 0xe3d89819, 0x81ca6921, 0x5c8a3cff, 0x4af50ac3, + 0xe35f0187, 0xabdc2ed5, 0x06876ced, 0xc30eb89d, + 0x382fd610, 0x7d8e26a5, 0x490dab77, 0x31800ce6, + 0x39832874, 0xe2f29400, 0x3c0c859d, 0x0f999998, + 0x5ecfdc04, 0x17d97f0c, 0x4f62316d, 0x1c3f00fc, + 0x48dd3a28, 0x15c41775, 0xcd2cf12b, 0xb6e86cb6, + 0x98e25b60, 0xe1185c68, 0x8c557099, 0xe006a741, + 0xdb2806b9, 0x27728510, 0x53735837, 0x2e1cbae6, + 0x41e290f0, 0x47d18cf9, 0x3d238589, 0x6d0b75f2, + 0xaef97cf9, 0x1ea67e5d, 0x1d67e1e0, 0x4aaeb849, + 0x6192f4ef, 0xdd8f28db, 0xf23e8319, 0x9f59ddf1, + 0xfd1f61b9, 0xcd37426f, 0xf0540f0d, 0x6a774572, + 0x1d9b4e40, 0xdae5208d, 0x596bd3f2, 0xbccac900, + 0x2489b46d, 0xb472aeec, 0x9b32766e, 0x1a6b3fbf, + 0x99e6b891, 0x4918256c, 0xad454f89, 0x8a89ae99, + 0x360a7d17, 0xa0c3d95a, 0xb712ee6d, 0x988346a3, + 0x72c97b16, 0xb577609d, 0x50fc6d92, 0xe76c3ed0, + 0x0292cc2a, 0x90ca06cd, 0x5471810e, 0xe7720dc8, +#endif /* defined __LIT */ +}; + +/********************************************************************************************************************** + Private (static) variables and functions + *********************************************************************************************************************/ + diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/SCE_module.h b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/SCE_module.h new file mode 100644 index 000000000..5f1bfaade --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/SCE_module.h @@ -0,0 +1,30 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef HW_SCE_MODULE_H +#define HW_SCE_MODULE_H + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ + +#define SCE_BASE 0x40161000UL + +#endif // HW_SCE_MODULE_H diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/hw_sce_ra_private.h b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/hw_sce_ra_private.h new file mode 100644 index 000000000..fd7ce6311 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/private/inc/hw_sce_ra_private.h @@ -0,0 +1,589 @@ +/********************************************************************************************************************** + * DISCLAIMER + * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No + * other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all + * applicable laws, including copyright laws. + * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING + * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM + * EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES + * SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO + * THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of + * this software. By using this software, you agree to the additional terms and conditions found by accessing the + * following link: + * http://www.renesas.com/disclaimer + * + * Copyright (C) 2017-2020 Renesas Electronics Corporation. All rights reserved. + *********************************************************************************************************************/ +/********************************************************************************************************************** + * File Name : hw_sce_ra_private.h + * Version : 1.09 + * Description : SCE function private header file. + *********************************************************************************************************************/ + +/********************************************************************************************************************** + Includes , "Project Includes" + *********************************************************************************************************************/ +#include "r_sce_if.h" +#include "SCE_ProcCommon.h" + +#ifndef HW_SCE_RA_PRIVATE_HEADER_FILE +#define HW_SCE_RA_PRIVATE_HEADER_FILE + +/********************************************************************************************************************** + Macro definitions + *********************************************************************************************************************/ +#if SCE_SECURE_BOOT != 0 +/* Required for each variable definition with no initial value to be placed in the SECURE_BOOT section. */ +#define SCE_PRV_SEC_B_SECURE_BOOT R_BSP_ATTRIB_SECTION_CHANGE(B, SECURE_BOOT, 4) +/* Required for each function definition to be placed in the SECURE_BOOT section. */ +#define SCE_PRV_SEC_P_SECURE_BOOT R_BSP_ATTRIB_SECTION_CHANGE(P, SECURE_BOOT) +/* Revert to default section. */ +#define SCE_PRV_SEC_DEFAULT R_BSP_ATTRIB_SECTION_CHANGE_END +#else +/* Required for each variable definition with no initial value to be placed in the SECURE_BOOT section.(dummy) */ +#define SCE_PRV_SEC_B_SECURE_BOOT +/* Required for each function definition to be placed in the SECURE_BOOT section.(dummy) */ +#define SCE_PRV_SEC_P_SECURE_BOOT +/* Revert to default section.(dummy) */ +#define SCE_PRV_SEC_DEFAULT +#endif /* SCE_SECURE_BOOT != 0 */ + +/********************************************************************************************************************** + Global Typedef definitions + *********************************************************************************************************************/ + +/********************************************************************************************************************** + External global variables + *********************************************************************************************************************/ + +extern uint32_t const S_FLASH2[]; + +extern uint32_t S_RAM[HW_SCE_SRAM_WORD_SIZE]; +extern uint32_t S_HEAP[HW_SCE_SHEAP_WORD_SIZE]; +extern uint32_t S_INST[HW_SCE_SINST_WORD_SIZE]; +extern uint32_t S_INST2[HW_SCE_SINST2_WORD_SIZE]; + +extern SCE_GEN_MAC_CB_FUNC_T SCE_GEN_MAC_CB_FUNC; + +extern uint32_t INST_DATA_SIZE; +extern const uint32_t sce_oem_key_size[SCE_OEM_CMD_NUM]; + +/********************************************************************************************************************** + Exported global functions + *********************************************************************************************************************/ +/* --------------------- SCE driver wrapper layer ---------------------- */ + +fsp_err_t HW_SCE_Aes128EcbEncryptInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128EcbEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128EcbEncryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); +fsp_err_t HW_SCE_Aes128EcbDecryptInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128EcbDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128EcbDecryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); +fsp_err_t HW_SCE_Aes128CbcEncryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes128CbcEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CbcEncryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); +fsp_err_t HW_SCE_Aes128CbcDecryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes128CbcDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CbcDecryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); + +fsp_err_t HW_SCE_Aes256EcbEncryptInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256EcbEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256EcbEncryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); +fsp_err_t HW_SCE_Aes256EcbDecryptInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256EcbDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256EcbDecryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); +fsp_err_t HW_SCE_Aes256CbcEncryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes256CbcEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CbcEncryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); +fsp_err_t HW_SCE_Aes256CbcDecryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes256CbcDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CbcDecryptFinalPrivate(uint32_t *OutData_Text, uint32_t *OutData_length); + +fsp_err_t HW_SCE_Aes128GcmEncryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes128GcmEncryptUpdateAadPrivate(uint32_t *InData_DataA, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128GcmEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes128GcmEncryptFinalPrivate(uint32_t *InData_Text, uint32_t *InData_DataALen, + uint32_t *InData_TextLen, uint32_t *OutData_Text, uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes128GcmDecryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes128GcmDecryptUpdateAadPrivate(uint32_t *InData_DataA, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128GcmDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes128GcmDecryptFinalPrivate(uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *InData_DataTLen, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes256GcmEncryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes256GcmEncryptUpdateAadPrivate(uint32_t *InData_DataA, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256GcmEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes256GcmEncryptFinalPrivate(uint32_t *InData_Text, uint32_t *InData_DataALen, + uint32_t *InData_TextLen, uint32_t *OutData_Text, uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes256GcmDecryptInitPrivate(sce_aes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_Aes256GcmDecryptUpdateAadPrivate(uint32_t *InData_DataA, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256GcmDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes256GcmDecryptFinalPrivate(uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *InData_DataTLen, uint32_t *OutData_Text); +void HW_SCE_Aes128GcmEncryptUpdateTransitionPrivate(void); +void HW_SCE_Aes128GcmDecryptUpdateTransitionPrivate(void); +void HW_SCE_Aes256GcmEncryptUpdateTransitionPrivate(void); +void HW_SCE_Aes256GcmDecryptUpdateTransitionPrivate(void); + +fsp_err_t HW_SCE_Aes128CcmEncryptInitPrivate(sce_aes_key_index_t *KeyIndex, uint32_t *InData_IV, + uint32_t *InData_Header, uint32_t Header_Len); +fsp_err_t HW_SCE_Aes128CcmEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CcmEncryptFinalPrivate(uint32_t *InData_TextLen, uint32_t *InData_Text, + uint32_t *OutData_Text, uint32_t *OutData_MAC); +fsp_err_t HW_SCE_Aes128CcmDecryptInitPrivate(sce_aes_key_index_t *KeyIndex, uint32_t *InData_IV, + uint32_t *InData_Header, uint32_t Header_Len); +fsp_err_t HW_SCE_Aes128CcmDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CcmDecryptFinalPrivate(uint32_t *InData_Text, uint32_t *InData_TextLen, uint32_t *InData_MAC, + uint32_t *InData_MACLength, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes256CcmEncryptInitPrivate(sce_aes_key_index_t *KeyIndex, uint32_t *InData_IV, + uint32_t *InData_Header, uint32_t Header_Len); +fsp_err_t HW_SCE_Aes256CcmEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CcmEncryptFinalPrivate(uint32_t *InData_TextLen, uint32_t *InData_Text, + uint32_t *OutData_Text, uint32_t *OutData_MAC); +fsp_err_t HW_SCE_Aes256CcmDecryptInitPrivate(sce_aes_key_index_t *KeyIndex, uint32_t *InData_IV, + uint32_t *InData_Header, uint32_t Header_Len); +fsp_err_t HW_SCE_Aes256CcmDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CcmDecryptFinalPrivate(uint32_t *InData_Text, uint32_t *InData_TextLen, uint32_t *InData_MAC, + uint32_t *InData_MACLength, uint32_t *OutData_Text); + +fsp_err_t HW_SCE_Aes128CmacGenerateInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128CmacGenerateUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CmacGenerateFinalPrivate(uint32_t All_Msg_Len, uint32_t *InData_Text, + uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes128CmacVerifyInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128CmacVerifyUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CmacVerifyFinalPrivate(uint32_t All_Msg_Len, uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataTLen); +fsp_err_t HW_SCE_Aes256CmacGenerateInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256CmacGenerateUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CmacGenerateFinalPrivate(uint32_t All_Msg_Len, uint32_t *InData_Text, + uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes256CmacVerifyInitPrivate(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256CmacVerifyUpdatePrivate(uint32_t *InData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CmacVerifyFinalPrivate(uint32_t All_Msg_Len, uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataTLen); + +fsp_err_t HW_SCE_Sha1InitPrivate(sce_sha_md5_handle_t *handle); +fsp_err_t HW_SCE_Sha1UpdatePrivate(sce_sha_md5_handle_t *handle, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha1FinalPrivate(sce_sha_md5_handle_t *handle, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT, + uint32_t *OutData_MsgDigest, uint32_t *OutData_Length); +fsp_err_t HW_SCE_Sha256InitPrivate(sce_sha_md5_handle_t *handle); +fsp_err_t HW_SCE_Sha256UpdatePrivate(sce_sha_md5_handle_t *handle, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha256FinalPrivate(sce_sha_md5_handle_t *handle, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT, + uint32_t *OutData_MsgDigest, uint32_t *OutData_Length); +fsp_err_t HW_SCE_Md5InitPrivate(sce_sha_md5_handle_t *handle); +fsp_err_t HW_SCE_Md5UpdatePrivate(sce_sha_md5_handle_t *handle, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Md5FinalPrivate(sce_sha_md5_handle_t *handle, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT, + uint32_t *OutData_MsgDigest, uint32_t *OutData_Length); + +fsp_err_t HW_SCE_Sha1HmacGenerateInitPrivate(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha1HmacGenerateUpdatePrivate(sce_hmac_sha_handle_t *handle, uint32_t *InData_PaddedMsg, + uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha1HmacGenerateFinalPrivate(sce_hmac_sha_handle_t *handle, uint32_t *OutData_Mac); +fsp_err_t HW_SCE_Sha1HmacVerifyInitPrivate(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha1HmacVerifyUpdatePrivate(sce_hmac_sha_handle_t *handle, uint32_t *InData_PaddedMsg, + uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha1HmacVerifyFinalPrivate(sce_hmac_sha_handle_t *handle, uint32_t *InData_Mac, + uint32_t *InData_length); +fsp_err_t HW_SCE_Sha256HmacGenerateInitPrivate(sce_hmac_sha_handle_t *handle, + sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha256HmacGenerateUpdatePrivate(sce_hmac_sha_handle_t *handle, uint32_t *InData_PaddedMsg, + uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha256HmacGenerateFinalPrivate(sce_hmac_sha_handle_t *handle, uint32_t *OutData_Mac); +fsp_err_t HW_SCE_Sha256HmacVerifyInitPrivate(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha256HmacVerifyUpdatePrivate(sce_hmac_sha_handle_t *handle, uint32_t *InData_PaddedMsg, + uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha256HmacVerifyFinalPrivate(sce_hmac_sha_handle_t *handle, uint32_t *InData_Mac, + uint32_t *InData_length); + +fsp_err_t HW_SCE_Rsa1024ModularExponentEncryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa1024ModularExponentDecryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa2048ModularExponentEncryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa2048ModularExponentDecryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa3072ModularExponentEncryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa3072ModularExponentDecryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa4096ModularExponentEncryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa4096ModularExponentDecryptPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); + +fsp_err_t HW_SCE_Ecc256ScalarMultiplicationPrivate(uint32_t *InData_CurveType, uint32_t *InData_Cmd, + uint32_t *InData_KeyIndex, uint32_t *InData_PubKey, uint32_t *OutData_R); +fsp_err_t HW_SCE_Ecc256ScalarMultiplicationSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, + const uint32_t *InData_KeyIndex, const uint32_t *InData_PubKey, uint32_t *OutData_R); +fsp_err_t HW_SCE_Ecc384ScalarMultiplicationPrivate(uint32_t *InData_CurveType, + uint32_t *InData_KeyIndex, uint32_t *InData_PubKey, uint32_t *OutData_R); +fsp_err_t HW_SCE_Ecc384ScalarMultiplicationSub(const uint32_t *InData_CurveType, + const uint32_t *InData_KeyIndex, const uint32_t *InData_PubKey, uint32_t *OutData_R); + +fsp_err_t HW_SCE_TdesEcbEncryptInitPrivate(sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_TdesEcbEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_TdesEcbEncryptFinalPrivate(void); +fsp_err_t HW_SCE_TdesEcbDecryptInitPrivate(sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_TdesEcbDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_TdesEcbDecryptFinalPrivate(void); +fsp_err_t HW_SCE_TdesCbcEncryptInitPrivate(sce_tdes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_TdesCbcEncryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_TdesCbcEncryptFinalPrivate(void); +fsp_err_t HW_SCE_TdesCbcDecryptInitPrivate(sce_tdes_key_index_t *key_index, uint32_t *InData_IV); +fsp_err_t HW_SCE_TdesCbcDecryptUpdatePrivate(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_TdesCbcDecryptFinalPrivate(void); + +fsp_err_t HW_SCE_EcdhReadPublicKeyPrivate(uint32_t *InData_Cmd, uint32_t *InData_KeyIndex, uint32_t *InData_data, + uint32_t *InData_Signature, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_EcdhMakePublicKeyPrivate(uint32_t *InData_Cmd, uint32_t *InData_KeyType, + uint32_t *InData_PubKeyIndex, uint32_t *InData_PrivKeyIndex, uint32_t *InData_key_id, uint32_t *OutData_data, + uint32_t *OutData_Signature, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_EcdhCalculateSharedSecretIndexPrivate(uint32_t *InData_KeyType, uint32_t *InData_PubKeyIndex, + uint32_t *InData_PrivKeyIndex, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_EcdhKeyDerivationPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_Aes128KeyWrapPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_WrappedKeyType, + uint32_t *InData_WrappedKeyIndex, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes256KeyWrapPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_WrappedKeyType, + uint32_t *InData_WrappedKeyIndex, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes128KeyUnWrapPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_WrappedKeyType, + uint32_t *InData_Text, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_Aes256KeyUnWrapPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_WrappedKeyType, + uint32_t *InData_Text, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_KeyUnwrapPrivate(uint32_t *InData_KeyIndex, uint32_t *InData_Text, uint32_t *OutData_KeyIndex); + + +/* --------------------- SCE control procedure related ---------------------- */ + +void HW_SCE_SoftwareResetSub(void); +fsp_err_t HW_SCE_SelfCheck1Sub(void); +fsp_err_t HW_SCE_SelfCheck2Sub(void); +fsp_err_t HW_SCE_LoadHukSub(uint32_t *InData_LC); + +fsp_err_t HW_SCE_GenerateUpdateKeyRingKeyIndexSub(uint32_t *InData_LC, uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_InstData); +fsp_err_t HW_SCE_UpdateOemKeyIndexSub(uint32_t *InData_LC, uint32_t *InData_Cmd, uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateOemKeyIndexSub(uint32_t *InData_KeyType, uint32_t *InData_Cmd, uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); + +fsp_err_t HW_SCE_GenerateAes128KeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateAes256KeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateAes128RandomKeyIndexSub(uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateAes256RandomKeyIndexSub(uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateTdesKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateTdesRandomKeyIndexSub(uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa1024PublicKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa1024PrivateKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa2048PublicKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa2048PrivateKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa3072PublicKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa3072PrivateKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa4096PublicKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa4096PrivateKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRsa1024RandomKeyIndexSub(uint32_t MAX_CNT, uint32_t *OutData_PubKeyIndex, + uint32_t *OutData_PrivKeyIndex); +fsp_err_t HW_SCE_GenerateRsa2048RandomKeyIndexSub(uint32_t MAX_CNT, uint32_t *OutData_PubKeyIndex, + uint32_t *OutData_PrivKeyIndex); +fsp_err_t HW_SCE_GenerateRsa3072RandomKeyIndexSub(uint32_t MAX_CNT, uint32_t *OutData_PubKeyIndex, + uint32_t *OutData_PrivKeyIndex); +fsp_err_t HW_SCE_GenerateRsa4096RandomKeyIndexSub(uint32_t MAX_CNT, uint32_t *OutData_PubKeyIndex, + uint32_t *OutData_PrivKeyIndex); +fsp_err_t HW_SCE_GenerateTlsRsaInstallDataSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_InstData); +fsp_err_t HW_SCE_GenerateTlsP256EccKeyIndexSub(uint32_t *OutData_KeyIndex, uint32_t *OutData_PubKey); +fsp_err_t HW_SCE_GenerateEccPrivateKeyIndexSub(uint32_t *InData_SharedKeyIndex, + uint32_t *InData_SessionKey, uint32_t *InData_Cmd, uint32_t *InData_IV, + uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateEccP384PrivateKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateEccPublicKeyIndexSub(uint32_t *InData_SharedKeyIndex, + uint32_t *InData_SessionKey, uint32_t *InData_Cmd, uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateEccP384PublicKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateEccRandomKeyIndexSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, uint32_t *OutData_PubKeyIndex, + uint32_t *OutData_PrivKeyIndex); +fsp_err_t HW_SCE_GenerateEccP384RandomKeyIndexSub(const uint32_t *InData_CurveType, uint32_t *OutData_PubKeyIndex, uint32_t *OutData_PrivKeyIndex); +fsp_err_t HW_SCE_GenerateShaHmacKeyIndexSub(uint32_t *InData_SharedKeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_Cmd, uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_GenerateRandomNumberSub(uint32_t *OutData_Text); +fsp_err_t HW_SCE_GenerateUpdateKeyRingKeyIndexSub(uint32_t *InData_LC, uint32_t *InData_SharedKeyIndex, + uint32_t *InData_SessionKey, uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_InstData); + +fsp_err_t HW_SCE_UpdateAes128KeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateAes256KeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateTdesKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa1024PublicKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa1024PrivateKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa2048PublicKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa2048PrivateKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa3072PublicKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa3072PrivateKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa4096PublicKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateRsa4096PrivateKeyIndexSub(uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateTlsRsaDataSub(uint32_t *InData_IV, uint32_t *InData_InstData, uint32_t *OutData_InstData); +fsp_err_t HW_SCE_UpdateEccPrivateKeyIndexSub(uint32_t *InData_Cmd, uint32_t *InData_IV, + uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateEccPublicKeyIndexSub(uint32_t *InData_Cmd, uint32_t *InData_IV, + uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateEccP384PrivateKeyIndexSub(uint32_t *InData_IV, + uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateEccP384PublicKeyIndexSub(uint32_t *InData_IV, + uint32_t *InData_InstData, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_UpdateShaHmacKeyIndexSub(uint32_t *InData_Cmd, uint32_t *InData_IV, uint32_t *InData_InstData, + uint32_t *OutData_KeyIndex); + +fsp_err_t HW_SCE_StartUpdateFirmwareSub(void); +fsp_err_t HW_SCE_GenerateFirmwareMacSub(uint32_t *InData_KeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_UpProgram, uint32_t *InData_IV, uint32_t *OutData_Program, uint32_t MAX_CNT, + sce_firmware_generate_mac_resume_handle_t *sce_firmware_generate_mac_resume_handle); +fsp_err_t HW_SCE_VerifyFirmwareMacSub(uint32_t *InData_Program, uint32_t MAX_CNT); + +fsp_err_t HW_SCE_Aes128EncryptDecryptInitSub(const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, const uint32_t *InData_IV); +void HW_SCE_Aes128EncryptDecryptUpdateSub(const uint32_t *InData_Text, uint32_t *OutData_Text, const uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128EncryptDecryptFinalSub(void); +fsp_err_t HW_SCE_Aes256EncryptDecryptInitSub(const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, const uint32_t *InData_IV); +void HW_SCE_Aes256EncryptDecryptUpdateSub(const uint32_t *InData_Text, uint32_t *OutData_Text, const uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256EncryptDecryptFinalSub(void); + +fsp_err_t HW_SCE_Ghash(uint32_t *InData_HV, uint32_t *InData_IV, uint32_t *InData_Text, uint32_t *OutData_DataT, + uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128GcmEncryptInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t *InData_IV); +void HW_SCE_Aes128GcmEncryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128GcmEncryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataALen, + uint32_t *InData_TextLen, uint32_t *OutData_Text, uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes128GcmDecryptInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t *InData_IV); +void HW_SCE_Aes128GcmDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128GcmDecryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataT, uint32_t *InData_DataALen, + uint32_t *InData_TextLen, uint32_t *InData_DataTLen, uint32_t *OutData_Text); +void HW_SCE_Aes128GcmDecryptUpdateTransitionSub(void); +void HW_SCE_Aes128GcmEncryptUpdateTransitionSub(void); +void HW_SCE_Aes256GcmDecryptUpdateTransitionSub(void); +void HW_SCE_Aes256GcmEncryptUpdateTransitionSub(void); +void HW_SCE_Aes128GcmEncryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT); +void HW_SCE_Aes128GcmDecryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256GcmEncryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV); +void HW_SCE_Aes256GcmEncryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256GcmEncryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataALen, + uint32_t *InData_TextLen, uint32_t *OutData_Text, uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes256GcmDecryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV); +void HW_SCE_Aes256GcmDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256GcmDecryptFinalSub(uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataALen, uint32_t *InData_TextLen, uint32_t *InData_DataTLen, uint32_t *OutData_Text); +void HW_SCE_Aes256GcmEncryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT); +void HW_SCE_Aes256GcmDecryptUpdateAADSub(uint32_t *InData_DataA, uint32_t MAX_CNT); + +fsp_err_t HW_SCE_Aes128CcmEncryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV, uint32_t *InData_Header, + uint32_t Header_Len); +void HW_SCE_Aes128CcmEncryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CcmEncryptFinalSub(uint32_t *InData_TextLen, uint32_t *InData_Text, uint32_t *OutData_Text, + uint32_t *OutData_MAC); +fsp_err_t HW_SCE_Aes128CcmDecryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV, uint32_t *InData_Header, + uint32_t Header_Len); +void HW_SCE_Aes128CcmDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CcmDecryptFinalSub(uint32_t *InData_Text, uint32_t *InData_TextLen, uint32_t *InData_MAC, + uint32_t *InData_MACLength, uint32_t *OutData_Text); +fsp_err_t HW_SCE_Aes256CcmEncryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV, uint32_t *InData_Header, + uint32_t Header_Len); +void HW_SCE_Aes256CcmEncryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CcmEncryptFinalSub(uint32_t *InData_TextLen, uint32_t *InData_Text, uint32_t *OutData_Text, + uint32_t *OutData_MAC); +fsp_err_t HW_SCE_Aes256CcmDecryptInitSub(uint32_t *InData_KeyIndex, uint32_t *InData_IV, uint32_t *InData_Header, + uint32_t Header_Len); +void HW_SCE_Aes256CcmDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CcmDecryptFinalSub(uint32_t *InData_Text, uint32_t *InData_TextLen, uint32_t *InData_MAC, + uint32_t *InData_MACLength, uint32_t *OutData_Text); + +fsp_err_t HW_SCE_Aes128CmacInitSub(uint32_t *InData_KeyIndex); +void HW_SCE_Aes128CmacUpdateSub(uint32_t *InData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes128CmacFinalSub(uint32_t *InData_Cmd, uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataTLen, uint32_t *OutData_DataT); +fsp_err_t HW_SCE_Aes256CmacInitSub(uint32_t *InData_KeyIndex); +void HW_SCE_Aes256CmacUpdateSub(uint32_t *InData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Aes256CmacFinalSub(uint32_t *InData_Cmd, uint32_t *InData_Text, uint32_t *InData_DataT, + uint32_t *InData_DataTLen, uint32_t *OutData_DataT); + +fsp_err_t HW_SCE_Sha1GenerateMessageDigestSub(uint32_t *InData_SHA1InitVal, uint32_t *InData_PaddedMsg, + uint32_t MAX_CNT, uint32_t *OutData_MsgDigest); +fsp_err_t HW_SCE_Sha224256GenerateMessageDigestSub(const uint32_t *InData_SHAInitVal, const uint32_t *InData_PaddedMsg, + const uint32_t MAX_CNT, uint32_t *OutData_MsgDigest); +fsp_err_t HW_SCE_Md5GenerateMessageDigestSub(uint32_t *InData_MD5InitVal, uint32_t *InData_PaddedMsg, + uint32_t MAX_CNT, uint32_t *OutData_MsgDigest); + +fsp_err_t HW_SCE_Sha1HmacInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t LEN); +void HW_SCE_Sha1HmacUpdateSub(uint32_t *InData_PaddedMsg, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha1HmacFinalSub(uint32_t *InData_Cmd, uint32_t *InData_MAC, uint32_t *InData_length, + uint32_t *OutData_MAC); +fsp_err_t HW_SCE_Sha256HmacInitSub(uint32_t *InData_KeyType, uint32_t *InData_KeyIndex, uint32_t LEN); +void HW_SCE_Sha256HmacUpdateSub(uint32_t *InData_PaddedMsg, uint32_t MAX_CNT); +fsp_err_t HW_SCE_Sha256HmacFinalSub(uint32_t *InData_Cmd, uint32_t *InData_MAC, uint32_t *InData_length, + uint32_t *OutData_MAC); + +fsp_err_t HW_SCE_TdesEncryptDecryptInitSub(uint32_t *InData_Cmd, uint32_t *InData_KeyIndex, uint32_t *InData_IV); +void HW_SCE_TdesEncryptDecryptUpdateSub(uint32_t *InData_Text, uint32_t *OutData_Text, uint32_t MAX_CNT); +fsp_err_t HW_SCE_TdesEncryptDecryptFinalSub(void); + +fsp_err_t HW_SCE_TlsRootCertificateVerificationSub(uint32_t *InData_Sel_PubKeyType, uint32_t *InData_Certificates, + uint32_t *InData_CertificatesLength, uint32_t *InData_Signature, uint32_t *InData_CertificatesInfo, + uint32_t length, uint32_t *OutData_PubKey); +fsp_err_t HW_SCE_TlsCertificateVerificationSub(uint32_t *InData_Sel_PubKeyType, uint32_t *InData_PubKey, + uint32_t *InData_TBSCertificate, uint32_t *InData_TBSCertificateLength, uint32_t *InData_Signature, + uint32_t *InData_TBSCertificateInfo, uint32_t length, uint32_t *OutData_PubKey); +fsp_err_t HW_SCE_TlsEncryptPreMasterSecretSub(uint32_t *InData_PubKey, uint32_t *InData_PreMasterSecret, + uint32_t *OutData_PreMasterSecret); +fsp_err_t HW_SCE_TlsGeneratePreMasterSecretSub(uint32_t *OutData_PreMasterSecret); +fsp_err_t HW_SCE_TlsGenerateMasterSecretSub(uint32_t *InData_Sel_CipherSuite, uint32_t *InData_PreMasterSecret, + uint32_t *InData_ClientRandom, uint32_t *InData_ServerRandom, uint32_t *OutData_MasterSecret); +fsp_err_t HW_SCE_TlsGenerateSessionKeySub(uint32_t *InData_Sel_CipherSuite, uint32_t *InData_MasterSecret, + uint32_t *InData_ClientRandom, uint32_t *InData_ServerRandom, uint32_t *InData_NonceExplicit, + uint32_t *OutData_ClientMACKeyOperationCode, uint32_t *OutData_ServerMACKeyOperationCode, + uint32_t *OutData_ClientEncKeyOperationCode, uint32_t *OutData_ServerEncKeyOperationCode, uint32_t OutLen); +fsp_err_t HW_SCE_TlsGenerateVerifyDataSub(uint32_t *InData_Sel_VerifyData, uint32_t *InData_MasterSecret, + uint32_t *InData_HandShakeHash, uint32_t *OutData_VerifyData); + +fsp_err_t HW_SCE_TlsGeneratePreMasterSecretWithEccP256KeySub(uint32_t *InData_PubKey, uint32_t *InData_KeyIndex, + uint32_t *OutData_PreMasterSecretIndex); +fsp_err_t HW_SCE_TlsServersEphemeralEcdhPublicKeyRetrievesSub(uint32_t *InData_Sel_PubKeyType, + uint32_t *InData_ClientRandom, uint32_t *InData_ServerRandom, uint32_t *InData_Sel_CompressType, + uint32_t *InData_SKE_Message, uint32_t *InData_SKE_Signature, uint32_t *InData_PubKey, + uint32_t *OutData_EphemeralPubKey); + +fsp_err_t HW_SCE_Rsa1024ModularExponentEncryptSub(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa1024ModularExponentDecryptSub(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa2048ModularExponentEncryptSub(const uint32_t *InData_KeyIndex, const uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa2048ModularExponentDecryptSub(uint32_t *InData_KeyIndex, const uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa3072ModularExponentEncryptSub(const uint32_t *InData_KeyIndex, const uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa3072ModularExponentDecryptSub(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa4096ModularExponentEncryptSub(const uint32_t *InData_KeyIndex, const uint32_t *InData_Text, + uint32_t *OutData_Text); +fsp_err_t HW_SCE_Rsa4096ModularExponentDecryptSub(uint32_t *InData_KeyIndex, uint32_t *InData_Text, + uint32_t *OutData_Text); + +fsp_err_t HW_SCE_EcdsaSigunatureGenerateSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, + const uint32_t *InData_MsgDgst, uint32_t *OutData_Signature); +fsp_err_t HW_SCE_EcdsaP384SigunatureGenerateSub(const uint32_t *InData_CurveType, const uint32_t *InData_KeyIndex, + const uint32_t *InData_MsgDgst, uint32_t *OutData_Signature); +fsp_err_t HW_SCE_EcdsaSigunatureVerificationSub(const uint32_t *InData_CurveType, const uint32_t *InData_Cmd, const uint32_t *InData_KeyIndex, + const uint32_t *InData_MsgDgst, const uint32_t *InData_Signature); +fsp_err_t HW_SCE_EcdsaP384SigunatureVerificationSub(const uint32_t *InData_CurveType, const uint32_t *InData_KeyIndex, + const uint32_t *InData_MsgDgst, const uint32_t *InData_Signature); + +fsp_err_t HW_SCE_DlmsCosemQeuSignatureVerificationSub(uint32_t *InData_Cmd, uint32_t *InData_KeyIndex, + uint32_t *InData_data, uint32_t *InData_Signature, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_DlmsCosemQevSignatureGenerationSub(uint32_t *InData_Cmd, uint32_t *InData_KeyType, + uint32_t *InData_PubKeyIndex, uint32_t *InData_PrivKeyIndex, uint32_t *InData_key_id, uint32_t *OutData_data, + uint32_t *OutData_Signature, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_DlmsCosemCalculateZSub(uint32_t *InData_KeyType, uint32_t *InData_PubKeyIndex, + uint32_t *InData_PrivKeyIndex, uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_DlmsCosemCalculateKekSub(uint32_t *InData_KeyIndex, uint32_t *InData_PaddedMsg, uint32_t MAX_CNT, + uint32_t *OutData_KeyIndex); +fsp_err_t HW_SCE_DlmsCosemKeyUnwrapSub(uint32_t *InData_KeyIndex, uint32_t *InData_Text, uint32_t *OutData_KeyIndex); + +fsp_err_t HW_SCE_AESKeyWrapSub(uint32_t *InData_Cmd, uint32_t *InData_KeyIndex, uint32_t KEY_INDEX_SIZE, uint32_t + *InData_WrappedKeyType, uint32_t *InData_WrappedKeyIndex, uint32_t WRAPPED_KEY_SIZE, uint32_t *OutData_Text); +fsp_err_t HW_SCE_AESKeyUnwrapSub(uint32_t *InData_Cmd, uint32_t *InData_KeyIndex, uint32_t KEY_INDEX_SIZE, uint32_t + *InData_WrappedKeyType, uint32_t *InData_Text, uint32_t WRAPPED_KEY_SIZE, uint32_t *OutData_KeyIndex); + +void HW_SCE_TlsRootCertificateVerificationSubSub(void); +void HW_SCE_TlsGenerateSubSub(void); + +void HW_SCE_SelfCheck1SubSub(void); +void HW_SCE_SelfCheck2SubSub(void); + +void HW_SCE_p_func000(uint32_t *InData_PaddedMsg, int32_t MAX_CNT); +void HW_SCE_p_func001(void); +void HW_SCE_p_func002(void); +void HW_SCE_p_func027_r2(uint32_t ARG1); +void HW_SCE_p_func028_r2(uint32_t ARG1); +void HW_SCE_p_func043(void); +void HW_SCE_p_func044(void); +void HW_SCE_p_func048(uint32_t* ARG1); +void HW_SCE_p_func049(uint32_t* ARG1); +void HW_SCE_p_func050(uint32_t ARG1); +void HW_SCE_p_func051(void); +void HW_SCE_p_func052(uint32_t ARG1); +void HW_SCE_p_func053(uint32_t ARG1); +void HW_SCE_p_func054(uint32_t ARG1, uint32_t ARG2); +void HW_SCE_p_func057_r1(uint32_t* ARG1, uint32_t* ARG2, uint32_t* ARG3); +void HW_SCE_p_func058(uint32_t* ARG1, uint32_t ARG2); +void HW_SCE_p_func059(void); +void HW_SCE_p_func060(void); +void HW_SCE_p_func061(uint32_t ARG1, uint32_t* ARG2); +void HW_SCE_p_func062(uint32_t ARG1, uint32_t* ARG2); +void HW_SCE_p_func063(uint32_t ARG1, uint32_t* ARG2); +void HW_SCE_p_func064(uint32_t ARG1, uint32_t* ARG2); +void HW_SCE_p_func065_r1(uint32_t* ARG1, uint32_t* ARG2); +void HW_SCE_p_func066(uint32_t ARG1, uint32_t* ARG2); +void HW_SCE_p_func067(uint32_t ARG1, uint32_t* ARG2); +void HW_SCE_p_func068(void); +void HW_SCE_p_func070_r2(uint32_t ARG1); +void HW_SCE_p_func071_r2(uint32_t ARG1); +void HW_SCE_p_func074_r1(void); +void HW_SCE_p_func075_r1(void); +void HW_SCE_p_func076(void); +void HW_SCE_p_func077(void); +void HW_SCE_p_func080(void); +void HW_SCE_p_func081(void); +void HW_SCE_p_func100(uint32_t ARG1, uint32_t ARG2, uint32_t ARG3, uint32_t ARG4); +void HW_SCE_p_func101(uint32_t ARG1, uint32_t ARG2, uint32_t ARG3, uint32_t ARG4); +void HW_SCE_p_func102(uint32_t ARG1, uint32_t ARG2, uint32_t ARG3, uint32_t ARG4); +void HW_SCE_p_func103(void); +void HW_SCE_p_func200(void); +void HW_SCE_p_func202(void); +void HW_SCE_p_func206(void); +void HW_SCE_p_func300(void); +void HW_SCE_p_func301(void); +void HW_SCE_p_func302(void); +void HW_SCE_p_func304(void); +void HW_SCE_p_func307(void); +void HW_SCE_p_func308(void); +void HW_SCE_p_func309(void); +void HW_SCE_p_func310(void); +void HW_SCE_p_func311(void); +void HW_SCE_p_func312(uint32_t ARG1); +void HW_SCE_p_func313(uint32_t ARG1); +void HW_SCE_p_func314(uint32_t ARG1); +void HW_SCE_p_func315(uint32_t ARG1); +void HW_SCE_p_func316(void); +void HW_SCE_p_func317(void); +void HW_SCE_p_func318(void); +void HW_SCE_p_func319(uint32_t ARG1); +void HW_SCE_p_func320(uint32_t ARG1); +void HW_SCE_p_func321(uint32_t ARG1); +void HW_SCE_p_func322(uint32_t ARG1); +void HW_SCE_p_func323(void); +void HW_SCE_p_func324(void); +void HW_SCE_p_func325(void); + + +void firm_mac_read(uint32_t *InData_Program); + +uint32_t change_endian_long(uint32_t data); + +#endif /* HW_SCE_RA_PRIVATE_HEADER_FILE */ diff --git a/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/public/inc/r_sce_if.h b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/public/inc/r_sce_if.h new file mode 100644 index 000000000..d64611b31 --- /dev/null +++ b/ra/fsp/src/r_sce/crypto_procedures/src/sce9/plainkey/public/inc/r_sce_if.h @@ -0,0 +1,1123 @@ +/********************************************************************************************************************** + * DISCLAIMER + * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No + * other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all + * applicable laws, including copyright laws. + * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING + * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM + * EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES + * SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO + * THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of + * this software. By using this software, you agree to the additional terms and conditions found by accessing the + * following link: + * http://www.renesas.com/disclaimer + * + * Copyright (C) 2015-2020 Renesas Electronics Corporation. All rights reserved. + *********************************************************************************************************************/ +/********************************************************************************************************************** + * File Name : r_sce_if.h + * Version : 1.09 + * Description : Interface definition for the r_sce module. + *********************************************************************************************************************/ + +/********************************************************************************************************************** + Includes , "Project Includes" + *********************************************************************************************************************/ +// added for RA6M4 start +//#include "platform.h" +#include "bsp_api.h" +// added for RA6M4 end + + +/********************************************************************************************************************** + Macro definitions + *********************************************************************************************************************/ + +#ifndef R_SCE_IF_HEADER_FILE +#define R_SCE_IF_HEADER_FILE + + +// added for RA6M4 start +#if 0 +// added for RA6M4 end + +#if R_BSP_VERSION_MAJOR < 5 +#error "This module must use BSP module of Rev.5.00 or higher. Please use the BSP module of Rev.5.00 or higher." +#endif +#if (defined BSP_MCU_RX231 || defined BSP_MCU_RX23W) && (BSP_CFG_MCU_PART_VERSION == 0xB) /* B */ +#elif (defined BSP_MCU_RX66T || defined BSP_MCU_RX72T) && ((BSP_CFG_MCU_PART_FUNCTION == 0xE /* E */) || \ + (BSP_CFG_MCU_PART_FUNCTION == 0xF /* F */) || (BSP_CFG_MCU_PART_FUNCTION == 0x10 /* G */)) +#elif (defined BSP_MCU_RX65N || defined BSP_MCU_RX651) && (BSP_CFG_MCU_PART_ENCRYPTION_INCLUDED == true) +#elif (defined BSP_MCU_RX72M || defined BSP_MCU_RX72N || defined BSP_MCU_RX66N) && \ + (BSP_CFG_MCU_PART_FUNCTION == 0x11 /* H */) +#else +#error "Your MCU does not support SCE functions. Please confirm BSP_MCU_xxx macro in r_bsp_config.h." +#endif /* defined BSP_MCU_RX231 || defined BSP_MCU_RX23W && BSP_CFG_MCU_PART_VERSION == 0xB */ + +// added for RA6M4 start +#endif +// added for RA6M4 end + +/* Version Number of API. */ +#define SCE_VERSION_MAJOR (1U) +#define SCE_VERSION_MINOR (9U) + +/* Various information. */ +#define HW_SCE_SRAM_WORD_SIZE (32U) +#define HW_SCE_SINST_WORD_SIZE (140U) +#define HW_SCE_SINST2_WORD_SIZE (16U) +#define HW_SCE_SHEAP_WORD_SIZE (1504U) +#define HW_SCE_MAC_SIZE (16U) + +/* For AES operation. */ +#define HW_SCE_AES128_KEY_INDEX_WORD_SIZE (12U) +#define HW_SCE_AES256_KEY_INDEX_WORD_SIZE (16U) +#define HW_SCE_AES128_KEY_WORD_SIZE (4U) +#define HW_SCE_AES256_KEY_WORD_SIZE (8U) +#define HW_SCE_AES128_KEY_BYTE_SIZE (16U) +#define HW_SCE_AES256_KEY_BYTE_SIZE (32U) +#define HW_SCE_AES_BLOCK_BYTE_SIZE (16U) +#define HW_SCE_AES_CBC_IV_BYTE_SIZE (16U) +#define HW_SCE_AES_GCM_AAD_BLOCK_BYTE_SIZE (16U) +#define HW_SCE_AES_CCM_B_FORMAT_BYTE_SIZE (128U) +#define HW_SCE_AES_CCM_COUNTER_BYTE_SIZE (16U) + +/* For TDES operation. */ +#define HW_SCE_TDES_KEY_INDEX_WORD_SIZE (16U) +#define HW_SCE_TDES_BLOCK_BYTE_SIZE (8U) +#define HW_SCE_TDES_CBC_IV_BYTE_SIZE (8U) +#define HW_SCE_TDES_KEY_WORD_SIZE (8U) +#define HW_SCE_TDES_KEY_BYTE_SIZE (32U) + +/* For ARC4 operation. */ +#define HW_SCE_ARC4_KEY_INDEX_WORD_SIZE (72U) +#define HW_SCE_ARC4_KEY_WORD_SIZE (64U) +#define HW_SCE_ARC4_KEY_BYTE_SIZE (256U) +#define HW_SCE_ARC4_BLOCK_BYTE_SIZE (16U) + +/* For SHA operation. */ +#define HW_SCE_SHA1_HASH_LENGTH_BYTE_SIZE (20U) +#define HW_SCE_SHA256_HASH_LENGTH_BYTE_SIZE (32U) +#define HW_SCE_SHA384_HASH_LENGTH_BYTE_SIZE (48U) + +/* For MD5 operation. */ +#define HW_SCE_MD5_HASH_LENGTH_BYTE_SIZE (16U) + +/* For HMAC operation. */ +#define HW_SCE_HMAC_KEY_INDEX_BYTE_SIZE (32U) +#define HW_SCE_HMAC_KEY_INDEX_WORD_SIZE (8U) + +/* For RSA operation. */ +#define HW_SCE_RSA_1024_KEY_N_LENGTH_BYTE_SIZE (128U) +#define HW_SCE_RSA_1024_KEY_E_LENGTH_BYTE_SIZE (4U) +#define HW_SCE_RSA_1024_KEY_D_LENGTH_BYTE_SIZE (128U) +#define HW_SCE_RSA_2048_KEY_N_LENGTH_BYTE_SIZE (256U) +#define HW_SCE_RSA_2048_KEY_E_LENGTH_BYTE_SIZE (4U) +#define HW_SCE_RSA_2048_KEY_D_LENGTH_BYTE_SIZE (256U) +#define HW_SCE_RSA_3072_KEY_N_LENGTH_BYTE_SIZE (96 * 4U) +#define HW_SCE_RSA_3072_KEY_E_LENGTH_BYTE_SIZE (4U) +#define HW_SCE_RSA_3072_KEY_D_LENGTH_BYTE_SIZE (96 * 4U) +#define HW_SCE_RSA_4096_KEY_N_LENGTH_BYTE_SIZE (128 * 4U) +#define HW_SCE_RSA_4096_KEY_E_LENGTH_BYTE_SIZE (4U) +#define HW_SCE_RSA_4096_KEY_D_LENGTH_BYTE_SIZE (128 * 4U) +#define HW_SCE_RSA_1024_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_1024_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE (36U) +#define HW_SCE_RSA_1024_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_1024_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE (68U) +#define HW_SCE_RSA_2048_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_2048_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE (68U) +#define HW_SCE_RSA_2048_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_2048_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE (132U) +#define HW_SCE_RSA_3072_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_3072_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE (19U) +#define HW_SCE_RSA_3072_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_3072_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE (132U) +#define HW_SCE_RSA_4096_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_4096_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE (19U) +#define HW_SCE_RSA_4096_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE (1U) +#define HW_SCE_RSA_4096_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE (132U) +#define HW_SCE_RSA_KEY_GENERATION_DUMMY_BYTE_SIZE (12U) +#define HW_SCE_RSA1024_NE_KEY_BYTE_SIZE (144U) +#define HW_SCE_RSA1024_ND_KEY_BYTE_SIZE (256U) +#define HW_SCE_RSA2048_NE_KEY_BYTE_SIZE (272U) +#define HW_SCE_RSA2048_ND_KEY_BYTE_SIZE (512U) +#define HW_SCE_RSA3072_NE_KEY_BYTE_SIZE (96 * 4 + 16U) +#define HW_SCE_RSA3072_ND_KEY_BYTE_SIZE (192 * 4U) +#define HW_SCE_RSA4096_NE_KEY_BYTE_SIZE (128 * 4 + 16U) +#define HW_SCE_RSA4096_ND_KEY_BYTE_SIZE (256 * 4U) +#define HW_SCE_RSA1024_NE_KEY_INDEX_WORD_SIZE (73U) +#define HW_SCE_RSA1024_ND_KEY_INDEX_WORD_SIZE (101U) +#define HW_SCE_RSA2048_NE_KEY_INDEX_WORD_SIZE (137U) +#define HW_SCE_RSA2048_ND_KEY_INDEX_WORD_SIZE (197U) +#define HW_SCE_RSA3072_NE_KEY_INDEX_WORD_SIZE (137U) +#define HW_SCE_RSA3072_ND_KEY_INDEX_WORD_SIZE (197U) +#define HW_SCE_RSA4096_NE_KEY_INDEX_WORD_SIZE (137U) +#define HW_SCE_RSA4096_ND_KEY_INDEX_WORD_SIZE (197U) +#define HW_SCE_RSA1024_RANDOM_PUBLIC_KEY_INDEX_WORD_SIZE (76U) +#define HW_SCE_RSA1024_RANDOM_PRIVATE_KEY_INDEX_WORD_SIZE (104U) +#define HW_SCE_RSA2048_RANDOM_PUBLIC_KEY_INDEX_WORD_SIZE (140U) +#define HW_SCE_RSA2048_RANDOM_PRIVATE_KEY_INDEX_WORD_SIZE (200U) +//#define HW_SCE_RSA3072_RANDOM_PUBLIC_KEY_INDEX_WORD_SIZE (140U) +//#define HW_SCE_RSA3072_RANDOM_PRIVATE_KEY_INDEX_WORD_SIZE (200U) +//#define HW_SCE_RSA4096_RANDOM_PUBLIC_KEY_INDEX_WORD_SIZE (140U) +//#define HW_SCE_RSA4096_RANDOM_PRIVATE_KEY_INDEX_WORD_SIZE (200U) +#define HW_SCE_RSA_RSAES_PKCS_MIN_KEY_N_BYTE_SIZE (11U) +#define HW_SCE_RSA_1024_DATA_BYTE_SIZE (128U) +#define HW_SCE_RSA_2048_DATA_BYTE_SIZE (256U) +#define HW_SCE_RSA_3072_DATA_BYTE_SIZE (96 * 4U) +#define HW_SCE_RSA_4096_DATA_BYTE_SIZE (128 * 4U) + +/* RSA HASH type. */ +#define HW_SCE_RSA_HASH_MD5 (0x01) /* MD5 */ +#define HW_SCE_RSA_HASH_SHA1 (0x02) /* SHA-1 */ +#define HW_SCE_RSA_HASH_SHA256 (0x03) /* SHA-256 */ + +/* For ECC operation. */ +//#define HW_SCE_ECC_KEY_LENGTH_BYTE_SIZE (32U) +//#define HW_SCE_ECC_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE (4U) +//#define HW_SCE_ECC_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE (4U) +//#define HW_SCE_ECC_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE (4U) +//#define HW_SCE_ECC_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE (12U) +//#define HW_SCE_ECC_PUBLIC_KEY_BYTE_SIZE (64U) +//#define HW_SCE_ECC_P384_PUBLIC_KEY_BYTE_SIZE (96U) +//#define HW_SCE_ECC_PRIVATE_KEY_BYTE_SIZE (32U) +//#define HW_SCE_ECC_P384_PRIVATE_KEY_BYTE_SIZE (48U) +//#define HW_SCE_ECDSA_DATA_BYTE_SIZE (64U) +//#define HW_SCE_ECDSA_P384_DATA_BYTE_SIZE (96U) +//#define HW_SCE_SHARED_SECRET_KEY_INDEX_WORD_SIZE (16U) +//#define HW_SCE_ALGORITHM_ID_ENCODED_DATA_BYTE_SIZE (7U) +#define HW_SCE_ECC_KEY_LENGTH_BYTE_SIZE (112U) +#define HW_SCE_ECC_PUBLIC_KEY_MANAGEMENT_INFO_WORD_SIZE (4U) +#define HW_SCE_ECC_PRIVATE_KEY_MANAGEMENT_INFO_WORD_SIZE (20U) +#define HW_SCE_ECC_PUBLIC_KEY_BYTE_SIZE (64U) +#define HW_SCE_ECC_P384_PUBLIC_KEY_BYTE_SIZE (96U) +#define HW_SCE_ECC_PRIVATE_KEY_BYTE_SIZE (32U) +#define HW_SCE_ECC_P384_PRIVATE_KEY_BYTE_SIZE (48U) +#define HW_SCE_ECDSA_DATA_BYTE_SIZE (64U) +#define HW_SCE_ECDSA_P384_DATA_BYTE_SIZE (96U) +#define HW_SCE_SHARED_SECRET_KEY_INDEX_WORD_SIZE (16U) +#define HW_SCE_ALGORITHM_ID_ENCODED_DATA_BYTE_SIZE (7U) + +/* For KeyWrap. */ +#define HW_SCE_KEYWRAP_AES128 (0U) +#define HW_SCE_KEYWRAP_AES256 (2U) + +/* For TLS. */ +#define HW_SCE_TLS_RSA_NE_KEY_BYTE_SIZE (272U) +#define HW_SCE_TLS_RSA_NE_KEY_INDEX_WORD_SIZE (140U) +#define HW_SCE_TLS_ROOT_PUBLIC_KEY_WORD_SIZE (140U) +#define HW_SCE_TLS_P256_ECC_KEY_WORD_SIZE (16U) +#define HW_SCE_TLS_EPHEMERAL_ECDH_PUBLIC_KEY_WORD_SIZE (16U) +#define HW_SCE_TLS_MASTER_SECRET_WORD_SIZE (20U) +#define HW_SCE_TLS_GENERATE_MAC_KEY_WORD_SIZE (16U) +#define HW_SCE_TLS_GENERATE_AES128_CRYPTO_KEY_WORD_SIZE (12U) +#define HW_SCE_TLS_GENERATE_AES256_CRYPTO_KEY_WORD_SIZE (16U) +#define HW_SCE_TLS_GENERATE_VERIFY_DATA_BYTE_SIZE (12U) +#define HW_SCE_TLS_RSA_WITH_AES_128_CBC_SHA (0U) +#define HW_SCE_TLS_RSA_WITH_AES_256_CBC_SHA (1U) +#define HW_SCE_TLS_RSA_WITH_AES_128_CBC_SHA256 (2U) +#define HW_SCE_TLS_RSA_WITH_AES_256_CBC_SHA256 (3U) +#define HW_SCE_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (4U) +#define HW_SCE_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (5U) +#define HW_SCE_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (6U) +#define HW_SCE_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (7U) +#define HW_SCE_TLS_GENERATE_CLIENT_VERIFY (0U) +#define HW_SCE_TLS_GENERATE_SERVER_VERIFY (1U) +#define HW_SCE_TLS_PUBLIC_KEY_TYPE_RSA2048 (0U) +#define HW_SCE_TLS_PUBLIC_KEY_TYPE_ECDSA_P256 (2U) + +/* TLS-HMAC. */ +#define HW_SCE_TLS_HMAC_KEY_INDEX_BYTE_SIZE (64U) +#define HW_SCE_TLS_HMAC_KEY_INDEX_WORD_SIZE (16U) + +/* TLS-AES. */ +#define HW_SCE_TLS_AES128_KEY_INDEX_WORD_SIZE (12U) +#define HW_SCE_TLS_AES256_KEY_INDEX_WORD_SIZE (16U) + +/* Key update. */ +#define HW_SCE_UPDATE_KEY_RING_INDEX_WORD_SIZE (16U) + +/* Firmware update. */ +#define HW_SCE_FIRMWARE_MAC_BYTE_SIZE (16U) +#if defined BSP_MCU_RX231 || defined BSP_MCU_RX23W +#define HW_SCE_SECURE_BOOT_AREA_TOP (0xFFFF8000) +#else +#define HW_SCE_SECURE_BOOT_AREA_TOP (0xFFFF0000) +#endif /* defined BSP_MCU_RX231 || defined BSP_MCU_RX23W */ + +#define SCE_OEM_KEY_SIZE_DUMMY_INST_DATA_WORD (0) +#define SCE_OEM_KEY_SIZE_AES128_INST_DATA_WORD (8) +#define SCE_OEM_KEY_SIZE_AES192_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_AES256_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_AES128_XTS_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_AES256_XTS_INST_DATA_WORD (20) + +#define SCE_OEM_KEY_SIZE_RSA1024_PUBLICK_KEY_INST_DATA_WORD (40) +#define SCE_OEM_KEY_SIZE_RSA1024_PRIVATE_KEY_INST_DATA_WORD (68) +#define SCE_OEM_KEY_SIZE_RSA2048_PUBLICK_KEY_INST_DATA_WORD (72) +#define SCE_OEM_KEY_SIZE_RSA2048_PRIVATE_KEY_INST_DATA_WORD (132) +#define SCE_OEM_KEY_SIZE_RSA3072_PUBLICK_KEY_INST_DATA_WORD (104) +#define SCE_OEM_KEY_SIZE_RSA3072_PRIVATE_KEY_INST_DATA_WORD (196) +#define SCE_OEM_KEY_SIZE_RSA4096_PUBLICK_KEY_INST_DATA_WORD (136) +#define SCE_OEM_KEY_SIZE_RSA4096_PRIVATE_KEY_INST_DATA_WORD (260) + +#define SCE_OEM_KEY_SIZE_ECCP192_PUBLICK_KEY_INST_DATA_WORD (20) +#define SCE_OEM_KEY_SIZE_ECCP192_PRIVATE_KEY_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_ECCP224_PUBLICK_KEY_INST_DATA_WORD (20) +#define SCE_OEM_KEY_SIZE_ECCP224_PRIVATE_KEY_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_ECCP256_PUBLICK_KEY_INST_DATA_WORD (20) +#define SCE_OEM_KEY_SIZE_ECCP256_PRIVATE_KEY_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_ECCP384_PUBLICK_KEY_INST_DATA_WORD (28) +#define SCE_OEM_KEY_SIZE_ECCP384_PRIVATE_KEY_INST_DATA_WORD (16) +#define SCE_OEM_KEY_SIZE_HMAC_SHA224_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_HMAC_SHA256_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_ECCP256R1_PUBLICK_KEY_INST_DATA_WORD (20) +#define SCE_OEM_KEY_SIZE_ECCP256R1_PRIVATE_KEY_INST_DATA_WORD (12) +#define SCE_OEM_KEY_SIZE_ECCP384R1_PUBLICK_KEY_INST_DATA_WORD (28) +#define SCE_OEM_KEY_SIZE_ECCP384R1_PRIVATE_KEY_INST_DATA_WORD (16) +#define SCE_OEM_KEY_SIZE_ECCP512R1_PUBLICK_KEY_INST_DATA_WORD (36) +#define SCE_OEM_KEY_SIZE_ECCP512R1_PRIVATE_KEY_INST_DATA_WORD (20) +#define SCE_OEM_KEY_SIZE_ECCSECP256K1_PUBLICK_KEY_INST_DATA_WORD (20) +#define SCE_OEM_KEY_SIZE_ECCSECP256K1_PRIVATE_KEY_INST_DATA_WORD (12) + +/********************************************************************************************************************** + Global Typedef definitions + *********************************************************************************************************************/ +/* request type for Callback of firmware update */ +typedef enum +{ + SCE_FW_CB_REQ_PRG_WT = 0U, + SCE_FW_CB_REQ_PRG_RD, + SCE_FW_CB_REQ_BUFF_CNT, + SCE_FW_CB_REQ_PRG_WT_LAST_BLK, + SCE_FW_CB_REQ_GET_UPDATE_PRG_CHKSUM, + SCE_FW_CB_REQ_STORE_MAC, +} SCE_FW_CB_REQ_TYPE; + +/* key index type */ +typedef enum +{ + SCE_KEY_INDEX_TYPE_INVALID = 0U, + SCE_KEY_INDEX_TYPE_AES128, + SCE_KEY_INDEX_TYPE_AES256, + SCE_KEY_INDEX_TYPE_TDES, + SCE_KEY_INDEX_TYPE_HMAC_SHA1, + SCE_KEY_INDEX_TYPE_HMAC_SHA256, + SCE_KEY_INDEX_TYPE_RSA1024_PUBLIC, + SCE_KEY_INDEX_TYPE_RSA1024_PRIVATE, + SCE_KEY_INDEX_TYPE_RSA2048_PUBLIC, + SCE_KEY_INDEX_TYPE_RSA2048_PRIVATE, + SCE_KEY_INDEX_TYPE_RSA3072_PUBLIC, + SCE_KEY_INDEX_TYPE_RSA3072_PRIVATE, + SCE_KEY_INDEX_TYPE_RSA4096_PUBLIC, + SCE_KEY_INDEX_TYPE_RSA4096_PRIVATE, + SCE_KEY_INDEX_TYPE_AES128_FOR_TLS, + SCE_KEY_INDEX_TYPE_AES256_FOR_TLS, + SCE_KEY_INDEX_TYPE_HMAC_SHA1_FOR_TLS, + SCE_KEY_INDEX_TYPE_HMAC_SHA256_FOR_TLS, + SCE_KEY_INDEX_TYPE_UPDATE_KEY_RING, + SCE_KEY_INDEX_TYPE_TLS_CA_CERTIFICATION_PUBLIC_KEY, + SCE_KEY_INDEX_TYPE_TLS_P256_ECC_KEY, + SCE_KEY_INDEX_TYPE_ECC_P192_PUBLIC, + SCE_KEY_INDEX_TYPE_ECC_P224_PUBLIC, + SCE_KEY_INDEX_TYPE_ECC_P256_PUBLIC, + SCE_KEY_INDEX_TYPE_ECC_P384_PUBLIC, + SCE_KEY_INDEX_TYPE_ECC_P192_PRIVATE, + SCE_KEY_INDEX_TYPE_ECC_P224_PRIVATE, + SCE_KEY_INDEX_TYPE_ECC_P256_PRIVATE, + SCE_KEY_INDEX_TYPE_ECC_P384_PRIVATE, + SCE_KEY_INDEX_TYPE_ECC_ESCP256K1_PUBLIC, + SCE_KEY_INDEX_TYPE_ECC_ESCP256K1_PRIVATE, + SCE_KEY_INDEX_TYPE_ECDH_SHARED_SECRET, + SCE_KEY_INDEX_TYPE_AES128_GCM_FOR_DLMS_COSEM, + SCE_KEY_INDEX_TYPE_AES128_KEY_WRAP_FOR_DLMS_COSEM, +} SCE_KEY_INDEX_TYPE; + +// added for RA6M4 start +/* LIFE CYCLE */ +typedef enum +{ + SCE_CM1 = 0, + SCE_CM2, + SCE_SSD, + SCE_NSECSD, + SCE_DPL, + SCE_LCK_DBG, + SCE_LCK_BOOT, + SCE_RMA_REQ, + SCE_RMA_ACK, +} lifecycle_t; + +/* OEM Command */ +typedef enum e_sce_oem_cmd +{ + SCE_OEM_CMD_AES128 = 5, + SCE_OEM_CMD_AES192, + SCE_OEM_CMD_AES256, + SCE_OEM_CMD_AES128_XTS, + SCE_OEM_CMD_AES256_XTS, + SCE_OEM_CMD_RSA1024_PUBLIC, + SCE_OEM_CMD_RSA1024_PRIVATE, + SCE_OEM_CMD_RSA2048_PUBLIC, + SCE_OEM_CMD_RSA2048_PRIVATE, + SCE_OEM_CMD_RSA3072_PUBLIC, + SCE_OEM_CMD_RSA3072_PRIVATE, + SCE_OEM_CMD_RSA4096_PUBLIC, + SCE_OEM_CMD_RSA4096_PRIVATE, + SCE_OEM_CMD_ECC_P192_PUBLIC, + SCE_OEM_CMD_ECC_P192_PRIVATE, + SCE_OEM_CMD_ECC_P224_PUBLIC, + SCE_OEM_CMD_ECC_P224_PRIVATE, + SCE_OEM_CMD_ECC_P256_PUBLIC, + SCE_OEM_CMD_ECC_P256_PRIVATE, + SCE_OEM_CMD_ECC_P384_PUBLIC, + SCE_OEM_CMD_ECC_P384_PRIVATE, + SCE_OEM_CMD_HMAC_SHA224, + SCE_OEM_CMD_HMAC_SHA256, + SCE_OEM_CMD_ECC_P256R1_PUBLIC, + SCE_OEM_CMD_ECC_P256R1_PRIVATE, + SCE_OEM_CMD_ECC_P384R1_PUBLIC, + SCE_OEM_CMD_ECC_P384R1_PRIVATE, + SCE_OEM_CMD_ECC_P512R1_PUBLIC, + SCE_OEM_CMD_ECC_P512R1_PRIVATE, + SCE_OEM_CMD_ECC_SECP256K1_PUBLIC, + SCE_OEM_CMD_ECC_SECP256K1_PRIVATE, + SCE_OEM_CMD_NUM +} sce_oem_cmd_t; + +// added for RA6M4 end + +/* Byte data structure */ +typedef struct sce_byte_data +{ + uint8_t *pdata; + uint32_t data_length; + uint32_t data_type; +} sce_byte_data_t; + +/* RSA byte data structure */ +typedef sce_byte_data_t sce_rsa_byte_data_t; + +/* ECDSA byte data structure */ +typedef sce_byte_data_t sce_ecdsa_byte_data_t; + +/* AES key index data structure */ +typedef struct sce_aes_key_index +{ + uint32_t type; + /* AES128, AES256, AES128 for TLS, AES256 for TLS are supported */ + uint32_t value[HW_SCE_TLS_AES256_KEY_INDEX_WORD_SIZE]; +} sce_aes_key_index_t; + +/* TDES key index data structure */ +typedef struct sce_tdes_key_index +{ + uint32_t type; + uint32_t value[HW_SCE_TDES_KEY_INDEX_WORD_SIZE]; /* DES/TDES are supported */ +} sce_tdes_key_index_t; + +/* HMAC-SHA key index data structure */ +typedef struct sce_hmac_sha_key_index +{ + uint32_t type; + /* HMAC-SHA1, HMAC-SHA256, HMAC-SHA for TLS, HMAC-SHA256 for TLS are supported */ + uint32_t value[HW_SCE_TLS_HMAC_KEY_INDEX_WORD_SIZE]; +} sce_hmac_sha_key_index_t; + +/* RSA 1024bit public key index data structure */ +typedef struct sce_rsa1024_public_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_1024_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_1024_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t key_e[HW_SCE_RSA_1024_KEY_E_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t dummy[HW_SCE_RSA_KEY_GENERATION_DUMMY_BYTE_SIZE]; /* dummy data */ + uint32_t key_management_info2[HW_SCE_RSA_1024_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa1024_public_key_index_t; + +/* RSA 1024bit private key index data structure */ +typedef struct sce_rsa1024_private_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_1024_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_1024_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint32_t key_management_info2[HW_SCE_RSA_1024_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa1024_private_key_index_t; + +/* RSA 2048bit public key index data structure */ +typedef struct sce_rsa2048_public_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_2048_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_2048_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t key_e[HW_SCE_RSA_2048_KEY_E_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t dummy[HW_SCE_RSA_KEY_GENERATION_DUMMY_BYTE_SIZE]; /* dummy data */ + uint32_t key_management_info2[HW_SCE_RSA_2048_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa2048_public_key_index_t; + +/* RSA 2048bit private key index data structure */ +typedef struct sce_rsa2048_private_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_2048_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_2048_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint32_t key_management_info2[HW_SCE_RSA_2048_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa2048_private_key_index_t; + +/* RSA 3072bit public key index data structure */ +typedef struct sce_rsa3072_public_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_3072_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_3072_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t key_e[HW_SCE_RSA_3072_KEY_E_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t dummy[HW_SCE_RSA_KEY_GENERATION_DUMMY_BYTE_SIZE]; /* dummy data */ + uint32_t key_management_info2[HW_SCE_RSA_3072_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa3072_public_key_index_t; + +/* RSA 3072bit private key index data structure */ +typedef struct sce_rsa3072_private_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_3072_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_3072_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint32_t key_management_info2[HW_SCE_RSA_3072_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa3072_private_key_index_t; + +/* RSA 4096bit public key index data structure */ +typedef struct sce_rsa4096_public_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_4096_PUBLIC_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_4096_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t key_e[HW_SCE_RSA_4096_KEY_E_LENGTH_BYTE_SIZE]; /* plaintext */ + uint8_t dummy[HW_SCE_RSA_KEY_GENERATION_DUMMY_BYTE_SIZE]; /* dummy data */ + uint32_t key_management_info2[HW_SCE_RSA_4096_PUBLIC_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa4096_public_key_index_t; + +/* RSA 4096bit private key index data structure */ +typedef struct sce_rsa4096_private_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info1[HW_SCE_RSA_4096_PRIVATE_KEY_MANAGEMENT_INFO1_WORD_SIZE]; + uint8_t key_n[HW_SCE_RSA_4096_KEY_N_LENGTH_BYTE_SIZE]; /* plaintext */ + uint32_t key_management_info2[HW_SCE_RSA_4096_PRIVATE_KEY_MANAGEMENT_INFO2_WORD_SIZE]; + } + value; +} sce_rsa4096_private_key_index_t; + +/* RSA 1024bit key index pair structure */ +typedef struct sce_rsa1024_key_pair_index +{ + sce_rsa1024_private_key_index_t private; + sce_rsa1024_public_key_index_t public; +} sce_rsa1024_key_pair_index_t; + +/* RSA 2048bit key index pair structure */ +typedef struct sce_rsa2048_key_pair_index +{ + sce_rsa2048_private_key_index_t private; + sce_rsa2048_public_key_index_t public; +} sce_rsa2048_key_pair_index_t; + +/* RSA 3072bit key index pair structure */ +typedef struct sce_rsa3072_key_pair_index +{ + sce_rsa3072_private_key_index_t private; + sce_rsa3072_public_key_index_t public; +} sce_rsa3072_key_pair_index_t; + +/* RSA 4096bit key index pair structure */ +typedef struct sce_rsa4096_key_pair_index +{ + sce_rsa4096_private_key_index_t private; + sce_rsa4096_public_key_index_t public; +} sce_rsa4096_key_pair_index_t; + +/* ECC P-192/224/256 public key index data structure */ +typedef struct sce_ecc_public_key_index +{ + uint32_t type; + struct + { + uint32_t key_management_info[HW_SCE_ECC_PUBLIC_KEY_MANAGEMENT_INFO_WORD_SIZE]; + uint8_t key_q[HW_SCE_ECC_KEY_LENGTH_BYTE_SIZE]; + } + value; +} sce_ecc_public_key_index_t; + +/* ECC P-192/224/256 private key index data structure */ +typedef struct sce_ecc_private_key_index +{ + uint32_t type; + uint32_t value[HW_SCE_ECC_PRIVATE_KEY_MANAGEMENT_INFO_WORD_SIZE]; +} sce_ecc_private_key_index_t; + +/* ECC P-192/224/256 key index pair structure */ +typedef struct sce_ecc_key_pair_index +{ + sce_ecc_private_key_index_t private; + sce_ecc_public_key_index_t public; +} sce_ecc_key_pair_index_t; + +/* ECDH key index data structure */ +typedef struct sce_ecdh_key_index +{ + uint32_t type; + uint32_t value[HW_SCE_SHARED_SECRET_KEY_INDEX_WORD_SIZE]; +} sce_ecdh_key_index_t; + +/* TLS CA certification public key index data structure */ +typedef struct sce_tls_ca_certification_public_key_index +{ + uint32_t type; + uint32_t value[HW_SCE_TLS_ROOT_PUBLIC_KEY_WORD_SIZE]; +} sce_tls_ca_certification_public_key_index_t; + +/* TLS P-256 ECC key index data structure */ +typedef struct sce_tls_p256_ecc_key_index +{ + uint32_t type; + uint32_t value[HW_SCE_TLS_P256_ECC_KEY_WORD_SIZE]; +} sce_tls_p256_ecc_key_index_t; + +/* Update key ring index data structure */ +typedef struct sce_update_key_ring +{ + uint32_t type; + uint32_t value[HW_SCE_UPDATE_KEY_RING_INDEX_WORD_SIZE]; +} sce_update_key_ring_t; + + +/* The work area for AES */ +typedef struct sce_aes_handle +{ + uint32_t id; + sce_aes_key_index_t key_index; + uint32_t current_input_data_size; + uint8_t last_1_block_as_fraction[HW_SCE_AES_BLOCK_BYTE_SIZE]; + uint8_t current_ivec[HW_SCE_AES_CBC_IV_BYTE_SIZE]; + uint8_t flag_call_init; +} sce_aes_handle_t; + +/* The work area for TDES */ +typedef struct sce_tdes_handle +{ + uint32_t id; + sce_tdes_key_index_t key_index; + uint32_t current_input_data_size; + uint8_t last_1_block_as_fraction[HW_SCE_TDES_BLOCK_BYTE_SIZE]; + uint8_t current_ivec[HW_SCE_TDES_CBC_IV_BYTE_SIZE*2]; + uint8_t flag_call_init; +} sce_tdes_handle_t; + +/* The work area for MD5 */ +typedef struct sce_sha_md5_handle +{ + uint32_t id; + uint8_t sha_buffer[HW_SCE_SHA256_HASH_LENGTH_BYTE_SIZE * 4]; + uint32_t all_received_length; + uint32_t buffering_length; + /* SHA1(20byte), SHA256(32byte), MD5(16byte) are supported */ + uint8_t current_hash[HW_SCE_SHA256_HASH_LENGTH_BYTE_SIZE]; + uint8_t flag_call_init; +} sce_sha_md5_handle_t; + +/* The work area for HMAC-SHA */ +typedef struct sce_hmac_sha_handle +{ + uint32_t id; + sce_hmac_sha_key_index_t key_index; + uint8_t hmac_buffer[HW_SCE_SHA256_HASH_LENGTH_BYTE_SIZE * 4]; + uint32_t all_received_length; + uint32_t buffering_length; + uint8_t flag_call_init; +} sce_hmac_sha_handle_t; + +/* The work area for CMAC */ +typedef struct sce_cmac_handle +{ + uint32_t id; + sce_aes_key_index_t key_index; + uint8_t cmac_buffer[HW_SCE_AES_BLOCK_BYTE_SIZE]; + uint32_t all_received_length; + uint32_t buffering_length; + uint8_t flag_call_init; +} sce_cmac_handle_t; + +/* The work area for GCM */ +typedef struct sce_gcm_handle +{ + uint32_t id; + sce_aes_key_index_t key_index; + uint8_t gcm_buffer[HW_SCE_AES_BLOCK_BYTE_SIZE]; + uint8_t gcm_aad_buffer[HW_SCE_AES_GCM_AAD_BLOCK_BYTE_SIZE]; + uint32_t all_received_length; + uint32_t all_received_aad_length; + uint32_t buffering_length; + uint32_t buffering_aad_length; + uint8_t flag_call_init; + uint8_t flag_update_input_data; +} sce_gcm_handle_t; + +/* The work area for CCM */ +typedef struct sce_ccm_handle +{ + uint32_t id; + sce_aes_key_index_t key_index; + uint8_t formatted_data[HW_SCE_AES_CCM_B_FORMAT_BYTE_SIZE]; + uint8_t counter[HW_SCE_AES_CCM_COUNTER_BYTE_SIZE]; + uint8_t ccm_buffer[HW_SCE_AES_BLOCK_BYTE_SIZE]; + uint32_t all_received_length; + uint32_t buffering_length; + uint8_t flag_call_init; +} sce_ccm_handle_t; + +/* The work area for ECDH */ +typedef struct sce_ecdh_handle +{ + uint32_t id; + uint32_t flag_use_key_id; + uint32_t key_id; + uint32_t key_type; + uint8_t flag_call_init; + uint8_t flag_call_make_public; + uint8_t flag_call_read_public; + uint8_t flag_call_shared_secret; +} sce_ecdh_handle_t; + +/* The work area for firmware update */ +typedef struct sce_firmware_generate_mac_resume_handle +{ + uint32_t iLoop; + uint32_t counter; + uint32_t previous_counter; + bool use_resume_flag; +} sce_firmware_generate_mac_resume_handle_t; + +/* The callback function pointer type for HW_SCE_GenerateFirmwareMAC */ +typedef void (*SCE_GEN_MAC_CB_FUNC_T) (SCE_FW_CB_REQ_TYPE req_type, uint32_t iLoop, uint32_t *counter, + uint32_t *InData_UpProgram, uint32_t *OutData_Program, uint32_t MAX_CNT); + +/********************************************************************************************************************** + External global variables + *********************************************************************************************************************/ + +/********************************************************************************************************************** + Exported global functions + *********************************************************************************************************************/ +fsp_err_t HW_SCE_Open(lifecycle_t lifecycle, sce_tls_ca_certification_public_key_index_t *key_index_1, + sce_update_key_ring_t *key_index_2); +fsp_err_t HW_SCE_Close(void); +void HW_SCE_SoftwareReset(void); + +// added for RA6M4 start +fsp_err_t HW_SCE_FwIntegrityCheck(void); +fsp_err_t HW_SCE_UpdateOemKeyIndex(lifecycle_t lifecycle, sce_oem_cmd_t key_type, uint8_t *iv, uint8_t *encrypted_oem_key, uint32_t *key_index); + +// added for RA6M4 end + +fsp_err_t HW_SCE_GenerateAes128KeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, uint8_t *encrypted_key, + sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateAes256KeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, uint8_t *encrypted_key, + sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateTdesKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, uint8_t *encrypted_key, + sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa1024PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa1024_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa1024PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa1024_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa2048PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa2048_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa2048PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa2048_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa3072PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa3072_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa3072PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa3072_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa4096PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa4096_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa4096PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_rsa4096_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateTlsRsaPublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_tls_ca_certification_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP192PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP224PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP256PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP384PublicKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP192PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP224PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP256PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP384PrivateKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateSha1HmacKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateSha256HmacKeyIndex(uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateTlsP256EccKeyIndex(sce_tls_p256_ecc_key_index_t *tls_p256_ecc_key_index, + uint8_t *ephemeral_ecdh_public_key); +fsp_err_t HW_SCE_GenerateAes128RandomKeyIndex(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateAes256RandomKeyIndex(sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa1024RandomKeyIndex(sce_rsa1024_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateRsa2048RandomKeyIndex(sce_rsa2048_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateRsa3072RandomKeyIndex(sce_rsa3072_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateRsa4096RandomKeyIndex(sce_rsa4096_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateTdesRandomKeyIndex(sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP192RandomKeyIndex(uint32_t *indata_curvetype, sce_ecc_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateEccP224RandomKeyIndex(uint32_t *indata_curvetype, sce_ecc_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateEccP256RandomKeyIndex(uint32_t *indata_curvetype, sce_ecc_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateEccP384RandomKeyIndex(uint32_t *indata_curvetype, sce_ecc_key_pair_index_t *key_pair_index); +fsp_err_t HW_SCE_GenerateRandomNumber(uint32_t *random); +fsp_err_t HW_SCE_GenerateUpdateKeyRingKeyIndex(lifecycle_t lifecycle, uint8_t *encrypted_provisioning_key, uint8_t *iv, + uint8_t *encrypted_key, sce_update_key_ring_t *key_index); +uint32_t HW_SCE_GetVersion(void); + +fsp_err_t HW_SCE_GenerateAes128PlainKeyIndex(uint8_t *plain_key, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateAes256PlainKeyIndex(uint8_t *plain_key, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa2048PublicPlainKeyIndex(uint8_t *plain_key, sce_rsa2048_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa2048PrivatePlainKeyIndex(uint8_t *plain_key, sce_rsa2048_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa3072PublicPlainKeyIndex(uint8_t *plain_key, sce_rsa3072_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa3072PrivatePlainKeyIndex(uint8_t *plain_key, sce_rsa3072_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa4096PublicPlainKeyIndex(uint8_t *plain_key, sce_rsa4096_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateRsa4096PrivatePlainKeyIndex(uint8_t *plain_key, sce_rsa4096_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP224PublicPlainKeyIndex(uint8_t *plain_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP256PublicPlainKeyIndex(uint8_t *plain_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP384PublicPlainKeyIndex(uint8_t *plain_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP224PrivatePlainKeyIndex(uint8_t *plain_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP256PrivatePlainKeyIndex(uint8_t *plain_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccP384PrivatePlainKeyIndex(uint8_t *plain_key, sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateSha256HmacPlainKeyIndex(uint8_t *plain_key, sce_hmac_sha_key_index_t *key_index); + +fsp_err_t HW_SCE_GenerateEccSecp256k1PublicPlainKeyIndex(uint8_t *plain_key, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_GenerateEccSecp256k1PrivatePlainKeyIndex(uint8_t *plain_key, sce_ecc_private_key_index_t *key_index); + +fsp_err_t HW_SCE_UpdateAes128KeyIndex(lifecycle_t lifecycle, uint8_t *iv, uint8_t *encrypted_key, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateAes256KeyIndex(lifecycle_t lifecycle, uint8_t *iv, uint8_t *encrypted_key, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateTdesKeyIndex(uint8_t *iv, uint8_t *encrypted_key, sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa1024PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa1024_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa1024PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa1024_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa2048PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa2048_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa2048PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa2048_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa3072PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa3072_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa3072PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa3072_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa4096PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa4096_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateRsa4096PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_rsa4096_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateTlsRsaPublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_tls_ca_certification_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP192PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP224PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP256PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP384PublicKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP192PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP224PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP256PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateEccP384PrivateKeyIndex(uint8_t *iv, uint8_t *encrypted_key, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_Ecc256ScalarMultiplication(uint32_t *InData_CurveType, uint32_t *InData_Cmd, + uint32_t *InData_KeyIndex, uint32_t *InData_PubKey, uint32_t *OutData_R); +fsp_err_t HW_SCE_Ecc384ScalarMultiplication(uint32_t *InData_CurveType, + uint32_t *InData_KeyIndex, uint32_t *InData_PubKey, uint32_t *OutData_R); +fsp_err_t HW_SCE_UpdateSha1HmacKeyIndex(uint8_t *iv, uint8_t *encrypted_key, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_UpdateSha256HmacKeyIndex(uint8_t *iv, uint8_t *encrypted_key, sce_hmac_sha_key_index_t *key_index); + +fsp_err_t HW_SCE_StartUpdateFirmware(void); +fsp_err_t HW_SCE_GenerateFirmwareMAC(uint32_t *InData_KeyIndex, uint32_t *InData_SessionKey, + uint32_t *InData_UpProgram, uint32_t *InData_IV, uint32_t *OutData_Program, uint32_t MAX_CNT, + SCE_GEN_MAC_CB_FUNC_T p_callback, + sce_firmware_generate_mac_resume_handle_t *sce_firmware_generate_mac_resume_handle); +fsp_err_t HW_SCE_VerifyFirmwareMAC(uint32_t *InData_Program, uint32_t MAX_CNT, uint32_t *InData_MAC); + +fsp_err_t HW_SCE_Aes128EcbEncryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128EcbEncryptUpdate(sce_aes_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_Aes128EcbEncryptFinal(sce_aes_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length); +fsp_err_t HW_SCE_Aes128EcbDecryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128EcbDecryptUpdate(sce_aes_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_Aes128EcbDecryptFinal(sce_aes_handle_t *handle, uint8_t *plain, uint32_t *plain_length); +fsp_err_t HW_SCE_Aes128CbcEncryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec); +fsp_err_t HW_SCE_Aes128CbcEncryptUpdate(sce_aes_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_Aes128CbcEncryptFinal(sce_aes_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length); +fsp_err_t HW_SCE_Aes128CbcDecryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec); +fsp_err_t HW_SCE_Aes128CbcDecryptUpdate(sce_aes_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_Aes128CbcDecryptFinal(sce_aes_handle_t *handle, uint8_t *plain, uint32_t *plain_length); + +fsp_err_t HW_SCE_Aes256EcbEncryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256EcbEncryptUpdate(sce_aes_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_Aes256EcbEncryptFinal(sce_aes_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length); +fsp_err_t HW_SCE_Aes256EcbDecryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256EcbDecryptUpdate(sce_aes_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_Aes256EcbDecryptFinal(sce_aes_handle_t *handle, uint8_t *plain, uint32_t *plain_length); +fsp_err_t HW_SCE_Aes256CbcEncryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec); +fsp_err_t HW_SCE_Aes256CbcEncryptUpdate(sce_aes_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_Aes256CbcEncryptFinal(sce_aes_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length); +fsp_err_t HW_SCE_Aes256CbcDecryptInit(sce_aes_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec); +fsp_err_t HW_SCE_Aes256CbcDecryptUpdate(sce_aes_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_Aes256CbcDecryptFinal(sce_aes_handle_t *handle, uint8_t *plain, uint32_t *plain_length); + +fsp_err_t HW_SCE_Aes128GcmEncryptInit(sce_gcm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec, + uint32_t ivec_len); +fsp_err_t HW_SCE_Aes128GcmEncryptUpdate(sce_gcm_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_data_len, uint8_t *aad, uint32_t aad_len); +fsp_err_t HW_SCE_Aes128GcmEncryptFinal(sce_gcm_handle_t *handle, uint8_t *cipher, uint32_t *cipher_data_len, + uint8_t *atag); +fsp_err_t HW_SCE_Aes128GcmDecryptInit(sce_gcm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec, + uint32_t ivec_len); +fsp_err_t HW_SCE_Aes128GcmDecryptUpdate(sce_gcm_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_data_len, uint8_t *aad, uint32_t aad_len); +fsp_err_t HW_SCE_Aes128GcmDecryptFinal(sce_gcm_handle_t *handle, uint8_t *plain, uint32_t *plain_data_len, + uint8_t *atag, uint32_t atag_len); +fsp_err_t HW_SCE_Aes256GcmEncryptInit(sce_gcm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec, + uint32_t ivec_len); +fsp_err_t HW_SCE_Aes256GcmEncryptUpdate(sce_gcm_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_data_len, uint8_t *aad, uint32_t aad_len); +fsp_err_t HW_SCE_Aes256GcmEncryptFinal(sce_gcm_handle_t *handle, uint8_t *cipher, uint32_t *cipher_data_len, + uint8_t *atag); +fsp_err_t HW_SCE_Aes256GcmDecryptInit(sce_gcm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *ivec, + uint32_t ivec_len); +fsp_err_t HW_SCE_Aes256GcmDecryptUpdate(sce_gcm_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_data_len, uint8_t *aad, uint32_t aad_len); +fsp_err_t HW_SCE_Aes256GcmDecryptFinal(sce_gcm_handle_t *handle, uint8_t *plain, uint32_t *plain_data_len, + uint8_t *atag, uint32_t atag_len); + +fsp_err_t HW_SCE_Aes128CcmEncryptInit(sce_ccm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *nonce, + uint32_t nonce_len, uint8_t *adata, uint8_t a_len, uint32_t payload_len, uint32_t mac_len); +fsp_err_t HW_SCE_Aes128CcmEncryptUpdate(sce_ccm_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_Aes128CcmEncryptFinal(sce_ccm_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length, + uint8_t *mac, uint32_t mac_length); +fsp_err_t HW_SCE_Aes128CcmDecryptInit(sce_ccm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *nonce, + uint32_t nonce_len, uint8_t *adata, uint8_t a_len, uint32_t payload_len, uint32_t mac_len); +fsp_err_t HW_SCE_Aes128CcmDecryptUpdate(sce_ccm_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_Aes128CcmDecryptFinal(sce_ccm_handle_t *handle, uint8_t *plain, uint32_t *plain_length, + uint8_t *mac, uint32_t mac_length); +fsp_err_t HW_SCE_Aes256CcmEncryptInit(sce_ccm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *nonce, + uint32_t nonce_len, uint8_t *adata, uint8_t a_len, uint32_t payload_len, uint32_t mac_len); +fsp_err_t HW_SCE_Aes256CcmEncryptUpdate(sce_ccm_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_Aes256CcmEncryptFinal(sce_ccm_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length, + uint8_t *mac, uint32_t mac_length); +fsp_err_t HW_SCE_Aes256CcmDecryptInit(sce_ccm_handle_t *handle, sce_aes_key_index_t *key_index, uint8_t *nonce, + uint32_t nonce_len, uint8_t *adata, uint8_t a_len, uint32_t payload_len, uint32_t mac_len); +fsp_err_t HW_SCE_Aes256CcmDecryptUpdate(sce_ccm_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_Aes256CcmDecryptFinal(sce_ccm_handle_t *handle, uint8_t *plain, uint32_t *plain_length, + uint8_t *mac, uint32_t mac_length); + +fsp_err_t HW_SCE_Aes128CmacGenerateInit(sce_cmac_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128CmacGenerateUpdate(sce_cmac_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Aes128CmacGenerateFinal(sce_cmac_handle_t *handle, uint8_t *mac); +fsp_err_t HW_SCE_Aes128CmacVerifyInit(sce_cmac_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes128CmacVerifyUpdate(sce_cmac_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Aes128CmacVerifyFinal(sce_cmac_handle_t *handle, uint8_t *mac, uint32_t mac_length); +fsp_err_t HW_SCE_Aes256CmacGenerateInit(sce_cmac_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256CmacGenerateUpdate(sce_cmac_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Aes256CmacGenerateFinal(sce_cmac_handle_t *handle, uint8_t *mac); +fsp_err_t HW_SCE_Aes256CmacVerifyInit(sce_cmac_handle_t *handle, sce_aes_key_index_t *key_index); +fsp_err_t HW_SCE_Aes256CmacVerifyUpdate(sce_cmac_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Aes256CmacVerifyFinal(sce_cmac_handle_t *handle, uint8_t *mac, uint32_t mac_length); + +fsp_err_t HW_SCE_TdesEcbEncryptInit(sce_tdes_handle_t *handle, sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_TdesEcbEncryptUpdate(sce_tdes_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_TdesEcbEncryptFinal(sce_tdes_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length); +fsp_err_t HW_SCE_TdesEcbDecryptInit(sce_tdes_handle_t *handle, sce_tdes_key_index_t *key_index); +fsp_err_t HW_SCE_TdesEcbDecryptUpdate(sce_tdes_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_TdesEcbDecryptFinal(sce_tdes_handle_t *handle, uint8_t *plain, uint32_t *plain_length); +fsp_err_t HW_SCE_TdesCbcEncryptInit(sce_tdes_handle_t *handle, sce_tdes_key_index_t *key_index, uint8_t *ivec); +fsp_err_t HW_SCE_TdesCbcEncryptUpdate(sce_tdes_handle_t *handle, uint8_t *plain, uint8_t *cipher, + uint32_t plain_length); +fsp_err_t HW_SCE_TdesCbcEncryptFinal(sce_tdes_handle_t *handle, uint8_t *cipher, uint32_t *cipher_length); +fsp_err_t HW_SCE_TdesCbcDecryptInit(sce_tdes_handle_t *handle, sce_tdes_key_index_t *key_index, uint8_t *ivec); +fsp_err_t HW_SCE_TdesCbcDecryptUpdate(sce_tdes_handle_t *handle, uint8_t *cipher, uint8_t *plain, + uint32_t cipher_length); +fsp_err_t HW_SCE_TdesCbcDecryptFinal(sce_tdes_handle_t *handle, uint8_t *plain, uint32_t *plain_length); + +fsp_err_t HW_SCE_Md5Init(sce_sha_md5_handle_t *handle); +fsp_err_t HW_SCE_Md5Update(sce_sha_md5_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Md5Final(sce_sha_md5_handle_t *handle, uint8_t *digest, uint32_t *digest_length); + +fsp_err_t HW_SCE_Sha1Init(sce_sha_md5_handle_t *handle); +fsp_err_t HW_SCE_Sha1Update(sce_sha_md5_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Sha1Final(sce_sha_md5_handle_t *handle, uint8_t *digest, uint32_t *digest_length); +fsp_err_t HW_SCE_Sha256Init(sce_sha_md5_handle_t *handle); +fsp_err_t HW_SCE_Sha256Update(sce_sha_md5_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Sha256Final(sce_sha_md5_handle_t *handle, uint8_t *digest, uint32_t *digest_length); + +fsp_err_t HW_SCE_Sha1HmacGenerateInit(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha1HmacGenerateUpdate(sce_hmac_sha_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Sha1HmacGenerateFinal(sce_hmac_sha_handle_t *handle, uint8_t *mac); +fsp_err_t HW_SCE_Sha256HmacGenerateInit(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha256HmacGenerateUpdate(sce_hmac_sha_handle_t *handle, uint8_t *message, + uint32_t message_length); +fsp_err_t HW_SCE_Sha256HmacGenerateFinal(sce_hmac_sha_handle_t *handle, uint8_t *mac); +fsp_err_t HW_SCE_Sha1HmacVerifyInit(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha1HmacVerifyUpdate(sce_hmac_sha_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Sha1HmacVerifyFinal(sce_hmac_sha_handle_t *handle, uint8_t *mac, uint32_t mac_length); +fsp_err_t HW_SCE_Sha256HmacVerifyInit(sce_hmac_sha_handle_t *handle, sce_hmac_sha_key_index_t *key_index); +fsp_err_t HW_SCE_Sha256HmacVerifyUpdate(sce_hmac_sha_handle_t *handle, uint8_t *message, uint32_t message_length); +fsp_err_t HW_SCE_Sha256HmacVerifyFinal(sce_hmac_sha_handle_t *handle, uint8_t *mac, uint32_t mac_length); + +fsp_err_t HW_SCE_RsassaPkcs1024SignatureGenerate(sce_rsa_byte_data_t *message_hash, + sce_rsa_byte_data_t *signature, sce_rsa1024_private_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs1024SignatureVerification(sce_rsa_byte_data_t *signature, + sce_rsa_byte_data_t *message_hash, sce_rsa1024_public_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs2048SignatureGenerate(sce_rsa_byte_data_t *message_hash, + sce_rsa_byte_data_t *signature, sce_rsa2048_private_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs2048SignatureVerification(sce_rsa_byte_data_t *signature, + sce_rsa_byte_data_t *message_hash, sce_rsa2048_public_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs3072SignatureGenerate(sce_rsa_byte_data_t *message_hash, + sce_rsa_byte_data_t *signature, sce_rsa3072_private_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs3072SignatureVerification(sce_rsa_byte_data_t *signature, + sce_rsa_byte_data_t *message_hash, sce_rsa3072_public_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs4096SignatureGenerate(sce_rsa_byte_data_t *message_hash, + sce_rsa_byte_data_t *signature, sce_rsa4096_private_key_index_t *key_index, uint8_t hash_type); +fsp_err_t HW_SCE_RsassaPkcs4096SignatureVerification(sce_rsa_byte_data_t *signature, + sce_rsa_byte_data_t *message_hash, sce_rsa4096_public_key_index_t *key_index, uint8_t hash_type); + +fsp_err_t HW_SCE_RsaesPkcs1024Encrypt(sce_rsa_byte_data_t *plain, sce_rsa_byte_data_t *cipher, + sce_rsa1024_public_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs1024Decrypt(sce_rsa_byte_data_t *cipher, sce_rsa_byte_data_t *plain, + sce_rsa1024_private_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs2048Encrypt(sce_rsa_byte_data_t *plain, sce_rsa_byte_data_t *cipher, + sce_rsa2048_public_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs2048Decrypt(sce_rsa_byte_data_t *cipher, sce_rsa_byte_data_t *plain, + sce_rsa2048_private_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs3072Encrypt(sce_rsa_byte_data_t *plain, sce_rsa_byte_data_t *cipher, + sce_rsa3072_public_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs3072Decrypt(sce_rsa_byte_data_t *cipher, sce_rsa_byte_data_t *plain, + sce_rsa3072_private_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs4096Encrypt(sce_rsa_byte_data_t *plain, sce_rsa_byte_data_t *cipher, + sce_rsa4096_public_key_index_t *key_index); +fsp_err_t HW_SCE_RsaesPkcs4096Decrypt(sce_rsa_byte_data_t *cipher, sce_rsa_byte_data_t *plain, + sce_rsa4096_private_key_index_t *key_index); + +fsp_err_t HW_SCE_TlsRootCertificateVerification(uint32_t public_key_type, uint8_t *certificate, + uint32_t certificate_length, uint32_t public_key_n_start_position, uint32_t public_key_n_end_position, + uint32_t public_key_e_start_position, uint32_t public_key_e_end_position, uint8_t *signature, + uint32_t *encrypted_root_public_key); +fsp_err_t HW_SCE_TlsCertificateVerification(uint32_t public_key_type, uint32_t *encrypted_input_public_key, + uint8_t *certificate, uint32_t certificate_length, uint8_t *signature, uint32_t public_key_n_start_position, + uint32_t public_key_n_end_position, uint32_t public_key_e_start_position, uint32_t public_key_e_end_position, + uint32_t *encrypted_output_public_key); +fsp_err_t HW_SCE_TlsGeneratePreMasterSecret(uint32_t *sce_pre_master_secret); +fsp_err_t HW_SCE_TlsGenerateMasterSecret(uint32_t select_cipher_suite, uint32_t *sce_pre_master_secret, + uint8_t *client_random, uint8_t *server_random, uint32_t *sce_master_secret); +fsp_err_t HW_SCE_TlsEncryptPreMasterSecretWithRsa2048PublicKey(uint32_t *encrypted_public_key, + uint32_t *sce_pre_master_secret, uint8_t *encrypted_pre_master_secret); +fsp_err_t HW_SCE_TlsGenerateSessionKey(uint32_t select_cipher_suite, uint32_t *sce_master_secret, + uint8_t *client_random, uint8_t *server_random, uint8_t* nonce_explicit, + sce_hmac_sha_key_index_t *client_mac_key_index, sce_hmac_sha_key_index_t *server_mac_key_index, + sce_aes_key_index_t *client_crypto_key_index, sce_aes_key_index_t *server_crypto_key_index, + uint8_t *client_iv, uint8_t *server_iv); +fsp_err_t HW_SCE_TlsGenerateVerifyData(uint32_t select_verify_data, uint32_t *sce_master_secret, + uint8_t *hand_shake_hash, uint8_t *verify_data); +fsp_err_t HW_SCE_TlsGeneratePreMasterSecretWithEccP256Key(uint32_t *encrypted_public_key, + sce_tls_p256_ecc_key_index_t *tls_p256_ecc_key_index, uint32_t *sce_pre_master_secret); +fsp_err_t HW_SCE_TlsServersEphemeralEcdhPublicKeyRetrieves(uint32_t public_key_type, uint8_t *client_random, + uint8_t *server_random, uint8_t *server_ephemeral_ecdh_public_key, uint8_t *server_key_exchange_signature, + uint32_t *encrypted_public_key, uint32_t *encrypted_ephemeral_ecdh_public_key); + +fsp_err_t HW_SCE_EcdsaP192SignatureGenerate(sce_ecdsa_byte_data_t *message_hash, sce_ecdsa_byte_data_t *signature, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP224SignatureGenerate(uint32_t *indata_curvetype, sce_ecdsa_byte_data_t *message_hash, sce_ecdsa_byte_data_t *signature, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP256SignatureGenerate(uint32_t *indata_curvetype, sce_ecdsa_byte_data_t *message_hash, sce_ecdsa_byte_data_t *signature, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP384SignatureGenerate(uint32_t *indata_curvetype, sce_ecdsa_byte_data_t *message_hash, sce_ecdsa_byte_data_t *signature, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP192SignatureVerification(sce_ecdsa_byte_data_t *signature, + sce_ecdsa_byte_data_t *message_hash, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP224SignatureVerification(uint32_t *indata_curvetype, sce_ecdsa_byte_data_t *signature, + sce_ecdsa_byte_data_t *message_hash, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP256SignatureVerification(uint32_t *indata_curvetype, sce_ecdsa_byte_data_t *signature, + sce_ecdsa_byte_data_t *message_hash, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_EcdsaP384SignatureVerification(uint32_t *indata_curvetype, sce_ecdsa_byte_data_t *signature, + sce_ecdsa_byte_data_t *message_hash, sce_ecc_public_key_index_t *key_index); + +fsp_err_t HW_SCE_RSA_IF_HASH(uint8_t *p_mes, uint8_t *p_hash, uint32_t mes_len, uint8_t hash_type); + +fsp_err_t HW_SCE_EcdhInit(sce_ecdh_handle_t *handle, uint32_t key_type, uint32_t use_key_id); +fsp_err_t HW_SCE_EcdhReadPublicKey(sce_ecdh_handle_t *handle, sce_ecc_public_key_index_t *public_key_index, + uint8_t *public_key_data, sce_ecdsa_byte_data_t *signature, sce_ecc_public_key_index_t *key_index); +fsp_err_t HW_SCE_EcdhMakePublicKey(sce_ecdh_handle_t *handle, sce_ecc_public_key_index_t *public_key_index, + sce_ecc_private_key_index_t *private_key_index, uint8_t *public_key, sce_ecdsa_byte_data_t *signature, + sce_ecc_private_key_index_t *key_index); +fsp_err_t HW_SCE_EcdhCalculateSharedSecretIndex(sce_ecdh_handle_t *handle, + sce_ecc_public_key_index_t *public_key_index, sce_ecc_private_key_index_t *private_key_index, + sce_ecdh_key_index_t *shared_secret_index); +fsp_err_t HW_SCE_EcdhKeyDerivation(sce_ecdh_handle_t *handle, sce_ecdh_key_index_t *shared_secret_index, + uint32_t algorithm_id, uint8_t *other_info, uint32_t other_info_length, sce_aes_key_index_t *key_index); + +fsp_err_t HW_SCE_Aes128KeyWrap(sce_aes_key_index_t *wrap_key_index, uint32_t target_key_type, + sce_aes_key_index_t *target_key_index, uint32_t *wrapped_key); +fsp_err_t HW_SCE_Aes256KeyWrap(sce_aes_key_index_t *wrap_key_index, uint32_t target_key_type, + sce_aes_key_index_t *target_key_index, uint32_t *wrapped_key); +fsp_err_t HW_SCE_Aes128KeyUnwrap(sce_aes_key_index_t *wrap_key_index, uint32_t target_key_type, + uint32_t *wrapped_key, sce_aes_key_index_t *target_key_index); +fsp_err_t HW_SCE_Aes256KeyUnwrap(sce_aes_key_index_t *wrap_key_index, uint32_t target_key_type, + uint32_t *wrapped_key, sce_aes_key_index_t *target_key_index); + +#endif /* R_SCE_IF_HEADER_FILE */ diff --git a/ra/fsp/src/r_sce/hw_sce_aes_private.h b/ra/fsp/src/r_sce/hw_sce_aes_private.h index 0baa3bfd4..0ee552df6 100644 --- a/ra/fsp/src/r_sce/hw_sce_aes_private.h +++ b/ra/fsp/src/r_sce/hw_sce_aes_private.h @@ -173,4 +173,24 @@ extern fsp_err_t HW_SCE_AES_256EcbDecryptUsingEncryptedKey(const uint32_t * InDa const uint32_t * InData_Text, uint32_t * OutData_Text); +extern fsp_err_t HW_SCE_Aes128EncryptDecryptInit(const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_IV); + +extern void HW_SCE_Aes128EncryptDecryptUpdate(const uint32_t * InData_Text, + uint32_t * OutData_Text, + const uint32_t num_words); + +extern fsp_err_t HW_SCE_Aes128EncryptDecryptFinal(void); + +extern fsp_err_t HW_SCE_Aes256EncryptDecryptInit(const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_IV); + +extern void HW_SCE_Aes256EncryptDecryptUpdate(const uint32_t * InData_Text, + uint32_t * OutData_Text, + const uint32_t num_words); + +extern fsp_err_t HW_SCE_Aes256EncryptDecryptFinal(void); + #endif /* HW_SCE_AES_PRIVATE_H */ diff --git a/ra/fsp/src/r_sce/hw_sce_ecc_private.h b/ra/fsp/src/r_sce/hw_sce_ecc_private.h index 905e9a1af..a839f40bf 100644 --- a/ra/fsp/src/r_sce/hw_sce_ecc_private.h +++ b/ra/fsp/src/r_sce/hw_sce_ecc_private.h @@ -58,8 +58,15 @@ #define ECC_384_PRIVATE_KEY_HRK_LENGTH_BITS (544U) /* Function pointer declarations */ +#if BSP_FEATURE_CRYPTO_HAS_SCE9 + #define ECC_PUBLIC_KEY_SIZE_BYTES(curve_size) (curve_size * 2 + 20U) +typedef fsp_err_t (* hw_sce_ecc_scalarmultiplication_t)(const uint32_t * InData_CurveType, const uint32_t * InData_Cmd, + const uint32_t * InData_K, const uint32_t * InData_P, + uint32_t * OutData_R); +#else typedef fsp_err_t (* hw_sce_ecc_scalarmultiplication_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_K, const uint32_t * InData_P, uint32_t * OutData_R); +#endif typedef fsp_err_t (* hw_sce_ecc_generatekey_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_G, uint32_t * OutData_PubKey, uint32_t * OutData_PrivKey); @@ -114,6 +121,12 @@ fsp_err_t HW_SCE_ECC_256HrkScalarMultiplication(const uint32_t * InData_DomainPa const uint32_t * InData_P, uint32_t * OutData_R); +fsp_err_t HW_SCE_ECC_256WrappedScalarMultiplication(const uint32_t * InData_CurveType, + const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_P, + uint32_t * OutData_R); + /* ECC - 384 HW Procedure definitions */ fsp_err_t HW_SCE_ECC_384ScalarMultiplication(const uint32_t * InData_DomainParam, const uint32_t * InData_K, @@ -156,5 +169,10 @@ fsp_err_t HW_SCE_ECC_384HrkScalarMultiplication(const uint32_t * InData_DomainPa const uint32_t * InData_KeyIndex, const uint32_t * InData_P, uint32_t * OutData_R); +fsp_err_t HW_SCE_ECC_384WrappedScalarMultiplication(const uint32_t * InData_CurveType, + const uint32_t * InData_Cmd, + const uint32_t * InData_KeyIndex, + const uint32_t * InData_P, + uint32_t * OutData_R); #endif /* HW_SCE_ECC_PRIVATE_H */ diff --git a/ra/fsp/src/r_sce/hw_sce_hash_private.h b/ra/fsp/src/r_sce/hw_sce_hash_private.h index cfa8f6e3a..cc777ba92 100644 --- a/ra/fsp/src/r_sce/hw_sce_hash_private.h +++ b/ra/fsp/src/r_sce/hw_sce_hash_private.h @@ -27,6 +27,10 @@ #include "bsp_api.h" #include "hw_sce_common.h" -fsp_err_t HW_SCE_SHA256_UpdateHash(const uint32_t * p_source, uint32_t num_words, uint32_t * p_digest); +fsp_err_t HW_SCE_SHA256_UpdateHash(const uint32_t * p_source, uint32_t num_words, uint32_t * p_digest); +extern fsp_err_t HW_SCE_Sha224256GenerateMessageDigestSub(const uint32_t * InData_InitVal, + const uint32_t * InData_PaddedMsg, + const uint32_t MAX_CNT, + uint32_t * OutData_MsgDigest); #endif /* HW_SCE_HASH_PRIVATE_H */ diff --git a/ra/fsp/src/r_sce/hw_sce_private.h b/ra/fsp/src/r_sce/hw_sce_private.h index 3f7fa56dd..9d8cf4946 100644 --- a/ra/fsp/src/r_sce/hw_sce_private.h +++ b/ra/fsp/src/r_sce/hw_sce_private.h @@ -32,12 +32,13 @@ ***********************************************************************************************************************/ #include "bsp_api.h" #include "hw_sce_common.h" +#if BSP_FEATURE_CRYPTO_HAS_SCE9 + #include "r_sce_if.h" +#endif /********************************************************************************************************************** * Macro definitions ***********************************************************************************************************************/ -#define R_SCE_S_HEAP_SIZE 256 -#define R_SCE_S_RAM_SIZE 80 /********************************************************************************************************************** * Typedef definitions @@ -49,6 +50,12 @@ typedef enum e_crypto_word_endian CRYPTO_WORD_ENDIAN_LITTLE = 1 } crypto_word_endian_t; +typedef enum e_sce_oem_key_type +{ + SCE_OEM_KEY_TYPE_ENCRYPTED = 0, + SCE_OEM_KEY_TYPE_PLAIN = 1 +} sce_oem_key_type_t; + /********************************************************************************************************************** * Function Prototypes ***********************************************************************************************************************/ @@ -57,9 +64,11 @@ typedef enum e_crypto_word_endian * Includes ***********************************************************************************************************************/ -extern uint32_t S_RAM[R_SCE_S_RAM_SIZE]; -extern uint32_t S_HEAP[R_SCE_S_HEAP_SIZE]; - +extern uint32_t S_RAM[]; +extern uint32_t S_HEAP[]; +extern uint32_t S_INST[]; +extern uint32_t S_INST2[]; +extern uint32_t INST_DATA_SIZE; extern void HW_SCE_SoftReset(void); extern fsp_err_t HW_SCE_Initialization1(void); @@ -76,6 +85,59 @@ fsp_err_t HW_SCE_secureBoot(void); void HW_SCE_EndianSetBig(void); void HW_SCE_EndianSetLittle(void); crypto_word_endian_t HW_SCE_EndianFlagGet(void); +fsp_err_t HW_SCE_McuSpecificInit(void); + +fsp_err_t HW_SCE_FW_IntegrityChk(void); +fsp_err_t HW_SCE_HUK_Load(uint32_t * InData_LC); +fsp_err_t HW_SCE_HUK_Load_LCS(void); +fsp_err_t HW_SCE_p07(uint32_t * OutData_KeyIndex); +void HW_SCE_ChangeToLittleEndian(void); + +#if !BSP_FEATURE_CRYPTO_HAS_SCE9 + +/* OEM Command */ +typedef enum e_sce_oem_cmd +{ + SCE_OEM_CMD_AES128 = 5, + SCE_OEM_CMD_AES192, + SCE_OEM_CMD_AES256, + SCE_OEM_CMD_AES128_XTS, + SCE_OEM_CMD_AES256_XTS, + SCE_OEM_CMD_RSA1024_PUBLIC, + SCE_OEM_CMD_RSA1024_PRIVATE, + SCE_OEM_CMD_RSA2048_PUBLIC, + SCE_OEM_CMD_RSA2048_PRIVATE, + SCE_OEM_CMD_RSA3072_PUBLIC, + SCE_OEM_CMD_RSA3072_PRIVATE, + SCE_OEM_CMD_RSA4096_PUBLIC, + SCE_OEM_CMD_RSA4096_PRIVATE, + SCE_OEM_CMD_ECC_P192_PUBLIC, + SCE_OEM_CMD_ECC_P192_PRIVATE, + SCE_OEM_CMD_ECC_P224_PUBLIC, + SCE_OEM_CMD_ECC_P224_PRIVATE, + SCE_OEM_CMD_ECC_P256_PUBLIC, + SCE_OEM_CMD_ECC_P256_PRIVATE, + SCE_OEM_CMD_ECC_P384_PUBLIC, + SCE_OEM_CMD_ECC_P384_PRIVATE, + SCE_OEM_CMD_HMAC_SHA224, + SCE_OEM_CMD_HMAC_SHA256, + SCE_OEM_CMD_ECC_P256R1_PUBLIC, + SCE_OEM_CMD_ECC_P256R1_PRIVATE, + SCE_OEM_CMD_ECC_P384R1_PUBLIC, + SCE_OEM_CMD_ECC_P384R1_PRIVATE, + SCE_OEM_CMD_ECC_P512R1_PUBLIC, + SCE_OEM_CMD_ECC_P512R1_PRIVATE, + SCE_OEM_CMD_ECC_SECP256K1_PUBLIC, + SCE_OEM_CMD_ECC_SECP256K1_PRIVATE, + SCE_OEM_CMD_NUM +} sce_oem_cmd_t; +#endif +fsp_err_t HW_SCE_GenerateOemKeyIndexPrivate(const sce_oem_key_type_t key_type, + const sce_oem_cmd_t cmd, + const uint8_t * encrypted_provisioning_key, + const uint8_t * iv, + const uint8_t * encrypted_oem_key, + uint32_t * key_index); #endif /* HW_SCE_PRIVATE_H */ diff --git a/ra/fsp/src/r_sce/hw_sce_rsa_private.h b/ra/fsp/src/r_sce/hw_sce_rsa_private.h index 5042ab2c3..e64155134 100644 --- a/ra/fsp/src/r_sce/hw_sce_rsa_private.h +++ b/ra/fsp/src/r_sce/hw_sce_rsa_private.h @@ -33,6 +33,19 @@ typedef fsp_err_t (* hw_sce_rsa_generatekey_t)(uint32_t num_tries, uint32_t * Ou typedef fsp_err_t (* hw_sce_rsa_private_decrypt_t)(const uint32_t * InData_Text, const uint32_t * InData_KeyIndex, const uint32_t * InData_N, uint32_t * OutData_Text); +typedef fsp_err_t (* hw_sce_rsa_public_encrypt_t)(const uint32_t * InData_Text, const uint32_t * InData_PublicKey, + const uint32_t * InData_N, uint32_t * OutData_Text); + +fsp_err_t HW_SCE_RSA_4096PublicKeyEncrypt(const uint32_t * InData_Text, + const uint32_t * InData_PublicKey, + const uint32_t * InData_N, + uint32_t * OutData_Text); + +fsp_err_t HW_SCE_RSA_3072PublicKeyEncrypt(const uint32_t * InData_Text, + const uint32_t * InData_PublicKey, + const uint32_t * InData_N, + uint32_t * OutData_Text); + fsp_err_t HW_SCE_RSA_2048PublicKeyEncrypt(const uint32_t * InData_Text, const uint32_t * InData_PublicKey, const uint32_t * InData_N, diff --git a/ra/fsp/src/r_sce/ra2/SC324_private.h b/ra/fsp/src/r_sce/ra2/SC324_private.h index a7251fd27..b1edfd867 100644 --- a/ra/fsp/src/r_sce/ra2/SC324_private.h +++ b/ra/fsp/src/r_sce/ra2/SC324_private.h @@ -22,6 +22,7 @@ #define SC324_PRIVATE_H #include +#include "SCE_module.h" typedef struct /*!< SCE register structure */ { @@ -46,8 +47,7 @@ typedef struct /*!< SCE register structure * volatile uint8_t REG_07H; /*!< Reserved */ } SCE1_TRNG_Type; -#define SCE1_TRNG_BASE 0x400D1000UL -#define SCE1_TRNG ((volatile SCE1_TRNG_Type *) SCE1_TRNG_BASE) +#define SCE1_TRNG ((volatile SCE1_TRNG_Type *) SCE1_TRNG_BASE) typedef struct { @@ -94,7 +94,6 @@ typedef struct volatile uint32_t AESKW1; ///< AES Key Window 1 register } SCE1_AES_Type; -#define SCE1_AES_BASE 0x400D0000UL -#define SCE1_AES ((volatile SCE1_AES_Type *) SCE1_AES_BASE) +#define SCE1_AES ((volatile SCE1_AES_Type *) SCE1_AES_BASE) #endif /* SC324_PRIVATE_H */ diff --git a/ra/fsp/src/r_sce/ra2/SC324_utils.c b/ra/fsp/src/r_sce/ra2/SC324_utils.c new file mode 100644 index 000000000..5f5e69a51 --- /dev/null +++ b/ra/fsp/src/r_sce/ra2/SC324_utils.c @@ -0,0 +1,51 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "hw_sce_private.h" + +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +fsp_err_t HW_SCE_McuSpecificInit (void) +{ + // power on the SCE module + HW_SCE_PowerOn(); + + HW_SCE_EndianSetLittle(); + + return FSP_SUCCESS; +} diff --git a/ra/fsp/src/r_sce/ra2/SCE_module.h b/ra/fsp/src/r_sce/ra2/SCE_module.h new file mode 100644 index 000000000..10457d0f6 --- /dev/null +++ b/ra/fsp/src/r_sce/ra2/SCE_module.h @@ -0,0 +1,30 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef HW_SCE_MODULE_H +#define HW_SCE_MODULE_H + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ +#define SCE1_TRNG_BASE 0x400D1000UL +#define SCE1_AES_BASE 0x400D0000UL + +#endif // HW_SCE_MODULE_H diff --git a/ra/fsp/src/r_sce/ra4_sce5/SC327_SoftReset.prc.c b/ra/fsp/src/r_sce/ra4_sce5/SC327_SoftReset.prc.c index d030aa583..b16b76253 100644 --- a/ra/fsp/src/r_sce/ra4_sce5/SC327_SoftReset.prc.c +++ b/ra/fsp/src/r_sce/ra4_sce5/SC327_SoftReset.prc.c @@ -19,7 +19,7 @@ **********************************************************************************************************************/ ///////////////////////////////////////////////////////////////////////// -// // +// // // File name : SC327_SoftReset.prc // // State Diagram : All state ransition // // Start State : All state // diff --git a/ra/fsp/src/r_sce/ra4_sce5/SC327_p01.prc.c b/ra/fsp/src/r_sce/ra4_sce5/SC327_p01.prc.c index 994cd026e..ba06073d9 100644 --- a/ra/fsp/src/r_sce/ra4_sce5/SC327_p01.prc.c +++ b/ra/fsp/src/r_sce/ra4_sce5/SC327_p01.prc.c @@ -19,7 +19,7 @@ **********************************************************************************************************************/ ///////////////////////////////////////////////////////////////////////// -// // +// // // Procedure number: 01 // // File name : SC327_p01.prc // // State Diagram : main(FSM1) // @@ -40,7 +40,7 @@ #include "SCE_ProcCommon.h" /*******************************************************************************************************************//** - * TSIP Selftest Function1 + * SCE Selftest Function1 * @retval FSP_SUCCESS The operation completed successfully. **********************************************************************************************************************/ fsp_err_t HW_SCE_Initialization1 () { diff --git a/ra/fsp/src/r_sce/ra4_sce5/SC327_utils.c b/ra/fsp/src/r_sce/ra4_sce5/SC327_utils.c new file mode 100644 index 000000000..607fa814e --- /dev/null +++ b/ra/fsp/src/r_sce/ra4_sce5/SC327_utils.c @@ -0,0 +1,65 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "hw_sce_private.h" +#include "SCE_ProcCommon.h" + +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +fsp_err_t HW_SCE_McuSpecificInit (void) +{ + fsp_err_t iret = FSP_ERR_CRYPTO_SCE_FAIL; + + // power on the SCE module + HW_SCE_PowerOn(); + + HW_SCE_SoftReset(); + iret = HW_SCE_Initialization1(); + + if (FSP_SUCCESS == iret) + { + iret = HW_SCE_Initialization2(); + if (FSP_SUCCESS == iret) + { + /* Set mode to little endian */ + WR1_PROG(REG_1D4H, 0x0000AAAA); + } + } + + return iret; +} diff --git a/ra/fsp/src/r_sce/ra4_sce5/SCE_module.h b/ra/fsp/src/r_sce/ra4_sce5/SCE_module.h new file mode 100644 index 000000000..da6198dd8 --- /dev/null +++ b/ra/fsp/src/r_sce/ra4_sce5/SCE_module.h @@ -0,0 +1,29 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef HW_SCE_MODULE_H +#define HW_SCE_MODULE_H + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ + +#define SCE_BASE 0x400C0000UL +#endif // HW_SCE_MODULE_H diff --git a/ra/fsp/src/r_sce/ra6_sce7/SC32_utils.c b/ra/fsp/src/r_sce/ra6_sce7/SC32_utils.c new file mode 100644 index 000000000..ed4eb8f8c --- /dev/null +++ b/ra/fsp/src/r_sce/ra6_sce7/SC32_utils.c @@ -0,0 +1,50 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "hw_sce_private.h" +#include "SCE_ProcCommon.h" + +fsp_err_t HW_SCE_McuSpecificInit (void) +{ + fsp_err_t iret = FSP_ERR_CRYPTO_SCE_FAIL; + + // power on the SCE module + HW_SCE_PowerOn(); + + HW_SCE_SoftReset(); + iret = HW_SCE_Initialization1(); + + if (FSP_SUCCESS == iret) + { + iret = HW_SCE_Initialization2(); + if (FSP_SUCCESS == iret) + { + iret = HW_SCE_secureBoot(); + + if (FSP_SUCCESS == iret) + { + /* Set mode to little endian */ + WR1_PROG(REG_1D4H, 0x0000EEEE); + } + } + } + + return iret; +} diff --git a/ra/fsp/src/r_sce/ra6_sce7/SCE_module.h b/ra/fsp/src/r_sce/ra6_sce7/SCE_module.h new file mode 100644 index 000000000..3a8c1d024 --- /dev/null +++ b/ra/fsp/src/r_sce/ra6_sce7/SCE_module.h @@ -0,0 +1,30 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef HW_SCE_MODULE_H +#define HW_SCE_MODULE_H + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ + +#define SCE_BASE 0x400C0000UL // should be changed for TAHOE + +#endif // HW_SCE_MODULE_H diff --git a/ra/fsp/src/r_sci_i2c/r_sci_i2c.c b/ra/fsp/src/r_sci_i2c/r_sci_i2c.c index 666f2a092..5066ddf4c 100644 --- a/ra/fsp/src/r_sci_i2c/r_sci_i2c.c +++ b/ra/fsp/src/r_sci_i2c/r_sci_i2c.c @@ -111,6 +111,12 @@ typedef enum e_sci_i2c_dtc_interrupt_trigger SCI_I2C_DTC_INTERRUPT_TRIGGER_RXI = 0x1 } sci_i2c_dtc_interrupt_trigger_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile sci_i2c_prv_ns_callback)(i2c_master_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile sci_i2c_prv_ns_callback)(i2c_master_callback_args_t * p_args); +#endif + /********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -179,7 +185,8 @@ i2c_master_api_t const g_i2c_master_on_sci = .abort = R_SCI_I2C_Abort, .slaveAddressSet = R_SCI_I2C_SlaveAddressSet, .close = R_SCI_I2C_Close, - .versionGet = R_SCI_I2C_VersionGet + .versionGet = R_SCI_I2C_VersionGet, + .callbackSet = R_SCI_I2C_CallbackSet }; /*******************************************************************************************************************//** @@ -210,7 +217,6 @@ fsp_err_t R_SCI_I2C_Open (i2c_master_ctrl_t * const p_api_ctrl, i2c_master_cfg_t FSP_ASSERT(p_ctrl != NULL); FSP_ASSERT(p_cfg != NULL); FSP_ASSERT(p_cfg->p_extend != NULL); - FSP_ASSERT(p_cfg->p_callback != NULL); FSP_ASSERT((p_cfg->rate == I2C_MASTER_RATE_STANDARD) || (p_cfg->rate == I2C_MASTER_RATE_FAST)); FSP_ASSERT(p_cfg->txi_irq >= (IRQn_Type) 0); FSP_ASSERT(p_cfg->tei_irq >= (IRQn_Type) 0); @@ -236,9 +242,15 @@ fsp_err_t R_SCI_I2C_Open (i2c_master_ctrl_t * const p_api_ctrl, i2c_master_cfg_t p_ctrl->p_reg = (R_SCI0_Type *) ((uint32_t) R_SCI0 + (p_cfg->channel * ((uint32_t) R_SCI1 - (uint32_t) R_SCI0)));; /* Record the configuration on the device for use later */ - p_ctrl->p_cfg = p_cfg; - p_ctrl->slave = p_cfg->slave; - p_ctrl->addr_mode = p_cfg->addr_mode; + p_ctrl->p_cfg = p_cfg; + p_ctrl->slave = p_cfg->slave; + p_ctrl->addr_mode = p_cfg->addr_mode; + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif #if SCI_I2C_CFG_DTC_ENABLE @@ -401,6 +413,48 @@ fsp_err_t R_SCI_I2C_SlaveAddressSet (i2c_master_ctrl_t * const p_api_ctrl, return err; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements i2c_master_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. + **********************************************************************************************************************/ +fsp_err_t R_SCI_I2C_CallbackSet (i2c_master_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2c_master_callback_args_t *), + void const * const p_context, + i2c_master_callback_args_t * const p_callback_memory) +{ + sci_i2c_instance_ctrl_t * p_ctrl = (sci_i2c_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_I2C_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SCI_I2C_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if SCI_I2C_CFG_PARAM_CHECKING_ENABLE + if (!p_ctrl->callback_is_secure) + { + FSP_ASSERT(p_callback_memory); + } + #endif +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /******************************************************************************************************************//** * Closes the I2C device. Power down I2C peripheral. * @@ -495,6 +549,8 @@ static fsp_err_t sci_i2c_read_write (i2c_master_ctrl_t * const p_api_ctrl, #if SCI_I2C_CFG_PARAM_CHECKING_ENABLE FSP_ASSERT(p_buffer != NULL); FSP_ERROR_RETURN((p_ctrl->open == SCI_I2C_OPEN), FSP_ERR_NOT_OPEN); + FSP_ASSERT(((sci_i2c_instance_ctrl_t *) p_api_ctrl)->p_callback != NULL); + #if SCI_I2C_CFG_DTC_ENABLE /* DTC on RX could actually receive 65535+3 = 65538 bytes as 3 bytes are handled separately. @@ -547,12 +603,24 @@ static fsp_err_t sci_i2c_read_write (i2c_master_ctrl_t * const p_api_ctrl, **********************************************************************************************************************/ void sci_i2c_notify (sci_i2c_instance_ctrl_t * const p_ctrl, i2c_master_event_t const event) { - /* Fill in the argument to the callback */ - i2c_master_callback_args_t args = + i2c_master_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. */ + i2c_master_callback_args_t * p_args = p_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &args; + } + else { - .p_context = p_ctrl->p_cfg->p_context, - .event = event - }; + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args; + } + + p_args->p_context = p_ctrl->p_context; + p_args->event = event; #if SCI_I2C_CFG_DTC_ENABLE @@ -572,7 +640,32 @@ void sci_i2c_notify (sci_i2c_instance_ctrl_t * const p_ctrl, i2c_master_event_t #endif /* Now do the callback here */ - p_ctrl->p_cfg->p_callback(&args); +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + sci_i2c_prv_ns_callback p_callback = (sci_i2c_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; + } } /******************************************************************************************************************//** diff --git a/ra/fsp/src/r_sci_spi/r_sci_spi.c b/ra/fsp/src/r_sci_spi/r_sci_spi.c index b96c3383e..c214d6f2c 100644 --- a/ra/fsp/src/r_sci_spi/r_sci_spi.c +++ b/ra/fsp/src/r_sci_spi/r_sci_spi.c @@ -60,14 +60,25 @@ static const fsp_version_t g_sci_spi_version = const spi_api_t g_spi_on_sci = { - .open = R_SCI_SPI_Open, - .read = R_SCI_SPI_Read, - .write = R_SCI_SPI_Write, - .writeRead = R_SCI_SPI_WriteRead, - .close = R_SCI_SPI_Close, - .versionGet = R_SCI_SPI_VersionGet + .open = R_SCI_SPI_Open, + .read = R_SCI_SPI_Read, + .write = R_SCI_SPI_Write, + .writeRead = R_SCI_SPI_WriteRead, + .close = R_SCI_SPI_Close, + .versionGet = R_SCI_SPI_VersionGet, + .callbackSet = R_SCI_SPI_CallbackSet }; +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile sci_spi_prv_ns_callback)(spi_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile sci_spi_prv_ns_callback)(spi_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function declarations. **********************************************************************************************************************/ @@ -84,6 +95,7 @@ static fsp_err_t r_sci_spi_write_read_common(sci_spi_instance_ctrl_t * const p_c uint32_t const length); static void r_sci_spi_start_transfer(sci_spi_instance_ctrl_t * const p_ctrl); static void r_sci_spi_transmit(sci_spi_instance_ctrl_t * p_ctrl); +static void r_sci_spi_call_callback(sci_spi_instance_ctrl_t * p_ctrl, spi_event_t event); void sci_spi_txi_isr(void); void sci_spi_rxi_isr(void); @@ -137,6 +149,13 @@ fsp_err_t R_SCI_SPI_Open (spi_ctrl_t * p_api_ctrl, spi_cfg_t const * const p_cfg p_ctrl->p_reg = (R_SCI0_Type *) ((R_SCI1_BASE - R_SCI0_BASE) * p_cfg->channel + R_SCI0_BASE); 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; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif + #if SCI_SPI_DTC_SUPPORT_ENABLE == 1 /* Open the SCI SPI transfer interface if available. */ @@ -320,6 +339,41 @@ fsp_err_t R_SCI_SPI_WriteRead (spi_ctrl_t * const p_api_ctrl, return r_sci_spi_write_read_common(p_ctrl, p_src, p_dest, length); } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements spi_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. + **********************************************************************************************************************/ +fsp_err_t R_SCI_SPI_CallbackSet (spi_ctrl_t * const p_api_ctrl, + void ( * p_callback)(spi_callback_args_t *), + void const * const p_context, + spi_callback_args_t * const p_callback_memory) +{ + sci_spi_instance_ctrl_t * p_ctrl = (sci_spi_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_SPI_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SCI_SPI_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Disable the SCI channel and set the instance as not open. Implements @ref spi_api_t::close. * @@ -795,6 +849,61 @@ static void r_sci_spi_transmit (sci_spi_instance_ctrl_t * p_ctrl) } } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to SPI instance control block + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_sci_spi_call_callback (sci_spi_instance_ctrl_t * p_ctrl, spi_event_t event) +{ + spi_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. */ + spi_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->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + sci_spi_prv_ns_callback p_callback = (sci_spi_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; + } +} + /*******************************************************************************************************************//** * This function is the ISR handler for R_SCI_SPI Transmit Buffer Empty IRQ. * @@ -882,14 +991,7 @@ void sci_spi_tei_isr (void) p_ctrl->p_reg->SCR &= (uint8_t) R_SCI0_SCR_CKE_Msk; /* Notify the user that the transfer has completed. */ - spi_callback_args_t sci_spi_cb_data = - { - .channel = p_ctrl->p_cfg->channel, - .event = SPI_EVENT_TRANSFER_COMPLETE, - .p_context = p_ctrl->p_cfg->p_context - }; - - p_ctrl->p_cfg->p_callback(&sci_spi_cb_data); + r_sci_spi_call_callback(p_ctrl, SPI_EVENT_TRANSFER_COMPLETE); R_BSP_IrqStatusClear(irq); @@ -922,11 +1024,7 @@ void sci_spi_eri_isr (void) p_ctrl->p_reg->SSR = (uint8_t) (R_SCI0_SSR_TDRE_Msk | R_SCI0_SSR_TEND_Msk); /* Notify the user that an error occurred. */ - spi_callback_args_t sci_spi_cb_data = {0}; - sci_spi_cb_data.channel = p_ctrl->p_cfg->channel; - sci_spi_cb_data.event = SPI_EVENT_ERR_READ_OVERFLOW; - sci_spi_cb_data.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&sci_spi_cb_data); + r_sci_spi_call_callback(p_ctrl, SPI_EVENT_ERR_READ_OVERFLOW); /* Clear pending IRQ to make sure it doesn't fire again after exiting. */ R_BSP_IrqStatusClear(irq); diff --git a/ra/fsp/src/r_sci_uart/r_sci_uart.c b/ra/fsp/src/r_sci_uart/r_sci_uart.c index 23e0be8ff..0f6c13708 100644 --- a/ra/fsp/src/r_sci_uart/r_sci_uart.c +++ b/ra/fsp/src/r_sci_uart/r_sci_uart.c @@ -152,6 +152,12 @@ typedef enum e_noise_cancel_lvl NOISE_CANCEL_LVL4 /**< Noise filter level 4(strong) */ } noise_cancel_lvl_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile sci_uart_prv_ns_callback)(uart_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile sci_uart_prv_ns_callback)(uart_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -178,6 +184,7 @@ static void r_sci_uart_transfer_close(sci_uart_instance_ctrl_t * p_ctrl); #endif static void r_sci_uart_baud_set(R_SCI0_Type * p_sci_reg, baud_setting_t const * const p_baud_setting); +static void r_sci_uart_call_callback(sci_uart_instance_ctrl_t * p_ctrl, uint32_t data, uart_event_t event); #if SCI_UART_CFG_FIFO_SUPPORT static void r_sci_uart_fifo_cfg(sci_uart_instance_ctrl_t * const p_ctrl); @@ -274,6 +281,7 @@ const uart_api_t g_uart_on_sci = .baudSet = R_SCI_UART_BaudSet, .versionGet = R_SCI_UART_VersionGet, .communicationAbort = R_SCI_UART_Abort, + .callbackSet = R_SCI_UART_CallbackSet, }; /*******************************************************************************************************************//** @@ -336,6 +344,15 @@ fsp_err_t R_SCI_UART_Open (uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * co p_ctrl->p_cfg = p_cfg; +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_ctrl->callback_is_secure = true; +#endif + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + p_ctrl->data_bytes = 1U; if (UART_DATA_BITS_9 == p_cfg->data_bits) { @@ -364,7 +381,12 @@ fsp_err_t R_SCI_UART_Open (uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * co p_ctrl->p_reg->SIMR2 = 0U; p_ctrl->p_reg->SIMR3 = 0U; p_ctrl->p_reg->CDR = 0U; - p_ctrl->p_reg->DCCR = SCI_UART_DCCR_DEFAULT_VALUE; + + /* Check if the channel supports address matching */ + if (BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS & (1U << p_cfg->channel)) + { + p_ctrl->p_reg->DCCR = SCI_UART_DCCR_DEFAULT_VALUE; + } /* Set the default level of the TX pin to 1. */ p_ctrl->p_reg->SPTR = (uint8_t) (1U << SPTR_SPB2D_BIT) | SPTR_OUTPUT_ENABLE_MASK; @@ -660,6 +682,42 @@ fsp_err_t R_SCI_UART_Write (uart_ctrl_t * const p_api_ctrl, uint8_t const * cons #endif } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements uart_api_t::callbackSet + * + * @retval FSP_SUCCESS Callback updated successfully. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_CallbackSet (uart_ctrl_t * const p_api_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void const * const p_context, + uart_callback_args_t * const p_callback_memory) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Updates the baud rate using the clock selected in Open. p_baud_setting is a pointer to a baud_setting_t structure. * Implements @ref uart_api_t::baudSet @@ -1411,6 +1469,63 @@ static void r_sci_uart_baud_set (R_SCI0_Type * p_sci_reg, baud_setting_t const * (p_baud_setting->semr_baudrate_bits & SCI_UART_SEMR_BAUD_SETTING_MASK)); } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to UART instance control block + * @param[in] data See uart_callback_args_t in r_uart_api.h + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_sci_uart_call_callback (sci_uart_instance_ctrl_t * p_ctrl, uint32_t data, uart_event_t event) +{ + uart_callback_args_t args; + + /* Store callback arguments in memory provided by user if available. This allows callback arguments to be + * stored in non-secure memory so they can be accessed by a non-secure callback function. */ + uart_callback_args_t * p_args = p_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args; + } + + p_args->channel = p_ctrl->p_cfg->channel; + p_args->data = data; + p_args->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + sci_uart_prv_ns_callback p_callback = (sci_uart_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args); + } + +#else + + /* If the project is not Trustzone Secure, then it will never need to change security state in order to call the callback. */ + p_ctrl->p_callback(p_args); +#endif + if (NULL != p_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_ctrl->p_callback_memory = args; + } +} + #if (SCI_UART_CFG_TX_ENABLE) /*******************************************************************************************************************//** @@ -1491,13 +1606,7 @@ void sci_uart_txi_isr (void) p_ctrl->p_reg->SCR = scr_temp; p_ctrl->p_tx_src = NULL; - uart_callback_args_t args; - - args.channel = p_ctrl->p_cfg->channel; - args.data = 0U; - args.event = UART_EVENT_TX_DATA_EMPTY; - args.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&args); + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_TX_DATA_EMPTY); } /* Restore context if RTOS is used */ @@ -1547,10 +1656,7 @@ void sci_uart_rxi_isr (void) } #endif - uint32_t data; - uart_callback_args_t args; - args.channel = p_ctrl->p_cfg->channel; - args.p_context = p_ctrl->p_cfg->p_context; + uint32_t data; #if SCI_UART_CFG_FIFO_SUPPORT do { @@ -1581,9 +1687,7 @@ void sci_uart_rxi_isr (void) if (0 == p_ctrl->rx_dest_bytes) { /* Call user callback with the data. */ - args.event = UART_EVENT_RX_CHAR; - args.data = data; - p_ctrl->p_cfg->p_callback(&args); + r_sci_uart_call_callback(p_ctrl, data, UART_EVENT_RX_CHAR); } else { @@ -1593,9 +1697,7 @@ void sci_uart_rxi_isr (void) if (0 == p_ctrl->rx_dest_bytes) { - args.data = 0U; - args.event = UART_EVENT_RX_COMPLETE; - p_ctrl->p_cfg->p_callback(&args); + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_RX_COMPLETE); } } @@ -1628,12 +1730,7 @@ void sci_uart_rxi_isr (void) p_ctrl->p_rx_dest = NULL; /* Call callback */ - uart_callback_args_t args; - args.channel = p_ctrl->p_cfg->channel; - args.data = 0U; - args.p_context = p_ctrl->p_cfg->p_context; - args.event = UART_EVENT_RX_COMPLETE; - p_ctrl->p_cfg->p_callback(&args); + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_RX_COMPLETE); } #endif @@ -1660,17 +1757,10 @@ void sci_uart_tei_isr (void) /* Recover ISR context saved in open. */ sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - uint8_t channel = p_ctrl->p_cfg->channel; - uart_callback_args_t args; - /* Receiving TEI(transmit end interrupt) means the completion of transmission, so call callback function here. */ p_ctrl->p_reg->SCR &= (uint8_t) ~(SCI_SCR_TIE_MASK | SCI_SCR_TEIE_MASK); - args.channel = channel; - args.data = 0U; - args.event = UART_EVENT_TX_COMPLETE; - args.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&args); + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_TX_COMPLETE); /* Clear pending IRQ to make sure it doesn't fire again after exiting */ R_BSP_IrqStatusClear(irq); @@ -1707,9 +1797,8 @@ void sci_uart_eri_isr (void) /* Recover ISR context saved in open. */ sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); - uint8_t channel = p_ctrl->p_cfg->channel; - uint32_t data = 0U; - uart_callback_args_t args = {0U}; + uint32_t data = 0U; + uart_event_t event; /* Read data. */ if ( @@ -1728,22 +1817,19 @@ void sci_uart_eri_isr (void) } /* Determine cause of error. */ - args.event = (uart_event_t) (p_ctrl->p_reg->SSR & SCI_RCVR_ERR_MASK); + event = (uart_event_t) (p_ctrl->p_reg->SSR & SCI_RCVR_ERR_MASK); /* Check if there is a break detected. */ - if ((UART_EVENT_ERR_FRAMING == (args.event & UART_EVENT_ERR_FRAMING)) && (0U == p_ctrl->p_reg->SPTR_b.RXDMON)) + if ((UART_EVENT_ERR_FRAMING == (event & UART_EVENT_ERR_FRAMING)) && (0U == p_ctrl->p_reg->SPTR_b.RXDMON)) { - args.event |= UART_EVENT_BREAK_DETECT; + event |= UART_EVENT_BREAK_DETECT; } /* Clear error condition. */ p_ctrl->p_reg->SSR &= (uint8_t) (~SCI_RCVR_ERR_MASK); /* Call callback. */ - args.channel = channel; - args.data = data; - args.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&args); + r_sci_uart_call_callback(p_ctrl, data, event); /* Clear pending IRQ to make sure it doesn't fire again after exiting */ R_BSP_IrqStatusClear(irq); diff --git a/ra/fsp/src/r_sdhi/r_sdhi.c b/ra/fsp/src/r_sdhi/r_sdhi.c index d8696d4cd..bf128b655 100644 --- a/ra/fsp/src/r_sdhi/r_sdhi.c +++ b/ra/fsp/src/r_sdhi/r_sdhi.c @@ -89,21 +89,21 @@ * Do not set BREM or BWEM when using DMA/DTC. This driver always uses DMA or DTC. */ #define SDHI_PRV_SDHI_INFO2_MASK_CMD_SEND (0x00007C80U) -/* The relationship of the SD Clock Control Register SD_CLK_CTRL CLKSEL to the division of PCLKA +/* The relationship of the SD Clock Control Register SD_CLK_CTRL CLKSEL to the division of the source PCLK * b7 b0 - * 0 0 0 0 0 0 0 0: PCLKA/2 - * 0 0 0 0 0 0 0 1: PCLKA/4 - * 0 0 0 0 0 0 1 0: PCLKA/8 - * 0 0 0 0 0 1 0 0: PCLKA/16 - * 0 0 0 0 1 0 0 0: PCLKA/32 - * 0 0 0 1 0 0 0 0: PCLKA/64 - * 0 0 1 0 0 0 0 0: PCLKA/128 - * 0 1 0 0 0 0 0 0: PCLKA/256 - * 1 0 0 0 0 0 0 0: PCLKA/512. + * 1 1 1 1 1 1 1 1: PCLK + * 0 0 0 0 0 0 0 0: PCLK/2 + * 0 0 0 0 0 0 0 1: PCLK/4 + * 0 0 0 0 0 0 1 0: PCLK/8 + * 0 0 0 0 0 1 0 0: PCLK/16 + * 0 0 0 0 1 0 0 0: PCLK/32 + * 0 0 0 1 0 0 0 0: PCLK/64 + * 0 0 1 0 0 0 0 0: PCLK/128 + * 0 1 0 0 0 0 0 0: PCLK/256 + * 1 0 0 0 0 0 0 0: PCLK/512. * Other settings are prohibited. */ #define SDHI_PRV_MAX_CLOCK_DIVISION_SHIFT (9U) /* 512 (2^9) is max clock division supported */ -#define SDHI_PRV_MIN_CLOCK_DIVISION_SHIFT (1U) /* 2 (2^1) is minimum division supported */ #define SDHI_PRV_CLK_CTRL_DIV_INVALID (0xFFU) @@ -182,6 +182,11 @@ /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile sdhi_prv_ns_callback)(sdmmc_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile sdhi_prv_ns_callback)(sdmmc_callback_args_t * p_args); +#endif /*********************************************************************************************************************** * Private function prototypes @@ -286,7 +291,7 @@ static fsp_err_t r_sdhi_transfer_write(sdhi_instance_ctrl_t * const p_ctrl, static void r_sdhi_transfer_end(sdhi_instance_ctrl_t * const p_ctrl); -static void sdhi_call_callback(sdhi_instance_ctrl_t * p_ctrl, sdmmc_callback_args_t * p_args); +static void r_sdhi_call_callback(sdhi_instance_ctrl_t * p_ctrl, sdmmc_callback_args_t * p_args); void r_sdhi_transfer_callback(sdhi_instance_ctrl_t * p_ctrl); @@ -329,6 +334,7 @@ const sdmmc_api_t g_sdmmc_on_sdhi = .ioIntEnable = R_SDHI_IoIntEnable, .statusGet = R_SDHI_StatusGet, .erase = R_SDHI_Erase, + .callbackSet = R_SDHI_CallbackSet, .close = R_SDHI_Close, .versionGet = R_SDHI_VersionGet, }; @@ -380,7 +386,11 @@ fsp_err_t R_SDHI_Open (sdmmc_ctrl_t * const p_api_ctrl, sdmmc_cfg_t const * cons /* Initialize control block. */ memset(p_ctrl, 0, sizeof(*p_ctrl)); - p_ctrl->p_reg = R_SDHI0 + (p_cfg->channel * (R_SDHI1 - R_SDHI0)); +#if BSP_FEATURE_SDHI_VALID_CHANNEL_MASK > 1U + p_ctrl->p_reg = p_cfg->channel ? R_SDHI1 : R_SDHI0; +#else + p_ctrl->p_reg = R_SDHI0; +#endif p_ctrl->p_cfg = p_cfg; /* Clear module stop bit (turn module on). */ @@ -400,6 +410,11 @@ fsp_err_t R_SDHI_Open (sdmmc_ctrl_t * const p_api_ctrl, sdmmc_cfg_t const * cons p_ctrl->p_reg->SD_INFO1_MASK = SDHI_PRV_SD_INFO1_MASK_MASK_ALL; } + /* Set callback and context pointers, if configured */ + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + /* Configure and enable interrupts. */ R_BSP_IrqCfgEnable(p_cfg->access_irq, p_cfg->access_ipl, p_ctrl); r_sdhi_irq_enable(p_cfg->card_irq, p_cfg->card_ipl, p_ctrl); @@ -1022,6 +1037,56 @@ fsp_err_t R_SDHI_Erase (sdmmc_ctrl_t * const p_api_ctrl, uint32_t const start_se return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref sdmmc_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_SDHI_CallbackSet (sdmmc_ctrl_t * const p_api_ctrl, + void ( * p_callback)(sdmmc_callback_args_t *), + void const * const p_context, + sdmmc_callback_args_t * const p_callback_memory) +{ + sdhi_instance_ctrl_t * p_ctrl = (sdhi_instance_ctrl_t *) p_api_ctrl; + +#if SDHI_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SDHI_PRV_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 SDHI_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + sdmmc_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 (*)(sdmmc_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; +} + /*******************************************************************************************************************//** * Closes an open SD/MMC device. Implements @ref sdmmc_api_t::close(). * @@ -1414,28 +1479,25 @@ static fsp_err_t r_sdhi_max_clock_rate_set (sdhi_instance_ctrl_t * p_ctrl, uint3 { uint32_t setting = SDHI_PRV_CLK_CTRL_DIV_INVALID; - /* Get the runtime frequency of PCLKA, the source of the SD clock */ - uint32_t frequency = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_PCLKA); + /* Get the runtime frequency of the source of the SD clock */ + uint32_t frequency = R_FSP_SystemClockHzGet(BSP_FEATURE_SDHI_CLOCK); /* Iterate over all possible divisors, starting with the smallest, until the resulting clock rate is less than * or equal to the requested maximum rate. */ - for (uint32_t divisor_shift = SDHI_PRV_MIN_CLOCK_DIVISION_SHIFT; + for (uint32_t divisor_shift = BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT; divisor_shift <= SDHI_PRV_MAX_CLOCK_DIVISION_SHIFT; divisor_shift++) { if ((frequency >> divisor_shift) <= max_rate) { /* If the calculated frequency is less than or equal to the maximum supported by the device, - * select this frequency. */ - setting = 1U << divisor_shift; - - /* The register setting is the divisor value divided by 4. */ - setting >>= 2U; + * select this frequency. The register setting is the divisor value divided by 4, or 0xFF for no divider. */ + setting = divisor_shift ? ((1U << divisor_shift) >> 2U) : UINT8_MAX; /* Set the clock setting. */ /* The clock register is accessible 8 SD clock counts after the last command completes. Each register access - * requires at least one PCLKA count, so check the register up to 8 times the maximum PCLKA divisor value (512). */ + * requires at least one PCLK count, so check the register up to 8 times the maximum PCLK divisor value (512). */ uint32_t timeout = SDHI_PRV_SD_CLK_CTRLEN_TIMEOUT; while (timeout > 0U) @@ -2462,14 +2524,11 @@ void r_sdhi_transfer_callback (sdhi_instance_ctrl_t * p_ctrl) * callback is called. */ r_sdhi_transfer_end(p_ctrl); - if (NULL != p_ctrl->p_cfg->p_callback) - { - sdmmc_callback_args_t args; - memset(&args, 0U, sizeof(args)); - args.p_context = p_ctrl->p_cfg->p_context; - args.event |= SDMMC_EVENT_TRANSFER_COMPLETE; - p_ctrl->p_cfg->p_callback(&args); - } + sdmmc_callback_args_t args; + memset(&args, 0U, sizeof(args)); + args.p_context = p_ctrl->p_context; + args.event |= SDMMC_EVENT_TRANSFER_COMPLETE; + r_sdhi_call_callback(p_ctrl, &args); } } @@ -2630,18 +2689,63 @@ static void r_sdhi_transfer_end (sdhi_instance_ctrl_t * const p_ctrl) } /*******************************************************************************************************************//** - * Close transfer driver, clear transfer data, and disable transfer in the SDHI peripheral. + * Calls user callback * * @param[in] p_ctrl Pointer to the instance control block. * @param[in] p_args Pointer to callback arguments with event and response set. **********************************************************************************************************************/ -static void sdhi_call_callback (sdhi_instance_ctrl_t * p_ctrl, sdmmc_callback_args_t * p_args) +static void r_sdhi_call_callback (sdhi_instance_ctrl_t * p_ctrl, sdmmc_callback_args_t * p_args) { /* Call user callback if provided, if an event was determined, and if the driver is initialized. */ - if ((NULL != p_ctrl->p_cfg->p_callback) && (p_ctrl->initialized) && (0U != p_args->event)) + if (NULL != p_ctrl->p_callback) { - p_args->p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(p_args); + sdmmc_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. */ + sdmmc_callback_args_t * p_args_memory = p_ctrl->p_callback_memory; + if (NULL == p_args_memory) + { + /* Use provided args struct on stack */ + p_args_memory = p_args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args_memory; + + /* Copy the stacked args to callback memory */ + *p_args_memory = *p_args; + } + + p_args_memory->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (!cmse_is_nsfptr(p_ctrl->p_callback)) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args_memory); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + sdhi_prv_ns_callback p_callback = (sdhi_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args_memory); + } + +#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_memory); +#endif + + if (NULL != p_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_ctrl->p_callback_memory = args; + } } } @@ -2661,7 +2765,10 @@ void sdhimmc_accs_isr (void) r_sdhi_access_irq_process(p_ctrl, &args); /* Call user callback */ - sdhi_call_callback(p_ctrl, &args); + if ((p_ctrl->initialized) && (0U != args.event)) + { + r_sdhi_call_callback(p_ctrl, &args); + } /* Clear the IR flag in the ICU */ /* Clearing the IR bit must be done after clearing the interrupt source in the the peripheral */ @@ -2702,12 +2809,9 @@ void sdhimmc_card_isr (void) info1.word &= SDHI_PRV_SDHI_INFO1_CARD_MASK; p_ctrl->p_reg->SD_INFO1 = (~info1.word); - /* Call user callback if provided, if an event was determined, and if the driver is initialized. */ - if (NULL != p_ctrl->p_cfg->p_callback) - { - args.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&args); - } + /* Call user callback if provided */ + args.p_context = p_ctrl->p_context; + r_sdhi_call_callback(p_ctrl, &args); /* Clear the IR flag in the ICU */ /* Clearing the IR bit must be done after clearing the interrupt source in the the peripheral */ @@ -2768,7 +2872,10 @@ void sdhimmc_sdio_isr (void) } /* Call user callback */ - sdhi_call_callback(p_ctrl, &args); + if (p_ctrl->initialized) + { + r_sdhi_call_callback(p_ctrl, &args); + } /* Clear interrupt flags */ p_ctrl->p_reg->SDIO_INFO1 = SDHI_PRV_SDIO_INFO1_IRQ_CLEAR; diff --git a/ra/fsp/src/r_spi/r_spi.c b/ra/fsp/src/r_spi/r_spi.c index b66fb0c91..4426f349e 100644 --- a/ra/fsp/src/r_spi/r_spi.c +++ b/ra/fsp/src/r_spi/r_spi.c @@ -79,6 +79,11 @@ /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile spi_prv_ns_callback)(spi_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile spi_prv_ns_callback)(spi_callback_args_t * p_args); +#endif /* Frame data length */ typedef enum e_spi_spcmd_bit_length @@ -105,6 +110,7 @@ static fsp_err_t r_spi_write_read_common(spi_ctrl_t * const p_api_ctrl, static void r_spi_receive(spi_instance_ctrl_t * p_ctrl); static void r_spi_transmit(spi_instance_ctrl_t * p_ctrl); +static void r_spi_call_callback(spi_instance_ctrl_t * p_ctrl, spi_event_t event); /*********************************************************************************************************************** * ISR prototypes @@ -134,12 +140,13 @@ static const fsp_version_t module_version = /* SPI implementation of SPI interface. */ const spi_api_t g_spi_on_spi = { - .open = R_SPI_Open, - .read = R_SPI_Read, - .write = R_SPI_Write, - .writeRead = R_SPI_WriteRead, - .close = R_SPI_Close, - .versionGet = R_SPI_VersionGet + .open = R_SPI_Open, + .read = R_SPI_Read, + .write = R_SPI_Write, + .writeRead = R_SPI_WriteRead, + .close = R_SPI_Close, + .versionGet = R_SPI_VersionGet, + .callbackSet = R_SPI_CallbackSet }; /*******************************************************************************************************************//** @@ -227,7 +234,14 @@ fsp_err_t R_SPI_Open (spi_ctrl_t * p_api_ctrl, spi_cfg_t const * const p_cfg) FSP_ERROR_RETURN(FSP_SUCCESS == err, err); /* Get the register address of the channel. */ - p_ctrl->p_cfg = p_cfg; + 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; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif + p_ctrl->p_regs = SPI_REG(p_ctrl->p_cfg->channel); /* Configure hardware registers according to the r_spi_api configuration structure. */ @@ -309,6 +323,41 @@ fsp_err_t R_SPI_WriteRead (spi_ctrl_t * const p_api_ctrl, return r_spi_write_read_common(p_api_ctrl, p_src, p_dest, length, bit_width); } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements spi_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. + **********************************************************************************************************************/ +fsp_err_t R_SPI_CallbackSet (spi_ctrl_t * const p_api_ctrl, + void ( * p_callback)(spi_callback_args_t *), + void const * const p_context, + spi_callback_args_t * const p_callback_memory) +{ + spi_instance_ctrl_t * p_ctrl = (spi_instance_ctrl_t *) p_api_ctrl; + +#if (SPI_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SPI_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * This function manages the closing of a channel by the following task. Implements @ref spi_api_t::close. * @@ -649,6 +698,10 @@ static void r_spi_hw_config (spi_instance_ctrl_t * p_ctrl) p_ctrl->p_regs->SPCR2 = (uint8_t) spcr2; p_ctrl->p_regs->SPCMD[0] = (uint16_t) spcmd0; p_ctrl->p_regs->SPDCR2 = (uint8_t) spdcr2; + +#if BSP_FEATURE_SPI_HAS_SPCR3 == 1 + p_ctrl->p_regs->SPCR3 = R_SPI0_SPCR3_CENDIE_Msk; +#endif } /*******************************************************************************************************************//** @@ -940,6 +993,61 @@ static void r_spi_transmit (spi_instance_ctrl_t * p_ctrl) p_ctrl->tx_count = tx_count + 1; } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to SPI instance control block + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_spi_call_callback (spi_instance_ctrl_t * p_ctrl, spi_event_t event) +{ + spi_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. */ + spi_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->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + spi_prv_ns_callback p_callback = (spi_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 data is loaded into SPI data register from the shift register. **********************************************************************************************************************/ @@ -1040,14 +1148,8 @@ void spi_tei_isr (void) /* Disable the SPI Transfer. */ p_ctrl->p_regs->SPCR_b.SPE = 0; - /* Setup callback args. */ - spi_callback_args_t spi_cb_data; - spi_cb_data.channel = p_ctrl->p_cfg->channel; - spi_cb_data.event = SPI_EVENT_TRANSFER_COMPLETE; - spi_cb_data.p_context = p_ctrl->p_cfg->p_context; - /* Signal that a transfer has completed. */ - p_ctrl->p_cfg->p_callback(&spi_cb_data); + r_spi_call_callback(p_ctrl, SPI_EVENT_TRANSFER_COMPLETE); } /* Restore context if RTOS is used */ @@ -1068,11 +1170,6 @@ void spi_eri_isr (void) /* Disable the SPI Transfer. */ p_ctrl->p_regs->SPCR_b.SPE = 0; - /* Setup callback args. */ - spi_callback_args_t spi_cb_data; - spi_cb_data.channel = p_ctrl->p_cfg->channel; - spi_cb_data.p_context = p_ctrl->p_cfg->p_context; - /* Read the status register. */ uint8_t status = p_ctrl->p_regs->SPSR; @@ -1082,15 +1179,13 @@ void spi_eri_isr (void) /* Check if the error is a Parity Error. */ if (R_SPI0_SPSR_PERF_Msk & status) { - spi_cb_data.event = SPI_EVENT_ERR_PARITY; - p_ctrl->p_cfg->p_callback(&spi_cb_data); + r_spi_call_callback(p_ctrl, SPI_EVENT_ERR_PARITY); } /* Check if the error is a Receive Buffer Overflow Error. */ if (R_SPI0_SPSR_OVRF_Msk & status) { - spi_cb_data.event = SPI_EVENT_ERR_READ_OVERFLOW; - p_ctrl->p_cfg->p_callback(&spi_cb_data); + r_spi_call_callback(p_ctrl, SPI_EVENT_ERR_READ_OVERFLOW); } /* Check if the error is a Mode Fault Error. */ @@ -1099,8 +1194,7 @@ void spi_eri_isr (void) /* Check if the error is a Transmit Buffer Underflow Error. */ if (R_SPI0_SPSR_UDRF_Msk & status) { - spi_cb_data.event = SPI_EVENT_ERR_MODE_UNDERRUN; - p_ctrl->p_cfg->p_callback(&spi_cb_data); + r_spi_call_callback(p_ctrl, SPI_EVENT_ERR_MODE_UNDERRUN); } } diff --git a/ra/fsp/src/r_ssi/r_ssi.c b/ra/fsp/src/r_ssi/r_ssi.c index 4ee792167..e07d9c8e8 100644 --- a/ra/fsp/src/r_ssi/r_ssi.c +++ b/ra/fsp/src/r_ssi/r_ssi.c @@ -78,6 +78,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile i2s_prv_ns_callback)(i2s_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile i2s_prv_ns_callback)(i2s_callback_args_t * p_args); +#endif + /* SSI communication direction */ typedef enum e_ssi_dir { @@ -104,6 +110,8 @@ void ssi_txi_isr(void); void ssi_rxi_isr(void); void ssi_int_isr(void); +static void r_ssi_call_callback(ssi_instance_ctrl_t * p_ctrl, i2s_event_t event); + /* ISR subroutines */ static void r_ssi_tx_fifo_write(ssi_instance_ctrl_t * p_instance_ctrl, uint32_t stages_to_write); static void r_ssi_rx_fifo_read(ssi_instance_ctrl_t * p_instance_ctrl, uint32_t stages_to_read); @@ -155,15 +163,16 @@ static const fsp_version_t g_version = /*LDRA_INSPECTED 27 D This structure must be accessible in user code. It cannot be static. */ const i2s_api_t g_i2s_on_ssi = { - .open = R_SSI_Open, - .stop = R_SSI_Stop, - .write = R_SSI_Write, - .read = R_SSI_Read, - .writeRead = R_SSI_WriteRead, - .mute = R_SSI_Mute, - .statusGet = R_SSI_StatusGet, - .close = R_SSI_Close, - .versionGet = R_SSI_VersionGet + .open = R_SSI_Open, + .stop = R_SSI_Stop, + .write = R_SSI_Write, + .read = R_SSI_Read, + .writeRead = R_SSI_WriteRead, + .mute = R_SSI_Mute, + .statusGet = R_SSI_StatusGet, + .close = R_SSI_Close, + .versionGet = R_SSI_VersionGet, + .callbackSet = R_SSI_CallbackSet, }; /*******************************************************************************************************************//** @@ -220,9 +229,14 @@ fsp_err_t R_SSI_Open (i2s_ctrl_t * const p_ctrl, i2s_cfg_t const * const p_cfg) FSP_ERR_IP_CHANNEL_NOT_PRESENT); #endif +#if BSP_FEATURE_SSI_VALID_CHANNEL_MASK == 1 + uint32_t base_address = (uint32_t) R_SSI0; +#else + /* Calculate base address for registers on this channel. */ - uint32_t base_address = (uint32_t) R_SSI0 + (p_cfg->channel * ((uint32_t) R_SSI1 - (uint32_t) R_SSI0)); - R_SSI0_Type * p_reg = (R_SSI0_Type *) base_address; + uint32_t base_address = (uint32_t) R_SSI0 + (p_cfg->channel * ((uint32_t) R_SSI1 - (uint32_t) R_SSI0)); +#endif + R_SSI0_Type * p_reg = (R_SSI0_Type *) base_address; /* Determine how to access the FIFO (1 byte, 2 byte, or 4 byte access). */ transfer_size_t fifo_access_size = TRANSFER_SIZE_4_BYTE; @@ -294,6 +308,15 @@ fsp_err_t R_SSI_Open (i2s_ctrl_t * const p_ctrl, i2s_cfg_t const * const p_cfg) * procedure)" of the RA6M3 manual R01UH0886EJ0100. This function follows this procedure except for enabling * interrupts and enabling communication, which are done before communication begins. */ +#if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_instance_ctrl->callback_is_secure = true; +#endif + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + /* Enable PCLK to SSIE. */ R_BSP_MODULE_START(FSP_IP_SSI, p_instance_ctrl->p_cfg->channel); @@ -627,6 +650,44 @@ fsp_err_t R_SSI_VersionGet (fsp_version_t * const p_version) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements i2s_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. + **********************************************************************************************************************/ +fsp_err_t R_SSI_CallbackSet (i2s_ctrl_t * const p_api_ctrl, + void ( * p_callback)(i2s_callback_args_t *), + void const * const p_context, + i2s_callback_args_t * const p_callback_memory) +{ + ssi_instance_ctrl_t * p_ctrl = (ssi_instance_ctrl_t *) p_api_ctrl; + +#if (SSI_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SSI_PRV_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + + /* Store callback and context */ + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * @} (end addtogroup R_SSI) **********************************************************************************************************************/ @@ -1085,6 +1146,60 @@ static void r_ssi_rx_fifo_read (ssi_instance_ctrl_t * p_instance_ctrl, uint32_t } } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to I2S instance control block + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_ssi_call_callback (ssi_instance_ctrl_t * p_ctrl, i2s_event_t event) +{ + i2s_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. */ + i2s_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->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* 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. */ + i2s_prv_ns_callback p_callback = (i2s_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; + } +} + /*******************************************************************************************************************//** * Transmit ISR. Calls callback when transmission is complete. Fills FIFO if transfer interface is not used. **********************************************************************************************************************/ @@ -1099,25 +1214,23 @@ void ssi_txi_isr (void) /* Clear the IR flag in the ICU */ R_BSP_IrqStatusClear(irq); - bool call_callback = true; - i2s_callback_args_t args; + bool call_callback = true; + if (NULL != p_instance_ctrl->p_tx_src) { - /* If transfer is not used, write data. */ - r_ssi_fifo_write(p_instance_ctrl); - /* If there is more data to send, don't call the callback. */ if (p_instance_ctrl->tx_src_samples > 0) { call_callback = false; } + + /* If transfer is not used, write data. */ + r_ssi_fifo_write(p_instance_ctrl); } if (call_callback) { - args.event = I2S_EVENT_TX_EMPTY; - args.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&args); + r_ssi_call_callback(p_instance_ctrl, I2S_EVENT_TX_EMPTY); } /* Restore context if RTOS is used */ @@ -1138,8 +1251,8 @@ void ssi_rxi_isr (void) /* Clear the IR flag in the ICU */ R_BSP_IrqStatusClear(irq); - bool call_callback = true; - i2s_callback_args_t args; + bool call_callback = true; + if (NULL != p_instance_ctrl->p_rx_dest) { /* If transfer is not used, read data into the destination buffer. */ @@ -1154,9 +1267,7 @@ void ssi_rxi_isr (void) if (call_callback) { - args.event = I2S_EVENT_RX_FULL; - args.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&args); + r_ssi_call_callback(p_instance_ctrl, I2S_EVENT_RX_FULL); } /* Restore context if RTOS is used */ @@ -1190,10 +1301,7 @@ void ssi_int_isr (void) p_instance_ctrl->p_reg->SSICR_b.IIEN = 0U; /* If peripheral is idle, call idle callback. */ - i2s_callback_args_t args; - args.event = I2S_EVENT_IDLE; - args.p_context = p_instance_ctrl->p_cfg->p_context; - p_instance_ctrl->p_cfg->p_callback(&args); + r_ssi_call_callback(p_instance_ctrl, I2S_EVENT_IDLE); } else { diff --git a/ra/fsp/src/r_usb_basic/src/driver/inc/r_usb_basic_define.h b/ra/fsp/src/r_usb_basic/src/driver/inc/r_usb_basic_define.h index 750cee838..e0b9bcfe6 100644 --- a/ra/fsp/src/r_usb_basic/src/driver/inc/r_usb_basic_define.h +++ b/ra/fsp/src/r_usb_basic/src/driver/inc/r_usb_basic_define.h @@ -212,7 +212,13 @@ /* USB module definition */ #define USB_M0 (R_USB_FS0) -#define USB_M1 (R_USB_HS0) +#if defined(BSP_MCU_GROUP_RA6M3) /* High-speed module */ + #define USB_M1 (R_USB_HS0) +#else /* defined(BSP_MCU_GROUP_RA6M3) */ /* Full-speed module*/ + #define R_USB_HS0_BASE 0x40060000 + #define R_USB_HS0 ((R_USB_HS0_Type *) R_USB_HS0_BASE) + #define USB_M1 (R_USB_HS0) +#endif /* defined(BSP_MCU_GROUP_RA6M3) */ /* FIFO port register default access size */ #define USB0_CFIFO_MBW (USB_MBW_16) diff --git a/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_patapi.h b/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_patapi.h index 169b4a02f..8ab1f8cbb 100644 --- a/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_patapi.h +++ b/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_patapi.h @@ -106,7 +106,7 @@ typedef enum USB_ATAPI_MODE_SENSE10_ERR_RCVR_P_SIZE = 20, USB_ATAPI_MODE_SENSE10_CASHING_P_SIZE = 20, USB_ATAPI_MODE_SENSE10_CAP_P_SIZE = 20, - USB_ATAPI_MODE_SENSE10_OP_CMD_SIZE = 8, + USB_ATAPI_MODE_SENSE10_OP_CMD_SIZE = 20, USB_ATAPI_MODE_SENSE10_ALL_P_SIZE = 44, USB_ATAPI_MODE_SENSE10_P_CODE_ERR_SIZE = 8, USB_ATAPI_DATA_SIZE_0 = 0 diff --git a/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_pmsc_driver.h b/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_pmsc_driver.h index f0b94cf9d..f1f620d8a 100644 --- a/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_pmsc_driver.h +++ b/ra/fsp/src/r_usb_pmsc/src/inc/r_usb_pmsc_driver.h @@ -82,11 +82,12 @@ typedef enum { /* Generic ioctl command (defined for compatibility with FatFs) */ - USB_MEDIA_IOCTL_SYNC = 0, /* Flush media write cache. */ - USB_MEDIA_IOCTL_GET_NUM_BLOCKS = 1, /* For use un calculating media size. */ - USB_MEDIA_IOCTL_GET_SECTOR_SIZE = 2, /* Get sector size (for multiple sector size. (_MAX_SS >= 1024)) */ - USB_MEDIA_IOCTL_GET_BLOCK_SIZE = 3, /* Get number of byes per block. */ - USB_MEDIA_IOCTL_CTRL_ERASE_SECTOR = 4, /* Force erased a sector group. (for only _USE_ERASE) */ + USB_MEDIA_IOCTL_SYNC = 0, /* Flush media write cache. */ + USB_MEDIA_IOCTL_GET_NUM_BLOCKS = 1, /* For use un calculating media size. */ + USB_MEDIA_IOCTL_GET_SECTOR_SIZE = 2, /* Get sector size (for multiple sector size. (_MAX_SS >= 1024)) */ + USB_MEDIA_IOCTL_GET_BLOCK_SIZE = 3, /* Get number of byes per block. */ + USB_MEDIA_IOCTL_CTRL_ERASE_SECTOR = 4, /* Force erased a sector group. (for only _USE_ERASE) */ + USB_MEDIA_IOCTL_GET_WRITE_PROTECT_INFO = 5, /* Get write protect sinfo. */ /* Add more IOCTL commands starting below here. */ } usb_ioctl_cmd_t; diff --git a/ra/fsp/src/r_usb_pmsc/src/r_media_driver_api.c b/ra/fsp/src/r_usb_pmsc/src/r_media_driver_api.c index b80edaa31..a21c45864 100644 --- a/ra/fsp/src/r_usb_pmsc/src/r_media_driver_api.c +++ b/ra/fsp/src/r_usb_pmsc/src/r_media_driver_api.c @@ -239,6 +239,8 @@ fsp_err_t r_usb_pmsc_media_write (uint8_t const * const p_wbuffer, uint32_t cons ***********************************************************************************************************************/ void r_usb_pmsc_media_ioctl (usb_ioctl_cmd_t ioctl_cmd, uint32_t * ioctl_data) { + rm_block_media_info_t info; + switch (ioctl_cmd) { case USB_MEDIA_IOCTL_GET_NUM_BLOCKS: @@ -261,6 +263,13 @@ void r_usb_pmsc_media_ioctl (usb_ioctl_cmd_t ioctl_cmd, uint32_t * ioctl_data) break; } + case USB_MEDIA_IOCTL_GET_WRITE_PROTECT_INFO: + { + gp_block_media_instance->p_api->infoGet(gp_block_media_instance->p_ctrl, &info); + *ioctl_data = (uint32_t) info.write_protected; + break; + } + default: { break; diff --git a/ra/fsp/src/r_usb_pmsc/src/r_usb_atapi_driver.c b/ra/fsp/src/r_usb_pmsc/src/r_usb_atapi_driver.c index 41541cc92..f964b3d41 100644 --- a/ra/fsp/src/r_usb_pmsc/src/r_usb_atapi_driver.c +++ b/ra/fsp/src/r_usb_pmsc/src/r_usb_atapi_driver.c @@ -45,6 +45,7 @@ #define USB_VALUE_RMB (0x80) #define USB_VALUE_MASK_FFH (0xFF) #define USB_VALUE_32 (32) +#define USB_VALUE_ALL_PAGE_LENGTH (0x24) /*********************************************************************************************************************** * Private global variables and functions @@ -145,7 +146,7 @@ static const uint8_t g_usb_atapi_rs_tbl[USB_ATAPI_REQUEST_SENSE_SIZE] = }; /* Mode Sense data (Mode Parameter) */ -static const uint8_t g_usb_atapi_ms_mp_tbl[USB_ATAPI_MODE_SENSE10_MODE_PARAM_SIZE] = +static uint8_t g_usb_atapi_ms_mp_tbl[USB_ATAPI_MODE_SENSE10_MODE_PARAM_SIZE] = { 0x00, /* [0]Mode Data Length */ 0x00, /* [1]Mode Data Length */ @@ -158,7 +159,7 @@ static const uint8_t g_usb_atapi_ms_mp_tbl[USB_ATAPI_MODE_SENSE10_MODE_PARAM_SIZ }; /* Mode Sense data (ReadWrite Error Recovery Page 12byte) */ -static const uint8_t g_usb_atapi_ms_rcvr_tbl[USB_ATAPI_MODE_SENSE10_ERR_RCVR_P_SIZE] = +static uint8_t g_usb_atapi_ms_rcvr_tbl[USB_ATAPI_MODE_SENSE10_ERR_RCVR_P_SIZE] = { /* Mode Parameter List */ 0x00, /* [0]Mode Data Length */ @@ -186,7 +187,7 @@ static const uint8_t g_usb_atapi_ms_rcvr_tbl[USB_ATAPI_MODE_SENSE10_ERR_RCVR_P_S }; /* Mode Sense data (Cashing Page 12byte) */ -static const uint8_t g_usb_atapi_ms_cash_tbl[USB_ATAPI_MODE_SENSE10_CASHING_P_SIZE] = +static uint8_t g_usb_atapi_ms_cash_tbl[USB_ATAPI_MODE_SENSE10_CASHING_P_SIZE] = { /* Mode Parameter List */ 0x00, /* [0]Mode Data Length */ @@ -213,7 +214,7 @@ static const uint8_t g_usb_atapi_ms_cash_tbl[USB_ATAPI_MODE_SENSE10_CASHING_P_SI }; /* Mode Sense data (Removable Block Access Capacities Page 12byte) */ -static const uint8_t g_usb_atapi_ms_capa_tbl[USB_ATAPI_MODE_SENSE10_CAP_P_SIZE] = +static uint8_t g_usb_atapi_ms_capa_tbl[USB_ATAPI_MODE_SENSE10_CAP_P_SIZE] = { /* Mode Parameter List */ 0x00, /* [0]Mode Data Length */ @@ -239,25 +240,39 @@ static const uint8_t g_usb_atapi_ms_capa_tbl[USB_ATAPI_MODE_SENSE10_CAP_P_SIZE] 0x00 /* [11]Reserved */ }; -/* Mode Sense data (Timer & Protect Page) */ -static const uint8_t g_usb_atapi_ms_op_cmd_tbl[USB_ATAPI_MODE_SENSE10_OP_CMD_SIZE] = +/* Mode Sense data (Timer & Protect Page 8byte) */ +static uint8_t g_usb_atapi_ms_op_cmd_tbl[USB_ATAPI_MODE_SENSE10_OP_CMD_SIZE] = { + /* Mode Parameter List */ + 0x00, /* [0]Mode Data Length */ + 0x08, /* [1]Mode Data Length */ + 0x00, /* [2]Medium Type Code(00h-FFh Vendor Specific) */ + 0x00, /* [3]b7:WP(Write Protect), b6-b0:Reserved */ + 0x00, /* [4]Reserved */ + 0x00, /* [5]Reserved */ + 0x00, /* [6]Reserved */ + 0x00, /* [7]Reserved */ + /* Page(Timer & Protect Page 8byte) */ 0x1C, /* [0]b7:PS, b6:Reserved, b5-b0:Page Code(1Ch) */ - 0x06, /* [1]Page Length(06h) */ + 0x0A, /* [1]Page Length(06h) */ 0x00, /* [2]Reserved */ 0x00, /* [3]b7-b4:Reserved, b3-b0:Inactivity Time Multiplier */ 0x00, /* [4]b7-b2:Reserved, b2:WCE, b1:DISP, b0:SWPP */ 0x00, /* [5]Reserved */ 0x00, /* [6]Reserved */ + 0x00, /* [7]Reserved */ + 0x00, /* [4]b7-b2:Reserved, b2:WCE, b1:DISP, b0:SWPP */ + 0x00, /* [5]Reserved */ + 0x00, /* [6]Reserved */ 0x00 /* [7]Reserved */ }; /* Mode Sense data (All Page) */ -static const uint8_t g_usb_atapi_ms_all_tbl[USB_ATAPI_MODE_SENSE10_ALL_P_SIZE] = +static uint8_t g_usb_atapi_ms_all_tbl[USB_ATAPI_MODE_SENSE10_ALL_P_SIZE] = { /* Mode Parameter List */ 0x00, /* [0]Mode Data Length */ - 0x24, /* [1]Mode Data Length */ + USB_VALUE_ALL_PAGE_LENGTH, /* [1]Mode Data Length */ 0x00, /* [2]Medium Type Code(00h-FFh Vendor Specific) */ 0x00, /* [3]b7:WP(Write Protect), b6-b0:Reserved */ 0x00, /* [4]Reserved */ @@ -307,7 +322,7 @@ static const uint8_t g_usb_atapi_ms_all_tbl[USB_ATAPI_MODE_SENSE10_ALL_P_SIZE] = }; /* Mode Sense data (Page code error) */ -static const uint8_t g_usb_atapi_ms_err_tbl[USB_ATAPI_MODE_SENSE10_P_CODE_ERR_SIZE] = +static uint8_t g_usb_atapi_ms_err_tbl[USB_ATAPI_MODE_SENSE10_P_CODE_ERR_SIZE] = { 0x00, /* [0]Mode Data Length */ 0x00, /* [1]Mode Data Length */ @@ -894,61 +909,71 @@ void pmsc_atapi_command_processing (uint8_t * cbw, uint16_t usb_result, usb_cb_t static void pmsc_atapi_get_mode_sense10_data (uint8_t page_code, uint32_t * size, uint8_t ** buff) { uint8_t * p_data; + uint32_t write_protect = 0; + + r_usb_pmsc_media_ioctl(USB_MEDIA_IOCTL_GET_WRITE_PROTECT_INFO, &write_protect); switch (page_code) { case 0x00: /* Mode Parameter Header */ { - *size = USB_ATAPI_MODE_SENSE10_MODE_PARAM_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_mp_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_MODE_PARAM_SIZE; + g_usb_atapi_ms_mp_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_mp_tbl[0]; break; } case 0x01: /* ReadWrite Error Recovery Page */ { - *size = USB_ATAPI_MODE_SENSE10_ERR_RCVR_P_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_rcvr_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_ERR_RCVR_P_SIZE; + g_usb_atapi_ms_rcvr_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_rcvr_tbl[0]; break; } case 0x08: /* Cashing Page */ { - *size = USB_ATAPI_MODE_SENSE10_CASHING_P_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_cash_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_CASHING_P_SIZE; + g_usb_atapi_ms_cash_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_cash_tbl[0]; break; } case 0x1B: /* Removable Block Access Capacities Page */ { - *size = USB_ATAPI_MODE_SENSE10_CAP_P_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_capa_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_CAP_P_SIZE; + g_usb_atapi_ms_capa_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_capa_tbl[0]; break; } case 0x1C: /* Timer & Protect Page */ { - *size = USB_ATAPI_MODE_SENSE10_OP_CMD_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_op_cmd_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_OP_CMD_SIZE; + g_usb_atapi_ms_op_cmd_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_op_cmd_tbl[0]; break; } case USB_VALUE_MODE_SENSE10_ALL_PAGE: /* All Page */ { - *size = USB_ATAPI_MODE_SENSE10_ALL_P_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_all_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_ALL_P_SIZE; + g_usb_atapi_ms_all_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_all_tbl[0]; break; } default: { - *size = USB_ATAPI_MODE_SENSE10_P_CODE_ERR_SIZE; - p_data = (uint8_t *) &g_usb_atapi_ms_err_tbl[0]; + *size = USB_ATAPI_MODE_SENSE10_P_CODE_ERR_SIZE; + g_usb_atapi_ms_err_tbl[3] |= (uint8_t) (write_protect << 0x07); + p_data = &g_usb_atapi_ms_err_tbl[0]; break; } diff --git a/ra/fsp/src/r_wdt/r_wdt.c b/ra/fsp/src/r_wdt/r_wdt.c index f16e1655e..00f04f45a 100644 --- a/ra/fsp/src/r_wdt/r_wdt.c +++ b/ra/fsp/src/r_wdt/r_wdt.c @@ -101,6 +101,12 @@ * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile wdt_prv_ns_callback)(wdt_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile wdt_prv_ns_callback)(wdt_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -166,7 +172,7 @@ static const uint8_t g_wdt_division_lookup[] = }; /** Global pointer to control structure for use by the NMI callback. */ -static wdt_instance_ctrl_t * gp_wdt_ctrl = NULL; +static volatile wdt_instance_ctrl_t * gp_wdt_ctrl = NULL; /*********************************************************************************************************************** * Global variables @@ -182,6 +188,7 @@ const wdt_api_t g_wdt_on_wdt = .statusClear = R_WDT_StatusClear, .counterGet = R_WDT_CounterGet, .timeoutGet = R_WDT_TimeoutGet, + .callbackSet = R_WDT_CallbackSet, .versionGet = R_WDT_VersionGet, }; @@ -207,6 +214,7 @@ const wdt_api_t g_wdt_on_wdt = * @retval FSP_SUCCESS WDT successfully configured. * @retval FSP_ERR_ASSERTION Null pointer, or one or more configuration options is invalid. * @retval FSP_ERR_ALREADY_OPEN Module is already open. This module can only be opened once. + * @retval FSP_ERR_INVALID_STATE The security state of the NMI and the module do not match. * * @note In auto start mode the only valid configuration option is for registering the callback for the NMI ISR if * NMI output has been selected. @@ -231,6 +239,7 @@ fsp_err_t R_WDT_Open (wdt_ctrl_t * const p_ctrl, wdt_cfg_t const * const p_cfg) /* Register callback with BSP NMI ISR. */ r_wdt_nmi_initialize(p_instance_ctrl, p_cfg); } + #else /* Eliminate toolchain warning when NMI output is not being used. */ @@ -473,6 +482,42 @@ fsp_err_t R_WDT_CounterGet (wdt_ctrl_t * const p_ctrl, uint32_t * const p_count) return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements wdt_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. + **********************************************************************************************************************/ +fsp_err_t R_WDT_CallbackSet (wdt_ctrl_t * const p_ctrl, + void ( * p_callback)(wdt_callback_args_t *), + void const * const p_context, + wdt_callback_args_t * const p_callback_memory) +{ + wdt_instance_ctrl_t * p_instance_ctrl = (wdt_instance_ctrl_t *) p_ctrl; + +#if WDT_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(WDT_OPEN == p_instance_ctrl->wdt_open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + + /* cmse_check_address_range returns NULL if p_callback is located in secure memory */ + p_instance_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); +#endif + + p_instance_ctrl->p_callback = p_callback; + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Return WDT HAL driver version. Implements @ref wdt_api_t::versionGet. * @@ -512,9 +557,49 @@ static void r_wdt_nmi_internal_callback (bsp_grp_irq_t irq) { if (NULL != gp_wdt_ctrl->p_callback) { - wdt_callback_args_t p_args; - p_args.p_context = gp_wdt_ctrl->p_context; - gp_wdt_ctrl->p_callback(&p_args); + wdt_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. */ + wdt_callback_args_t * p_args = gp_wdt_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->p_context = gp_wdt_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (gp_wdt_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + gp_wdt_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. */ + wdt_prv_ns_callback p_callback = (wdt_prv_ns_callback) (gp_wdt_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. */ + gp_wdt_ctrl->p_callback(p_args); +#endif + if (NULL != gp_wdt_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *gp_wdt_ctrl->p_callback_memory = args; + } } } } @@ -554,8 +639,15 @@ static void r_wdt_nmi_initialize (wdt_instance_ctrl_t * const p_instance_ctrl, w /* NMI output mode. */ R_BSP_GroupIrqWrite(BSP_GRP_IRQ_WDT_ERROR, r_wdt_nmi_internal_callback); - p_instance_ctrl->p_callback = p_cfg->p_callback; - p_instance_ctrl->p_context = p_cfg->p_context; + + #if BSP_TZ_SECURE_BUILD + + /* If this is a secure build, the callback provided in p_cfg must be secure. */ + p_instance_ctrl->callback_is_secure = true; + #endif + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; /* Enable the WDT underflow/refresh error interrupt (will generate an NMI). NMIER bits cannot be cleared after reset, * so no need to read-modify-write. */ @@ -573,6 +665,7 @@ static void r_wdt_nmi_initialize (wdt_instance_ctrl_t * const p_instance_ctrl, w * @retval FSP_SUCCESS WDT successfully configured. * @retval FSP_ERR_ASSERTION Null pointer, or one or more configuration options is invalid. * @retval FSP_ERR_ALREADY_OPEN Module is already open. This module can only be opened once. + * @retval FSP_ERR_INVALID_STATE The security state of the NMI and the module do not match. **********************************************************************************************************************/ static fsp_err_t r_wdt_parameter_checking (wdt_instance_ctrl_t * const p_instance_ctrl, wdt_cfg_t const * const p_cfg) { @@ -583,6 +676,13 @@ static fsp_err_t r_wdt_parameter_checking (wdt_instance_ctrl_t * const p_instanc FSP_ASSERT(NULL != p_instance_ctrl); FSP_ERROR_RETURN(WDT_OPEN != p_instance_ctrl->wdt_open, FSP_ERR_ALREADY_OPEN); + /* Ensure this module is in the same security state as the NMI */ + #if defined(BSP_TZ_NONSECURE_BUILD) && BSP_TZ_NONSECURE_BUILD + FSP_ERROR_RETURN(SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk, FSP_ERR_INVALID_STATE); + #elif defined(BSP_TZ_SECURE_BUILD) && BSP_TZ_SECURE_BUILD + FSP_ERROR_RETURN(!(SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk), FSP_ERR_INVALID_STATE); + #endif + /* Check timeout parameter is supported by WDT. */ /* Enum checking is done here because some enums in wdt_timeout_t are not supported by the WDT peripheral (they are @@ -605,6 +705,7 @@ static fsp_err_t r_wdt_parameter_checking (wdt_instance_ctrl_t * const p_instanc { FSP_ASSERT(NULL == p_cfg->p_callback); } + #else FSP_ASSERT(p_cfg->reset_control == WDT_RESET_CONTROL_RESET); #endif diff --git a/ra/fsp/src/rm_aws_pkcs11_pal/inc/rm_aws_pkcs11_pal.h b/ra/fsp/src/rm_aws_pkcs11_pal/inc/rm_aws_pkcs11_pal.h index f3d82bd1e..1d2a57789 100644 --- a/ra/fsp/src/rm_aws_pkcs11_pal/inc/rm_aws_pkcs11_pal.h +++ b/ra/fsp/src/rm_aws_pkcs11_pal/inc/rm_aws_pkcs11_pal.h @@ -32,6 +32,11 @@ #include #include +/* + * @brief Initialize the PAL. + */ +extern CK_RV PKCS11_PAL_Initialize(); + /* * @brief Save an object to storage. */ @@ -40,7 +45,7 @@ extern CK_OBJECT_HANDLE PKCS11_PAL_SaveObject(CK_ATTRIBUTE_PTR pxLabel, uint8_t /* * @brief Look up an object handle using it's label. */ -extern CK_OBJECT_HANDLE PKCS11_PAL_FindObject(uint8_t * pLabel, uint8_t usLength); +extern CK_OBJECT_HANDLE PKCS11_PAL_FindObject(uint8_t * pxLabel, uint8_t usLength); /* * @brief Get the value of an object. diff --git a/ra/fsp/src/rm_aws_pkcs11_pal/rm_aws_pkcs11_pal.c b/ra/fsp/src/rm_aws_pkcs11_pal/rm_aws_pkcs11_pal.c index 6de65efb0..b820b7546 100644 --- a/ra/fsp/src/rm_aws_pkcs11_pal/rm_aws_pkcs11_pal.c +++ b/ra/fsp/src/rm_aws_pkcs11_pal/rm_aws_pkcs11_pal.c @@ -44,6 +44,7 @@ #include #include +#include "rm_aws_pkcs11_pal.h" #include "r_flash_hp.h" #define FLASH_HP_DATA_BLOCK_NUM (1024U) @@ -180,29 +181,12 @@ const flash_cfg_t fsp_flash_cfg = // } /* - * @brief Save an object to storage. + * @brief Initialize the PAL. */ -extern CK_OBJECT_HANDLE PKCS11_PAL_SaveObject(CK_ATTRIBUTE_PTR pxLabel, uint8_t * pucData, uint32_t ulDataSize); - -/* - * @brief Look up an object handle using it's label. - */ -extern CK_OBJECT_HANDLE PKCS11_PAL_FindObject(uint8_t * pLabel, uint8_t usLength); - -/* - * @brief Get the value of an object. - * @note Buffers may be allocated by this call, and should be - * freed up by calling PKCS11_PAL_GetObjectValueCleanup(). - */ -extern CK_RV PKCS11_PAL_GetObjectValue(CK_OBJECT_HANDLE xHandle, - uint8_t ** ppucData, - uint32_t * pulDataSize, - CK_BBOOL * xIsPrivate); - -/** - * @brief Free the buffer allocated in PKCS11_PAL_GetObjectValue() (see PAL). - */ -extern void PKCS11_PAL_GetObjectValueCleanup(uint8_t * pucBuffer, uint32_t ulBufferSize); +CK_RV PKCS11_PAL_Initialize () +{ + return CKR_OK; +} /** * @brief Writes a file to local storage. @@ -352,14 +336,14 @@ CK_OBJECT_HANDLE PKCS11_PAL_SaveObject (CK_ATTRIBUTE_PTR pxLabel, uint8_t * pucD * Port-specific object handle retrieval. * * - * @param[in] pLabel Pointer to the label of the object + * @param[in] pxLabel Pointer to the label of the object * who's handle should be found. * @param[in] usLength The length of the label, in bytes. * * @return The object handle if operation was successful. * Returns eInvalidHandle if unsuccessful. */ -CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pLabel, uint8_t usLength) +CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pxLabel, uint8_t usLength) { /* Avoid compiler warnings about unused variables. */ FSP_PARAMETER_NOT_USED(usLength); @@ -369,7 +353,7 @@ CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pLabel, uint8_t usLength) for (i = 1; i < PKCS_OBJECT_HANDLES_NUM; i++) { - if (!strcmp((char *) &object_handle_dictionary[i], (char *) pLabel)) + if (!strcmp((char *) &object_handle_dictionary[i], (char *) pxLabel)) { if (pkcs_control_block_data_image.data.pkcs_data[i].status == PKCS_DATA_STATUS_REGISTERED) { diff --git a/ra/fsp/src/rm_aws_pkcs11_pal_littlefs/rm_aws_pkcs11_pal_littlefs.c b/ra/fsp/src/rm_aws_pkcs11_pal_littlefs/rm_aws_pkcs11_pal_littlefs.c index 45944e31a..aa0b7a232 100644 --- a/ra/fsp/src/rm_aws_pkcs11_pal_littlefs/rm_aws_pkcs11_pal_littlefs.c +++ b/ra/fsp/src/rm_aws_pkcs11_pal_littlefs/rm_aws_pkcs11_pal_littlefs.c @@ -81,6 +81,14 @@ uint8_t g_object_handle_dictionary[pkcs11configMAX_NUM_OBJECTS][pkcs11configMAX_ #endif }; +/* + * @brief Initialize the PAL. + */ +CK_RV PKCS11_PAL_Initialize () +{ + return CKR_OK; +} + /** * @brief Writes a file to local storage. * @@ -92,7 +100,7 @@ uint8_t g_object_handle_dictionary[pkcs11configMAX_NUM_OBJECTS][pkcs11configMAX_ * * @return The file handle of the object that was stored. */ -CK_OBJECT_HANDLE PKCS11_PAL_SaveObject (CK_ATTRIBUTE_PTR pxLabel, uint8_t * pucData, uint32_t ulDataSize) +CK_OBJECT_HANDLE PKCS11_PAL_SaveObject (CK_ATTRIBUTE_PTR pxLabel, CK_BYTE_PTR pucData, CK_ULONG ulDataSize) { CK_OBJECT_HANDLE xHandle = eInvalidHandle; @@ -144,14 +152,14 @@ CK_OBJECT_HANDLE PKCS11_PAL_SaveObject (CK_ATTRIBUTE_PTR pxLabel, uint8_t * pucD * Port-specific object handle retrieval. * * - * @param[in] pLabel Pointer to the label of the object + * @param[in] pxLabel Pointer to the label of the object * who's handle should be found. * @param[in] usLength The length of the label, in bytes. * * @return The object handle if operation was successful. * Returns eInvalidHandle if unsuccessful. */ -CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pLabel, uint8_t usLength) +CK_OBJECT_HANDLE PKCS11_PAL_FindObject (CK_BYTE_PTR pxLabel, CK_ULONG usLength) { /* Avoid compiler warnings about unused variables. */ FSP_PARAMETER_NOT_USED(usLength); @@ -161,11 +169,11 @@ CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pLabel, uint8_t usLength) for (i = 1; i < pkcs11configMAX_NUM_OBJECTS; i++) { - if (!strcmp((char *) &g_object_handle_dictionary[i], (char *) pLabel)) + if (!strcmp((char *) &g_object_handle_dictionary[i], (char *) pxLabel)) { lfs_file_t file; - int lfs_err = lfs_file_open(&RM_STDIO_LITTLEFS_CFG_LFS, &file, (char *) pLabel, LFS_O_RDONLY); + int lfs_err = lfs_file_open(&RM_STDIO_LITTLEFS_CFG_LFS, &file, (char *) pxLabel, LFS_O_RDONLY); if (LFS_ERR_OK == lfs_err) { @@ -194,7 +202,7 @@ CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pLabel, uint8_t usLength) * @param[in] xHandle Handle of the file to be read. * @param[out] ppucData Pointer to buffer for file data. * @param[out] pulDataSize Size (in bytes) of data located in file. - * @param[out] xIsPrivate Boolean indicating if value is private (CK_TRUE) + * @param[out] pIsPrivate Boolean indicating if value is private (CK_TRUE) * or exportable (CK_FALSE) * * @return CKR_OK if operation was successful. CKR_KEY_HANDLE_INVALID ifshit @@ -203,10 +211,10 @@ CK_OBJECT_HANDLE PKCS11_PAL_FindObject (uint8_t * pLabel, uint8_t usLength) * error. */ -BaseType_t PKCS11_PAL_GetObjectValue (CK_OBJECT_HANDLE xHandle, - uint8_t ** ppucData, - uint32_t * pulDataSize, - CK_BBOOL * xIsPrivate) +CK_RV PKCS11_PAL_GetObjectValue (CK_OBJECT_HANDLE xHandle, + CK_BYTE_PTR * ppucData, + CK_ULONG_PTR pulDataSize, + CK_BBOOL * pIsPrivate) { BaseType_t xReturn = CKR_FUNCTION_FAILED; CK_OBJECT_HANDLE xHandleStorage = xHandle; @@ -243,11 +251,11 @@ BaseType_t PKCS11_PAL_GetObjectValue (CK_OBJECT_HANDLE xHandle, if (xHandle == eAwsDevicePrivateKey) { - *xIsPrivate = CK_TRUE; + *pIsPrivate = CK_TRUE; } else { - *xIsPrivate = CK_FALSE; + *pIsPrivate = CK_FALSE; } } @@ -260,17 +268,17 @@ BaseType_t PKCS11_PAL_GetObjectValue (CK_OBJECT_HANDLE xHandle, /** * @brief Cleanup after PKCS11_GetObjectValue(). * - * @param[in] pucBuffer The buffer to free. + * @param[in] pucData The buffer to free. * (*ppucData from PKCS11_PAL_GetObjectValue()) - * @param[in] ulBufferSize The length of the buffer to free. + * @param[in] ulDataSize The length of the buffer to free. * (*pulDataSize from PKCS11_PAL_GetObjectValue()) */ -void PKCS11_PAL_GetObjectValueCleanup (uint8_t * pucBuffer, uint32_t ulBufferSize) +void PKCS11_PAL_GetObjectValueCleanup (CK_BYTE_PTR pucData, CK_ULONG ulDataSize) { /* Avoid compiler warnings about unused variables. */ - FSP_PARAMETER_NOT_USED(ulBufferSize); + FSP_PARAMETER_NOT_USED(ulDataSize); - vPortFree(pucBuffer); + vPortFree(pucData); } /*-----------------------------------------------------------*/ diff --git a/ra/fsp/src/rm_bl2_port/tfm_common_config.h b/ra/fsp/src/rm_bl2_port/tfm_common_config.h new file mode 100644 index 000000000..8df6b893e --- /dev/null +++ b/ra/fsp/src/rm_bl2_port/tfm_common_config.h @@ -0,0 +1,26 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef TFM_COMMON_CONFIG_H +#define TFM_COMMON_CONFIG_H + +#include "rm_bl2_cfg.h" + +#endif /* TFM_COMMON_CONFIG_H */ diff --git a/ra/fsp/src/rm_block_media_sdmmc/rm_block_media_sdmmc.c b/ra/fsp/src/rm_block_media_sdmmc/rm_block_media_sdmmc.c index 1d443f58d..7456df670 100644 --- a/ra/fsp/src/rm_block_media_sdmmc/rm_block_media_sdmmc.c +++ b/ra/fsp/src/rm_block_media_sdmmc/rm_block_media_sdmmc.c @@ -36,6 +36,13 @@ /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile rm_block_media_sdmmc_prv_ns_callback)(rm_block_media_callback_args_t * + p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile rm_block_media_sdmmc_prv_ns_callback)(rm_block_media_callback_args_t * + p_args); +#endif /*********************************************************************************************************************** * Private function prototypes @@ -61,15 +68,16 @@ static const fsp_version_t g_rm_block_media_sdmmc_version = const rm_block_media_api_t g_rm_block_media_on_sdmmc = { - .open = RM_BLOCK_MEDIA_SDMMC_Open, - .mediaInit = RM_BLOCK_MEDIA_SDMMC_MediaInit, - .read = RM_BLOCK_MEDIA_SDMMC_Read, - .write = RM_BLOCK_MEDIA_SDMMC_Write, - .erase = RM_BLOCK_MEDIA_SDMMC_Erase, - .infoGet = RM_BLOCK_MEDIA_SDMMC_InfoGet, - .statusGet = RM_BLOCK_MEDIA_SDMMC_StatusGet, - .close = RM_BLOCK_MEDIA_SDMMC_Close, - .versionGet = RM_BLOCK_MEDIA_SDMMC_VersionGet, + .open = RM_BLOCK_MEDIA_SDMMC_Open, + .mediaInit = RM_BLOCK_MEDIA_SDMMC_MediaInit, + .read = RM_BLOCK_MEDIA_SDMMC_Read, + .write = RM_BLOCK_MEDIA_SDMMC_Write, + .erase = RM_BLOCK_MEDIA_SDMMC_Erase, + .callbackSet = RM_BLOCK_MEDIA_SDMMC_CallbackSet, + .infoGet = RM_BLOCK_MEDIA_SDMMC_InfoGet, + .statusGet = RM_BLOCK_MEDIA_SDMMC_StatusGet, + .close = RM_BLOCK_MEDIA_SDMMC_Close, + .versionGet = RM_BLOCK_MEDIA_SDMMC_VersionGet, }; /*******************************************************************************************************************//** @@ -118,9 +126,15 @@ fsp_err_t RM_BLOCK_MEDIA_SDMMC_Open (rm_block_media_ctrl_t * const p_ctrl, rm_bl fsp_err_t err = p_sdmmc->p_api->open(p_sdmmc->p_ctrl, p_sdmmc->p_cfg); FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + /* Set callback and context pointers, if configured */ + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + /* This module is now open. */ - p_instance_ctrl->initialized = false; - p_instance_ctrl->open = RM_BLOCK_MEDIA_SDMMC_OPEN; + p_instance_ctrl->initialized = false; + p_instance_ctrl->write_protected = false; + p_instance_ctrl->open = RM_BLOCK_MEDIA_SDMMC_OPEN; return FSP_SUCCESS; } @@ -159,6 +173,7 @@ fsp_err_t RM_BLOCK_MEDIA_SDMMC_MediaInit (rm_block_media_ctrl_t * const p_ctrl) p_instance_ctrl->sector_count = device.sector_count; p_instance_ctrl->sector_size_bytes = device.sector_size_bytes; + p_instance_ctrl->write_protected = device.write_protected; p_instance_ctrl->initialized = true; return FSP_SUCCESS; @@ -282,6 +297,57 @@ fsp_err_t RM_BLOCK_MEDIA_SDMMC_Erase (rm_block_media_ctrl_t * const p_ctrl, return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref rm_block_media_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 RM_BLOCK_MEDIA_SDMMC_CallbackSet (rm_block_media_ctrl_t * const p_ctrl, + void ( * p_callback)( + rm_block_media_callback_args_t *), + void const * const p_context, + rm_block_media_callback_args_t * const p_callback_memory) +{ + rm_block_media_sdmmc_instance_ctrl_t * p_instance_ctrl = (rm_block_media_sdmmc_instance_ctrl_t *) p_ctrl; + +#if RM_BLOCK_MEDIA_SDMMC_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(RM_BLOCK_MEDIA_SDMMC_OPEN == p_instance_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 RM_BLOCK_MEDIA_SDMMC_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + rm_block_media_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_instance_ctrl->p_callback = callback_is_secure ? p_callback : + (void (*)(rm_block_media_callback_args_t *))cmse_nsfptr_create(p_callback); +#else + p_instance_ctrl->p_callback = p_callback; +#endif + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Provides driver status. Implements @ref rm_block_media_api_t::statusGet(). * @@ -338,6 +404,7 @@ fsp_err_t RM_BLOCK_MEDIA_SDMMC_InfoGet (rm_block_media_ctrl_t * const p_ctrl, rm p_info->sector_size_bytes = p_instance_ctrl->sector_size_bytes; p_info->num_sectors = p_instance_ctrl->sector_count; p_info->reentrant = false; + p_info->write_protected = p_instance_ctrl->write_protected; return FSP_SUCCESS; } @@ -394,6 +461,38 @@ fsp_err_t RM_BLOCK_MEDIA_SDMMC_VersionGet (fsp_version_t * const p_version) * @} (end addtogroup RM_BLOCK_MEDIA_SDMMC) **********************************************************************************************************************/ +/*******************************************************************************************************************//** + * Call configured callback function. + * + * @param[in] p_instance_ctrl Pointer to instance control block + * @param[in] p_args Pointer to callback arguments + **********************************************************************************************************************/ +static inline void rm_block_media_sdmmc_call_callback (rm_block_media_sdmmc_instance_ctrl_t * p_instance_ctrl, + rm_block_media_callback_args_t * p_args) +{ +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (!cmse_is_nsfptr(p_instance_ctrl->p_callback)) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_instance_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. */ + rm_block_media_sdmmc_prv_ns_callback p_callback = + (rm_block_media_sdmmc_prv_ns_callback) (p_instance_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_instance_ctrl->p_callback(p_args); +#endif +} + /*******************************************************************************************************************//** * Passes callback event from the lower layer driver to the user. * @@ -405,7 +504,7 @@ void rm_block_media_sdmmc_callback (sdmmc_callback_args_t * p_args) rm_block_media_callback_args_t args; memset(&args, 0U, sizeof(rm_block_media_callback_args_t)); - args.p_context = p_instance_ctrl->p_cfg->p_context; + args.p_context = p_instance_ctrl->p_context; if ((SDMMC_EVENT_ERASE_COMPLETE | SDMMC_EVENT_TRANSFER_COMPLETE) & p_args->event) { args.event |= RM_BLOCK_MEDIA_EVENT_OPERATION_COMPLETE; @@ -435,9 +534,34 @@ void rm_block_media_sdmmc_callback (sdmmc_callback_args_t * p_args) if (args.event) { - if (NULL != p_instance_ctrl->p_cfg->p_callback) + if (NULL != p_instance_ctrl->p_callback) { - p_instance_ctrl->p_cfg->p_callback(&args); + rm_block_media_callback_args_t args_stacked; + + /* 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. */ + rm_block_media_callback_args_t * p_args_memory = p_instance_ctrl->p_callback_memory; + if (NULL == p_args_memory) + { + /* Use provided args struct on stack */ + p_args_memory = &args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args_stacked = *p_args_memory; + + /* Copy the stacked args to callback memory */ + *p_args_memory = args; + } + + rm_block_media_sdmmc_call_callback(p_instance_ctrl, p_args_memory); + + if (NULL != p_instance_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = args_stacked; + } } } } diff --git a/ra/fsp/src/rm_block_media_usb/rm_block_media_usb.c b/ra/fsp/src/rm_block_media_usb/rm_block_media_usb.c index e1381eedf..bd449035e 100644 --- a/ra/fsp/src/rm_block_media_usb/rm_block_media_usb.c +++ b/ra/fsp/src/rm_block_media_usb/rm_block_media_usb.c @@ -70,15 +70,16 @@ static const fsp_version_t g_rm_block_media_usb_version = const rm_block_media_api_t g_rm_block_media_on_usb = { - .open = RM_BLOCK_MEDIA_USB_Open, - .mediaInit = RM_BLOCK_MEDIA_USB_MediaInit, - .read = RM_BLOCK_MEDIA_USB_Read, - .write = RM_BLOCK_MEDIA_USB_Write, - .erase = RM_BLOCK_MEDIA_USB_Erase, - .infoGet = RM_BLOCK_MEDIA_USB_InfoGet, - .statusGet = RM_BLOCK_MEDIA_USB_StatusGet, - .close = RM_BLOCK_MEDIA_USB_Close, - .versionGet = RM_BLOCK_MEDIA_USB_VersionGet, + .open = RM_BLOCK_MEDIA_USB_Open, + .mediaInit = RM_BLOCK_MEDIA_USB_MediaInit, + .read = RM_BLOCK_MEDIA_USB_Read, + .write = RM_BLOCK_MEDIA_USB_Write, + .erase = RM_BLOCK_MEDIA_USB_Erase, + .callbackSet = RM_BLOCK_MEDIA_USB_CallbackSet, + .infoGet = RM_BLOCK_MEDIA_USB_InfoGet, + .statusGet = RM_BLOCK_MEDIA_USB_StatusGet, + .close = RM_BLOCK_MEDIA_USB_Close, + .versionGet = RM_BLOCK_MEDIA_USB_VersionGet, }; /*******************************************************************************************************************//** @@ -350,6 +351,28 @@ fsp_err_t RM_BLOCK_MEDIA_USB_Erase (rm_block_media_ctrl_t * const p_ctrl, return FSP_SUCCESS; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * Implements @ref rm_block_media_api_t::callbackSet. + * + * @note This function is currently unsupported for Block Media over USB. + * + * @retval FSP_ERR_UNSUPPORTED CallbackSet is not currently supported for Block Media over USB. + **********************************************************************************************************************/ +fsp_err_t RM_BLOCK_MEDIA_USB_CallbackSet (rm_block_media_ctrl_t * const p_ctrl, + void ( * p_callback)( + rm_block_media_callback_args_t *), + void const * const p_context, + rm_block_media_callback_args_t * const p_callback_memory) +{ + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(p_callback); + FSP_PARAMETER_NOT_USED(p_context); + FSP_PARAMETER_NOT_USED(p_callback_memory); + + return FSP_ERR_UNSUPPORTED; +} + /*******************************************************************************************************************//** * Provides driver status. Implements @ref rm_block_media_api_t::statusGet(). * @@ -419,6 +442,7 @@ fsp_err_t RM_BLOCK_MEDIA_USB_InfoGet (rm_block_media_ctrl_t * const p_ctrl, rm_b p_info->sector_size_bytes = p_instance_ctrl->sector_size_bytes; p_info->num_sectors = p_instance_ctrl->sector_count; p_info->reentrant = false; + p_info->write_protected = false; return FSP_SUCCESS; } diff --git a/ra/fsp/src/rm_freertos_plus_tcp/NetworkInterface.c b/ra/fsp/src/rm_freertos_plus_tcp/NetworkInterface.c index 115439c9f..04ad70e04 100644 --- a/ra/fsp/src/rm_freertos_plus_tcp/NetworkInterface.c +++ b/ra/fsp/src/rm_freertos_plus_tcp/NetworkInterface.c @@ -82,10 +82,6 @@ static TaskHandle_t xRxHanderTaskHandle = NULL; /*********************************************************************************************************************** * Exported global function ***********************************************************************************************************************/ -uint32_t ulApplicationGetNextSequenceNumber(uint32_t ulSourceAddress, - uint16_t usSourcePort, - uint32_t ulDestinationAddress, - uint16_t usDestinationPort) __attribute__((weak)); /*********************************************************************************************************************** * Prototype declaration of global functions @@ -329,7 +325,6 @@ __attribute__((weak)) BaseType_t xApplicationGetRandomNumber (uint32_t * pulNumb * rand() in returns a 16-bit number. so create 32 bit Random number using 16 bit rand(). * In this case just a psuedo random number is used so THIS IS NOT RECOMMENDED FOR PRODUCTION SYSTEMS. */ - uint32_t ulRandomValue = 0; ulRandomValue = ((((uint32_t) rand()) & UNSIGNED_SHORT_RANDOM_NUMBER_MASK)) | // NOLINT (rand() has limited randomness. But c99 does not support random) @@ -340,10 +335,10 @@ __attribute__((weak)) BaseType_t xApplicationGetRandomNumber (uint32_t * pulNumb return pdTRUE; } -uint32_t ulApplicationGetNextSequenceNumber (uint32_t ulSourceAddress, - uint16_t usSourcePort, - uint32_t ulDestinationAddress, - uint16_t usDestinationPort) +BSP_WEAK_REFERENCE uint32_t ulApplicationGetNextSequenceNumber (uint32_t ulSourceAddress, + uint16_t usSourcePort, + uint32_t ulDestinationAddress, + uint16_t usDestinationPort) { /* * Callback that provides the inputs necessary to generate a randomized TCP diff --git a/ra/fsp/src/rm_littlefs_flash/rm_littlefs_flash.c b/ra/fsp/src/rm_littlefs_flash/rm_littlefs_flash.c index d425b002d..035028da8 100644 --- a/ra/fsp/src/rm_littlefs_flash/rm_littlefs_flash.c +++ b/ra/fsp/src/rm_littlefs_flash/rm_littlefs_flash.c @@ -36,11 +36,11 @@ #ifdef RM_LITTLEFS_FLASH_DATA_START static const uint32_t rm_littlefs_flash_data_start = RM_LITTLEFS_FLASH_DATA_START; #else -static const uint32_t rm_littlefs_flash_data_start = BSP_FEATURE_FLASH_DATA_FLASH_START; + #define rm_littlefs_flash_data_start BSP_FEATURE_FLASH_DATA_FLASH_START #endif /** "RLFS" in ASCII, used to determine if channel is open. */ -#define RM_LITTLEFS_FLASH_OPEN (0x524C4653ULL) +#define RM_LITTLEFS_FLASH_OPEN (0x524C4653ULL) const fsp_version_t g_rm_littlefs_flash_version = { diff --git a/ra/fsp/src/rm_psa_crypto/aes_alt_process.c b/ra/fsp/src/rm_psa_crypto/aes_alt_process.c index b36f59c7a..54241efe4 100644 --- a/ra/fsp/src/rm_psa_crypto/aes_alt_process.c +++ b/ra/fsp/src/rm_psa_crypto/aes_alt_process.c @@ -38,6 +38,7 @@ #include "mbedtls/aesni.h" #endif #include "hw_sce_aes_private.h" + #include "hw_sce_private.h" /* * 32-bit integer manipulation macros (little endian) @@ -81,13 +82,34 @@ int aes_setkey_generic (mbedtls_aes_context * ctx, const unsigned char * key, un { FSP_ASSERT(ctx); FSP_ASSERT(key); - int ret = 0; - unsigned int local_keybits = 0; + int ret = 0; + unsigned int local_keybits = 0; + const unsigned char * p_internal_key = key; + #if BSP_FEATURE_CRYPTO_HAS_SCE9 + /* Create storage to hold the generated OEM key index. Size = Largest key size possible. */ + uint8_t encrypted_aes_key[SIZE_AES_256BIT_KEYLEN_BITS_WRAPPED] = {0}; + #endif switch (keybits) { case SIZE_AES_128BIT_KEYLEN_BITS: { + #if BSP_FEATURE_CRYPTO_HAS_SCE9 + local_keybits = SIZE_AES_128BIT_KEYLEN_BITS_WRAPPED; + ctx->nr = 10; + if (false == (bool) ctx->vendor_ctx) + { + p_internal_key = encrypted_aes_key; + ret = (int) HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + SCE_OEM_CMD_AES128, + NULL, + NULL, + key, + (uint32_t *) p_internal_key); + ctx->vendor_ctx = (bool *) true; + } + + #else if (true == (bool) ctx->vendor_ctx) { local_keybits = SIZE_AES_128BIT_KEYLEN_BITS_WRAPPED; @@ -96,13 +118,29 @@ int aes_setkey_generic (mbedtls_aes_context * ctx, const unsigned char * key, un { local_keybits = keybits; } - ctx->nr = 10; + #endif break; } case SIZE_AES_256BIT_KEYLEN_BITS: { + #if BSP_FEATURE_CRYPTO_HAS_SCE9 + local_keybits = SIZE_AES_256BIT_KEYLEN_BITS_WRAPPED; + ctx->nr = 14; + if (false == (bool) ctx->vendor_ctx) + { + p_internal_key = encrypted_aes_key; + ret = (int) HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + SCE_OEM_CMD_AES256, + NULL, + NULL, + key, + (uint32_t *) p_internal_key); + ctx->vendor_ctx = (bool *) true; + } + + #else if (true == (bool) ctx->vendor_ctx) { local_keybits = SIZE_AES_256BIT_KEYLEN_BITS_WRAPPED; @@ -111,8 +149,9 @@ int aes_setkey_generic (mbedtls_aes_context * ctx, const unsigned char * key, un { local_keybits = keybits; } - ctx->nr = 14; + #endif + break; } @@ -123,10 +162,11 @@ int aes_setkey_generic (mbedtls_aes_context * ctx, const unsigned char * key, un if (0 == ret) { - /* Store the key into the buffer */ + /* Store the encrypted key into the buffer */ for (uint32_t i = 0; i < (local_keybits >> 5); i++) { - GET_UINT32_LE(ctx->buf[i], key, i << 2); + /* buf is large enough to hold AES 256 bit wrapped key */ + GET_UINT32_LE(ctx->buf[i], p_internal_key, i << 2); } } diff --git a/ra/fsp/src/rm_psa_crypto/ctr_drbg_alt.c b/ra/fsp/src/rm_psa_crypto/ctr_drbg_alt.c new file mode 100644 index 000000000..014ed743a --- /dev/null +++ b/ra/fsp/src/rm_psa_crypto/ctr_drbg_alt.c @@ -0,0 +1,1591 @@ +/* + * CTR_DRBG implementation based on AES-256 (NIST SP 800-90) + * + * Copyright (C) 2006-2015, 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 + * + * 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. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +/* + * The NIST SP 800-90 DRBGs are described in the following publication. + * + * http://csrc.nist.gov/publications/nistpubs/800-90/SP800-90revised_March2007.pdf + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_CTR_DRBG_C_ALT) + +#include "ctr_drbg_alt.h" +#include "mbedtls/platform_util.h" +#include "mbedtls/error.h" + +#include + +#if defined(MBEDTLS_FS_IO) +#include +#endif + +#if defined(MBEDTLS_SELF_TEST) +#if defined(MBEDTLS_PLATFORM_C) +#include "mbedtls/platform.h" +#else +#include +#define mbedtls_printf printf +#endif /* MBEDTLS_PLATFORM_C */ +#endif /* MBEDTLS_SELF_TEST */ + +/* Macros from mbedtls/aes.h */ + #define MBEDTLS_AES_ENCRYPT 1 /**< AES encryption. */ + #define MBEDTLS_AES_DECRYPT 0 /**< AES decryption. */ +/* Error codes in range 0x0021-0x0025 */ + #define MBEDTLS_ERR_AES_BAD_INPUT_DATA -0x0021 /**< Invalid input data. */ +/* Functions to support software AES for CTR DRBG */ +static void mbedtls_aes_free(mbedtls_aes_context * ctx); +static int mbedtls_aes_crypt_ecb(mbedtls_aes_context * ctx, + int mode, + const unsigned char input[16], + unsigned char output[16]); +static void mbedtls_aes_init(mbedtls_aes_context * ctx); +static int mbedtls_aes_setkey_enc(mbedtls_aes_context * ctx, const unsigned char * key, unsigned int keybits); + + #if defined(__ICCARM__) /* IAR Compiler */ +static int ferror(FILE * f); + +int ferror (FILE * f) +{ + return EOF; +} + #endif +/* + * CTR_DRBG context initialization + */ +void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ) +{ + memset( ctx, 0, sizeof( mbedtls_ctr_drbg_context ) ); + /* Indicate that the entropy nonce length is not set explicitly. + * See mbedtls_ctr_drbg_set_nonce_len(). */ + ctx->reseed_counter = -1; + +#if defined(MBEDTLS_THREADING_C) + mbedtls_mutex_init( &ctx->mutex ); +#endif +} + +void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx ) +{ + if( ctx == NULL ) + return; + +#if defined(MBEDTLS_THREADING_C) + mbedtls_mutex_free( &ctx->mutex ); +#endif + mbedtls_aes_free( &ctx->aes_ctx ); + mbedtls_platform_zeroize( ctx, sizeof( mbedtls_ctr_drbg_context ) ); +} + +void mbedtls_ctr_drbg_set_prediction_resistance( mbedtls_ctr_drbg_context *ctx, + int resistance ) +{ + ctx->prediction_resistance = resistance; +} + +void mbedtls_ctr_drbg_set_entropy_len( mbedtls_ctr_drbg_context *ctx, + size_t len ) +{ + ctx->entropy_len = len; +} + +int mbedtls_ctr_drbg_set_nonce_len( mbedtls_ctr_drbg_context *ctx, + size_t len ) +{ + /* If mbedtls_ctr_drbg_seed() has already been called, it's + * too late. Return the error code that's closest to making sense. */ + if( ctx->f_entropy != NULL ) + return( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); + + if( len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); +#if SIZE_MAX > INT_MAX + /* This shouldn't be an issue because + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT < INT_MAX in any sensible + * configuration, but make sure anyway. */ + if( len > INT_MAX ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); +#endif + + /* For backward compatibility with Mbed TLS <= 2.19, store the + * entropy nonce length in a field that already exists, but isn't + * used until after the initial seeding. */ + /* Due to the capping of len above, the value fits in an int. */ + ctx->reseed_counter = (int) len; + return( 0 ); +} + +void mbedtls_ctr_drbg_set_reseed_interval( mbedtls_ctr_drbg_context *ctx, + int interval ) +{ + ctx->reseed_interval = interval; +} + +static int block_cipher_df( unsigned char *output, + const unsigned char *data, size_t data_len ) +{ + unsigned char buf[MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + + MBEDTLS_CTR_DRBG_BLOCKSIZE + 16]; + unsigned char tmp[MBEDTLS_CTR_DRBG_SEEDLEN]; + unsigned char key[MBEDTLS_CTR_DRBG_KEYSIZE]; + unsigned char chain[MBEDTLS_CTR_DRBG_BLOCKSIZE]; + unsigned char *p, *iv; + mbedtls_aes_context aes_ctx; + int ret = 0; + + int i, j; + size_t buf_len, use_len; + + if( data_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + + memset( buf, 0, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + + MBEDTLS_CTR_DRBG_BLOCKSIZE + 16 ); + mbedtls_aes_init( &aes_ctx ); + + /* + * Construct IV (16 bytes) and S in buffer + * IV = Counter (in 32-bits) padded to 16 with zeroes + * S = Length input string (in 32-bits) || Length of output (in 32-bits) || + * data || 0x80 + * (Total is padded to a multiple of 16-bytes with zeroes) + */ + p = buf + MBEDTLS_CTR_DRBG_BLOCKSIZE; + *p++ = ( data_len >> 24 ) & 0xff; + *p++ = ( data_len >> 16 ) & 0xff; + *p++ = ( data_len >> 8 ) & 0xff; + *p++ = ( data_len ) & 0xff; + p += 3; + *p++ = MBEDTLS_CTR_DRBG_SEEDLEN; + memcpy( p, data, data_len ); + p[data_len] = 0x80; + + buf_len = MBEDTLS_CTR_DRBG_BLOCKSIZE + 8 + data_len + 1; + + for( i = 0; i < MBEDTLS_CTR_DRBG_KEYSIZE; i++ ) + key[i] = i; + + if( ( ret = mbedtls_aes_setkey_enc( &aes_ctx, key, + MBEDTLS_CTR_DRBG_KEYBITS ) ) != 0 ) + { + goto exit; + } + + /* + * Reduce data to MBEDTLS_CTR_DRBG_SEEDLEN bytes of data + */ + for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) + { + p = buf; + memset( chain, 0, MBEDTLS_CTR_DRBG_BLOCKSIZE ); + use_len = buf_len; + + while( use_len > 0 ) + { + for( i = 0; i < MBEDTLS_CTR_DRBG_BLOCKSIZE; i++ ) + chain[i] ^= p[i]; + p += MBEDTLS_CTR_DRBG_BLOCKSIZE; + use_len -= ( use_len >= MBEDTLS_CTR_DRBG_BLOCKSIZE ) ? + MBEDTLS_CTR_DRBG_BLOCKSIZE : use_len; + + if( ( ret = mbedtls_aes_crypt_ecb( &aes_ctx, MBEDTLS_AES_ENCRYPT, + chain, chain ) ) != 0 ) + { + goto exit; + } + } + + memcpy( tmp + j, chain, MBEDTLS_CTR_DRBG_BLOCKSIZE ); + + /* + * Update IV + */ + buf[3]++; + } + + /* + * Do final encryption with reduced data + */ + if( ( ret = mbedtls_aes_setkey_enc( &aes_ctx, tmp, + MBEDTLS_CTR_DRBG_KEYBITS ) ) != 0 ) + { + goto exit; + } + iv = tmp + MBEDTLS_CTR_DRBG_KEYSIZE; + p = output; + + for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) + { + if( ( ret = mbedtls_aes_crypt_ecb( &aes_ctx, MBEDTLS_AES_ENCRYPT, + iv, iv ) ) != 0 ) + { + goto exit; + } + memcpy( p, iv, MBEDTLS_CTR_DRBG_BLOCKSIZE ); + p += MBEDTLS_CTR_DRBG_BLOCKSIZE; + } +exit: + mbedtls_aes_free( &aes_ctx ); + /* + * tidy up the stack + */ + mbedtls_platform_zeroize( buf, sizeof( buf ) ); + mbedtls_platform_zeroize( tmp, sizeof( tmp ) ); + mbedtls_platform_zeroize( key, sizeof( key ) ); + mbedtls_platform_zeroize( chain, sizeof( chain ) ); + if( 0 != ret ) + { + /* + * wipe partial seed from memory + */ + mbedtls_platform_zeroize( output, MBEDTLS_CTR_DRBG_SEEDLEN ); + } + + return( ret ); +} + +/* CTR_DRBG_Update (SP 800-90A §10.2.1.2) + * ctr_drbg_update_internal(ctx, provided_data) + * implements + * CTR_DRBG_Update(provided_data, Key, V) + * with inputs and outputs + * ctx->aes_ctx = Key + * ctx->counter = V + */ +static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, + const unsigned char data[MBEDTLS_CTR_DRBG_SEEDLEN] ) +{ + unsigned char tmp[MBEDTLS_CTR_DRBG_SEEDLEN]; + unsigned char *p = tmp; + int i, j; + int ret = 0; + + memset( tmp, 0, MBEDTLS_CTR_DRBG_SEEDLEN ); + + for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) + { + /* + * Increase counter + */ + for( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) + if( ++ctx->counter[i - 1] != 0 ) + break; + + /* + * Crypt counter block + */ + if( ( ret = mbedtls_aes_crypt_ecb( &ctx->aes_ctx, MBEDTLS_AES_ENCRYPT, + ctx->counter, p ) ) != 0 ) + { + goto exit; + } + + p += MBEDTLS_CTR_DRBG_BLOCKSIZE; + } + + for( i = 0; i < MBEDTLS_CTR_DRBG_SEEDLEN; i++ ) + tmp[i] ^= data[i]; + + /* + * Update key and counter + */ + if( ( ret = mbedtls_aes_setkey_enc( &ctx->aes_ctx, tmp, + MBEDTLS_CTR_DRBG_KEYBITS ) ) != 0 ) + { + goto exit; + } + memcpy( ctx->counter, tmp + MBEDTLS_CTR_DRBG_KEYSIZE, + MBEDTLS_CTR_DRBG_BLOCKSIZE ); + +exit: + mbedtls_platform_zeroize( tmp, sizeof( tmp ) ); + return( ret ); +} + +/* CTR_DRBG_Instantiate with derivation function (SP 800-90A §10.2.1.3.2) + * mbedtls_ctr_drbg_update(ctx, additional, add_len) + * implements + * CTR_DRBG_Instantiate(entropy_input, nonce, personalization_string, + * security_strength) -> initial_working_state + * with inputs + * ctx->counter = all-bits-0 + * ctx->aes_ctx = context from all-bits-0 key + * additional[:add_len] = entropy_input || nonce || personalization_string + * and with outputs + * ctx = initial_working_state + */ +int mbedtls_ctr_drbg_update_ret( mbedtls_ctr_drbg_context *ctx, + const unsigned char *additional, + size_t add_len ) +{ + unsigned char add_input[MBEDTLS_CTR_DRBG_SEEDLEN]; + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + + if( add_len == 0 ) + return( 0 ); + + if( ( ret = block_cipher_df( add_input, additional, add_len ) ) != 0 ) + goto exit; + if( ( ret = ctr_drbg_update_internal( ctx, add_input ) ) != 0 ) + goto exit; + +exit: + mbedtls_platform_zeroize( add_input, sizeof( add_input ) ); + return( ret ); +} + +#if !defined(MBEDTLS_DEPRECATED_REMOVED) +void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, + const unsigned char *additional, + size_t add_len ) +{ + /* MAX_INPUT would be more logical here, but we have to match + * block_cipher_df()'s limits since we can't propagate errors */ + if( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + add_len = MBEDTLS_CTR_DRBG_MAX_SEED_INPUT; + (void) mbedtls_ctr_drbg_update_ret( ctx, additional, add_len ); +} +#endif /* MBEDTLS_DEPRECATED_REMOVED */ + +/* CTR_DRBG_Reseed with derivation function (SP 800-90A §10.2.1.4.2) + * mbedtls_ctr_drbg_reseed(ctx, additional, len, nonce_len) + * implements + * CTR_DRBG_Reseed(working_state, entropy_input, additional_input) + * -> new_working_state + * with inputs + * ctx contains working_state + * additional[:len] = additional_input + * and entropy_input comes from calling ctx->f_entropy + * for (ctx->entropy_len + nonce_len) bytes + * and with output + * ctx contains new_working_state + */ +static int mbedtls_ctr_drbg_reseed_internal( mbedtls_ctr_drbg_context *ctx, + const unsigned char *additional, + size_t len, + size_t nonce_len ) +{ + unsigned char seed[MBEDTLS_CTR_DRBG_MAX_SEED_INPUT]; + size_t seedlen = 0; + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + + if( ctx->entropy_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if( nonce_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT - ctx->entropy_len ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if( len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT - ctx->entropy_len - nonce_len ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + + memset( seed, 0, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ); + + /* Gather entropy_len bytes of entropy to seed state. */ + if( 0 != ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) ) + { + return( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); + } + seedlen += ctx->entropy_len; + + /* Gather entropy for a nonce if requested. */ + if( nonce_len != 0 ) + { + if( 0 != ctx->f_entropy( ctx->p_entropy, seed, nonce_len ) ) + { + return( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); + } + seedlen += nonce_len; + } + + /* Add additional data if provided. */ + if( additional != NULL && len != 0 ) + { + memcpy( seed + seedlen, additional, len ); + seedlen += len; + } + + /* Reduce to 384 bits. */ + if( ( ret = block_cipher_df( seed, seed, seedlen ) ) != 0 ) + goto exit; + + /* Update state. */ + if( ( ret = ctr_drbg_update_internal( ctx, seed ) ) != 0 ) + goto exit; + ctx->reseed_counter = 1; + +exit: + mbedtls_platform_zeroize( seed, sizeof( seed ) ); + return( ret ); +} + +int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, + const unsigned char *additional, size_t len ) +{ + return( mbedtls_ctr_drbg_reseed_internal( ctx, additional, len, 0 ) ); +} + +/* Return a "good" nonce length for CTR_DRBG. The chosen nonce length + * is sufficient to achieve the maximum security strength given the key + * size and entropy length. If there is enough entropy in the initial + * call to the entropy function to serve as both the entropy input and + * the nonce, don't make a second call to get a nonce. */ +static size_t good_nonce_len( size_t entropy_len ) +{ + if( entropy_len >= MBEDTLS_CTR_DRBG_KEYSIZE * 3 / 2 ) + return( 0 ); + else + return( ( entropy_len + 1 ) / 2 ); +} + +/* CTR_DRBG_Instantiate with derivation function (SP 800-90A §10.2.1.3.2) + * mbedtls_ctr_drbg_seed(ctx, f_entropy, p_entropy, custom, len) + * implements + * CTR_DRBG_Instantiate(entropy_input, nonce, personalization_string, + * security_strength) -> initial_working_state + * with inputs + * custom[:len] = nonce || personalization_string + * where entropy_input comes from f_entropy for ctx->entropy_len bytes + * and with outputs + * ctx = initial_working_state + */ +int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + unsigned char key[MBEDTLS_CTR_DRBG_KEYSIZE]; + size_t nonce_len; + + memset( key, 0, MBEDTLS_CTR_DRBG_KEYSIZE ); + + mbedtls_aes_init( &ctx->aes_ctx ); + + ctx->f_entropy = f_entropy; + ctx->p_entropy = p_entropy; + + if( ctx->entropy_len == 0 ) + ctx->entropy_len = MBEDTLS_CTR_DRBG_ENTROPY_LEN; + /* ctx->reseed_counter contains the desired amount of entropy to + * grab for a nonce (see mbedtls_ctr_drbg_set_nonce_len()). + * If it's -1, indicating that the entropy nonce length was not set + * explicitly, use a sufficiently large nonce for security. */ + nonce_len = ( ctx->reseed_counter >= 0 ? + (size_t) ctx->reseed_counter : + good_nonce_len( ctx->entropy_len ) ); + + ctx->reseed_interval = MBEDTLS_CTR_DRBG_RESEED_INTERVAL; + + /* Initialize with an empty key. */ + if( ( ret = mbedtls_aes_setkey_enc( &ctx->aes_ctx, key, + MBEDTLS_CTR_DRBG_KEYBITS ) ) != 0 ) + { + return( ret ); + } + + /* Do the initial seeding. */ + if( ( ret = mbedtls_ctr_drbg_reseed_internal( ctx, custom, len, + nonce_len ) ) != 0 ) + { + return( ret ); + } + return( 0 ); +} + +/* CTR_DRBG_Generate with derivation function (SP 800-90A §10.2.1.5.2) + * mbedtls_ctr_drbg_random_with_add(ctx, output, output_len, additional, add_len) + * implements + * CTR_DRBG_Reseed(working_state, entropy_input, additional[:add_len]) + * -> working_state_after_reseed + * if required, then + * CTR_DRBG_Generate(working_state_after_reseed, + * requested_number_of_bits, additional_input) + * -> status, returned_bits, new_working_state + * with inputs + * ctx contains working_state + * requested_number_of_bits = 8 * output_len + * additional[:add_len] = additional_input + * and entropy_input comes from calling ctx->f_entropy + * and with outputs + * status = SUCCESS (this function does the reseed internally) + * returned_bits = output[:output_len] + * ctx contains new_working_state + */ +int mbedtls_ctr_drbg_random_with_add( void *p_rng, + unsigned char *output, size_t output_len, + const unsigned char *additional, size_t add_len ) +{ + int ret = 0; + mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; + unsigned char add_input[MBEDTLS_CTR_DRBG_SEEDLEN]; + unsigned char *p = output; + unsigned char tmp[MBEDTLS_CTR_DRBG_BLOCKSIZE]; + int i; + size_t use_len; + + if( output_len > MBEDTLS_CTR_DRBG_MAX_REQUEST ) + return( MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG ); + + if( add_len > MBEDTLS_CTR_DRBG_MAX_INPUT ) + return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + + memset( add_input, 0, MBEDTLS_CTR_DRBG_SEEDLEN ); + + if( ctx->reseed_counter > ctx->reseed_interval || + ctx->prediction_resistance ) + { + if( ( ret = mbedtls_ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) + { + return( ret ); + } + add_len = 0; + } + + if( add_len > 0 ) + { + if( ( ret = block_cipher_df( add_input, additional, add_len ) ) != 0 ) + goto exit; + if( ( ret = ctr_drbg_update_internal( ctx, add_input ) ) != 0 ) + goto exit; + } + + while( output_len > 0 ) + { + /* + * Increase counter + */ + for( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) + if( ++ctx->counter[i - 1] != 0 ) + break; + + /* + * Crypt counter block + */ + if( ( ret = mbedtls_aes_crypt_ecb( &ctx->aes_ctx, MBEDTLS_AES_ENCRYPT, + ctx->counter, tmp ) ) != 0 ) + { + goto exit; + } + + use_len = ( output_len > MBEDTLS_CTR_DRBG_BLOCKSIZE ) + ? MBEDTLS_CTR_DRBG_BLOCKSIZE : output_len; + /* + * Copy random block to destination + */ + memcpy( p, tmp, use_len ); + p += use_len; + output_len -= use_len; + } + + if( ( ret = ctr_drbg_update_internal( ctx, add_input ) ) != 0 ) + goto exit; + + ctx->reseed_counter++; + +exit: + mbedtls_platform_zeroize( add_input, sizeof( add_input ) ); + mbedtls_platform_zeroize( tmp, sizeof( tmp ) ); + return( ret ); +} + +int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, + size_t output_len ) +{ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; + mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; + +#if defined(MBEDTLS_THREADING_C) + if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return( ret ); +#endif + + ret = mbedtls_ctr_drbg_random_with_add( ctx, output, output_len, NULL, 0 ); + +#if defined(MBEDTLS_THREADING_C) + if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); +#endif + + return( ret ); +} + +#if defined(MBEDTLS_FS_IO) +int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, + const char *path ) +{ + int ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR; + FILE *f; + unsigned char buf[ MBEDTLS_CTR_DRBG_MAX_INPUT ]; + + if( ( f = fopen( path, "wb" ) ) == NULL ) + return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + + if( ( ret = mbedtls_ctr_drbg_random( ctx, buf, + MBEDTLS_CTR_DRBG_MAX_INPUT ) ) != 0 ) + goto exit; + + if( fwrite( buf, 1, MBEDTLS_CTR_DRBG_MAX_INPUT, f ) != + MBEDTLS_CTR_DRBG_MAX_INPUT ) + { + ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR; + } + else + { + ret = 0; + } + +exit: + mbedtls_platform_zeroize( buf, sizeof( buf ) ); + + fclose( f ); + return( ret ); +} + +int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, + const char *path ) +{ + int ret = 0; + FILE *f = NULL; + size_t n; + unsigned char buf[ MBEDTLS_CTR_DRBG_MAX_INPUT ]; + unsigned char c; + + if( ( f = fopen( path, "rb" ) ) == NULL ) + return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + + n = fread( buf, 1, sizeof( buf ), f ); + if( fread( &c, 1, 1, f ) != 0 ) + { + ret = MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG; + goto exit; + } + if( n == 0 || ferror( f ) ) + { + ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR; + goto exit; + } + fclose( f ); + f = NULL; + + ret = mbedtls_ctr_drbg_update_ret( ctx, buf, n ); + +exit: + mbedtls_platform_zeroize( buf, sizeof( buf ) ); + if( f != NULL ) + fclose( f ); + if( ret != 0 ) + return( ret ); + return( mbedtls_ctr_drbg_write_seed_file( ctx, path ) ); +} +#endif /* MBEDTLS_FS_IO */ + +#if defined(MBEDTLS_SELF_TEST) + +static const unsigned char entropy_source_pr[96] = + { 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, + 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, + 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, + 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, + 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, + 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, + 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, + 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, + 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, + 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, + 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, + 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 }; + +static const unsigned char entropy_source_nopr[64] = + { 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, + 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, + 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, + 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, + 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, + 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, + 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, + 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e }; + +static const unsigned char nonce_pers_pr[16] = + { 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, + 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c }; + +static const unsigned char nonce_pers_nopr[16] = + { 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, + 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f }; + +#if defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) +static const unsigned char result_pr[16] = + { 0x95, 0x3c, 0xa5, 0xbd, 0x44, 0x1, 0x34, 0xb7, + 0x13, 0x58, 0x3e, 0x6a, 0x6c, 0x7e, 0x88, 0x8a }; + +static const unsigned char result_nopr[16] = + { 0x6c, 0x25, 0x27, 0x95, 0xa3, 0x62, 0xd6, 0xdb, + 0x90, 0xfd, 0x69, 0xb5, 0x42, 0x9, 0x4b, 0x84 }; +#else /* MBEDTLS_CTR_DRBG_USE_128_BIT_KEY */ +static const unsigned char result_pr[16] = + { 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, + 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 }; + +static const unsigned char result_nopr[16] = + { 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, + 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f }; +#endif /* MBEDTLS_CTR_DRBG_USE_128_BIT_KEY */ + +static size_t test_offset; +static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, + size_t len ) +{ + const unsigned char *p = data; + memcpy( buf, p + test_offset, len ); + test_offset += len; + return( 0 ); +} + +#define CHK( c ) if( (c) != 0 ) \ + { \ + if( verbose != 0 ) \ + mbedtls_printf( "failed\n" ); \ + return( 1 ); \ + } + +/* + * Checkup routine + */ +int mbedtls_ctr_drbg_self_test( int verbose ) +{ + mbedtls_ctr_drbg_context ctx; + unsigned char buf[16]; + + mbedtls_ctr_drbg_init( &ctx ); + + /* + * Based on a NIST CTR_DRBG test vector (PR = True) + */ + if( verbose != 0 ) + mbedtls_printf( " CTR_DRBG (PR = TRUE) : " ); + + test_offset = 0; + mbedtls_ctr_drbg_set_entropy_len( &ctx, 32 ); + mbedtls_ctr_drbg_set_nonce_len( &ctx, 0 ); + CHK( mbedtls_ctr_drbg_seed( &ctx, + ctr_drbg_self_test_entropy, + (void *) entropy_source_pr, + nonce_pers_pr, 16 ) ); + mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON ); + CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); + CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); + CHK( memcmp( buf, result_pr, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); + + mbedtls_ctr_drbg_free( &ctx ); + + if( verbose != 0 ) + mbedtls_printf( "passed\n" ); + + /* + * Based on a NIST CTR_DRBG test vector (PR = FALSE) + */ + if( verbose != 0 ) + mbedtls_printf( " CTR_DRBG (PR = FALSE): " ); + + mbedtls_ctr_drbg_init( &ctx ); + + test_offset = 0; + mbedtls_ctr_drbg_set_entropy_len( &ctx, 32 ); + mbedtls_ctr_drbg_set_nonce_len( &ctx, 0 ); + CHK( mbedtls_ctr_drbg_seed( &ctx, + ctr_drbg_self_test_entropy, + (void *) entropy_source_nopr, + nonce_pers_nopr, 16 ) ); + CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) ); + CHK( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) ); + CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) ); + CHK( memcmp( buf, result_nopr, 16 ) ); + + mbedtls_ctr_drbg_free( &ctx ); + + if( verbose != 0 ) + mbedtls_printf( "passed\n" ); + + if( verbose != 0 ) + mbedtls_printf( "\n" ); + + return( 0 ); +} +#endif /* MBEDTLS_SELF_TEST */ + +/* AES */ + + #include "mbedtls/error.h" + #if defined(MBEDTLS_PADLOCK_C) + #include "mbedtls/padlock.h" + #endif + #if defined(MBEDTLS_AESNI_C) + #include "mbedtls/aesni.h" + #endif + #define MBEDTLS_AES_FEWER_TABLES (1) + +/* Parameter validation macros based on platform_util.h */ + #define AES_VALIDATE_RET(cond) \ + MBEDTLS_INTERNAL_VALIDATE_RET(cond, MBEDTLS_ERR_AES_BAD_INPUT_DATA) + #define AES_VALIDATE(cond) \ + MBEDTLS_INTERNAL_VALIDATE(cond) + +/* + * 32-bit integer manipulation macros (little endian) + */ + #ifndef GET_UINT32_LE + #define GET_UINT32_LE(n, b, i) \ + { \ + (n) = ((uint32_t) (b)[(i)]) \ + | ((uint32_t) (b)[(i) + 1] << 8) \ + | ((uint32_t) (b)[(i) + 2] << 16) \ + | ((uint32_t) (b)[(i) + 3] << 24); \ + } + #endif + + #ifndef PUT_UINT32_LE + #define PUT_UINT32_LE(n, b, i) \ + { \ + (b)[(i)] = (unsigned char) (((n)) & 0xFF); \ + (b)[(i) + 1] = (unsigned char) (((n) >> 8) & 0xFF); \ + (b)[(i) + 2] = (unsigned char) (((n) >> 16) & 0xFF); \ + (b)[(i) + 3] = (unsigned char) (((n) >> 24) & 0xFF); \ + } + #endif + + #if defined(MBEDTLS_PADLOCK_C) && \ + (defined(MBEDTLS_HAVE_X86) || defined(MBEDTLS_PADLOCK_ALIGN16)) +static int aes_padlock_ace = -1; + #endif + + #if defined(MBEDTLS_AES_ROM_TABLES) + +/* + * Forward S-box + */ +static const unsigned char FSb[256] = +{ + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, + 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, + 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, + 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, + 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, + 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, + 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, + 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, + 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, + 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, + 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, + 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, + 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, + 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, + 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, + 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, + 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, + 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, + 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, + 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, + 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, + 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, + 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, + 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, + 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, + 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, + 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 +}; + +/* + * Forward tables + */ + #define FT \ + \ + V(A5, 63, 63, C6), V(84, 7C, 7C, F8), V(99, 77, 77, EE), V(8D, 7B, 7B, F6), \ + V(0D, F2, F2, FF), V(BD, 6B, 6B, D6), V(B1, 6F, 6F, DE), V(54, C5, C5, 91), \ + V(50, 30, 30, 60), V(03, 01, 01, 02), V(A9, 67, 67, CE), V(7D, 2B, 2B, 56), \ + V(19, FE, FE, E7), V(62, D7, D7, B5), V(E6, AB, AB, 4D), V(9A, 76, 76, EC), \ + V(45, CA, CA, 8F), V(9D, 82, 82, 1F), V(40, C9, C9, 89), V(87, 7D, 7D, FA), \ + V(15, FA, FA, EF), V(EB, 59, 59, B2), V(C9, 47, 47, 8E), V(0B, F0, F0, FB), \ + V(EC, AD, AD, 41), V(67, D4, D4, B3), V(FD, A2, A2, 5F), V(EA, AF, AF, 45), \ + V(BF, 9C, 9C, 23), V(F7, A4, A4, 53), V(96, 72, 72, E4), V(5B, C0, C0, 9B), \ + V(C2, B7, B7, 75), V(1C, FD, FD, E1), V(AE, 93, 93, 3D), V(6A, 26, 26, 4C), \ + V(5A, 36, 36, 6C), V(41, 3F, 3F, 7E), V(02, F7, F7, F5), V(4F, CC, CC, 83), \ + V(5C, 34, 34, 68), V(F4, A5, A5, 51), V(34, E5, E5, D1), V(08, F1, F1, F9), \ + V(93, 71, 71, E2), V(73, D8, D8, AB), V(53, 31, 31, 62), V(3F, 15, 15, 2A), \ + V(0C, 04, 04, 08), V(52, C7, C7, 95), V(65, 23, 23, 46), V(5E, C3, C3, 9D), \ + V(28, 18, 18, 30), V(A1, 96, 96, 37), V(0F, 05, 05, 0A), V(B5, 9A, 9A, 2F), \ + V(09, 07, 07, 0E), V(36, 12, 12, 24), V(9B, 80, 80, 1B), V(3D, E2, E2, DF), \ + V(26, EB, EB, CD), V(69, 27, 27, 4E), V(CD, B2, B2, 7F), V(9F, 75, 75, EA), \ + V(1B, 09, 09, 12), V(9E, 83, 83, 1D), V(74, 2C, 2C, 58), V(2E, 1A, 1A, 34), \ + V(2D, 1B, 1B, 36), V(B2, 6E, 6E, DC), V(EE, 5A, 5A, B4), V(FB, A0, A0, 5B), \ + V(F6, 52, 52, A4), V(4D, 3B, 3B, 76), V(61, D6, D6, B7), V(CE, B3, B3, 7D), \ + V(7B, 29, 29, 52), V(3E, E3, E3, DD), V(71, 2F, 2F, 5E), V(97, 84, 84, 13), \ + V(F5, 53, 53, A6), V(68, D1, D1, B9), V(00, 00, 00, 00), V(2C, ED, ED, C1), \ + V(60, 20, 20, 40), V(1F, FC, FC, E3), V(C8, B1, B1, 79), V(ED, 5B, 5B, B6), \ + V(BE, 6A, 6A, D4), V(46, CB, CB, 8D), V(D9, BE, BE, 67), V(4B, 39, 39, 72), \ + V(DE, 4A, 4A, 94), V(D4, 4C, 4C, 98), V(E8, 58, 58, B0), V(4A, CF, CF, 85), \ + V(6B, D0, D0, BB), V(2A, EF, EF, C5), V(E5, AA, AA, 4F), V(16, FB, FB, ED), \ + V(C5, 43, 43, 86), V(D7, 4D, 4D, 9A), V(55, 33, 33, 66), V(94, 85, 85, 11), \ + V(CF, 45, 45, 8A), V(10, F9, F9, E9), V(06, 02, 02, 04), V(81, 7F, 7F, FE), \ + V(F0, 50, 50, A0), V(44, 3C, 3C, 78), V(BA, 9F, 9F, 25), V(E3, A8, A8, 4B), \ + V(F3, 51, 51, A2), V(FE, A3, A3, 5D), V(C0, 40, 40, 80), V(8A, 8F, 8F, 05), \ + V(AD, 92, 92, 3F), V(BC, 9D, 9D, 21), V(48, 38, 38, 70), V(04, F5, F5, F1), \ + V(DF, BC, BC, 63), V(C1, B6, B6, 77), V(75, DA, DA, AF), V(63, 21, 21, 42), \ + V(30, 10, 10, 20), V(1A, FF, FF, E5), V(0E, F3, F3, FD), V(6D, D2, D2, BF), \ + V(4C, CD, CD, 81), V(14, 0C, 0C, 18), V(35, 13, 13, 26), V(2F, EC, EC, C3), \ + V(E1, 5F, 5F, BE), V(A2, 97, 97, 35), V(CC, 44, 44, 88), V(39, 17, 17, 2E), \ + V(57, C4, C4, 93), V(F2, A7, A7, 55), V(82, 7E, 7E, FC), V(47, 3D, 3D, 7A), \ + V(AC, 64, 64, C8), V(E7, 5D, 5D, BA), V(2B, 19, 19, 32), V(95, 73, 73, E6), \ + V(A0, 60, 60, C0), V(98, 81, 81, 19), V(D1, 4F, 4F, 9E), V(7F, DC, DC, A3), \ + V(66, 22, 22, 44), V(7E, 2A, 2A, 54), V(AB, 90, 90, 3B), V(83, 88, 88, 0B), \ + V(CA, 46, 46, 8C), V(29, EE, EE, C7), V(D3, B8, B8, 6B), V(3C, 14, 14, 28), \ + V(79, DE, DE, A7), V(E2, 5E, 5E, BC), V(1D, 0B, 0B, 16), V(76, DB, DB, AD), \ + V(3B, E0, E0, DB), V(56, 32, 32, 64), V(4E, 3A, 3A, 74), V(1E, 0A, 0A, 14), \ + V(DB, 49, 49, 92), V(0A, 06, 06, 0C), V(6C, 24, 24, 48), V(E4, 5C, 5C, B8), \ + V(5D, C2, C2, 9F), V(6E, D3, D3, BD), V(EF, AC, AC, 43), V(A6, 62, 62, C4), \ + V(A8, 91, 91, 39), V(A4, 95, 95, 31), V(37, E4, E4, D3), V(8B, 79, 79, F2), \ + V(32, E7, E7, D5), V(43, C8, C8, 8B), V(59, 37, 37, 6E), V(B7, 6D, 6D, DA), \ + V(8C, 8D, 8D, 01), V(64, D5, D5, B1), V(D2, 4E, 4E, 9C), V(E0, A9, A9, 49), \ + V(B4, 6C, 6C, D8), V(FA, 56, 56, AC), V(07, F4, F4, F3), V(25, EA, EA, CF), \ + V(AF, 65, 65, CA), V(8E, 7A, 7A, F4), V(E9, AE, AE, 47), V(18, 08, 08, 10), \ + V(D5, BA, BA, 6F), V(88, 78, 78, F0), V(6F, 25, 25, 4A), V(72, 2E, 2E, 5C), \ + V(24, 1C, 1C, 38), V(F1, A6, A6, 57), V(C7, B4, B4, 73), V(51, C6, C6, 97), \ + V(23, E8, E8, CB), V(7C, DD, DD, A1), V(9C, 74, 74, E8), V(21, 1F, 1F, 3E), \ + V(DD, 4B, 4B, 96), V(DC, BD, BD, 61), V(86, 8B, 8B, 0D), V(85, 8A, 8A, 0F), \ + V(90, 70, 70, E0), V(42, 3E, 3E, 7C), V(C4, B5, B5, 71), V(AA, 66, 66, CC), \ + V(D8, 48, 48, 90), V(05, 03, 03, 06), V(01, F6, F6, F7), V(12, 0E, 0E, 1C), \ + V(A3, 61, 61, C2), V(5F, 35, 35, 6A), V(F9, 57, 57, AE), V(D0, B9, B9, 69), \ + V(91, 86, 86, 17), V(58, C1, C1, 99), V(27, 1D, 1D, 3A), V(B9, 9E, 9E, 27), \ + V(38, E1, E1, D9), V(13, F8, F8, EB), V(B3, 98, 98, 2B), V(33, 11, 11, 22), \ + V(BB, 69, 69, D2), V(70, D9, D9, A9), V(89, 8E, 8E, 07), V(A7, 94, 94, 33), \ + V(B6, 9B, 9B, 2D), V(22, 1E, 1E, 3C), V(92, 87, 87, 15), V(20, E9, E9, C9), \ + V(49, CE, CE, 87), V(FF, 55, 55, AA), V(78, 28, 28, 50), V(7A, DF, DF, A5), \ + V(8F, 8C, 8C, 03), V(F8, A1, A1, 59), V(80, 89, 89, 09), V(17, 0D, 0D, 1A), \ + V(DA, BF, BF, 65), V(31, E6, E6, D7), V(C6, 42, 42, 84), V(B8, 68, 68, D0), \ + V(C3, 41, 41, 82), V(B0, 99, 99, 29), V(77, 2D, 2D, 5A), V(11, 0F, 0F, 1E), \ + V(CB, B0, B0, 7B), V(FC, 54, 54, A8), V(D6, BB, BB, 6D), V(3A, 16, 16, 2C) + + #define V(a, b, c, d) 0x ## a ## b ## c ## d +static const uint32_t FT0[256] = {FT}; + #undef V + + #if !defined(MBEDTLS_AES_FEWER_TABLES) + + #define V(a, b, c, d) 0x ## b ## c ## d ## a +static const uint32_t FT1[256] = {FT}; + #undef V + + #define V(a, b, c, d) 0x ## c ## d ## a ## b +static const uint32_t FT2[256] = {FT}; + #undef V + + #define V(a, b, c, d) 0x ## d ## a ## b ## c +static const uint32_t FT3[256] = {FT}; + #undef V + + #endif /* !MBEDTLS_AES_FEWER_TABLES */ + + #undef FT + +/* + * Reverse S-box + */ +static const unsigned char RSb[256] = +{ + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, + 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, + 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, + 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, + 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, + 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, + 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, + 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, + 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, + 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, + 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, + 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, + 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, + 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, + 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, + 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, + 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, + 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, + 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, + 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, + 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, + 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, + 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, + 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, + 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, + 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D +}; + +/* + * Reverse tables + */ + #define RT \ + \ + V(50, A7, F4, 51), V(53, 65, 41, 7E), V(C3, A4, 17, 1A), V(96, 5E, 27, 3A), \ + V(CB, 6B, AB, 3B), V(F1, 45, 9D, 1F), V(AB, 58, FA, AC), V(93, 03, E3, 4B), \ + V(55, FA, 30, 20), V(F6, 6D, 76, AD), V(91, 76, CC, 88), V(25, 4C, 02, F5), \ + V(FC, D7, E5, 4F), V(D7, CB, 2A, C5), V(80, 44, 35, 26), V(8F, A3, 62, B5), \ + V(49, 5A, B1, DE), V(67, 1B, BA, 25), V(98, 0E, EA, 45), V(E1, C0, FE, 5D), \ + V(02, 75, 2F, C3), V(12, F0, 4C, 81), V(A3, 97, 46, 8D), V(C6, F9, D3, 6B), \ + V(E7, 5F, 8F, 03), V(95, 9C, 92, 15), V(EB, 7A, 6D, BF), V(DA, 59, 52, 95), \ + V(2D, 83, BE, D4), V(D3, 21, 74, 58), V(29, 69, E0, 49), V(44, C8, C9, 8E), \ + V(6A, 89, C2, 75), V(78, 79, 8E, F4), V(6B, 3E, 58, 99), V(DD, 71, B9, 27), \ + V(B6, 4F, E1, BE), V(17, AD, 88, F0), V(66, AC, 20, C9), V(B4, 3A, CE, 7D), \ + V(18, 4A, DF, 63), V(82, 31, 1A, E5), V(60, 33, 51, 97), V(45, 7F, 53, 62), \ + V(E0, 77, 64, B1), V(84, AE, 6B, BB), V(1C, A0, 81, FE), V(94, 2B, 08, F9), \ + V(58, 68, 48, 70), V(19, FD, 45, 8F), V(87, 6C, DE, 94), V(B7, F8, 7B, 52), \ + V(23, D3, 73, AB), V(E2, 02, 4B, 72), V(57, 8F, 1F, E3), V(2A, AB, 55, 66), \ + V(07, 28, EB, B2), V(03, C2, B5, 2F), V(9A, 7B, C5, 86), V(A5, 08, 37, D3), \ + V(F2, 87, 28, 30), V(B2, A5, BF, 23), V(BA, 6A, 03, 02), V(5C, 82, 16, ED), \ + V(2B, 1C, CF, 8A), V(92, B4, 79, A7), V(F0, F2, 07, F3), V(A1, E2, 69, 4E), \ + V(CD, F4, DA, 65), V(D5, BE, 05, 06), V(1F, 62, 34, D1), V(8A, FE, A6, C4), \ + V(9D, 53, 2E, 34), V(A0, 55, F3, A2), V(32, E1, 8A, 05), V(75, EB, F6, A4), \ + V(39, EC, 83, 0B), V(AA, EF, 60, 40), V(06, 9F, 71, 5E), V(51, 10, 6E, BD), \ + V(F9, 8A, 21, 3E), V(3D, 06, DD, 96), V(AE, 05, 3E, DD), V(46, BD, E6, 4D), \ + V(B5, 8D, 54, 91), V(05, 5D, C4, 71), V(6F, D4, 06, 04), V(FF, 15, 50, 60), \ + V(24, FB, 98, 19), V(97, E9, BD, D6), V(CC, 43, 40, 89), V(77, 9E, D9, 67), \ + V(BD, 42, E8, B0), V(88, 8B, 89, 07), V(38, 5B, 19, E7), V(DB, EE, C8, 79), \ + V(47, 0A, 7C, A1), V(E9, 0F, 42, 7C), V(C9, 1E, 84, F8), V(00, 00, 00, 00), \ + V(83, 86, 80, 09), V(48, ED, 2B, 32), V(AC, 70, 11, 1E), V(4E, 72, 5A, 6C), \ + V(FB, FF, 0E, FD), V(56, 38, 85, 0F), V(1E, D5, AE, 3D), V(27, 39, 2D, 36), \ + V(64, D9, 0F, 0A), V(21, A6, 5C, 68), V(D1, 54, 5B, 9B), V(3A, 2E, 36, 24), \ + V(B1, 67, 0A, 0C), V(0F, E7, 57, 93), V(D2, 96, EE, B4), V(9E, 91, 9B, 1B), \ + V(4F, C5, C0, 80), V(A2, 20, DC, 61), V(69, 4B, 77, 5A), V(16, 1A, 12, 1C), \ + V(0A, BA, 93, E2), V(E5, 2A, A0, C0), V(43, E0, 22, 3C), V(1D, 17, 1B, 12), \ + V(0B, 0D, 09, 0E), V(AD, C7, 8B, F2), V(B9, A8, B6, 2D), V(C8, A9, 1E, 14), \ + V(85, 19, F1, 57), V(4C, 07, 75, AF), V(BB, DD, 99, EE), V(FD, 60, 7F, A3), \ + V(9F, 26, 01, F7), V(BC, F5, 72, 5C), V(C5, 3B, 66, 44), V(34, 7E, FB, 5B), \ + V(76, 29, 43, 8B), V(DC, C6, 23, CB), V(68, FC, ED, B6), V(63, F1, E4, B8), \ + V(CA, DC, 31, D7), V(10, 85, 63, 42), V(40, 22, 97, 13), V(20, 11, C6, 84), \ + V(7D, 24, 4A, 85), V(F8, 3D, BB, D2), V(11, 32, F9, AE), V(6D, A1, 29, C7), \ + V(4B, 2F, 9E, 1D), V(F3, 30, B2, DC), V(EC, 52, 86, 0D), V(D0, E3, C1, 77), \ + V(6C, 16, B3, 2B), V(99, B9, 70, A9), V(FA, 48, 94, 11), V(22, 64, E9, 47), \ + V(C4, 8C, FC, A8), V(1A, 3F, F0, A0), V(D8, 2C, 7D, 56), V(EF, 90, 33, 22), \ + V(C7, 4E, 49, 87), V(C1, D1, 38, D9), V(FE, A2, CA, 8C), V(36, 0B, D4, 98), \ + V(CF, 81, F5, A6), V(28, DE, 7A, A5), V(26, 8E, B7, DA), V(A4, BF, AD, 3F), \ + V(E4, 9D, 3A, 2C), V(0D, 92, 78, 50), V(9B, CC, 5F, 6A), V(62, 46, 7E, 54), \ + V(C2, 13, 8D, F6), V(E8, B8, D8, 90), V(5E, F7, 39, 2E), V(F5, AF, C3, 82), \ + V(BE, 80, 5D, 9F), V(7C, 93, D0, 69), V(A9, 2D, D5, 6F), V(B3, 12, 25, CF), \ + V(3B, 99, AC, C8), V(A7, 7D, 18, 10), V(6E, 63, 9C, E8), V(7B, BB, 3B, DB), \ + V(09, 78, 26, CD), V(F4, 18, 59, 6E), V(01, B7, 9A, EC), V(A8, 9A, 4F, 83), \ + V(65, 6E, 95, E6), V(7E, E6, FF, AA), V(08, CF, BC, 21), V(E6, E8, 15, EF), \ + V(D9, 9B, E7, BA), V(CE, 36, 6F, 4A), V(D4, 09, 9F, EA), V(D6, 7C, B0, 29), \ + V(AF, B2, A4, 31), V(31, 23, 3F, 2A), V(30, 94, A5, C6), V(C0, 66, A2, 35), \ + V(37, BC, 4E, 74), V(A6, CA, 82, FC), V(B0, D0, 90, E0), V(15, D8, A7, 33), \ + V(4A, 98, 04, F1), V(F7, DA, EC, 41), V(0E, 50, CD, 7F), V(2F, F6, 91, 17), \ + V(8D, D6, 4D, 76), V(4D, B0, EF, 43), V(54, 4D, AA, CC), V(DF, 04, 96, E4), \ + V(E3, B5, D1, 9E), V(1B, 88, 6A, 4C), V(B8, 1F, 2C, C1), V(7F, 51, 65, 46), \ + V(04, EA, 5E, 9D), V(5D, 35, 8C, 01), V(73, 74, 87, FA), V(2E, 41, 0B, FB), \ + V(5A, 1D, 67, B3), V(52, D2, DB, 92), V(33, 56, 10, E9), V(13, 47, D6, 6D), \ + V(8C, 61, D7, 9A), V(7A, 0C, A1, 37), V(8E, 14, F8, 59), V(89, 3C, 13, EB), \ + V(EE, 27, A9, CE), V(35, C9, 61, B7), V(ED, E5, 1C, E1), V(3C, B1, 47, 7A), \ + V(59, DF, D2, 9C), V(3F, 73, F2, 55), V(79, CE, 14, 18), V(BF, 37, C7, 73), \ + V(EA, CD, F7, 53), V(5B, AA, FD, 5F), V(14, 6F, 3D, DF), V(86, DB, 44, 78), \ + V(81, F3, AF, CA), V(3E, C4, 68, B9), V(2C, 34, 24, 38), V(5F, 40, A3, C2), \ + V(72, C3, 1D, 16), V(0C, 25, E2, BC), V(8B, 49, 3C, 28), V(41, 95, 0D, FF), \ + V(71, 01, A8, 39), V(DE, B3, 0C, 08), V(9C, E4, B4, D8), V(90, C1, 56, 64), \ + V(61, 84, CB, 7B), V(70, B6, 32, D5), V(74, 5C, 6C, 48), V(42, 57, B8, D0) + + #define V(a, b, c, d) 0x ## a ## b ## c ## d +static const uint32_t RT0[256] = {RT}; + #undef V + + #if !defined(MBEDTLS_AES_FEWER_TABLES) + + #define V(a, b, c, d) 0x ## b ## c ## d ## a +static const uint32_t RT1[256] = {RT}; + #undef V + + #define V(a, b, c, d) 0x ## c ## d ## a ## b +static const uint32_t RT2[256] = {RT}; + #undef V + + #define V(a, b, c, d) 0x ## d ## a ## b ## c +static const uint32_t RT3[256] = {RT}; + #undef V + + #endif /* !MBEDTLS_AES_FEWER_TABLES */ + + #undef RT + +/* + * Round constants + */ +static const uint32_t RCON[10] = +{ + 0x00000001, 0x00000002, 0x00000004, 0x00000008, + 0x00000010, 0x00000020, 0x00000040, 0x00000080, + 0x0000001B, 0x00000036 +}; + + #else /* MBEDTLS_AES_ROM_TABLES */ + +/* + * Forward S-box & tables + */ +static unsigned char FSb[256]; // NOLINT(readability-magic-numbers) +static uint32_t FT0[256]; // NOLINT(readability-magic-numbers) + #if !defined(MBEDTLS_AES_FEWER_TABLES) +static uint32_t FT1[256]; +static uint32_t FT2[256]; +static uint32_t FT3[256]; + #endif /* !MBEDTLS_AES_FEWER_TABLES */ + +/* + * Reverse S-box & tables + */ +static unsigned char RSb[256]; +static uint32_t RT0[256]; + #if !defined(MBEDTLS_AES_FEWER_TABLES) +static uint32_t RT1[256]; +static uint32_t RT2[256]; +static uint32_t RT3[256]; + #endif /* !MBEDTLS_AES_FEWER_TABLES */ + +/* + * Round constants + */ +static uint32_t RCON[10]; + +/* + * Tables generation code + */ + #define ROTL8(x) (((x) << 8) & 0xFFFFFFFF) | ((x) >> 24) // NOLINT(readability-magic-numbers) + #define XTIME(x) (((x) << 1) ^ (((x) & 0x80) ? 0x1B : 0x00)) // NOLINT(readability-magic-numbers) + #define MUL(x, y) (((x) && (y)) ? pow[(log[(x)] + log[(y)]) % 255] : 0) // NOLINT(readability-magic-numbers) + +static int aes_init_done = 0; + +static void aes_gen_tables (void) +{ + int i; + int x; + int y; + int z; + int pow[256]; + int log[256]; + (void) (RT0); /* To remove unused variable warning */ + + /* + * compute pow and log tables over GF(2^8) + */ + x = 1; + for (i = 0; i < 256; i++) + { + pow[i] = x; + log[x] = i; + x = (x ^ XTIME(x)) & 0xFF; // NOLINT(readability-magic-numbers) + } + + /* + * calculate the round constants + */ + x = 1; + for (i = 0; i < 10; i++) + { + RCON[i] = (uint32_t) x; + x = XTIME(x) & 0xFF; // NOLINT(readability-magic-numbers) + } + + /* + * generate the forward and reverse S-boxes + */ + FSb[0x00] = 0x63; // NOLINT(readability-magic-numbers) + RSb[0x63] = 0x00; // NOLINT(readability-magic-numbers) + + for (i = 1; i < 256; i++) + { + x = pow[255 - log[i]]; // NOLINT(readability-magic-numbers) + + y = x; y = ((y << 1) | (y >> 7)) & 0xFF; // NOLINT(readability-magic-numbers) + x ^= y; y = ((y << 1) | (y >> 7)) & 0xFF; // NOLINT(readability-magic-numbers) + x ^= y; y = ((y << 1) | (y >> 7)) & 0xFF; // NOLINT(readability-magic-numbers) + x ^= y; y = ((y << 1) | (y >> 7)) & 0xFF; // NOLINT(readability-magic-numbers) + x ^= y ^ 0x63; // NOLINT(readability-magic-numbers) + + FSb[i] = (unsigned char) x; + RSb[x] = (unsigned char) i; + } + + /* + * generate the forward and reverse tables + */ + for (i = 0; i < 256; i++) + { + x = FSb[i]; + y = XTIME(x) & 0xFF; // NOLINT(readability-magic-numbers) + z = (y ^ x) & 0xFF; // NOLINT(readability-magic-numbers) + + FT0[i] = ((uint32_t) y) ^ + ((uint32_t) x << 8) ^ + ((uint32_t) x << 16) ^ + ((uint32_t) z << 24); + + #if !defined(MBEDTLS_AES_FEWER_TABLES) + FT1[i] = ROTL8(FT0[i]); + FT2[i] = ROTL8(FT1[i]); + FT3[i] = ROTL8(FT2[i]); + #endif /* !MBEDTLS_AES_FEWER_TABLES */ + + x = RSb[i]; + + RT0[i] = ((uint32_t) MUL(0x0E, x)) ^ + ((uint32_t) MUL(0x09, x) << 8) ^ + ((uint32_t) MUL(0x0D, x) << 16) ^ + ((uint32_t) MUL(0x0B, x) << 24); + + #if !defined(MBEDTLS_AES_FEWER_TABLES) + RT1[i] = ROTL8(RT0[i]); + RT2[i] = ROTL8(RT1[i]); + RT3[i] = ROTL8(RT2[i]); + #endif /* !MBEDTLS_AES_FEWER_TABLES */ + } +} + + #undef ROTL8 + + #endif /* MBEDTLS_AES_ROM_TABLES */ + + #if defined(MBEDTLS_AES_FEWER_TABLES) + + #define ROTL8(x) ((uint32_t) ((x) << 8) + (uint32_t) ((x) >> 24)) + #define ROTL16(x) ((uint32_t) ((x) << 16) + (uint32_t) ((x) >> 16)) + #define ROTL24(x) ((uint32_t) ((x) << 24) + (uint32_t) ((x) >> 8)) + + #define AES_RT0(idx) RT0[idx] + #define AES_RT1(idx) ROTL8(RT0[idx]) + #define AES_RT2(idx) ROTL16(RT0[idx]) + #define AES_RT3(idx) ROTL24(RT0[idx]) + + #define AES_FT0(idx) FT0[idx] + #define AES_FT1(idx) ROTL8(FT0[idx]) + #define AES_FT2(idx) ROTL16(FT0[idx]) + #define AES_FT3(idx) ROTL24(FT0[idx]) + + #else /* MBEDTLS_AES_FEWER_TABLES */ + + #define AES_RT0(idx) RT0[idx] + #define AES_RT1(idx) RT1[idx] + #define AES_RT2(idx) RT2[idx] + #define AES_RT3(idx) RT3[idx] + + #define AES_FT0(idx) FT0[idx] + #define AES_FT1(idx) FT1[idx] + #define AES_FT2(idx) FT2[idx] + #define AES_FT3(idx) FT3[idx] + + #endif /* MBEDTLS_AES_FEWER_TABLES */ + +static void mbedtls_aes_init (mbedtls_aes_context * ctx) +{ + AES_VALIDATE(ctx != NULL); + + memset(ctx, 0, sizeof(mbedtls_aes_context)); +} + +static void mbedtls_aes_free (mbedtls_aes_context * ctx) +{ + if (ctx == NULL) + { + return; + } + + mbedtls_platform_zeroize(ctx, sizeof(mbedtls_aes_context)); +} + +/* + * AES key schedule (encryption) + */ + +// #if !defined(MBEDTLS_AES_SETKEY_ENC_ALT) +static int mbedtls_aes_setkey_enc (mbedtls_aes_context * ctx, const unsigned char * key, unsigned int keybits) +{ + unsigned int i; + uint32_t * RK; + + AES_VALIDATE_RET(ctx != NULL); + AES_VALIDATE_RET(key != NULL); + ctx->nr = 14; + + #if !defined(MBEDTLS_AES_ROM_TABLES) + if (aes_init_done == 0) + { + aes_gen_tables(); + aes_init_done = 1; + } + #endif + + #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16) + if (aes_padlock_ace == -1) + { + aes_padlock_ace = mbedtls_padlock_has_support(MBEDTLS_PADLOCK_ACE); + } + + if (aes_padlock_ace) + { + ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16(ctx->buf); + } + else + #endif + RK = ctx->buf; + ctx->rk = ctx->buf; + + #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if (mbedtls_aesni_has_support(MBEDTLS_AESNI_AES)) + { + return mbedtls_aesni_setkey_enc((unsigned char *) ctx->rk, key, keybits); + } + #endif + + for (i = 0; i < (keybits >> 5); i++) + { + GET_UINT32_LE(RK[i], key, i << 2); + } + + for (i = 0; i < 7; i++, RK += 8) + { + RK[8] = RK[0] ^ RCON[i] ^ + ((uint32_t) FSb[(RK[7] >> 8) & 0xFF]) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(RK[7] >> 16) & 0xFF] << 8) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(RK[7] >> 24) & 0xFF] << 16) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(RK[7]) & 0xFF] << 24); // NOLINT(readability-magic-numbers) + + RK[9] = RK[1] ^ RK[8]; + RK[10] = RK[2] ^ RK[9]; + RK[11] = RK[3] ^ RK[10]; + + RK[12] = RK[4] ^ + ((uint32_t) FSb[(RK[11]) & 0xFF]) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(RK[11] >> 8) & 0xFF] << 8) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(RK[11] >> 16) & 0xFF] << 16) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(RK[11] >> 24) & 0xFF] << 24); // NOLINT(readability-magic-numbers) + + RK[13] = RK[5] ^ RK[12]; + RK[14] = RK[6] ^ RK[13]; + RK[15] = RK[7] ^ RK[14]; + } + + return 0; +} + +// #endif /* !MBEDTLS_AES_SETKEY_ENC_ALT */ + + #define AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3) \ + do \ + { \ + (X0) = *RK++ ^ AES_FT0(((Y0)) & 0xFF) ^ \ + AES_FT1(((Y1) >> 8) & 0xFF) ^ \ + AES_FT2(((Y2) >> 16) & 0xFF) ^ \ + AES_FT3(((Y3) >> 24) & 0xFF); \ + \ + (X1) = *RK++ ^ AES_FT0(((Y1)) & 0xFF) ^ \ + AES_FT1(((Y2) >> 8) & 0xFF) ^ \ + AES_FT2(((Y3) >> 16) & 0xFF) ^ \ + AES_FT3(((Y0) >> 24) & 0xFF); \ + \ + (X2) = *RK++ ^ AES_FT0(((Y2)) & 0xFF) ^ \ + AES_FT1(((Y3) >> 8) & 0xFF) ^ \ + AES_FT2(((Y0) >> 16) & 0xFF) ^ \ + AES_FT3(((Y1) >> 24) & 0xFF); \ + \ + (X3) = *RK++ ^ AES_FT0(((Y3)) & 0xFF) ^ \ + AES_FT1(((Y0) >> 8) & 0xFF) ^ \ + AES_FT2(((Y1) >> 16) & 0xFF) ^ \ + AES_FT3(((Y2) >> 24) & 0xFF); \ + } while (0) + + #define AES_RROUND(X0, \ + X1, \ + X2, \ + X3, \ + Y0, \ + Y1, \ + Y2, \ + Y3) \ + do \ + { \ + (X0) = *RK++ ^ AES_RT0(((Y0)) & 0xFF) ^ \ + AES_RT1(((Y3) >> 8) & 0xFF) ^ \ + AES_RT2(((Y2) >> 16) & 0xFF) ^ \ + AES_RT3(((Y1) >> 24) & 0xFF); \ + \ + (X1) = *RK++ ^ AES_RT0(((Y1)) & 0xFF) ^ \ + AES_RT1(((Y0) >> 8) & 0xFF) ^ \ + AES_RT2(((Y3) >> 16) & 0xFF) ^ \ + AES_RT3(((Y2) >> 24) & 0xFF); \ + \ + (X2) = *RK++ ^ AES_RT0(((Y2)) & 0xFF) ^ \ + AES_RT1(((Y1) >> 8) & 0xFF) ^ \ + AES_RT2(((Y0) >> 16) & 0xFF) ^ \ + AES_RT3(((Y3) >> 24) & 0xFF); \ + \ + (X3) = *RK++ ^ AES_RT0(((Y3)) & 0xFF) ^ \ + AES_RT1(((Y2) >> 8) & 0xFF) ^ \ + AES_RT2(((Y1) >> 16) & 0xFF) ^ \ + AES_RT3(((Y0) >> 24) & 0xFF); \ + } while (0) + +/* + * AES-ECB block encryption + */ +static int mbedtls_internal_aes_encrypt (mbedtls_aes_context * ctx, const unsigned char input[16], + unsigned char output[16]) +{ + int i; + uint32_t * RK; + uint32_t X0; + uint32_t X1; + uint32_t X2; + uint32_t X3; + uint32_t Y0; + uint32_t Y1; + uint32_t Y2; + uint32_t Y3; + + RK = ctx->rk; + + GET_UINT32_LE(X0, input, 0); X0 ^= *RK++; + GET_UINT32_LE(X1, input, 4); X1 ^= *RK++; + GET_UINT32_LE(X2, input, 8); X2 ^= *RK++; + GET_UINT32_LE(X3, input, 12); X3 ^= *RK++; + + for (i = (ctx->nr >> 1) - 1; i > 0; i--) + { + AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); + AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); + } + + AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); + + X0 = *RK++ ^ \ + ((uint32_t) FSb[(Y0) & 0xFF]) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y1 >> 8) & 0xFF] << 8) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y2 >> 16) & 0xFF] << 16) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y3 >> 24) & 0xFF] << 24); // NOLINT(readability-magic-numbers) + + X1 = *RK++ ^ \ + ((uint32_t) FSb[(Y1) & 0xFF]) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y2 >> 8) & 0xFF] << 8) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y3 >> 16) & 0xFF] << 16) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y0 >> 24) & 0xFF] << 24); // NOLINT(readability-magic-numbers) + + X2 = *RK++ ^ \ + ((uint32_t) FSb[(Y2) & 0xFF]) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y3 >> 8) & 0xFF] << 8) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y0 >> 16) & 0xFF] << 16) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y1 >> 24) & 0xFF] << 24); // NOLINT(readability-magic-numbers) + + X3 = *RK++ ^ \ + ((uint32_t) FSb[(Y3) & 0xFF]) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y0 >> 8) & 0xFF] << 8) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y1 >> 16) & 0xFF] << 16) ^ // NOLINT(readability-magic-numbers) + ((uint32_t) FSb[(Y2 >> 24) & 0xFF] << 24); // NOLINT(readability-magic-numbers) + + PUT_UINT32_LE(X0, output, 0); + PUT_UINT32_LE(X1, output, 4); + PUT_UINT32_LE(X2, output, 8); + PUT_UINT32_LE(X3, output, 12); + + mbedtls_platform_zeroize(&X0, sizeof(X0)); + mbedtls_platform_zeroize(&X1, sizeof(X1)); + mbedtls_platform_zeroize(&X2, sizeof(X2)); + mbedtls_platform_zeroize(&X3, sizeof(X3)); + + mbedtls_platform_zeroize(&Y0, sizeof(Y0)); + mbedtls_platform_zeroize(&Y1, sizeof(Y1)); + mbedtls_platform_zeroize(&Y2, sizeof(Y2)); + mbedtls_platform_zeroize(&Y3, sizeof(Y3)); + + mbedtls_platform_zeroize(&RK, sizeof(RK)); + + return 0; +} + +/* + * AES-ECB block encryption/decryption + */ +static int mbedtls_aes_crypt_ecb (mbedtls_aes_context * ctx, + int mode, + const unsigned char input[16], + unsigned char output[16]) +{ + AES_VALIDATE_RET(ctx != NULL); + AES_VALIDATE_RET(input != NULL); + AES_VALIDATE_RET(output != NULL); + AES_VALIDATE_RET(mode == MBEDTLS_AES_ENCRYPT || + mode == MBEDTLS_AES_DECRYPT); + + #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) + if (mbedtls_aesni_has_support(MBEDTLS_AESNI_AES)) + { + return mbedtls_aesni_crypt_ecb(ctx, mode, input, output); + } + #endif + + #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86) + if (aes_padlock_ace) + { + if (mbedtls_padlock_xcryptecb(ctx, mode, input, output) == 0) + { + return 0; + } + + // If padlock data misaligned, we just fall back to + // unaccelerated mode + // + } + #endif + + return mbedtls_internal_aes_encrypt(ctx, input, output); +} + +void sw_aes_256_enc_test (void) +{ + uint8_t input[128] = {0xa5}; // NOLINT(readability-magic-numbers) + uint8_t output[256] = {0}; // NOLINT(readability-magic-numbers) + uint8_t aes256key[32] = {0x55}; // NOLINT(readability-magic-numbers) + memset(input, 0xa5, 128); // NOLINT(readability-magic-numbers) + memset(aes256key, 0x55, 32); // NOLINT(readability-magic-numbers) + mbedtls_aes_context ctx; + mbedtls_aes_init(&ctx); + mbedtls_aes_setkey_enc(&ctx, aes256key, 256); // NOLINT(readability-magic-numbers) + mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, input, output); +} + +#endif /* MBEDTLS_CTR_DRBG_C_ALT */ diff --git a/ra/fsp/src/rm_psa_crypto/ecdsa_alt.c b/ra/fsp/src/rm_psa_crypto/ecdsa_alt.c index 423e39cc3..2f4079be4 100644 --- a/ra/fsp/src/rm_psa_crypto/ecdsa_alt.c +++ b/ra/fsp/src/rm_psa_crypto/ecdsa_alt.c @@ -45,6 +45,7 @@ #endif #include "psa/crypto.h" + #include "hw_sce_private.h" /* Parameter validation macros based on platform_util.h */ #define ECDSA_VALIDATE_RET(cond) \ @@ -61,6 +62,7 @@ uint32_t ecp_load_key_size(bool wrapped_mode_ctx, mbedtls_ecp_group * grp); static void ecp_mpi_load(mbedtls_mpi * X, const mbedtls_mpi_uint * p, size_t len) __attribute__((unused)); int ecp_load_parameters_sce(const mbedtls_ecp_group * grp, uint8_t * p_curve_params_buff); int ecp_can_do_sce(mbedtls_ecp_group_id gid); +int ecp_load_curve_attributes_sce(const mbedtls_ecp_group * grp, uint32_t * p_curve_type, uint32_t * p_cmd, sce_oem_cmd_t * oem_priv_cmd); static const hw_sce_ecc_generatesign_t g_ecdsa_generate_sign_lookup[][2] = { @@ -313,6 +315,45 @@ int ecp_can_do_sce (mbedtls_ecp_group_id gid) } } +int ecp_load_curve_attributes_sce (const mbedtls_ecp_group * grp, uint32_t * p_curve_type, uint32_t * p_cmd, sce_oem_cmd_t * oem_priv_cmd) +{ + int ret = 0; + sce_oem_cmd_t priv_key_command = SCE_OEM_CMD_NUM; + switch (grp->id) + { + case MBEDTLS_ECP_DP_SECP256R1: + { + *p_curve_type = 0x0; + *p_cmd = 0x0; + priv_key_command = SCE_OEM_CMD_ECC_P256_PRIVATE; + break; + } + case MBEDTLS_ECP_DP_SECP384R1: + { + *p_curve_type = 0x0; + *p_cmd = 0x0; + priv_key_command = SCE_OEM_CMD_ECC_P384_PRIVATE; + break; + } + case MBEDTLS_ECP_DP_SECP256K1: + { + *p_curve_type = 0x2; + *p_cmd = 0x0; + priv_key_command = SCE_OEM_CMD_ECC_SECP256K1_PRIVATE; + break; + } + default: + { + ret = -1; + } + } + if (NULL != oem_priv_cmd) + { + *oem_priv_cmd = priv_key_command; + } + return ret; +} + #endif // (defined(MBEDTLS_ECDSA_SIGN_ALT) || defined(MBEDTLS_ECDSA_VERIFY_ALT) || defined(MBEDTLS_ECP_ALT)) #if defined(MBEDTLS_ECDSA_SIGN_ALT) @@ -344,7 +385,6 @@ int mbedtls_ecdsa_sign (mbedtls_ecp_group * grp, int ret = 0; hw_sce_ecc_generatesign_t p_hw_sce_ecc_generatesign = NULL; - uint32_t * p_curve_params_buff_32; uint32_t * p_private_key_buff_32; uint32_t * p_signature_buff_32; uint32_t * p_common_buff_32; @@ -370,7 +410,68 @@ int mbedtls_ecdsa_sign (mbedtls_ecp_group * grp, { return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; } +#if BSP_FEATURE_CRYPTO_HAS_SCE9 + /* Obtain a common 32-bit aligned buffer. It will be used for all the following items in this order: + * Private Key (D) of size private_key_size_words + * Signature (rs) of size curve_bytes * 2 + * Padded/truncated 32-bit aligned copy of input hash of size curve_bytes */ + p_common_buff_32 = mbedtls_calloc(((curve_bytes * 3) / 4) + private_key_size_words, sizeof(uint32_t)); + + if (NULL == p_common_buff_32) + { + return MBEDTLS_ERR_ECP_ALLOC_FAILED; + } + + p_private_key_buff_32 = p_common_buff_32; + p_signature_buff_32 = p_private_key_buff_32 + private_key_size_words; + + /* The hash input (buf) should have a length of at least the curve size: + * nist.fips.186-4: " A hash function that provides a lower security strength than + * the security strength associated with the bit length of 'n' ordinarily should not be used, since this + * would reduce the security strength of the digital signature process to a level no greater than that + * provided by the hash function." + * However, the SCE HW functions only parse hash of exactly curve_bytes length so + * *-Any larger hash data will be truncated. + * *-Any smaller data will be 0-padded to the LEFT. + * + * Even if the hash input is the same size as the curve, we will still do a copy because the user input + * is an 8-bit pointer whereas the SCE HW expects a 32-bit pointer and there could possibly be + * an alignment issue. */ + p_buf_8 = (uint8_t *) (p_signature_buff_32 + ((curve_bytes * 2) / 4)); + uint32_t bytes_to_copy = blen > curve_bytes ? curve_bytes : blen; + memcpy(p_buf_8 + (curve_bytes - bytes_to_copy), buf, bytes_to_copy); + uint32_t curve_type; + uint32_t cmd; + ret = ecp_load_curve_attributes_sce(grp, &curve_type, &cmd, NULL); + if (ret) + { + } + else if (0 != mbedtls_mpi_write_binary(d, (uint8_t *) p_private_key_buff_32, private_key_size_words * 4)) + { + ret = MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL; + } + else if (FSP_SUCCESS != + p_hw_sce_ecc_generatesign(&curve_type, &cmd, + p_private_key_buff_32, (uint32_t *) p_buf_8, p_signature_buff_32, + p_signature_buff_32 + curve_bytes / 4)) + { + ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + /* Import the generated signature into the r and s mpis */ + else if (0 != mbedtls_mpi_read_binary(r, (uint8_t *) p_signature_buff_32, curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; + } + else if (0 != mbedtls_mpi_read_binary(s, (uint8_t *) (p_signature_buff_32 + (curve_bytes / 4)), curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; + } + else + { + ret = 0; + } +#else /* Obtain a common 32-bit aligned buffer. It will be used for all the following items in this order: * Curve parameters a, b, p, n, Gx, Gy. Each of the 6 fields are of size curve_bytes = PSA_BITS_TO_BYTES( ecp->grp.pbits ) * Private Key (D) of size private_key_size_words @@ -383,7 +484,7 @@ int mbedtls_ecdsa_sign (mbedtls_ecp_group * grp, return MBEDTLS_ERR_ECP_ALLOC_FAILED; } - p_curve_params_buff_32 = p_common_buff_32; + uint32_t * p_curve_params_buff_32 = p_common_buff_32; p_private_key_buff_32 = p_curve_params_buff_32 + ((curve_bytes * 6) / 4); p_signature_buff_32 = p_private_key_buff_32 + private_key_size_words; @@ -431,7 +532,7 @@ int mbedtls_ecdsa_sign (mbedtls_ecp_group * grp, { ret = 0; } - +#endif mbedtls_free(p_common_buff_32); return ret; @@ -460,7 +561,6 @@ int mbedtls_ecdsa_verify (mbedtls_ecp_group * grp, ECDSA_VALIDATE_RET(buf != NULL || blen == 0); int ret; - uint32_t * p_curve_params_buff_32; uint32_t * p_public_key_buff_32; uint32_t * p_signature_buff_32; uint32_t * p_common_buff_32; @@ -488,7 +588,70 @@ int mbedtls_ecdsa_verify (mbedtls_ecp_group * grp, { return MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED; } +#if BSP_FEATURE_CRYPTO_HAS_SCE9 + /* Obtain a 32-bit aligned block of memory. It will be used for all the following items in this order: + * Public Key (Q) of size curve_bytes * 2 + * Signature (rs) of size curve_bytes * 2 + * Padded/truncated 32-bit aligned copy of input hash of size curve_bytes */ + p_common_buff_32 = mbedtls_calloc(((curve_bytes * 5) / 4), sizeof(uint32_t)); + + if (NULL == p_common_buff_32) + { + return MBEDTLS_ERR_ECP_ALLOC_FAILED; + } + + p_public_key_buff_32 = p_common_buff_32; + p_signature_buff_32 = p_public_key_buff_32 + ((curve_bytes * 2) / 4); + /* The hash input (buf) should have a length of at least the curve size: + * nist.fips.186-4: " A hash function that provides a lower security strength than + * the security strength associated with the bit length of 'n' ordinarily should not be used, since this + * would reduce the security strength of the digital signature process to a level no greater than that + * provided by the hash function." + * However, the SCE HW functions only parse hash of exactly curve_bytes length so + * *-Any larger hash data will be truncated. + * *-Any smaller data will be 0-padded to the LEFT. + * + * Even if the hash input is the same size as the curve, we will still do a copy because the user input + * is an 8-bit pointer whereas the SCE HW expects a 32-bit pointer and there could possibly be + * an alignment issue. */ + p_buf_8 = (uint8_t *) (p_signature_buff_32 + ((curve_bytes * 2) / 4)); + uint32_t bytes_to_copy = blen > curve_bytes ? curve_bytes : blen; + memcpy(p_buf_8 + (curve_bytes - bytes_to_copy), buf, bytes_to_copy); + + uint32_t curve_type; + uint32_t cmd; + ret = ecp_load_curve_attributes_sce(grp, &curve_type, &cmd, NULL); + if (ret) + { + } + else if (0 != mbedtls_mpi_write_binary(&Q->X, (uint8_t *) p_public_key_buff_32, curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL; + } + else if (0 != mbedtls_mpi_write_binary(&Q->Y, (uint8_t *) (p_public_key_buff_32 + (curve_bytes / 4)), curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL; + } + else if (0 != mbedtls_mpi_write_binary(r, (uint8_t *) p_signature_buff_32, curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL; + } + else if (0 != mbedtls_mpi_write_binary(s, (uint8_t *) (p_signature_buff_32 + (curve_bytes / 4)), curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL; + } + else + { + if (FSP_SUCCESS != + p_hw_sce_ecc_verifysign(&curve_type, &cmd, + p_public_key_buff_32, (uint32_t *) p_buf_8, p_signature_buff_32, + p_signature_buff_32 + (curve_bytes / 4))) + { + ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; + } + } +#else /* Obtain a 32-bit aligned block of memory. It will be used for all the following items in this order: * Curve parameters a, b, p, n, Gx, Gy. Each of the 6 fields are of size curve_bytes = PSA_BITS_TO_BYTES( ecp->grp.pbits ) * Public Key (Q) of size curve_bytes * 2 @@ -501,7 +664,7 @@ int mbedtls_ecdsa_verify (mbedtls_ecp_group * grp, return MBEDTLS_ERR_ECP_ALLOC_FAILED; } - p_curve_params_buff_32 = p_common_buff_32; + uint32_t * p_curve_params_buff_32 = p_common_buff_32; p_public_key_buff_32 = p_curve_params_buff_32 + ((curve_bytes * 6) / 4); p_signature_buff_32 = p_public_key_buff_32 + ((curve_bytes * 2) / 4); @@ -551,7 +714,7 @@ int mbedtls_ecdsa_verify (mbedtls_ecp_group * grp, ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; } } - +#endif mbedtls_free(p_common_buff_32); return ret; diff --git a/ra/fsp/src/rm_psa_crypto/ecp_alt_process.c b/ra/fsp/src/rm_psa_crypto/ecp_alt_process.c index ef0af07a9..14f2cb400 100644 --- a/ra/fsp/src/rm_psa_crypto/ecp_alt_process.c +++ b/ra/fsp/src/rm_psa_crypto/ecp_alt_process.c @@ -81,6 +81,7 @@ #include "mbedtls/ecp_internal.h" #include "psa/crypto.h" + #include "hw_sce_private.h" static const hw_sce_ecc_generatekey_t g_ecp_keygen_lookup[][2] = { @@ -107,36 +108,65 @@ static const hw_sce_ecc_generatekey_t g_ecp_keygen_lookup[][2] = #endif }; + #if !BSP_FEATURE_CRYPTO_HAS_SCE9 static const hw_sce_ecc_scalarmultiplication_t g_ecp_scalar_multiplication_lookup[][2] = { - #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) || defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) || \ + #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) || defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) || \ defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) - #if PSA_CRYPTO_IS_PLAINTEXT_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + #if PSA_CRYPTO_IS_PLAINTEXT_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_256_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_PLAINTEXT] = HW_SCE_ECC_256ScalarMultiplication, - #endif - #if PSA_CRYPTO_IS_WRAPPED_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + #endif + #if PSA_CRYPTO_IS_WRAPPED_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_256_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_WRAPPED] = HW_SCE_ECC_256HrkScalarMultiplication, + #endif #endif - #endif - #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) || defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) - #if PSA_CRYPTO_IS_PLAINTEXT_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) || defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) + #if PSA_CRYPTO_IS_PLAINTEXT_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_384_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_PLAINTEXT] = HW_SCE_ECC_384ScalarMultiplication, - #endif - #if PSA_CRYPTO_IS_WRAPPED_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + #endif + #if PSA_CRYPTO_IS_WRAPPED_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_384_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_WRAPPED] = HW_SCE_ECC_384HrkScalarMultiplication, + #endif + #endif +}; + #else + +static const hw_sce_ecc_scalarmultiplication_t g_ecp_scalar_multiplication_lookup[][2] = +{ + #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) || defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) + #if PSA_CRYPTO_IS_PLAINTEXT_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_256_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_PLAINTEXT] = + HW_SCE_ECC_256WrappedScalarMultiplication, + #endif + #if PSA_CRYPTO_IS_WRAPPED_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_256_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_WRAPPED] = + HW_SCE_ECC_256WrappedScalarMultiplication, + #endif + #endif + #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) || defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) + #if PSA_CRYPTO_IS_PLAINTEXT_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_384_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_PLAINTEXT] = + HW_SCE_ECC_384WrappedScalarMultiplication, + #endif + #if PSA_CRYPTO_IS_WRAPPED_SUPPORT_REQUIRED(PSA_CRYPTO_CFG_ECC_FORMAT) + [RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(ECC_384_PRIVATE_KEY_LENGTH_BITS)][RM_PSA_CRYPTO_ECC_KEY_WRAPPED] = + HW_SCE_ECC_384WrappedScalarMultiplication, + #endif #endif - #endif }; + #endif /* * Generate a private key */ extern int ecp_load_parameters_sce(const mbedtls_ecp_group * grp, uint8_t * p_curve_params_buff); extern int ecp_can_do_sce(mbedtls_ecp_group_id gid); +extern int ecp_load_curve_attributes_sce(const mbedtls_ecp_group * grp, uint32_t * p_curve_type, uint32_t * p_cmd, sce_oem_cmd_t * oem_priv_cmd); uint32_t ecp_load_key_size(bool wrapped_mode_ctx, const mbedtls_ecp_group * grp); @@ -195,7 +225,6 @@ int mbedtls_ecp_gen_privkey (const mbedtls_ecp_group * grp, ECP_VALIDATE_RET(grp != NULL); ECP_VALIDATE_RET(d != NULL); - uint32_t * p_curve_params_buff_32; uint32_t * p_public_key_buff_32; uint32_t * p_private_key_buff_32; uint32_t * p_common_buff_32; @@ -230,7 +259,46 @@ int mbedtls_ecp_gen_privkey (const mbedtls_ecp_group * grp, } size_t curve_bytes = PSA_BITS_TO_BYTES(grp->pbits); +#if BSP_FEATURE_CRYPTO_HAS_SCE9 + /* Obtain a common 32-bit aligned buffer. It will be used for all the following items in this order: + * Private Key (D) of size private_key_size_words + * Public Key (Q) of size ECC_PUBLIC_KEY_SIZE_BYTES */ + p_common_buff_32 = mbedtls_calloc((ECC_PUBLIC_KEY_SIZE_BYTES(curve_bytes) / 4) + private_key_size_words, sizeof(uint32_t)); + + if (NULL == p_common_buff_32) + { + return MBEDTLS_ERR_ECP_ALLOC_FAILED; + } + p_private_key_buff_32 = p_common_buff_32; + p_public_key_buff_32 = p_private_key_buff_32 + private_key_size_words; + + uint32_t curve_type; + uint32_t cmd; + ret = ecp_load_curve_attributes_sce(grp, &curve_type, &cmd, NULL); + if (ret) + { + } + /* Public key generated within p_public_key_buff_32 is unused. + * The caller, if needed, generates the public key using scalar multiply + * */ + else if (FSP_SUCCESS != + p_hw_sce_ecc_generatekey(&curve_type, &cmd, p_private_key_buff_32, p_public_key_buff_32)) + { + ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + else if (0 != + mbedtls_mpi_read_binary(d, (uint8_t *) p_private_key_buff_32, private_key_size_words * 4)) + { + ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; + } + else + { + ret = 0; + } + /* Clear out the allocated buffer */ + memset(p_common_buff_32, 0, (ECC_PUBLIC_KEY_SIZE_BYTES(curve_bytes) + (private_key_size_words * 4))); +#else /* Obtain a common 32-bit aligned buffer. It will be used for all the following items in this order: * Curve parameters a, b, p, n, Gx, Gy. Each of the 6 fields are of size curve_bytes = PSA_BITS_TO_BYTES( ecp->grp.pbits ) * Private Key (D) of size private_key_size_words @@ -242,7 +310,7 @@ int mbedtls_ecp_gen_privkey (const mbedtls_ecp_group * grp, return MBEDTLS_ERR_ECP_ALLOC_FAILED; } - p_curve_params_buff_32 = p_common_buff_32; + uint32_t * p_curve_params_buff_32 = p_common_buff_32; p_private_key_buff_32 = p_curve_params_buff_32 + ((curve_bytes * 6) / 4); p_public_key_buff_32 = p_private_key_buff_32 + private_key_size_words; @@ -268,7 +336,7 @@ int mbedtls_ecp_gen_privkey (const mbedtls_ecp_group * grp, /* Clear out the allocated buffer */ memset(p_common_buff_32, 0, ((curve_bytes * 8) + (private_key_size_words * 4))); - +#endif mbedtls_free(p_common_buff_32); return ret; @@ -292,15 +360,13 @@ int mbedtls_ecp_mul_restartable (mbedtls_ecp_group * grp, ECP_VALIDATE_RET(P != NULL); int ret = 0; - fsp_err_t err; + fsp_err_t err = FSP_SUCCESS; hw_sce_ecc_scalarmultiplication_t p_hw_sce_ecc_scalarmultiplication = NULL; - uint32_t * p_curve_params_buff_32; uint32_t * p_point_buff_P_32; uint32_t * p_integer_buff_m_32; uint32_t * p_point_result_buff_R_32; uint32_t * p_common_buff_32; - uint32_t integer_size_words = 0; /* Fail cleanly on curves that HW doesn't support. * Fail if the point co-ordinates are in Jacobian format (only Affine is supported). @@ -317,14 +383,109 @@ int mbedtls_ecp_mul_restartable (mbedtls_ecp_group * grp, { return MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED; } + + size_t curve_bytes = PSA_BITS_TO_BYTES(grp->pbits); - integer_size_words = ecp_load_key_size((bool) grp->vendor_ctx, grp); - if (0 == integer_size_words) +#if BSP_FEATURE_CRYPTO_HAS_SCE9 + /* Scalar multiply only accepts wrapped scalars. */ + uint32_t m_size_wrapped_words = ecp_load_key_size((bool) true, grp); + if (0 == m_size_wrapped_words) { return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; } - size_t curve_bytes = PSA_BITS_TO_BYTES(grp->pbits); + uint32_t m_size_words = ecp_load_key_size((bool) grp->vendor_ctx, grp); + if (0 == m_size_words) + { + return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; + } + + /* Obtain a common 32-bit aligned buffer. It will be used for all the following items in this order: + * Multiplication point (P) of size curve_bytes * 2 in format (Px|Py) + * Multiplication result (R) of size curve_bytes * 2 in format (Rx|Ry) + * Input scalar (m) of size m_size_words + * Input wrapped scalar (m) of size m_size_wrapped_words */ + p_common_buff_32 = mbedtls_calloc(((curve_bytes * 4) / 4) + m_size_wrapped_words + m_size_words, sizeof(uint32_t)); + + if (NULL == p_common_buff_32) + { + return MBEDTLS_ERR_ECP_ALLOC_FAILED; + } + + p_point_buff_P_32 = p_common_buff_32; + p_point_result_buff_R_32 = p_point_buff_P_32 + ((curve_bytes * 2) / 4); + p_integer_buff_m_32 = p_point_result_buff_R_32 + ((curve_bytes * 2) / 4); + uint32_t * p_integer_buff_m_wrapped_32 = p_integer_buff_m_32 + m_size_words; + + uint32_t curve_type; + uint32_t cmd; + sce_oem_cmd_t oem_cmd; + ret = ecp_load_curve_attributes_sce(grp, &curve_type, &cmd, &oem_cmd); + if (0 == ret) + { + ret = mbedtls_mpi_write_binary(m, (uint8_t *) p_integer_buff_m_32, m_size_words * 4); + } + if (m_size_words != m_size_wrapped_words) + { + + /* Install the plaintext private key to get the wrapped private key */ + err = HW_SCE_GenerateOemKeyIndexPrivate(SCE_OEM_KEY_TYPE_PLAIN, + oem_cmd, + NULL, + NULL, + (const uint8_t *)p_integer_buff_m_32, + p_integer_buff_m_wrapped_32); + } + else + { + memcpy(p_integer_buff_m_wrapped_32, p_integer_buff_m_32, m_size_wrapped_words * 4); + } + if ((FSP_SUCCESS != err) || (0 != ret)) + { + ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + /* Write Px into the buffer in reverse */ + else if (0 != + mbedtls_mpi_write_binary(&P->X, (uint8_t *) p_point_buff_P_32, curve_bytes)) + { + ret = MBEDTLS_ERR_ECP_ALLOC_FAILED; + } + /* Write Py into the buffer in reverse */ + else if (0 != + mbedtls_mpi_write_binary(&P->Y, (uint8_t *) (p_point_buff_P_32 + ((curve_bytes) / 4)), curve_bytes)) + { + ret = MBEDTLS_ERR_ECP_ALLOC_FAILED; + } + else if (FSP_SUCCESS != + p_hw_sce_ecc_scalarmultiplication(&curve_type, + &cmd, + p_integer_buff_m_wrapped_32, + p_point_buff_P_32, + p_point_result_buff_R_32)) + { + ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + else if (0 != + mbedtls_mpi_read_binary(&R->X, (uint8_t *) p_point_result_buff_R_32, curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; + } + else if (0 != + mbedtls_mpi_read_binary(&R->Y, (uint8_t *) (p_point_result_buff_R_32 + ((curve_bytes) / 4)), + curve_bytes)) + { + ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; + } + else + { + ret = 0; + } +#else + uint32_t integer_size_words = ecp_load_key_size((bool) grp->vendor_ctx, grp); + if (0 == integer_size_words) + { + return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; + } /* Obtain a common 32-bit aligned buffer. It will be used for all the following items in this order: * Curve parameters a, b, p, n, Gx, Gy. Each of the 6 fields are of size curve_bytes = PSA_BITS_TO_BYTES( ecp->grp.pbits ) @@ -338,7 +499,7 @@ int mbedtls_ecp_mul_restartable (mbedtls_ecp_group * grp, return MBEDTLS_ERR_ECP_ALLOC_FAILED; } - p_curve_params_buff_32 = p_common_buff_32; + uint32_t * p_curve_params_buff_32 = p_common_buff_32; p_point_buff_P_32 = p_curve_params_buff_32 + ((curve_bytes * 6) / 4); p_point_result_buff_R_32 = p_point_buff_P_32 + ((curve_bytes * 2) / 4); p_integer_buff_m_32 = p_point_result_buff_R_32 + ((curve_bytes * 2) / 4); @@ -392,6 +553,7 @@ int mbedtls_ecp_mul_restartable (mbedtls_ecp_group * grp, ret = 0; } } +#endif /* * For Affine format, copy the input Z value to the output. diff --git a/ra/fsp/src/rm_psa_crypto/inc/aes_alt.h b/ra/fsp/src/rm_psa_crypto/inc/aes_alt.h index eccf77e5b..8d6673bec 100644 --- a/ra/fsp/src/rm_psa_crypto/inc/aes_alt.h +++ b/ra/fsp/src/rm_psa_crypto/inc/aes_alt.h @@ -23,7 +23,7 @@ extern "C" { #endif -#if defined(MBEDTLS_AES_ALT) +#if defined(MBEDTLS_AES_ALT) || defined(MBEDTLS_CTR_DRBG_C_ALT) /** * \brief The AES context-type definition. @@ -42,7 +42,8 @@ extern "C" *

    gOdO51WNd5?-uyDZAq-W*Gul?$ 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

  • */ void *vendor_ctx; /*!< Vendor defined context. */ } mbedtls_aes_context; - +#endif +#if defined(MBEDTLS_AES_ALT) #if defined(MBEDTLS_CIPHER_MODE_XTS) /** diff --git a/ra/fsp/src/rm_psa_crypto/inc/asymmetric_vendor.h b/ra/fsp/src/rm_psa_crypto/inc/asymmetric_vendor.h index efe32edac..65844369c 100644 --- a/ra/fsp/src/rm_psa_crypto/inc/asymmetric_vendor.h +++ b/ra/fsp/src/rm_psa_crypto/inc/asymmetric_vendor.h @@ -63,26 +63,6 @@ psa_status_t psa_ecdsa_verify(mbedtls_ecp_keypair * ecp, size_t hash_length, const uint8_t * signature, size_t signature_length); -psa_status_t psa_import_rsa_key(psa_key_type_t type, - const uint8_t * data, - size_t data_length, - mbedtls_rsa_context ** p_rsa); -psa_status_t psa_read_rsa_exponent(const uint8_t * domain_parameters, - size_t domain_parameters_size, - int * exponent); -psa_status_t psa_rsa_sign(mbedtls_rsa_context * rsa, - psa_algorithm_t alg, - const uint8_t * hash, - size_t hash_length, - uint8_t * signature, - size_t signature_size, - size_t * signature_length); -psa_status_t psa_rsa_verify(mbedtls_rsa_context * rsa, - psa_algorithm_t alg, - const uint8_t * hash, - size_t hash_length, - const uint8_t * signature, - size_t signature_length); /* Functions to support vendor defined format */ psa_status_t psa_import_ec_private_key_vendor(psa_ecc_curve_t curve, @@ -104,4 +84,26 @@ int ecp_gen_key_vendor(mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair * key); #endif /* MBEDTLS_ECP_ALT */ +#if defined(MBEDTLS_RSA_ALT) +psa_status_t psa_import_rsa_key(psa_key_type_t type, + const uint8_t * data, + size_t data_length, + mbedtls_rsa_context ** p_rsa); +psa_status_t psa_read_rsa_exponent(const uint8_t * domain_parameters, size_t domain_parameters_size, int * exponent); +psa_status_t psa_rsa_sign(mbedtls_rsa_context * rsa, + psa_algorithm_t alg, + const uint8_t * hash, + size_t hash_length, + uint8_t * signature, + size_t signature_size, + size_t * signature_length); +psa_status_t psa_rsa_verify(mbedtls_rsa_context * rsa, + psa_algorithm_t alg, + const uint8_t * hash, + size_t hash_length, + const uint8_t * signature, + size_t signature_length); + +#endif /* MBEDTLS_RSA_ALT */ + #endif /* ASYMMETRIC_VENDOR_H */ diff --git a/ra/fsp/src/rm_psa_crypto/inc/ctr_drbg_alt.h b/ra/fsp/src/rm_psa_crypto/inc/ctr_drbg_alt.h new file mode 100644 index 000000000..85ef7c53b --- /dev/null +++ b/ra/fsp/src/rm_psa_crypto/inc/ctr_drbg_alt.h @@ -0,0 +1,575 @@ +/** + * \file ctr_drbg_alt.h + * + * \brief This file contains definitions and functions for the + * CTR_DRBG pseudorandom generator. + * + * CTR_DRBG is a standardized way of building a PRNG from a block-cipher + * in counter mode operation, as defined in NIST SP 800-90A: + * Recommendation for Random Number Generation Using Deterministic Random + * Bit Generators. + * + * The Mbed TLS implementation of CTR_DRBG uses AES-256 (default) or AES-128 + * (if \c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY is enabled at compile time) + * as the underlying block cipher, with a derivation function. + * + * The security strength as defined in NIST SP 800-90A is + * 128 bits when AES-128 is used (\c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY enabled) + * and 256 bits otherwise, provided that MBEDTLS_CTR_DRBG_ENTROPY_LEN is + * kept at its default value (and not overridden in config.h) and that the + * DRBG instance is set up with default parameters. + * See the documentation of mbedtls_ctr_drbg_seed() for more + * information. + */ + +/* + * Copyright (C) 2006-2019, Arm Limited (or its affiliates), 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 + * + * 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. + * + * This file is part of Mbed TLS (https://tls.mbed.org) + */ + +#ifndef MBEDTLS_CTR_DRBG_ALT_H + #define MBEDTLS_CTR_DRBG_ALT_H + + #if !defined(MBEDTLS_CONFIG_FILE) + #include "mbedtls/config.h" + #else + #include MBEDTLS_CONFIG_FILE + #endif + + #include "aes_alt.h" + + #if defined(MBEDTLS_THREADING_C) + #include "mbedtls/threading.h" + #endif + + #define MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -0x0034 /**< The entropy source failed. */ + #define MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG -0x0036 /**< The requested random buffer length is too big. */ + #define MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG -0x0038 /**< The input (entropy + additional data) is too large. */ + #define MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR -0x003A /**< Read or write error in file. */ + + #define MBEDTLS_CTR_DRBG_BLOCKSIZE 16 /**< The block size used by the cipher. */ + + #if defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) + #define MBEDTLS_CTR_DRBG_KEYSIZE 16 + +/**< The key size in bytes used by the cipher. + * + * Compile-time choice: 16 bytes (128 bits) + * because #MBEDTLS_CTR_DRBG_USE_128_BIT_KEY is enabled. + */ + #else + #define MBEDTLS_CTR_DRBG_KEYSIZE 32 + +/**< The key size in bytes used by the cipher. + * + * Compile-time choice: 32 bytes (256 bits) + * because \c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY is disabled. + */ + #endif + + #define MBEDTLS_CTR_DRBG_KEYBITS (MBEDTLS_CTR_DRBG_KEYSIZE * 8) /**< The key size for the DRBG operation, in bits. */ + #define MBEDTLS_CTR_DRBG_SEEDLEN (MBEDTLS_CTR_DRBG_KEYSIZE + MBEDTLS_CTR_DRBG_BLOCKSIZE) /**< The seed length, calculated as (counter + AES key). */ + +/** + * \name SECTION: Module settings + * + * The configuration options you can set for this module are in this section. + * Either change them in config.h or define them using the compiler command + * line. + * \{ + */ + +/** \def MBEDTLS_CTR_DRBG_ENTROPY_LEN + * + * \brief The amount of entropy used per seed by default, in bytes. + */ + #if !defined(MBEDTLS_CTR_DRBG_ENTROPY_LEN) + #if defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256) + +/** This is 48 bytes because the entropy module uses SHA-512 + * (\c MBEDTLS_ENTROPY_FORCE_SHA256 is disabled). + */ + #define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 + + #else /* defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256) */ + +/** This is 32 bytes because the entropy module uses SHA-256 + * (the SHA512 module is disabled or + * \c MBEDTLS_ENTROPY_FORCE_SHA256 is enabled). + */ + #if !defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) + +/** \warning To achieve a 256-bit security strength, you must pass a nonce + * to mbedtls_ctr_drbg_seed(). + */ + #endif /* !defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) */ + #define MBEDTLS_CTR_DRBG_ENTROPY_LEN 32 + #endif /* defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256) */ + #endif /* !defined(MBEDTLS_CTR_DRBG_ENTROPY_LEN) */ + + #if !defined(MBEDTLS_CTR_DRBG_RESEED_INTERVAL) + #define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000 + +/**< The interval before reseed is performed by default. */ + #endif + + #if !defined(MBEDTLS_CTR_DRBG_MAX_INPUT) + #define MBEDTLS_CTR_DRBG_MAX_INPUT 256 + +/**< The maximum number of additional input Bytes. */ + #endif + + #if !defined(MBEDTLS_CTR_DRBG_MAX_REQUEST) + #define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 + +/**< The maximum number of requested Bytes per call. */ + #endif + + #if !defined(MBEDTLS_CTR_DRBG_MAX_SEED_INPUT) + #define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 + +/**< The maximum size of seed or reseed buffer in bytes. */ + #endif + +/* \} name SECTION: Module settings */ + + #define MBEDTLS_CTR_DRBG_PR_OFF 0 + +/**< Prediction resistance is disabled. */ + #define MBEDTLS_CTR_DRBG_PR_ON 1 + +/**< Prediction resistance is enabled. */ + + #ifdef __cplusplus +extern "C" { + #endif + + #if MBEDTLS_CTR_DRBG_ENTROPY_LEN >= MBEDTLS_CTR_DRBG_KEYSIZE * 3 / 2 + +/** The default length of the nonce read from the entropy source. + * + * This is \c 0 because a single read from the entropy source is sufficient + * to include a nonce. + * See the documentation of mbedtls_ctr_drbg_seed() for more information. + */ + #define MBEDTLS_CTR_DRBG_ENTROPY_NONCE_LEN 0 + #else + +/** The default length of the nonce read from the entropy source. + * + * This is half of the default entropy length because a single read from + * the entropy source does not provide enough material to form a nonce. + * See the documentation of mbedtls_ctr_drbg_seed() for more information. + */ + #define MBEDTLS_CTR_DRBG_ENTROPY_NONCE_LEN (MBEDTLS_CTR_DRBG_ENTROPY_LEN + 1) / 2 + #endif + +/** + * \brief The CTR_DRBG context structure. + */ +typedef struct mbedtls_ctr_drbg_context +{ + unsigned char counter[16]; /*!< The counter (V). */ + int reseed_counter; /*!< The reseed counter. + * This is the number of requests that have + * been made since the last (re)seeding, + * minus one. + * Before the initial seeding, this field + * contains the amount of entropy in bytes + * to use as a nonce for the initial seeding, + * or -1 if no nonce length has been explicitly + * set (see mbedtls_ctr_drbg_set_nonce_len()). + */ + int prediction_resistance; /*!< This determines whether prediction + * resistance is enabled, that is + * whether to systematically reseed before + * each random generation. */ + size_t entropy_len; /*!< The amount of entropy grabbed on each + * seed or reseed operation, in bytes. */ + int reseed_interval; /*!< The reseed interval. + * This is the maximum number of requests + * that can be made between reseedings. */ + + mbedtls_aes_context aes_ctx; /*!< The AES context. */ + + /* + * Callbacks (Entropy) + */ + int (* f_entropy)(void *, unsigned char *, size_t); + + /*!< The entropy callback function. */ + + void * p_entropy; /*!< The context for the entropy function. */ + + #if defined(MBEDTLS_THREADING_C) + mbedtls_threading_mutex_t mutex; + #endif +} mbedtls_ctr_drbg_context; + +/** + * \brief This function initializes the CTR_DRBG context, + * and prepares it for mbedtls_ctr_drbg_seed() + * or mbedtls_ctr_drbg_free(). + * + * \param ctx The CTR_DRBG context to initialize. + */ +void mbedtls_ctr_drbg_init(mbedtls_ctr_drbg_context * ctx); + +/** + * \brief This function seeds and sets up the CTR_DRBG + * entropy source for future reseeds. + * + * A typical choice for the \p f_entropy and \p p_entropy parameters is + * to use the entropy module: + * - \p f_entropy is mbedtls_entropy_func(); + * - \p p_entropy is an instance of mbedtls_entropy_context initialized + * with mbedtls_entropy_init() (which registers the platform's default + * entropy sources). + * + * The entropy length is MBEDTLS_CTR_DRBG_ENTROPY_LEN by default. + * You can override it by calling mbedtls_ctr_drbg_set_entropy_len(). + * + * The entropy nonce length is: + * - \c 0 if the entropy length is at least 3/2 times the entropy length, + * which guarantees that the security strength is the maximum permitted + * by the key size and entropy length according to NIST SP 800-90A §10.2.1; + * - Half the entropy length otherwise. + * You can override it by calling mbedtls_ctr_drbg_set_nonce_len(). + * With the default entropy length, the entropy nonce length is + * MBEDTLS_CTR_DRBG_ENTROPY_NONCE_LEN. + * + * You can provide a nonce and personalization string in addition to the + * entropy source, to make this instantiation as unique as possible. + * See SP 800-90A §8.6.7 for more details about nonces. + * + * The _seed_material_ value passed to the derivation function in + * the CTR_DRBG Instantiate Process described in NIST SP 800-90A §10.2.1.3.2 + * is the concatenation of the following strings: + * - A string obtained by calling \p f_entropy function for the entropy + * length. + */ + #if MBEDTLS_CTR_DRBG_ENTROPY_NONCE_LEN == 0 + +/** + * - If mbedtls_ctr_drbg_set_nonce_len() has been called, a string + * obtained by calling \p f_entropy function for the specified length. + */ + #else + +/** + * - A string obtained by calling \p f_entropy function for the entropy nonce + * length. If the entropy nonce length is \c 0, this function does not + * make a second call to \p f_entropy. + */ + #endif + +/** + * - The \p custom string. + * + * \note To achieve the nominal security strength permitted + * by CTR_DRBG, the entropy length must be: + * - at least 16 bytes for a 128-bit strength + * (maximum achievable strength when using AES-128); + * - at least 32 bytes for a 256-bit strength + * (maximum achievable strength when using AES-256). + * + * In addition, if you do not pass a nonce in \p custom, + * the sum of the entropy length + * and the entropy nonce length must be: + * - at least 24 bytes for a 128-bit strength + * (maximum achievable strength when using AES-128); + * - at least 48 bytes for a 256-bit strength + * (maximum achievable strength when using AES-256). + * + * \param ctx The CTR_DRBG context to seed. + * It must have been initialized with + * mbedtls_ctr_drbg_init(). + * After a successful call to mbedtls_ctr_drbg_seed(), + * you may not call mbedtls_ctr_drbg_seed() again on + * the same context unless you call + * mbedtls_ctr_drbg_free() and mbedtls_ctr_drbg_init() + * again first. + * \param f_entropy The entropy callback, taking as arguments the + * \p p_entropy context, the buffer to fill, and the + * length of the buffer. + * \p f_entropy is always called with a buffer size + * less than or equal to the entropy length. + * \param p_entropy The entropy context to pass to \p f_entropy. + * \param custom The personalization string. + * This can be \c NULL, in which case the personalization + * string is empty regardless of the value of \p len. + * \param len The length of the personalization string. + * This must be at most + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + * - MBEDTLS_CTR_DRBG_ENTROPY_LEN. + * + * \return \c 0 on success. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED on failure. + */ +int mbedtls_ctr_drbg_seed(mbedtls_ctr_drbg_context * ctx, + int (* f_entropy)(void *, unsigned char *, size_t), + void * p_entropy, + const unsigned char * custom, + size_t len); + +/** + * \brief This function clears CTR_CRBG context data. + * + * \param ctx The CTR_DRBG context to clear. + */ +void mbedtls_ctr_drbg_free(mbedtls_ctr_drbg_context * ctx); + +/** + * \brief This function turns prediction resistance on or off. + * The default value is off. + * + * \note If enabled, entropy is gathered at the beginning of + * every call to mbedtls_ctr_drbg_random_with_add() + * or mbedtls_ctr_drbg_random(). + * Only use this if your entropy source has sufficient + * throughput. + * + * \param ctx The CTR_DRBG context. + * \param resistance MBEDTLS_CTR_DRBG_PR_ON or MBEDTLS_CTR_DRBG_PR_OFF. + */ +void mbedtls_ctr_drbg_set_prediction_resistance(mbedtls_ctr_drbg_context * ctx, int resistance); + +/** + * \brief This function sets the amount of entropy grabbed on each + * seed or reseed. + * + * The default value is MBEDTLS_CTR_DRBG_ENTROPY_LEN. + * + * \note The security strength of CTR_DRBG is bounded by the + * entropy length. Thus: + * - When using AES-256 + * (\c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY is disabled, + * which is the default), + * \p len must be at least 32 (in bytes) + * to achieve a 256-bit strength. + * - When using AES-128 + * (\c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY is enabled) + * \p len must be at least 16 (in bytes) + * to achieve a 128-bit strength. + * + * \param ctx The CTR_DRBG context. + * \param len The amount of entropy to grab, in bytes. + * This must be at most MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + * and at most the maximum length accepted by the + * entropy function that is set in the context. + */ +void mbedtls_ctr_drbg_set_entropy_len(mbedtls_ctr_drbg_context * ctx, size_t len); + +/** + * \brief This function sets the amount of entropy grabbed + * as a nonce for the initial seeding. + * + * Call this function before calling mbedtls_ctr_drbg_seed() to read + * a nonce from the entropy source during the initial seeding. + * + * \param ctx The CTR_DRBG context. + * \param len The amount of entropy to grab for the nonce, in bytes. + * This must be at most MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + * and at most the maximum length accepted by the + * entropy function that is set in the context. + * + * \return \c 0 on success. + * \return MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG if \p len is + * more than MBEDTLS_CTR_DRBG_MAX_SEED_INPUT. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED + * if the initial seeding has already taken place. + */ +int mbedtls_ctr_drbg_set_nonce_len(mbedtls_ctr_drbg_context * ctx, size_t len); + +/** + * \brief This function sets the reseed interval. + * + * The reseed interval is the number of calls to mbedtls_ctr_drbg_random() + * or mbedtls_ctr_drbg_random_with_add() after which the entropy function + * is called again. + * + * The default value is MBEDTLS_CTR_DRBG_RESEED_INTERVAL. + * + * \param ctx The CTR_DRBG context. + * \param interval The reseed interval. + */ +void mbedtls_ctr_drbg_set_reseed_interval(mbedtls_ctr_drbg_context * ctx, int interval); + +/** + * \brief This function reseeds the CTR_DRBG context, that is + * extracts data from the entropy source. + * + * \param ctx The CTR_DRBG context. + * \param additional Additional data to add to the state. Can be \c NULL. + * \param len The length of the additional data. + * This must be less than + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT - \c entropy_len + * where \c entropy_len is the entropy length + * configured for the context. + * + * \return \c 0 on success. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED on failure. + */ +int mbedtls_ctr_drbg_reseed(mbedtls_ctr_drbg_context * ctx, const unsigned char * additional, size_t len); + +/** + * \brief This function updates the state of the CTR_DRBG context. + * + * \param ctx The CTR_DRBG context. + * \param additional The data to update the state with. This must not be + * \c NULL unless \p add_len is \c 0. + * \param add_len Length of \p additional in bytes. This must be at + * most MBEDTLS_CTR_DRBG_MAX_SEED_INPUT. + * + * \return \c 0 on success. + * \return MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG if + * \p add_len is more than + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT. + * \return An error from the underlying AES cipher on failure. + */ +int mbedtls_ctr_drbg_update_ret(mbedtls_ctr_drbg_context * ctx, const unsigned char * additional, size_t add_len); + +/** + * \brief This function updates a CTR_DRBG instance with additional + * data and uses it to generate random data. + * + * This function automatically reseeds if the reseed counter is exceeded + * or prediction resistance is enabled. + * + * \param p_rng The CTR_DRBG context. This must be a pointer to a + * #mbedtls_ctr_drbg_context structure. + * \param output The buffer to fill. + * \param output_len The length of the buffer in bytes. + * \param additional Additional data to update. Can be \c NULL, in which + * case the additional data is empty regardless of + * the value of \p add_len. + * \param add_len The length of the additional data + * if \p additional is not \c NULL. + * This must be less than MBEDTLS_CTR_DRBG_MAX_INPUT + * and less than + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT - \c entropy_len + * where \c entropy_len is the entropy length + * configured for the context. + * + * \return \c 0 on success. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or + * MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG on failure. + */ +int mbedtls_ctr_drbg_random_with_add(void * p_rng, + unsigned char * output, + size_t output_len, + const unsigned char * additional, + size_t add_len); + +/** + * \brief This function uses CTR_DRBG to generate random data. + * + * This function automatically reseeds if the reseed counter is exceeded + * or prediction resistance is enabled. + * + * + * \param p_rng The CTR_DRBG context. This must be a pointer to a + * #mbedtls_ctr_drbg_context structure. + * \param output The buffer to fill. + * \param output_len The length of the buffer in bytes. + * + * \return \c 0 on success. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or + * MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG on failure. + */ +int mbedtls_ctr_drbg_random(void * p_rng, unsigned char * output, size_t output_len); + + #if !defined(MBEDTLS_DEPRECATED_REMOVED) + #if defined(MBEDTLS_DEPRECATED_WARNING) + #define MBEDTLS_DEPRECATED __attribute__((deprecated)) + #else + #define MBEDTLS_DEPRECATED + #endif + +/** + * \brief This function updates the state of the CTR_DRBG context. + * + * \deprecated Superseded by mbedtls_ctr_drbg_update_ret() + * in 2.16.0. + * + * \note If \p add_len is greater than + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT, only the first + * MBEDTLS_CTR_DRBG_MAX_SEED_INPUT Bytes are used. + * The remaining Bytes are silently discarded. + * + * \param ctx The CTR_DRBG context. + * \param additional The data to update the state with. + * \param add_len Length of \p additional data. + */ +MBEDTLS_DEPRECATED void mbedtls_ctr_drbg_update(mbedtls_ctr_drbg_context * ctx, + const unsigned char * additional, + size_t add_len); + + #undef MBEDTLS_DEPRECATED + #endif /* !MBEDTLS_DEPRECATED_REMOVED */ + + #if defined(MBEDTLS_FS_IO) + +/** + * \brief This function writes a seed file. + * + * \param ctx The CTR_DRBG context. + * \param path The name of the file. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED on reseed + * failure. + */ +int mbedtls_ctr_drbg_write_seed_file(mbedtls_ctr_drbg_context * ctx, const char * path); + +/** + * \brief This function reads and updates a seed file. The seed + * is added to this instance. + * + * \param ctx The CTR_DRBG context. + * \param path The name of the file. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error. + * \return MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED on + * reseed failure. + * \return MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG if the existing + * seed file is too large. + */ +int mbedtls_ctr_drbg_update_seed_file(mbedtls_ctr_drbg_context * ctx, const char * path); + + #endif /* MBEDTLS_FS_IO */ + + #if defined(MBEDTLS_SELF_TEST) + +/** + * \brief The CTR_DRBG checkup routine. + * + * \return \c 0 on success. + * \return \c 1 on failure. + */ +int mbedtls_ctr_drbg_self_test(int verbose); + + #endif /* MBEDTLS_SELF_TEST */ +void sw_aes_256_enc_test(void); + + #ifdef __cplusplus +} + #endif + +#endif /* ctr_drbg.h */ diff --git a/ra/fsp/src/rm_psa_crypto/inc/ecp_alt.h b/ra/fsp/src/rm_psa_crypto/inc/ecp_alt.h index 25c27c452..45e0ca000 100644 --- a/ra/fsp/src/rm_psa_crypto/inc/ecp_alt.h +++ b/ra/fsp/src/rm_psa_crypto/inc/ecp_alt.h @@ -34,7 +34,6 @@ // Alternate implementation // - #define RM_PSA_CRYPTO_ECP_LOOKUP_INDEX(bits) ((bits >> 7) & (1U)) #define RM_PSA_CRYPTO_ECC_KEY_PLAINTEXT (0U) #define RM_PSA_CRYPTO_ECC_KEY_WRAPPED (1U) diff --git a/ra/fsp/src/rm_psa_crypto/inc/rsa_alt.h b/ra/fsp/src/rm_psa_crypto/inc/rsa_alt.h index b1c8f6f43..2cc31a47f 100644 --- a/ra/fsp/src/rm_psa_crypto/inc/rsa_alt.h +++ b/ra/fsp/src/rm_psa_crypto/inc/rsa_alt.h @@ -34,6 +34,47 @@ // Alternate implementation // + #if BSP_FEATURE_CRYPTO_HAS_SCE9 + +/** Return RSA wrapped private key size in bytes from the specified RSA modulus size in bits. + * This is the size of sce_rsa2048_private_key_index_t. + */ + #define RSA_WRAPPED_PRIVATE_KEY_SIZE_BYTES(RSA_SIZE_BITS) ((RSA_SIZE_BITS / 8U) + 532U) + +/** Return size of any additional info generated by HW for the specified RSA modulus size in bits + * This is the size of everything in sce_rsa2048_public_key_index_t other than public key N + */ + #define RSA_ADDITIONAL_KEY_INFO_SIZE_BYTES(RSA_SIZE_BITS) ((1U * 4U) + 4U + 12U + (68U * 4U)) + +/** Return RSA public key size in bytes from the specified RSA modulus size in bits. + * This is the size of sce_rsa2048_public_key_index_t. + */ + #define RSA_WRAPPED_PUBLIC_KEY_SIZE_BYTES(RSA_SIZE_BITS) (((RSA_SIZE_BITS) / 8U) + \ + RSA_ADDITIONAL_KEY_INFO_SIZE_BYTES) + +/** Return RSA CRT private key size in bytes from the specified RSA modulus size in bits */ + #define RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(RSA_SIZE_BITS) (0U) + +/** Return RSA domain parameter size in bytes from the specified RSA modulus size in bits. + * This is not provided, but dummy values are used since mbedCrypto requires some values + * in Q and P in order to export them. + */ + #define RSA_PARAMETERS_SIZE_BYTES(RSA_SIZE_BITS) (5U) + + #else + +/** Return RSA wrapped private key size in bytes from the specified RSA modulus size in bits */ + #define RSA_WRAPPED_PRIVATE_KEY_SIZE_BYTES(RSA_SIZE_BITS) ((((uint32_t) RSA_SIZE_BITS) + (uint32_t) 160) / 8U) + +/** Return RSA CRT private key size in bytes from the specified RSA modulus size in bits */ + #define RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(RSA_SIZE_BITS) (((uint32_t) 5 * ((uint32_t) RSA_SIZE_BITS)) / 16U) + +/** Return size of any additional info generated by HW for the specified RSA modulus size in bits */ + #define RSA_ADDITIONAL_KEY_INFO_SIZE_BYTES(RSA_SIZE_BITS) RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(RSA_SIZE_BITS) + +/** Return RSA domain parameter size in bytes from the specified RSA modulus size in bits */ + #define RSA_PARAMETERS_SIZE_BYTES(RSA_SIZE_BITS) (((RSA_SIZE_BITS) / 8U) / 2) + #endif // BSP_FEATURE_CRYPTO_HAS_SCE9 /** Return RSA modulus size in bytes from the specified RSA modulus size in bits */ #define RSA_MODULUS_SIZE_BYTES(RSA_SIZE_BITS) ((RSA_SIZE_BITS) / 8U) @@ -44,12 +85,6 @@ /** Return RSA private key size in bytes from the specified RSA modulus size in bits */ #define RSA_PLAIN_TEXT_PRIVATE_KEY_SIZE_BYTES(RSA_SIZE_BITS) (((uint32_t) 2 * (uint32_t) RSA_SIZE_BITS) / 8U) -/** Return RSA CRT private key size in bytes from the specified RSA modulus size in bits */ - #define RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(RSA_SIZE_BITS) (((uint32_t) 5 * ((uint32_t) RSA_SIZE_BITS)) / 16U) - -/** Return RSA wrapped private key size in bytes from the specified RSA modulus size in bits */ - #define RSA_WRAPPED_PRIVATE_KEY_SIZE_BYTES(RSA_SIZE_BITS) ((((uint32_t) RSA_SIZE_BITS) + (uint32_t) 160) / 8U) - /** Return RSA wrapped private CRT key size in bytes from the specified RSA modulus size in bits */ #define RSA_WRAPPPED_PRIVATE_CRT_KEY_SIZE_BYTES(RSA_SIZE_BITS) ((RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(RSA_SIZE_BITS)) + \ 20U) @@ -58,17 +93,20 @@ #define SCE_RSA_NUM_TRIES_10240 (10240U) // NIST FIPS 186-4 recommended value for 2048-bit key generation. #define SCE_RSA_NUM_TRIES_20480 (20480U) // Double the "NIST FIPS 186-4 recommended value for 2048-bit key generation" due to empirically observed periodic failure from HW implementation -/** Return RSA domain parameter size in bytes from the specified RSA modulus size in bits */ - #define RSA_PARAMETERS_SIZE_BYTES(RSA_SIZE_BITS) (((RSA_SIZE_BITS) / 8U) / 2) - /** RSA Public Exponent (E) in little endian form */ - #define RSA_PUBLIC_EXPONENT_LE (0x01000100) + #define RSA_PUBLIC_EXPONENT_LE (0x01000100) /** RSA Public Exponent (E) in big endian form */ - #define RSA_PUBLIC_EXPONENT_BE (0x00010001) + #define RSA_PUBLIC_EXPONENT_BE (0x00010001) /** RSA2048 bits */ - #define RSA_2048_BITS (2048) + #define RSA_2048_BITS (2048) + +/** RSA3072 bits */ + #define RSA_3072_BITS (3072) + +/** RSA4096 bits */ + #define RSA_4096_BITS (4096) /** * \brief The RSA context structure. diff --git a/ra/fsp/src/rm_psa_crypto/platform_alt.c b/ra/fsp/src/rm_psa_crypto/platform_alt.c index c2720012e..8f7946045 100644 --- a/ra/fsp/src/rm_psa_crypto/platform_alt.c +++ b/ra/fsp/src/rm_psa_crypto/platform_alt.c @@ -28,6 +28,13 @@ #include "platform.h" #include "hw_sce_private.h" + #if defined(CONFIG_MEDTLS_USE_AFR_MEMORY) && defined(MBEDTLS_PLATFORM_MEMORY) && \ + !(defined(MBEDTLS_PLATFORM_CALLOC_MACRO) && defined(MBEDTLS_PLATFORM_FREE_MACRO)) +extern void * pvCalloc(size_t xNumElements, size_t xSize); +extern void vPortFree(void * pv); + + #endif + /*******************************************************************************************************************//** * @addtogroup RM_PSA_CRYPTO * @{ @@ -47,27 +54,14 @@ int mbedtls_platform_setup (mbedtls_platform_context * ctx) { (void) ctx; - uint32_t iret = FSP_ERR_CRYPTO_SCE_FAIL; - - // power on the SCE module - HW_SCE_PowerOn(); - - HW_SCE_SoftReset(); - iret = HW_SCE_Initialization1(); + fsp_err_t iret = FSP_ERR_CRYPTO_SCE_FAIL; - if (FSP_SUCCESS == iret) - { - iret = HW_SCE_Initialization2(); - if (FSP_SUCCESS == iret) - { - iret = HW_SCE_secureBoot(); - } - } + #if defined(CONFIG_MEDTLS_USE_AFR_MEMORY) && defined(MBEDTLS_PLATFORM_MEMORY) && \ + !(defined(MBEDTLS_PLATFORM_CALLOC_MACRO) && defined(MBEDTLS_PLATFORM_FREE_MACRO)) + mbedtls_platform_set_calloc_free(pvCalloc, vPortFree); + #endif - if (FSP_SUCCESS == iret) - { - HW_SCE_EndianSetLittle(); - } + iret = HW_SCE_McuSpecificInit(); if (iret != FSP_SUCCESS) { diff --git a/ra/fsp/src/rm_psa_crypto/rsa_alt_process.c b/ra/fsp/src/rm_psa_crypto/rsa_alt_process.c index a732a778d..8c0399991 100644 --- a/ra/fsp/src/rm_psa_crypto/rsa_alt_process.c +++ b/ra/fsp/src/rm_psa_crypto/rsa_alt_process.c @@ -104,9 +104,10 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, (void) f_rng; (void) p_rng; - uint8_t * p_rsa2048_domain_parameters_8 = NULL; - uint32_t * p_common_buff_32 = NULL; - uint32_t private_key_size_bytes = RSA_MODULUS_SIZE_BYTES(2048); + uint8_t * p_additional_key_info_8 = NULL; + uint32_t * p_common_buff_32 = NULL; + uint32_t private_key_size_bytes = RSA_MODULUS_SIZE_BYTES(2048); + uint32_t public_key_size_bytes = RSA_MODULUS_SIZE_BYTES(2048); #if defined(MBEDTLS_CHECK_PARAMS) @@ -129,9 +130,9 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, } /* Calloc pointers created to remove clang warnings */ - uint32_t * p_rsa_private_exponent = NULL; - uint32_t * p_rsa_public_modulus = NULL; - uint32_t * p_rsa2048_domain_parameters = NULL; + uint32_t * p_rsa_private_exponent = NULL; + uint32_t * p_rsa_public_modulus = NULL; + uint32_t * p_additional_key_info = NULL; hw_sce_rsa_generatekey_t p_hw_sce_rsa_generatekey = NULL; uint8_t rsa_public_exponent[4] = {0x00, 0x01, 0x00, 0x01}; @@ -143,12 +144,14 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, } /* Obtain a 32-bit aligned block of memory. It will be used for all the following items in this order: - * Private Key D of size private_key_size_bytes - * Public Modulus N of size RSA_MODULUS_SIZE_BYTES(x) - * CRT parameters Dq|Q|Dp|P|Qp each of size RSA_PARAMETERS_SIZE_BYTES(x) */ + * Private Key D of size private_key_size_bytes + * Public Modulus N of size public_key_size_bytes + * Any additional info: + * With old procedures: CRT parameters Dq|Q|Dp|P|Qp each of size RSA_PARAMETERS_SIZE_BYTES(x) + * With new procedures: none. */ p_common_buff_32 = (uint32_t *) mbedtls_calloc((private_key_size_bytes + - (RSA_MODULUS_SIZE_BYTES(2048) + RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(2048))) / 4, + (public_key_size_bytes + RSA_ADDITIONAL_KEY_INFO_SIZE_BYTES(2048))) / 4, sizeof(uint32_t)); if (NULL == p_common_buff_32) @@ -156,20 +159,22 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, return MBEDTLS_ERR_MPI_ALLOC_FAILED; } - p_rsa_private_exponent = p_common_buff_32; - p_rsa_public_modulus = p_rsa_private_exponent + (private_key_size_bytes / 4); - p_rsa2048_domain_parameters = p_rsa_public_modulus + (RSA_MODULUS_SIZE_BYTES(2048) / 4); - p_rsa2048_domain_parameters_8 = (uint8_t *) p_rsa2048_domain_parameters; + p_rsa_private_exponent = p_common_buff_32; + p_rsa_public_modulus = p_rsa_private_exponent + (private_key_size_bytes / 4); + p_additional_key_info = p_rsa_public_modulus + (public_key_size_bytes / 4); + p_additional_key_info_8 = (uint8_t *) p_additional_key_info; if (FSP_SUCCESS != p_hw_sce_rsa_generatekey(SCE_RSA_NUM_TRIES_20480, p_rsa_private_exponent, p_rsa_public_modulus, - p_rsa2048_domain_parameters)) + p_additional_key_info)) { ret = MBEDTLS_ERR_RSA_KEY_GEN_FAILED; } /* Copy the public key data into the context */ + else if (0 != - mbedtls_mpi_read_binary(&ctx->N, (uint8_t *) p_rsa_public_modulus, RSA_MODULUS_SIZE_BYTES(2048))) + mbedtls_mpi_read_binary(&ctx->N, (uint8_t *) p_rsa_public_modulus, public_key_size_bytes)) + { ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; } @@ -185,14 +190,19 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, { ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; } - /* The generated domain parameters are in the format: + /* With old procedures: + * The generated domain parameters are in the format: * d mod (q-1) || q || d mod (p-1) || p || (1/q) mod p * Import these elements into the mbedtls_rsa_context structure * We are not using CRT so d mode (q-1), d mode (p-1) and (1/q) mod p are ignored + * With new procedures: + * These values are not generated by HW and are reading other data from the + * generated buffer. This can be removed entirely later, but will require updating + * ARM code to ignore these fields. * */ else if (0 != mbedtls_mpi_read_binary(&ctx->Q, - p_rsa2048_domain_parameters_8 + + p_additional_key_info_8 + (1 * RSA_PARAMETERS_SIZE_BYTES(2048)), RSA_PARAMETERS_SIZE_BYTES(2048))) { @@ -200,7 +210,7 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, } else if (0 != mbedtls_mpi_read_binary(&ctx->P, - p_rsa2048_domain_parameters_8 + + p_additional_key_info_8 + (3 * RSA_PARAMETERS_SIZE_BYTES(2048)), RSA_PARAMETERS_SIZE_BYTES(2048))) @@ -216,7 +226,7 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, memset(p_common_buff_32, 0, (private_key_size_bytes + - (RSA_MODULUS_SIZE_BYTES(2048) + RSA_PLAIN_TEXT_CRT_KEY_SIZE_BYTES(2048)))); + (public_key_size_bytes + RSA_ADDITIONAL_KEY_INFO_SIZE_BYTES(2048)))); /* Free the allocated memory */ mbedtls_free(p_common_buff_32); @@ -236,21 +246,51 @@ int mbedtls_rsa_gen_key (mbedtls_rsa_context * ctx, /* * Do an RSA public key operation */ - +volatile mbedtls_rsa_context * rsa_temp_ctx; int mbedtls_rsa_public (mbedtls_rsa_context * ctx, const unsigned char * input, unsigned char * output) { uint32_t temp_E = 0U; fsp_err_t iret; + uint32_t public_key_size_bytes = ctx->len; + + hw_sce_rsa_public_encrypt_t p_hw_sce_rsa_public_encrypt; + + // TODO: temporary implementation. + if (ctx->len == RSA_MODULUS_SIZE_BYTES(RSA_2048_BITS)) + { + p_hw_sce_rsa_public_encrypt = HW_SCE_RSA_2048PublicKeyEncrypt; + } + + #if BSP_FEATURE_CRYPTO_HAS_SCE9 + #if RM_PSA_CRYPTO_CFG_RSA3K_ENABLED + else if (ctx->len == RSA_MODULUS_SIZE_BYTES(RSA_3072_BITS)) + { + p_hw_sce_rsa_public_encrypt = HW_SCE_RSA_3072PublicKeyEncrypt; + } + #endif + #if RM_PSA_CRYPTO_CFG_RSA4K_ENABLED + else if (ctx->len == RSA_MODULUS_SIZE_BYTES(RSA_4096_BITS)) + { + p_hw_sce_rsa_public_encrypt = HW_SCE_RSA_4096PublicKeyEncrypt; + } + #endif + #endif + else + { + return MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED; + } + + rsa_temp_ctx = ctx; /* Calloc pointer created to remove clang warnings */ uint32_t * p_calloc_temp_buff_N = NULL; /* If the size of N is not equal to the modulus size, then that is because of the leading 00 (sign field) from the ASN1 import * Use openssl asn1parse -in private1.pem (in !test folder) to see asn1 format of key */ - if (ctx->N.n != (RSA_MODULUS_SIZE_BYTES(2048) / (sizeof(mbedtls_mpi_uint)))) + if (ctx->N.n != (ctx->len / (sizeof(mbedtls_mpi_uint)))) { /* There should be only 1 extra value (00) at the beginning; otherwise the key is in an unexpected format */ - if ((ctx->N.n - 1) != (RSA_MODULUS_SIZE_BYTES(2048) / (sizeof(mbedtls_mpi_uint)))) + if ((ctx->N.n - 1) != (ctx->len / (sizeof(mbedtls_mpi_uint)))) { return MBEDTLS_ERR_RSA_BAD_INPUT_DATA; } @@ -259,20 +299,20 @@ int mbedtls_rsa_public (mbedtls_rsa_context * ctx, const unsigned char * input, /* Reverse byte order for E */ temp_E = __REV(*ctx->E.p); - /* Obtain a 32-bit aligned block of memory to be used by the SCE for key generation */ - p_calloc_temp_buff_N = (uint32_t *) mbedtls_calloc(RSA_MODULUS_SIZE_BYTES(2048) / 4, sizeof(uint32_t)); + /* Obtain a 32-bit aligned block of memory to pass key data to the SCE */ + p_calloc_temp_buff_N = (uint32_t *) mbedtls_calloc(public_key_size_bytes / 4, sizeof(uint32_t)); if (p_calloc_temp_buff_N == NULL) { return MBEDTLS_ERR_MPI_ALLOC_FAILED;; } /* Write N into the buffer in reverse */ - mbedtls_mpi_write_binary(&ctx->N, (uint8_t *) p_calloc_temp_buff_N, RSA_MODULUS_SIZE_BYTES(2048)); + mbedtls_mpi_write_binary(&ctx->N, (uint8_t *) p_calloc_temp_buff_N, public_key_size_bytes); iret = FSP_ERR_CRYPTO_CONTINUE; for ( ; FSP_ERR_CRYPTO_CONTINUE == iret; ) { - iret = HW_SCE_RSA_2048PublicKeyEncrypt((uint32_t *) input, &temp_E, p_calloc_temp_buff_N, (uint32_t *) output); + iret = p_hw_sce_rsa_public_encrypt((uint32_t *) input, &temp_E, p_calloc_temp_buff_N, (uint32_t *) output); } /* Free the allocated buffer */ @@ -299,12 +339,12 @@ int mbedtls_rsa_private (mbedtls_rsa_context * ctx, (void) p_rng; fsp_err_t err; int ret = 0; - uint32_t private_key_size_bytes = RSA_MODULUS_SIZE_BYTES(2048); + uint32_t private_key_size_bytes = ctx->len; hw_sce_rsa_private_decrypt_t p_hw_sce_rsa_private_decrypt = NULL; if (true == (bool) ctx->vendor_ctx) { - private_key_size_bytes = RSA_WRAPPED_PRIVATE_KEY_SIZE_BYTES(2048); + private_key_size_bytes = RSA_WRAPPED_PRIVATE_KEY_SIZE_BYTES(ctx->len * 8U); } /* Calloc 32-bit pointer created to remove clang warnings */ @@ -318,10 +358,10 @@ int mbedtls_rsa_private (mbedtls_rsa_context * ctx, /* If the size of N is not equal to the modulus size, then that is because of the leading 00 (sign field) from the ASN1 import * Use openssl asn1parse -in private1.pem to see asn1 format of a .pem key */ - if (ctx->N.n != (RSA_MODULUS_SIZE_BYTES(2048) / (sizeof(mbedtls_mpi_uint)))) + if (ctx->N.n != (ctx->len / (sizeof(mbedtls_mpi_uint)))) { /* There should be only 1 extra value (00) at the beginning; otherwise the key is in an unexpected format */ - if ((ctx->N.n - 1) != (RSA_MODULUS_SIZE_BYTES(2048) / (sizeof(mbedtls_mpi_uint)))) + if ((ctx->N.n - 1) != (ctx->len / (sizeof(mbedtls_mpi_uint)))) { return MBEDTLS_ERR_RSA_BAD_INPUT_DATA; } @@ -337,7 +377,7 @@ int mbedtls_rsa_private (mbedtls_rsa_context * ctx, * Public Key (N) of size RSA_MODULUS_SIZE_BYTES(x) * Private Key (D) of size private_key_size_bytes */ - p_common_buff_32 = mbedtls_calloc(((RSA_MODULUS_SIZE_BYTES(2048) + private_key_size_bytes) / 4), sizeof(uint32_t)); + p_common_buff_32 = mbedtls_calloc(((ctx->len + private_key_size_bytes) / 4), sizeof(uint32_t)); if (NULL == p_common_buff_32) { @@ -345,10 +385,10 @@ int mbedtls_rsa_private (mbedtls_rsa_context * ctx, } p_calloc_temp_buff_N = p_common_buff_32; - p_calloc_temp_buff_D = p_calloc_temp_buff_N + (RSA_MODULUS_SIZE_BYTES(2048) / 4); + p_calloc_temp_buff_D = p_calloc_temp_buff_N + (ctx->len / 4); /* Write N into the buffer in reverse */ - if (0 != mbedtls_mpi_write_binary(&ctx->N, (uint8_t *) p_calloc_temp_buff_N, RSA_MODULUS_SIZE_BYTES(2048))) + if (0 != mbedtls_mpi_write_binary(&ctx->N, (uint8_t *) p_calloc_temp_buff_N, ctx->len)) { ret = MBEDTLS_ERR_ECP_ALLOC_FAILED; } diff --git a/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_Flash.c b/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_Flash.c new file mode 100644 index 000000000..c7a5fd246 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_Flash.c @@ -0,0 +1,609 @@ +/* + * Copyright (c) 2018-2020 Arm Limited. All rights reserved. + * + * 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. + */ + +#include "Driver_Flash.h" +#include "r_flash_hp.h" + +/** + * \file Driver_Flash.c + * + * \brief CMSIS Flash driver for RA flash controller + */ + +#ifndef ARG_UNUSED + #define ARG_UNUSED(arg) (void) arg +#endif + +#ifndef ARG_NOT_USED + #define ARG_NOT_USED 0U +#endif + +/* Driver version */ +#define ARM_FLASH_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1, 0) + +const ARM_DRIVER_VERSION Flash_Driver_Version = +{ + ARM_FLASH_API_VERSION, /* Defined in the CMSIS Flash Driver header file */ + ARM_FLASH_DRV_VERSION +}; + +#define DFLASH_DEV g_tfm_fsp_flash +#define CFLASH_DEV g_tfm_fsp_flash + +extern flash_instance_t DFLASH_DEV; +extern flash_instance_t CFLASH_DEV; + +/** + * Data types values + */ +typedef enum e_driver_flash_type +{ + CODE_FLASH, + DATA_FLASH +} driver_flash_type_t; + +/** + * Event ready values for ARM_FLASH_CAPABILITIES::event_ready + * \ref ARM_FLASH_CAPABILITIES + */ +enum +{ + EVENT_READY_NOT_AVAILABLE = 0u, + EVENT_READY_AVAILABLE +}; + +/** + * Data width values for ARM_FLASH_CAPABILITIES::data_width + * \ref ARM_FLASH_CAPABILITIES + */ +enum +{ + DATA_WIDTH_8BIT = 0u, + DATA_WIDTH_16BIT, + DATA_WIDTH_32BIT +}; + +/** + * Erase chip values for ARM_FLASH_CAPABILITIES::erase_chip + * \ref ARM_FLASH_CAPABILITIES + */ +enum +{ + CHIP_ERASE_NOT_SUPPORTED = 0u, + CHIP_ERASE_SUPPORTED +}; + +/** Driver Capabilities */ +static const ARM_FLASH_CAPABILITIES DriverCapabilities = +{ + .event_ready = EVENT_READY_NOT_AVAILABLE, + .data_width = DATA_WIDTH_16BIT, + .erase_chip = CHIP_ERASE_SUPPORTED +}; + +/** + * \brief Flash busy values flash status \ref ARM_FLASH_STATUS + */ +enum +{ + DRIVER_STATUS_IDLE = 0u, + DRIVER_STATUS_BUSY +}; + +/** + * \brief Flash error values flash status \ref ARM_FLASH_STATUS + */ +enum +{ + DRIVER_STATUS_NO_ERROR = 0u, + DRIVER_STATUS_ERROR +}; + +/** + * \brief Arm Flash device structure. + */ +typedef struct _FLASHx_Resources +{ + flash_instance_t * dev; /*!< FLASH memory device structure */ + ARM_FLASH_INFO * data; /*!< FLASH memory device data */ + ARM_FLASH_STATUS * status; +} ARM_FLASHx_Resources; + +static ARM_DRIVER_VERSION ARM_Flash_GetVersion (void) +{ + return Flash_Driver_Version; +} + +static ARM_FLASH_CAPABILITIES ARM_Flash_GetCapabilities (void) +{ + return DriverCapabilities; +} + +static int32_t ARM_Flashx_Initialize (ARM_FLASHx_Resources * ARM_FLASHx_DEV, + ARM_Flash_SignalEvent_t cb_event, + driver_flash_type_t flash_type) +{ + ARG_UNUSED(cb_event); + uint32_t flash_size = 0U; + uint32_t page_size = 0U; + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_BUSY; + + R_FLASH_HP_Close(ARM_FLASHx_DEV->dev->p_ctrl); + fsp_err_t err = R_FLASH_HP_Open(ARM_FLASHx_DEV->dev->p_ctrl, ARM_FLASHx_DEV->dev->p_cfg); + if (FSP_SUCCESS != err) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + + flash_info_t info; + if (FSP_SUCCESS != R_FLASH_HP_InfoGet(ARM_FLASHx_DEV->dev->p_ctrl, &info)) + { + R_FLASH_HP_Close(ARM_FLASHx_DEV->dev->p_ctrl); + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + + if (flash_type == DATA_FLASH) + { + flash_size = + (info.data_flash.p_block_array[info.data_flash.num_regions - 1U].block_section_end_addr - + info.data_flash.p_block_array[0].block_section_st_addr + 1U); + page_size = info.data_flash.p_block_array[info.data_flash.num_regions - 1U].block_size; + } + else + { + /* Assuming the entire flash has only 32k flash blocks, since the bootloader is using all of the 8K blocks for itself and won't be updated. */ + flash_size = + (info.code_flash.p_block_array[info.code_flash.num_regions - 1U].block_section_end_addr - + info.code_flash.p_block_array[0].block_section_st_addr + 1U); + page_size = info.code_flash.p_block_array[info.code_flash.num_regions - 1U].block_size; + } + + /* Validate hardcoded parameters of the flash */ + if ((ARM_FLASHx_DEV->data->page_size != page_size) || + (ARM_FLASHx_DEV->data->sector_size != page_size) || + (ARM_FLASHx_DEV->data->sector_count != (flash_size / page_size))) + { + R_FLASH_HP_Close(ARM_FLASHx_DEV->dev->p_ctrl); + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR_PARAMETER; + } + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_NO_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + + return ARM_DRIVER_OK; +} + +static int32_t ARM_Flashx_Uninitialize (ARM_FLASHx_Resources * ARM_FLASHx_DEV) +{ + R_FLASH_HP_Close(ARM_FLASHx_DEV->dev->p_ctrl); + + return ARM_DRIVER_OK; +} + +static int32_t ARM_Flashx_PowerControl (ARM_FLASHx_Resources * ARM_FLASHx_DEV, ARM_POWER_STATE state) +{ + ARG_UNUSED(ARM_FLASHx_DEV); + + switch (state) + { + case ARM_POWER_FULL: + { + + /* Nothing to do */ + return ARM_DRIVER_OK; + } + + case ARM_POWER_OFF: + case ARM_POWER_LOW: + { + return ARM_DRIVER_ERROR_UNSUPPORTED; + } + + default: + + return ARM_DRIVER_ERROR_PARAMETER; + } +} + +static int32_t ARM_Flashx_ReadData (ARM_FLASHx_Resources * ARM_FLASHx_DEV, + uint32_t addr, + void * data, + uint32_t cnt, + driver_flash_type_t flash_type) +{ + fsp_err_t err = FSP_SUCCESS; + flash_result_t blank_check_result = FLASH_RESULT_BLANK; + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_BUSY; + + flash_info_t info; + if (FSP_SUCCESS != R_FLASH_HP_InfoGet(ARM_FLASHx_DEV->dev->p_ctrl, &info)) + { + R_FLASH_HP_Close(ARM_FLASHx_DEV->dev->p_ctrl); + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + + if (flash_type == CODE_FLASH) + { + /* Check if range is valid */ + if ((addr + cnt) > + ((info.code_flash.p_block_array[0].block_section_st_addr) + + (ARM_FLASHx_DEV->data->sector_size * ARM_FLASHx_DEV->data->sector_count))) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + + return ARM_DRIVER_ERROR_PARAMETER; + } + + blank_check_result = FLASH_RESULT_NOT_BLANK; + } + else + { + /* Check if range is valid */ + if ((addr + cnt) > + ((info.data_flash.p_block_array[0].block_section_st_addr) + + (ARM_FLASHx_DEV->data->sector_size * ARM_FLASHx_DEV->data->sector_count))) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR_PARAMETER; + } + + err = R_FLASH_HP_BlankCheck(ARM_FLASHx_DEV->dev->p_ctrl, addr, cnt, &blank_check_result); + if (err != FSP_SUCCESS) + { + if ((err == FSP_ERR_INVALID_ADDRESS) || + (err == FSP_ERR_INVALID_SIZE)) + { + /* The native driver checks aligment and range */ + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_NO_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + + return ARM_DRIVER_OK; + } + + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + } + + /* Validate the blank check result */ + if (FLASH_RESULT_NOT_BLANK == blank_check_result) + { + memcpy(data, (const void *) addr, cnt); + } + else + { + memset(data, 0xFF, cnt); + } + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_NO_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + + return ARM_DRIVER_OK; +} + +static int32_t ARM_Flashx_ProgramData (ARM_FLASHx_Resources * ARM_FLASHx_DEV, + uint32_t addr, + const void * data, + uint32_t cnt) +{ + fsp_err_t err = FSP_SUCCESS; + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_BUSY; + + __disable_irq(); + err = R_FLASH_HP_Write(ARM_FLASHx_DEV->dev->p_ctrl, (uint32_t) data, addr, cnt); + __enable_irq(); + + if (err != FSP_SUCCESS) + { + if ((err == FSP_ERR_INVALID_ADDRESS) || + (err == FSP_ERR_INVALID_SIZE)) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + /* The native driver checks aligment and range */ + return ARM_DRIVER_ERROR_PARAMETER; + } + + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_NO_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_OK; +} + +static int32_t ARM_Flashx_EraseSector (ARM_FLASHx_Resources * ARM_FLASHx_DEV, uint32_t addr) +{ + fsp_err_t err = FSP_SUCCESS; + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_BUSY; + + /* The erase function checks whether the address is within the valid flash + * address range, and the HW will align the address to page boundary if + * it is not aligned. + */ + __disable_irq(); + err = R_FLASH_HP_Erase(ARM_FLASHx_DEV->dev->p_ctrl, addr, 1U); + __enable_irq(); + + if (err != FSP_SUCCESS) + { + if (err == FSP_ERR_INVALID_ADDRESS) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR_PARAMETER; + } + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_NO_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_OK; +} + +static int32_t ARM_Flashx_EraseChip (ARM_FLASHx_Resources * ARM_FLASHx_DEV, driver_flash_type_t flash_type) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t start_addr = 0U; + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_BUSY; + + /* The erase function checks whether the address is aligned with + * the sector or subsector and checks the Flash memory boundaries. + */ + + flash_info_t info; + err = R_FLASH_HP_InfoGet(ARM_FLASHx_DEV->dev->p_ctrl, &info); + + if (err != FSP_SUCCESS) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + + return ARM_DRIVER_ERROR; + } + + if (flash_type == DATA_FLASH) + { + start_addr = info.data_flash.p_block_array[0].block_section_st_addr; + } + else + { + start_addr = info.code_flash.p_block_array[0].block_section_st_addr; + } + + __disable_irq(); + err = R_FLASH_HP_Erase(ARM_FLASHx_DEV->dev->p_ctrl, start_addr, ARM_FLASHx_DEV->data->sector_count); + __enable_irq(); + + if (err != FSP_SUCCESS) + { + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_ERROR; + } + + ARM_FLASHx_DEV->status->error = DRIVER_STATUS_NO_ERROR; + ARM_FLASHx_DEV->status->busy = DRIVER_STATUS_IDLE; + return ARM_DRIVER_OK; +} + +static ARM_FLASH_STATUS ARM_Flashx_GetStatus (ARM_FLASHx_Resources * ARM_FLASHx_DEV) +{ + return *(ARM_FLASHx_DEV->status); +} + +static ARM_FLASH_INFO * ARM_Flashx_GetInfo (ARM_FLASHx_Resources * ARM_FLASHx_DEV) +{ + return ARM_FLASHx_DEV->data; +} + +static ARM_FLASH_INFO ARM_DFLASH_DEV_DATA = +{ + .sector_info = NULL, /* Uniform sector layout */ + .sector_count = (BSP_DATA_FLASH_SIZE_BYTES / BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE), /* 8KB (data flash size) / 64B */ + .sector_size = BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE, /* 64B - as there are no sectors the page size + * size is used here + */ + .page_size = BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE, /* 64B */ + .program_unit = BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE, /* Minimum write size in bytes */ + .erased_value = 0xFF +}; + +static ARM_FLASH_STATUS shared_status = +{ + .busy = DRIVER_STATUS_IDLE, + .error = DRIVER_STATUS_NO_ERROR, + .reserved = 0, +}; + +static ARM_FLASHx_Resources ARM_DFLASH_DEV = +{ + .dev = &DFLASH_DEV, /* Shared between DFlash and Cflash */ + .data = &(ARM_DFLASH_DEV_DATA), + .status = &shared_status, /* Shared between DFlash and Cflash */ +}; + +static ARM_DRIVER_VERSION ARM_DFlash_GetVersion (void) +{ + return ARM_Flash_GetVersion(); +} + +static ARM_FLASH_CAPABILITIES ARM_DFlash_GetCapabilities (void) +{ + return ARM_Flash_GetCapabilities(); +} + +static int32_t ARM_DFlash_Initialize (ARM_Flash_SignalEvent_t cb_event) +{ + return ARM_Flashx_Initialize(&ARM_DFLASH_DEV, cb_event, DATA_FLASH); +} + +static int32_t ARM_DFlash_Uninitialize (void) +{ + return ARM_Flashx_Uninitialize(&ARM_DFLASH_DEV); +} + +static int32_t ARM_DFlash_PowerControl (ARM_POWER_STATE state) +{ + return ARM_Flashx_PowerControl(&ARM_DFLASH_DEV, state); +} + +static int32_t ARM_DFlash_ReadData (uint32_t addr, void * data, uint32_t cnt) +{ + return ARM_Flashx_ReadData(&ARM_DFLASH_DEV, addr, data, cnt, DATA_FLASH); +} + +static int32_t ARM_DFlash_ProgramData (uint32_t addr, const void * data, uint32_t cnt) +{ + return ARM_Flashx_ProgramData(&ARM_DFLASH_DEV, addr, data, cnt); +} + +static int32_t ARM_DFlash_EraseSector (uint32_t addr) +{ + return ARM_Flashx_EraseSector(&ARM_DFLASH_DEV, addr); +} + +static int32_t ARM_DFlash_EraseChip (void) +{ + return ARM_Flashx_EraseChip(&ARM_DFLASH_DEV, DATA_FLASH); +} + +static ARM_FLASH_STATUS ARM_DFlash_GetStatus (void) +{ + return ARM_Flashx_GetStatus(&ARM_DFLASH_DEV); +} + +static ARM_FLASH_INFO * ARM_DFlash_GetInfo (void) +{ + return ARM_Flashx_GetInfo(&ARM_DFLASH_DEV); +} + +ARM_DRIVER_FLASH Driver_DFLASH = +{ + ARM_DFlash_GetVersion, + ARM_DFlash_GetCapabilities, + ARM_DFlash_Initialize, + ARM_DFlash_Uninitialize, + ARM_DFlash_PowerControl, + ARM_DFlash_ReadData, + ARM_DFlash_ProgramData, + ARM_DFlash_EraseSector, + ARM_DFlash_EraseChip, + ARM_DFlash_GetStatus, + ARM_DFlash_GetInfo +}; + +static ARM_FLASH_INFO ARM_CFLASH_DEV_DATA = +{ + .sector_info = NULL, /* Uniform sector layout */ + .sector_count = + ((BSP_ROM_SIZE_BYTES) / BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE), /* (flash size of 32k blocks only) / 32kB */ + .sector_size = BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE, /* 32kB - as there are no sectors the page size + * size is used here + */ + .page_size = BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE, /* 32kB */ + .program_unit = BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE, /* Minimum write size in bytes */ + .erased_value = 0xFF +}; + +static ARM_FLASHx_Resources ARM_CFLASH_DEV = +{ + .dev = &CFLASH_DEV, /* Shared between DFlash and Cflash */ + .data = &ARM_CFLASH_DEV_DATA, + .status = &shared_status, /* Shared between DFlash and Cflash */ +}; + +static ARM_DRIVER_VERSION ARM_CFlash_GetVersion (void) +{ + return ARM_Flash_GetVersion(); +} + +static ARM_FLASH_CAPABILITIES ARM_CFlash_GetCapabilities (void) +{ + return ARM_Flash_GetCapabilities(); +} + +static int32_t ARM_CFlash_Initialize (ARM_Flash_SignalEvent_t cb_event) +{ + return ARM_Flashx_Initialize(&ARM_CFLASH_DEV, cb_event, CODE_FLASH); +} + +static int32_t ARM_CFlash_Uninitialize (void) +{ + return ARM_Flashx_Uninitialize(&ARM_CFLASH_DEV); +} + +static int32_t ARM_CFlash_PowerControl (ARM_POWER_STATE state) +{ + return ARM_Flashx_PowerControl(&ARM_CFLASH_DEV, state); +} + +static int32_t ARM_CFlash_ReadData (uint32_t addr, void * data, uint32_t cnt) +{ + return ARM_Flashx_ReadData(&ARM_CFLASH_DEV, addr, data, cnt, CODE_FLASH); +} + +static int32_t ARM_CFlash_ProgramData (uint32_t addr, const void * data, uint32_t cnt) +{ + return ARM_Flashx_ProgramData(&ARM_CFLASH_DEV, addr, data, cnt); +} + +static int32_t ARM_CFlash_EraseSector (uint32_t addr) +{ + return ARM_Flashx_EraseSector(&ARM_CFLASH_DEV, addr); +} + +static int32_t ARM_CFlash_EraseChip (void) +{ + return ARM_Flashx_EraseChip(&ARM_CFLASH_DEV, CODE_FLASH); +} + +static ARM_FLASH_STATUS ARM_CFlash_GetStatus (void) +{ + return ARM_Flashx_GetStatus(&ARM_CFLASH_DEV); +} + +static ARM_FLASH_INFO * ARM_CFlash_GetInfo (void) +{ + return ARM_Flashx_GetInfo(&ARM_CFLASH_DEV); +} + +ARM_DRIVER_FLASH Driver_CFLASH = +{ + ARM_CFlash_GetVersion, + ARM_CFlash_GetCapabilities, + ARM_CFlash_Initialize, + ARM_CFlash_Uninitialize, + ARM_CFlash_PowerControl, + ARM_CFlash_ReadData, + ARM_CFlash_ProgramData, + ARM_CFlash_EraseSector, + ARM_CFlash_EraseChip, + ARM_CFlash_GetStatus, + ARM_CFlash_GetInfo +}; diff --git a/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_QSPI_Flash.c b/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_QSPI_Flash.c new file mode 100644 index 000000000..4a9d187c9 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_QSPI_Flash.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2013-2020 Arm Limited. All rights reserved. + * + * 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. + */ + +#include "Driver_Flash.h" + +#include +#include "flash_layout.h" + + +#ifndef ARG_UNUSED +#define ARG_UNUSED(arg) ((void)arg) +#endif + +/* Driver version */ +#define ARM_FLASH_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1, 0) + +static const ARM_DRIVER_VERSION DriverVersion = { + ARM_FLASH_API_VERSION, /* Defined in the CMSIS Flash Driver header file */ + ARM_FLASH_DRV_VERSION +}; + +/** + * \brief Flash driver capability macro definitions \ref ARM_FLASH_CAPABILITIES + */ +/* Flash Ready event generation capability values */ +#define EVENT_READY_NOT_AVAILABLE (0u) +#define EVENT_READY_AVAILABLE (1u) +/* Data access size values */ +#define DATA_WIDTH_8BIT (0u) +#define DATA_WIDTH_16BIT (1u) +#define DATA_WIDTH_32BIT (2u) +/* Chip erase capability values */ +#define CHIP_ERASE_NOT_SUPPORTED (0u) +#define CHIP_ERASE_SUPPORTED (1u) + +/* Driver Capabilities */ +static const ARM_FLASH_CAPABILITIES DriverCapabilities = { + EVENT_READY_NOT_AVAILABLE, + DATA_WIDTH_32BIT, + CHIP_ERASE_SUPPORTED, + 0 +}; + +/** + * \brief Flash status macro definitions \ref ARM_FLASH_STATUS + */ +/* Busy status values of the Flash driver */ +#define DRIVER_STATUS_IDLE (0u) +#define DRIVER_STATUS_BUSY (1u) +/* Error status values of the Flash driver */ +#define DRIVER_STATUS_NO_ERROR (0u) +#define DRIVER_STATUS_ERROR (1u) + +/** + * \brief Arm Flash device structure. + */ +struct arm_flash_dev_t { + ARM_FLASH_INFO *data; /*!< FLASH memory device data */ +}; + +static ARM_FLASH_INFO ARM_FLASH0_DEV_DATA = { + .sector_info = NULL, /* Uniform sector layout */ + .sector_count = QSPI_FLASH_TOTAL_SIZE / 0x1000, + .sector_size = 0x1000, + .page_size = 0x100000, + .program_unit = 1u, /* Minimum write size in bytes */ + .erased_value = 0xFF +}; + +static struct arm_flash_dev_t ARM_FLASH0_DEV = { + .data = &(ARM_FLASH0_DEV_DATA) +}; + +/* Flash Status */ +static ARM_FLASH_STATUS ARM_FLASH0_STATUS = {0, 0, 0}; + +static ARM_DRIVER_VERSION ARM_Flash_GetVersion(void) +{ + return DriverVersion; +} + +static ARM_FLASH_CAPABILITIES ARM_Flash_GetCapabilities(void) +{ + return DriverCapabilities; +} + +static int32_t ARM_Flash_Initialize(ARM_Flash_SignalEvent_t cb_event) +{ + ARG_UNUSED(cb_event); + return ARM_DRIVER_ERROR_UNSUPPORTED; +} + +static int32_t ARM_Flash_Uninitialize(void) +{ + return ARM_DRIVER_ERROR_UNSUPPORTED; +} + +static int32_t ARM_Flash_PowerControl(ARM_POWER_STATE state) +{ + switch(state) { + case ARM_POWER_FULL: + /* Nothing to be done */ + return ARM_DRIVER_OK; + case ARM_POWER_OFF: + case ARM_POWER_LOW: + return ARM_DRIVER_ERROR_UNSUPPORTED; + default: + return ARM_DRIVER_ERROR_PARAMETER; + } +} + +static int32_t ARM_Flash_ReadData(uint32_t addr, void *data, uint32_t cnt) +{ + ARG_UNUSED(addr); + ARG_UNUSED(data); + ARG_UNUSED(cnt); + return ARM_DRIVER_ERROR_UNSUPPORTED; +} + +static int32_t ARM_Flash_ProgramData(uint32_t addr, + const void *data, uint32_t cnt) +{ + ARG_UNUSED(addr); + ARG_UNUSED(data); + ARG_UNUSED(cnt); + return ARM_DRIVER_ERROR_UNSUPPORTED; +} + +static int32_t ARM_Flash_EraseSector(uint32_t addr) +{ + ARG_UNUSED(addr); + return ARM_DRIVER_ERROR_UNSUPPORTED; +} + +static int32_t ARM_Flash_EraseChip(void) +{ + return ARM_DRIVER_ERROR_UNSUPPORTED; +} + +static ARM_FLASH_STATUS ARM_Flash_GetStatus(void) +{ + return ARM_FLASH0_STATUS; +} + +static ARM_FLASH_INFO * ARM_Flash_GetInfo(void) +{ + return ARM_FLASH0_DEV.data; +} + +ARM_DRIVER_FLASH Driver_QSPI_FLASH0 = { + ARM_Flash_GetVersion, + ARM_Flash_GetCapabilities, + ARM_Flash_Initialize, + ARM_Flash_Uninitialize, + ARM_Flash_PowerControl, + ARM_Flash_ReadData, + ARM_Flash_ProgramData, + ARM_Flash_EraseSector, + ARM_Flash_EraseChip, + ARM_Flash_GetStatus, + ARM_Flash_GetInfo +}; + diff --git a/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_USART.c b/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_USART.c new file mode 100644 index 000000000..2cb54b5b7 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/CMSIS_Driver/Driver_USART.c @@ -0,0 +1,279 @@ +/*********************************************************************************************************************** + * File Name : driver_usart.c + * Description : This file contains uart driver specific API implementation. + * ***********************************************************************************************************************/ + +/*********************************************************************************************************************** + * DISCLAIMER + * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No + * other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all + * applicable laws, including copyright laws. + * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING + * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM + * EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES + * SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS + * SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of + * this software. By using this software, you agree to the additional terms and conditions found by accessing the + * following link: + * http://www.renesas.com/disclaimer + * + * Copyright (C) 2019 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#include "tfm_common_config.h" + +#include +#include +#include + +#if CFG_UART_DEBUG_ENABLE +#include "r_sci_uart.h" +#include "r_uart_api.h" + +static volatile uart_event_t g_uart_evt = 0; +#endif + +#ifndef ARG_UNUSED + #define ARG_UNUSED(arg) ((void) arg) +#endif + +/* Driver version */ +#define ARM_USART_DRV_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1, 0) + +static volatile uint32_t g_num = 0; + +extern ARM_DRIVER_USART Driver_USART; + +/* Driver Version */ +static ARM_DRIVER_VERSION DriverVersion = +{ + ARM_USART_API_VERSION, + ARM_USART_DRV_VERSION +}; + +/* Driver Capabilities */ +static ARM_USART_CAPABILITIES DriverCapabilities = +{ + 1, /* supports UART (Asynchronous) mode */ + 0, /* supports Synchronous Master mode */ + 0, /* supports Synchronous Slave mode */ + 0, /* supports UART Single-wire mode */ + 0, /* supports UART IrDA mode */ + 0, /* supports UART Smart Card mode */ + 0, /* Smart Card Clock generator available */ + 0, /* RTS Flow Control available */ + 0, /* CTS Flow Control available */ + 0, /* Transmit completed event: \ref ARM_USARTx_EVENT_TX_COMPLETE */ + 0, /* Signal receive character timeout event: \ref ARM_USARTx_EVENT_RX_TIMEOUT */ + 0, /* RTS Line: 0=not available, 1=available */ + 0, /* CTS Line: 0=not available, 1=available */ + 0, /* DTR Line: 0=not available, 1=available */ + 0, /* DSR Line: 0=not available, 1=available */ + 0, /* DCD Line: 0=not available, 1=available */ + 0, /* RI Line: 0=not available, 1=available */ + 0, /* Signal CTS change event: \ref ARM_USARTx_EVENT_CTS */ + 0, /* Signal DSR change event: \ref ARM_USARTx_EVENT_DSR */ + 0, /* Signal DCD change event: \ref ARM_USARTx_EVENT_DCD */ + 0, /* Signal RI change event: \ref ARM_USARTx_EVENT_RI */ + 0 /* Reserved */ +}; + +#if CFG_UART_DEBUG_ENABLE +/* FSP structures required by uart and flash drivers */ +extern sci_uart_instance_ctrl_t g_tfm_fsp_uart_ctrl; +extern const uart_cfg_t g_tfm_fsp_uart_cfg; +#endif + + +static ARM_DRIVER_VERSION ARM_USART_GetVersion (void) +{ +#if CFG_UART_DEBUG_ENABLE + fsp_version_t ver; + fsp_err_t fsp_err = FSP_SUCCESS; + + fsp_err = R_SCI_UART_VersionGet(&ver); + if (FSP_SUCCESS != fsp_err) + { + DriverVersion.api = (uint16_t) ((uint16_t) (ver.api_version_major << 8) | (ver.api_version_minor)); + DriverVersion.drv = (uint16_t) ((uint16_t) (ver.code_version_major << 8) | (ver.code_version_minor)); + } + else +#endif + { + memset(&DriverVersion, 0, sizeof(DriverVersion)); + } + + return DriverVersion; +} + +static ARM_USART_CAPABILITIES ARM_USART_GetCapabilities (void) +{ + return DriverCapabilities; +} + +static int32_t ARM_USART_Initialize (ARM_USART_SignalEvent_t cb_event) +{ + ARG_UNUSED(cb_event); +#if CFG_UART_DEBUG_ENABLE + fsp_err_t fsp_err = FSP_SUCCESS; + + fsp_err = R_SCI_UART_Open(&g_tfm_fsp_uart_ctrl, &g_tfm_fsp_uart_cfg); + if (FSP_SUCCESS != fsp_err) + { + return ARM_DRIVER_ERROR; + } +#endif + return ARM_DRIVER_OK; +} + +static int32_t ARM_USART_Uninitialize (void) +{ +#if CFG_UART_DEBUG_ENABLE + fsp_err_t fsp_err = FSP_SUCCESS; + + fsp_err = R_SCI_UART_Close(&g_tfm_fsp_uart_ctrl); + if (FSP_SUCCESS != fsp_err) + { + return ARM_DRIVER_ERROR; + } +#endif + return ARM_DRIVER_OK; +} + +static int32_t ARM_USART_PowerControl (ARM_POWER_STATE state) +{ + ARG_UNUSED(state); /* Not used, avoid warning */ + + /* Nothing to be done */ + return ARM_DRIVER_OK; +} + +static uint32_t ARM_USART_GetTxCount (void) +{ + /* Return the last successfully transmitted data count. + * This implementation will not work in a multithreaded environment. */ + return g_num; +} + +static int32_t ARM_USART_Control (uint32_t control, uint32_t arg) +{ + ARG_UNUSED(arg); /* Not used, avoid warning */ + ARG_UNUSED(control); /* Not used, avoid warning */ + + /* Nothing to be done */ + return ARM_DRIVER_OK; +} + +static ARM_USART_STATUS ARM_USART_GetStatus (void) +{ + /* Nothing to be done */ + ARM_USART_STATUS status = {0, 0, 0, 0, 0, 0, 0, 0}; + + return status; +} + +static int32_t ARM_USART_Send (const void * data, uint32_t num) +{ + ARG_UNUSED(data); +#if CFG_UART_DEBUG_ENABLE + fsp_err_t fsp_err = FSP_SUCCESS; + + if ((num == 0) || (data == NULL)) + { + return ARM_DRIVER_ERROR; + } + + g_uart_evt = 0; + + fsp_err = R_SCI_UART_Write(&g_tfm_fsp_uart_ctrl, data, num); + if (FSP_SUCCESS != fsp_err) + { + return ARM_DRIVER_ERROR; + } + + /* Wait for UART Tx to complete */ + while (!g_uart_evt) + { + ; + } + + if ((g_uart_evt != UART_EVENT_TX_DATA_EMPTY)) + { + g_num = 0; + + return ARM_DRIVER_ERROR; + } +#endif + /*Save the transmitted number to be used in ARM_USART_GetTxCount*/ + g_num = num; + + return ARM_DRIVER_OK; +} + +static int32_t ARM_USART_Receive (void * data, uint32_t num) +{ +#if CFG_UART_DEBUG_ENABLE + fsp_err_t fsp_err = FSP_SUCCESS; + + if (data == NULL) + { + return ARM_DRIVER_ERROR; + } + + g_uart_evt = 0; + + fsp_err = R_SCI_UART_Read(&g_tfm_fsp_uart_ctrl, data, num); + if (FSP_SUCCESS != fsp_err) + { + return ARM_DRIVER_ERROR; + } + + /* Wait for UART Rx to complete */ + while (!g_uart_evt) + { + ; + } + + if (g_uart_evt != UART_EVENT_RX_COMPLETE) + { + return ARM_DRIVER_ERROR; + } + + return ARM_DRIVER_OK; +#else + ARG_UNUSED(data); + ARG_UNUSED(num); + return ARM_DRIVER_ERROR; +#endif +} + +#if CFG_UART_DEBUG_ENABLE +void user_uart_callback (uart_callback_args_t * p_args) +{ + if (NULL != p_args) + { + g_uart_evt = p_args->event; + } +} +#endif + +ARM_DRIVER_USART Driver_USART = +{ + ARM_USART_GetVersion, + ARM_USART_GetCapabilities, + ARM_USART_Initialize, + ARM_USART_Uninitialize, + ARM_USART_PowerControl, + ARM_USART_Send, + ARM_USART_Receive, + NULL, + ARM_USART_GetTxCount, + NULL, + ARM_USART_Control, + ARM_USART_GetStatus, + NULL, + NULL +}; + diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Config/device_cfg.h b/ra/fsp/src/rm_tfm_port/ra/Device/Config/device_cfg.h new file mode 100644 index 000000000..c3a164193 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Config/device_cfg.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2017-2020 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __DEVICE_CFG_H__ +#define __DEVICE_CFG_H__ + +/** + * \file device_cfg.h + * \brief Configuration file native driver re-targeting + * + * \details This file can be used to add native driver specific macro + * definitions to select which peripherals are available in the build. + * + * This is a default device configuration file with all peripherals enabled. + */ + +/* Macro used by uart_stdout.c, this macro has no affect on baudrate config */ +#define DEFAULT_UART_BAUDRATE 115200 + +#endif /* __DEVICE_CFG_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/cmsis.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/cmsis.h new file mode 100644 index 000000000..8b3c70c76 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/cmsis.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2017-2019 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __CMSIS_H__ +#define __CMSIS_H__ + +/* Processor and Core Peripherals and Configurations */ + +/* ========================================================================== */ +/* ============= Processor and Core Peripheral Section ============= */ +/* ========================================================================== */ + +/* ----- Start of section using anonymous unions and disabling warnings ----- */ +#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" +#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 + +#include "bsp_api.h" +#include "platform_irq.h" +#include "tfm_common_config.h" + +/* ------ End of section using anonymous unions and disabling warnings ------ */ +#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 */ +#else + #warning Not supported compiler type +#endif + +#endif /*__CMSIS_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_base_address.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_base_address.h new file mode 100644 index 000000000..14421d0cb --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_base_address.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2009-2019 Arm Limited. All rights reserved. + * + * 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. + */ + +/* This file is derivative of CMSIS V5.01 Device\_Template_Vendor\Vendor\Device\Include\Device.h + * Git SHA: 8a1d9d6ee18b143ae5befefa14d89fb5b3f99c75 + */ + +#ifndef __PLATFORM_BASE_ADDRESS_H__ +#define __PLATFORM_BASE_ADDRESS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bsp_api.h" + +#ifdef __cplusplus +} +#endif + +#endif /* __PLATFORM_BASE_ADDRESS_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_description.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_description.h new file mode 100644 index 000000000..e5760c76f --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_description.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018-2019 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __PLATFORM_DESCRIPTION_H__ +#define __PLATFORM_DESCRIPTION_H__ + +#include "platform_base_address.h" +#include "platform_pins.h" +#include "platform_regs.h" +#include "cmsis.h" + +#endif /* __PLATFORM_DESCRIPTION_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_irq.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_irq.h new file mode 100644 index 000000000..03b9d2593 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_irq.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2019 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __PLATFORM_IRQ_H__ +#define __PLATFORM_IRQ_H__ +#include "vector_data.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* ========================================================================== */ +/* ============= Interrupt Number Definition ================ */ +/* ========================================================================== */ + +/* + * #define TIMER0_IRQn ((IRQn_Type) 1) + * #define TIMER1_IRQn ((IRQn_Type) 2) + * #define UART1_Tx_IRQn ((IRQn_Type) 3) + * + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __PLATFORM_IRQ_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_pins.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_pins.h new file mode 100644 index 000000000..d76042369 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_pins.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2016-2019 Arm Limited. All rights reserved. + * + * 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. + */ + +/** + * \file platform_pins.h + * \brief This file defines all the pins for this platform. + */ + +#ifndef __PLATFORM_PINS_H__ +#define __PLATFORM_PINS_H__ + +#include "bsp_api.h" + +#endif /* __PLATFORM_PINS_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_regs.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_regs.h new file mode 100644 index 000000000..2d94b91d7 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/platform_regs.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2016-2019 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __PLATFORM_REGS_H__ +#define __PLATFORM_REGS_H__ + +#include +#include "platform_base_address.h" + +#endif /* __PLATFORM_REGS_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Include/system_core_init.h b/ra/fsp/src/rm_tfm_port/ra/Device/Include/system_core_init.h new file mode 100644 index 000000000..ed0c6797c --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Include/system_core_init.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2009-2019 Arm Limited. All rights reserved. + * + * 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. + * + * This file is derivative of CMSIS V5.01 \Device\ARM\ARMCM33\Include\system_ARMCM33.h + * Git SHA: 8a1d9d6ee18b143ae5befefa14d89fb5b3f99c75 + * + */ + +#ifndef __SYSTEM_CORE_INIT_H__ +#define __SYSTEM_CORE_INIT_H__ + +#include +#include "bsp_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +extern void RM_TFM_SystemInit (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __SYSTEM_CORE_INIT_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/Device/Source/system_core_init.c b/ra/fsp/src/rm_tfm_port/ra/Device/Source/system_core_init.c new file mode 100644 index 000000000..4193f563e --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Device/Source/system_core_init.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2009-2019 Arm Limited. All rights reserved. + * + * 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. + * + * This file is derivative of CMSIS V5.01 \Device\ARM\ARMCM33\Source\system_ARMCM33.c + * https://github.com/ARM-software/CMSIS_5/tree/5.0.1 + * Git SHA: 8a1d9d6ee18b143ae5befefa14d89fb5b3f99c75 + */ +#include +#include +#include +#include "system_core_init.h" +#include "platform_description.h" +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ + +extern void (* __init_array_start[])(void); + +extern void (* __init_array_end[])(void); + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void RM_TFM_SystemInit (void) +{ + /* Initialize C runtime */ + __asm volatile("ldr r4, =__copy_table_start__ \n" + "ldr r5, =__copy_table_end__ \n" + + ".L_loop0: \n" + "cmp r4, r5 \n" + "bge .L_loop0_done \n" + "ldr r1, [r4] \n" + "ldr r2, [r4, #4] \n" + "ldr r3, [r4, #8] \n" + + ".L_loop0_0: \n" + "subs r3, #4 \n" + "ittt ge \n" + "ldrge r0, [r1, r3] \n" + "strge r0, [r2, r3] \n" + "bge .L_loop0_0 \n" + + "adds r4, #12 \n" + "b .L_loop0 \n" + + ".L_loop0_done: \n" + "nop \n"); + + __asm volatile("ldr r3, =__zero_table_start__ \n" + "ldr r4, =__zero_table_end__ \n" + + ".L_loop2: \n" + "cmp r3, r4 \n" + "bge .L_loop2_done \n" + "ldr r1, [r3] \n" + "ldr r2, [r3, #4] \n" + "movs r0, 0 \n" + + ".L_loop2_0: \n" + "subs r2, #4 \n" + "itt ge \n" + "strge r0, [r1, r2] \n" + "bge .L_loop2_0 \n" + + "adds r3, #8 \n" + "b .L_loop2 \n" + ".L_loop2_done: \n" + "nop \n"); + + int32_t count = __init_array_end - __init_array_start; + for (int32_t i = 0; i < count; i++) + { + __init_array_start[i](); + } +} + diff --git a/ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.c b/ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.c new file mode 100644 index 000000000..ad9efab9c --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.c @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2017-2019, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include "mpu_armv8m_drv.h" +#include "cmsis.h" + +/* + * FixMe: + * This is a beta quality driver for MPU in v8M. To be finalized. + */ + +enum mpu_armv8m_error_t mpu_armv8m_enable(struct mpu_armv8m_dev_t *dev, + uint32_t privdef_en, + uint32_t hfnmi_en) +{ + /*No error checking*/ + + MPU_Type *mpu = (MPU_Type *)dev->base; + + /* + * FixMe: Set 3 pre-defined MAIR_ATTR for memory. The attributes come + * from default memory map, need to check if fine-tune is necessary. + * + * MAIR0_0: Peripheral, Device-nGnRE. + * MAIR0_1: Code, WT RA. Same attr for Outer and Inner. + * MAIR0_2: SRAM, WBWA RA. Same attr for Outer and Inner. + */ + mpu->MAIR0 = (MPU_ARMV8M_MAIR_ATTR_DEVICE_VAL << MPU_MAIR0_Attr0_Pos) | + (MPU_ARMV8M_MAIR_ATTR_CODE_VAL << MPU_MAIR0_Attr1_Pos) | + (MPU_ARMV8M_MAIR_ATTR_DATA_VAL << MPU_MAIR0_Attr2_Pos); + + mpu->CTRL = + (privdef_en ? MPU_CTRL_PRIVDEFENA_Msk : 0) | + (hfnmi_en ? MPU_CTRL_HFNMIENA_Msk : 0); + + /*Ensure all configuration is written before enable*/ + + mpu->CTRL |= MPU_CTRL_ENABLE_Msk; + + /* Enable MPU before next instruction */ + __DSB(); + __ISB(); + return MPU_ARMV8M_OK; +} + +enum mpu_armv8m_error_t mpu_armv8m_disable(struct mpu_armv8m_dev_t *dev) +{ + MPU_Type *mpu = (MPU_Type *)dev->base; + + /* Reset all fields as enable does full setup */ + mpu->CTRL = 0; + + return MPU_ARMV8M_OK; +} + + +enum mpu_armv8m_error_t mpu_armv8m_region_enable( + struct mpu_armv8m_dev_t *dev, + struct mpu_armv8m_region_cfg_t *region_cfg) +{ + MPU_Type *mpu = (MPU_Type *)dev->base; + + enum mpu_armv8m_error_t ret_val = MPU_ARMV8M_OK; + uint32_t ctrl_before; + uint32_t base_cfg; + uint32_t limit_cfg; + + /*FIXME : Add complete error checking*/ + if ((region_cfg->region_base & ~MPU_RBAR_BASE_Msk) != 0) { + return MPU_ARMV8M_ERROR; + } + /* region_limit doesn't need to be aligned but the scatter + * file needs to be setup to ensure that partitions do not overlap. + */ + + ctrl_before = mpu->CTRL; + mpu->CTRL = 0; + + mpu->RNR = region_cfg->region_nr & MPU_RNR_REGION_Msk; + + /* This 0s the lower bits of the base address */ + base_cfg = region_cfg->region_base & MPU_RBAR_BASE_Msk; + base_cfg |= (region_cfg->attr_sh << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk; + base_cfg |= (region_cfg->attr_access << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk; + base_cfg |= (region_cfg->attr_exec << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk; + + mpu->RBAR = base_cfg; + + /*This 0s the lower bits of base address but they are treated as 1 */ + limit_cfg = (region_cfg->region_limit-1) & MPU_RLAR_LIMIT_Msk; + + limit_cfg |= (region_cfg->region_attridx << MPU_RLAR_AttrIndx_Pos) & + MPU_RLAR_AttrIndx_Msk; + + limit_cfg |= MPU_RLAR_EN_Msk; + + mpu->RLAR = limit_cfg; + + /*Restore main MPU control*/ + mpu->CTRL = ctrl_before; + + /* Enable MPU before the next instruction */ + __DSB(); + __ISB(); + + return ret_val; +} + + +enum mpu_armv8m_error_t mpu_armv8m_region_disable( + struct mpu_armv8m_dev_t *dev, + uint32_t region_nr) +{ + + MPU_Type *mpu = (MPU_Type *)dev->base; + + enum mpu_armv8m_error_t ret_val = MPU_ARMV8M_OK; + uint32_t ctrl_before; + + /*FIXME : Add complete error checking*/ + + ctrl_before = mpu->CTRL; + mpu->CTRL = 0; + + mpu->RNR = region_nr & MPU_RNR_REGION_Msk; + + mpu->RBAR = 0; + mpu->RLAR = 0; + + /*Restore main MPU control*/ + mpu->CTRL = ctrl_before; + + return ret_val; +} + +enum mpu_armv8m_error_t mpu_armv8m_clean(struct mpu_armv8m_dev_t *dev) +{ + MPU_Type *mpu = (MPU_Type *)dev->base; + uint32_t i = (mpu->TYPE & MPU_TYPE_DREGION_Msk) >> MPU_TYPE_DREGION_Pos; + + while (i > 0) { + mpu_armv8m_region_disable(dev, i-1); + i--; + } + + return MPU_ARMV8M_OK; + +} diff --git a/ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.h b/ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.h new file mode 100644 index 000000000..8b3b625cb --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/Native_Driver/mpu_armv8m_drv.h @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2017-2019, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __MPU_ARMV8M_DRV_H__ +#define __MPU_ARMV8M_DRV_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define PRIVILEGED_DEFAULT_ENABLE 1 +#define HARDFAULT_NMI_ENABLE 1 + +/* MAIR_ATTR */ +#define MPU_ARMV8M_MAIR_ATTR_DEVICE_VAL 0x04 +#define MPU_ARMV8M_MAIR_ATTR_DEVICE_IDX 0 +#define MPU_ARMV8M_MAIR_ATTR_CODE_VAL 0xAA +#define MPU_ARMV8M_MAIR_ATTR_CODE_IDX 1 +#define MPU_ARMV8M_MAIR_ATTR_DATA_VAL 0xFF +#define MPU_ARMV8M_MAIR_ATTR_DATA_IDX 2 + +struct mpu_armv8m_dev_t { + const uint32_t base; +}; + +enum mpu_armv8m_error_t { + MPU_ARMV8M_OK, + MPU_ARMV8M_ERROR +}; + +enum mpu_armv8m_attr_exec_t { + MPU_ARMV8M_XN_EXEC_OK, + MPU_ARMV8M_XN_EXEC_NEVER +}; + +enum mpu_armv8m_attr_access_t { + MPU_ARMV8M_AP_RW_PRIV_ONLY, + MPU_ARMV8M_AP_RW_PRIV_UNPRIV, + MPU_ARMV8M_AP_RO_PRIV_ONLY, + MPU_ARMV8M_AP_RO_PRIV_UNPRIV +}; + +enum mpu_armv8m_attr_shared_t { + MPU_ARMV8M_SH_NONE, + MPU_ARMV8M_SH_UNUSED, + MPU_ARMV8M_SH_OUTER, + MPU_ARMV8M_SH_INNER +}; + +struct mpu_armv8m_region_cfg_t { + uint32_t region_nr; + uint32_t region_base; + uint32_t region_limit; + uint32_t region_attridx; + enum mpu_armv8m_attr_exec_t attr_exec; + enum mpu_armv8m_attr_access_t attr_access; + enum mpu_armv8m_attr_shared_t attr_sh; +}; + +struct mpu_armv8m_region_cfg_raw_t { + uint32_t region_nr; + uint32_t region_base; + uint32_t region_limit; +}; + + +/** + * \brief Enable MPU + * + * \param[in] dev MPU device mpu_armv8m_dev_t + * \param[in] privdef_en privilege default region 1:enable 0:disable + * \param[in] hfnmi_en mpu for hard fault & nmi 1:enable 0:disable + * + * \return Error code mpu_armv8m_error_t + * + * \note This function doesn't check if dev is NULL. + */ + +enum mpu_armv8m_error_t mpu_armv8m_enable(struct mpu_armv8m_dev_t *dev, + uint32_t privdef_en, + uint32_t hfnmi_en); + +/** + * \brief Disable MPU + * + * \param[in] dev MPU device mpu_armv8m_dev_t + * + * \return Error code arm_mpu_error_t + * + * \note This function doesn't check if dev is NULL. + */ +enum mpu_armv8m_error_t mpu_armv8m_disable(struct mpu_armv8m_dev_t *dev); + +/** + * \brief Disable MPU and clean all regions + * + * \param[in] dev MPU device mpu_armv8m_dev_t + * + * \return Error code arm_mpu_error_t + * + * \note This function doesn't check if dev is NULL. + */ +enum mpu_armv8m_error_t mpu_armv8m_clean(struct mpu_armv8m_dev_t *dev); + +/** + * \brief Enable MPU Region + * + * \param[in] dev MPU device mpu_armv8m_dev_t + * \param[in] region_cfg MPU region config mpu_armv8m_region_cfg_t + * + * \return Error code arm_mpu_error_t + * + * \note This function doesn't check if dev is NULL. + */ +enum mpu_armv8m_error_t mpu_armv8m_region_enable( + struct mpu_armv8m_dev_t *dev, + struct mpu_armv8m_region_cfg_t *region_cfg); + +/** + * \brief Disable MPU Region + * + * \param[in] dev MPU device mpu_armv8m_dev_t + * \param[in] region_nr Region number + * + * \return Error code arm_mpu_error_t + * + * \note This function doesn't check if dev is NULL. + */ +enum mpu_armv8m_error_t mpu_armv8m_region_disable( + struct mpu_armv8m_dev_t *dev, + uint32_t region_nr); + +#ifdef __cplusplus +} +#endif + +#endif /* __MPU_ARMV8M_DRV_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/attest_hal.c b/ra/fsp/src/rm_tfm_port/ra/attest_hal.c new file mode 100644 index 000000000..d7a7d1740 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/attest_hal.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2018-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include +#include +#include "tfm_attest_hal.h" +#include "tfm_plat_boot_seed.h" +#include "tfm_plat_device_id.h" + + +/*! + * \def BOOT_SEED + * + * \brief Fixed value for boot seed used for test. + */ +#define BOOT_SEED 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, \ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, \ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, \ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF + +static const uint8_t boot_seed[BOOT_SEED_SIZE] = {BOOT_SEED}; + +/* Example verification service URL for initial attestation token */ +static const char verification_service_url[] = "www.trustedfirmware.org"; + +/* Example profile definition document for initial attestation token */ +static const char attestation_profile_definition[] = "PSA_IOT_PROFILE_1"; + +static const uint8_t implementation_id[] = { + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, +}; + +static const uint8_t example_ean_13[] = "060456527282910010"; + +enum tfm_security_lifecycle_t tfm_attest_hal_get_security_lifecycle(void) +{ + return TFM_SLC_SECURED; +} + +const char * +tfm_attest_hal_get_verification_service(uint32_t *size) +{ + *size = sizeof(verification_service_url) - 1; + + return verification_service_url; +} + +const char * +tfm_attest_hal_get_profile_definition(uint32_t *size) +{ + *size = sizeof(attestation_profile_definition) - 1; + + return attestation_profile_definition; +} + +enum tfm_plat_err_t tfm_plat_get_boot_seed(uint32_t size, uint8_t *buf) +{ + /* FixMe: - This getter function must be ported per target platform. + * - Platform service shall provide an API to further interact this + * getter function to retrieve the boot seed. + */ + + uint32_t i; + uint8_t *p_dst = buf; + const uint8_t *p_src = boot_seed; + + if (size != BOOT_SEED_SIZE) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + for (i = size; i > 0; i--) { + *p_dst = *p_src; + p_src++; + p_dst++; + } + + return TFM_PLAT_ERR_SUCCESS; +} + +/** + * \brief Copy the device specific ID to the destination buffer + * + * \param[out] p_dst Pointer to buffer where to store ID + * \param[in] p_src Pointer to the ID + * \param[in] size Length of the ID + */ +static inline void copy_id(uint8_t *p_dst, const uint8_t *p_src, size_t size) +{ + uint32_t i; + + for (i = size; i > 0; i--) { + *p_dst = *p_src; + p_src++; + p_dst++; + } +} + +enum tfm_plat_err_t tfm_plat_get_implementation_id(uint32_t *size, + uint8_t *buf) +{ + const uint8_t *p_impl_id = implementation_id; + uint32_t impl_id_size = sizeof(implementation_id); + + if (*size < impl_id_size) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + copy_id(buf, p_impl_id, impl_id_size); + *size = impl_id_size; + + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t tfm_plat_get_hw_version(uint32_t *size, uint8_t *buf) +{ + const uint8_t *p_hw_version = example_ean_13; + uint32_t hw_version_size = sizeof(example_ean_13) - 1; + + if (*size < hw_version_size) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + copy_id(buf, p_hw_version, hw_version_size); + *size = hw_version_size; + + return TFM_PLAT_ERR_SUCCESS; +} diff --git a/ra/fsp/src/rm_tfm_port/ra/boot_hal.c b/ra/fsp/src/rm_tfm_port/ra/boot_hal.c new file mode 100644 index 000000000..73d0850ac --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/boot_hal.c @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2019-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include "target_cfg.h" +#include "cmsis.h" +#include "boot_hal.h" +#include "Driver_Flash.h" +#include "region_defs.h" +#include "bootutil/bootutil_log.h" + +#include "r_flash_hp.h" +#include "r_flash_api.h" + +#include "psa/crypto.h" + +#if defined(__ARMCC_VERSION) +__attribute__((naked)) void boot_clear_bl2_ram_area (void) +{ + __asm volatile ( + ".syntax unified \n" + "mov r0, #0 \n" + "ldr r1, =Image$$DATA$$Base \n" + "ldr r2, =Image$$ARM_LIB_HEAP$$ZI$$Limit \n" + "subs r2, r2, r1 \n" + "Loop: \n" + "subs r2, #4 \n" + "itt ge \n" + "strge r0, [r1, r2] \n" + "bge Loop \n" + "bx lr \n" + : : : "r0", "r1", "r2", "memory" + ); +} + +#elif defined(__GNUC__) +__attribute__((naked)) void boot_clear_bl2_ram_area (void) +{ + __asm volatile ( + ".syntax unified \n" + "mov r0, #0 \n" + "ldr r1, =__data_start__ \n" + "ldr r2, =__HeapLimit \n" + "subs r2, r2, r1 \n" + "Loop: \n" + "subs r2, #4 \n" + "itt ge \n" + "strge r0, [r1, r2] \n" + "bge Loop \n" + "bx lr \n" + : : : "r0", "r1", "r2", "memory" + ); +} + +#elif defined(__ICCARM__) +extern uint32_t HEAP$$Limit; +extern uint32_t data$$Base; +__attribute__((naked)) void boot_clear_bl2_ram_area (void) +{ + __asm volatile ( + "mov r0, #0 \n" + "ldr r1, = data$$Base \n" + "ldr r2, = HEAP$$Limit \n" + "subs r2, r2, r1 \n" + "Loop: \n" + "subs r2, #4 \n" + "itt ge \n" + "strge r0, [r1, r2] \n" + "bge Loop \n" + "bx lr \n" + : : : "r0", "r1", "r2", "memory" + ); +} + +#endif + +#ifdef BOOT_DATA_AVAILABLE + +/* + * The section 'fsp_dtc_vector_table' is reused to store boot data. + * This is done to avoid creating a BL2 specific linker script. + */ +static uint8_t g_tfm_shared_data[BOOT_TFM_SHARED_DATA_SIZE] BSP_PLACE_IN_SECTION(".fsp_dtc_vector_table"); +#endif /* BOOT_DATA_AVAILABLE */ + +#define FAW_START_ADDR (0xFFFC) +#define FAW_END_ADDR (0x200000) + +/* Flash device name must be specified by target */ +extern ARM_DRIVER_FLASH FLASH_DEV_NAME; + +/* FSP structures required by uart and flash drivers */ +extern flash_hp_instance_ctrl_t g_tfm_fsp_flash_ctrl; +extern const flash_cfg_t g_tfm_fsp_flash_cfg; + +static void flash_FAW_Set (uint32_t start_addr, uint32_t end_addr) +{ + int ret_val = 0; + + volatile uint32_t faws = (uint32_t) ((R_FACI_HP->FAWMON_b.FAWS) << 13); + volatile uint32_t fawe = (uint32_t) ((R_FACI_HP->FAWMON_b.FAWE) << 13); + + if (faws == fawe) + { + BOOT_LOG_INF("Configuring FAW settings"); + + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + ret_val = R_FLASH_HP_AccessWindowSet(&g_tfm_fsp_flash_ctrl, start_addr, end_addr); + + FSP_CRITICAL_SECTION_EXIT; + if (ret_val) + { + BOOT_LOG_ERR("Failed to set Flash Access Window: 0x%x", ret_val); + } + } +} + +/* bootloader platform-specific HW intialization */ +int32_t boot_platform_init (void) +{ + int32_t result; + + result = FLASH_DEV_NAME.Initialize(NULL); + if (ARM_DRIVER_OK != result) + { + return result; + } + +#ifdef BOOT_DATA_AVAILABLE + memset(g_tfm_shared_data, 0x0, BOOT_TFM_SHARED_DATA_SIZE); +#endif /* BOOT_DATA_AVAILABLE */ + + /* Set the FAW to lock the Secure code and data region */ + + // flash_FAW_Set(FAW_START_ADDR, FAW_END_ADDR); + + result = mbedtls_platform_setup(NULL); + if (result != 0) + { + return result;; + } + + result = psa_crypto_init(); + + return result; +} + +void boot_platform_quit (struct boot_arm_vector_table * vt) +{ + /* Clang at O0, stores variables on the stack with SP relative addressing. + * When manually set the SP then the place of reset vector is lost. + * Static variables are stored in 'data' or 'bss' section, change of SP has + * no effect on them. + */ + static struct boot_arm_vector_table * vt_cpy; + + vt_cpy = vt; +#if BSP_FEATURE_BSP_HAS_SP_MON + + /* Disable MSP monitoring */ + R_MPU_SPMON->SP[0].CTL = 0; +#endif +#if defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8M_BASE__) + + /* Restore the Main Stack Pointer Limit register's reset value + * before passing execution to runtime firmware to make the + * bootloader transparent to it. + */ + __set_MSPLIM(0); +#endif + __set_MSP(vt->msp); + __DSB(); + __ISB(); + + boot_jump_to_next_image(vt_cpy->reset); +} diff --git a/ra/fsp/src/rm_tfm_port/ra/crypto_keys.c b/ra/fsp/src/rm_tfm_port/ra/crypto_keys.c new file mode 100644 index 000000000..3c9924103 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/crypto_keys.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2017-2019 ARM Limited + * + * 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. + */ + +#include "tfm_common_config.h" + +#include "platform/include/tfm_plat_crypto_keys.h" +#include "platform/include/tfm_attest_hal.h" +#include +#include "psa/crypto_types.h" + +/* FIXME: Functions in this file should be implemented by platform vendor. For + * the security of the storage system, it is critical to use a hardware unique + * key. For the security of the attestation, it is critical to use a unique key + * pair and keep the private key is secret. + */ + +#define TFM_KEY_LEN_BYTES 16 + +static const uint8_t sample_tfm_key[TFM_KEY_LEN_BYTES] = +{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, \ + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F +}; + +extern const psa_ecc_curve_t initial_attestation_curve_type; +extern const uint8_t initial_attestation_private_key[]; +extern const uint32_t initial_attestation_private_key_size; + +/** + * \brief Copy the key to the destination buffer + * + * \param[out] p_dst Pointer to buffer where to store the key + * \param[in] p_src Pointer to the key + * \param[in] size Length of the key + */ +static inline void copy_key (uint8_t * p_dst, const uint8_t * p_src, size_t size) +{ + uint32_t i; + + for (i = size; i > 0; i--) + { + *p_dst = *p_src; + p_src++; + p_dst++; + } +} + +enum tfm_plat_err_t tfm_plat_get_huk_derived_key (const uint8_t * label, + size_t label_size, + const uint8_t * context, + size_t context_size, + uint8_t * key, + size_t key_size) +{ + (void) label; + (void) label_size; + (void) context; + (void) context_size; + + if (key_size > TFM_KEY_LEN_BYTES) + { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + copy_key(key, sample_tfm_key, key_size); + + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t tfm_plat_get_initial_attest_key (uint8_t * key_buf, + uint32_t size, + struct ecc_key_t * ecc_key, + psa_ecc_curve_t * curve_type) +{ + uint32_t key_size = initial_attestation_private_key_size; + int rc; + + if (size < key_size) + { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + /* Set the EC curve type which the key belongs to */ + *curve_type = initial_attestation_curve_type; + + /* Copy the private key to the buffer, it MUST be present */ + copy_key(key_buf, initial_attestation_private_key, key_size); + rc = 0; + + if (rc) + { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + ecc_key->priv_key = key_buf; + ecc_key->priv_key_size = key_size; + + ecc_key->pubx_key = NULL; + ecc_key->pubx_key_size = 0; + ecc_key->puby_key = NULL; + ecc_key->puby_key_size = 0; + + return TFM_PLAT_ERR_SUCCESS; +} + diff --git a/ra/fsp/src/rm_tfm_port/ra/inc/rm_tfm_port.h b/ra/fsp/src/rm_tfm_port/ra/inc/rm_tfm_port.h new file mode 100644 index 000000000..16905d7b5 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/inc/rm_tfm_port.h @@ -0,0 +1,33 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef RM_TFM_PORT_H +#define RM_TFM_PORT_H + +#include "tfm_common_config.h" +#include "tfm_arch.h" +#include "system_core_init.h" +#include "platform.h" + +extern void tfm_main(void); + +extern void R_BSP_WarmStart (bsp_warm_start_event_t event); + +#endif /* RM_TFM_PORT_H */ diff --git a/ra/fsp/src/rm_tfm_port/ra/nv_counters.c b/ra/fsp/src/rm_tfm_port/ra/nv_counters.c new file mode 100644 index 000000000..c80602996 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/nv_counters.c @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2018-2019, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +/* NOTE: This API should be implemented by platform vendor. For the security of + * the secure storage system's and the bootloader's rollback protection etc. it + * is CRITICAL to use a internal (in-die) persistent memory for multiple time + * programmable (MTP) non-volatile counters or use a One-time Programmable (OTP) + * non-volatile counters solution. + * + * This dummy implementation assumes that the NV counters are the only data in + * the flash sector. To use it, one flash sector should be allocated exclusively + * for the NV counters. + * + * The current software dummy implementation is not resistant to asynchronous + * power failures and should not be used in production code. It is exclusively + * for testing purposes. + */ + +#include "platform/include/tfm_plat_nv_counters.h" + +#include +#include "Driver_Flash.h" +#include "flash_layout.h" + +/* Compilation time checks to be sure the defines are well defined */ +#ifndef TFM_NV_COUNTERS_AREA_ADDR +#error "TFM_NV_COUNTERS_AREA_ADDR must be defined in flash_layout.h" +#endif + +#ifndef TFM_NV_COUNTERS_AREA_SIZE +#error "TFM_NV_COUNTERS_AREA_SIZE must be defined in flash_layout.h" +#endif + +#ifndef TFM_NV_COUNTERS_SECTOR_ADDR +#error "TFM_NV_COUNTERS_SECTOR_ADDR must be defined in flash_layout.h" +#endif + +#ifndef TFM_NV_COUNTERS_SECTOR_SIZE +#error "TFM_NV_COUNTERS_SECTOR_SIZE must be defined in flash_layout.h" +#endif + +/* End of compilation time checks to be sure the defines are well defined */ + +#define NV_COUNTER_SIZE sizeof(uint32_t) +#define INIT_VALUE_SIZE NV_COUNTER_SIZE +#define NUM_NV_COUNTERS ((TFM_NV_COUNTERS_AREA_SIZE - INIT_VALUE_SIZE) \ + / NV_COUNTER_SIZE) + +#define NV_COUNTERS_INITIALIZED 0xC0DE0042U + +/** + * \brief Struct representing the NV counter data in flash. + */ +struct nv_counters_t { + uint32_t counters[NUM_NV_COUNTERS]; /**< Array of NV counters */ + uint32_t init_value; /**< Watermark to indicate if the NV counters have been + * initialised + */ +}; + +/* Import the CMSIS flash device driver */ +extern ARM_DRIVER_FLASH Driver_DFLASH; + +enum tfm_plat_err_t tfm_plat_init_nv_counter(void) +{ + int32_t err; + uint32_t i; + struct nv_counters_t nv_counters = {{0}, 0}; + + err = Driver_DFLASH.Initialize(NULL); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + /* Read the NV counter area to be able to erase the sector and write later + * in the flash. + */ + err = Driver_DFLASH.ReadData(TFM_NV_COUNTERS_AREA_ADDR, &nv_counters, + TFM_NV_COUNTERS_AREA_SIZE); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + if (nv_counters.init_value == NV_COUNTERS_INITIALIZED) { + return TFM_PLAT_ERR_SUCCESS; + } + + /* Add watermark, at the end of the NV counters area, to indicate that NV + * counters have been initialized. + */ + nv_counters.init_value = NV_COUNTERS_INITIALIZED; + + /* Initialize all counters to 0 */ + for (i = 0; i < NUM_NV_COUNTERS; i++) { + nv_counters.counters[i] = 0; + } + + /* Erase sector before write in it */ + err = Driver_DFLASH.EraseSector(TFM_NV_COUNTERS_SECTOR_ADDR); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + /* Write in flash the in-memory NV counter content after modification */ + err = Driver_DFLASH.ProgramData(TFM_NV_COUNTERS_AREA_ADDR, &nv_counters, + TFM_NV_COUNTERS_AREA_SIZE); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t tfm_plat_read_nv_counter(enum tfm_nv_counter_t counter_id, + uint32_t size, uint8_t *val) +{ + int32_t err; + uint32_t flash_addr; + + if (size != NV_COUNTER_SIZE) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + flash_addr = TFM_NV_COUNTERS_AREA_ADDR + (counter_id * NV_COUNTER_SIZE); + + err = Driver_DFLASH.ReadData(flash_addr, val, NV_COUNTER_SIZE); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t tfm_plat_set_nv_counter(enum tfm_nv_counter_t counter_id, + uint32_t value) +{ + int32_t err; + struct nv_counters_t nv_counters = {{0}, 0}; + + /* Read the NV counter area to be able to erase the sector and write later + * in the flash. + */ + err = Driver_DFLASH.ReadData(TFM_NV_COUNTERS_AREA_ADDR, &nv_counters, + TFM_NV_COUNTERS_AREA_SIZE); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + if (value != nv_counters.counters[counter_id]) { + + if (value > nv_counters.counters[counter_id]) { + nv_counters.counters[counter_id] = value; + } else { + return TFM_PLAT_ERR_INVALID_INPUT; + } + + /* Erase sector before write in it */ + err = Driver_DFLASH.EraseSector(TFM_NV_COUNTERS_SECTOR_ADDR); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + + /* Write in flash the in-memory NV counter content after modification */ + err = Driver_DFLASH.ProgramData(TFM_NV_COUNTERS_AREA_ADDR, + &nv_counters, + TFM_NV_COUNTERS_AREA_SIZE); + if (err != ARM_DRIVER_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + } + + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t tfm_plat_increment_nv_counter( + enum tfm_nv_counter_t counter_id) +{ + uint32_t security_cnt; + enum tfm_plat_err_t err; + + err = tfm_plat_read_nv_counter(counter_id, + sizeof(security_cnt), + (uint8_t *)&security_cnt); + if (err != TFM_PLAT_ERR_SUCCESS) { + return err; + } + + if (security_cnt == UINT32_MAX) { + return TFM_PLAT_ERR_MAX_VALUE; + } + + return tfm_plat_set_nv_counter(counter_id, security_cnt + 1u); +} diff --git a/ra/fsp/src/rm_tfm_port/ra/partition/flash_layout.h b/ra/fsp/src/rm_tfm_port/ra/partition/flash_layout.h new file mode 100644 index 000000000..02bcf3145 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/partition/flash_layout.h @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2018-2020 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __FLASH_LAYOUT_H__ +#define __FLASH_LAYOUT_H__ + +#include "tfm_common_config.h" +#include "bsp_api.h" + +/* Size of a Secure and of a Non-secure image */ +#define FLASH_S_PARTITION_SIZE (CFG_FLASH_S_PARTITION_SIZE) /* S partition */ +#define FLASH_NS_PARTITION_SIZE (CFG_FLASH_NS_PARTITION_SIZE) /* NS partition*/ +#define FLASH_MAX_PARTITION_SIZE ((FLASH_S_PARTITION_SIZE > \ + FLASH_NS_PARTITION_SIZE) ? \ + FLASH_S_PARTITION_SIZE : \ + FLASH_NS_PARTITION_SIZE) + +/* Sector size of the embedded flash hardware */ +#define FLASH_AREA_IMAGE_SECTOR_SIZE (BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE) /* 32 KB */ +#define FLASH_TOTAL_SIZE (BSP_ROM_SIZE_BYTES) + +/* Sector size of the data flash hardware */ +#define DATA_FLASH_AREA_IMAGE_SECTOR_SIZE (BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE) /* 64 B */ + +/* Sector size of the QSPI flash hardware */ +#define QSPI_FLASH_AREA_IMAGE_SECTOR_SIZE (0x1000) /* 4 KB */ +#define QSPI_FLASH_TOTAL_SIZE (0x800000) /* 8 MB */ + +/* Flash layout info for BL2 bootloader */ +#define FLASH_BASE_ADDRESS (0x00000000) + +#define DATA_FLASH_BASE_ADDRESS (BSP_FEATURE_FLASH_DATA_FLASH_START) + +/* Offset and size definitions of the flash partitions that are handled by the + * bootloader. The image swapping is done between IMAGE_PRIMARY and + * IMAGE_SECONDARY, SCRATCH is used as a temporary storage during image + * swapping. + */ +#define FLASH_AREA_BL2_OFFSET (0x0) +#define FLASH_AREA_BL2_SIZE (CFG_FLASH_AREA_BL2_SIZE) /* 64 KB */ + +#if !defined(MCUBOOT_IMAGE_NUMBER) || (MCUBOOT_IMAGE_NUMBER == 1) +/* Secure + Non-secure image primary slot */ +#define FLASH_AREA_0_ID (1) +#define FLASH_AREA_0_OFFSET (FLASH_AREA_BL2_OFFSET + FLASH_AREA_BL2_SIZE) +#define FLASH_AREA_0_SIZE (FLASH_S_PARTITION_SIZE + \ + FLASH_NS_PARTITION_SIZE) +/* Secure + Non-secure secondary slot */ +#define FLASH_AREA_2_ID (FLASH_AREA_0_ID + 1) +#define FLASH_AREA_2_OFFSET (FLASH_AREA_0_OFFSET + FLASH_AREA_0_SIZE) +#define FLASH_AREA_2_SIZE (FLASH_S_PARTITION_SIZE + \ + FLASH_NS_PARTITION_SIZE) +/* Not used, only the Non-swapping firmware upgrade operation + * is supported. + */ +#define FLASH_AREA_SCRATCH_ID (FLASH_AREA_2_ID + 1) +#define FLASH_AREA_SCRATCH_OFFSET (FLASH_AREA_2_OFFSET + FLASH_AREA_2_SIZE) +#define FLASH_AREA_SCRATCH_SIZE (0) +/* Maximum number of image sectors supported by the bootloader. */ +#define MCUBOOT_MAX_IMG_SECTORS ((FLASH_S_PARTITION_SIZE + \ + FLASH_NS_PARTITION_SIZE) / \ + FLASH_AREA_IMAGE_SECTOR_SIZE) +#elif (MCUBOOT_IMAGE_NUMBER == 2) +/* Secure image primary slot */ +#define FLASH_AREA_0_ID (1) +#define FLASH_AREA_0_OFFSET (FLASH_AREA_BL2_OFFSET + FLASH_AREA_BL2_SIZE) +#define FLASH_AREA_0_SIZE (FLASH_S_PARTITION_SIZE) +/* Non-secure image primary slot */ +#define FLASH_AREA_1_ID (FLASH_AREA_0_ID + 1) +#define FLASH_AREA_1_OFFSET (FLASH_AREA_0_OFFSET + FLASH_AREA_0_SIZE) +#define FLASH_AREA_1_SIZE (FLASH_NS_PARTITION_SIZE) +/* Secure image secondary slot */ +#define FLASH_AREA_2_ID (FLASH_AREA_1_ID + 1) +#define FLASH_AREA_2_OFFSET (FLASH_AREA_1_OFFSET + FLASH_AREA_1_SIZE) +#define FLASH_AREA_2_SIZE (FLASH_S_PARTITION_SIZE) +/* Non-secure image secondary slot */ +#define FLASH_AREA_3_ID (FLASH_AREA_2_ID + 1) +#define FLASH_AREA_3_OFFSET (FLASH_AREA_2_OFFSET + FLASH_AREA_2_SIZE) +#define FLASH_AREA_3_SIZE (FLASH_NS_PARTITION_SIZE) +/* Not used, only the Non-swapping firmware upgrade operation + * is supported. + */ +#define FLASH_AREA_SCRATCH_ID (FLASH_AREA_3_ID + 1) +#define FLASH_AREA_SCRATCH_OFFSET (FLASH_AREA_3_OFFSET + FLASH_AREA_3_SIZE) +#define FLASH_AREA_SCRATCH_SIZE (0) +/* Maximum number of image sectors supported by the bootloader. */ +#define MCUBOOT_MAX_IMG_SECTORS (FLASH_MAX_PARTITION_SIZE / \ + FLASH_AREA_IMAGE_SECTOR_SIZE) +#else /* MCUBOOT_IMAGE_NUMBER > 2 */ +#error "Only MCUBOOT_IMAGE_NUMBER 1 and 2 are supported!" +#endif /* MCUBOOT_IMAGE_NUMBER */ + +/* Not used, only the Non-swapping firmware upgrade operation + * is supported. The maximum number of status entries + * supported by the bootloader. + */ +#define MCUBOOT_STATUS_MAX_ENTRIES (0) + +/* Internal Trusted Storage (ITS) Service definitions (4 KB) */ +#define FLASH_ITS_AREA_OFFSET (CFG_DATA_FLASH_ITS_AREA_OFFSET) +#define FLASH_ITS_AREA_SIZE (CFG_DATA_FLASH_ITS_AREA_SIZE) + +/* NV Counters definitions */ +#define FLASH_NV_COUNTERS_AREA_OFFSET (CFG_DATA_FLASH_NV_COUNTERS_AREA_OFFSET) +#define FLASH_NV_COUNTERS_AREA_SIZE (CFG_DATA_FLASH_NV_COUNTERS_AREA_SIZE) + +/* Offset and size definition in flash area used by assemble.py */ +#define SECURE_IMAGE_OFFSET (0x0) +#define SECURE_IMAGE_MAX_SIZE FLASH_S_PARTITION_SIZE + +#define NON_SECURE_IMAGE_OFFSET (SECURE_IMAGE_OFFSET + \ + SECURE_IMAGE_MAX_SIZE) +#define NON_SECURE_IMAGE_MAX_SIZE FLASH_NS_PARTITION_SIZE + +/* Protected Storage (PS) Service definitions size is 20 KB. */ +#define QSPI_FLASH_BASE_ADDRESS (0x10000000) +#define FLASH_PS_AREA_OFFSET (0x0) +#define FLASH_PS_AREA_SIZE (5 * QSPI_FLASH_AREA_IMAGE_SECTOR_SIZE) + +/* Flash device name used by BL2 + * Name is defined in flash driver file: Driver_Flash.c + */ +#define FLASH_DEV_NAME Driver_CFLASH + +/* Protected Storage (PS) Service definitions + * Note: Further documentation of these definitions can be found in the + * TF-M PS Integration Guide. + */ +#define PS_FLASH_DEV_NAME Driver_QSPI_FLASH0 + +/* In this target the CMSIS driver requires only the offset from the base + * address instead of the full memory address. + */ +#define PS_FLASH_AREA_ADDR FLASH_PS_AREA_OFFSET +/* Dedicated flash area for PS */ +#define PS_FLASH_AREA_SIZE FLASH_PS_AREA_SIZE +#define PS_SECTOR_SIZE QSPI_FLASH_AREA_IMAGE_SECTOR_SIZE +/* Number of PS_SECTOR_SIZE per block */ +#define PS_SECTORS_PER_BLOCK (0x1) +/* Specifies the smallest flash programmable unit in bytes */ +#define PS_FLASH_PROGRAM_UNIT (0x1) +/* The maximum asset size to be stored in the PS area */ +#define PS_MAX_ASSET_SIZE (2048) +/* The maximum number of assets to be stored in the PS area */ +#define PS_NUM_ASSETS (10) + +/* Internal Trusted Storage (ITS) Service definitions + * Note: Further documentation of these definitions can be found in the + * TF-M ITS Integration Guide. The ITS should be in the internal flash, but is + * allocated in the external flash just for development platforms that don't + * have internal flash available. + */ +#define ITS_FLASH_DEV_NAME Driver_DFLASH + +/* In this target the CMSIS driver requires only the offset from the base + * address instead of the full memory address. + */ +#define ITS_FLASH_AREA_ADDR FLASH_ITS_AREA_OFFSET +/* Dedicated flash area for ITS */ +#define ITS_FLASH_AREA_SIZE FLASH_ITS_AREA_SIZE +#define ITS_SECTOR_SIZE DATA_FLASH_AREA_IMAGE_SECTOR_SIZE +/* Number of ITS_SECTOR_SIZE per block */ +#define ITS_SECTORS_PER_BLOCK (CFG_TFM_ITS_SECTORS_PER_BLOCK) +/* Specifies the smallest flash programmable unit in bytes */ +#define ITS_FLASH_PROGRAM_UNIT (BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE) +/* The maximum asset size to be stored in the ITS area */ +#define ITS_MAX_ASSET_SIZE (CFG_TFM_ITS_MAX_ASSET_SIZE) +/* The maximum number of assets to be stored in the ITS area */ +#define ITS_NUM_ASSETS (CFG_TFM_ITS_NUM_ASSETS) + +/* NV Counters definitions */ +#define TFM_NV_COUNTERS_AREA_ADDR FLASH_NV_COUNTERS_AREA_OFFSET +#define TFM_NV_COUNTERS_AREA_SIZE (FLASH_NV_COUNTERS_AREA_SIZE) +#define TFM_NV_COUNTERS_SECTOR_ADDR FLASH_NV_COUNTERS_AREA_OFFSET +#define TFM_NV_COUNTERS_SECTOR_SIZE FLASH_NV_COUNTERS_AREA_SIZE + +/* Use eFlash 0 memory to store Code data */ +#define S_ROM_ALIAS_BASE (0x00000000) +#define NS_ROM_ALIAS_BASE (0x00000000) + +#define S_RAM_ALIAS_BASE (0x20000000) +#define NS_RAM_ALIAS_BASE (0x20000000) + +#define TOTAL_ROM_SIZE FLASH_TOTAL_SIZE +#define TOTAL_RAM_SIZE (BSP_RAM_SIZE_BYTES) + +#endif /* __FLASH_LAYOUT_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/partition/region_defs.h b/ra/fsp/src/rm_tfm_port/ra/partition/region_defs.h new file mode 100644 index 000000000..2d9715aef --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/partition/region_defs.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2017-2020 Arm Limited. All rights reserved. + * + * 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. + */ + +#ifndef __REGION_DEFS_H__ +#define __REGION_DEFS_H__ + +#include "flash_layout.h" + +/* This size of buffer is big enough to store an attestation + * token produced by initial attestation service + */ +#define PSA_INITIAL_ATTEST_TOKEN_MAX_SIZE (0x250) + +#ifdef BL2 +#ifndef LINK_TO_SECONDARY_PARTITION +#define S_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_0_OFFSET) +#define S_IMAGE_SECONDARY_PARTITION_OFFSET (FLASH_AREA_2_OFFSET) +#else +#define S_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_2_OFFSET) +#define S_IMAGE_SECONDARY_PARTITION_OFFSET (FLASH_AREA_0_OFFSET) +#endif /* !LINK_TO_SECONDARY_PARTITION */ +#else +#define S_IMAGE_PRIMARY_PARTITION_OFFSET (0x0) +#endif /* BL2 */ + +#ifndef LINK_TO_SECONDARY_PARTITION +#define NS_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_0_OFFSET \ + + FLASH_S_PARTITION_SIZE) +#else +#define NS_IMAGE_PRIMARY_PARTITION_OFFSET (FLASH_AREA_2_OFFSET \ + + FLASH_S_PARTITION_SIZE) +#endif /* !LINK_TO_SECONDARY_PARTITION */ + +/* Boot partition structure if MCUBoot is used: + * 0x0_0000 Bootloader header + * 0x0_0400 Image area + * 0x1_FC00 Trailer + */ +/* IMAGE_CODE_SIZE is the space available for the software binary image. + * It is less than the FLASH_S_PARTITION_SIZE + FLASH_NS_PARTITION_SIZE + * because we reserve space for the image header and trailer introduced + * by the bootloader. + */ +#ifdef BL2 +#define BL2_HEADER_SIZE (0x400) /* 1 KB */ +#define BL2_TRAILER_SIZE (0x400) /* 1 KB */ +#else +/* No header if no bootloader, but keep IMAGE_CODE_SIZE the same */ +#define BL2_HEADER_SIZE (0x0) +#define BL2_TRAILER_SIZE (0x800) +#endif /* BL2 */ + +#define IMAGE_S_CODE_SIZE \ + (FLASH_S_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE) +#define IMAGE_NS_CODE_SIZE \ + (FLASH_NS_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE) + +#define CMSE_VENEER_REGION_SIZE (0x400) + +/* Alias definitions for secure and non-secure areas*/ +#define S_ROM_ALIAS(x) (S_ROM_ALIAS_BASE + (x)) +#define NS_ROM_ALIAS(x) (NS_ROM_ALIAS_BASE + (x)) + +#define S_RAM_ALIAS(x) (S_RAM_ALIAS_BASE + (x)) +#define NS_RAM_ALIAS(x) (NS_RAM_ALIAS_BASE + (x)) + +/* Secure regions */ +#define S_IMAGE_PRIMARY_AREA_OFFSET \ + (S_IMAGE_PRIMARY_PARTITION_OFFSET + BL2_HEADER_SIZE) +#define S_CODE_START (S_ROM_ALIAS(S_IMAGE_PRIMARY_AREA_OFFSET)) +#define S_CODE_SIZE (IMAGE_S_CODE_SIZE - CMSE_VENEER_REGION_SIZE) +#define S_CODE_LIMIT (S_CODE_START + S_CODE_SIZE - 1) + +#define S_DATA_START (S_RAM_ALIAS(0x0)) +#define S_DATA_SIZE (CFG_SECURE_RAM_SIZE) +#define S_DATA_LIMIT (S_DATA_START + S_DATA_SIZE - 1) + +/* CMSE Veneers region */ +#define CMSE_VENEER_REGION_START (S_CODE_LIMIT + 1) + +/* Non-secure regions */ +#define NS_IMAGE_PRIMARY_AREA_OFFSET \ + (NS_IMAGE_PRIMARY_PARTITION_OFFSET + BL2_HEADER_SIZE) +#define NS_CODE_START (NS_ROM_ALIAS(NS_IMAGE_PRIMARY_AREA_OFFSET)) +#define NS_CODE_SIZE (IMAGE_NS_CODE_SIZE) +#define NS_CODE_LIMIT (NS_CODE_START + NS_CODE_SIZE - 1) + +#define NS_DATA_START (S_DATA_LIMIT + 1) +#define NS_DATA_SIZE (TOTAL_RAM_SIZE - S_DATA_SIZE) +#define NS_DATA_LIMIT (NS_DATA_START + NS_DATA_SIZE - 1) + +/* NS partition information is used for MPC and SAU configuration */ +#define NS_PARTITION_START \ + (NS_ROM_ALIAS(NS_IMAGE_PRIMARY_PARTITION_OFFSET)) +#define NS_PARTITION_SIZE (FLASH_NS_PARTITION_SIZE) + +/* Secondary partition for new images in case of firmware upgrade */ +#define SECONDARY_PARTITION_START \ + (NS_ROM_ALIAS(S_IMAGE_SECONDARY_PARTITION_OFFSET)) +#define SECONDARY_PARTITION_SIZE (FLASH_S_PARTITION_SIZE + \ + FLASH_NS_PARTITION_SIZE) + +#ifdef BL2 +/* Bootloader regions */ + +#define BL2_CODE_START (S_ROM_ALIAS(FLASH_AREA_BL2_OFFSET)) +#define BL2_CODE_SIZE (FLASH_AREA_BL2_SIZE) +#define BL2_CODE_LIMIT (BL2_CODE_START + BL2_CODE_SIZE - 1) + +#define BL2_DATA_START (S_RAM_ALIAS(0x0)) +#define BL2_DATA_SIZE (TOTAL_RAM_SIZE) +#define BL2_DATA_LIMIT (BL2_DATA_START + BL2_DATA_SIZE - 1) +#endif /* BL2 */ + +/* Shared data area between bootloader and runtime firmware. + * Shared data area is allocated at the beginning of the RAM, it is overlapping + * with TF-M Secure code's MSP stack + */ +#define BOOT_TFM_SHARED_DATA_BASE S_RAM_ALIAS_BASE +#define BOOT_TFM_SHARED_DATA_SIZE (0x400) +#define BOOT_TFM_SHARED_DATA_LIMIT (BOOT_TFM_SHARED_DATA_BASE + \ + BOOT_TFM_SHARED_DATA_SIZE - 1) + +#endif /* __REGION_DEFS_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/services/include/tfm_ioctl_api.h b/ra/fsp/src/rm_tfm_port/ra/services/include/tfm_ioctl_api.h new file mode 100644 index 000000000..c040eaaba --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/services/include/tfm_ioctl_api.h @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2019, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __TFM_IOCTL_API__ +#define __TFM_IOCTL_API__ + +#include +#include +#include +#include "tfm_api.h" +#include "tfm_platform_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum tfm_platform_ioctl_reqest_types_t { + TFM_PLATFORM_IOCTL_PIN_SERVICE, + TFM_PLATFORM_IOCTL_GPIO_SERVICE, + TFM_PLATFORM_IOCTL_FLASH_SERVICE, +}; + +/*! + * \enum tfm_gpio_service_type_t + * + * \brief GPIO service types (supported types may vary based on the platform) + */ +enum tfm_gpio_service_type_t { + TFM_GPIO_SERVICE_TYPE_INIT = 0, /*!< Init */ + TFM_GPIO_SERVICE_TYPE_PIN_CONFIG, /*!< Pin config */ + TFM_GPIO_SERVICE_TYPE_PIN_WRITE, /*!< Pin write */ + TFM_GPIO_SERVICE_TYPE_PIN_READ, /*!< Pin read */ + TFM_GPIO_SERVICE_TYPE_PORT_CONFIG, /*!< Port config */ + TFM_GPIO_SERVICE_TYPE_PORT_WRITE, /*!< Port write */ + TFM_GPIO_SERVICE_TYPE_PORT_READ, /*!< Port read */ + TFM_GPIO_SERVICE_TYPE_MAX = INT_MAX /*!< Max to force enum max size */ +}; + +/*! + * \enum tfm_flash_service_type_t + * + * \brief Flash service types + */ +enum tfm_flash_service_type_t { + TFM_FLASH_SERVICE_TYPE_INIT = 0, /*!< Init */ + TFM_FLASH_SERVICE_TYPE_ERASE, /*!< Flash erase */ + TFM_FLASH_SERVICE_TYPE_WRITE, /*!< Flash write */ + TFM_FLASH_SERVICE_TYPE_MAX = INT_MAX /*!< Max to force enum max size */ +}; + +/*! + * \struct tfm_gpio_service_args_t + * + * \brief Argument list for each platform GPIO service + */ +struct tfm_gpio_service_args_t { + enum tfm_gpio_service_type_t type; + union { + struct gpio_config_args { /*!< TFM_GPIO_SERVICE_TYPE_PIN_CONFIG || + TFM_GPIO_SERVICE_TYPE_PORT_CONFIG */ + uint32_t pin_num_or_mask; + uint32_t direction; + } gpio_config; + struct gpio_write_args { /*!< TFM_GPIO_SERVICE_TYPE_PIN_WRITE || + TFM_GPIO_SERVICE_TYPE_PORT_WRITE */ + uint32_t pin_num_or_mask; + uint32_t value; + } gpio_write; + struct gpio_read_args { /*!< TFM_GPIO_SERVICE_TYPE_PIN_READ || + TFM_GPIO_SERVICE_TYPE_PORT_READ */ + uint32_t pin_num_or_mask; + } gpio_read; + } u; +}; + +/*! + * \struct tfm_flash_service_args_t + * + * \brief Argument list for each platform Flash service + */ +struct tfm_flash_service_args_t { + enum tfm_flash_service_type_t type; + union { + struct flash_erase_args { /*!< TFM_FLASH_SERVICE_TYPE_ERASE */ + uint32_t addr; + uint32_t count; + } flash_erase; + struct flash_write_args { /*!< TFM_FLASH_SERVICE_TYPE_WRITE */ + uint32_t src_addr; + uint32_t flash_addr; + uint32_t count; + } flash_write; + } u; +}; + +/*! + * \struct tfm_gpio_service_out_t + * + * \brief Output list for each GPIO platform service + */ +struct tfm_gpio_service_out_t { + union { + uint32_t result; /*!< Generic result */ + struct gpio_read_result { /*!< TFM_GPIO_SERVICE_TYPE_PIN_READ || + TFM_GPIO_SERVICE_TYPE_PORT_READ */ + uint32_t result; + uint32_t data; + } gpio_read_result; + } u; +}; + +/*! + * \struct tfm_flash_service_out_t + * + * \brief Output list for each FLASH platform service + */ +struct tfm_flash_service_out_t { + union { + int32_t result; /*!< Generic result */ + struct flash_blank_check_result { /*!< TFM_FLASH_SERVICE_TYPE_BLANK_CHECK */ + int32_t result; + uint32_t blank_check_result; + } flash_blank_check_result; + } u; +}; + +/*! + * \enum tfm_pin_service_type_t + * + * \brief Pin service types + */ +enum tfm_pin_service_type_t { + TFM_PIN_SERVICE_TYPE_SET_ALTFUNC = 0, /*!< Set alternate function type */ + TFM_PIN_SERVICE_TYPE_SET_DEFAULT_IN, /*!< Set default in function type */ + TFM_PIN_SERVICE_TYPE_SET_PIN_MODE, /*!< Set pin mode function type */ + TFM_PIN_SERVICE_TYPE_MAX = INT_MAX /*!< Max to force enum max size */ +}; + +/*! + * \struct tfm_pin_service_args_t + * + * \brief Argument list for each platform pin service + */ +struct tfm_pin_service_args_t { + enum tfm_pin_service_type_t type; + union { + struct set_altfunc { /*!< TFM_PIN_SERVICE_TYPE_SET_ALTFUNC */ + uint32_t alt_func; + uint64_t pin_mask; + } set_altfunc; + struct set_default_in { /*!< TFM_PIN_SERVICE_TYPE_SET_DEFAULT_IN */ + uint32_t alt_func; + uint32_t pin_value; + bool default_in_value; + } set_default_in; + struct set_pin_mode { /*!< TFM_PIN_SERVICE_TYPE_SET_PIN_MODE */ + uint64_t pin_mask; + uint32_t pin_mode; + } set_pin_mode; + } u; +}; + +/*! + * \brief Sets pin alternate function for the given pins + * + * \param[in] alt_func Alternate function to set (allowed values vary + * based on the platform) + * \param[in] pin_mask Pin mask of the selected pins + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_set_pin_alt_func(uint32_t alt_func, uint64_t pin_mask, + uint32_t *result); + +/*! + * \brief Sets default in value to use when the alternate function is not + * selected for the pin + * + * \param[in] alt_func Alternate function to use (allowed values vary + * based on the platform) + * \param[in] pin_value Pin value to use + * \param[in] default_in_value Default in value to set + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_set_pin_default_in(uint32_t alt_func, uint32_t pin_value, + bool default_in_value, uint32_t *result); + +/*! + * \brief Sets pin mode for the selected pins + * + * \param[in] pin_mask Pin mask of the selected pins + * \param[in] pin_mode Pin mode to set for the selected pins + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_set_pin_mode(uint64_t pin_mask, uint32_t pin_mode, + uint32_t *result); + +/*! + * \brief Initializes GPIO module + * + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t tfm_platform_gpio_init(uint32_t *result); + +/*! + * \brief Configures a GPIO pin as input or output + * + * \param[in] pin_num Pin number of the selected pin + * \param[in] direction Direction of the pin: 0 for input, 1 for output + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_gpio_pin_config(uint32_t pin_num, uint32_t direction, + uint32_t *result); + +/*! + * \brief Sets state of a selected GPIO pin + * + * \param[in] pin_num Pin number of the selected pin + * \param[in] value Value to set for the pin + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_gpio_pin_write(uint32_t pin_num, uint32_t value, uint32_t *result); + +/*! + * \brief Reads state of a selected GPIO pin + * + * \param[in] pin_num Pin number of the selected pin + * \param[in,out] data Bit value read from the IO pin + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_gpio_pin_read(uint32_t pin_num, uint32_t *data, uint32_t *result); + +/*! + * \brief Configures GPIO pins as input or output + * + * \param[in] pin_mask Pin mask of the selected pins + * \param[in] direction Direction of the pin: 0 for input, 1 for output + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_gpio_port_config(uint32_t pin_mask, uint32_t direction, + uint32_t *result); + +/*! + * \brief Sets state of a selected GPIO pins + * + * \param[in] pin_mask Pin mask of the selected pins + * \param[in] value Value mask to set for the pins + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_gpio_port_write(uint32_t pin_mask, uint32_t value, + uint32_t *result); + +/*! + * \brief Reads state of a selected GPIO pins + * + * \param[in] pin_mask Pin mask of the selected pins + * \param[in,out] data Bit value mask read from the IO pins + * \param[out] result Return error value + * + * \return Returns values as specified by tfm_platform_err_t + */ +enum tfm_platform_err_t +tfm_platform_gpio_port_read(uint32_t pin_mask, uint32_t *data, + uint32_t *result); + +enum tfm_platform_err_t +tfm_platform_flash_write(uint32_t *data, uint32_t flash_address, + uint32_t count, int32_t *result); + +enum tfm_platform_err_t +tfm_platform_flash_erase(uint32_t address, uint32_t count, int32_t *result); + +enum tfm_platform_err_t +tfm_platform_flash_init(int32_t *result); + + +#ifdef __cplusplus +} +#endif + +#endif /* __TFM_IOCTL_API__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/services/src/tfm_ioctl_s_api.c b/ra/fsp/src/rm_tfm_port/ra/services/src/tfm_ioctl_s_api.c new file mode 100644 index 000000000..b191305f4 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/services/src/tfm_ioctl_s_api.c @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2019-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include +#include +#include "tfm_platform_api.h" +#include "tfm_ioctl_api.h" + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_set_pin_alt_func(uint32_t alt_func, uint64_t pin_mask, + uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_pin_service_args_t args; + + if (result == NULL) { + return TFM_PLATFORM_ERR_INVALID_PARAM; + } + + args.type = TFM_PIN_SERVICE_TYPE_SET_ALTFUNC; + args.u.set_altfunc.alt_func = alt_func; + args.u.set_altfunc.pin_mask = pin_mask; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)result; + out_vec.len = sizeof(*result); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_PIN_SERVICE, &in_vec, &out_vec); + + if (ret != PSA_SUCCESS) { + return TFM_PLATFORM_ERR_SYSTEM_ERROR; + } + + return TFM_PLATFORM_ERR_SUCCESS; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_set_pin_default_in(uint32_t alt_func, uint32_t pin_value, + bool default_in_value, uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_pin_service_args_t args; + + if (result == NULL) { + return TFM_PLATFORM_ERR_INVALID_PARAM; + } + + args.type = TFM_PIN_SERVICE_TYPE_SET_DEFAULT_IN; + args.u.set_default_in.alt_func = alt_func; + args.u.set_default_in.pin_value = pin_value; + args.u.set_default_in.default_in_value = default_in_value; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)result; + out_vec.len = sizeof(*result); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_PIN_SERVICE, &in_vec, &out_vec); + + if (ret != PSA_SUCCESS) { + return TFM_PLATFORM_ERR_SYSTEM_ERROR; + } + + return TFM_PLATFORM_ERR_SUCCESS; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_set_pin_mode(uint64_t pin_mask, uint32_t pin_mode, + uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_pin_service_args_t args; + + if (result == NULL) { + return TFM_PLATFORM_ERR_INVALID_PARAM; + } + + args.type = TFM_PIN_SERVICE_TYPE_SET_PIN_MODE; + args.u.set_pin_mode.pin_mask = pin_mask; + args.u.set_pin_mode.pin_mode = pin_mode; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)result; + out_vec.len = sizeof(*result); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_PIN_SERVICE, &in_vec, &out_vec); + + if (ret != PSA_SUCCESS) { + return TFM_PLATFORM_ERR_SYSTEM_ERROR; + } + + return TFM_PLATFORM_ERR_SUCCESS; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t tfm_platform_gpio_init(uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_INIT; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.result; + return ret; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_gpio_pin_config(uint32_t pin_num, uint32_t direction, + uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_PIN_CONFIG; + args.u.gpio_config.pin_num_or_mask = pin_num; + args.u.gpio_config.direction = direction; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.result; + return ret; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_gpio_pin_write(uint32_t pin_num, uint32_t value, uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_PIN_WRITE; + args.u.gpio_write.pin_num_or_mask = pin_num; + args.u.gpio_write.value = value; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.result; + return ret; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_gpio_pin_read(uint32_t pin_num, uint32_t *data, uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_PIN_READ; + args.u.gpio_read.pin_num_or_mask = pin_num; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.gpio_read_result.result; + *data = out.u.gpio_read_result.data; + return ret; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_gpio_port_config(uint32_t pin_mask, uint32_t direction, + uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_PORT_CONFIG; + args.u.gpio_config.pin_num_or_mask = pin_mask; + args.u.gpio_config.direction = direction; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.result; + return ret; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_gpio_port_write(uint32_t pin_mask, uint32_t value, + uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_PORT_WRITE; + args.u.gpio_write.pin_num_or_mask = pin_mask; + args.u.gpio_write.value = value; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.result; + return ret; +} + +__attribute__((section("SFN"))) +enum tfm_platform_err_t +tfm_platform_gpio_port_read(uint32_t pin_mask, uint32_t *data, uint32_t *result) +{ + psa_status_t ret; + psa_invec in_vec; + psa_outvec out_vec; + struct tfm_gpio_service_args_t args; + struct tfm_gpio_service_out_t out; + + args.type = TFM_GPIO_SERVICE_TYPE_PORT_READ; + args.u.gpio_read.pin_num_or_mask = pin_mask; + + in_vec.base = (const void *)&args; + in_vec.len = sizeof(args); + + out_vec.base = (void *)&out; + out_vec.len = sizeof(out); + + ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE, + &in_vec, + &out_vec); + + *result = out.u.gpio_read_result.result; + *data = out.u.gpio_read_result.data; + return ret; +} + diff --git a/ra/fsp/src/rm_tfm_port/ra/services/src/tfm_platform_system.c b/ra/fsp/src/rm_tfm_port/ra/services/src/tfm_platform_system.c new file mode 100644 index 000000000..4fa4bdd0c --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/services/src/tfm_platform_system.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2018-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include +#include "tfm_platform_system.h" +#include "platform_description.h" +#include "target_cfg.h" +#include "psa/client.h" +#include "tfm_ioctl_api.h" +#include "Driver_Flash.h" +#include "region_defs.h" + +/** + * \brief Flash busy values flash status \ref ARM_FLASH_STATUS + */ +enum +{ + DRIVER_STATUS_IDLE = 0u, + DRIVER_STATUS_BUSY +}; + +extern ARM_DRIVER_FLASH Driver_CFLASH; + +void tfm_platform_hal_system_reset(void) +{ + __disable_irq(); + + NVIC->ICPR[0] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[1] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[2] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[3] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[4] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[5] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[6] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[7] = UINT32_MAX; /* Clear all pending interrupts */ + + NVIC_SystemReset(); +} + +static enum tfm_platform_err_t +tfm_platform_hal_flash_service_write(struct tfm_flash_service_args_t *args, + struct tfm_flash_service_out_t *out) +{ + out->u.result = 0; + uint32_t flash_address = args->u.flash_write.flash_addr; + uint32_t count = args->u.flash_write.count; + uint32_t * source_address = (uint32_t *) args->u.flash_write.src_addr; + uint32_t * checked_source_address = cmse_check_pointed_object (source_address, CMSE_AU_NONSECURE); + + if ((flash_address < SECONDARY_PARTITION_START) || ((flash_address + count) > (TOTAL_ROM_SIZE - 1)) || + (checked_source_address != source_address)) + { + return TFM_PLATFORM_ERR_INVALID_PARAM; + } + + out->u.result = Driver_CFLASH.ProgramData(flash_address, source_address, count); + return TFM_PLATFORM_ERR_SUCCESS; +} + +static enum tfm_platform_err_t +tfm_platform_hal_flash_service_erase(struct tfm_flash_service_args_t *args, + struct tfm_flash_service_out_t *out) +{ + ARM_FLASH_INFO *info; + info = Driver_CFLASH.GetInfo(); + uint32_t address = args->u.flash_erase.addr; + uint32_t sector_size = info->sector_size; + address = address & ~(sector_size - 1); + uint32_t size = ((args->u.flash_erase.count) * sector_size); + + if ((address < SECONDARY_PARTITION_START) || ((address + size) > (TOTAL_ROM_SIZE))) + { + return TFM_PLATFORM_ERR_INVALID_PARAM; + } + + for(uint32_t i=0; i < args->u.flash_erase.count; i++) + { + out->u.result |= Driver_CFLASH.EraseSector(address); + address += sector_size; + } + + return TFM_PLATFORM_ERR_SUCCESS; +} + +static enum tfm_platform_err_t +tfm_platform_hal_flash_service(const psa_invec *in_vec, + const psa_outvec *out_vec) +{ + struct tfm_flash_service_args_t *args; + struct tfm_flash_service_out_t *out; + + if (in_vec->len != sizeof(struct tfm_flash_service_args_t) || + out_vec->len != sizeof(struct tfm_flash_service_out_t)) { + return TFM_PLATFORM_ERR_INVALID_PARAM; + } + + ARM_FLASH_STATUS status = Driver_CFLASH.GetStatus(); + if (status.busy != DRIVER_STATUS_IDLE) + { + return TFM_PLATFORM_ERR_SYSTEM_ERROR; + } + + args = (struct tfm_flash_service_args_t *)in_vec->base; + out = (struct tfm_flash_service_out_t *)out_vec->base; + switch (args->type) { + case TFM_FLASH_SERVICE_TYPE_INIT: + out->u.result = Driver_CFLASH.Initialize(NULL); + break; + case TFM_FLASH_SERVICE_TYPE_ERASE: + return tfm_platform_hal_flash_service_erase(args, out); + break; + case TFM_FLASH_SERVICE_TYPE_WRITE: + return tfm_platform_hal_flash_service_write(args, out); + break; + default: + out->u.result = 1; + break; + } + + return TFM_PLATFORM_ERR_SUCCESS; +} + +enum tfm_platform_err_t tfm_platform_hal_ioctl(tfm_platform_ioctl_req_t request, + psa_invec *in_vec, + psa_outvec *out_vec) +{ + switch (request) { + case TFM_PLATFORM_IOCTL_PIN_SERVICE: + return TFM_PLATFORM_ERR_NOT_SUPPORTED; + case TFM_PLATFORM_IOCTL_GPIO_SERVICE: + return TFM_PLATFORM_ERR_NOT_SUPPORTED; + case TFM_PLATFORM_IOCTL_FLASH_SERVICE: + return tfm_platform_hal_flash_service(in_vec, out_vec); + default: + return TFM_PLATFORM_ERR_NOT_SUPPORTED; + } +} + diff --git a/ra/fsp/src/rm_tfm_port/ra/spm_hal.c b/ra/fsp/src/rm_tfm_port/ra/spm_hal.c new file mode 100644 index 000000000..d02b22897 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/spm_hal.c @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2018-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include +#include "cmsis.h" +#include "tfm_spm_hal.h" +#include "spm_api.h" +#include "tfm_platform_core_api.h" +#include "target_cfg.h" +#include "bsp_api.h" +#include "mpu_armv8m_drv.h" +#include "region_defs.h" +#include "secure_utilities.h" +#include "region.h" + +/* Get address of memory regions to configure MPU */ +extern const struct memory_region_limits memory_regions; + +struct mpu_armv8m_dev_t dev_mpu_s = { MPU_BASE }; + +#ifdef CONFIG_TFM_ENABLE_MEMORY_PROTECT +#define MPU_REGION_VENEERS 0 +#define MPU_REGION_TFM_UNPRIV_CODE 1 +#define MPU_REGION_TFM_UNPRIV_DATA 2 +#define MPU_REGION_NS_STACK 3 +#define PARTITION_REGION_RO 4 +#define PARTITION_REGION_RW_STACK 5 +#define PARTITION_REGION_PERIPH_START 6 +#define PARTITION_REGION_PERIPH_MAX_NUM 2 + +uint32_t periph_num_count = 0; +#endif /* CONFIG_TFM_ENABLE_MEMORY_PROTECT */ + +enum tfm_plat_err_t tfm_spm_hal_init_isolation_hw(void) +{ + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t tfm_spm_hal_configure_default_isolation( + uint32_t partition_idx, + const struct tfm_spm_partition_platform_data_t *platform_data) +{ + bool privileged = tfm_is_partition_privileged(partition_idx); +#if defined(CONFIG_TFM_ENABLE_MEMORY_PROTECT) && (TFM_LVL != 1) + struct mpu_armv8m_region_cfg_t region_cfg; +#endif + + if (!platform_data) { + return TFM_PLAT_ERR_INVALID_INPUT; + } + +#if defined(CONFIG_TFM_ENABLE_MEMORY_PROTECT) && (TFM_LVL != 1) + if (!privileged) { + region_cfg.region_nr = PARTITION_REGION_PERIPH_START + + periph_num_count; + periph_num_count++; + if (periph_num_count >= PARTITION_REGION_PERIPH_MAX_NUM) { + return TFM_PLAT_ERR_MAX_VALUE; + } + region_cfg.region_base = platform_data->periph_start; + region_cfg.region_limit = platform_data->periph_limit; + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_DEVICE_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RW_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_NEVER; + + mpu_armv8m_disable(&dev_mpu_s); + + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) + != MPU_ARMV8M_OK) { + return TFM_PLAT_ERR_SYSTEM_ERR; + } + mpu_armv8m_enable(&dev_mpu_s, PRIVILEGED_DEFAULT_ENABLE, + HARDFAULT_NMI_ENABLE); + } +#endif /* defined(CONFIG_TFM_ENABLE_MEMORY_PROTECT) && (TFM_LVL != 1) */ + + return TFM_PLAT_ERR_SUCCESS; +} + +#ifdef CONFIG_TFM_ENABLE_MEMORY_PROTECT +REGION_DECLARE(Image$$, TFM_UNPRIV_CODE, $$RO$$Base); +REGION_DECLARE(Image$$, TFM_UNPRIV_CODE, $$RO$$Limit); +REGION_DECLARE(Image$$, TFM_UNPRIV_DATA, $$RW$$Base); +REGION_DECLARE(Image$$, TFM_UNPRIV_DATA, $$ZI$$Limit); +REGION_DECLARE(Image$$, TFM_APP_CODE_START, $$Base); +REGION_DECLARE(Image$$, TFM_APP_CODE_END, $$Base); +REGION_DECLARE(Image$$, TFM_APP_RW_STACK_START, $$Base); +REGION_DECLARE(Image$$, TFM_APP_RW_STACK_END, $$Base); +REGION_DECLARE(Image$$, ARM_LIB_STACK, $$ZI$$Base); +REGION_DECLARE(Image$$, ARM_LIB_STACK, $$ZI$$Limit); + +static enum spm_err_t tfm_spm_mpu_init(void) +{ + struct mpu_armv8m_region_cfg_t region_cfg; + + mpu_armv8m_clean(&dev_mpu_s); + + /* Veneer region */ + region_cfg.region_nr = MPU_REGION_VENEERS; + region_cfg.region_base = memory_regions.veneer_base; + region_cfg.region_limit = memory_regions.veneer_limit; + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_CODE_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RO_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_OK; + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) != MPU_ARMV8M_OK) { + return SPM_ERR_INVALID_CONFIG; + } + + /* TFM Core unprivileged code region */ + region_cfg.region_nr = MPU_REGION_TFM_UNPRIV_CODE; + region_cfg.region_base = + (uint32_t)®ION_NAME(Image$$, TFM_UNPRIV_CODE, $$RO$$Base); + region_cfg.region_limit = + (uint32_t)®ION_NAME(Image$$, TFM_UNPRIV_CODE, $$RO$$Limit); + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_CODE_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RO_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_OK; + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) != MPU_ARMV8M_OK) { + return SPM_ERR_INVALID_CONFIG; + } + + /* TFM Core unprivileged data region */ + region_cfg.region_nr = MPU_REGION_TFM_UNPRIV_DATA; + region_cfg.region_base = + (uint32_t)®ION_NAME(Image$$, TFM_UNPRIV_DATA, $$RW$$Base); + region_cfg.region_limit = + (uint32_t)®ION_NAME(Image$$, TFM_UNPRIV_DATA, $$ZI$$Limit); + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_DATA_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RW_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_NEVER; + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) != MPU_ARMV8M_OK) { + return SPM_ERR_INVALID_CONFIG; + } + + /* NSPM PSP */ + region_cfg.region_nr = MPU_REGION_NS_STACK; + region_cfg.region_base = + (uint32_t)®ION_NAME(Image$$, ARM_LIB_STACK, $$ZI$$Base); + region_cfg.region_limit = + (uint32_t)®ION_NAME(Image$$, ARM_LIB_STACK, $$ZI$$Limit); + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_DATA_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RW_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_NEVER; + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) != MPU_ARMV8M_OK) { + return SPM_ERR_INVALID_CONFIG; + } + + /* RO region */ + region_cfg.region_nr = PARTITION_REGION_RO; + region_cfg.region_base = + (uint32_t)®ION_NAME(Image$$, TFM_APP_CODE_START, $$Base); + region_cfg.region_limit = + (uint32_t)®ION_NAME(Image$$, TFM_APP_CODE_END, $$Base); + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_CODE_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RO_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_OK; + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) != MPU_ARMV8M_OK) { + return SPM_ERR_INVALID_CONFIG; + } + + /* RW, ZI and stack as one region */ + region_cfg.region_nr = PARTITION_REGION_RW_STACK; + region_cfg.region_base = + (uint32_t)®ION_NAME(Image$$, TFM_APP_RW_STACK_START, $$Base); + region_cfg.region_limit = + (uint32_t)®ION_NAME(Image$$, TFM_APP_RW_STACK_END, $$Base); + region_cfg.region_attridx = MPU_ARMV8M_MAIR_ATTR_DATA_IDX; + region_cfg.attr_access = MPU_ARMV8M_AP_RW_PRIV_UNPRIV; + region_cfg.attr_sh = MPU_ARMV8M_SH_NONE; + region_cfg.attr_exec = MPU_ARMV8M_XN_EXEC_NEVER; + if (mpu_armv8m_region_enable(&dev_mpu_s, ®ion_cfg) != MPU_ARMV8M_OK) { + return SPM_ERR_INVALID_CONFIG; + } + + mpu_armv8m_enable(&dev_mpu_s, PRIVILEGED_DEFAULT_ENABLE, + HARDFAULT_NMI_ENABLE); + + return SPM_ERR_OK; +} + +enum tfm_plat_err_t tfm_spm_hal_setup_isolation_hw(void) +{ + if (tfm_spm_mpu_init() != SPM_ERR_OK) { + ERROR_MSG("Failed to set up initial MPU configuration! Halting."); + return TFM_PLAT_ERR_SYSTEM_ERR; + } + return TFM_PLAT_ERR_SUCCESS; +} +#endif /* CONFIG_TFM_ENABLE_MEMORY_PROTECT */ + +uint32_t tfm_spm_hal_get_ns_VTOR(void) +{ + return memory_regions.non_secure_code_start; +} + +uint32_t tfm_spm_hal_get_ns_MSP(void) +{ + return *((uint32_t *)memory_regions.non_secure_code_start); +} + +uint32_t tfm_spm_hal_get_ns_entry_point(void) +{ + return *((uint32_t *)(memory_regions.non_secure_code_start+ 4)); +} + +enum tfm_plat_err_t tfm_spm_hal_set_secure_irq_priority(IRQn_Type irq_line, + uint32_t priority) +{ + uint32_t quantized_priority = priority >> (8U - __NVIC_PRIO_BITS); + NVIC_SetPriority(irq_line, quantized_priority); + return TFM_PLAT_ERR_SUCCESS; +} + +void tfm_spm_hal_clear_pending_irq(IRQn_Type irq_line) +{ + NVIC_ClearPendingIRQ(irq_line); +} + +void tfm_spm_hal_enable_irq(IRQn_Type irq_line) +{ + NVIC_EnableIRQ(irq_line); +} + +void tfm_spm_hal_disable_irq(IRQn_Type irq_line) +{ + NVIC_DisableIRQ(irq_line); +} + +enum irq_target_state_t tfm_spm_hal_set_irq_target_state( + IRQn_Type irq_line, + enum irq_target_state_t target_state) +{ + uint32_t result; + + if (target_state == TFM_IRQ_TARGET_STATE_SECURE) { + result = NVIC_ClearTargetState(irq_line); + } else { + result = NVIC_SetTargetState(irq_line); + } + + if (result) { + return TFM_IRQ_TARGET_STATE_NON_SECURE; + } else { + return TFM_IRQ_TARGET_STATE_SECURE; + } +} + +enum tfm_plat_err_t tfm_spm_hal_enable_fault_handlers(void) +{ + return enable_fault_handlers(); +} + +enum tfm_plat_err_t tfm_spm_hal_system_reset_cfg(void) +{ + return system_reset_cfg(); +} + +void tfm_spm_hal_system_reset(void) +{ + __disable_irq(); + + NVIC->ICPR[0] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[1] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[2] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[3] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[4] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[5] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[6] = UINT32_MAX; /* Clear all pending interrupts */ + NVIC->ICPR[7] = UINT32_MAX; /* Clear all pending interrupts */ + + NVIC_SystemReset(); +} + +enum tfm_plat_err_t tfm_spm_hal_init_debug(void) +{ + return init_debug(); +} + +enum tfm_plat_err_t tfm_spm_hal_nvic_interrupt_target_state_cfg(void) +{ + return nvic_interrupt_target_state_cfg(); +} + +enum tfm_plat_err_t tfm_spm_hal_nvic_interrupt_enable(void) +{ + return nvic_interrupt_enable(); +} diff --git a/ra/fsp/src/rm_tfm_port/ra/target_cfg.c b/ra/fsp/src/rm_tfm_port/ra/target_cfg.c new file mode 100644 index 000000000..0db040372 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/target_cfg.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2018 Arm Limited + * Copyright (c) 2019-2020, Cypress Semiconductor Corporation. All rights reserved. + * + * 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. + */ + +#include "bsp_api.h" +#include "target_cfg.h" +#include "Driver_Common.h" +#include "platform_description.h" +#include "platform_irq.h" +#include "region_defs.h" +#include "tfm_plat_defs.h" +#include "region.h" +#include +#include /* for debugging printfs */ + +/* The section names come from the scatter file */ +REGION_DECLARE(Load$$LR$$, LR_NS_PARTITION, $$Base); +REGION_DECLARE(Load$$LR$$, LR_VENEER, $$Base); +REGION_DECLARE(Load$$LR$$, LR_VENEER, $$Limit); +#ifdef BL2 +REGION_DECLARE(Load$$LR$$, LR_SECONDARY_PARTITION, $$Base); +#endif /* BL2 */ + +const struct memory_region_limits memory_regions = { + .non_secure_code_start = + (uint32_t)®ION_NAME(Load$$LR$$, LR_NS_PARTITION, $$Base) + + BL2_HEADER_SIZE, + + .non_secure_partition_base = + (uint32_t)®ION_NAME(Load$$LR$$, LR_NS_PARTITION, $$Base), + + .non_secure_partition_limit = + (uint32_t)®ION_NAME(Load$$LR$$, LR_NS_PARTITION, $$Base) + + NS_PARTITION_SIZE - 1, + + .veneer_base = + (uint32_t)®ION_NAME(Load$$LR$$, LR_VENEER, $$Base), + + .veneer_limit = + (uint32_t)®ION_NAME(Load$$LR$$, LR_VENEER, $$Limit), + +#ifdef BL2 + .secondary_partition_base = + (uint32_t)®ION_NAME(Load$$LR$$, LR_SECONDARY_PARTITION, $$Base), + + .secondary_partition_limit = + (uint32_t)®ION_NAME(Load$$LR$$, LR_SECONDARY_PARTITION, $$Base) + + SECONDARY_PARTITION_SIZE - 1, +#endif /* BL2 */ +}; + +/* To write into AIRCR register, 0x5FA value must be write to the VECTKEY field, + * otherwise the processor ignores the write. + */ +#define SCB_AIRCR_WRITE_MASK ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos)) + +#define All_SEL_STATUS (SPNIDEN_SEL_STATUS | SPIDEN_SEL_STATUS | \ + NIDEN_SEL_STATUS | DBGEN_SEL_STATUS) + +/* Platform data structures: + * + * struct tfm_spm_partition_platform_data_t tfm_peripheral_std_uart = { + * UART1_NS_BASE, + * UART1_NS_BASE + 0xFFF + * }; + * + * struct tfm_spm_partition_platform_data_t tfm_peripheral_timer0 = { + * TIMER0_S_BASE, + * TIMER1_S_BASE -1 + * }; + * + */ + + +enum tfm_plat_err_t enable_fault_handlers(void) +{ + /* Explicitly set secure fault priority to the highest */ + NVIC_SetPriority(SecureFault_IRQn, 0); + + /* Enables BUS, MEM, USG and Secure faults */ + SCB->SHCSR |= SCB_SHCSR_USGFAULTENA_Msk + | SCB_SHCSR_BUSFAULTENA_Msk + | SCB_SHCSR_MEMFAULTENA_Msk + | SCB_SHCSR_SECUREFAULTENA_Msk; + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t system_reset_cfg(void) +{ + + uint32_t reg_value = SCB->AIRCR; + + /* Clear SCB_AIRCR_VECTKEY value */ + reg_value &= ~(uint32_t)(SCB_AIRCR_VECTKEY_Msk); + + /* Enable system reset request only to the secure world */ + reg_value |= (uint32_t)(SCB_AIRCR_WRITE_MASK | SCB_AIRCR_SYSRESETREQS_Msk); + + SCB->AIRCR = reg_value; + + return TFM_PLAT_ERR_SUCCESS; +} + +enum tfm_plat_err_t init_debug(void) +{ + return TFM_PLAT_ERR_SUCCESS; +} + +/*----------------- NVIC interrupt target state to NS configuration ----------*/ +enum tfm_plat_err_t nvic_interrupt_target_state_cfg(void) +{ + /* Interrupt target state is set in bsp_irq_cfg() in bsp_irq.c */ + + return TFM_PLAT_ERR_SUCCESS; +} + +/*----------------- NVIC interrupt enabling for S peripherals ----------------*/ +enum tfm_plat_err_t nvic_interrupt_enable(void) +{ + +/* + * NVIC_EnableIRQ(FF_TEST_UART_IRQ); + */ + + return TFM_PLAT_ERR_SUCCESS; +} + diff --git a/ra/fsp/src/rm_tfm_port/ra/target_cfg.h b/ra/fsp/src/rm_tfm_port/ra/target_cfg.h new file mode 100644 index 000000000..3fb217ac7 --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/target_cfg.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2018-2020 Arm Limited + * + * 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. + */ + +#ifndef __TARGET_CFG_H__ +#define __TARGET_CFG_H__ +#include +#include "tfm_peripherals_def.h" +#include "tfm_common_config.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define TFM_DRIVER_STDIO Driver_USART + + +/** + * \brief Store the addresses of memory regions + */ +struct memory_region_limits { + uint32_t non_secure_code_start; + uint32_t non_secure_partition_base; + uint32_t non_secure_partition_limit; + uint32_t veneer_base; + uint32_t veneer_limit; +#ifdef BL2 + uint32_t secondary_partition_base; + uint32_t secondary_partition_limit; +#endif /* BL2 */ +}; + +/** + * \brief Holds the data necessary to do isolation for a specific peripheral. + */ +struct tfm_spm_partition_platform_data_t +{ + uint32_t periph_start; + uint32_t periph_limit; +}; + + +/** + * \brief Enables the fault handlers and sets priorities. + * + * \return Returns values as specified by tfm_plat_err_t + */ +enum tfm_plat_err_t enable_fault_handlers(void); + +/** + * \brief Configures the system reset request properties + * + * \return Returns values as specified by tfm_plat_err_t + */ +enum tfm_plat_err_t system_reset_cfg(void); + +/** + * \brief Configures the system debug properties. + * + * \return Returns values as specified by tfm_plat_err_t + */ +enum tfm_plat_err_t init_debug(void); + +/** + * \brief Configures all external interrupts to target the + * NS state, apart for the ones associated to secure + * peripherals (plus MPC and PPC) + * + * \return Returns values as specified by tfm_plat_err_t + */ +enum tfm_plat_err_t nvic_interrupt_target_state_cfg(void); + +/** + * \brief This function enable the interrupts associated + * to the secure peripherals (plus the isolation boundary violation + * interrupts) + * + * \return Returns values as specified by tfm_plat_err_t + */ +enum tfm_plat_err_t nvic_interrupt_enable(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __TARGET_CFG_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/ra/tfm_initial_attestation_key_material.c b/ra/fsp/src/rm_tfm_port/ra/tfm_initial_attestation_key_material.c new file mode 100644 index 000000000..9b2e3c9ad --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/tfm_initial_attestation_key_material.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2019-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include +#include "tfm_common_config.h" + +#include "tfm_plat_defs.h" +#include "tfm_plat_crypto_keys.h" +#include "psa/crypto_types.h" +#include "psa/crypto_values.h" + +#ifdef SYMMETRIC_INITIAL_ATTESTATION +/* + * This file contains the hard coded version of the secret key for HMAC. + * + * A HMAC-SHA256 key is 32 bytes long. + * + * This key is used to sign the initial attestation token in COSE_Mac0. + * The secret key is stored in raw format, without any encoding(ASN.1, COSE). + * + * ####### DO NOT USE THIS KEY IN PRODUCTION ####### + */ + +/* HMAC-SHA256 by default */ +const psa_algorithm_t tfm_attest_hmac_sign_alg = PSA_ALG_HMAC(PSA_ALG_SHA_256); + +/* Symmetric initial attestation key in raw format, without any encoding. + * It is used in HMAC-SHA256. + * It MUST be present on the device. + */ +TFM_LINK_SET_RO_IN_PARTITION_SECTION("TFM_SP_INITIAL_ATTESTATION") +const uint8_t initial_attestation_hmac_sha256_key[] = +{ + 0xA9, 0xB4, 0x54, 0xB2, 0x6D, 0x6F, 0x90, 0xA4, + 0xEA, 0x31, 0x19, 0x35, 0x64, 0xCB, 0xA9, 0x1F, + 0xEC, 0x6F, 0x9A, 0x00, 0x2A, 0x7D, 0xC0, 0x50, + 0x4B, 0x92, 0xA1, 0x93, 0x71, 0x34, 0x58, 0x5F +}; + +TFM_LINK_SET_RO_IN_PARTITION_SECTION("TFM_SP_INITIAL_ATTESTATION") +const size_t initial_attestation_hmac_sha256_key_size = + sizeof(initial_attestation_hmac_sha256_key); + +TFM_LINK_SET_RO_IN_PARTITION_SECTION("TFM_SP_INITIAL_ATTESTATION") +const char *initial_attestation_kid = "kid@trustedfirmware.example"; +#else /* SYMMETRIC_INITIAL_ATTESTATION */ +/* + * This file contains the hard coded version of the ECDSA P-256 secret key in: + * platform/ext/common/template/tfm_initial_attestation_key.pem + * + * As a P-256 key, the private key is 32 bytes long. + * + * This key is used to sign the initial attestation token. + * The secret key is stored in raw format, without any encoding(ASN.1, COSE). + * + * ####### DO NOT USE THIS KEY IN PRODUCTION ####### + */ + +/* Type of the EC curve which the key belongs to, in PSA curve ID form */ +TFM_LINK_SET_RO_IN_PARTITION_SECTION("TFM_SP_INITIAL_ATTESTATION") +const psa_ecc_curve_t initial_attestation_curve_type = PSA_ECC_CURVE_SECP_R1; + +/* Initial attestation private key in raw format, without any encoding. + * It belongs to the ECDSA P-256 curve. + * It MUST be present on the device. + */ +TFM_LINK_SET_RO_IN_PARTITION_SECTION("TFM_SP_INITIAL_ATTESTATION") +const uint8_t initial_attestation_private_key[] = +{ + 0xA9, 0xB4, 0x54, 0xB2, 0x6D, 0x6F, 0x90, 0xA4, + 0xEA, 0x31, 0x19, 0x35, 0x64, 0xCB, 0xA9, 0x1F, + 0xEC, 0x6F, 0x9A, 0x00, 0x2A, 0x7D, 0xC0, 0x50, + 0x4B, 0x92, 0xA1, 0x93, 0x71, 0x34, 0x58, 0x5F +}; + +TFM_LINK_SET_RO_IN_PARTITION_SECTION("TFM_SP_INITIAL_ATTESTATION") +const uint32_t initial_attestation_private_key_size = + sizeof(initial_attestation_private_key); +#endif /* SYMMETRIC_INITIAL_ATTESTATION */ diff --git a/ra/fsp/src/rm_tfm_port/ra/tfm_peripherals_def.h b/ra/fsp/src/rm_tfm_port/ra/tfm_peripherals_def.h new file mode 100644 index 000000000..a320a55bc --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/ra/tfm_peripherals_def.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018-2020, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __TFM_PERIPHERALS_DEF_H__ +#define __TFM_PERIPHERALS_DEF_H__ + +#include "platform_irq.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Platform data is defined here: + * + * #define TFM_TIMER0_IRQ (TIMER0_IRQn) + * #define TFM_TIMER1_IRQ (TIMER1_IRQn) + * #define FF_TEST_UART_IRQ (UART1_Tx_IRQn) + * #define FF_TEST_UART_IRQ_Handler UARTTX1_Handler + * + * struct tfm_spm_partition_platform_data_t; + * + * extern struct tfm_spm_partition_platform_data_t tfm_peripheral_std_uart; + * extern struct tfm_spm_partition_platform_data_t tfm_peripheral_timer0; + + * #define TFM_PERIPHERAL_STD_UART (&tfm_peripheral_std_uart) + * #define TFM_PERIPHERAL_TIMER0 (&tfm_peripheral_timer0) + * + */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __TFM_PERIPHERALS_DEF_H__ */ diff --git a/ra/fsp/src/rm_tfm_port/tfm_common_config.h b/ra/fsp/src/rm_tfm_port/tfm_common_config.h new file mode 100644 index 000000000..b383909ac --- /dev/null +++ b/ra/fsp/src/rm_tfm_port/tfm_common_config.h @@ -0,0 +1,26 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef TFM_COMMON_CONFIG_H +#define TFM_COMMON_CONFIG_H + +#include "rm_tfm_cfg.h" + +#endif /* TFM_COMMON_CONFIG_H */ diff --git a/ra/fsp/src/rm_touch/rm_touch.c b/ra/fsp/src/rm_touch/rm_touch.c index 57b4fc1d3..7fa08acc7 100644 --- a/ra/fsp/src/rm_touch/rm_touch.c +++ b/ra/fsp/src/rm_touch/rm_touch.c @@ -72,6 +72,16 @@ #define TOUCH_MONITOR_BUTTON_SIZE (7) #define TOUCH_MONITOR_SLIDER_SIZE (4) #define TOUCH_MONITOR_WHEEL_SIZE (4) + #if (TOUCH_CFG_PAD_ENABLE) + #define TOUCH_MONITOR_PAD_ELEMENT_SIZE (2) + #define TOUCH_MONITOR_PAD_TOUCH_MAX (10) + #define TOUCH_MONITOR_PAD_COORD_SIZE (4) + #define TOUCH_MONITOR_PAD_SIZE (11) + #define TOUCH_MONITOR_PAD_TOTAL_SIZE (TOUCH_MONITOR_PAD_COORD_SIZE * TOUCH_MONITOR_PAD_TOUCH_MAX) + \ + (TOUCH_MONITOR_PAD_SIZE) + #else + #define TOUCH_MONITOR_PAD_TOTAL_SIZE (0) + #endif #define TOUCH_MONITOR_FOOTER_SIZE (1) #define TOUCH_MONITOR_BUFFER_SIZE ((TOUCH_MONITOR_HEADER_SIZE * TOUCH_MONITOR_BLOCK_MAX) + \ (TOUCH_MONITOR_SELF_ELEMENT_SIZE * CTSU_CFG_NUM_SELF_ELEMENTS) + \ @@ -82,6 +92,7 @@ (TOUCH_MONITOR_SLIDER_SIZE * TOUCH_CFG_NUM_SLIDERS) + \ (TOUCH_MONITOR_WHEAD_SIZE * TOUCH_MONITOR_BLOCK_MAX) + \ (TOUCH_MONITOR_WHEEL_SIZE * TOUCH_CFG_NUM_WHEELS) + \ + (TOUCH_MONITOR_PAD_TOTAL_SIZE) + \ TOUCH_MONITOR_FOOTER_SIZE) #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) @@ -104,6 +115,7 @@ #define TOUCH_UART_RESPONSE_BIT (0x80) #define TOUCH_UART_RESPONSE_ERROR_BIT (0xA0) #define TOUCH_UART_RESPONSE_MONITOR (0xA1) + #define TOUCH_UART_RESPONSE_MONITOR2 (0xA2) /* Write Request Type */ #define TOUCH_UART_WRITE_DRIFT (0x01) @@ -118,6 +130,11 @@ #define TOUCH_UART_WRITE_CTSUSO (0x0A) #define TOUCH_UART_WRITE_CTSUSNUM (0x0B) #define TOUCH_UART_WRITE_CTSUSDPA (0x0C) + #define TOUCH_UART_WRTIE_PAD_THRESHOLD (0x0D) + #define TOUCH_UART_WRTIE_PAD_RX_PIXEL (0x0E) + #define TOUCH_UART_WRTIE_PAD_TX_PIXEL (0x0F) + #define TOUCH_UART_WRTIE_PAD_MAX_TOUCH (0x10) + #define TOUCH_UART_WRTIE_PAD_DRIFT (0x11) /* Method Number Maximum */ #define TOUCH_UART_INSTANCE_MAX (32) @@ -141,12 +158,32 @@ #define TOUCH_UART_CTSUSDPA_SHIFT (8) #endif #endif + +/* Method Number Maximum */ + #define TOUCH_UART_INSTANCE_MAX (32) +#endif +#if (TOUCH_CFG_PAD_ENABLE) + #define TOUCH_MAP_X (3) + #define TOUCH_MAP_Y (3) + #define TOUCH_PAD_NOT_TOUCH (0xFFFF) + #define TOUCH_PAD_TEMP_VALUE_OVERFLOW_BIT (0x8000) + #define TOUCH_PAD_MONITOR_TOUCH_NUM_MAX (10) #endif /*********************************************************************************************************************** * Typedef definitions **********************************************************************************************************************/ +#if (TOUCH_CFG_PAD_ENABLE) +typedef struct st_touch_pad_drift_id +{ + uint16_t i; + uint16_t j; + uint16_t num_rx; + uint16_t num_tx; +} touch_pad_drift_id_t; +#endif + /*********************************************************************************************************************** * Private function prototypes **********************************************************************************************************************/ @@ -216,11 +253,22 @@ static uint8_t g_touch_wheel_index = 0; static uint16_t g_touch_wheel_position[TOUCH_CFG_NUM_WHEELS]; static uint16_t g_touch_wheel_threshold[TOUCH_CFG_NUM_WHEELS]; #endif +#if (TOUCH_CFG_PAD_ENABLE) +static uint16_t g_touch_pad_rx_coordinate[TOUCH_PAD_MONITOR_TOUCH_NUM_MAX]; +static uint16_t g_touch_pad_tx_coordinate[TOUCH_PAD_MONITOR_TOUCH_NUM_MAX]; +static uint16_t g_touch_pad_num_touch; +static uint16_t g_touch_pad_threshold; +static uint16_t g_touch_pad_rx_pixsel; +static uint16_t g_touch_pad_tx_pixsel; +static uint8_t g_touch_pad_max_touch; +static uint16_t g_touch_pad_drift_count; +static int32_t g_touch_pad_drift_buf[CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX]; +static uint16_t g_touch_pad_base[CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX]; +#endif #if TOUCH_CFG_MONITOR_ENABLE static volatile uint8_t g_touch_monitor_buf[TOUCH_MONITOR_BUFFER_SIZE]; static uint8_t g_touch_monitor_id; static uint16_t g_touch_monitor_size[TOUCH_MONITOR_BLOCK_MAX]; - #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) static touch_instance_ctrl_t * gp_touch_ctrl_list[TOUCH_UART_INSTANCE_MAX]; static uart_instance_t * gp_touch_uart_instance; @@ -245,6 +293,7 @@ const touch_api_t g_touch_on_ctsu = .open = RM_TOUCH_Open, .scanStart = RM_TOUCH_ScanStart, .dataGet = RM_TOUCH_DataGet, + .padDataGet = RM_TOUCH_PadDataGet, .close = RM_TOUCH_Close, .versionGet = RM_TOUCH_VersionGet, }; @@ -272,7 +321,8 @@ const touch_api_t g_touch_on_ctsu = fsp_err_t RM_TOUCH_Open (touch_ctrl_t * const p_ctrl, touch_cfg_t const * const p_cfg) { touch_instance_ctrl_t * p_instance_ctrl = (touch_instance_ctrl_t *) p_ctrl; -#if ((TOUCH_CFG_NUM_BUTTONS != 0) || (TOUCH_CFG_NUM_SLIDERS != 0) || (TOUCH_CFG_NUM_WHEELS != 0)) +#if ((TOUCH_CFG_NUM_BUTTONS != 0) || (TOUCH_CFG_NUM_SLIDERS != 0) || (TOUCH_CFG_NUM_WHEELS != 0) || \ + (TOUCH_CFG_PAD_ENABLE)) uint8_t id; #endif fsp_err_t err = FSP_SUCCESS; @@ -380,6 +430,30 @@ fsp_err_t RM_TOUCH_Open (touch_ctrl_t * const p_ctrl, touch_cfg_t const * const *(p_instance_ctrl->winfo.p_threshold + id) = p_cfg->p_wheels[id].threshold; } #endif +#if (TOUCH_CFG_PAD_ENABLE) + p_instance_ctrl->pinfo.p_rx_coordinate = &g_touch_pad_rx_coordinate[0]; + p_instance_ctrl->pinfo.p_tx_coordinate = &g_touch_pad_tx_coordinate[0]; + p_instance_ctrl->pinfo.p_num_touch = &g_touch_pad_num_touch; + p_instance_ctrl->pinfo.p_threshold = &g_touch_pad_threshold; + p_instance_ctrl->pinfo.p_rx_pixel = &g_touch_pad_rx_pixsel; + p_instance_ctrl->pinfo.p_tx_pixel = &g_touch_pad_tx_pixsel; + p_instance_ctrl->pinfo.p_max_touch = &g_touch_pad_max_touch; + p_instance_ctrl->pinfo.p_drift_buf = &g_touch_pad_drift_buf[0]; + p_instance_ctrl->pinfo.p_drift_count = &g_touch_pad_drift_count; + p_instance_ctrl->pinfo.p_base_buf = &g_touch_pad_base[0]; + + *(p_instance_ctrl->pinfo.p_threshold) = p_cfg->p_pad->threshold; + *(p_instance_ctrl->pinfo.p_rx_pixel) = p_cfg->p_pad->rx_pixel; + *(p_instance_ctrl->pinfo.p_tx_pixel) = p_cfg->p_pad->tx_pixel; + *(p_instance_ctrl->pinfo.p_max_touch) = p_cfg->p_pad->max_touch; + p_instance_ctrl->pinfo.num_drift = p_cfg->p_pad->num_drift; + + for (id = 0; id < (CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX); id++) + { + *(p_instance_ctrl->pinfo.p_drift_buf + id) = 0; + } + *(p_instance_ctrl->pinfo.p_drift_count) = 0; +#endif if (FSP_SUCCESS == err) { @@ -424,6 +498,15 @@ fsp_err_t RM_TOUCH_Open (touch_ctrl_t * const p_ctrl, touch_cfg_t const * const (TOUCH_MONITOR_WHEEL_SIZE * p_cfg->num_wheels)); } #endif + #if (TOUCH_CFG_PAD_ENABLE) + if (CTSU_MODE_MUTUAL_CFC_SCAN == (p_instance_ctrl->p_ctsu_instance->p_cfg->md)) + { + g_touch_monitor_size[num] = + (uint16_t) (g_touch_monitor_size[num] + TOUCH_MONITOR_PAD_SIZE + + (TOUCH_MONITOR_PAD_ELEMENT_SIZE * p_cfg->p_pad->num_elements)); + } + #endif + g_touch_monitor_size[num] = (uint16_t) (g_touch_monitor_size[num] + TOUCH_MONITOR_HEADER_SIZE + TOUCH_MONITOR_FOOTER_SIZE); @@ -650,106 +733,710 @@ fsp_err_t RM_TOUCH_DataGet (touch_ctrl_t * const p_ctrl, { if (TOUCH_UART_MONITOR_NONE == g_touch_uart_monitor_num) { - #endif + for (i = 0; i < p_instance_ctrl->p_touch_cfg->number; i++) + { + index = (uint16_t) (index + g_touch_monitor_size[i]); + } + } + + #else for (i = 0; i < p_instance_ctrl->p_touch_cfg->number; i++) { index = (uint16_t) (index + g_touch_monitor_size[i]); } + #endif + g_touch_monitor_buf[index++] = g_touch_monitor_id; + g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->number; + if ((CTSU_MODE_SELF_MULTI_SCAN == p_instance_ctrl->p_ctsu_instance->p_cfg->md) || + (CTSU_MODE_CURRENT_SCAN == p_instance_ctrl->p_ctsu_instance->p_cfg->md)) + { + g_touch_monitor_buf[index++] = 0x00; + element_num = p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx; + g_touch_monitor_buf[index++] = element_num; + for (i = 0; i < element_num; i++) + { + g_touch_monitor_buf[index++] = (uint8_t) (data[i]); + g_touch_monitor_buf[index++] = (uint8_t) (data[i] >> 8); + } + } + else + { + g_touch_monitor_buf[index++] = 0x01; + element_num = (uint8_t) (p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx * + p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_tx); + g_touch_monitor_buf[index++] = element_num; + for (i = 0; i < (element_num * 2); i++) + { + g_touch_monitor_buf[index++] = (uint8_t) (data[i]); + g_touch_monitor_buf[index++] = (uint8_t) (data[i] >> 8); + } + } + + #if (TOUCH_CFG_NUM_BUTTONS != 0) + if (0 < p_instance_ctrl->p_touch_cfg->num_buttons) + { + g_touch_monitor_buf[index++] = 0x00; + g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->num_buttons; + for (i = 0; i < p_instance_ctrl->p_touch_cfg->num_buttons; i++) + { + g_touch_monitor_buf[index++] = (uint8_t) ((p_instance_ctrl->binfo.status >> i) & 0x01); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_reference[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_reference[i] >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_threshold[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_threshold[i] >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_hysteresis[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_hysteresis[i] >> 8); + } + } + #endif + #if (TOUCH_CFG_NUM_SLIDERS != 0) + if (0 < p_instance_ctrl->p_touch_cfg->num_sliders) + { + g_touch_monitor_buf[index++] = 0x01; + g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->num_sliders; + for (i = 0; i < p_instance_ctrl->p_touch_cfg->num_sliders; i++) + { + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_position[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_position[i] >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_threshold[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_threshold[i] >> 8); + } + } + #endif + #if (TOUCH_CFG_NUM_WHEELS != 0) + if (0 < p_instance_ctrl->p_touch_cfg->num_wheels) + { + g_touch_monitor_buf[index++] = 0x02; + g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->num_wheels; + for (i = 0; i < p_instance_ctrl->p_touch_cfg->num_wheels; i++) + { + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_position[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_position[i] >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_threshold[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_threshold[i] >> 8); + } + } + #endif + g_touch_monitor_buf[index++] = g_touch_monitor_id++; #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) + } + + if (!g_touch_uart_transmit_flag && (p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num)) + { + g_touch_monitor_buf[index++] = TOUCH_UART_FOOTER; + g_touch_monitor_buf[2] = (uint8_t) (index); + g_touch_monitor_buf[3] = (uint8_t) (index >> 8); + g_touch_uart_transmit_flag = 1; + gp_touch_uart_instance->p_api->write(gp_touch_uart_instance->p_ctrl, + (uint8_t const * const) &g_touch_monitor_buf, + index); + } + #endif +#endif + + return FSP_SUCCESS; } + +/*******************************************************************************************************************//** + * @brief This function gets the current position of pad is being pressed. + * Implements @ref touch_api_t::padDataGet , g_touch_on_ctsu + * + * @retval FSP_SUCCESS Successfully data decoded. + * @retval FSP_ERR_ASSERTION Null pointer. + * @retval FSP_ERR_NOT_OPEN Module is not open. + * @retval FSP_ERR_CTSU_SCANNING Scanning this instance. + **********************************************************************************************************************/ +fsp_err_t RM_TOUCH_PadDataGet (touch_ctrl_t * const p_ctrl, + uint16_t * p_pad_rx_coordinate, + uint16_t * p_pad_tx_coordinate, + uint8_t * p_pad_num_touch) +{ + fsp_err_t err = FSP_SUCCESS; + touch_instance_ctrl_t * p_instance_ctrl = (touch_instance_ctrl_t *) p_ctrl; +#if (TOUCH_CFG_PAD_ENABLE) + static uint16_t count_get[CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX * 2]; + static uint8_t base_flag = 0; + uint16_t i; + uint16_t j; + uint8_t loop; + int32_t max_diff; + uint16_t max_x; + uint16_t max_y; + int32_t x_parameter; + int32_t y_parameter; + int16_t heat_map[TOUCH_MAP_X * TOUCH_MAP_Y]; + uint8_t use_map[TOUCH_MAP_X * TOUCH_MAP_Y]; + uint8_t num_x; + uint8_t num_y; + uint16_t pitch_x; + uint16_t pitch_y; + int16_t tmp_count; + uint16_t tmp_value; + int32_t tmp_diff; + int32_t tmp_heat; + int32_t tmp_x1; /* Work for calculating x parameter1 */ + int32_t tmp_x2; /* Work for calculating x parameter2 */ + int32_t tmp_x3; /* Work for calculating x parameter3 */ + int32_t tmp_x4; /* Work for calculating x parameter4 */ + int32_t tmp_y1; /* Work for calculating y parameter1 */ + int32_t tmp_y2; /* Work for calculating y parameter2 */ + int32_t tmp_y3; /* Work for calculating y parameter3 */ + int32_t tmp_y4; /* Work for calculating y parameter4 */ + uint16_t second_half; + int32_t drift_diff; + uint8_t max_touch; /* number of max touch */ + #if (TOUCH_CFG_MONITOR_ENABLE) + uint16_t index = 0; + uint8_t element_num = 0; #endif - g_touch_monitor_buf[index++] = g_touch_monitor_id; - g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->number; - if (CTSU_MODE_SELF_MULTI_SCAN == p_instance_ctrl->p_ctsu_instance->p_cfg->md) + #if (TOUCH_CFG_PARAM_CHECKING_ENABLE == 1) + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_pad_rx_coordinate); + FSP_ASSERT(p_pad_tx_coordinate); + FSP_ASSERT(p_pad_num_touch); + TOUCH_ERROR_RETURN(TOUCH_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + #endif + + /* initialize touch number */ + *p_pad_num_touch = 0; + + /* check for max touch */ + if (*(p_instance_ctrl->pinfo.p_max_touch) > ((CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX) / 9)) { - g_touch_monitor_buf[index++] = 0x00; - element_num = p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx; - g_touch_monitor_buf[index++] = element_num; - for (i = 0; i < element_num; i++) + max_touch = (CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX) / 9; + } + else + { + max_touch = *(p_instance_ctrl->pinfo.p_max_touch); + } + + /* Get local variable (TS number & data pinch) */ + num_x = p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx; + num_y = p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_tx; + second_half = (uint16_t) (num_x * num_y); + + pitch_x = (uint16_t) (*(p_instance_ctrl->pinfo.p_rx_pixel) / num_x); + pitch_y = (uint16_t) (*(p_instance_ctrl->pinfo.p_tx_pixel) / num_y); + + /* Data get */ + err = p_instance_ctrl->p_ctsu_instance->p_api->dataGet(p_instance_ctrl->p_ctsu_instance->p_ctrl, count_get); + FSP_ERROR_RETURN(FSP_ERR_CTSU_SCANNING != err, FSP_ERR_CTSU_SCANNING); + + if (FSP_SUCCESS != err) + { + return err; + } + + /* make difference value = secondary - primary */ + for (i = 0; i < CTSU_CFG_NUM_CFC * CTSU_CFG_NUM_CFC_TX; i++) + { + /* save to buffer in the first half */ + count_get[i] = (uint16_t) (count_get[(i * 2) + 1] - count_get[i * 2]); + } + + /* Data get section */ + if (!base_flag) + { + /* format base value , changing the order */ + for (j = 0; j < num_x; j++) { - g_touch_monitor_buf[index++] = (uint8_t) (data[i]); - g_touch_monitor_buf[index++] = (uint8_t) (data[i] >> 8); + for (i = 0; i < num_y; i++) + { + *(p_instance_ctrl->pinfo.p_base_buf + j + (i * num_x)) = + (count_get[*(p_instance_ctrl->p_touch_cfg->p_pad->p_elem_index_rx + j) + + (*(p_instance_ctrl->p_touch_cfg->p_pad->p_elem_index_tx + i) * num_x)]); + } } + + base_flag = 1; } else { - g_touch_monitor_buf[index++] = 0x01; - element_num = (uint8_t) (p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx * - p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_tx); - g_touch_monitor_buf[index++] = element_num; - for (i = 0; i < (element_num * 2); i++) + /* format difference value */ + for (j = 0; j < num_x; j++) { - g_touch_monitor_buf[index++] = (uint8_t) (data[i]); - g_touch_monitor_buf[index++] = (uint8_t) (data[i] >> 8); + for (i = 0; i < num_y; i++) + { + /* get count data ,and changing the order */ + tmp_value = count_get[*(p_instance_ctrl->p_touch_cfg->p_pad->p_elem_index_rx + j) + + (*(p_instance_ctrl->p_touch_cfg->p_pad->p_elem_index_tx + i) * num_x)]; + + /* make difference from base value */ + tmp_diff = *(p_instance_ctrl->pinfo.p_base_buf + j + (i * num_x)) - tmp_value; + + /* save difference value to buffer in the second half */ + count_get[second_half + j + (i * num_x)] = (uint16_t) tmp_diff; + } } } - #if (TOUCH_CFG_NUM_BUTTONS != 0) - if (0 < p_instance_ctrl->p_touch_cfg->num_buttons) + /* Monitor part of ready */ + #if (TOUCH_CFG_MONITOR_ENABLE) + #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) + if (!g_touch_uart_transmit_flag && (p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num)) { - g_touch_monitor_buf[index++] = 0x00; - g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->num_buttons; - for (i = 0; i < p_instance_ctrl->p_touch_cfg->num_buttons; i++) + /* Monitor Data Notification */ + g_touch_monitor_buf[index++] = TOUCH_UART_HEADER; + g_touch_monitor_buf[index++] = TOUCH_UART_RESPONSE_MONITOR2; + g_touch_monitor_buf[index++] = 0; /* Temporarily input the size */ + g_touch_monitor_buf[index++] = 0; /* Temporarily input the size */ + } + + if (!g_touch_uart_transmit_flag && + ((p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num) || + (TOUCH_UART_MONITOR_NONE == g_touch_uart_monitor_num))) + { + if (TOUCH_UART_MONITOR_NONE == g_touch_uart_monitor_num) + { + for (i = 0; i < p_instance_ctrl->p_touch_cfg->number; i++) + { + index = (uint16_t) (index + g_touch_monitor_size[i]); + } + } + + if (!g_touch_uart_transmit_flag) { - g_touch_monitor_buf[index++] = (uint8_t) ((p_instance_ctrl->binfo.status >> i) & 0x01); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_reference[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_reference[i] >> 8); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_threshold[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_threshold[i] >> 8); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_hysteresis[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->binfo.p_hysteresis[i] >> 8); + g_touch_monitor_buf[index++] = g_touch_monitor_id; + g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->number; + + /* Pad data */ + g_touch_monitor_buf[index++] = 0x02; + element_num = (uint8_t) (p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx * + p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_tx); + g_touch_monitor_buf[index++] = element_num; } + + #else /* TOUCH_CFG_UART_MONITOR_SUPPORT */ + for (i = 0; i < p_instance_ctrl->p_touch_cfg->number; i++) + { + index = (uint16_t) (index + g_touch_monitor_size[i]); } - #endif - #if (TOUCH_CFG_NUM_SLIDERS != 0) - if (0 < p_instance_ctrl->p_touch_cfg->num_sliders) + + g_touch_monitor_buf[index++] = g_touch_monitor_id; + g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->number; + + /* Pad data */ + g_touch_monitor_buf[index++] = 0x02; + element_num = (uint8_t) (p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_rx * + p_instance_ctrl->p_touch_cfg->p_ctsu_instance->p_cfg->num_tx); + g_touch_monitor_buf[index++] = element_num; + #endif + + #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) + } + + if (!g_touch_uart_transmit_flag && + ((p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num) || + (TOUCH_UART_MONITOR_NONE == g_touch_uart_monitor_num))) { - g_touch_monitor_buf[index++] = 0x01; - g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->num_sliders; - for (i = 0; i < p_instance_ctrl->p_touch_cfg->num_sliders; i++) + #endif /* TOUCH_CFG_UART_MONITOR_SUPPORT */ + for (i = 0; i < element_num; i++) { - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_position[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_position[i] >> 8); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_threshold[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->sinfo.p_threshold[i] >> 8); + tmp_value = count_get[second_half + i]; + if (tmp_value & TOUCH_PAD_TEMP_VALUE_OVERFLOW_BIT) + { + tmp_value = 0; + } + + g_touch_monitor_buf[index++] = (uint8_t) (tmp_value); + g_touch_monitor_buf[index++] = (uint8_t) (tmp_value >> 8); } + + g_touch_monitor_buf[index++] = 0x03; /* id of Pad */ + g_touch_monitor_buf[index++] = 0x01; /* number of Pad */ + #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) } - #endif - #if (TOUCH_CFG_NUM_WHEELS != 0) - if (0 < p_instance_ctrl->p_touch_cfg->num_wheels) + #endif + #endif /* TOUCH_CFG_MONITOR_ENABLE */ + + if (base_flag) { - g_touch_monitor_buf[index++] = 0x02; - g_touch_monitor_buf[index++] = p_instance_ctrl->p_touch_cfg->num_wheels; - for (i = 0; i < p_instance_ctrl->p_touch_cfg->num_wheels; i++) + /* Get coordinate data for the Max touch */ + for (loop = 0; loop < max_touch; loop++) { - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_position[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_position[i] >> 8); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_threshold[i]); - g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->winfo.p_threshold[i] >> 8); + /* initialize heat-map variables */ + max_diff = 0; + max_y = 0; + max_x = 0; + + /* Clear heat map ,and initial use map */ + for (i = 0; i < (TOUCH_MAP_X * TOUCH_MAP_Y); i++) + { + heat_map[i] = 0; + use_map[i] = 1; + } + + /* Maximum value search */ + for (j = 0; j < (num_x); j++) + { + for (i = 0; i < (num_y); i++) + { + if ((int16_t) count_get[second_half + j + (i * num_x)] > max_diff) + { + max_diff = (int16_t) count_get[second_half + j + (i * num_x)]; + max_y = i; + max_x = j; + } + } + } + + /* make use map */ + if (0 == max_y) + { + /* If map position is Top. */ + use_map[0] = 0; + use_map[1] = 0; + use_map[2] = 0; + } + else if ((num_y - 1) == max_y) + { + /* If map position is Bottom. */ + use_map[6] = 0; + use_map[7] = 0; + use_map[8] = 0; + } + else + { + } + + if (0 == max_x) + { + /* If map position is Left. */ + use_map[0] = 0; + use_map[3] = 0; + use_map[6] = 0; + } + else if ((num_x - 1) == max_x) + { + /* If map position is Right. */ + use_map[2] = 0; + use_map[5] = 0; + use_map[8] = 0; + } + else + { + } + + /* make heat mapping */ + for (i = 0; i < TOUCH_MAP_X; i++) + { + for (j = 0; j < TOUCH_MAP_Y; j++) + { + if (use_map[j + (i * TOUCH_MAP_X)]) + { + heat_map[j + (i * TOUCH_MAP_X)] = + (int16_t) count_get[second_half + (max_x - 1 + j) + (max_y - 1 + i) * num_x]; + } + } + } + + /* get x value */ + /* Calculate right + bottom value. (x1/y1) */ + tmp_heat = heat_map[5] + heat_map[7]; + if (tmp_heat == 0) + { + /* When dividing by zero, set the calculation result to zero */ + tmp_x1 = 0; /* x parameter1 */ + tmp_y1 = 0; /* y parameter1 */ + } + else + { + tmp_x1 = (heat_map[8] * heat_map[5]) / tmp_heat; /* x parameter1 */ + tmp_y1 = (heat_map[8] * heat_map[7]) / tmp_heat; /* y parameter1 */ + } + + /* Calculate right + up value. (x2/y4) */ + tmp_heat = heat_map[5] + heat_map[1]; + if (tmp_heat == 0) + { + /* When dividing by zero, set the calculation result to zero */ + tmp_x2 = 0; /* x parameter2 */ + tmp_y4 = 0; /* y parameter4 */ + } + else + { + tmp_x2 = (heat_map[2] * heat_map[5]) / tmp_heat; /* x parameter2 */ + tmp_y4 = (heat_map[2] * heat_map[1]) / tmp_heat; /* y parameter4 */ + } + + /* Calculate left + up value. (x3/y3) */ + tmp_heat = heat_map[3] + heat_map[1]; + if (tmp_heat == 0) + { + /* When dividing by zero, set the calculation result to zero */ + tmp_x3 = 0; /* x parameter3 */ + tmp_y3 = 0; /* y parameter3 */ + } + else + { + tmp_x3 = (heat_map[0] * heat_map[3]) / tmp_heat; /* x parameter3 */ + tmp_y3 = (heat_map[0] * heat_map[1]) / tmp_heat; /* y parameter3 */ + } + + /* Calculate left + down value. (x4/y2) */ + tmp_heat = heat_map[3] + heat_map[7]; + if (tmp_heat == 0) + { + /* When dividing by zero, set the calculation result to zero */ + tmp_x4 = 0; /* x parameter4 */ + tmp_y2 = 0; /* y parameter2 */ + } + else + { + tmp_x4 = (heat_map[6] * heat_map[3]) / tmp_heat; /* x parameter4 */ + tmp_y2 = (heat_map[6] * heat_map[7]) / tmp_heat; /* y parameter2 */ + } + + if (heat_map[4] == 0) + { + x_parameter = 0; + } + else + { + /* x coordinate value calculation*/ + x_parameter = ((pitch_x / 2) * + (heat_map[5] + tmp_x1 + tmp_x2 - + heat_map[3] - tmp_x3 - tmp_x4) / + heat_map[4]); + } + + /* Fit to pitch */ + if (x_parameter > pitch_x / 2) + { + x_parameter = pitch_x / 2; + } + else if (x_parameter < -(pitch_x / 2)) + { + x_parameter = -(pitch_x / 2); + } + else + { + /* no operation */ + } + + /* Coordinate x value based on pitch */ + *(p_pad_rx_coordinate + loop) = (uint16_t) ((pitch_x * (max_x + 1) - pitch_x / 2) + x_parameter); + + /* get y value */ + if (heat_map[4] == 0) + { + y_parameter = 0; + } + else + { + /* y coordinate value calculation*/ + y_parameter = ((pitch_y / 2) * + (heat_map[7] + tmp_y1 + tmp_y2 - + heat_map[1] - tmp_y3 - tmp_y4) / + heat_map[4]); + } + + /* Fit to pitch */ + if (y_parameter > pitch_y / 2) + { + y_parameter = pitch_y / 2; + } + else if (y_parameter < -(pitch_y / 2)) + { + y_parameter = -(pitch_y / 2); + } + else + { + /* no operation */ + } + + /* Coordinate y value based on pitch */ + *(p_pad_tx_coordinate + loop) = (uint16_t) ((pitch_y * (max_y + 1) - pitch_y / 2) + y_parameter); + + /* touch check */ + if (max_diff >= *(p_instance_ctrl->pinfo.p_threshold)) + { + /* If touching ,then counter's being incremented */ + (*p_pad_num_touch)++; + + /* Clear heat map area */ + for (i = 0; i < TOUCH_MAP_X; i++) + { + for (j = 0; j < TOUCH_MAP_Y; j++) + { + if (use_map[i * TOUCH_MAP_X + j]) + { + count_get[second_half + (max_x - 1 + j) + (max_y - 1 + i) * num_x] = 0; + } + } + } + } + else + { + *(p_pad_rx_coordinate + loop) = TOUCH_PAD_NOT_TOUCH; + *(p_pad_tx_coordinate + loop) = TOUCH_PAD_NOT_TOUCH; + } + + if (loop < TOUCH_PAD_MONITOR_TOUCH_NUM_MAX) + { + *(p_instance_ctrl->pinfo.p_rx_coordinate + loop) = *(p_pad_rx_coordinate + loop); + *(p_instance_ctrl->pinfo.p_tx_coordinate + loop) = *(p_pad_tx_coordinate + loop); + + FSP_PARAMETER_NOT_USED(p_instance_ctrl->pinfo.p_rx_coordinate); + FSP_PARAMETER_NOT_USED(p_instance_ctrl->pinfo.p_tx_coordinate); + } + } + + /* the drift correction process. */ + if (0 < p_instance_ctrl->pinfo.num_drift) + { + if (0 == *p_pad_num_touch) + { + /* If not touching, drift correction counter's being incremented */ + (*(p_instance_ctrl->pinfo.p_drift_count))++; + + for (i = 0; i < num_y; i++) + { + for (j = 0; j < num_x; j++) + { + /* It is an addition for the drift correction average calculation */ + tmp_count = (int16_t) count_get[second_half + j + (i * num_x)]; + + *(p_instance_ctrl->pinfo.p_drift_buf + (j + (i * num_x))) += (int32_t) tmp_count; + + if (*(p_instance_ctrl->pinfo.p_drift_count) >= p_instance_ctrl->pinfo.num_drift) + { + drift_diff = (int32_t) (*(p_instance_ctrl->pinfo.p_drift_buf + j + (i * num_x)) / + *(p_instance_ctrl->pinfo.p_drift_count)); + + *(p_instance_ctrl->pinfo.p_base_buf + j + (i * num_x)) = + (uint16_t) ((int32_t) (*(p_instance_ctrl->pinfo.p_base_buf + j + (i * num_x))) - + drift_diff); + + /* Clear total value for the average */ + *(p_instance_ctrl->pinfo.p_drift_buf + (j + (i * num_x))) = 0; + } + } + } + + if (*(p_instance_ctrl->pinfo.p_drift_count) >= p_instance_ctrl->pinfo.num_drift) + { + /* Count clear */ + *(p_instance_ctrl->pinfo.p_drift_count) = 0; + } + } } } - #endif - g_touch_monitor_buf[index++] = g_touch_monitor_id++; - #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) + *(p_instance_ctrl->pinfo.p_num_touch) = *p_pad_num_touch; + + for (i = *p_pad_num_touch; i < TOUCH_PAD_MONITOR_TOUCH_NUM_MAX; i++) + { + g_touch_pad_rx_coordinate[i] = TOUCH_PAD_NOT_TOUCH; + g_touch_pad_tx_coordinate[i] = TOUCH_PAD_NOT_TOUCH; + } + + /* Monitor part of result */ + #if (TOUCH_CFG_MONITOR_ENABLE) + #if (TOUCH_CFG_UART_MONITOR_SUPPORT == 1) + if (!g_touch_uart_transmit_flag && + ((p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num) || + (TOUCH_UART_MONITOR_NONE == g_touch_uart_monitor_num))) + { + g_touch_monitor_buf[index++] = *p_pad_num_touch; /* number of touch */ + for (i = 0; i < TOUCH_PAD_MONITOR_TOUCH_NUM_MAX; i++) + { + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_rx_coordinate[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_rx_coordinate[i] >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_tx_coordinate[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_tx_coordinate[i] >> 8); + } + + g_touch_monitor_buf[index++] = (uint8_t) (*(p_instance_ctrl->pinfo.p_threshold)); + g_touch_monitor_buf[index++] = (uint8_t) ((*(p_instance_ctrl->pinfo.p_threshold)) >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (*(p_instance_ctrl->pinfo.p_rx_pixel)); + g_touch_monitor_buf[index++] = (uint8_t) ((*(p_instance_ctrl->pinfo.p_rx_pixel)) >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (*(p_instance_ctrl->pinfo.p_tx_pixel)); + g_touch_monitor_buf[index++] = (uint8_t) ((*(p_instance_ctrl->pinfo.p_tx_pixel)) >> 8); + g_touch_monitor_buf[index++] = (*(p_instance_ctrl->pinfo.p_max_touch)); + g_touch_monitor_buf[index++] = (p_instance_ctrl->pinfo.num_drift); + g_touch_monitor_buf[index++] = g_touch_monitor_id++; + + if (p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num) + { + g_touch_monitor_buf[index++] = TOUCH_UART_FOOTER; + g_touch_monitor_buf[2] = (uint8_t) (index); + g_touch_monitor_buf[3] = (uint8_t) (index >> 8); + g_touch_uart_transmit_flag = 1; + gp_touch_uart_instance->p_api->write(gp_touch_uart_instance->p_ctrl, + (uint8_t const * const) &g_touch_monitor_buf, + index); + } + } + + #else /* TOUCH_CFG_UART_MONITOR_SUPPORT */ + g_touch_monitor_buf[index++] = *p_pad_num_touch; /* number of touch */ + for (i = 0; i < TOUCH_PAD_MONITOR_TOUCH_NUM_MAX; i++) + { + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_rx_coordinate[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_rx_coordinate[i] >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_tx_coordinate[i]); + g_touch_monitor_buf[index++] = (uint8_t) (p_instance_ctrl->pinfo.p_tx_coordinate[i] >> 8); + } + + g_touch_monitor_buf[index++] = (uint8_t) (*(p_instance_ctrl->pinfo.p_threshold)); + g_touch_monitor_buf[index++] = (uint8_t) ((*(p_instance_ctrl->pinfo.p_threshold)) >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (*(p_instance_ctrl->pinfo.p_rx_pixel)); + g_touch_monitor_buf[index++] = (uint8_t) ((*(p_instance_ctrl->pinfo.p_rx_pixel)) >> 8); + g_touch_monitor_buf[index++] = (uint8_t) (*(p_instance_ctrl->pinfo.p_tx_pixel)); + g_touch_monitor_buf[index++] = (uint8_t) ((*(p_instance_ctrl->pinfo.p_tx_pixel)) >> 8); + g_touch_monitor_buf[index++] = (*(p_instance_ctrl->pinfo.p_max_touch)); + g_touch_monitor_buf[index++] = (p_instance_ctrl->pinfo.num_drift); + g_touch_monitor_buf[index++] = g_touch_monitor_id++; + #endif /* TOUCH_CFG_UART_MONITOR_SUPPORT */ + #endif /* TOUCH_CFG_MONITOR_ENABLE */ +#else /* TOUCH_CFG_PAD_ENABLE */ + #if (TOUCH_CFG_PARAM_CHECKING_ENABLE == 1) + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_pad_rx_coordinate); + FSP_ASSERT(p_pad_tx_coordinate); + FSP_ASSERT(p_pad_num_touch); + TOUCH_ERROR_RETURN(TOUCH_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + #endif + FSP_PARAMETER_NOT_USED(p_pad_rx_coordinate); + FSP_PARAMETER_NOT_USED(p_pad_tx_coordinate); + FSP_PARAMETER_NOT_USED(p_pad_num_touch); + FSP_PARAMETER_NOT_USED(p_instance_ctrl); + FSP_PARAMETER_NOT_USED(FSP_ERR_CTSU_SCANNING); +#endif /* TOUCH_CFG_PAD_ENABLE */ + return err; } -if (!g_touch_uart_transmit_flag && (p_instance_ctrl->p_touch_cfg->number == g_touch_uart_monitor_num)) +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements touch_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. + **********************************************************************************************************************/ +fsp_err_t RM_TOUCH_CallbackSet (touch_ctrl_t * const p_api_ctrl, + void ( * p_callback)(touch_callback_args_t *), + void const * const p_context, + touch_callback_args_t * const p_callback_memory) { - g_touch_monitor_buf[index++] = TOUCH_UART_FOOTER; - g_touch_monitor_buf[2] = (uint8_t) (index); - g_touch_monitor_buf[3] = (uint8_t) (index >> 8); - g_touch_uart_transmit_flag = 1; - gp_touch_uart_instance->p_api->write(gp_touch_uart_instance->p_ctrl, - (uint8_t const * const) &g_touch_monitor_buf, - index); -} - #endif + fsp_err_t err = FSP_SUCCESS; + touch_instance_ctrl_t * p_ctrl = (touch_instance_ctrl_t *) p_api_ctrl; + +#if (TOUCH_CFG_PARAM_CHECKING_ENABLE == 1) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(TOUCH_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); #endif - return FSP_SUCCESS; + err = p_ctrl->p_ctsu_instance->p_api->callbackSet(p_ctrl->p_ctsu_instance->p_ctrl, + p_callback, + p_context, + p_callback_memory); + + return err; } /*******************************************************************************************************************//** @@ -762,7 +1449,7 @@ if (!g_touch_uart_transmit_flag && (p_instance_ctrl->p_touch_cfg->number == g_to fsp_err_t RM_TOUCH_Close (touch_ctrl_t * const p_ctrl) { touch_instance_ctrl_t * p_instance_ctrl = (touch_instance_ctrl_t *) p_ctrl; - fsp_err_t err = FSP_SUCCESS; + fsp_err_t err = FSP_SUCCESS; FSP_ASSERT(p_instance_ctrl); TOUCH_ERROR_RETURN(TOUCH_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); @@ -933,7 +1620,7 @@ void touch_button_on (touch_button_info_t * p_binfo, uint16_t value, uint8_t but /* ===== touch ON result ===== */ if (p_binfo->on_freq <= (*(p_binfo->p_on_count + button_id))) { - p_binfo->status |= (uint64_t) (1 << button_id); + p_binfo->status |= ((uint64_t) 1 << button_id); } else { @@ -946,7 +1633,7 @@ void touch_button_on (touch_button_info_t * p_binfo, uint16_t value, uint8_t but /* If reaching max_on_threshold, it makes result off and it revises a drift. */ if (p_binfo->cancel_freq <= (*(p_binfo->p_on_count + button_id))) { - p_binfo->status &= ~((uint64_t) (1 << button_id)); + p_binfo->status &= ~((uint64_t) 1 << button_id); *(p_binfo->p_on_count + button_id) = 0; *(p_binfo->p_reference + button_id) = value; } @@ -972,7 +1659,7 @@ void touch_button_off (touch_button_info_t * p_binfo, uint8_t button_id) /* ===== touch OFF result ===== */ if (p_binfo->off_freq <= (*(p_binfo->p_off_count + button_id))) { - p_binfo->status &= ~((uint64_t) (1 << button_id)); + p_binfo->status &= ~(((uint64_t) 1 << button_id)); } else { @@ -993,7 +1680,7 @@ void touch_button_drift (touch_button_info_t * p_binfo, uint16_t value, uint8_t if (0 != p_binfo->drift_freq) { /* In case of doing drift correction being and moreover On/Off judgment result 1=OFF */ - if (0 == (p_binfo->status & ((uint64_t) (1 << button_id)))) + if (0 == (p_binfo->status & ((uint64_t) 1 << button_id))) { /* It is an addition for the drift correction average calculation */ *(p_binfo->p_drift_buf + button_id) += value; @@ -1041,8 +1728,8 @@ void touch_button_drift (touch_button_info_t * p_binfo, uint16_t value, uint8_t void touch_slider_decode (touch_slider_info_t * p_sinfo, uint16_t * slider_data, uint8_t num_elements, uint8_t slider_id) { - uint8_t loop; - uint8_t max_data_num; + uint8_t loop; + uint8_t max_data_num; uint16_t d1; uint16_t d2; uint16_t d3; @@ -1167,8 +1854,8 @@ void touch_slider_decode (touch_slider_info_t * p_sinfo, uint16_t * slider_data, ***********************************************************************************************************************/ void touch_wheel_decode (touch_wheel_info_t * p_winfo, uint16_t * wheel_data, uint8_t num_elements, uint8_t wheel_id) { - uint8_t loop; - uint8_t max_data_num; + uint8_t loop; + uint8_t max_data_num; uint16_t d1; uint16_t d2; uint16_t d3; @@ -1263,10 +1950,10 @@ void touch_wheel_decode (touch_wheel_info_t * p_winfo, uint16_t * wheel_data, ui void touch_uart_callback (uart_callback_args_t * p_args) { ctsu_instance_ctrl_t * p_ctsu_ctrl; - uint16_t write_data; - uint16_t ctsuso; - uint8_t ctsusdpa; - uint8_t ctsusnum; + uint16_t write_data; + uint16_t ctsuso; + uint8_t ctsusdpa; + uint8_t ctsusnum; #if (BSP_FEATURE_CTSU_VERSION == 2) uint32_t * p_ctsuso; uint32_t * p_ctsusdpa; @@ -1277,8 +1964,8 @@ void touch_uart_callback (uart_callback_args_t * p_args) uint16_t * p_ctsusdpa; uint16_t * p_ctsusnum; #endif - uint8_t num; - uint8_t element; + uint8_t num; + uint8_t element; uint16_t index; if (NULL == gp_touch_uart_instance) @@ -1499,6 +2186,39 @@ void touch_uart_callback (uart_callback_args_t * p_args) break; } + #if (TOUCH_CFG_PAD_ENABLE) + + /* write command */ + case TOUCH_UART_WRTIE_PAD_THRESHOLD: + { + *gp_touch_ctrl_list[num]->pinfo.p_threshold = write_data; + break; + } + + case TOUCH_UART_WRTIE_PAD_RX_PIXEL: + { + *gp_touch_ctrl_list[num]->pinfo.p_rx_pixel = write_data; + break; + } + + case TOUCH_UART_WRTIE_PAD_TX_PIXEL: + { + *gp_touch_ctrl_list[num]->pinfo.p_tx_pixel = write_data; + break; + } + + case TOUCH_UART_WRTIE_PAD_MAX_TOUCH: + { + *gp_touch_ctrl_list[num]->pinfo.p_max_touch = (uint8_t) write_data; + break; + } + + case TOUCH_UART_WRTIE_PAD_DRIFT: + { + gp_touch_ctrl_list[num]->pinfo.num_drift = (uint8_t) write_data; + break; + } + #endif /* TOUCH_CFG_PAD_ENABLE */ default: { break; diff --git a/ra/fsp/src/rm_tz_context/tz_context.c b/ra/fsp/src/rm_tz_context/tz_context.c new file mode 100644 index 000000000..3a8595905 --- /dev/null +++ b/ra/fsp/src/rm_tz_context/tz_context.c @@ -0,0 +1,224 @@ +/*********************************************************************************************************************** + * Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics America Inc. and may only be used with products + * of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. Renesas products are + * sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for the selection and use + * of Renesas products and Renesas assumes no liability. No license, express or implied, to any intellectual property + * right is granted by Renesas. This software is protected under all applicable laws, including copyright laws. Renesas + * reserves the right to change or discontinue this software and/or this documentation. THE SOFTWARE AND DOCUMENTATION + * IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT + * PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE OR + * DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. TO THE MAXIMUM + * EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR DOCUMENTATION + * (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, + * WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY LOST PROFITS, + * OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE POSSIBILITY + * OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/* This file is based on a template provided in ARM CMSIS_5: + * https://github.com/ARM-software/CMSIS_5/blob/5.6.0/CMSIS/Core/Template/ARMv8-M/tz_context.c */ + +/* UNCRUSTIFY-OFF */ + +#include "bsp_api.h" + +#if BSP_TZ_SECURE_BUILD + +#include "tz_context.h" +#include "rm_tz_context_cfg.h" + +/// Number of process slots (threads may call secure library code) +#ifndef TZ_PROCESS_STACK_SLOTS +#define TZ_PROCESS_STACK_SLOTS 8U +#endif + +/// Stack size of the secure library code +#ifndef TZ_PROCESS_STACK_SIZE +#define TZ_PROCESS_STACK_SIZE 256U +#endif + +/// MPU is not yet supported +#define RM_TZ_CONTEXT_CFG_MPU_ENABLE 0U + +typedef struct { + uint32_t sp_top; // stack space top + uint32_t sp_limit; // stack space limit + uint32_t sp; // current stack pointer +} stack_info_t; + +static stack_info_t ProcessStackInfo [TZ_PROCESS_STACK_SLOTS]; +static uint32_t ProcessStackMemory[TZ_PROCESS_STACK_SLOTS][TZ_PROCESS_STACK_SIZE/sizeof(uint32_t)] BSP_ALIGN_VARIABLE(8); +static uint32_t ProcessStackFreeSlot = UINT32_MAX; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +BSP_CMSE_NONSECURE_ENTRY +uint32_t TZ_InitContextSystem_S (void) { + uint32_t n; + + if (__get_IPSR() == 0U) { + return 0U; // Thread Mode + } + + for (n = 0U; n < TZ_PROCESS_STACK_SLOTS; n++) { + ProcessStackInfo[n].sp = 0U; + ProcessStackInfo[n].sp_limit = (uint32_t)&ProcessStackMemory[n]; + ProcessStackInfo[n].sp_top = (uint32_t)&ProcessStackMemory[n] + TZ_PROCESS_STACK_SIZE; + *((uint32_t *)ProcessStackMemory[n]) = n + 1U; + } + *((uint32_t *)ProcessStackMemory[--n]) = UINT32_MAX; + + ProcessStackFreeSlot = 0U; + + // Default process stack pointer and stack limit + __set_PSPLIM((uint32_t)ProcessStackMemory); + __set_PSP ((uint32_t)ProcessStackMemory); + +#if RM_TZ_CONTEXT_CFG_MPU_ENABLE + { + /* Configure thread mode to use PSP and to be unprivileged. */ + __set_CONTROL(0x03U); + } +#else + { + /* Configure thread mode to use PSP and to be privileged. */ + __set_CONTROL(0x02U); + } +#endif + + return 1U; // Success +} + + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +BSP_CMSE_NONSECURE_ENTRY +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module) { + uint32_t slot; + + FSP_PARAMETER_NOT_USED(module); // Ignore (fixed Stack size) + + if (__get_IPSR() == 0U) { + return 0U; // Thread Mode + } + + if (ProcessStackFreeSlot == UINT32_MAX) { + return 0U; // No slot available + } + + slot = ProcessStackFreeSlot; + ProcessStackFreeSlot = *((uint32_t *)ProcessStackMemory[slot]); + + ProcessStackInfo[slot].sp = ProcessStackInfo[slot].sp_top; + + return (slot + 1U); +} + + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +BSP_CMSE_NONSECURE_ENTRY +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id) { + uint32_t slot; + + if (__get_IPSR() == 0U) { + return 0U; // Thread Mode + } + + if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { + return 0U; // Invalid ID + } + + slot = id - 1U; + + if (ProcessStackInfo[slot].sp == 0U) { + return 0U; // Inactive slot + } + ProcessStackInfo[slot].sp = 0U; + + *((uint32_t *)ProcessStackMemory[slot]) = ProcessStackFreeSlot; + ProcessStackFreeSlot = slot; + + return 1U; // Success +} + + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +BSP_CMSE_NONSECURE_ENTRY +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id) { + uint32_t slot; + + if ((__get_IPSR() == 0U) || ((__get_CONTROL() & 2U) == 0U)) { + return 0U; // Thread Mode or using Main Stack for threads + } + + if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { + return 0U; // Invalid ID + } + + slot = id - 1U; + + if (ProcessStackInfo[slot].sp == 0U) { + return 0U; // Inactive slot + } + + // Setup process stack pointer and stack limit + __set_PSPLIM(ProcessStackInfo[slot].sp_limit); + __set_PSP (ProcessStackInfo[slot].sp); + + return 1U; // Success +} + + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +BSP_CMSE_NONSECURE_ENTRY +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id) { + uint32_t slot; + uint32_t sp; + + if ((__get_IPSR() == 0U) || ((__get_CONTROL() & 2U) == 0U)) { + return 0U; // Thread Mode or using Main Stack for threads + } + + if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { + return 0U; // Invalid ID + } + + slot = id - 1U; + + if (ProcessStackInfo[slot].sp == 0U) { + return 0U; // Inactive slot + } + + sp = __get_PSP(); + if ((sp < ProcessStackInfo[slot].sp_limit) || + (sp > ProcessStackInfo[slot].sp_top)) { + return 0U; // SP out of range + } + ProcessStackInfo[slot].sp = sp; + + __asm volatile ( + "MRS R1, PSP \n" /* r1 = PSP. */ + "VSTMDB R1!, {S0} \n" /* Trigger the deferred stacking of FPU registers. */ + "VLDMIA R1!, {S0} \n" /* Nullify the effect of the pervious statement. */ + ::: "r1", "memory" + ); + + // Default process stack pointer and stack limit + __set_PSPLIM((uint32_t)ProcessStackMemory); + __set_PSP ((uint32_t)ProcessStackMemory); + + return 1U; // Success +} + +#endif diff --git a/ra/fsp/src/rm_vee_flash/rm_vee_flash.c b/ra/fsp/src/rm_vee_flash/rm_vee_flash.c index 00d067bb4..faa1f6fa9 100644 --- a/ra/fsp/src/rm_vee_flash/rm_vee_flash.c +++ b/ra/fsp/src/rm_vee_flash/rm_vee_flash.c @@ -114,6 +114,12 @@ typedef enum e_rm_vee_flash_refresh_refresh RM_VEE_FLASH_PRV_REFRESH_RECORD_OVFL } rm_vee_flash_refresh_refresh_t; +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * volatile rm_vee_flash_prv_ns_callback)(rm_vee_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile rm_vee_flash_prv_ns_callback)(rm_vee_callback_args_t * p_args); +#endif + /*********************************************************************************************************************** * External functions **********************************************************************************************************************/ @@ -215,6 +221,7 @@ fsp_err_t RM_VEE_FLASH_Open (rm_vee_ctrl_t * const p_api_ctrl, rm_vee_cfg_t cons FSP_ERROR_RETURN(2 <= p_cfg->num_segments, FSP_ERR_INVALID_ARGUMENT); FSP_ERROR_RETURN(BSP_DATA_FLASH_SIZE_BYTES >= p_cfg->total_size, FSP_ERR_INVALID_ARGUMENT); FSP_ERROR_RETURN(0 == (p_cfg->total_size % p_cfg->num_segments), FSP_ERR_INVALID_ARGUMENT); + FSP_ERROR_RETURN(0 == ((p_cfg->total_size / p_cfg->num_segments) % 4), FSP_ERR_INVALID_ARGUMENT); FSP_ERROR_RETURN(0 == (p_cfg->ref_data_size % RM_VEE_FLASH_DF_WRITE_SIZE), FSP_ERR_INVALID_ARGUMENT); #endif @@ -289,6 +296,14 @@ fsp_err_t RM_VEE_FLASH_Open (rm_vee_ctrl_t * const p_api_ctrl, rm_vee_cfg_t cons p_ctrl->ref_hdr.pad = 0; p_ctrl->ref_hdr.valid_code = RM_VEE_FLASH_VALID_CODE; +#if BSP_TZ_SECURE_BUILD + p_ctrl->callback_is_secure = true; +#endif + + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + p_ctrl->mode = RM_VEE_FLASH_PRV_MODE_NORMAL; p_ctrl->open = RM_VEE_FLASH_OPEN; @@ -608,6 +623,52 @@ fsp_err_t RM_VEE_FLASH_Format (rm_vee_ctrl_t * const p_api_ctrl, uint8_t const * return err; } +/*******************************************************************************************************************//** + * Updates the user callback with the option to provide memory for the callback argument structure. + * + * Implements @ref rm_vee_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 RM_VEE_FLASH_CallbackSet (rm_vee_ctrl_t * const p_api_ctrl, + void ( * p_callback)(rm_vee_callback_args_t *), + void const * const p_context, + rm_vee_callback_args_t * const p_callback_memory) +{ + rm_vee_flash_instance_ctrl_t * p_ctrl = (rm_vee_flash_instance_ctrl_t *) p_api_ctrl; + +#if (RM_VEE_FLASH_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(RM_VEE_FLASH_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + p_ctrl->callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if (RM_VEE_FLASH_CFG_PARAM_CHECKING_ENABLE) + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + rm_vee_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(p_ctrl->callback_is_secure || (NULL != p_callback_memory_checked), FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ + p_ctrl->p_callback = p_callback; + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + /*******************************************************************************************************************//** * Get the current status of the driver. * @@ -1452,6 +1513,61 @@ static fsp_err_t rm_vee_start_seg_refresh (rm_vee_flash_instance_ctrl_t * const return err; } +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to the control block + * @param[in] p_args Pointer to arguments on stack + **********************************************************************************************************************/ +static void rm_vee_call_callback (rm_vee_flash_instance_ctrl_t * p_ctrl, rm_vee_callback_args_t * p_args) +{ + rm_vee_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. */ + rm_vee_callback_args_t * p_args_memory = p_ctrl->p_callback_memory; + if (NULL == p_args_memory) + { + /* Use provided args struct on stack */ + p_args_memory = p_args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args_memory; + + /* Copy the stacked args to callback memory */ + *p_args_memory = *p_args; + } + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (p_ctrl->callback_is_secure) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args_memory); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + rm_vee_flash_prv_ns_callback p_callback = (rm_vee_flash_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args_memory); + } + +#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_memory); +#endif + + if (NULL != p_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_ctrl->p_callback_memory = args; + } +} + /*******************************************************************************************************************//** * This function is called at the interrupt level every time a flash operation completes. If this function * is called during VEE initialization, a global flag is set and the function exits immediately (driver is @@ -1659,13 +1775,13 @@ void rm_vee_flash_callback (flash_callback_args_t * p_args) rm_vee_flash_err_handle(p_ctrl, err); - if ((RM_VEE_FLASH_PRV_STATES_READY == p_ctrl->state) && (NULL != p_ctrl->p_cfg->p_callback)) + if ((RM_VEE_FLASH_PRV_STATES_READY == p_ctrl->state) && (NULL != p_ctrl->p_callback)) { rm_vee_callback_args_t args; rm_vee_state_get(p_ctrl, &args.state); - args.p_context = p_ctrl->p_cfg->p_context; - p_ctrl->p_cfg->p_callback(&args); + args.p_context = p_ctrl->p_context; + rm_vee_call_callback(p_ctrl, &args); } } diff --git a/ra/fsp/src/rm_wifi_onchip_silex/aws_secure_sockets.c b/ra/fsp/src/rm_wifi_onchip_silex/aws_secure_sockets.c index ee70f76d4..63dc900cb 100644 --- a/ra/fsp/src/rm_wifi_onchip_silex/aws_secure_sockets.c +++ b/ra/fsp/src/rm_wifi_onchip_silex/aws_secure_sockets.c @@ -28,6 +28,7 @@ #include "semphr.h" #include "limits.h" #include "rm_wifi_onchip_silex.h" +#include "rm_wifi_onchip_silex_cfg.h" /* Undefine the macro for Keil Compiler to avoid conflict: */ /* __PASTE macro redefinition [-Wmacro-redefinition] */ @@ -37,9 +38,11 @@ #endif #include "iot_secure_sockets.h" -#include "iot_tls.h" -#include "iot_pkcs11.h" -#include "iot_crypto.h" +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT + #include "iot_tls.h" + #include "iot_pkcs11.h" + #include "iot_crypto.h" +#endif #if defined(__ARMCC_VERSION) #pragma GCC diagnostic pop @@ -230,7 +233,7 @@ Socket_t SOCKETS_Socket (int32_t lDomain, int32_t lType, int32_t lProtocol) * * @return * * SOCKETS_ERROR_NONE if a connection is established. - * * If an error occured, a negative value is returned. + * * If an error occured, a negative value is returned. */ int32_t SOCKETS_Connect (Socket_t xSocket, SocketsSockaddr_t * pxAddress, Socklen_t xAddressLength) { @@ -240,9 +243,6 @@ int32_t SOCKETS_Connect (Socket_t xSocket, SocketsSockaddr_t * pxAddress, Sockle int32_t ret = SOCKETS_SOCKET_ERROR; SSOCKETContextPtr_t pxContext = (SSOCKETContextPtr_t) xSocket; /*lint !e9087 cast used for portability. */ - TLSParams_t xTLSParams = - {0}; - if ((pxContext->xSocket != SOCKETS_INVALID_SOCKET) && (pxAddress != NULL)) { ret = @@ -256,8 +256,10 @@ int32_t SOCKETS_Connect (Socket_t xSocket, SocketsSockaddr_t * pxAddress, Sockle } /* Negotiate TLS if requested. */ +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT if ((SOCKETS_ERROR_NONE == lStatus) && (pdTRUE == pxContext->xRequireTLS)) { + TLSParams_t xTLSParams = {0}; xTLSParams.ulSize = sizeof(xTLSParams); xTLSParams.pcDestination = pxContext->pcDestination; xTLSParams.pcServerCertificate = pxContext->pcServerCertificate; @@ -276,6 +278,7 @@ int32_t SOCKETS_Connect (Socket_t xSocket, SocketsSockaddr_t * pxAddress, Sockle } } } +#endif } else { @@ -302,7 +305,7 @@ int32_t SOCKETS_Connect (Socket_t xSocket, SocketsSockaddr_t * pxAddress, Sockle * buffer pointed to by pvBuffer) is returned. * * If a timeout occurred before data could be received then 0 is returned (timeout * is set using SOCKETS_SO_RCVTIMEO). - * * If an error occured, a negative value is returned. + * * If an error occured, a negative value is returned. */ int32_t SOCKETS_Recv (Socket_t xSocket, void * pvBuffer, size_t xBufferLength, uint32_t ulFlags) { @@ -312,13 +315,14 @@ int32_t SOCKETS_Recv (Socket_t xSocket, void * pvBuffer, size_t xBufferLength, u if ((xSocket != SOCKETS_INVALID_SOCKET) && (pvBuffer != NULL)) { pxContext->xRecvFlags = (BaseType_t) ulFlags; - +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT if (pdTRUE == pxContext->xRequireTLS) { /* Receive through TLS pipe, if negotiated. */ lStatus = TLS_Recv(pxContext->pvTLSContext, pvBuffer, xBufferLength); } else +#endif { /* Receive unencrypted. */ lStatus = prvNetworkRecv(pxContext, pvBuffer, xBufferLength); @@ -341,7 +345,7 @@ int32_t SOCKETS_Recv (Socket_t xSocket, void * pvBuffer, size_t xBufferLength, u * * @return * * On success, the number of bytes actually sent is returned. - * * If an error occured, a negative value is returned. + * * If an error occured, a negative value is returned. */ int32_t SOCKETS_Send (Socket_t xSocket, const void * pvBuffer, size_t xDataLength, uint32_t ulFlags) { @@ -352,12 +356,14 @@ int32_t SOCKETS_Send (Socket_t xSocket, const void * pvBuffer, size_t xDataLengt { pxContext->xSendFlags = (BaseType_t) ulFlags; +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT if (pdTRUE == pxContext->xRequireTLS) { /* Send through TLS pipe, if negotiated. */ lStatus = TLS_Send(pxContext->pvTLSContext, pvBuffer, xDataLength); } else +#endif { /* Send unencrypted. */ lStatus = prvNetworkSend(pxContext, pvBuffer, xDataLength); @@ -376,7 +382,7 @@ int32_t SOCKETS_Send (Socket_t xSocket, const void * pvBuffer, size_t xDataLengt * * @return * * If the operation was successful, 0 is returned. - * * If an error occured, a negative value is returned. + * * If an error occured, a negative value is returned. * */ int32_t SOCKETS_Shutdown (Socket_t xSocket, uint32_t ulHow) @@ -426,7 +432,7 @@ int32_t SOCKETS_Shutdown (Socket_t xSocket, uint32_t ulHow) * * @return * * On success, 0 is returned. - * * If an error occurred, a negative value is returned. + * * If an error occurred, a negative value is returned. */ int32_t SOCKETS_Close (Socket_t xSocket) { @@ -436,6 +442,7 @@ int32_t SOCKETS_Close (Socket_t xSocket) if (((int) NULL != (int) pxContext) && ((int) SOCKETS_INVALID_SOCKET != (int) pxContext) && ((int) pxContext->xSocket < WIFI_ONCHIP_SILEX_CFG_NUM_CREATEABLE_SOCKETS)) { +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT if (NULL != pxContext->pcDestination) { vPortFree(pxContext->pcDestination); @@ -450,6 +457,7 @@ int32_t SOCKETS_Close (Socket_t xSocket) { TLS_Cleanup(pxContext->pvTLSContext); } +#endif ret = (int32_t) rm_wifi_onchip_silex_socket_disconnect(((uint32_t) pxContext->xSocket)); if (ret != 0) @@ -528,7 +536,7 @@ int32_t SOCKETS_Close (Socket_t xSocket) * * @return * * On success, 0 is returned. - * * If an error occured, a negative value is returned. + * * If an error occured, a negative value is returned. */ int32_t SOCKETS_SetSockOpt (Socket_t xSocket, int32_t lLevel, @@ -557,6 +565,8 @@ int32_t SOCKETS_SetSockOpt (Socket_t xSocket, { case SOCKETS_SO_SERVER_NAME_INDICATION: { +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT + /* Do not set the SNI options if the socket is possibly already connected. */ if (WIFI_ONCHIP_SILEX_SOCKET_STATUS_CONNECTED == status) { @@ -578,11 +588,16 @@ int32_t SOCKETS_SetSockOpt (Socket_t xSocket, } } +#else + lStatus = SOCKETS_EINVAL; +#endif break; } case SOCKETS_SO_TRUSTED_SERVER_CERTIFICATE: { +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT + /* Do not set the trusted server certificate if the socket is possibly already connected. */ if (WIFI_ONCHIP_SILEX_SOCKET_STATUS_CONNECTED == status) { @@ -604,11 +619,16 @@ int32_t SOCKETS_SetSockOpt (Socket_t xSocket, } } +#else + lStatus = SOCKETS_EINVAL; +#endif break; } case SOCKETS_SO_REQUIRE_TLS: { +#if WIFI_ONCHIP_SILEX_CFG_TLS_SUPPORT + /* Do not set the TLS option if the socket is possibly already connected. */ if (WIFI_ONCHIP_SILEX_SOCKET_STATUS_CONNECTED == status) { @@ -619,6 +639,10 @@ int32_t SOCKETS_SetSockOpt (Socket_t xSocket, pxContext->xRequireTLS = pdTRUE; } +#else + lStatus = SOCKETS_EINVAL; +#endif + break; } @@ -724,159 +748,6 @@ BaseType_t SOCKETS_Init (void) return pdPASS; } -static CK_RV prvSocketsGetCryptoSession (CK_SESSION_HANDLE * pxSession, CK_FUNCTION_LIST_PTR_PTR ppxFunctionList) -{ - CK_RV xResult = 0; - CK_C_GetFunctionList pxCkGetFunctionList = NULL; - static CK_SESSION_HANDLE xPkcs11Session = 0; - static CK_FUNCTION_LIST_PTR pxPkcs11FunctionList = NULL; - CK_ULONG ulCount = 1; - CK_SLOT_ID xSlotId = 0; - - portENTER_CRITICAL(); - - if (0 == xPkcs11Session) - { - /* One-time initialization. */ - - /* Ensure that the PKCS#11 module is initialized. */ - if (0 == xResult) - { - pxCkGetFunctionList = C_GetFunctionList; - xResult = pxCkGetFunctionList(&pxPkcs11FunctionList); - } - - if (0 == xResult) - { - xResult = pxPkcs11FunctionList->C_Initialize(NULL); - } - - /* Get the default slot ID. */ - if (0 == xResult) - { - xResult = pxPkcs11FunctionList->C_GetSlotList(CK_TRUE, &xSlotId, &ulCount); - } - - /* Start a session with the PKCS#11 module. */ - if (0 == xResult) - { - xResult = pxPkcs11FunctionList->C_OpenSession(xSlotId, CKF_SERIAL_SESSION, NULL, NULL, &xPkcs11Session); - } - } - - portEXIT_CRITICAL(); - - /* Output the shared function pointers and session handle. */ - *ppxFunctionList = pxPkcs11FunctionList; - *pxSession = xPkcs11Session; - - return xResult; -} - -/** - * Generate a TCP Initial Sequence Number that is reasonably difficult - * to predict, per https://tools.ietf.org/html/rfc6528. - */ -uint32_t ulApplicationGetNextSequenceNumber (uint32_t ulSourceAddress, - uint16_t usSourcePort, - uint32_t ulDestinationAddress, - uint16_t usDestinationPort) -{ - CK_RV xResult = 0; - CK_SESSION_HANDLE xPkcs11Session = 0; - CK_FUNCTION_LIST_PTR pxPkcs11FunctionList = NULL; - CK_MECHANISM xMechSha256 = - {0}; - uint8_t ucSha256Result[cryptoSHA256_DIGEST_BYTES]; - CK_ULONG ulLength = sizeof(ucSha256Result); - uint32_t ulNextSequenceNumber = 0; - static uint64_t ullKey = 0; - - /* Acquire a crypto session handle. */ - xResult = prvSocketsGetCryptoSession(&xPkcs11Session, &pxPkcs11FunctionList); - - if (0 == xResult) - { - portENTER_CRITICAL(); - if (0 == ullKey) - { - /* One-time initialization, per boot, of the random seed. */ - xResult = pxPkcs11FunctionList->C_GenerateRandom(xPkcs11Session, (CK_BYTE_PTR) &ullKey, sizeof(ullKey)); - } - - portEXIT_CRITICAL(); - } - - /* Lock the shared crypto session. */ - portENTER_CRITICAL(); - - /* Start a hash. */ - if (0 == xResult) - { - xMechSha256.mechanism = CKM_SHA256; - xResult = pxPkcs11FunctionList->C_DigestInit(xPkcs11Session, &xMechSha256); - } - - /* Hash the seed. */ - if (0 == xResult) - { - xResult = pxPkcs11FunctionList->C_DigestUpdate(xPkcs11Session, (CK_BYTE_PTR) &ullKey, sizeof(ullKey)); - } - - /* Hash the source address. */ - if (0 == xResult) - { - xResult = - pxPkcs11FunctionList->C_DigestUpdate(xPkcs11Session, (CK_BYTE_PTR) &ulSourceAddress, - sizeof(ulSourceAddress)); - } - - /* Hash the source port. */ - if (0 == xResult) - { - xResult = - pxPkcs11FunctionList->C_DigestUpdate(xPkcs11Session, (CK_BYTE_PTR) &usSourcePort, sizeof(usSourcePort)); - } - - /* Hash the destination address. */ - if (0 == xResult) - { - xResult = - pxPkcs11FunctionList->C_DigestUpdate(xPkcs11Session, (CK_BYTE_PTR) &ulDestinationAddress, - sizeof(ulDestinationAddress)); - } - - /* Hash the destination port. */ - if (0 == xResult) - { - xResult = - pxPkcs11FunctionList->C_DigestUpdate(xPkcs11Session, (CK_BYTE_PTR) &usDestinationPort, - sizeof(usDestinationPort)); - } - - /* Get the hash. */ - if (0 == xResult) - { - xResult = pxPkcs11FunctionList->C_DigestFinal(xPkcs11Session, ucSha256Result, &ulLength); - } - - portEXIT_CRITICAL(); - - /* Use the first four bytes of the hash result as the starting point for - * all initial sequence numbers for connections based on the input 4-tuple. */ - if (0 == xResult) - { - memcpy(&ulNextSequenceNumber, ucSha256Result, sizeof(ulNextSequenceNumber)); - - /* Add the tick count of four-tick intervals. In theory, per the RFC - * (see above), this approach still allows server equipment to optimize - * handling of connections from the same device that haven't fully timed out. */ - ulNextSequenceNumber += xTaskGetTickCount() / 4; - } - - return ulNextSequenceNumber; -} - /*******************************************************************************************************************//** * @} (end addtogroup WIFI_ONCHIP_SILEX) **********************************************************************************************************************/