From 228f86f2bfe7ff8b2f27beaa0f79dda9fb745224 Mon Sep 17 00:00:00 2001 From: ra_fsp_systems Date: Fri, 15 Nov 2019 12:30:38 -0800 Subject: [PATCH] Examples for FSP v0.8.0 --- .../downloadable/cac/cac_ek_ra2a1_ep.zip | Bin 0 -> 65735 bytes .../downloadable/crc/crc_ek_ra2a1_ep.zip | Bin 0 -> 68050 bytes .../ek_ra2a1/downloadable/download_all.zip | Bin 856909 -> 1298003 bytes .../downloadable/elc/elc_ek_ra2a1_ep.zip | Bin 0 -> 60147 bytes .../freertos/freertos_ek_ra2a1_ep.zip | Bin 0 -> 86089 bytes .../downloadable/kint/kint_ek_ra2a1_ep.zip | Bin 0 -> 59752 bytes .../downloadable/lvd/lvd_ek_ra2a1_ep.zip | Bin 0 -> 60438 bytes .../downloadable/rtc/rtc_ek_ra2a1_ep.zip | Bin 0 -> 69436 bytes .../source/agt/agt_ek_ra2a1_ep/readme.txt | Bin 4480 -> 4504 bytes .../cac/cac_ek_ra2a1_ep/e2studio/.cproject | 293 +++ .../cac/cac_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA2A1AB3CFM.pincfg | 22 + .../cac_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg | 222 +++ .../e2studio/cac_ek_ra2a1_ep Debug.jlink | 39 + .../e2studio/cac_ek_ra2a1_ep Debug.launch | 82 + .../e2studio/cac_ek_ra2a1_ep.hex | 920 +++++++++ .../e2studio/configuration.xml | 213 +++ .../cac/cac_ek_ra2a1_ep/e2studio/ra_cfg.txt | 199 ++ .../cac_ek_ra2a1_ep/e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../cac/cac_ek_ra2a1_ep/e2studio/src/cac_ep.h | 66 + .../e2studio/src/common_utils.h | 71 + .../cac_ek_ra2a1_ep/e2studio/src/hal_entry.c | 419 ++++ .../source/cac/cac_ek_ra2a1_ep/readme.txt | Bin 0 -> 6242 bytes .../crc/crc_ek_ra2a1_ep/e2studio/.cproject | 286 +++ .../crc/crc_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA2A1AB3CFM.pincfg | 22 + .../crc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg | 146 ++ .../e2studio/configuration.xml | 227 +++ .../e2studio/crc_ek_ra2a1_ep Debug.jlink | 39 + .../e2studio/crc_ek_ra2a1_ep Debug.launch | 82 + .../e2studio/crc_ek_ra2a1_ep.hex | 828 ++++++++ .../crc/crc_ek_ra2a1_ep/e2studio/ra_cfg.txt | 213 +++ .../crc_ek_ra2a1_ep/e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../crc/crc_ek_ra2a1_ep/e2studio/src/crc_ep.h | 84 + .../crc_ek_ra2a1_ep/e2studio/src/hal_entry.c | 453 +++++ .../source/crc/crc_ek_ra2a1_ep/readme.txt | Bin 0 -> 7682 bytes .../elc/elc_ek_ra2a1_ep/e2studio/.cproject | 286 +++ .../elc/elc_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA2A1AB3CFM.pincfg | 22 + .../elc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg | 221 +++ .../e2studio/configuration.xml | 234 +++ .../e2studio/elc_ek_ra2a1_ep Debug.jlink | 39 + .../e2studio/elc_ek_ra2a1_ep Debug.launch | 82 + .../e2studio/elc_ek_ra2a1_ep.hex | 533 ++++++ .../elc/elc_ek_ra2a1_ep/e2studio/ra_cfg.txt | 224 +++ .../elc_ek_ra2a1_ep/e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../elc/elc_ek_ra2a1_ep/e2studio/src/elc_ep.h | 53 + .../elc_ek_ra2a1_ep/e2studio/src/hal_entry.c | 187 ++ .../source/elc/elc_ek_ra2a1_ep/readme.txt | Bin 0 -> 4904 bytes .../freertos_ek_ra2a1_ep/e2studio/.cproject | 303 +++ .../freertos_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA2A1AB3CFM.pincfg | 117 ++ .../e2studio/RA2A1-EK.pincfg | 214 +++ .../e2studio/configuration.xml | 329 ++++ .../e2studio/freertos_ek_ra2a1_ep.elf.jlink | 39 + .../e2studio/freertos_ek_ra2a1_ep.elf.launch | 54 + .../e2studio/freertos_ek_ra2a1_ep.hex | 1630 ++++++++++++++++ .../freertos_ek_ra2a1_ep/e2studio/ra_cfg.txt | 316 +++ .../e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/freertos_ep.h | 45 + .../e2studio/src/gpt_timer_initialize.c | 71 + .../e2studio/src/gpt_timer_initialize.h | 30 + .../e2studio/src/hal_entry.c | 28 + .../e2studio/src/receiver_task_entry.c | 55 + .../e2studio/src/semaphore_task_entry.c | 138 ++ .../e2studio/src/sender_task_entry.c | 190 ++ .../freertos/freertos_ek_ra2a1_ep/readme.txt | Bin 0 -> 4436 bytes .../source/gpt/gpt_ek_ra2a1_ep/readme.txt | Bin 5250 -> 5298 bytes .../iic_master_ek_ra2a1_ep/readme.txt | Bin 6636 -> 6664 bytes .../iic_slave_ek_ra2a1_ep/readme.txt | Bin 9146 -> 9166 bytes .../kint/kint_ek_ra2a1_ep/e2studio/.cproject | 286 +++ .../kint/kint_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA2A1AB3CFM.pincfg | 22 + .../kint_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg | 151 ++ .../e2studio/configuration.xml | 183 ++ .../e2studio/kint_ek_ra2a1_ep Debug.jlink | 39 + .../e2studio/kint_ek_ra2a1_ep Debug.launch | 82 + .../e2studio/kint_ek_ra2a1_ep.hex | 473 +++++ .../kint/kint_ek_ra2a1_ep/e2studio/ra_cfg.txt | 179 ++ .../kint_ek_ra2a1_ep/e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../kint_ek_ra2a1_ep/e2studio/src/hal_entry.c | 244 +++ .../kint_ek_ra2a1_ep/e2studio/src/kint_ep.h | 123 ++ .../source/kint/kint_ek_ra2a1_ep/readme.txt | Bin 0 -> 5920 bytes .../lvd/lvd_ek_ra2a1_ep/e2studio/.cproject | 286 +++ .../lvd/lvd_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA2A1AB3CFM.pincfg | 22 + .../lvd_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg | 214 +++ .../e2studio/configuration.xml | 180 ++ .../e2studio/lvd_ek_ra2a1_ep Debug.jlink | 39 + .../e2studio/lvd_ek_ra2a1_ep Debug.launch | 109 ++ .../e2studio/lvd_ek_ra2a1_ep.hex | 557 ++++++ .../lvd/lvd_ek_ra2a1_ep/e2studio/ra_cfg.txt | 176 ++ .../lvd_ek_ra2a1_ep/e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../lvd_ek_ra2a1_ep/e2studio/src/hal_entry.c | 210 ++ .../source/lvd/lvd_ek_ra2a1_ep/readme.txt | Bin 0 -> 10846 bytes .../rtc/rtc_ek_ra2a1_ep/e2studio/.cproject | 287 +++ .../rtc/rtc_ek_ra2a1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA2A1AB3CFM.pincfg | 22 + .../rtc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg | 214 +++ .../e2studio/configuration.xml | 182 ++ .../rtc/rtc_ek_ra2a1_ep/e2studio/ra_cfg.txt | 178 ++ .../e2studio/rtc_ek_ra2a1_ep Debug.jlink | 39 + .../e2studio/rtc_ek_ra2a1_ep Debug.launch | 82 + .../e2studio/rtc_ek_ra2a1_ep.hex | 879 +++++++++ .../rtc_ek_ra2a1_ep/e2studio/script/ra2a1.ld | 267 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../rtc_ek_ra2a1_ep/e2studio/src/hal_entry.c | 290 +++ .../rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.c | 307 +++ .../rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.h | 87 + .../source/rtc/rtc_ek_ra2a1_ep/readme.txt | Bin 0 -> 5282 bytes .../e2studio/sci_i2c_ek_ra2a1_ep.hex | 40 +- .../e2studio/src/sci_i2c_ep.c | 2 +- .../e2studio/src/sci_i2c_ep.h | 10 +- .../sci_i2c/sci_i2c_ek_ra2a1_ep/readme.txt | Bin 8838 -> 9672 bytes .../sci_uart/sci_uart_ek_ra2a1_ep/readme.txt | Bin 5802 -> 6086 bytes .../source/spi/spi_ek_ra2a1_ep/readme.txt | Bin 6002 -> 6256 bytes .../source/wdt/wdt_ek_ra2a1_ep/readme.txt | Bin 4122 -> 4148 bytes .../downloadable/cac/cac_ek_ra4m1_ep.zip | Bin 0 -> 64347 bytes .../downloadable/crc/crc_ek_ra4m1_ep.zip | Bin 0 -> 66901 bytes .../ek_ra4m1/downloadable/download_all.zip | Bin 920360 -> 1435814 bytes .../downloadable/elc/elc_ek_ra4m1_ep.zip | Bin 0 -> 60923 bytes .../freertos/freertos_ek_ra4m1_ep.zip | Bin 0 -> 86730 bytes .../downloadable/kint/kint_ek_ra4m1_ep.zip | Bin 0 -> 60332 bytes .../downloadable/lvd/lvd_ek_ra4m1_ep.zip | Bin 0 -> 61156 bytes .../downloadable/rtc/rtc_ek_ra4m1_ep.zip | Bin 0 -> 69802 bytes .../downloadable/ssi/ssi_ek_ra4m1_ep.zip | Bin 0 -> 77628 bytes .../source/agt/agt_ek_ra4m1_ep/readme.txt | Bin 4480 -> 4504 bytes .../cac/cac_ek_ra4m1_ep/e2studio/.cproject | 296 +++ .../cac/cac_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../cac_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 108 ++ .../e2studio/cac_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/cac_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/cac_ek_ra4m1_ep.hex | 648 +++++++ .../e2studio/configuration.xml | 218 +++ .../cac/cac_ek_ra4m1_ep/e2studio/ra_cfg.txt | 236 +++ .../cac_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../cac/cac_ek_ra4m1_ep/e2studio/src/cac_ep.h | 66 + .../e2studio/src/common_utils.h | 71 + .../cac_ek_ra4m1_ep/e2studio/src/hal_entry.c | 419 ++++ .../source/cac/cac_ek_ra4m1_ep/readme.txt | Bin 0 -> 6242 bytes .../crc/crc_ek_ra4m1_ep/e2studio/.cproject | 290 +++ .../crc/crc_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../crc_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 115 ++ .../e2studio/configuration.xml | 232 +++ .../e2studio/crc_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/crc_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/crc_ek_ra4m1_ep.hex | 804 ++++++++ .../crc/crc_ek_ra4m1_ep/e2studio/ra_cfg.txt | 250 +++ .../crc_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../crc/crc_ek_ra4m1_ep/e2studio/src/crc_ep.h | 84 + .../crc_ek_ra4m1_ep/e2studio/src/hal_entry.c | 453 +++++ .../source/crc/crc_ek_ra4m1_ep/readme.txt | Bin 0 -> 7682 bytes .../source/dmac/dmac_ek_ra4m1_ep/readme.txt | Bin 5826 -> 5864 bytes .../elc/elc_ek_ra4m1_ep/e2studio/.cproject | 290 +++ .../elc/elc_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../elc_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 169 ++ .../e2studio/configuration.xml | 239 +++ .../e2studio/elc_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/elc_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/elc_ek_ra4m1_ep.hex | 528 +++++ .../elc/elc_ek_ra4m1_ep/e2studio/ra_cfg.txt | 261 +++ .../elc_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../elc/elc_ek_ra4m1_ep/e2studio/src/elc_ep.h | 53 + .../elc_ek_ra4m1_ep/e2studio/src/hal_entry.c | 187 ++ .../source/elc/elc_ek_ra4m1_ep/readme.txt | Bin 0 -> 4904 bytes .../freertos_ek_ra4m1_ep/e2studio/.cproject | 302 +++ .../freertos_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../e2studio/RA4M1-EK.pincfg | 163 ++ .../e2studio/configuration.xml | 334 ++++ .../e2studio/freertos_ek_ra4m1_ep Debug.jlink | 39 + .../freertos_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/freertos_ek_ra4m1_ep.hex | 1605 ++++++++++++++++ .../freertos_ek_ra4m1_ep/e2studio/ra_cfg.txt | 353 ++++ .../e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/freertos_ep.h | 45 + .../e2studio/src/gpt_timer_initialize.c | 71 + .../e2studio/src/gpt_timer_initialize.h | 30 + .../e2studio/src/hal_entry.c | 28 + .../e2studio/src/receiver_task_entry.c | 55 + .../e2studio/src/semaphore_task_entry.c | 138 ++ .../e2studio/src/sender_task_entry.c | 190 ++ .../freertos/freertos_ek_ra4m1_ep/readme.txt | Bin 0 -> 4436 bytes .../source/gpt/gpt_ek_ra4m1_ep/readme.txt | Bin 5250 -> 5298 bytes .../iic_master_ek_ra4m1_ep/readme.txt | Bin 6636 -> 6664 bytes .../iic_slave_ek_ra4m1_ep/readme.txt | Bin 9146 -> 9166 bytes .../kint/kint_ek_ra4m1_ep/e2studio/.cproject | 290 +++ .../kint/kint_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../kint_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 95 + .../e2studio/configuration.xml | 188 ++ .../e2studio/kint_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/kint_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/kint_ek_ra4m1_ep.hex | 470 +++++ .../kint/kint_ek_ra4m1_ep/e2studio/ra_cfg.txt | 216 +++ .../kint_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../kint_ek_ra4m1_ep/e2studio/src/hal_entry.c | 244 +++ .../kint_ek_ra4m1_ep/e2studio/src/kint_ep.h | 123 ++ .../source/kint/kint_ek_ra4m1_ep/readme.txt | Bin 0 -> 5920 bytes .../lvd/lvd_ek_ra4m1_ep/e2studio/.cproject | 290 +++ .../lvd/lvd_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../lvd_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 163 ++ .../e2studio/configuration.xml | 185 ++ .../e2studio/lvd_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/lvd_ek_ra4m1_ep Debug.launch | 109 ++ .../e2studio/lvd_ek_ra4m1_ep.hex | 543 ++++++ .../lvd/lvd_ek_ra4m1_ep/e2studio/ra_cfg.txt | 213 +++ .../lvd_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../lvd_ek_ra4m1_ep/e2studio/src/hal_entry.c | 210 ++ .../source/lvd/lvd_ek_ra4m1_ep/readme.txt | Bin 0 -> 10846 bytes .../rtc/rtc_ek_ra4m1_ep/e2studio/.cproject | 290 +++ .../rtc/rtc_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../rtc_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 163 ++ .../e2studio/configuration.xml | 187 ++ .../rtc/rtc_ek_ra4m1_ep/e2studio/ra_cfg.txt | 215 +++ .../e2studio/rtc_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/rtc_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/rtc_ek_ra4m1_ep.hex | 849 +++++++++ .../rtc_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../rtc_ek_ra4m1_ep/e2studio/src/hal_entry.c | 290 +++ .../rtc/rtc_ek_ra4m1_ep/e2studio/src/rtc_ep.c | 307 +++ .../rtc/rtc_ek_ra4m1_ep/e2studio/src/rtc_ep.h | 87 + .../source/rtc/rtc_ek_ra4m1_ep/readme.txt | Bin 0 -> 5282 bytes .../e2studio/sci_i2c_ek_ra4m1_ep.hex | 38 +- .../e2studio/src/sci_i2c_ep.c | 2 +- .../e2studio/src/sci_i2c_ep.h | 10 +- .../sci_i2c/sci_i2c_ek_ra4m1_ep/readme.txt | Bin 8838 -> 9672 bytes .../sci_uart/sci_uart_ek_ra4m1_ep/readme.txt | Bin 5802 -> 6086 bytes .../source/spi/spi_ek_ra4m1_ep/readme.txt | Bin 6002 -> 6256 bytes .../ssi/ssi_ek_ra4m1_ep/e2studio/.cproject | 289 +++ .../ssi/ssi_ek_ra4m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA4M1AB3CFP.pincfg | 36 + .../ssi_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg | 191 ++ .../e2studio/configuration.xml | 258 +++ .../ssi/ssi_ek_ra4m1_ep/e2studio/ra_cfg.txt | 274 +++ .../ssi_ek_ra4m1_ep/e2studio/script/ra4m1.ld | 276 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../ssi_ek_ra4m1_ep/e2studio/src/audio_data.h | 379 ++++ .../e2studio/src/common_utils.h | 71 + .../ssi_ek_ra4m1_ep/e2studio/src/hal_entry.c | 195 ++ .../e2studio/ssi_ek_ra4m1_ep Debug.jlink | 39 + .../e2studio/ssi_ek_ra4m1_ep Debug.launch | 82 + .../e2studio/ssi_ek_ra4m1_ep.hex | 902 +++++++++ .../source/ssi/ssi_ek_ra4m1_ep/readme.txt | Bin 0 -> 4526 bytes .../source/wdt/wdt_ek_ra4m1_ep/readme.txt | Bin 4122 -> 4148 bytes .../acmphs/acmphs_ek_ra6m1_ep.zip | Bin 0 -> 62329 bytes .../downloadable/cac/cac_ek_ra6m1_ep.zip | Bin 0 -> 64995 bytes .../downloadable/crc/crc_ek_ra6m1_ep.zip | Bin 0 -> 69453 bytes .../ek_ra6m1/downloadable/download_all.zip | Bin 864153 -> 1441468 bytes .../downloadable/elc/elc_ek_ra6m1_ep.zip | Bin 0 -> 61551 bytes .../freertos/freertos_ek_ra6m1_ep.zip | Bin 0 -> 84995 bytes .../downloadable/kint/kint_ek_ra6m1_ep.zip | Bin 0 -> 61133 bytes .../downloadable/lvd/lvd_ek_ra6m1_ep.zip | Bin 0 -> 59895 bytes .../downloadable/rtc/rtc_ek_ra6m1_ep.zip | Bin 0 -> 70392 bytes .../downloadable/ssi/ssi_ek_ra6m1_ep.zip | Bin 0 -> 78385 bytes .../acmphs_ek_ra6m1_ep/e2studio/.cproject | 296 +++ .../acmphs_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../e2studio/RA6M1-EK.pincfg | 226 +++ .../e2studio/acmphs_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/acmphs_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/acmphs_ek_ra6m1_ep.hex | 631 ++++++ .../e2studio/configuration.xml | 218 +++ .../acmphs_ek_ra6m1_ep/e2studio/ra_cfg.txt | 239 +++ .../acmphs_ek_ra6m1_ep/e2studio/readme.txt | Bin 0 -> 4562 bytes .../e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 330 ++++ .../acmphs/acmphs_ek_ra6m1_ep/readme.txt | Bin 0 -> 4804 bytes .../source/agt/agt_ek_ra6m1_ep/readme.txt | Bin 4480 -> 4504 bytes .../cac/cac_ek_ra6m1_ep/e2studio/.cproject | 289 +++ .../cac/cac_ek_ra6m1_ep/e2studio/.project | 32 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../cac_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 235 +++ .../e2studio/cac_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/cac_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/cac_ek_ra6m1_ep.hex | 649 +++++++ .../e2studio/configuration.xml | 222 +++ .../cac/cac_ek_ra6m1_ep/e2studio/ra_cfg.txt | 239 +++ .../cac_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../cac/cac_ek_ra6m1_ep/e2studio/src/cac_ep.h | 66 + .../e2studio/src/common_utils.h | 71 + .../cac_ek_ra6m1_ep/e2studio/src/hal_entry.c | 419 ++++ .../source/cac/cac_ek_ra6m1_ep/readme.txt | Bin 0 -> 6242 bytes .../crc/crc_ek_ra6m1_ep/e2studio/.cproject | 289 +++ .../crc/crc_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../crc_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 201 ++ .../e2studio/configuration.xml | 236 +++ .../e2studio/crc_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/crc_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/crc_ek_ra6m1_ep.hex | 803 ++++++++ .../crc/crc_ek_ra6m1_ep/e2studio/ra_cfg.txt | 253 +++ .../crc_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../crc/crc_ek_ra6m1_ep/e2studio/src/crc_ep.h | 84 + .../crc_ek_ra6m1_ep/e2studio/src/hal_entry.c | 453 +++++ .../source/crc/crc_ek_ra6m1_ep/readme.txt | Bin 0 -> 7682 bytes .../source/dmac/dmac_ek_ra6m1_ep/readme.txt | Bin 5826 -> 5864 bytes .../elc/elc_ek_ra6m1_ep/e2studio/.cproject | 291 +++ .../elc/elc_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../elc_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 232 +++ .../e2studio/configuration.xml | 243 +++ .../e2studio/elc_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/elc_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/elc_ek_ra6m1_ep.hex | 532 ++++++ .../elc/elc_ek_ra6m1_ep/e2studio/ra_cfg.txt | 264 +++ .../elc_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../elc/elc_ek_ra6m1_ep/e2studio/src/elc_ep.h | 53 + .../elc_ek_ra6m1_ep/e2studio/src/hal_entry.c | 187 ++ .../source/elc/elc_ek_ra6m1_ep/readme.txt | Bin 0 -> 4904 bytes .../freertos_ek_ra6m1_ep/e2studio/.cproject | 303 +++ .../freertos_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../e2studio/RA6M1-EK.pincfg | 226 +++ .../e2studio/configuration.xml | 338 ++++ .../e2studio/freertos_ek_ra6m1_ep.elf.jlink | 39 + .../e2studio/freertos_ek_ra6m1_ep.elf.launch | 61 + .../e2studio/freertos_ek_ra6m1_ep.hex | 1605 ++++++++++++++++ .../freertos_ek_ra6m1_ep/e2studio/ra_cfg.txt | 255 +++ .../e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/freertos_ep.h | 45 + .../e2studio/src/gpt_timer_initialize.c | 71 + .../e2studio/src/gpt_timer_initialize.h | 30 + .../e2studio/src/hal_entry.c | 28 + .../e2studio/src/receiver_task_entry.c | 55 + .../e2studio/src/semaphore_task_entry.c | 138 ++ .../e2studio/src/sender_task_entry.c | 190 ++ .../freertos/freertos_ek_ra6m1_ep/readme.txt | Bin 0 -> 4436 bytes .../source/gpt/gpt_ek_ra6m1_ep/readme.txt | Bin 5250 -> 5298 bytes .../iic_master_ek_ra6m1_ep/readme.txt | Bin 6636 -> 6664 bytes .../iic_slave_ek_ra6m1_ep/readme.txt | Bin 9146 -> 9166 bytes .../kint/kint_ek_ra6m1_ep/e2studio/.cproject | 290 +++ .../kint/kint_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../kint_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 171 ++ .../e2studio/configuration.xml | 192 ++ .../e2studio/kint_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/kint_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/kint_ek_ra6m1_ep.hex | 470 +++++ .../kint/kint_ek_ra6m1_ep/e2studio/ra_cfg.txt | 219 +++ .../kint_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../kint_ek_ra6m1_ep/e2studio/src/hal_entry.c | 244 +++ .../kint_ek_ra6m1_ep/e2studio/src/kint_ep.h | 123 ++ .../source/kint/kint_ek_ra6m1_ep/readme.txt | Bin 0 -> 5920 bytes .../lvd/lvd_ek_ra6m1_ep/e2studio/.cproject | 290 +++ .../lvd/lvd_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../lvd_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 226 +++ .../e2studio/configuration.xml | 189 ++ .../e2studio/lvd_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/lvd_ek_ra6m1_ep Debug.launch | 109 ++ .../e2studio/lvd_ek_ra6m1_ep.hex | 549 ++++++ .../lvd/lvd_ek_ra6m1_ep/e2studio/ra_cfg.txt | 216 +++ .../lvd_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../lvd_ek_ra6m1_ep/e2studio/src/hal_entry.c | 210 ++ .../source/lvd/lvd_ek_ra6m1_ep/readme.txt | Bin 0 -> 10846 bytes .../rtc/rtc_ek_ra6m1_ep/e2studio/.cproject | 290 +++ .../rtc/rtc_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../rtc_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 226 +++ .../e2studio/configuration.xml | 191 ++ .../rtc/rtc_ek_ra6m1_ep/e2studio/ra_cfg.txt | 218 +++ .../e2studio/rtc_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/rtc_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/rtc_ek_ra6m1_ep.hex | 847 ++++++++ .../rtc_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../rtc_ek_ra6m1_ep/e2studio/src/hal_entry.c | 290 +++ .../rtc/rtc_ek_ra6m1_ep/e2studio/src/rtc_ep.c | 307 +++ .../rtc/rtc_ek_ra6m1_ep/e2studio/src/rtc_ep.h | 87 + .../source/rtc/rtc_ek_ra6m1_ep/readme.txt | Bin 0 -> 5282 bytes .../e2studio/sci_i2c_ek_ra6m1_ep.hex | 40 +- .../e2studio/src/sci_i2c_ep.c | 2 +- .../e2studio/src/sci_i2c_ep.h | 10 +- .../sci_i2c/sci_i2c_ek_ra6m1_ep/readme.txt | Bin 8840 -> 9672 bytes .../sci_uart/sci_uart_ek_ra6m1_ep/readme.txt | Bin 5802 -> 6086 bytes .../source/spi/spi_ek_ra6m1_ep/readme.txt | Bin 6002 -> 6256 bytes .../ssi/ssi_ek_ra6m1_ep/e2studio/.cproject | 298 +++ .../ssi/ssi_ek_ra6m1_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M1AD3CFP.pincfg | 36 + .../ssi_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg | 255 +++ .../e2studio/configuration.xml | 262 +++ .../ssi/ssi_ek_ra6m1_ep/e2studio/ra_cfg.txt | 277 +++ .../ssi_ek_ra6m1_ep/e2studio/script/ra6m1.ld | 308 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../ssi_ek_ra6m1_ep/e2studio/src/audio_data.h | 379 ++++ .../e2studio/src/common_utils.h | 71 + .../ssi_ek_ra6m1_ep/e2studio/src/hal_entry.c | 196 ++ .../e2studio/ssi_ek_ra6m1_ep Debug.jlink | 39 + .../e2studio/ssi_ek_ra6m1_ep Debug.launch | 82 + .../e2studio/ssi_ek_ra6m1_ep.hex | 905 +++++++++ .../source/ssi/ssi_ek_ra6m1_ep/readme.txt | Bin 0 -> 4526 bytes .../source/wdt/wdt_ek_ra6m1_ep/readme.txt | Bin 4122 -> 4148 bytes .../acmphs/acmphs_ek_ra6m2_ep.zip | Bin 0 -> 61744 bytes .../downloadable/cac/cac_ek_ra6m2_ep.zip | Bin 0 -> 64464 bytes .../downloadable/crc/crc_ek_ra6m2_ep.zip | Bin 0 -> 68734 bytes .../ek_ra6m2/downloadable/download_all.zip | Bin 865576 -> 1445380 bytes .../downloadable/elc/elc_ek_ra6m2_ep.zip | Bin 0 -> 62319 bytes .../freertos/freertos_ek_ra6m2_ep.zip | Bin 0 -> 84795 bytes .../downloadable/kint/kint_ek_ra6m2_ep.zip | Bin 0 -> 61938 bytes .../downloadable/lvd/lvd_ek_ra6m2_ep.zip | Bin 0 -> 60953 bytes .../downloadable/rtc/rtc_ek_ra6m2_ep.zip | Bin 0 -> 71249 bytes .../downloadable/ssi/ssi_ek_ra6m2_ep.zip | Bin 0 -> 79112 bytes .../acmphs_ek_ra6m2_ep/e2studio/.cproject | 297 +++ .../acmphs_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../e2studio/RA6M2-EK.pincfg | 203 ++ .../e2studio/acmphs_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/acmphs_ek_ra6m2_ep Debug.launch | 82 + .../e2studio/acmphs_ek_ra6m2_ep.hex | 631 ++++++ .../e2studio/configuration.xml | 220 +++ .../acmphs_ek_ra6m2_ep/e2studio/ra_cfg.txt | 284 +++ .../e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 330 ++++ .../acmphs/acmphs_ek_ra6m2_ep/readme.txt | Bin 0 -> 4804 bytes .../source/agt/agt_ek_ra6m2_ep/readme.txt | Bin 4480 -> 4504 bytes .../cac/cac_ek_ra6m2_ep/e2studio/.cproject | 298 +++ .../cac/cac_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../cac_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 197 ++ .../e2studio/cac_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/cac_ek_ra6m2_ep Debug.launch | 82 + .../e2studio/cac_ek_ra6m2_ep.hex | 648 +++++++ .../e2studio/configuration.xml | 224 +++ .../cac/cac_ek_ra6m2_ep/e2studio/ra_cfg.txt | 284 +++ .../cac_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../cac/cac_ek_ra6m2_ep/e2studio/src/cac_ep.h | 66 + .../e2studio/src/common_utils.h | 71 + .../cac_ek_ra6m2_ep/e2studio/src/hal_entry.c | 419 ++++ .../source/cac/cac_ek_ra6m2_ep/readme.txt | Bin 0 -> 6242 bytes .../crc/crc_ek_ra6m2_ep/e2studio/.cproject | 298 +++ .../crc/crc_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../crc_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 197 ++ .../e2studio/configuration.xml | 238 +++ .../e2studio/crc_ek_ra6m2_ep.elf.jlink | 39 + .../e2studio/crc_ek_ra6m2_ep.elf.launch | 61 + .../e2studio/crc_ek_ra6m2_ep.hex | 808 ++++++++ .../crc/crc_ek_ra6m2_ep/e2studio/ra_cfg.txt | 298 +++ .../crc_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../crc/crc_ek_ra6m2_ep/e2studio/src/crc_ep.h | 84 + .../crc_ek_ra6m2_ep/e2studio/src/hal_entry.c | 453 +++++ .../source/crc/crc_ek_ra6m2_ep/readme.txt | Bin 0 -> 7682 bytes .../source/dmac/dmac_ek_ra6m2_ep/readme.txt | Bin 5826 -> 5864 bytes .../elc/elc_ek_ra6m2_ep/e2studio/.cproject | 290 +++ .../elc/elc_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../elc_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 195 ++ .../e2studio/configuration.xml | 245 +++ .../e2studio/elc_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/elc_ek_ra6m2_ep Debug.launch | 82 + .../e2studio/elc_ek_ra6m2_ep.hex | 531 ++++++ .../elc/elc_ek_ra6m2_ep/e2studio/ra_cfg.txt | 309 +++ .../elc_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../elc/elc_ek_ra6m2_ep/e2studio/src/elc_ep.h | 53 + .../elc_ek_ra6m2_ep/e2studio/src/hal_entry.c | 187 ++ .../source/elc/elc_ek_ra6m2_ep/readme.txt | Bin 0 -> 4904 bytes .../freertos_ek_ra6m2_ep/e2studio/.cproject | 303 +++ .../freertos_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../e2studio/RA6M2-EK.pincfg | 189 ++ .../e2studio/configuration.xml | 340 ++++ .../e2studio/freertos_ek_ra6m2_ep.elf.jlink | 39 + .../e2studio/freertos_ek_ra6m2_ep.elf.launch | 54 + .../e2studio/freertos_ek_ra6m2_ep.hex | 1604 ++++++++++++++++ .../freertos_ek_ra6m2_ep/e2studio/ra_cfg.txt | 256 +++ .../e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/freertos_ep.h | 45 + .../e2studio/src/gpt_timer_initialize.c | 71 + .../e2studio/src/gpt_timer_initialize.h | 30 + .../e2studio/src/hal_entry.c | 28 + .../e2studio/src/receiver_task_entry.c | 55 + .../e2studio/src/semaphore_task_entry.c | 138 ++ .../e2studio/src/sender_task_entry.c | 190 ++ .../freertos/freertos_ek_ra6m2_ep/readme.txt | Bin 0 -> 4436 bytes .../source/gpt/gpt_ek_ra6m2_ep/readme.txt | Bin 5250 -> 5298 bytes .../iic_master_ek_ra6m2_ep/readme.txt | Bin 6636 -> 6664 bytes .../iic_slave_ek_ra6m2_ep/readme.txt | Bin 9146 -> 9166 bytes .../kint/kint_ek_ra6m2_ep/e2studio/.cproject | 289 +++ .../kint/kint_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../kint_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 135 ++ .../e2studio/configuration.xml | 194 ++ .../e2studio/kint_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/kint_ek_ra6m2_ep Debug.launch | 82 + .../e2studio/kint_ek_ra6m2_ep.hex | 469 +++++ .../kint/kint_ek_ra6m2_ep/e2studio/ra_cfg.txt | 264 +++ .../kint_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../kint_ek_ra6m2_ep/e2studio/src/hal_entry.c | 244 +++ .../kint_ek_ra6m2_ep/e2studio/src/kint_ep.h | 123 ++ .../source/kint/kint_ek_ra6m2_ep/readme.txt | Bin 0 -> 5920 bytes .../lvd/lvd_ek_ra6m2_ep/e2studio/.cproject | 290 +++ .../lvd/lvd_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../lvd_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 189 ++ .../e2studio/configuration.xml | 191 ++ .../e2studio/lvd_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/lvd_ek_ra6m2_ep Debug.launch | 109 ++ .../e2studio/lvd_ek_ra6m2_ep.hex | 549 ++++++ .../lvd/lvd_ek_ra6m2_ep/e2studio/ra_cfg.txt | 261 +++ .../lvd_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../lvd_ek_ra6m2_ep/e2studio/src/hal_entry.c | 210 ++ .../source/lvd/lvd_ek_ra6m2_ep/readme.txt | Bin 0 -> 10846 bytes .../rtc/rtc_ek_ra6m2_ep/e2studio/.cproject | 290 +++ .../rtc/rtc_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../rtc_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 189 ++ .../e2studio/configuration.xml | 193 ++ .../rtc/rtc_ek_ra6m2_ep/e2studio/ra_cfg.txt | 263 +++ .../e2studio/rtc_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/rtc_ek_ra6m2_ep Debug.launch | 82 + .../e2studio/rtc_ek_ra6m2_ep.hex | 847 ++++++++ .../rtc_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../rtc_ek_ra6m2_ep/e2studio/src/hal_entry.c | 290 +++ .../rtc/rtc_ek_ra6m2_ep/e2studio/src/rtc_ep.c | 307 +++ .../rtc/rtc_ek_ra6m2_ep/e2studio/src/rtc_ep.h | 87 + .../source/rtc/rtc_ek_ra6m2_ep/readme.txt | Bin 0 -> 5282 bytes .../e2studio/sci_i2c_ek_ra6m2_ep.hex | 38 +- .../e2studio/src/sci_i2c_ep.c | 2 +- .../e2studio/src/sci_i2c_ep.h | 10 +- .../sci_i2c/sci_i2c_ek_ra6m2_ep/readme.txt | Bin 8840 -> 9672 bytes .../sci_uart/sci_uart_ek_ra6m2_ep/readme.txt | Bin 5802 -> 6086 bytes .../source/spi/spi_ek_ra6m2_ep/readme.txt | Bin 6002 -> 6256 bytes .../ssi/ssi_ek_ra6m2_ep/e2studio/.cproject | 290 +++ .../ssi/ssi_ek_ra6m2_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M2AF3CFB.pincfg | 36 + .../ssi_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg | 218 +++ .../e2studio/configuration.xml | 264 +++ .../ssi/ssi_ek_ra6m2_ep/e2studio/ra_cfg.txt | 322 ++++ .../ssi_ek_ra6m2_ep/e2studio/script/ra6m2.ld | 318 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../ssi_ek_ra6m2_ep/e2studio/src/audio_data.h | 379 ++++ .../e2studio/src/common_utils.h | 71 + .../ssi_ek_ra6m2_ep/e2studio/src/hal_entry.c | 196 ++ .../e2studio/ssi_ek_ra6m2_ep Debug.jlink | 39 + .../e2studio/ssi_ek_ra6m2_ep Debug.launch | 82 + .../e2studio/ssi_ek_ra6m2_ep.hex | 904 +++++++++ .../source/ssi/ssi_ek_ra6m2_ep/readme.txt | Bin 0 -> 4526 bytes .../source/wdt/wdt_ek_ra6m2_ep/readme.txt | Bin 4122 -> 4148 bytes .../acmphs/acmphs_ek_ra6m3_ep.zip | Bin 0 -> 67460 bytes .../downloadable/cac/cac_ek_ra6m3_ep.zip | Bin 0 -> 71472 bytes .../downloadable/crc/crc_ek_ra6m3_ep.zip | Bin 0 -> 72681 bytes .../ek_ra6m3/downloadable/download_all.zip | Bin 933742 -> 1564619 bytes .../downloadable/elc/elc_ek_ra6m3_ep.zip | Bin 0 -> 68366 bytes .../freertos/freertos_ek_ra6m3_ep.zip | Bin 0 -> 94668 bytes .../downloadable/kint/kint_ek_ra6m3_ep.zip | Bin 0 -> 63159 bytes .../downloadable/lvd/lvd_ek_ra6m3_ep.zip | Bin 0 -> 66649 bytes .../downloadable/rtc/rtc_ek_ra6m3_ep.zip | Bin 0 -> 77112 bytes .../downloadable/ssi/ssi_ek_ra6m3_ep.zip | Bin 0 -> 84609 bytes .../acmphs_ek_ra6m3_ep/e2studio/.cproject | 290 +++ .../acmphs_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3-EK.pincfg | 860 +++++++++ .../e2studio/acmphs_ek_ra6m3_ep Debug.jlink | 39 + .../e2studio/acmphs_ek_ra6m3_ep Debug.launch | 82 + .../e2studio/acmphs_ek_ra6m3_ep.hex | 689 +++++++ .../e2studio/configuration.xml | 221 +++ .../acmphs_ek_ra6m3_ep/e2studio/ra_cfg.txt | 316 +++ .../e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 330 ++++ .../acmphs/acmphs_ek_ra6m3_ep/readme.txt | Bin 0 -> 4804 bytes .../source/agt/agt_ek_ra6m3_ep/readme.txt | Bin 4480 -> 4504 bytes .../cac/cac_ek_ra6m3_ep/e2studio/.cproject | 289 +++ .../cac/cac_ek_ra6m3_ep/e2studio/.project | 32 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../cac_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 818 ++++++++ .../e2studio/cac_ek_ra6m3_ep Debug.jlink | 39 + .../e2studio/cac_ek_ra6m3_ep Debug.launch | 82 + .../e2studio/cac_ek_ra6m3_ep.hex | 711 +++++++ .../e2studio/configuration.xml | 225 +++ .../cac/cac_ek_ra6m3_ep/e2studio/ra_cfg.txt | 316 +++ .../cac_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../cac/cac_ek_ra6m3_ep/e2studio/src/cac_ep.h | 66 + .../e2studio/src/common_utils.h | 71 + .../cac_ek_ra6m3_ep/e2studio/src/hal_entry.c | 419 ++++ .../source/cac/cac_ek_ra6m3_ep/readme.txt | Bin 0 -> 6242 bytes .../crc/crc_ek_ra6m3_ep/e2studio/.cproject | 290 +++ .../crc/crc_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../crc_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 622 ++++++ .../e2studio/configuration.xml | 239 +++ .../e2studio/crc_ek_ra6m3_ep.elf.jlink | 39 + .../e2studio/crc_ek_ra6m3_ep.elf.launch | 61 + .../e2studio/crc_ek_ra6m3_ep.hex | 851 +++++++++ .../crc/crc_ek_ra6m3_ep/e2studio/ra_cfg.txt | 330 ++++ .../crc_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../crc/crc_ek_ra6m3_ep/e2studio/src/crc_ep.h | 84 + .../crc_ek_ra6m3_ep/e2studio/src/hal_entry.c | 453 +++++ .../source/crc/crc_ek_ra6m3_ep/readme.txt | Bin 0 -> 7682 bytes .../source/dmac/dmac_ek_ra6m3_ep/readme.txt | Bin 5826 -> 5864 bytes .../elc/elc_ek_ra6m3_ep/e2studio/.cproject | 290 +++ .../elc/elc_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../elc_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 861 +++++++++ .../e2studio/configuration.xml | 246 +++ .../e2studio/elc_ek_ra6m3_ep Debug.jlink | 39 + .../e2studio/elc_ek_ra6m3_ep Debug.launch | 82 + .../e2studio/elc_ek_ra6m3_ep.hex | 597 ++++++ .../elc/elc_ek_ra6m3_ep/e2studio/ra_cfg.txt | 341 ++++ .../elc_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../elc/elc_ek_ra6m3_ep/e2studio/src/elc_ep.h | 53 + .../elc_ek_ra6m3_ep/e2studio/src/hal_entry.c | 187 ++ .../source/elc/elc_ek_ra6m3_ep/readme.txt | Bin 0 -> 4904 bytes .../freertos_ek_ra6m3_ep/e2studio/.cproject | 303 +++ .../freertos_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 161 ++ .../e2studio/RA6M3-EK.pincfg | 860 +++++++++ .../e2studio/configuration.xml | 341 ++++ .../e2studio/freertos_ek_ra6m3_ep.elf.jlink | 39 + .../e2studio/freertos_ek_ra6m3_ep.elf.launch | 54 + .../e2studio/freertos_ek_ra6m3_ep.hex | 1670 ++++++++++++++++ .../freertos_ek_ra6m3_ep/e2studio/ra_cfg.txt | 433 +++++ .../e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/freertos_ep.h | 45 + .../e2studio/src/gpt_timer_initialize.c | 71 + .../e2studio/src/gpt_timer_initialize.h | 30 + .../e2studio/src/hal_entry.c | 28 + .../e2studio/src/receiver_task_entry.c | 55 + .../e2studio/src/semaphore_task_entry.c | 138 ++ .../e2studio/src/sender_task_entry.c | 190 ++ .../freertos/freertos_ek_ra6m3_ep/readme.txt | Bin 0 -> 4436 bytes .../source/gpt/gpt_ek_ra6m3_ep/readme.txt | Bin 5250 -> 5298 bytes .../iic_master_ek_ra6m3_ep/readme.txt | Bin 6636 -> 6664 bytes .../iic_slave_ek_ra6m3_ep/readme.txt | Bin 9146 -> 9166 bytes .../kint/kint_ek_ra6m3_ep/e2studio/.cproject | 297 +++ .../kint/kint_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/e2studio_project.prefs | 3 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../kint_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 339 ++++ .../e2studio/configuration.xml | 195 ++ .../e2studio/kint_ek_ra6m3_ep.elf.jlink | 39 + .../e2studio/kint_ek_ra6m3_ep.elf.launch | 61 + .../e2studio/kint_ek_ra6m3_ep.hex | 498 +++++ .../kint/kint_ek_ra6m3_ep/e2studio/ra_cfg.txt | 296 +++ .../kint_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../kint_ek_ra6m3_ep/e2studio/src/hal_entry.c | 244 +++ .../kint_ek_ra6m3_ep/e2studio/src/kint_ep.h | 123 ++ .../source/kint/kint_ek_ra6m3_ep/readme.txt | Bin 0 -> 5920 bytes .../lvd/lvd_ek_ra6m3_ep/e2studio/.cproject | 290 +++ .../lvd/lvd_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../lvd_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 860 +++++++++ .../e2studio/configuration.xml | 192 ++ .../e2studio/lvd_ek_ra6m3_ep Debug.jlink | 39 + .../e2studio/lvd_ek_ra6m3_ep Debug.launch | 109 ++ .../e2studio/lvd_ek_ra6m3_ep.hex | 608 ++++++ .../lvd/lvd_ek_ra6m3_ep/e2studio/ra_cfg.txt | 293 +++ .../lvd_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../lvd_ek_ra6m3_ep/e2studio/src/hal_entry.c | 210 ++ .../source/lvd/lvd_ek_ra6m3_ep/readme.txt | Bin 0 -> 10846 bytes .../rtc/rtc_ek_ra6m3_ep/e2studio/.cproject | 290 +++ .../rtc/rtc_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../rtc_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 860 +++++++++ .../e2studio/configuration.xml | 194 ++ .../rtc/rtc_ek_ra6m3_ep/e2studio/ra_cfg.txt | 295 +++ .../e2studio/rtc_ek_ra6m3_ep Debug.jlink | 39 + .../e2studio/rtc_ek_ra6m3_ep Debug.launch | 82 + .../e2studio/rtc_ek_ra6m3_ep.hex | 906 +++++++++ .../rtc_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../rtc_ek_ra6m3_ep/e2studio/src/hal_entry.c | 290 +++ .../rtc/rtc_ek_ra6m3_ep/e2studio/src/rtc_ep.c | 307 +++ .../rtc/rtc_ek_ra6m3_ep/e2studio/src/rtc_ep.h | 87 + .../source/rtc/rtc_ek_ra6m3_ep/readme.txt | Bin 0 -> 5282 bytes .../e2studio/sci_i2c_ek_ra6m3_ep.hex | 38 +- .../e2studio/src/sci_i2c_ep.c | 2 +- .../e2studio/src/sci_i2c_ep.h | 10 +- .../sci_i2c/sci_i2c_ek_ra6m3_ep/readme.txt | Bin 8840 -> 9672 bytes .../sci_uart/sci_uart_ek_ra6m3_ep/readme.txt | Bin 5802 -> 6086 bytes .../source/spi/spi_ek_ra6m3_ep/readme.txt | Bin 6002 -> 6256 bytes .../ssi/ssi_ek_ra6m3_ep/e2studio/.cproject | 290 +++ .../ssi/ssi_ek_ra6m3_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../ssi_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg | 804 ++++++++ .../e2studio/configuration.xml | 265 +++ .../ssi/ssi_ek_ra6m3_ep/e2studio/ra_cfg.txt | 354 ++++ .../ssi_ek_ra6m3_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../ssi_ek_ra6m3_ep/e2studio/src/audio_data.h | 379 ++++ .../e2studio/src/common_utils.h | 71 + .../ssi_ek_ra6m3_ep/e2studio/src/hal_entry.c | 197 ++ .../e2studio/ssi_ek_ra6m3_ep Debug.jlink | 39 + .../e2studio/ssi_ek_ra6m3_ep Debug.launch | 82 + .../e2studio/ssi_ek_ra6m3_ep.hex | 963 ++++++++++ .../source/ssi/ssi_ek_ra6m3_ep/readme.txt | Bin 0 -> 4526 bytes .../source/wdt/wdt_ek_ra6m3_ep/readme.txt | Bin 4122 -> 4148 bytes .../acmphs/acmphs_ek_ra6m3g_ep.zip | Bin 0 -> 67135 bytes .../downloadable/cac/cac_ek_ra6m3g_ep.zip | Bin 0 -> 71565 bytes .../downloadable/crc/crc_ek_ra6m3g_ep.zip | Bin 0 -> 68716 bytes .../ek_ra6m3g/downloadable/download_all.zip | Bin 859642 -> 1484556 bytes .../download_all/adc_ek_ra6m3g_ep.zip | Bin 73811 -> 0 bytes .../download_all/agt_ek_ra6m3g_ep.zip | Bin 77874 -> 0 bytes .../download_all/dmac_ek_ra6m3g_ep.zip | Bin 86628 -> 0 bytes .../download_all/download_all.zip | Bin 859642 -> 0 bytes .../download_all/flash_hp_ek_ra6m3g_ep.zip | Bin 76777 -> 0 bytes .../download_all/gpt_ek_ra6m3g_ep.zip | Bin 69590 -> 0 bytes .../download_all/icu_ek_ra6m3g_ep.zip | Bin 64645 -> 0 bytes .../download_all/iic_master_ek_ra6m3g_ep.zip | Bin 75553 -> 0 bytes .../download_all/iic_slave_ek_ra6m3g_ep.zip | Bin 77909 -> 0 bytes .../download_all/sci_i2c_ek_ra6m3g_ep.zip | Bin 75401 -> 0 bytes .../download_all/sci_uart_ek_ra6m3g_ep.zip | Bin 78615 -> 0 bytes .../download_all/spi_ek_ra6m3g_ep.zip | Bin 78743 -> 0 bytes .../download_all/wdt_ek_ra6m3g_ep.zip | Bin 76815 -> 0 bytes .../downloadable/elc/elc_ek_ra6m3g_ep.zip | Bin 0 -> 68405 bytes .../freertos/freertos_ek_ra6m3g_ep.zip | Bin 0 -> 90701 bytes .../downloadable/kint/kint_ek_ra6m3g_ep.zip | Bin 0 -> 64183 bytes .../downloadable/lvd/lvd_ek_ra6m3g_ep.zip | Bin 0 -> 68468 bytes .../downloadable/rtc/rtc_ek_ra6m3g_ep.zip | Bin 0 -> 77230 bytes .../downloadable/ssi/ssi_ek_ra6m3g_ep.zip | Bin 0 -> 84597 bytes .../acmphs_ek_ra6m3g_ep/e2studio/.cproject | 290 +++ .../acmphs_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 860 +++++++++ .../e2studio/acmphs_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/acmphs_ek_ra6m3g_ep Debug.launch | 82 + .../e2studio/acmphs_ek_ra6m3g_ep.hex | 669 +++++++ .../e2studio/configuration.xml | 221 +++ .../acmphs_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 316 +++ .../e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 330 ++++ .../acmphs/acmphs_ek_ra6m3g_ep/readme.txt | Bin 0 -> 4804 bytes .../cac/cac_ek_ra6m3g_ep/e2studio/.cproject | 290 +++ .../cac/cac_ek_ra6m3g_ep/e2studio/.project | 32 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 818 ++++++++ .../e2studio/cac_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/cac_ek_ra6m3g_ep Debug.launch | 82 + .../e2studio/cac_ek_ra6m3g_ep.hex | 711 +++++++ .../e2studio/configuration.xml | 225 +++ .../cac/cac_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 316 +++ .../cac_ek_ra6m3g_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../cac_ek_ra6m3g_ep/e2studio/src/cac_ep.h | 66 + .../e2studio/src/common_utils.h | 71 + .../cac_ek_ra6m3g_ep/e2studio/src/hal_entry.c | 419 ++++ .../source/cac/cac_ek_ra6m3g_ep/readme.txt | Bin 0 -> 6242 bytes .../crc/crc_ek_ra6m3g_ep/e2studio/.cproject | 289 +++ .../crc/crc_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 344 ++++ .../e2studio/configuration.xml | 239 +++ .../e2studio/crc_ek_ra6m3g_ep.elf.jlink | 39 + .../e2studio/crc_ek_ra6m3g_ep.elf.launch | 54 + .../e2studio/crc_ek_ra6m3g_ep.hex | 833 ++++++++ .../crc/crc_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 153 ++ .../crc_ek_ra6m3g_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../crc_ek_ra6m3g_ep/e2studio/src/crc_ep.h | 84 + .../crc_ek_ra6m3g_ep/e2studio/src/hal_entry.c | 453 +++++ .../source/crc/crc_ek_ra6m3g_ep/readme.txt | Bin 0 -> 7682 bytes .../elc/elc_ek_ra6m3g_ep/e2studio/.cproject | 290 +++ .../elc/elc_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 19 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 861 +++++++++ .../e2studio/configuration.xml | 246 +++ .../e2studio/elc_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/elc_ek_ra6m3g_ep Debug.launch | 82 + .../e2studio/elc_ek_ra6m3g_ep.hex | 597 ++++++ .../elc/elc_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 341 ++++ .../elc_ek_ra6m3g_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../elc_ek_ra6m3g_ep/e2studio/src/elc_ep.h | 53 + .../elc_ek_ra6m3g_ep/e2studio/src/hal_entry.c | 187 ++ .../source/elc/elc_ek_ra6m3g_ep/readme.txt | Bin 0 -> 4904 bytes .../freertos_ek_ra6m3g_ep/e2studio/.cproject | 303 +++ .../freertos_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../e2studio/R7FA6M3AH3CFC.pincfg | 161 ++ .../e2studio/RA6M3G-EK.pincfg | 860 +++++++++ .../e2studio/configuration.xml | 341 ++++ .../e2studio/freertos_ek_ra6m3g_ep.elf.jlink | 39 + .../e2studio/freertos_ek_ra6m3g_ep.elf.launch | 54 + .../e2studio/freertos_ek_ra6m3g_ep.hex | 1670 ++++++++++++++++ .../freertos_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 256 +++ .../e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/freertos_ep.h | 45 + .../e2studio/src/gpt_timer_initialize.c | 71 + .../e2studio/src/gpt_timer_initialize.h | 30 + .../e2studio/src/hal_entry.c | 28 + .../e2studio/src/receiver_task_entry.c | 55 + .../e2studio/src/semaphore_task_entry.c | 138 ++ .../e2studio/src/sender_task_entry.c | 190 ++ .../freertos/freertos_ek_ra6m3g_ep/readme.txt | Bin 0 -> 4436 bytes .../kint/kint_ek_ra6m3g_ep/e2studio/.cproject | 289 +++ .../kint/kint_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 334 ++++ .../e2studio/configuration.xml | 195 ++ .../e2studio/kint_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/kint_ek_ra6m3g_ep Debug.launch | 82 + .../e2studio/kint_ek_ra6m3g_ep.hex | 488 +++++ .../kint_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 296 +++ .../e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 244 +++ .../kint_ek_ra6m3g_ep/e2studio/src/kint_ep.h | 123 ++ .../source/kint/kint_ek_ra6m3g_ep/readme.txt | Bin 0 -> 5920 bytes .../lvd/lvd_ek_ra6m3g_ep/e2studio/.cproject | 290 +++ .../lvd/lvd_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 860 +++++++++ .../e2studio/configuration.xml | 192 ++ .../e2studio/lvd_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/lvd_ek_ra6m3g_ep Debug.launch | 109 ++ .../e2studio/lvd_ek_ra6m3g_ep.hex | 608 ++++++ .../lvd/lvd_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 293 +++ .../lvd_ek_ra6m3g_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../lvd_ek_ra6m3g_ep/e2studio/src/hal_entry.c | 210 ++ .../source/lvd/lvd_ek_ra6m3g_ep/readme.txt | Bin 0 -> 10846 bytes .../rtc/rtc_ek_ra6m3g_ep/e2studio/.cproject | 291 +++ .../rtc/rtc_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 17 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 860 +++++++++ .../e2studio/configuration.xml | 194 ++ .../rtc/rtc_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 295 +++ .../e2studio/rtc_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/rtc_ek_ra6m3g_ep Debug.launch | 82 + .../e2studio/rtc_ek_ra6m3g_ep.hex | 906 +++++++++ .../rtc_ek_ra6m3g_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/common_utils.h | 71 + .../rtc_ek_ra6m3g_ep/e2studio/src/hal_entry.c | 290 +++ .../rtc_ek_ra6m3g_ep/e2studio/src/rtc_ep.c | 307 +++ .../rtc_ek_ra6m3g_ep/e2studio/src/rtc_ep.h | 87 + .../source/rtc/rtc_ek_ra6m3g_ep/readme.txt | Bin 0 -> 5282 bytes .../e2studio/sci_i2c_ek_ra6m3g_ep.hex | 38 +- .../sci_i2c/sci_i2c_ek_ra6m3g_ep/readme.txt | Bin 8840 -> 9672 bytes .../ssi/ssi_ek_ra6m3g_ep/e2studio/.cproject | 290 +++ .../ssi/ssi_ek_ra6m3g_ep/e2studio/.project | 32 + .../e2studio/.settings/CoverageSetting.xml | 4 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + ....renesas.cdt.ra.packs.componentfiles.prefs | 21 + .../com.renesas.cdt.ra.settingseditor.prefs | 2 + ....renesas.cdt.ra.threads.configurator.prefs | 2 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 172 ++ .../e2studio/R7FA6M3AH3CFC.pincfg | 36 + .../e2studio/RA6M3G-EK.pincfg | 805 ++++++++ .../e2studio/configuration.xml | 265 +++ .../ssi/ssi_ek_ra6m3g_ep/e2studio/ra_cfg.txt | 354 ++++ .../ssi_ek_ra6m3g_ep/e2studio/script/ra6m3.ld | 319 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 1695 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 272 +++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 330 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 +++++ .../e2studio/src/audio_data.h | 379 ++++ .../e2studio/src/common_utils.h | 71 + .../ssi_ek_ra6m3g_ep/e2studio/src/hal_entry.c | 196 ++ .../e2studio/ssi_ek_ra6m3g_ep Debug.jlink | 39 + .../e2studio/ssi_ek_ra6m3g_ep Debug.launch | 82 + .../e2studio/ssi_ek_ra6m3g_ep.hex | 963 ++++++++++ .../source/ssi/ssi_ek_ra6m3g_ep/readme.txt | Bin 0 -> 4526 bytes 1373 files changed, 304452 insertions(+), 141 deletions(-) create mode 100644 example_projects/ek_ra2a1/downloadable/cac/cac_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/downloadable/crc/crc_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/downloadable/elc/elc_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/downloadable/freertos/freertos_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/downloadable/kint/kint_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/downloadable/lvd/lvd_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/downloadable/rtc/rtc_ek_ra2a1_ep.zip create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.jlink create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.launch create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/cac_ep.h create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.jlink create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.launch create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/crc_ep.h create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.jlink create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.launch create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/elc_ep.h create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.jlink create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.launch create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/freertos_ep.h create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.h create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/receiver_task_entry.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/semaphore_task_entry.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/sender_task_entry.c create mode 100644 example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.jlink create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.launch create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/kint_ep.h create mode 100644 example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.jlink create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.launch create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.project create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.jlink create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.launch create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep.hex create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/script/ra2a1.ld create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.c create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.h create mode 100644 example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/downloadable/cac/cac_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/crc/crc_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/elc/elc_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/freertos/freertos_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/kint/kint_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/lvd/lvd_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/rtc/rtc_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/downloadable/ssi/ssi_ek_ra4m1_ep.zip create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/cac_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/cac_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/cac_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/cac_ep.h create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/cac/cac_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/crc_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/crc_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/crc_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/crc_ep.h create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/crc/crc_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/elc_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/elc_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/elc_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/elc_ep.h create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/elc/elc_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/freertos_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/freertos_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/freertos_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/freertos_ep.h create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/gpt_timer_initialize.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/gpt_timer_initialize.h create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/receiver_task_entry.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/semaphore_task_entry.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/e2studio/src/sender_task_entry.c create mode 100644 example_projects/ek_ra4m1/source/freertos/freertos_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/kint_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/kint_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/kint_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/e2studio/src/kint_ep.h create mode 100644 example_projects/ek_ra4m1/source/kint/kint_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/lvd_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/lvd_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/lvd_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/lvd/lvd_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/rtc_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/rtc_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/rtc_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/rtc_ep.c create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/e2studio/src/rtc_ep.h create mode 100644 example_projects/ek_ra4m1/source/rtc/rtc_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/R7FA4M1AB3CFP.pincfg create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/RA4M1-EK.pincfg create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/script/ra4m1.ld create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/audio_data.h create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/ssi_ek_ra4m1_ep Debug.jlink create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/ssi_ek_ra4m1_ep Debug.launch create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/e2studio/ssi_ek_ra4m1_ep.hex create mode 100644 example_projects/ek_ra4m1/source/ssi/ssi_ek_ra4m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/downloadable/acmphs/acmphs_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/cac/cac_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/crc/crc_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/elc/elc_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/freertos/freertos_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/kint/kint_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/lvd/lvd_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/rtc/rtc_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/downloadable/ssi/ssi_ek_ra6m1_ep.zip create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/acmphs_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/acmphs_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/acmphs_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/readme.txt create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/acmphs/acmphs_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/cac_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/cac_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/cac_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/cac_ep.h create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/cac/cac_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/crc_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/crc_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/crc_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/crc_ep.h create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/crc/crc_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/elc_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/elc_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/elc_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/elc_ep.h create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/elc/elc_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/freertos_ek_ra6m1_ep.elf.jlink create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/freertos_ek_ra6m1_ep.elf.launch create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/freertos_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/freertos_ep.h create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/gpt_timer_initialize.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/gpt_timer_initialize.h create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/receiver_task_entry.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/semaphore_task_entry.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/e2studio/src/sender_task_entry.c create mode 100644 example_projects/ek_ra6m1/source/freertos/freertos_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/kint_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/kint_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/kint_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/e2studio/src/kint_ep.h create mode 100644 example_projects/ek_ra6m1/source/kint/kint_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/lvd_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/lvd_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/lvd_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/lvd/lvd_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/rtc_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/rtc_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/rtc_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/rtc_ep.c create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/e2studio/src/rtc_ep.h create mode 100644 example_projects/ek_ra6m1/source/rtc/rtc_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/R7FA6M1AD3CFP.pincfg create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/RA6M1-EK.pincfg create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/script/ra6m1.ld create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/audio_data.h create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/ssi_ek_ra6m1_ep Debug.jlink create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/ssi_ek_ra6m1_ep Debug.launch create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/e2studio/ssi_ek_ra6m1_ep.hex create mode 100644 example_projects/ek_ra6m1/source/ssi/ssi_ek_ra6m1_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/downloadable/acmphs/acmphs_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/cac/cac_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/crc/crc_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/elc/elc_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/freertos/freertos_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/kint/kint_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/lvd/lvd_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/rtc/rtc_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/downloadable/ssi/ssi_ek_ra6m2_ep.zip create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/acmphs_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/acmphs_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/acmphs_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/acmphs/acmphs_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/cac_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/cac_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/cac_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/cac_ep.h create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/cac/cac_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/crc_ek_ra6m2_ep.elf.jlink create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/crc_ek_ra6m2_ep.elf.launch create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/crc_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/crc_ep.h create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/crc/crc_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/elc_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/elc_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/elc_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/elc_ep.h create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/elc/elc_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/freertos_ek_ra6m2_ep.elf.jlink create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/freertos_ek_ra6m2_ep.elf.launch create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/freertos_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/freertos_ep.h create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/gpt_timer_initialize.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/gpt_timer_initialize.h create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/receiver_task_entry.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/semaphore_task_entry.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/e2studio/src/sender_task_entry.c create mode 100644 example_projects/ek_ra6m2/source/freertos/freertos_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/kint_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/kint_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/kint_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/e2studio/src/kint_ep.h create mode 100644 example_projects/ek_ra6m2/source/kint/kint_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/lvd_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/lvd_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/lvd_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/lvd/lvd_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/rtc_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/rtc_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/rtc_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/rtc_ep.c create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/e2studio/src/rtc_ep.h create mode 100644 example_projects/ek_ra6m2/source/rtc/rtc_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/R7FA6M2AF3CFB.pincfg create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/RA6M2-EK.pincfg create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/script/ra6m2.ld create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/audio_data.h create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/ssi_ek_ra6m2_ep Debug.jlink create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/ssi_ek_ra6m2_ep Debug.launch create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/e2studio/ssi_ek_ra6m2_ep.hex create mode 100644 example_projects/ek_ra6m2/source/ssi/ssi_ek_ra6m2_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/downloadable/acmphs/acmphs_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/cac/cac_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/crc/crc_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/elc/elc_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/freertos/freertos_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/kint/kint_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/lvd/lvd_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/rtc/rtc_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/downloadable/ssi/ssi_ek_ra6m3_ep.zip create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/acmphs_ek_ra6m3_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/acmphs_ek_ra6m3_ep Debug.launch create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/acmphs_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/acmphs/acmphs_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/cac_ek_ra6m3_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/cac_ek_ra6m3_ep Debug.launch create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/cac_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/cac_ep.h create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/cac/cac_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/crc_ek_ra6m3_ep.elf.jlink create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/crc_ek_ra6m3_ep.elf.launch create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/crc_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/crc_ep.h create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/crc/crc_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/elc_ek_ra6m3_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/elc_ek_ra6m3_ep Debug.launch create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/elc_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/elc_ep.h create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/elc/elc_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/freertos_ek_ra6m3_ep.elf.jlink create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/freertos_ek_ra6m3_ep.elf.launch create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/freertos_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/freertos_ep.h create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/gpt_timer_initialize.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/gpt_timer_initialize.h create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/receiver_task_entry.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/semaphore_task_entry.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/e2studio/src/sender_task_entry.c create mode 100644 example_projects/ek_ra6m3/source/freertos/freertos_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.settings/e2studio_project.prefs create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/kint_ek_ra6m3_ep.elf.jlink create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/kint_ek_ra6m3_ep.elf.launch create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/kint_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/e2studio/src/kint_ep.h create mode 100644 example_projects/ek_ra6m3/source/kint/kint_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/lvd_ek_ra6m3_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/lvd_ek_ra6m3_ep Debug.launch create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/lvd_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/lvd/lvd_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/rtc_ek_ra6m3_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/rtc_ek_ra6m3_ep Debug.launch create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/rtc_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/rtc_ep.c create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/e2studio/src/rtc_ep.h create mode 100644 example_projects/ek_ra6m3/source/rtc/rtc_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/RA6M3-EK.pincfg create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/audio_data.h create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/ssi_ek_ra6m3_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/ssi_ek_ra6m3_ep Debug.launch create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/e2studio/ssi_ek_ra6m3_ep.hex create mode 100644 example_projects/ek_ra6m3/source/ssi/ssi_ek_ra6m3_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/downloadable/acmphs/acmphs_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/cac/cac_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/crc/crc_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/adc_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/agt_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/dmac_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/download_all.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/flash_hp_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/gpt_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/icu_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/iic_master_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/iic_slave_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/sci_i2c_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/sci_uart_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/spi_ek_ra6m3g_ep.zip delete mode 100644 example_projects/ek_ra6m3g/downloadable/download_all/wdt_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/elc/elc_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/freertos/freertos_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/kint/kint_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/lvd/lvd_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/rtc/rtc_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/downloadable/ssi/ssi_ek_ra6m3g_ep.zip create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/acmphs_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/acmphs_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/acmphs_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/acmphs/acmphs_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/cac_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/cac_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/cac_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/cac_ep.h create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/cac/cac_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/crc_ek_ra6m3g_ep.elf.jlink create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/crc_ek_ra6m3g_ep.elf.launch create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/crc_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/crc_ep.h create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/crc/crc_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/elc_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/elc_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/elc_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/elc_ep.h create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/elc/elc_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/freertos_ek_ra6m3g_ep.elf.jlink create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/freertos_ek_ra6m3g_ep.elf.launch create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/freertos_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/freertos_ep.h create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/gpt_timer_initialize.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/gpt_timer_initialize.h create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/receiver_task_entry.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/semaphore_task_entry.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/e2studio/src/sender_task_entry.c create mode 100644 example_projects/ek_ra6m3g/source/freertos/freertos_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/kint_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/kint_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/kint_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/e2studio/src/kint_ep.h create mode 100644 example_projects/ek_ra6m3g/source/kint/kint_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/lvd_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/lvd_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/lvd_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/lvd/lvd_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/rtc_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/rtc_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/rtc_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/rtc_ep.c create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/e2studio/src/rtc_ep.h create mode 100644 example_projects/ek_ra6m3g/source/rtc/rtc_ek_ra6m3g_ep/readme.txt create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.project create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/R7FA6M3AH3CFC.pincfg create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/RA6M3G-EK.pincfg create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/script/ra6m3.ld create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/audio_data.h create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/ssi_ek_ra6m3g_ep Debug.jlink create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/ssi_ek_ra6m3g_ep Debug.launch create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/e2studio/ssi_ek_ra6m3g_ep.hex create mode 100644 example_projects/ek_ra6m3g/source/ssi/ssi_ek_ra6m3g_ep/readme.txt diff --git a/example_projects/ek_ra2a1/downloadable/cac/cac_ek_ra2a1_ep.zip b/example_projects/ek_ra2a1/downloadable/cac/cac_ek_ra2a1_ep.zip new file mode 100644 index 0000000000000000000000000000000000000000..c02bf790ef8251a900720e558635a760108f8b5b GIT binary patch literal 65735 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%0A}BHH_S1RU6k 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 z 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 BB~SnW literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/downloadable/download_all.zip b/example_projects/ek_ra2a1/downloadable/download_all.zip index 9769951b12d9b1444459164a238bd80b37cff84e..343b14d8d65b9aafda34594019820cf44e8bdbb1 100644 GIT binary patch delta 444232 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

Ie51EyPWpXQH;UwCdpZw4>xDfx zB7Z%S2kcn&Jzihh$eZxpknP^w!AYb9e5YnYpgv(8Q;f;5QJxq0f@Ef#|$3X^DU5jp$;#Bt8Euwp~Ar1A2|( zl02G^;XM0iXJ7Bk&PuqRUBA_~faWdn^W&n4E&m3Z=uI@ccqAj|pyx;J$b_c2#Kw*FgOC3}MK-@})=AHug? kH&TPRBBN^czUV5nACfLby*zuCWl!*VppL@)$XqRd00`tj-v9sr literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.cproject b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.cproject new file mode 100644 index 0000000000..22935a12d9 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.cproject @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..af26a1a91b --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + elc_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..b7f9316588 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,19 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=3781303622,ra/board/ra2a1_ek/board_init.h|1192771973,ra/board/ra2a1_ek/board.h|811579141,ra/board/ra2a1_ek/board_init.c|1570288955,ra/board/ra2a1_ek/board_leds.h|1634941367,ra/board/ra2a1_ek/board_leds.c +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h|2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|3667622829,ra/fsp/inc/instances/r_ioport.h|2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|860418405,ra/fsp/inc/fsp_common_api.h|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|1719600019,ra/fsp/inc/fsp_version.h|2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h|2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|1533961824,ra/fsp/inc/api/r_ioport_api.h|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|3241443262,ra/fsp/inc/api/bsp_api.h|2319720569,ra/fsp/inc/fsp_features.h|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_elc\#\#\#\#0.8.0/all=1172284913,ra/fsp/inc/api/r_elc_api.h|2536147046,ra/fsp/inc/instances/r_elc.h|2342094635,ra/fsp/src/r_elc/r_elc.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_elc\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_gpt\#\#\#\#0.8.0/all=3581715791,ra/fsp/inc/instances/r_gpt.h|1818146396,ra/fsp/inc/api/r_timer_api.h|686089942,ra/fsp/src/r_gpt/r_gpt.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_gpt\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=3667622829,ra/fsp/inc/instances/r_ioport.h|3642215214,ra/fsp/src/r_ioport/r_ioport.c|1533961824,ra/fsp/inc/api/r_ioport_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..a2fb337b38 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..fa94f755e5 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..253f23cad3 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,172 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.align_composite_type_declarators=false +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=82 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=82 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=false +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_preprocessor_directives=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_identifier_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_expression=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=120 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..8f9798f9bd --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..2400ff5fce --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..9532a701bf --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Event Link Controller + Renesas.RA.0.8.0.pack + + + General PWM Timer + Renesas.RA.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.jlink b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.launch b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.launch new file mode 100644 index 0000000000..0e7945c627 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep Debug.launch @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..6a5ac97939 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/elc_ek_ra2a1_ep.hex @@ -0,0 +1,533 @@ +:10000000F80D002055180000E117000051180000FD +:1000100051180000511800005118000000000000A5 +:100020000000000000000000000000005118000067 +:100030005118000000000000511800005118000085 +:10004000311500000000000000000000000000006A +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFDFCEFFFFFCFF0F00FFFF0F002E +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F21C04C2F20004237863B940F233 +:100510000003C0F200032BB142F2E800C0F2000079 +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2200142F2E800D6 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F0B5C646C3680E00816805008846CF1A0C +:10056000416800B5C8189C18974206D9310001F0BF +:10057000FDF9EC6004BC9046F0BD3A00310001F09A +:10058000F5F94346E41AF1192200686801F0EEF922 +:10059000EC60EFE7F8B54746CE46884680B51600D2 +:1005A0000700C568846840F200091AE0013B5B1B44 +:1005B000641BB44200D934009C4200D91C007B6803 +:1005C00022005819414601F0D1F92D19A144A04447 +:1005D000361BBC68631B5A1E93415B421D40FD6085 +:1005E00036B13B699D42E1D3013B1B195B1BDFE741 +:1005F00048460CBC90469946F8BDC04670B540F2DE +:1006000090440323C2F200042361636140F2580363 +:1006100041F6A812C2F20003E36140F20043C0F2C7 +:100620000002A261226640F2380241F6B411202590 +:1006300023620023C2F200026266E01DC0F20001E4 +:100640000422A3626362E362A5662367E3666367CD +:1006500001F08CF941F6B813C0F200031A68226069 +:100660009B88A571A38070BD431C70B515005A000E +:10067000D21840F29043D200C2F20003D61840F2E2 +:100680009042C2F20002944643001B18DB00634410 +:10069000DC6A012C0BD0CCB1022C06D12A00300030 +:1006A000FFF778FF0400200070BD0024FBE79A6A82 +:1006B000586A82421DD9013A121A2C00954200D97B +:1006C000140022003000FFF743FFECE79A6A586AF3 +:1006D000824209D9013A121A9542E4D82A00300020 +:1006E000FFF736FF2C00DEE71B6AD218013A121A18 +:1006F000F2E71B6AD218013A121ADEE7F8B540F2A7 +:100700009043C2F200031B7805005BB20E00170095 +:1007100063B1EFF31084012181F310883A003100B6 +:100720002800FFF7A1FF84F31088F8BDFFF766FFEC +:10073000EFE7C04610B5040083686268581C904219 +:1007400007D82268D154E36862680133E36003008C +:10075000A0609A4200D010BD21682069FFF7CEFF4B +:10076000A368984203D001235B42E360F3E70023D0 +:10077000A360F0E7F8B54E4645465746DE46E0B57D +:100780001E000A9B80460F0015009946914200D238 +:1007900077E00B000122B3FBF5F301329D42FAD959 +:1007A000B246964200D2924601230B9A1A409346D3 +:1007B000002A5AD14B46002B57D00B9B20249B0775 +:1007C00058D4D14502D850E0D1450ED001235B4228 +:1007D0009C4621004046E144FFF7ACFF4346DB68FE +:1007E000002B3CDB4B46002BEED10124012E03D91C +:1007F000013E6C43012EFBD8B7FBF4F39D42F8D9C0 +:1008000041F6C016C0F2000606E0B4FBF5F3AC42B8 +:100810000DD31C00B7FBF3F322005A43F1564046B8 +:10082000BF1AFFF787FF4346DB68002BEDDA5B4614 +:10083000ABB14B469BB1CA4502D310E0D1450ED0B7 +:1008400001235B429C4620214046E144FFF772FFB2 +:100850004346DB68002B02DB4B46002BEED13CBC51 +:1008600090469946A246AB46F8BD4346DB68002B4E +:10087000BBDAF4E774427441634210241C40203414 +:100880009FE701228CE7C046F0B55746DE464E464C +:100890004546E0B59DB00CAB9B46079340230893BB +:1008A00000230C009146042740F2010A02900993AC +:1008B0000B900A93002161560134002900D1AAE06F +:1008C00025290CD007A8FFF735FF0A980028F1DA90 +:1008D0001DB03CBC90469946A246AB46F0BD0023F5 +:1008E000E356621C00260225082110002B2B0DD098 +:1008F0002B2B0EDD2D2B57D0302B0FD114002E4378 +:100900000023E356621C10002B2BF1D13E43140050 +:10091000F6E7232B02D10E431400F1E7190030391A +:10092000C9B2092900D980E00025B4462E001D0077 +:1009300001E014000132B3009B195B005B19002534 +:100940005557303B28003038C0B211001E0009282E +:10095000EFD92B00A01C350066462E2B69D0002352 +:100960000C00CB5640F2000801E00023E3561A00C9 +:100970000134BA43682AF8D0642B77D03DDD732B5D +:1009800000D1C6E026DD752B12D14B4649461B68C7 +:1009900007A81A1D0A6019680A22019600954346A5 +:1009A000FFF7E8FE0A9891E7534614001E43A7E7B5 +:1009B000782B00D089E74B4649461B6807A81A1DCB +:1009C0000A6019681022019600954346FFF7D2FE8F +:1009D0000A987BE7702B00D077E74B4649461B68A7 +:1009E00007A81A1D0A6019680023019308330093B1 +:1009F0001022FFF7BFFE0A9868E7582BDBD0632B65 +:100A000000D19AE0252B00D05FE707A82521FFF74A +:100A100091FE0A985AE70A98002800DC58E7099ADC +:100A2000002A00D095E0801852E7210000252E2BE7 +:100A300095D10123CB5604001A00303AD2B240F2CD +:100A40000008092A93D81900404683001B185B0050 +:100A50005B18002101346156303B0A00303AD2B2B3 +:100A60001800092AF1D90B00804680E74B46494619 +:100A70001B681A1D1B680A60DA1703939B18534002 +:100A80000122092B07DD0A2000E00B0093FBF0F1A7 +:100A90000132632BF9DC43460493904561D3022372 +:100AA000334095B3039A002A61DB37425FD10BB123 +:100AB000434653B35346334227D135B3049B9D423B +:100AC00023D905961E0001E0B5420AD007A82021CF +:100AD000FFF730FE0A98013D002800DAF8E6002D05 +:100AE000F2D1059E039B002B43DB37424CD10323FD +:100AF0003340022B4DD007A80196009543460A22A9 +:100B00000399FFF737FE0A98E0E60A980028E9DA29 +:100B1000DEE64B4649461B681A1D0A601D6806E062 +:100B200007A8FFF707FE0A98002800DAD0E60021A0 +:100B3000695601350029F3D1C7E64B4649461B6883 +:100B400007A81A1D0A6000215956FFF7F3FD0A98FD +:100B5000BCE659460298FFF7D1FD0A98099A801819 +:100B6000B6E6022304923340002DCED09AE7013D31 +:100B70009DE75B422D2107A80393FFF7DBFD0A9851 +:100B8000002800DAA4E6B2E72B2107A8FFF7D2FD80 +:100B9000F5E74346002BAED18DB1049B9D4203D8AF +:100BA000A9E7049B9D42A6D007A83021FFF7C2FD0C +:100BB0000A98013D002800DA8AE6002DF1D10025CF +:100BC00099E7C0460EB400B582B003AB02CB01AAD0 +:100BD0000193FFF759FE02B008BC03B01847C046A6 +:100BE00040F2405010B5C2F2000000F0E5FC00B940 +:100BF00010BD41F6F41341F6DC1241F61821C0F2A3 +:100C00000003C0F20002C0F200010020FFF7DAFF8B +:100C1000EEE7C04641F6342341F6E81241F61821CA +:100C200010B5C0F20003C0F20002C0F200010020C3 +:100C3000FFF7C8FF10BDC046002310B584B003AC59 +:100C40002000039300F0C4FD6278E3780192A2785B +:100C500041F65C21009241F65822C0F20001C0F238 +:100C600000020020FFF7AEFF41F634410020C0F241 +:100C70000001FFF7A7FF40F2385042F2020240F2B3 +:100C80000621C2F2000000F0F1F9040000284DD165 +:100C900041F6887140F24050C0F20001C2F20000FB +:100CA00000F0B4FC0400002800D00CE140F24050F9 +:100CB000C2F2000000F096FC0400002800D0E7E03B +:100CC00041F6EC7140F24850C0F20001C2F200005F +:100CD00000F0D4FA0400002800D0BEE041F6A07174 +:100CE00040F25C50C0F20001C2F2000000F0C6FA0F +:100CF0000400002800D08CE040F24850C2F200000E +:100D000000F058FA0400002856D140F25C50C2F2BC +:100D1000000000F04FFA040008BB41F640710020CB +:100D2000C0F20001FFF74EFF04B010BD41F6E453DE +:100D300041F6D01241F61821C0F20003C0F20002C1 +:100D4000C0F200010020FFF73DFF41F60C612200D8 +:100D5000C0F200010020FFF735FF00BE98E7FFF763 +:100D60003FFF40F24850C2F2000000F05DFA002858 +:100D700000D0C1E040F25C50C2F2000000F054FA32 +:100D8000002800D0C3E041F60C7341F6D01241F6C2 +:100D90001821C0F20003C0F20002C0F200010020DE +:100DA000FFF710FF41F60C612200C0F200010020A5 +:100DB000FFF708FF00BEB0E7FFF712FF40F2485010 +:100DC000C2F2000000F030FA002800D0A8E040F2A3 +:100DD0005C50C2F2000000F027FA002800D09CE02E +:100DE00041F6E06341F6D01241F61821C0F200034B +:100DF000C0F20002C0F200010020FFF7E3FE41F65E +:100E00000C612200C0F200010020FFF7DBFE00BEF3 +:100E10007BE7FFF7E5FE40F24850C2F2000000F029 +:100E200003FA002800D075E041F6A86341F6D0121D +:100E300041F61821C0F20003C0F20002C0F2000126 +:100E40000020FFF7BFFE41F60C612200C0F2000156 +:100E50000020FFF7B7FE00BE4EE7FFF7C1FE41F6E8 +:100E6000786341F6D01241F61821C0F20003C0F2B7 +:100E70000002C0F200010020FFF7A4FE41F60C6161 +:100E80002200C0F200010020FFF79CFE00BE25E713 +:100E9000FFF7A6FE41F6506341F6D01241F6182145 +:100EA000C0F20003C0F20002C0F200010020FFF710 +:100EB00089FE41F60C612200C0F200010020FFF71C +:100EC00081FE00BEFCE641F62C6341F6D01241F6ED +:100ED0001821C0F20003C0F20002C0F2000100209D +:100EE000FFF770FE41F60C612200C0F20001002005 +:100EF000FFF768FE00BED9E6FFF78CFE40F25C50BB +:100F0000C2F2000000F090F9002800D13BE7FFF7A3 +:100F100081FE38E7FFF77EFE86E7FFF77BFE5FE79F +:100F2000FFF778FE53E7C04610B5022800D010BD89 +:100F300042F2380140F23850C0F20001C2F2000023 +:100F400000F07CF8F3E7C04610B5FFF775FE00200F +:100F500010BDC046F0B5DE4657464E464546E0B5A4 +:100F600083B0EFF31082012383F3108840F27053B3 +:100F7000C2F2000301931B6833B940F60054C4F277 +:100F80000404E3704033E370019C23680133236061 +:100F900082F31088038883B30B6840F600049846F8 +:100FA000254B002240F2FF0C9946C4F20404D10004 +:100FB00041448E888025330A9A4663461E40534634 +:100FC00009686D021B0129420FD04F469D19AD00E3 +:100FD000AA462D593D40AB4655465F462F514D46DA +:100FE0000D40AB4655465F462F519B199B0019514A +:100FF0000132038892B29342D9D8EFF310820123D1 +:1010000083F31088019B1B681BB101990B68013B9E +:101010000B60019B1B6833B940F60051C4F2040118 +:10102000CB708033CB7082F3108803B03CBC904609 +:101030009946A246AB46F0BDFFFFFEFF10B50B0080 +:1010400080B179B14A686AB145F254220168C5F2AB +:101050004F02914208D00260191D1800FFF77AFF75 +:10106000002010BD0120FCE70E20FAE7F0B50028B3 +:1010700050D045F254230068C5F24F03984247D13F +:10108000EFF31085012383F3108840F27053C2F20E +:101090000003186830B940F60054C4F20404E0704C +:1010A0004030E0701C6801341C6085F31088FF2418 +:1010B000080A00012140D4030BD540F6000544186E +:1010C000C4F20405A4006759134E37401640675117 +:1010D000665140F600044018C4F204048000025136 +:1010E000EFF31082012181F31088196811B119689A +:1010F000013919601B681BB182F310880020F0BD14 +:1011000040F60051C4F20401CB708033CB70F3E79A +:101110000720F4E70120F2E7FFFFFEFFF0B5D64617 +:101120004F464646C0B500283DDB4EF20014CEF2D5 +:101130000004A44640F2FF0A83089B006344032591 +:1011400040F2003C5646C7B264463D40ED00AE401A +:101150001C598901B443260054460C40AC406146FA +:1011600034435C5040F274538100C2F20003CA5011 +:10117000030046F20002C033C4F200029B009958FB +:101180000B4C4009214099504EF200121F23CEF221 +:1011900000021F4094461E3BBB4040F2801280007C +:1011A0006044835003601CBC90469946A246F0BD43 +:1011B000FFFFFEFF30B5E0B145F254030268C0F214 +:1011C00047039A4213D1802143680906DA691369FB +:1011D0009468D5680C430D431943836800205D6112 +:1011E00099615169926959629A621C6130BD072008 +:1011F000FCE70120FAE7C0461F21012201408A4096 +:101200004EF2001143092033CEF200019B005A50E8 +:10121000BFF34F8FBFF36F8F40F274530022C2F2BF +:1012200000038000C250704710B528B345F2540344 +:101230000268C0F247039A421CD100228368C16849 +:10124000026099605A63436812201856DC690028CE +:1012500001DBFFF7D1FF2823E056002801DBFFF771 +:10126000CBFF2923E0560024002801DBFFF7C4FF51 +:10127000200010BD0724FBE70124F9E7F0B545463F +:10128000DE4657464E46E0B5050083B0002900D142 +:10129000C3E0CC69002C00D1BFE0002800D1BCE045 +:1012A00001270A7A174200D0B7E045F254030068DC +:1012B000C0F24703984200D119E10B7C9F40EF60D8 +:1012C000780600D102E112204E6908560090002EE7 +:1012D00000D1AAE00098002800DA1CE108788446D2 +:1012E000012669602E74002B00D0CEE0212047F249 +:1012F00000062B7448F2000340428046C4F2040604 +:10130000C4F20703B668AB60404647F20008C4F277 +:1013100004080640404640F2880886604AF20056BB +:1013200040461E60002652081206DE629E63DE639F +:101330009E641E50DA628022604612061A615A616B +:101340009A61E2695E629E62DA61226A1A624A68A2 +:10135000561E9E665E6600286DD15208013A5A6597 +:101360009A652278002A00D0A0E040F2010840F2FD +:1013700003090026A278EAB1E278900183461001C1 +:101380008246019258465246104362468246022ADD +:1013900000D1B9E0019A501E824152429346032285 +:1013A000584602405046063210430204324380261B +:1013B0007604164340F2250A24225046A25C205CA3 +:1013C0005203400702433243AA266046F6031E64D6 +:1013D000012802D10026DE641E65DF605A634A469A +:1013E0001A6342461A63497C2A000098FFF796FE6A +:1013F0002623E15C0233E0562A00FFF78FFE272305 +:10140000E15C0233E0562A00FFF788FE45F2540300 +:10141000C0F247032B60002000E0012003B03CBC79 +:1014200090469946A246AB46F0BD0878844601280E +:1014300000D055E74EE702286AD1CA685E6E002ADE +:1014400047D0B24269D22079012800D1B21A40F2C5 +:10145000010840F20309013A5A659A652278002A88 +:1014600047D0627816019201324340F200161643CB +:10147000CA691279013A5042504140F2020A42428E +:10148000504682430932164374E740F28070C0F23E +:101490004000804647F20006412043441B02C4F24C +:1014A00004064042AB60B66880462DE740F2001863 +:1014B000627840F20309900116010643404640F26B +:1014C0000108064382B90622164353E740F27A50D8 +:1014D000A4E740F2010840F203090122C0F2022809 +:1014E000C0F202295242B7E70922164342E70E2012 +:1014F00094E7A2780026002A00D15BE7E678320163 +:10150000B601324392460026CA691279013A42E78F +:101510000122524223E70B2080E740F2010840F20B +:1015200003090122C0F20338C0F20339524293E7A3 +:10153000F0B5C64600B584B0EFF30383103BDBB2D1 +:101540005DB22A0046F20007C032C4F200079200E2 +:101550001848D15980460140D15140F27451A80039 +:10156000C2F20001405846683178012916D18468DA +:10157000C0686D09A0600020A064E0642065444656 +:10158000D05904401F20034099402B004EF2001018 +:101590006033CEF200009B00D451195073692BB117 +:1015A000B26901A8019200220271984704B004BCFC +:1015B0009046F0BDFFFFFEFF88B144F6434302684A +:1015C000C0F245039A4208D1002241F200030260B2 +:1015D0000020C4F204031A7070470720FCE70120C2 +:1015E000FAE7C04680B144F643430268C0F24503BF +:1015F0009A4207D141F2000380220020C4F2040382 +:101600001A7070470720FCE70120FAE7F0B550B3E5 +:1016100049B344F643430268C0F245039A4224D0DA +:1016200047F20003C4F204035A68114C4DF20F351F +:10163000224041F200075A6000230122C0F25C05FB +:10164000C4F204072A4203D0CE5C1C1DA400E6535A +:1016500001335200172BF5D144F64343C0F2450342 +:1016600003600020F0BD0120FCE70E20FAE7C04631 +:10167000FFBFFFFF4EF20003A022C4F201039A5CF9 +:10168000824217D036229A5C1AB93C215A5CD207A2 +:10169000FCD54EF20002A021C4F20102535CDB062D +:1016A000FCD450544EF20002A021C4F20102535C5B +:1016B000DB06FCD47047C0464EF20003262240F2FF +:1016C0000801C4F20103985C1B6A8000C2F20001A9 +:1016D00041585B015B0F40F28C42D940C2F20002DC +:1016E000116070474EF2000340F2FE323649C4F2F8 +:1016F000010370B599524CF2000140F20010002431 +:10170000C4F201010C5240F2080446F60041C2F254 +:101710000004C0F2DC21216041F20021C0F27A0114 +:10172000616048F2000142F20040A16021610022A4 +:1017300040F21341C0F2F400E0605A540920A221A3 +:10174000585440F28041585C18B140F281401A541C +:101750005A540020FFF78EFF4EF20003002136227C +:10176000C4F2010399543C315A5CD207FCD50125DF +:10177000312200219D540B3A99540131FF31C1F2BD +:1017800000011962985C1A6A800020585201520FB9 +:1017900040F28C41D04040F2FE32C2F200010860BB +:1017A0000A4999524CF2000240F2041340F204112B +:1017B000C4F20102D552535A002BFCD1012101334E +:1017C000FF33D15270BDC04603A5FFFF00A5FFFF48 +:1017D00020B180231B030360002070470120FCE739 +:1017E000F8B546F2000340F2401240F25847002498 +:1017F0000126C4F200039D5AC2F20007ADB22B00CD +:10180000E340E0B21E4203D0A300DB5903B1984786 +:1018100001340D2CF3D146F2000340F23012C4F231 +:1018200000039D52F8BDC04646F200000023C4F2FA +:10183000000042F2C802C0F200029A1811781A00A1 +:10184000C032920001331150202BF2D17047C046B4 +:1018500000BE704710B500F003F8FFF775FBFEE718 +:1018600070B5002082B0FFF75FFB0024FFF73AFF5E +:101870006B46DC71DA1DDB7947F20003C4F2040326 +:101880005968374840F20005014040F600005960B1 +:10189000C4F204000168C2F20005C907C90F117043 +:1018A0000168C907C90F117001680120C907C90F74 +:1018B00011708022596852050A435A60FFF734FBC1 +:1018C00040F2F45240F21C00C2F20002C2F20000E8 +:1018D000121A002100F053F840F2000040F2080212 +:1018E00042F2EC01C2F20000C2F20002121AC0F28F +:1018F000000100F03BF840F600531A4AC4F200031E +:101900009C801A8040F6F812C2F200029A6040F6FB +:10191000F852C2F20002DA6046F2000240F22011F0 +:1019200041F20000C4F20002505201229A80FFF7F7 +:10193000C3FE0220FFF7F8FA40F20403C2F20003EC +:101940005B1B9E10002B04DD08CD01349847A64296 +:10195000FADCFFF769FF002000F006F802B070BD66 +:10196000FFFFFFEF00A5FFFF7047C046002310B543 +:101970009A4200D110BDCC5CC4540133F8E7030097 +:101980001218934200D1704719700133F9E7FFFF35 +:10199000F8B5C046F8BC08BC9E467047F8B5C046CE +:1019A000F8BC08BC9E4670475465726D696E616CE8 +:1019B000000000005254540053454747455200FF71 +:1019C0003031323334353637383941424344454675 +:1019D00068616C5F656E74727900FFFF656C635FB0 +:1019E0006465696E697400FF6770745F6465696E31 +:1019F000697400FF2A2A20454C43206D6F64756C82 +:101A00006520436C6F7365206661696C6564202A8C +:101A10002A20200D0A0000005B4552525D20496ECD +:101A20002046756E6374696F6E3A20257328292CE1 +:101A3000202573002A2A20475054206D6F64756C4E +:101A40006520436C6F7365206661696C6564202A4C +:101A50002A20200D0A00FFFF312E30000D0A2A2A0D +:101A60002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AD6 +:101A70002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AC6 +:101A80002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB6 +:101A90002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA6 +:101AA0000D0A2A20202052656E657361732046530B +:101AB00050204578616D706C652050726F6A656367 +:101AC0007420666F7220725F656C63204D6F647561 +:101AD0006C65202020202020202020202020202075 +:101AE0002020202A0D0A2A2020204578616D706C64 +:101AF000652050726F6A6563742056657273696FF2 +:101B00006E2025732020202020202020202020202F +:101B100020202020202020202020202020202020C5 +:101B20002020202020202A0D0A2A202020466C6513 +:101B30007820536F667477617265205061636B2003 +:101B400056657273696F6E202025642E25642E25DC +:101B50006420202020202020202020202020202041 +:101B6000202020202020202020202020202A0D0A94 +:101B70002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AC5 +:101B80002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB5 +:101B90002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA5 +:101BA0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A95 +:101BB0002A2A0D0A526566657220746F207265616B +:101BC000646D652E7478742066696C6520666F722A +:101BD000206D6F72652064657461696C73206F6E2F +:101BE000204578616D706C652050726F6A65637412 +:101BF00020616E640D0A4653502055736572277339 +:101C0000204D616E75616C20666F72206D6F72651C +:101C100020696E666F726D6174696F6E2061626FAC +:101C2000757420725F656C63206472697665720DED +:101C30000A0000000D0A54686973204578616D70D0 +:101C40006C652050726F6A6563742064656D6F6E99 +:101C5000737472617465732074686520626173695E +:101C600063207573616765206F662020454C4320B3 +:101C70006472697665722E0D0A494F504F52542C8A +:101C8000204750543020616E642047505431206505 +:101C900076656E747320617265206C696E6B656425 +:101CA000207573696E6720454C432E0D0A54686594 +:101CB00020737461727420736F7572636520666F30 +:101CC00072204750543020616E64204750543120B8 +:101CD000697320494F504F5254206576656E7420C9 +:101CE000616E64207468652073746F7020736F7503 +:101CF00072636520666F72204750543120697320EB +:101D00004750543020636F756E746572206F76652E +:101D100072666C6F772E0D0A475054312072756EC3 +:101D20007320696E2050574D206D6F646520616E81 +:101D30006420475054302072756E7320696E206F96 +:101D40006E652D73686F74206D6F64652E0D0A4F7C +:101D50006E207072657373696E6720746865207594 +:101D6000736572207075736820627574746F6E2C61 +:101D700020616E20494F504F5254206576656E7435 +:101D8000206973207472696767657265642077687B +:101D90006963682073746172747320626C696E6B1E +:101DA000696E6720746865204C45442E0D0A4C45C9 +:101DB000442073746F707320626C696E6B696E6718 +:101DC00020616674657220352073656320776865CD +:101DD0006E204750543020657870697265732E0DFF +:101DE0000A0000000D0A202A2A20494F504F525461 +:101DF0002050696E20436F6E666967206661696C6A +:101E00006564202A2A200D0A000000000D0A526590 +:101E10007475726E6564204572726F7220436F64D0 +:101E2000653A203078257820200D0A000D0A202AF6 +:101E30002A20454C43206D6F64756C65204F70659A +:101E40006E206661696C6564202A2A200D0A0000F4 +:101E50000D0A202A2A20454C4320456E61626C659C +:101E6000206F7065726174696F6E206661696C6560 +:101E700064202A2A200D0A000D0A202A2A20475011 +:101E800054206D6F64756C65204F70656E20666FB1 +:101E9000722050574D206D6F6465206661696C65D6 +:101EA00064202A2A200D0A000D0A202A2A204750E1 +:101EB00054206D6F64756C65204F70656E20666F81 +:101EC00072204F6E652D73686F74206D6F6465208E +:101ED0006661696C6564202A2A200D0A00000000F2 +:101EE0000D0A202A2A2047505420456E61626C65F5 +:101EF00020666F722050574D2074696D65722066A0 +:101F000061696C6564202A2A200D0A000D0A202AC6 +:101F10002A2047505420456E61626C6520666F72BE +:101F2000204F6E652D73686F742074696D65722023 +:101F30006661696C6564202A2A200D0A0000000091 +:101F40000D0A506C6561736520707265737320743F +:101F50006865207573657220707573682D6275747D +:101F6000746F6E2E204C454420626C696E6B73203A +:101F7000666F722035207365636F6E647320616EC7 +:101F8000642073746F7073003E4A0000000000000C +:101F9000000000000000000000000000000000FF42 +:101FA00001000000001C4E0E00000000000E27077C +:101FB000000200000000000000000000C01F000040 +:101FC0000000000000000000000001000000000010 +:101FD0000000000000000000000000000000000001 +:101FE000000000000000FFFFDFDF00000200000033 +:101FF00000366E0100000000001BB70003FFDF0089 +:1020000000000000000000000C20000000000100A3 +:1020100000000000000001000000020000000000BD +:1020200000000000000000000000000000000000B0 +:102030000000FFFFDFDF0000110000004020000073 +:102040000000010C010000000080000003000000FF +:102050000000010008010000000001060B01000063 +:10206000000001060C010000000000000102000059 +:10207000000001040402000000000103050200004A +:102080000040000006020000000001000003000004 +:102090000000010603030000000001060403000025 +:1020A00000000113070400000000010C09040000F7 +:1020B000000001040B040000000001130E090000E1 +:1020C000000001130F0900004A000000000000009A +:1020D0000000000000000000000000000000000000 +:0C20E000000000000000000000000000F4 +:0820EC002D05000001050000B4 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:04000003000018558C +:00000001FF diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..381fe1b2a4 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,224 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is Disabled + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 128 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: Reset is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is disabled after reset + OFS1 register settings: Voltage Detection 0 Level: 1.90 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 CTSU0_TS15 Low None "Peripheral mode" - None "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 ADC0_AN06 - - "Analog mode" - None "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 SPI0_RSPCK Low None "Peripheral mode" CMOS None "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 SPI0_SSL0 Low None "Peripheral mode" CMOS None "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 SCI0_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPT3_GTIOCB Low None "Peripheral mode" CMOS None "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 GPIO - IRQ06 "Input mode" - None "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 SPI0_MOSI Low - "Peripheral mode" - None "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 SPI0_MISO Low - "Peripheral mode" CMOS None "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 USBFS0_VBUS Low None "Peripheral mode" CMOS None "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 CTSU0_TSCAP Low None "Peripheral mode" CMOS None "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 - - - Disabled - - "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI0_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 USBFS0_DP - - "Peripheral mode" - - "USB_FS0: DP" + P915 18 USBFS0_DM - - "Peripheral mode" - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "ELC Driver on r_elc" + Parameter Checking: Default (BSP) + + Module "Timer Driver on r_gpt" + Parameter Checking: Default (BSP) + Pin Output Support: Enabled + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_elc ELC Driver on r_elc" + Name: g_elc + + Instance "g_timer_pwm Timer Driver on r_gpt" + General: Name: g_timer_pwm + General: Channel: 3 + General: Mode: PWM + General: Period: 500 + General: Period Unit: Milliseconds + Output: Duty Cycle Percent (only applicable in PWM mode): 50 + Output: Duty Cycle Range (only applicable in PWM mode): Shortest: 2 PCLK, Longest: (Period - 1) PCLK + Output: GTIOCA Output Enabled: False + Output: GTIOCA Stop Level: Pin Level Low + Output: GTIOCB Output Enabled: True + Output: GTIOCB Stop Level: Pin Level Low + Input: Count Up Source: Unused + Input: Count Down Source: Unused + Input: Start Source: IOPORT EVENT 2 (Port 2 event) + Input: Stop Source: GPT0 COUNTER OVERFLOW (Overflow) + Input: Clear Source: Unused + Input: Capture A Source: Unused + Input: Capture B Source: Unused + Input: GTIOCA Input Filter: No Filter + Input: GTIOCB Input Filter: No Filter + Interrupts: Callback: NULL + Interrupts: Overflow Interrupt Priority: Disabled + Interrupts: Capture A Interrupt Priority: Disabled + Interrupts: Capture B Interrupt Priority: Disabled + + Instance "g_timer_oneshot Timer Driver on r_gpt" + General: Name: g_timer_oneshot + General: Channel: 0 + General: Mode: One-Shot + General: Period: 5 + General: Period Unit: Seconds + Output: Duty Cycle Percent (only applicable in PWM mode): 50 + Output: Duty Cycle Range (only applicable in PWM mode): Shortest: 2 PCLK, Longest: (Period - 1) PCLK + Output: GTIOCA Output Enabled: False + Output: GTIOCA Stop Level: Pin Level Low + Output: GTIOCB Output Enabled: False + Output: GTIOCB Stop Level: Pin Level Low + Input: Count Up Source: Unused + Input: Count Down Source: Unused + Input: Start Source: IOPORT EVENT 2 (Port 2 event) + Input: Stop Source: Unused + Input: Clear Source: Unused + Input: Capture A Source: Unused + Input: Capture B Source: Unused + Input: GTIOCA Input Filter: No Filter + Input: GTIOCB Input Filter: No Filter + Interrupts: Callback: NULL + Interrupts: Overflow Interrupt Priority: Priority 2 + Interrupts: Capture A Interrupt Priority: Disabled + Interrupts: Capture B Interrupt Priority: Disabled + diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..e1b3447bf8 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (32) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..0b40a623c1 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_elc" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/elc_ep.h b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/elc_ep.h new file mode 100644 index 0000000000..c2e7296c5e --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/elc_ep.h @@ -0,0 +1,53 @@ +/*********************************************************************************************************************** + * File Name : elc_ep.h + * Description : Contains declarations of data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef ELC_EP_H_ +#define ELC_EP_H_ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define EP_INFO "\r\nThis Example Project demonstrates the basic usage of ELC driver."\ + "\r\nIOPORT, GPT0 and GPT1 events are linked using ELC."\ + "\r\nThe start source for GPT0 and GPT1 is IOPORT event and the stop source for GPT1 is GPT0 counter overflow."\ + "\r\nGPT1 runs in PWM mode and GPT0 runs in one-shot mode."\ + "\r\nOn pressing the user push button, an IOPORT event is triggered which starts blinking the LED."\ + "\r\nLED stops blinking after 5 sec when GPT0 expires.\r\n" + +/* PFS register setting to detect falling edge on user push button pins */ +#define IOPORT_FALLING_EDGE_DETECT (0x00002002U) + +/* MACROs that define user push-button pins for all boards */ +#if defined(BOARD_RA2A1_EK) +#define USER_PUSH_BUTTON_IOPORT (BSP_IO_PORT_02_PIN_06) +#elif defined(BOARD_RA4M1_EK) +#define USER_PUSH_BUTTON_IOPORT (BSP_IO_PORT_01_PIN_05) +#elif defined(BOARD_RA6M1_EK) +#define USER_PUSH_BUTTON_IOPORT (BSP_IO_PORT_04_PIN_15) +#elif defined(BOARD_RA6M2_EK) +#define USER_PUSH_BUTTON_IOPORT (BSP_IO_PORT_01_PIN_05) +#else +#define USER_PUSH_BUTTON_IOPORT (BSP_IO_PORT_01_PIN_01) +#endif + +#endif /* ELC_EP_H_ */ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..fc8d6e0739 --- /dev/null +++ b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,187 @@ +/*********************************************************************************************************************** + * File Name : hal_entry.c + * Description : Contains data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" +#include "elc_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup elc_ep + * @{ + **********************************************************************************************************************/ +/* Private functions */ +static void elc_deinit(void); +static void gpt_deinit(gpt_instance_ctrl_t * p_ctrl); + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ +void hal_entry(void) +{ + fsp_err_t err = FSP_SUCCESS; + fsp_pack_version_t version = {RESET_VALUE}; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + + /* Example Project information printed on the Console */ + APP_PRINT(BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + APP_PRINT(EP_INFO); + + /* Configure User push button to generate events */ + err = R_IOPORT_PinCfg(&g_ioport_ctrl, USER_PUSH_BUTTON_IOPORT, IOPORT_FALLING_EDGE_DETECT); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n ** IOPORT Pin Config failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Open ELC driver */ + err = R_ELC_Open(&g_elc_ctrl, &g_elc_cfg); + /* Handle error */ + if(FSP_SUCCESS != err) + { + /* ELC module init failed */ + APP_ERR_PRINT("\r\n ** ELC module Open failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Enable Links between IOPORT and GPT modules: + * 1. IOPORT event as start source for GPT0 and GPT1 + * 2. GPT1 counter overflow event as stop source for GPT0 */ + err = R_ELC_Enable(&g_elc_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + elc_deinit(); + APP_ERR_PRINT("\r\n ** ELC Enable operation failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Open Timer in PWM mode */ + err = R_GPT_Open(&g_timer_pwm_ctrl,&g_timer_pwm_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + elc_deinit(); + APP_ERR_PRINT("\r\n ** GPT module Open for PWM mode failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Open Timer in One-shot mode */ + err = R_GPT_Open(&g_timer_oneshot_ctrl,&g_timer_oneshot_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + elc_deinit(); + gpt_deinit(&g_timer_pwm_ctrl); + APP_ERR_PRINT("\r\n ** GPT module Open for One-shot mode failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Enable Start and Stop sources for Timer in PWM mode */ + err = R_GPT_Enable(&g_timer_pwm_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + elc_deinit(); + gpt_deinit(&g_timer_pwm_ctrl); + gpt_deinit(&g_timer_oneshot_ctrl); + APP_ERR_PRINT("\r\n ** GPT Enable for PWM timer failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Enable Start source for Timer in one-shot mode */ + err = R_GPT_Enable(&g_timer_oneshot_ctrl); + if (FSP_SUCCESS != err) + { + elc_deinit(); + gpt_deinit(&g_timer_pwm_ctrl); + gpt_deinit(&g_timer_oneshot_ctrl); + APP_ERR_PRINT("\r\n ** GPT Enable for One-shot timer failed ** \r\n"); + APP_ERR_TRAP(err); + } + + /* On successful operations on ELC and GPT modules, user is asked to press the push-button */ + APP_PRINT("\r\nPlease press the user push-button. LED blinks for 5 seconds and stops"); +} + +/*******************************************************************************************************************//** + * @brief This function closes opened ELC module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +static void elc_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close ELC module */ + err = R_ELC_Close(&g_elc_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* ELC Close failure message */ + APP_ERR_PRINT("** ELC module Close failed ** \r\n"); + } +} + +/*******************************************************************************************************************//** + * @brief This function closes opened GPT module before the project ends up in an Error Trap. + * @param[IN] p_ctrl Pointer to instance control. + * @retval None + **********************************************************************************************************************/ +static void gpt_deinit(gpt_instance_ctrl_t * p_ctrl) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close GPT timer */ + err = R_GPT_Close(p_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* GPT Close failure message */ + APP_ERR_PRINT("** GPT module Close failed ** \r\n"); + } +} + + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) { + if (BSP_WARM_START_POST_C == event) { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup elc_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/elc/elc_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..761fadf72e02572dd100f35195be3f9d69b900e6 GIT binary patch literal 4904 zcmd^@VNc>m5XSfQCH)3>$-eA0dY;#`$@N~LDAFQQzd=FJW0c}W8+z)3$q@i zE4@bYH8N}bzmoTyY8o3`+(1NBP|Wo=OMmEnC|l1U^5_fu$UM&#=}J-V<##4qV&Y+* z?u72vBH|&ZbLIW<`PI^m#V6l^)-{#ag<R3K2U!=nqWJ42%ev2IH%9k^IWayi~MrQd|Md60YaG0LI>xd3oZv5W1cFH(qEdT z7S!$kE8saVw1%9$26v_ok2Y9Ve(+zNVESC6RB^25dtuqqb5wm~H5d!iP-rGnaF*{) zMaSC0R+WQnN-6pxV`qVx&>>?mbfNsI`L*GKiEQ!b7JDKqu-w@!UP6CWT^20;bfjIC zQ!kyQL-BZ~J$xSp{h&|A>l*9JHm4u;eyY#sxn`EwZ>1NRUDP%^?A!Y5 zX#`)#`uxtmXN}_ni;lhb%(gF!zM`FIo)ssW%S%jM^UEwAsYJwaJdw$vP_^{JsxPa9 z^j@DJ;agO%qmixDjnPwmc4SBWR%=3i+p=!UOV>UdvH%0Iu{^VAM|wg9 zJ$X5hZ)#Mn=ejau$D^O9Im&u3f5*aetntXXTKiJ-zE--H_l)tVsk0mEJTTR}Zb0j` zU03ypsvoDyCkX zfUNWk9eYzN+%sO*`FOX1(YYflPCfP~zJs~dbHUM53wB)9Gbnt$D}nvHY2i3mwc;2- z{;l%rYSlZfi&Hez&K}_0Sl2lz6Q@&8NH~+I zbLeVQRaHHO#;}LI@@w`f_0c<~E_MO0UF(E8>IbIjH~sq4<-jo=D}C!opZDn-v!!G5 z7pvphyC}My%k)7##*Ou>eD~g|cpb{(MsX(Ui0H)WxV=-0zGa~f^j0zHp~mvyy7<|#gIVyf-`qqomy)Tr=!5xNZg)gA1oKvi*`)uwNBG||gX6u(!` zb&fo=x?>3ZUcbJkU^>tpU|T!4mcEw8z7*Qf*7{82kvQBxi+|MmTCcbAtlepa5UUMRaKCb=2AB6?a!$MvxC=!b~Suj3~EGS*ne_KLaQ$?g|h_eN`p zaxP!gaA=ASHC-=v=xQB{Ziqe&nO2x{pkhX2n3 N_2cJS<3#s+{=fC>y%+!h literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.cproject b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.cproject new file mode 100644 index 0000000000..b81289c8d0 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.cproject @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..e8683dbd29 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + freertos_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..65d43b9a37 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,21 @@ +AWS\#\#Heaps\#\#FreeRTOS\#\#heap_2\#\#\#\#0.8.0/all=307184709,ra/aws/amazon-freertos/freertos_kernel/portable/MemMang/heap_2.c +AWS\#\#Heaps\#\#FreeRTOS\#\#heap_2\#\#\#\#0.8.0/libraries= +AWS\#\#RTOS\#\#FreeRTOS\#\#all\#\#\#\#0.8.0/all=113586679,ra/aws/amazon-freertos/freertos_kernel/include/projdefs.h|3707840231,ra/fsp/src/rm_freertos_port/port.c|2371732593,ra/aws/amazon-freertos/freertos_kernel/list.c|189637229,ra/aws/amazon-freertos/freertos_kernel/event_groups.c|1766385195,ra/aws/amazon-freertos/freertos_kernel/tasks.c|3086983157,ra/aws/amazon-freertos/freertos_kernel/include/list.h|887792976,ra/aws/amazon-freertos/freertos_kernel/include/timers.h|820872456,ra/aws/amazon-freertos/freertos_kernel/timers.c|3985476694,ra/aws/amazon-freertos/freertos_kernel/queue.c|3414334094,ra/aws/amazon-freertos/freertos_kernel/include/mpu_wrappers.h|1185923797,ra/fsp/src/rm_freertos_port/portmacro.h|2657294990,ra/aws/amazon-freertos/freertos_kernel/include/portable.h|538685542,ra/aws/amazon-freertos/freertos_kernel/include/FreeRTOS.h|3453008295,ra/aws/amazon-freertos/freertos_kernel/include/mpu_prototypes.h|1462461615,ra/aws/amazon-freertos/freertos_kernel/include/task.h|4235671402,ra/aws/amazon-freertos/freertos_kernel/include/message_buffer.h|4066870413,ra/aws/amazon-freertos/freertos_kernel/include/event_groups.h|2479216540,ra/aws/amazon-freertos/freertos_kernel/include/semphr.h|1246867188,ra/aws/amazon-freertos/freertos_kernel/include/stream_buffer.h|148753388,ra/aws/amazon-freertos/freertos_kernel/include/deprecated_definitions.h|1607866168,ra/aws/amazon-freertos/freertos_kernel/stream_buffer.c|1055509263,ra/aws/amazon-freertos/freertos_kernel/include/stack_macros.h|1564671041,ra/aws/amazon-freertos/freertos_kernel/include/queue.h +AWS\#\#RTOS\#\#FreeRTOS\#\#all\#\#\#\#0.8.0/libraries= +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=1570288955,ra/board/ra2a1_ek/board_leds.h|811579141,ra/board/ra2a1_ek/board_init.c|1192771973,ra/board/ra2a1_ek/board.h|3781303622,ra/board/ra2a1_ek/board_init.h|1634941367,ra/board/ra2a1_ek/board_leds.c +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h|49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h|3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h|3241443262,ra/fsp/inc/api/bsp_api.h|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|1533961824,ra/fsp/inc/api/r_ioport_api.h|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|2319720569,ra/fsp/inc/fsp_features.h|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c|2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|1719600019,ra/fsp/inc/fsp_version.h|860418405,ra/fsp/inc/fsp_common_api.h|3667622829,ra/fsp/inc/instances/r_ioport.h|488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_gpt\#\#\#\#0.8.0/all=1818146396,ra/fsp/inc/api/r_timer_api.h|3581715791,ra/fsp/inc/instances/r_gpt.h|686089942,ra/fsp/src/r_gpt/r_gpt.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_gpt\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=3642215214,ra/fsp/src/r_ioport/r_ioport.c|1533961824,ra/fsp/inc/api/r_ioport_api.h|3667622829,ra/fsp/inc/instances/r_ioport.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..317de65114 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=PinConfiguration +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..e2df2c37e6 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..00d9fc4e92 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..e4225f4595 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..2a6267fb7d --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Amazon FreeRTOS + Amazon.AWS.0.8.0.pack + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + Amazon FreeRTOS - Memory Management - Heap 2 + Amazon.AWS.0.8.0.pack + + + General PWM Timer + Renesas.RA.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.jlink b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.launch b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.launch new file mode 100644 index 0000000000..b3397659e8 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.elf.launch @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..ebb8501966 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/freertos_ek_ra2a1_ep.hex @@ -0,0 +1,1630 @@ +:10000000D0270020F11C0000391C0000ED1C00006E +:10001000ED1C0000ED1C0000ED1C000000000000C5 +:10002000000000000000000000000000CD130000F0 +:10003000ED1C000000000000D11300004914000076 +:10004000451A000000000000000000000000000051 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFDFCEFFFFFCFF0F00FFFF0F002E +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F29404C2F20004237863B940F2BB +:100510000003C0F200032BB146F20C50C0F2000001 +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2980146F20C50E6 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F0B5C646C3680E00816805008846CF1A0C +:10056000416800B5C8189C18974206D9310003F0BD +:1005700081FBEC6004BC9046F0BD3A00310003F012 +:1005800079FB4346E41AF1192200686803F072FB14 +:10059000EC60EFE7F8B54746CE46884680B51600D2 +:1005A0000700C568846840F200091AE0013B5B1B44 +:1005B000641BB44200D934009C4200D91C007B6803 +:1005C00022005819414603F055FB2D19A144A044BF +:1005D000361BBC68631B5A1E93415B421D40FD6085 +:1005E00036B13B699D42E1D3013B1B195B1BDFE741 +:1005F00048460CBC90469946F8BDC04610B541F639 +:10060000E044032345F2B802C2F2000423616361AF +:1006100040F2C003C0F20002A261226640F2B002C2 +:10062000C2F20003E36140F20043C2F200026266DC +:1006300045F2C401102223620023A266E01DC0F22D +:1006400000010C3AA3626362E3622367E3666367B7 +:1006500003F010FB45F2C803C0F200031A682260E1 +:100660009B88A3802023A37110BDC046431C70B596 +:1006700015005A00D21841F6E043D200C2F200033E +:10068000D61841F6E042C2F20002944643001B181D +:10069000DB006344DC6A012C0BD0CCB1022C06D108 +:1006A0002A003000FFF776FF0400200070BD002410 +:1006B000FBE79A6A586A82421DD9013A121A2C0045 +:1006C000954200D9140022003000FFF741FFECE70B +:1006D0009A6A586A824209D9013A121A9542E4D8B4 +:1006E0002A003000FFF734FF2C00DEE71B6AD21827 +:1006F000013A121AF2E71B6AD218013A121ADEE71F +:10070000F8B541F6E043C2F200031B7805005BB286 +:100710000E00170063B1EFF31084012181F31088FC +:100720003A0031002800FFF7A1FF84F31088F8BDDC +:10073000FFF764FFEFE7C04610B504008368626806 +:10074000581C904207D82268D154E368626801338C +:10075000E3600300A0609A4200D010BD21682069C8 +:10076000FFF7CEFFA368984203D001235B42E3600A +:10077000F3E70023A360F0E7F8B54E464546574639 +:10078000DE46E0B51E000A9B80460F001500994624 +:10079000914200D277E00B000122B3FBF5F3013266 +:1007A0009D42FAD9B246964200D2924601230B9A54 +:1007B0001A409346002A5AD14B46002B57D00B9B28 +:1007C00020249B0758D4D14502D850E0D1450ED003 +:1007D00001235B429C4621004046E144FFF7ACFF09 +:1007E0004346DB68002B3CDB4B46002BEED101245B +:1007F000012E03D9013E6C43012EFBD8B7FBF4F365 +:100800009D42F8D945F2D006C0F2000606E0B4FBDE +:10081000F5F3AC420DD31C00B7FBF3F322005A43AF +:10082000F1564046BF1AFFF787FF4346DB68002BAF +:10083000EDDA5B46ABB14B469BB1CA4502D310E043 +:10084000D1450ED001235B429C4620214046E14425 +:10085000FFF772FF4346DB68002B02DB4B46002BA1 +:10086000EED13CBC90469946A246AB46F8BD434605 +:10087000DB68002BBBDAF4E7744274416342102456 +:100880001C4020349FE701228CE7C046F0B5574654 +:10089000DE464E464546E0B59DB00CAB9B46079301 +:1008A0004023089300230C009146042740F2010ADC +:1008B000029009930B900A9300216156013400299C +:1008C00000D1AAE025290CD007A8FFF735FF0A9828 +:1008D0000028F1DA1DB03CBC90469946A246AB46D2 +:1008E000F0BD0023E356621C0026022508211000FB +:1008F0002B2B0DD02B2B0EDD2D2B57D0302B0FD1CA +:1009000014002E430023E356621C10002B2BF1D160 +:100910003E431400F6E7232B02D10E431400F1E707 +:1009200019003039C9B2092900D980E00025B44640 +:100930002E001D0001E014000132B3009B195B0082 +:100940005B1900255557303B28003038C0B21100E4 +:100950001E000928EFD92B00A01C350066462E2B5F +:1009600069D000230C00CB5640F2000801E00023C0 +:10097000E3561A000134BA43682AF8D0642B77D0C2 +:100980003DDD732B00D1C6E026DD752B12D14B4621 +:1009900049461B6807A81A1D0A6019680A220196B1 +:1009A00000954346FFF7E8FE0A9891E75346140086 +:1009B0001E43A7E7782B00D089E74B4649461B68C2 +:1009C00007A81A1D0A60196810220196009543466F +:1009D000FFF7D2FE0A987BE7702B00D077E74B46F3 +:1009E00049461B6807A81A1D0A601968002301936D +:1009F000083300931022FFF7BFFE0A9868E7582BD0 +:100A0000DBD0632B00D19AE0252B00D05FE707A84D +:100A10002521FFF791FE0A985AE70A98002800DC82 +:100A200058E7099A002A00D095E0801852E7210083 +:100A300000252E2B95D10123CB5604001A00303A05 +:100A4000D2B240F20008092A93D819004046830028 +:100A50001B185B005B18002101346156303B0A0013 +:100A6000303AD2B21800092AF1D90B00804680E74B +:100A70004B4649461B681A1D1B680A60DA17039328 +:100A80009B1853400122092B07DD0A2000E00B00D0 +:100A900093FBF0F10132632BF9DC4346049390455C +:100AA00061D30223334095B3039A002A61DB3742B6 +:100AB0005FD10BB1434653B35346334227D135B3CD +:100AC000049B9D4223D905961E0001E0B5420AD041 +:100AD00007A82021FFF730FE0A98013D002800DA20 +:100AE000F8E6002DF2D1059E039B002B43DB374235 +:100AF0004CD103233340022B4DD007A8019600951B +:100B000043460A220399FFF737FE0A98E0E60A985F +:100B10000028E9DADEE64B4649461B681A1D0A60E2 +:100B20001D6806E007A8FFF707FE0A98002800DA0C +:100B3000D0E60021695601350029F3D1C7E64B46BE +:100B400049461B6807A81A1D0A6000215956FFF77D +:100B5000F3FD0A98BCE659460298FFF7D1FD0A98C2 +:100B6000099A8018B6E6022304923340002DCED0B5 +:100B70009AE7013D9DE75B422D2107A80393FFF70C +:100B8000DBFD0A98002800DAA4E6B2E72B2107A8CB +:100B9000FFF7D2FDF5E74346002BAED18DB1049BA4 +:100BA0009D4203D8A9E7049B9D42A6D007A8302107 +:100BB000FFF7C2FD0A98013D002800DA8AE6002D01 +:100BC000F1D1002599E7C0460EB400B582B003AB61 +:100BD00002CB01AA0193FFF759FE02B008BC03B093 +:100BE0001847C04670B5050000F07EFE040008BB43 +:100BF000280000F0D9FD040040B945F26C11002036 +:100C0000C0F20001FFF7E0FF200070BD280000F0F7 +:100C100041FEA0B945F24C13C0F2000345F2E002D8 +:100C200045F21011C0F20002C0F200010020FFF7EF +:100C3000CBFFE9E745F2F003C0F20003EEE745F22F +:100C40002C1345F2E00245F21011C0F20003C0F28D +:100C50000002C0F200010020FFF7B6FFDAE7C0464D +:100C600010B5022800D010BD45F6342141F6D05011 +:100C7000C0F20001C2F2000000F06CFDF3E7C046D4 +:100C800010B584B00822002102A841F6606402F089 +:100C9000FAFFC2F20004012202A95242206801F0C8 +:100CA000BFFC0128F7D145F290110020C0F20001ED +:100CB000FFF78AFF45F2C411039BC0F200010193C4 +:100CC00002AB1A780020019BFFF77EFFE3E7C046E6 +:100CD00045F2042170B5C0F200010020FFF774FF57 +:100CE00045F6E81141F67860C0F20001C2F200005A +:100CF000FFF778FF0200002800D093E040F2C044E4 +:100D000041F65C66C2F20004C2F200062378BBB969 +:100D100045F25C210020C0F20001FFF755FF40F2D0 +:100D2000F411306801F052FD0128EFD145F29C2109 +:100D30000020C0F20001FFF747FF2378002BE7D027 +:100D400041F67860C2F2000000F01CFD050000BB17 +:100D500045F234310020C0F20001FFF735FF41F6C3 +:100D60007860C2F2000000F095FD050088BB45F2F6 +:100D70005C310020C0F20001FFF726FF45F28C3104 +:100D80000020C0F20001FFF71FFF002002F058FB17 +:100D9000BCE741F67860C2F2000000F07BFD88BB42 +:100DA00045F2043345F2EC1245F21011C0F2000393 +:100DB000C0F20002C0F200010020FFF705FF45F27B +:100DC0003C212A00C0F200010020FFF7FDFE00BE1A +:100DD000BEE745F2D42345F2EC1245F21011C0F201 +:100DE0000003C0F20002C0F200010020FFF7ECFE99 +:100DF00045F23C212A00C0F200010020FFF7E4FE8A +:100E000000BEB4E745F2D42345F2EC1245F21011CE +:100E1000C0F20003C0F20002C0F200010020FFF7A0 +:100E2000D3FEBDE745F23C210020C0F20001FFF7F0 +:100E3000CBFE00BE62E7C04610B540F2C1440023BD +:100E400082B0C2F20004019323783C2B07D140F218 +:100E5000C0430122C2F200031A7002B010BD41F675 +:100E60005C63C2F20003186801A901F073FB2378E8 +:100E700001332370019B002BEFD04EF600538022EC +:100E8000CEF2000352055A60BFF34F8FBFF36F8F4E +:100E9000E3E7C046F0B5CE464746002380B587B0AD +:100EA000029304AE45F2E033320002ACC0F200031C +:100EB00003CB03C2200000F0B7FE6278E378019212 +:100EC000A27845F20041009245F2FC32C0F20001E6 +:100ED000C0F200020020FFF777FE45F23C610020DF +:100EE000C0F2000141F6E467FFF76EFE02F08CF8F5 +:100EF000C2F200070390386801F086FF022802D88A +:100F0000386802F09DFA45F290710020C0F20001AD +:100F1000FFF75AFE45F69C1141F66460C0F20001ED +:100F2000C2F20000FFF75EFE0200002800D0C0E021 +:100F300041F6606540F2C24441F6E068C2F2000545 +:100F4000C2F20004C2F200082378286823BB40F2F2 +:100F5000F412310001F098F90128F5D145F2C87179 +:100F60000020C0F20001FFF72FFE45F6000100202F +:100F7000C0F20001FFF728FE40F2F41103A802F0CE +:100F8000A9F945F62C010020C0F20001FFF71CFE74 +:100F900023782868002BDAD0002101F07FF801289F +:100FA000D2D145F654010020C0F20001FFF70CFE3B +:100FB00041F66460C2F2000000F0E4FB814678BBB9 +:100FC00045F6D8010020C0F20001FFF7FDFD41F613 +:100FD0006460C2F2000000F05DFC814600283FD151 +:100FE0004346186802F02CFA45F6FC010020C0F2D6 +:100FF0000001FFF7E9FD386801F058FF45F62811B8 +:101000000020C0F20001FFF7DFFD45F6541100207B +:10101000C0F20001FFF7D8FD002002F011FA93E7BB +:1010200041F66460C2F2000000F034FC88BB45F673 +:10103000AC0345F2E83245F21011C0F20003C0F2F1 +:101040000002C0F200010020FFF7BEFD45F23C2186 +:101050004A46C0F200010020FFF7B6FD00BEAFE730 +:1010600045F67C0345F2E83245F21011C0F2000368 +:10107000C0F20002C0F200010020FFF7A5FD45F21A +:101080003C214A46C0F200010020FFF79DFD00BE52 +:10109000A6E745F67C0345F2E83245F21011C0F2AE +:1010A0000003C0F20002C0F200010020FFF78CFD37 +:1010B000BDE745F23C210020C0F20001FFF784FDAE +:1010C00000BE35E710B540F2C344002382B0C2F23F +:1010D0000004019323783C2B07D140F2C243012244 +:1010E000C2F200031A7002B010BD41F6606340F214 +:1010F0000001C2F20003186801AA0023C2F2000135 +:1011000001F0ACF9012802D1237801332370019B4F +:10111000002BE8D04EF600538022CEF20003520599 +:101120005A60BFF34F8FBFF36F8FDCE7002300B52A +:1011300083B0009341F6D85241F68853C2F20002C0 +:10114000C2F200030F21042000F0F2FF41F66063B9 +:10115000C2F20003186090B10323009341F61463B8 +:101160000022C2F200030021012000F0E1FF41F65D +:101170005C63C2F20003186028B103B000BD002117 +:1011800000F00AF8E8E7002100F006F8F5E7C046AD +:1011900010B5FFF7CBFF10BD00BE704770B541F62C +:1011A000D8640121C2F200044942206801F00EFB1C +:1011B000012803D000212068FFF7EEFF41F6DC6331 +:1011C000C2F200031A7802B170BD013241F6D46553 +:1011D0001A70FFF7DDFFC2F200052B68013B2B60A0 +:1011E000002BF1D0002300220021206801F04CF8F0 +:1011F0000128F2D000212068FFF7CEFF2B68013BC9 +:101200002B60002BEED1DFE741F6D4630022C2F25F +:10121000000310B51A6041F6DC63C2F200031A70D5 +:1012200041F68C620121C2F2000240F2001000F08F +:10123000F9FF41F6D863C2F20003186048B100F02C +:1012400091F800F02FF800F05DF801F089FE002021 +:1012500010BD00210800FFF79FFFF0E740F6C40330 +:10126000C2F20003036040F2C443C2F200030B6009 +:10127000802313607047C04640F62413C2F2000377 +:10128000036040F2C463C2F200030B60802313606A +:101290007047C04610B50400FFF780FF2000FFF73D +:1012A000EFFC10BD41F6D463C2F200031A6810B51A +:1012B00001321A60012382B041F6E064009345F6E2 +:1012C000C42145F6D42341F29520C2F200040194D2 +:1012D000C0F200038022C0F20001C0F2000001F061 +:1012E0005FFD012803D020680021FFF755FF02B001 +:1012F00010BDC04610B50400FFF750FF2000FFF7F7 +:10130000E7FC10BD41F6D463C2F200031A6810B5C1 +:1013100001321A60012382B041F6E464009345F67D +:10132000D82145F6E82341F2F520C2F200040194E9 +:10133000C0F2000340F20012C0F20001C0F200004F +:1013400001F02EFD012803D020680021FFF724FFC3 +:1013500002B010BD10B50400FFF720FF2000FFF71A +:1013600099FD10BD41F6D463C2F200031A6800B5BE +:1013700001321A6040F6841385B0C2F20003029372 +:1013800042F2D073C2F200030193012345F6EC212F +:10139000009341F2553045F6F82340F20012C0F2B6 +:1013A0000003C0F20001C0F2000001F0A9FC41F608 +:1013B000E863C2F20003186008B105B000BD002167 +:1013C000FFF7EAFEF9E7C04600BEFEE700F028B8E6 +:1013D00009480168EFF30982203A0A6082F309881C +:1013E000F0C244464D4656465F46F0C272B601F022 +:1013F000D3FF62B600F014B83C1A002040F6005348 +:101400000022C4F200039A8241F63C22C2F200029A +:101410001268126B9A6180F3098801229A827047E0 +:10142000074801680A681032F0CAA046A946B246C9 +:10143000BB461046203AF0CAFFF7E0FF01490847D3 +:101440003C1A0020FDFFFFFF10B501F0E3FD30B1B5 +:101450004EF600538022CEF2000352055A6010BDB2 +:1014600010B58024031F64041C600124043BA143C5 +:101470001960010041F2C9330C39C0F200030B605E +:101480000300203B40381A6010BDC04610B5EFF392 +:101490001081012383F3108840F6E812C2F20002A3 +:1014A000136801331360012B00D010BD40F6E41324 +:1014B000C2F2000319604EF60053CEF200035B68DF +:1014C000DB05F2D045F6443345F61C3245F68C3048 +:1014D000C0F20003C0F2000240F21C31C0F2000072 +:1014E00002F094FB40F6E812C2F20002136810B555 +:1014F00053B1013B136033B940F6E413C2F2000369 +:101500001B6883F3108810BD45F6B43345F63032BE +:1015100045F68C30C0F20003C0F2000240F22531E3 +:10152000C0F2000002F072FB30B508B34EF20003C7 +:10153000C4F201039A8992B211B2002919DBBFF3F8 +:101540004F8F30BFBFF36F8F62B6BFF36F8F72B62E +:1015500000290DDA4EF2000340F2FE310B4CC4F2CA +:101560000103585A5C529A814AF2005202435A527D +:1015700030BD40F2FE30054D1C5A1D5200259D81A4 +:101580004AF200552C431C52D9E7C04602A5FFFF82 +:1015900010B572B601F030FD0120FFF7C5FF62B64D +:1015A00001F0F4FD10BDC04640F6242340F2E832BD +:1015B000C2F200031B68B3FBF2F30C4A013B9342F7 +:1015C00013D84EF210024EF60051C020CEF20002A7 +:1015D0005360CEF200010B6A00061B021B0A034394 +:1015E0000B6200239360073313607047FFFFFF0017 +:1015F0004EF60053CEF200031A6A124910B511409C +:10160000C02212040A431A62FFF7CEFF40F60053CD +:101610000022C4F200039A820B4A40F220111A827F +:1016200046F2000241F20000C4F2000250524FF6AE +:10163000FF72C2F20F02DA6162B6BFF36F8F00DF92 +:1016400000BEFDE7FFFF00FF00A5FFFFEFF30383F0 +:10165000103B5BB20F2B00DC70474EF200129B0870 +:10166000C033CEF200029B009B58F5E7F0B5DE4692 +:1016700057464E464546E0B583B0EFF3108201234E +:1016800083F3108841F6EC63C2F2000301931B68F8 +:1016900033B940F60054C4F20404E3704033E370FD +:1016A000019C23680133236082F31088038883B38D +:1016B0000B6840F600049846254B002240F2FF0CD0 +:1016C0009946C4F20404D10041448E888025330A2F +:1016D0009A4663461E40534609686D021B01294223 +:1016E0000FD04F469D19AD00AA462D593D40AB463F +:1016F00055465F462F514D460D40AB4655465F4619 +:101700002F519B199B0019510132038892B29342C9 +:10171000D9D8EFF31082012383F31088019B1B6853 +:101720001BB101990B68013B0B60019B1B6833B92E +:1017300040F60051C4F20401CB708033CB7082F3C9 +:10174000108803B03CBC90469946A246AB46F0BD1B +:10175000FFFFFEFF10B50B0080B179B14A686AB196 +:1017600045F254220168C5F24F02914208D002604E +:10177000191D1800FFF77AFF002010BD0120FCE7BB +:101780000E20FAE768B145F254030268C0F247033D +:101790009A4204D18368C26800209A60704707208B +:1017A000FCE70120FAE7C04668B145F2540302683D +:1017B000C0F247039A4204D18368C26800205A608D +:1017C00070470720FCE70120FAE7C046F0B5D6468F +:1017D0004F464646C0B500283DDB4EF20014CEF21F +:1017E0000004A44640F2FF0A83089B0063440325DB +:1017F00040F2003C5646C7B264463D40ED00AE4064 +:101800001C598901B443260054460C40AC40614643 +:1018100034435C5041F6F0638100C2F20003CA50C9 +:10182000030046F20002C033C4F200029B00995844 +:101830000B4C4009214099504EF200121F23CEF26A +:1018400000021F4094461E3BBB4040F280128000C5 +:101850006044835003601CBC90469946A246F0BD8C +:10186000FFFFFEFF1F21012201408A404EF20011BE +:1018700043092033CEF200019B005A50BFF34F8F33 +:10188000BFF36F8F41F6F0630022C2F200038000C5 +:10189000C250704710B528B345F254030268C0F235 +:1018A00047039A421CD100228368C1680260996094 +:1018B0005A63436812201856DC69002801DBFFF7E1 +:1018C000D1FF2823E056002801DBFFF7CBFF2923B7 +:1018D000E0560024002801DBFFF7C4FF200010BD04 +:1018E0000724FBE70124F9E7F0B5C646040000B57C +:1018F000002900D185E0CD69002D00D181E00028CC +:1019000000D17EE001270E7A37427AD145F25403A6 +:101910000268C0F247039A4200D18EE00B7C9F40E0 +:10192000C7607A0600D185E012228A5690464A693D +:10193000002A6AD04246002A00DA80E00122616073 +:101940002274002B65D1212047F20002237448F253 +:10195000000340428446C4F20402C4F207039268C2 +:10196000A360604647F2000CC4F2040C02406046DB +:1019700040F2880C82604AF2005260461A600022EF +:1019800076083606DA629A63DA639A641A50DE627F +:10199000802640F2250CE86936061E615E619E6174 +:1019A0005A629A62D861286A18624868461E9E6622 +:1019B00060465E662426285CAE5D400776031A64A6 +:1019C00006430332DF605E631A63023A1A63497C9E +:1019D00022004046FFF7FAFE2623E95C0233E85670 +:1019E0002200FFF7F3FE2723E95C0233E8562200CA +:1019F000FFF7ECFE45F25403C0F2470323600020DA +:101A000000E0012004BC9046F0BD0A78012A95D17F +:101A100090E740F28072C0F240029446412047F2C3 +:101A2000000263441B02C4F204024042A3609268B5 +:101A3000844696E740F27A50E4E70E20E2E70B2076 +:101A4000E0E7C046F0B5C64600B584B0EFF30383C7 +:101A5000103BDBB25DB22A0046F20007C032C4F28E +:101A6000000792001848D15980460140D15141F6F3 +:101A7000F061A800C2F2000140584668317801299F +:101A800016D18468C0686D09A0600020A064E0647D +:101A900020654446D05904401F20034099402B0044 +:101AA0004EF200106033CEF200009B00D45119506A +:101AB00073692BB1B26901A80192002202719847A3 +:101AC00004B004BC9046F0BDFFFFFEFF4EF20003E1 +:101AD000A022C4F201039A5C824217D036229A5C9B +:101AE0001AB93C215A5CD207FCD54EF20002A02163 +:101AF000C4F20102535CDB06FCD450544EF20002E7 +:101B0000A021C4F20102535CDB06FCD47047C0463E +:101B10004EF20003262240F28001C4F20103985CD9 +:101B20001B6A8000C2F2000141585B015B0F40F666 +:101B30002422D940C2F20002116070474EF2000325 +:101B400040F2FE323649C4F2010370B599524CF2AC +:101B5000000140F200100024C4F201010C5240F2D6 +:101B6000800446F60041C2F20004C0F2DC2121608C +:101B700041F20021C0F27A01616048F2000142F2B4 +:101B80000040A1602161002240F21341C0F2F40044 +:101B9000E0605A540920A221585440F28041585C18 +:101BA00018B140F281401A545A540020FFF78EFFBA +:101BB0004EF2000300213622C4F2010399543C3155 +:101BC0005A5CD207FCD50125312200219D540B3AE5 +:101BD00099540131FF31C1F200011962985C1A6A0F +:101BE000800020585201520F40F62421D04040F28C +:101BF000FE32C2F2000108600A4999524CF200021A +:101C000040F2041340F20411C4F20102D552535AB7 +:101C1000002BFCD101210133FF33D15270BDC046EE +:101C200003A5FFFF00A5FFFF20B180231B03036076 +:101C3000002070470120FCE7F8B546F2000340F2AF +:101C4000401240F6EC1700240126C4F200039D5A0E +:101C5000C2F20007ADB22B00E340E0B21E4203D057 +:101C6000A300DB5903B1984701340D2CF3D146F2A0 +:101C7000000340F23012C4F200039D52F8BDC0468A +:101C800046F200000023C4F2000045F6FC22C0F238 +:101C900000029A1811781A00C032920001331150D4 +:101CA000202BF2D17047C04640F62022C2F200023B +:101CB0000300106810B558B1032103338B4342F27F +:101CC000D031C318C2F200018B4207D8136010BD97 +:101CD00041F6D070C2F200001060EDE701F0B4FFF1 +:101CE0000C23036001204042F1E7C04600BE70476C +:101CF00010B500F003F8FFF787FAFEE770B5002093 +:101D000082B0FEF7ADFF0024FFF718FF6B46DC71D1 +:101D1000DA1DDB7947F20003C4F204035968324844 +:101D200040F27805014040F600005960C4F204001A +:101D30000168C2F20005C907C90F11700168C9071F +:101D4000C90F117001680120C907C90F11708022E5 +:101D5000596852050A435A60FEF782FF41F6D07275 +:101D600040F29400C2F20002C2F20000121A0021F6 +:101D700001F089FF40F2000040F2800246F210516B +:101D8000C2F20000C2F20002C0F20001121A01F019 +:101D900071FF40F60053154AC4F200039C801A807C +:101DA00042F2D032C2F200029A6042F2D072C2F223 +:101DB0000002DA60FFF7ACFE0220FEF751FF40F2AE +:101DC0007C03C2F200035B1B9E10002B04DD08CDD8 +:101DD00001349847A642FADCFFF752FF002000F0DA +:101DE00007F802B070BDC046FFFFFFEF00A5FFFF80 +:101DF0007047C04670B5040001F0FEF841F630238C +:101E0000C2F20003186898B907212D4A40F6F87508 +:101E10008A4341F63421C2F200010A60486041F66B +:101E20002821C2F2000122C201224D6008601A601E +:101E30000025DCB320000723083003423AD140F6E6 +:101E4000F672431E934238D841F63424C2F200049D +:101E5000236803E01A6822B11C001300596881420C +:101E6000F8D341F62822C2F20002934225D0256819 +:101E70001A68083522600A1A102A10D91C186260E4 +:101E800041F6342258606168C2F2000200E01A0094 +:101E900013685E688E42FAD301002360146040F23A +:101EA0000803C2F200031A68511A196001F06EF9B2 +:101EB000280070BD98430830C1E70025F6E7C0460A +:101EC000300A002010B5D0B10838040001F094F8B1 +:101ED00041F634226168C2F2000200E01A00136881 +:101EE00058688842FAD3236040F20803C2F2000324 +:101EF00014601A6894466144196001F047F910BDF6 +:101F00000300012208334360C3600361002352428F +:101F1000826003607047C046002303617047C0467B +:101F200043689A684B608A609A6851609960036858 +:101F30000861013303607047020030B50C68083255 +:101F4000631C01D10DE01A0053681D68A542FAD93F +:101F50004B60996003688A600133516008610360D7 +:101F600030BD02695368F3E70369416882688A609B +:101F700051605968814206D0002202611A68013A14 +:101F80001A60186870475A60F6E7C04670B51600C8 +:101F9000026C0400856B02B376B9406801F06AFEFA +:101FA000226C63689446A26863446360013593427F +:101FB00014D32368636011E0C06801F05BFE236CFA +:101FC00021685A42E3689B18E3608B4203D2A368FE +:101FD0009C466244E260022E03D00135A5630020D6 +:101FE00070BD002DFAD1F8E7026C10B50B0052B1AC +:101FF000C16884688918C160A14201D30168C160C9 +:10200000180001F037FE10BD70B50500FFF73EFA6D +:102010004523EC5C64B2002C16DD6B6AA3B12E0084 +:10202000243605E0013CE3B25CB26BB16B6A5BB194 +:10203000300001F0C5FA0028F4D0013C01F076FB35 +:10204000E3B25CB2002BF1D14523FF22EA54FFF743 +:1020500049FAFFF71BFA4423EC5C64B2002C16DD4E +:102060002B69A3B12E00103605E0013CE3B25CB24F +:102070006BB12B695BB1300001F0A2FA0028F4D0FB +:10208000013C01F053FBE3B25CB2002BF1D14423DD +:10209000FF22EA54FFF726FA70BDC04670B504006F +:1020A0000D00002834D0FFF7F1F9216CE36B2268B2 +:1020B0004B43D0185B1AD318A0606260E3604422DF +:1020C000FF230020A063A3540132A354BDB92369A8 +:1020D0001BB9FFF707FA012070BD2000103001F096 +:1020E0006FFA0028F5D04EF600538022CEF200039E +:1020F00052055A60BFF34F8FBFF36F8FE9E720009F +:102100001030FFF7FDFE20002430FFF7F9FEE0E776 +:1021100045F6945345F6C83245F69C50C0F200038C +:10212000C0F2000240F20311C0F2000001F06EFDA7 +:1021300030B51C0083B0002833D013B3A2B10029FE +:102140004FD048230193019B482B3AD1019B012595 +:102150004623E554E0632164226001212000FFF75B +:102160009DFF200003B030BD00294AD148230193D0 +:10217000019B482B25D10122019B4623E2542200DA +:10218000E8E745F6D84345F6DC3245F69C50C0F208 +:102190000003C0F2000240F23E11C0F2000001F064 +:1021A00035FD45F6B44345F6DC3245F69C50C0F2A9 +:1021B0000003C0F2000240F23A11C0F2000001F048 +:1021C00025FD45F6785345F6DC3245F69C50C0F2C5 +:1021D0000003C0F2000240F24B11C0F2000001F017 +:1021E00015FD45F6F84345F6DC3245F69C50433183 +:1021F000C0F20003C0F20002FF31C0F2000001F0A3 +:1022000005FD45F6385345F6DC3245F69C50C0F2E4 +:102210000003C0F2000240F24311C0F2000001F0DE +:10222000F5FCC04610B50C0082B060B188421AD3EC +:1022300002230021009313000022FFF779FF00B171 +:10224000846302B010BD45F6844345F6F83245F686 +:102250009C50C0F20003C0F2000240F2B921C0F26B +:10226000000001F0D3FC45F6944345F6F83245F6FC +:102270009C50C0F20003C0F2000240F2BA21C0F24A +:10228000000001F0C3FCC046F0B54746CE4680B51D +:1022900085B00400884601921E00002800D1BCE0F1 +:1022A000002900D19AE0022E03D1E36B012B00D06C +:1022B000C3E001F043FA8146002856D040F20009FD +:1022C0004425002708E0FFF70DF92000FFF79CFEEA +:1022D00000F05CFF40F20109FFF7D8F8A36BE26B56 +:1022E000934259D3022E57D0019B002B00D189E095 +:1022F0004B46002B4CD0FFF7F5F800F07DFEFFF7C2 +:10230000C5F8635D5BB2013300D167554522A35C1C +:102310005BB2013300D1A754FFF7E4F801A902A88A +:1023200001F0B0F9002800D070E0FFF7AFF8A36B20 +:10233000E26B9342C7D1FFF7D5F820000199103026 +:1023400001F0FAF82000FFF75FFE00F01FFF002801 +:10235000C0D14EF600538022CEF2000352055A60DF +:10236000BFF34F8FBFF36F8FB4E7019B002BA7D054 +:1023700045F6786345F61C4245F69C50C0F20003D2 +:10238000C0F2000240F2F621C0F2000001F03EFC73 +:1023900002A801F069F9AEE7320041462000FFF7DC +:1023A000F5FD636A43B968B9FFF79CF8012005B0F1 +:1023B0000CBC90469946F0BD2000243001F000F995 +:1023C0000028F1D04EF600538022CEF200035205D1 +:1023D0005A60BFF34F8FBFF36F8FE5E7036C002B9D +:1023E00000D160E745F6D05345F61C4245F69C50B7 +:1023F000C0F20003C0F2000240F2F221C0F200007D +:1024000001F004FCFFF76EF80020D0E72000FFF792 +:10241000FBFD00F0BBFE0020C9E745F6945345F6EE +:102420001C4245F69C50C0F20003C0F2000240F28C +:10243000F121C0F2000001F0E9FB45F6286345F602 +:102440001C4245F69C50C0F20003C0F2000240F26C +:10245000F321C0F2000001F0D9FBC046F0B5D6462A +:102460004F4646460400C0B5894692461E000028E5 +:1024700050D059B3022E02D1E36B012B5AD1FFF792 +:10248000E5F8EFF31087012383F31088A36BE26B69 +:10249000934209D30020022E06D087F310881CBC7B +:1024A00090469946A246F0BD40F245084346E55C99 +:1024B00032006DB249462000FFF768FD6B1C18D052 +:1024C000434601356DB2E5540120E6E7036C002B6D +:1024D000D0D045F6D05345F6304245F69C50C0F278 +:1024E0000003C0F2000240F2C431C0F2000001F06B +:1024F0008DFB636A002BE7D02000243001F060F8E8 +:102500000028E1D05346002BDED0012352460120A3 +:102510001360C2E745F6945345F6304245F69C50A9 +:10252000C0F20003C0F2000240F2C331C0F200006A +:1025300001F06CFB45F6286345F6304245F69C50A9 +:10254000C0F20003C0F2000240F2C531C0F2000048 +:1025500001F05CFBF8B504000F0000284FD0036CBD +:10256000002B3CD10368CBB1FFF770F8EFF3108577 +:10257000012686F31088A26BE36B002093420AD9F0 +:102580004521635C01325BB2A2635A1C19D001334E +:102590005BB26354012085F31088F8BD8368002B7B +:1025A000E2D045F6E86345F64C4245F69C50C0F251 +:1025B0000003C0F2000240F26941C0F2000001F0E5 +:1025C00025FB636A002BE5D02000243000F0F8FFE3 +:1025D0000028DFD0002FDDD03E600120DBE745F68C +:1025E000CC6345F64C4245F69C50C0F20003C0F265 +:1025F000000240F26441C0F2000001F007FB45F622 +:10260000945345F64C4245F69C50C0F20003C0F28C +:10261000000240F26041C0F2000001F0F7FAC0464B +:10262000F0B54746CE4680B585B004008846019295 +:10263000002800D1B9E0002900D190E001F07EF837 +:1026400000286CD0FEF722FFA76B002F5BD1019B07 +:10265000C3B302A801F008F8442640F2000945255A +:10266000FEF740FF00F0C8FCFEF710FFA35D5BB271 +:10267000013301D14B46A355635D5BB2013301D1F8 +:102680004B466355FEF72EFF01A902A800F0FAFFA2 +:1026900000BBFEF7FBFEA36B4BBBFEF723FF200046 +:1026A0000199243000F048FF2000FFF7ADFC00F056 +:1026B0006DFD002847D0FEF7E9FEA76B1FBB019B0D +:1026C000002BCDD1FEF70EFF002005B00CBC9046CC +:1026D0009946F0BD2000FFF797FC00F057FDFEF78C +:1026E000D5FEA36B002BEDD0FEF7FCFEE3E7FEF773 +:1026F000F9FE2000FFF788FC00F048FDFEF7C6FE5B +:10270000A76B002FDBD041462000013FFFF76CFC98 +:10271000A7632369BBBBFEF7E5FE0120D5E7019B5C +:10272000002B00D18EE745F6786345F6604245F60A +:102730009C50C0F20003C0F2000240F20951C0F206 +:10274000000001F063FA4EF600538022CEF200033F +:1027500052055A60BFF34F8FBFF36F8FABE7036C27 +:10276000002B00D16AE745F6587345F6604245F6FE +:102770009C50C0F20003C0F2000240F20451C0F2CB +:10278000000001F043FA2000103000F019FF00288B +:10279000C1D04EF600538022CEF2000352055A609B +:1027A000BFF34F8FBFF36F8FB5E745F64C7345F618 +:1027B000604245F69C50C0F20003C0F2000240F2B5 +:1027C0000051C0F2000001F021FAC046F0B585B01A +:1027D00004000191002800D1ABE0036C002B00D075 +:1027E00097E000F0ABFF002862D0FEF74FFEA36B2E +:1027F000002B55D1019BABB302A800F035FF442656 +:1028000000274525FEF76EFE00F0F6FBFEF73EFEC4 +:10281000A35D5BB2013300D1A755635D5BB20133A9 +:1028200000D16755FEF75EFE01A902A800F02AFF5D +:10283000E8B9FEF72BFEA36B33BBFEF753FE200077 +:102840000199243000F078FE2000FFF7DDFB00F056 +:102850009DFC00283FD0FEF719FEA36B03BB019B34 +:10286000002BCFD1FEF73EFE002005B0F0BD2000CA +:10287000FFF7CAFB00F08AFCFEF708FEA36B002BF3 +:10288000F0D0FEF72FFEE6E7FEF72CFE2000FFF764 +:10289000BBFB00F07BFCFEF7F9FDA36B002BDED049 +:1028A000013BA363236913BBFEF71CFE0120DCE799 +:1028B000019B002B99D045F6786345F6704245F6AA +:1028C0009C50C0F20003C0F2000240F29A51C0F2E4 +:1028D000000001F09BF94EF600538022CEF2000377 +:1028E00052055A60BFF34F8FBFF36F8FB3E72000DD +:1028F000103000F065FE0028D6D04EF6005380223E +:10290000CEF2000352055A60BFF34F8FBFF36F8FB3 +:10291000CAE745F6CC6345F6704245F69C50C0F2D6 +:102920000003C0F2000240F29551C0F2000001F035 +:102930006DF945F64C7345F6704245F69C50C0F271 +:102940000003C0F2000240F29151C0F2000001F019 +:102950005DF9C04630B541F67074C2F20004220041 +:102960000023156825B1013308320A2BF9D130BD97 +:1029700041F67072C2F200029446DB00E1506344FB +:102980005860F4E770B5040016000D00FEF77EFDF8 +:102990004422A35C5BB2013301D10023A35445223E +:1029A000A35C5BB2013301D10023A354FEF79AFD6F +:1029B000A36B1BB12000FFF727FB70BD2000320086 +:1029C0002900243000F0D8FDF4E7C046F8B5050032 +:1029D000FEF75CFD41F6AC2341F63C24C2F2000355 +:1029E0001A68C2F2000401321A602268002A3DD03F +:1029F00041F60836C2F200063368EA6A002B2FD08F +:102A000041F6BC23C2F2000319680131196041F696 +:102A1000C023C2F200031968914200D21A6041F645 +:102A20004823C2F200039C46900080188000291DB4 +:102A30006044FFF775FAFEF755FD33687BB12368F4 +:102A4000DA6AEB6A9A420AD24EF600538022CEF23C +:102A5000000352055A60BFF34F8FBFF36F8FF8BD6D +:102A60002368DB6A9342CBD82560C9E725601B68E1 +:102A7000012B05D041F60836EA6AC2F20006BFE72C +:102A800041F64826C2F200063000FFF739FA30005E +:102A90001430FFF735FA30002830FFF731FA3000F4 +:102AA0003C30FFF72DFA41F6C427300041F6D82616 +:102AB0005030C2F20007FFF723FAC2F200063800D6 +:102AC000FFF71EFA3000FFF71BFA41F6F420C2F2BE +:102AD0000000FFF715FA41F62030C2F20000FFF7C0 +:102AE0000FFA41F60C30C2F20000FFF709FA41F686 +:102AF0004023C2F200031F6041F64423C2F20003E8 +:102B00001E60B7E741F64023C2F200031B68DB6892 +:102B1000DB685A6841F6EC23C2F200031A60704782 +:102B2000F0B5CE461D00244B00B59C46089C62447F +:102B3000236B92009C46072362449A4307001600C9 +:102B4000002935D0200000233430CA56C25412B1B7 +:102B50000133102BF9D143230022E254069B9946FE +:102B6000042B01D940F204094B46201DE362FFF714 +:102B7000D3F920001830FFF7CFF94A4605239B1AF6 +:102B8000A3615C22002324616364A364E36423657E +:102B90006365A36564623900A35430002A00FEF720 +:102BA0005FFC079B206003B11C6004BC9146F0BD34 +:102BB0003423E154D2E7C046FFFFFF3F5D2310B549 +:102BC000C35C040023B1012B09D0022B0AD110BD34 +:102BD000006BFFF777F92000FFF774F9F7E7FFF7CD +:102BE00071F9F4E746F2D40346F2BC0246F208104B +:102BF000C0F20003C0F2000240F61D71C0F20000F6 +:102C000001F004F8F0B54F464646D6468023C0B5DD +:102C100041F6B02441F6203841F6AC2641F648276B +:102C20004EF600595B05C2F20004C2F20008C2F27F +:102C30000006C2F20007CEF200099A4612E0FEF743 +:102C400025FC4346DB68DD68281DFFF78DF93368F6 +:102C5000013B33602368013B2360FEF743FC2800FF +:102C6000FFF7ACFF2368002BE9D13B68012B06D9A5 +:102C70004B4652465A60BFF34F8FBFF36F8FFEF73C +:102C800087FCEFE7F8B541F6343341F63C25040004 +:102C9000C2F20003C2F200051E6828680F0004306B +:102CA000FFF762F9631C20D02B6834195C60A642E0 +:102CB00011D841F64023C2F2000318682968043194 +:102CC000FFF73AF941F6EC23C2F200031A68A24278 +:102CD00000D91C60F8BD41F64423C2F20003186815 +:102CE00029680431FFF728F9F4E7002FDCD041F61A +:102CF0000C302968C2F200000431FFF711F9E9E74E +:102D000070B586B00B9D0C9CCDB1002C37D06025E2 +:102D10000595059D602D22D1059D0B9D02262563FD +:102D20005D25665504AD01950A9D02940095FFF757 +:102D3000F7FE2000FFF74AFE049806B070BD46F289 +:102D4000E81345F6B47246F20810C0F20003C0F270 +:102D5000000240F24D21C0F2000000F057FF46F2A1 +:102D6000242345F6B47246F20810C0F20003C0F204 +:102D7000000240F25621C0F2000000F047FF46F288 +:102D8000082345F6B47246F20810C0F20003C0F200 +:102D9000000240F24E21C0F2000000F037FFC046B2 +:102DA000F0B5CE46474680B5070085B0900088460E +:102DB00016009946FFF71EF80500E0B16020FFF706 +:102DC00019F80400D0B15D2300220563C2540D9BA5 +:102DD000029001930C9B3200009341464B46380011 +:102DE000FFF79EFE2000FFF7F1FD012005B00CBCAF +:102DF00090469946F0BD01204042F7E72800FFF7D2 +:102E000061F801204042F1E7F8B5040000283CD009 +:102E100041F63C23C2F200031B680020A34224D0E9 +:102E2000FEF734FB41F64023C2F200031E6841F670 +:102E300044236569C2F200031F68FEF753FBB542E5 +:102E400014D0BD4212D041F60C33C2F200039D42B1 +:102E50000ED041F62033C2F200039D4213D06842E7 +:102E6000454103206D4228400130F8BD0220FCE7B7 +:102E7000A36A0220002BF8D15C33E05C0138431ECA +:102E800098410230F1E70420EFE746F2CC0345F623 +:102E9000D87246F20810C0F20003C0F2000240F2FD +:102EA0006851C0F2000000F0B1FEC04670B50500E8 +:102EB000002845D041F63C24C2F200042368834236 +:102EC0000AD0FEF7E3FA41F60C336A69C2F2000356 +:102ED0009A4202D0FEF706FB70BD41F6F423AA6ABF +:102EE000C2F200039A42F5D0002AF3D12E1D300021 +:102EF000FFF73AF841F6C022C2F20002EB6A11680D +:102F00008B4200D913609800C01841F64823C2F2E2 +:102F100000039C46800060443100FFF701F82368FD +:102F2000EA6ADB6A9A42D5D34EF600538022CEF28B +:102F3000000352055A60BFF34F8FBFF36F8FC9E78D +:102F400046F2901345F6F87246F20810C0F20003FC +:102F5000C0F2000240F23871C0F2000000F056FEEC +:102F600010B5002488B007AA06A905A80594069400 +:102F7000FEF774F946F2AC1142F60540059B009449 +:102F80000293069B079A0193C0F200010023C0F24E +:102F90000000FFF7B5FED0B100F044FC012818D1C5 +:102FA000EFF3108380F3108841F6EC230122C2F284 +:102FB000000352421A6041F60833C2F2000318605F +:102FC00041F63433C2F200031C60FEF711FB08B077 +:102FD00010BD431CFBD146F2B41346F2040246F284 +:102FE0000810C0F20003C0F2000240F62001C0F257 +:102FF000000000F00BFEC04641F6B823C2F2000309 +:103000001A6801321A60704741F63433C2F2000385 +:1030100018687047F8B541F6B823DE4657464E4665 +:103020004546C2F200031B68E0B5002B63D141F6B0 +:103030003433C2F200031F6801371F60002F6DD0C8 +:1030400041F6EC2BC2F2000B5B461B6840F2000914 +:10305000BB4259D841F6402641F6C02841F63C2AE9 +:10306000C2F20006C2F20008C2F2000A33681B680E +:103070007BB33368DB68DC6863689F4200D271E031 +:10308000251D2800FEF770FFA36A1BB12000183031 +:10309000FEF76AFF4246E36A1268934201D942464C +:1030A00013609800C01841F64823C2F200039C4602 +:1030B000800060442900FEF733FF53461B68E26A34 +:1030C000DB6A9A42D2D3336840F201091B68002BB5 +:1030D000CFD15A46013B136041F63833C2F20003A8 +:1030E0001B680BB140F2010948463CBC904699462A +:1030F000A246AB46F8BD41F6B42340F20009C2F245 +:1031000000031A6801321A6041F63833C2F2000334 +:103110001B68002BE8D040F20109E5E741F64023A7 +:10312000C2F200031A681268FAB941F64422C2F2E8 +:103130000002196810681860116041F6F022C2F2AE +:1031400000021168013111601B681B683BB941F630 +:10315000EC2BC2F2000B5A46013B136074E7FFF7F9 +:10316000D1FC6DE75A461360CEE746F2402346F2A3 +:10317000280246F20810C0F20003C0F2000240F636 +:103180007E21C0F2000000F041FDC046F0B541F6DE +:10319000B824D6464F464646C2F200042368C0B55E +:1031A000002B00D186E0FEF771F92368013B236014 +:1031B0002368002B65D141F6AC23C2F200031B68E3 +:1031C000002B5ED041F6383941F6F42641F6C0278F +:1031D00041F63C28002440F2010AC2F20009C2F282 +:1031E0000006C2F20007C2F20008336833B3F36886 +:1031F000DC682000251D1830FEF7B6FE2800FEF71B +:10320000B3FEE36A3A68934200D93B609800C01865 +:1032100041F64823C2F200039C4680006044290026 +:10322000FEF77EFE43461B68E26ADB6A9A42DCD305 +:103230004B4652461A603368002BD8D174B141F620 +:103240004023C2F200031B681B68002B2FD141F6FC +:10325000EC230122C2F2000352421A6041F6B42567 +:10326000C2F200052C684CB10126FFF7D3FE08B16D +:103270004B461E60013C002CF7D12C604B461B686E +:1032800043B90024FEF72EF920001CBC9046994655 +:10329000A246F0BD4EF600538022CEF20003520546 +:1032A0005A60BFF34F8FBFF36F8F0124EAE7FFF738 +:1032B00029FCD3E746F2C82346F2180246F208106A +:1032C000C0F20003C0F2000240F68401C0F2000028 +:1032D00000F09CFC10B500284ED000293CD041F6EF +:1032E000B823C2F200031A6832BB1A6801321A60AE +:1032F00041F63433C2F200031A68036859180160BA +:10330000934216D88B4201D88A4203D2881A0021F0 +:10331000FFF7B8FCFFF73AFF50B94EF60053802292 +:10332000CEF2000352055A60BFF34F8FBFF36F8F89 +:1033300010BD8B42E8D8EDE746F2681345F6C87237 +:1033400046F20810C0F20003C0F2000240F2E84169 +:10335000C0F2000000F05AFC46F2501345F6C87265 +:1033600046F20810C0F20003C0F2000240F2E7414A +:10337000C0F2000000F04AFC46F23C1345F6C87269 +:1033800046F20810C0F20003C0F2000240F2E6412B +:10339000C0F2000000F03AFC41F6B823C2F200038C +:1033A0001B6870B533B141F638330122C2F2000315 +:1033B0001A6070BD41F6383241F6C02441F648200B +:1033C000C2F200021360C2F200042368C2F20000DD +:1033D00001E023B3013B9900CA1892008258002AE9 +:1033E000F7D041F6482541F64822C2F20005AC4626 +:1033F000C9188900C2F20002881842680831526870 +:10340000614442608A4207D0D16841F63C22C2F250 +:10341000000211602360CCE752684260F4E746F294 +:10342000C81346F23C0246F20810C0F20003C0F294 +:10343000000240F6B631C0F2000000F0E7FBC046E3 +:1034400070B5040041F63C25FEF720F8C2F20005F5 +:10345000002C46D0261D3000FEF786FDA36A1BB166 +:1034600020001830FEF780FD41F60C303100C2F22A +:103470000000FEF755FD5C23E25C012A01D1002229 +:10348000E25441F60836C2F20006FEF72BF8336824 +:103490001BB92B68A34210D070BDFDF7F7FF41F6B2 +:1034A0004023C2F200031B681B68E3B1FFF72AFB4D +:1034B000FEF718F82B68A342EED13368DBB141F672 +:1034C000B823C2F200031B6833BB4EF600538022C0 +:1034D000CEF2000352055A60BFF34F8FBFF36F8FD8 +:1034E000DAE72C68B6E741F6EC230122C2F20003CA +:1034F00052421A60DCE741F60C32C2F20002116857 +:1035000041F6AC22C2F200021268914201D12B6056 +:10351000C2E7FFF741FFBFE746F2681345F6E872DE +:1035200046F20810C0F20003C0F2000240F2E4616B +:10353000C0F2000000F06AFB10B50C0060B141F66B +:103540003C23C2F2000319681831FEF7F5FC012193 +:103550002000FFF797FB10BD46F2841346F250029D +:1035600046F20810C0F20003C0F2000240F6CD316E +:10357000C0F2000000F04AFB70B50D00140078B1F5 +:1035800041F63C23C2F2000319681831FEF7C8FC6B +:103590000CB101256D4228002100FFF773FB70BDBF +:1035A00046F2841346F2680246F20810C0F20003A5 +:1035B000C0F2000240F6F831C0F2000000F026FB35 +:1035C000C36870B5DC68002C3DD025001835280094 +:1035D000FEF7CAFC41F6B823C2F200031B68C3B170 +:1035E00041F6F4202900C2F20000FEF799FC41F6F2 +:1035F0003C23C2F200031B68E26ADB6A00209A42A5 +:1036000006D941F638330122C2F200031A600130B4 +:1036100070BD251D2800FEF7A7FC41F6C022C2F2AE +:103620000002E36A11688B4200D913609800C01849 +:1036300041F64823C2F200039C4680006044290002 +:10364000FEF76EFCD3E746F2B82346F2880246F254 +:103650000810C0F20003C0F2000240F62841C0F298 +:10366000000000F0D3FAC04641F6F023C2F2000396 +:103670001B68036041F63433C2F200031B684360E9 +:103680007047C046F8B504000D0000283DD0002961 +:103690002BD0FDF7FBFE41F634332A68C2F200035B +:1036A0001868511C1BD041F6F021C2F200010E68CF +:1036B0006768B4462668664502D0012687420AD963 +:1036C000C61BB2420DD90026121AD2192A600A6806 +:1036D0001B6822606360FDF705FF3000F8BD00261F +:1036E000F9E7002301262B60F5E746F2D81346F2EE +:1036F000A40246F20810C0F20003C0F2000240F635 +:103700009441C0F2000000F081FA46F2A01346F2A4 +:10371000A40246F20810C0F20003C0F2000240F614 +:103720009341C0F2000000F071FAC04641F6383310 +:103730000122C2F200031A607047C04641F6083306 +:10374000C2F200031B6801203BB141F6B823C2F26C +:10375000000318684342584140007047F0B541F6F5 +:10376000304483B0C2F20004FDF790FE25681DB11D +:10377000FDF7B8FE03B0F0BD41F6BC3741F6D036D8 +:10378000C2F200073800C2F20006FEF7B9FB3000B3 +:10379000FEF7B6FB41F63C33C2F200031F6041F670 +:1037A0004033C2F200031E6041F6443241F6E83372 +:1037B0000095C2F20003C2F200020C210A20FEF7BB +:1037C000B7FC20600028D3D046F28031C0F200015F +:1037D000FFF7C0F8CCE7C04610B5416000619142E8 +:1037E00006D8D21A836901249A4210D3200010BD52 +:1037F0009A4202D201249942F8D241F63C33C2F2F5 +:103800000003011D1868FEF797FB0024EEE741F660 +:103810004033C2F20003011D1868FEF78DFB00243F +:10382000E4E7C04600B589B0FFF798FF41F63043A2 +:10383000C2F200031B6813B3002307AA06A905A858 +:1038400005930693FDF718FD059B46F20841029388 +:10385000069B43F6B91001930323079A0093C0F225 +:1038600000010023C0F20000FFF74AFA41F634439A +:10387000C2F20003186010B1012009B000BD46F289 +:10388000104346F2083246F2A430C0F20003C0F200 +:10389000000240F21311C0F2000000F0B7F9C04678 +:1038A00070B51E0084B030B341F63044C2F200045B +:1038B0002568BDB101910292039005290ADCFFF74A +:1038C0003DFF022810D020680023002201A9FEF746 +:1038D000DBFC05E00023320001A92800FEF7BEFD55 +:1038E00004B070BD0020FBE720680023089A01A9FE +:1038F000FEF7CAFCF4E746F2184346F2203246F2DD +:10390000A430C0F20003C0F2000240F28211C0F203 +:10391000000000F07BF9C046F0B54746CE4641F6C0 +:103920003C3680B5C2F2000683B040F2240804277A +:103930000EE0DB68DC681A68251D28009146FEF75A +:1039400013FB236A200098474346E35C1F420FD1D4 +:1039500033681A68002AECD141F64032C2F2000204 +:1039600011681360316003B00CBC90469946F0BDFD +:10397000A3694B44994506D26360246129003068ED +:10398000FEF7DAFAE4E700234A460093002120001C +:10399000FFF786FF0028DBD146F2D83346F26C32BF +:1039A00046F2A430C0F20003C0F2000240F28431BB +:1039B000C0F2000000F02AF9F0B5DE4657464E4648 +:1039C000454641F63C3AE0B541F6403B41F6E43627 +:1039D00089B0C2F2000AC2F20006C2F2000B5346DE +:1039E0001B681D68002D00D1A4E0DB681D68FFF78F +:1039F00003FBFFF709FB33680400984200D2A8E0FC +:103A00003060854200D8B1E00022291B41F63045E4 +:103A1000C2F200052868FEF7B5FFFFF7B7FB50B903 +:103A20004EF600538022CEF2000352055A60BFF3D7 +:103A30004F8FBFF36F8F40F2240840F2020900223B +:103A400005A92868FEF7ECFD0028C8D0059B039364 +:103A5000002BF4DB079C636913B1201DFEF784FA89 +:103A6000FFF7D2FA3368070098427CD3059B376092 +:103A7000092BE4D8644A9B00D3589F464346012251 +:103A8000E35C069913434246A354A161002900D187 +:103A9000AAE0C9193B003A002000FFF79DFECEE7DF +:103AA00043460122E35C93434246A354C7E743469F +:103AB0000122E35C200013434246A354069B039378 +:103AC000039AA36994466344190013003A00FFF770 +:103AD00083FE0028B3D0236A200098474346E35C66 +:103AE0005B07ACD5A169069B8C46039363441A001F +:103AF0000023002100932000FFF7D2FE00289ED172 +:103B000046F2D83346F2503246F2A430C0F20003F7 +:103B1000C0F2000240F21331C0F2000000F076F86B +:103B200043464A46E35C1A4238D001229343424658 +:103B3000A35484E7FFF760FAFFF766FA33680400DE +:103B4000984206D35B461B6834601A6853425A4158 +:103B50005BE741F63045FFF7DFFEC2F20005346057 +:103B6000FFF714FB67E7FFF7D7FE7FE7FFF70EFBD2 +:103B700053461B68DB68DF68381DFEF7F5F9242221 +:103B8000BB5C59070ED401218B43BB5441F6304531 +:103B90003B6A38009847C2F200054CE72000FEF768 +:103BA00091F94CE7BB692200E91838002B00FFF7B8 +:103BB00013FE0028EAD000232A00009300213800D9 +:103BC000FFF76EFE0028E1D146F2D83346F23832D4 +:103BD00046F2A430C0F20003C0F2000240F2F81135 +:103BE000C0F2000000F012F846F2E03346F2503224 +:103BF00046F2A430C0F20003C0F2000240F22B31C2 +:103C0000C0F2000000F002F8E062000030B51C00D5 +:103C1000094B05001B6885B0D86852B1074B02926A +:103C2000019300912B002200054900F013F800F0E9 +:103C3000C3FB044B1A00F2E70C00002020640000D4 +:103C40002D6400005B640000014B18687047C0469B +:103C50000C0000200EB403B5010003AB044804CBF4 +:103C60000068019300F03EF802B008BC03B01847AA +:103C70000C000020002310B59A4200D110BDCC5C8E +:103C8000C4540133F8E703001218934200D170477F +:103C900019700133F9E7936810B5013B9360002B6D +:103CA00004DA9469A34207DB0A2905D01368581C7B +:103CB00010601970080010BD00F0BAFA0100F9E7B1 +:103CC000F8B506000F001400D518AC4201D1002051 +:103CD00007E021783A003000FFF7DDFF0134431C94 +:103CE000F3D1F8BDF0B5A1B003900D0017001E0090 +:103CF00020B1836905930BB900F08CFC894B9D4280 +:103D00001BD1039B5D686B6EDB0705D4AB899B05FC +:103D100002D4A86D00F01DFDAB891B0701D52B69EE +:103D2000F3B92900039800F0D5FAC8B16B6EDB0730 +:103D30000FD50120404221B0F0BD7B4B9D4202D106 +:103D4000039B9D68DFE7794B9D42DCD1039BDD68D7 +:103D5000D9E7AB899B05ECD4A86D00F0FBFCE8E744 +:103D6000002308AC6361203363761033A376079693 +:103D70003E0033780BB1252B46D1F31B059363B17D +:103D80003A0029000398FFF79BFF431C00D1B0E0E5 +:103D90006269059B9446634463613378002B00D1CC +:103DA000A7E0012200235242626004A95432521853 +:103DB000771C2360E360A3601370A3653978052244 +:103DC0005B4800F031FD7E1C00BB2268D30604D5A1 +:103DD000532304A95B1820211970130704D553231A +:103DE00004A95B182B2119703B782A2B17D03E00B1 +:103DF000002140F20A0C0127E3683278701C303A47 +:103E0000092A4BD989B917E00136B2E7484B226835 +:103E1000C01A01238340134323603700CEE7079B7A +:103E2000191D1B680791002B01DB0B9304E05B421B +:103E3000E36002231343236033782E2B0AD1737877 +:103E40002A2B34D1079B02361A1D1B680792002BC0 +:103E50002ADB0993374F31780322380000F0E4FC65 +:103E600030B14023C01B83402268013613432360D6 +:103E7000317806223048771C217600F0D5FC0028E6 +:103E800046D02E4B4BBB0722079B07339343083387 +:103E900007936369049A9B18636169E761464B4322 +:103EA00006009B183900A8E701235B42D1E70023F5 +:103EB00040F20A0C1A000127013663603178701C49 +:103EC0003039092903D9002BC4D00992C2E76346CF +:103ED0005A43060052183B00F0E707AB00932A0054 +:103EE000174B2100039800E000BF0490049B0133AE +:103EF000CFD16B6EDB0705D4AB899B0502D4A86DCF +:103F000000F028FCAB895B0600D512E70D9812E79C +:103F100007AB00932A000A4B2100039800F07EF8BB +:103F2000E3E7C046B4640000D46400009464000079 +:103F300060640000666400006A6400000000000025 +:103F4000C13C0000F7B5150001938A680B69009029 +:103F50000C00934200DA130022002B6043321278E7 +:103F60000AB101332B6023689B0602D52B6802330C +:103F70002B60062723681F403FB3230043331B7881 +:103F80005A1E93412268920630D42200019943328E +:103F90000098089EB047431C25D0062320682A6855 +:103FA000E16803400025042B03D18D1AEB43DB1796 +:103FB0001D40A3682269934201DD9B1AED1800277A +:103FC000BD4220D1002010E00137E3682A689B1A27 +:103FD000BB42D2DD22000123193201990098089ECC +:103FE000B047431CF0D101204042FEBD3020E11813 +:103FF0004331087021005A1C45310978A218433218 +:1040000002331170C1E7220001231A32019900988E +:10401000089EB047431CE6D00137D1E7F0B50E004B +:1040200089B00492039005930C00097E0E9A4336E2 +:104030006E2900D1ABE01FD8632934D009D80029FC +:1040400000D1B1E0582900D181E025004235297026 +:1040500030E0642901D06929F7D113682068191D5F +:10406000050629D51B681160002B02DA2D225B4260 +:10407000327069490A2234E0732900D198E008D8E7 +:104080006F291FD07029E0D1202321680B432360C2 +:1040900003E0752916D07829D7D12300782145333C +:1040A00019705E4957E0250013684235191D1B68D9 +:1040B00011602B70012388E01B6811604006D3D586 +:1040C0001BB2D1E713682568181D10601B682F0606 +:1040D00039D56F2956D00A224F4920000025433098 +:1040E00005706068A060002803DB04252768AF43E3 +:1040F00027600BB9350050B13500B3FBF2FC6046C8 +:104100005043181A085C013D28709A423DD9082A8C +:1041100009D12368DB0706D563682269934202DC74 +:104120003023013D2B70761B2661059B07AA009367 +:104130002100049B0398FFF705FF431C49D1012090 +:10414000404209B0F0BD6D06C3D59BB2C1E7230064 +:104150004533197030491068256808C810602F066B +:104160000CD5EA0702D52022154325601022002B2A +:10417000B3D12020256885432560AEE76F06F0D5D2 +:104180009BB2EEE724490822A7E76346B5E7136828 +:104190002568181D616910601B682F0601D519601C +:1041A00002E06D06FBD51980002335002361BCE7D2 +:1041B0001368191D11601D6862680021280000F055 +:1041C00033FB08B1401B60606368236100233370D8 +:1041D000ABE723692A0004990398059DA847431C6F +:1041E000ADD023689B0715D4079BE0689842A8DAF6 +:1041F0001800A6E722000123193204990398059EAE +:10420000B047431C9BD00135E368079A9B1AAB4229 +:10421000F0DCE9E70025F7E7716400008264000044 +:104220000023C25C0133002AFBD1581E7047FFFFF8 +:10423000F8B505000E00140018B183690BB900F041 +:10424000E9F9214B9C422CD16C68A369A360A38936 +:104250001B0730D52369002B2DD023682269F7B2C4 +:10426000981A6369F6B2834204DC2100280000F04A +:1042700033F930BBA3680130013BA36023685A1CAB +:1042800022601F706369834204D0A389DB0706D5CF +:104290000A2E04D12100280000F01EF988B9300050 +:1042A000F8BD0A4B9C4201D1AC68CEE7084B9C425A +:1042B000CBD1EC68C9E72100280000F00BF80028FA +:1042C000CBD001267642EAE7B4640000D464000053 +:1042D00094640000344B70B51D6806000C0025B1D5 +:1042E000AB6913B9280000F095F9304B9C420FD10F +:1042F0006C680C23E25E93B219072CD4D90611D452 +:1043000009230120336037331343A381404270BD3A +:10431000274B9C4201D1AC68EBE7264B9C42E8D18D +:10432000EC68E6E75B0712D5616B41B123004433CB +:10433000994202D0300000F083FA00236363242204 +:10434000A3899343A3810023636023692360082327 +:10435000A2891343A38123695BB940F2802140F213 +:104360000022A3890B40934203D02100300000F0CB +:104370001BFA0123A28913408BB10023A360636958 +:104380005B42A36123690020002BC0D10C23E25EB5 +:104390001306BCD540231343A3810138B7E7920726 +:1043A00000D46369A360EDE70C000020B464000052 +:1043B000D46400009464000010B5062000F01EFBD9 +:1043C000012000F045FEFFFFF7B58A8905000C00CB +:1043D00013075BD44B68002B04DC0B6C002B01DC57 +:1043E0000020FEBDE76A002FFAD000232E682B6064 +:1043F00041F200031A4092B3606DA3895B0705D5B3 +:104400006368C01A636B0BB1236CC01A0200216A87 +:1044100000232800E76AB847A189431C06D12B680E +:104420001D2B30D82B4ADA40D3072CD500236360EC +:1044300023692360CB0404D5431C01D12B6803B945 +:104440006065616B2E600029CAD023004433994215 +:1044500002D0280000F0F4F900206063C1E70123D6 +:10446000216A2800B847431CC7D12B68002BC4D051 +:104470001D2B01D0162B01D12E60B1E74023A2895C +:104480001343A381ADE740230B43FAE70F69002FE5 +:10449000A6D00B680F60DB1B01930023920700D1AD +:1044A0004B69A360019B002B9ADD019B3A00216AB6 +:1044B0002800A66AB047002806DC40230120A28914 +:1044C00040421343A3818CE7019B3F181B1A0193C1 +:1044D000E8E7C046010040200B6970B505000C00FC +:1044E00013B90025280070BD18B183690BB900F01D +:1044F00091F8144B9C421BD16C680C22A35E002BDC +:10450000EFD0626ED20704D49B0502D4A06D00F0F8 +:1045100020F928002100FFF757FF636E0500DB0735 +:10452000E0D4A3899B05DDD4A06D00F013F9D9E791 +:10453000054B9C4201D1AC68DFE7044B9C42DCD1C7 +:10454000EC68DAE7B4640000D4640000946400000E +:10455000002310B5040003604360836081814366DB +:10456000C281036143618361190008225C30FFF757 +:104570008AFB054B24626362044BA362044BE36233 +:10458000044B236310BDC0463D4A0000654A00004D +:104590009D4A0000C94A000010B5024900F0B8F871 +:1045A00010BDC046D944000070B568254A1E554369 +:1045B0000E002900743100F08DF9040040B1002193 +:1045C0002A00016046600C30A0606832FFF75BFB98 +:1045D000200070BD10B5024800F0BBF810BDC04609 +:1045E000C81F002010B5024800F0B4F810BDC04646 +:1045F000C81F002010B5024800F0ABF810BDC0463F +:10460000C31F002010B5024800F0A4F810BDC0463A +:10461000C31F002013B50400FFF7ECFFA36913B11B +:10462000FFF7F0FF13BDA364E3642365134B144A43 +:104630001B68A2620193A34201D10123A361200060 +:1046400000F020F86060200000F01CF8A06020005E +:1046500000F018F80022E06004216068FFF778FF9E +:1046600001220921A068FFF773FF02221221E068EE +:10467000FFF76EFF0123A361D2E7C0465C64000030 +:1046800099450000F8B50700FFF7A4FF1E4B1E6810 +:10469000B36913B93000FFF7BDFF4836B4687368DB +:1046A000013B03D533680BB33668F7E70C22A55EF0 +:1046B000D5B92000154B5830E360656600F048F826 +:1046C000FFF790FF20002560A560656025616561AA +:1046D000A561082229005C30FFF7D5FA6563A56360 +:1046E000A564E5642000F8BD6834D9E704213800EA +:1046F000FFF75AFF040030600028D5D1FFF772FFA2 +:104700000C233B60EEE7C0465C6400000100FFFF45 +:10471000F7B5040007000026019148340CB93000B9 +:10472000FEBD6368A5680093009B013B009301D523 +:104730002468F3E7AB89012B08D90E22AB5E013365 +:1047400004D029003800019B984706436835EBE701 +:10475000704770477047FFFF70B50E001D000E23B5 +:10476000C95E96B01400002907DA00232B60B389D4 +:104770001B0611D440F200430FE06A4600F0CCF96A +:104780000028F2DB4FF20002019B1340054A9B1800 +:104790005A4253412B60EDE740230020236016B0BE +:1047A00070BDC04600E0FFFFF7B502268B8905000B +:1047B0000C00334206D023004733236023610123DA +:1047C0006361F7BD01AB6A46FFF7C6FF00990700BA +:1047D000280000F07FF840B90C22A35E9A05F0D4BF +:1047E000032293431E43A681E5E70E4BAB62802371 +:1047F000A28920601343A381009B20616361019B18 +:1048000063B10E23E15E280000F098F930B1032275 +:10481000A38993431A0001231343A381A08938433A +:10482000A081CEE799450000C9B28218904201D11B +:104830000020704703788B42FBD00130F6E7FFFF82 +:1048400070B5050081B10C1F2368002B00DAE41855 +:10485000280000F095F91E4A136811002BB9636017 +:104860001460280000F094F970BDA3420BD92268AF +:10487000A018834203D118685B68821822606360C5 +:104880000C60EEE713005A680AB1A242FAD919681F +:104890005818A0420BD12068091858181960824294 +:1048A000DFD110685268411819605A60D9E7A042F8 +:1048B00002D90C232B60D4E721686018824203D10F +:1048C000106852684118216062605C60C9E7C046A8 +:1048D000381C0020F8B50323CD1C9D430835060085 +:1048E0000C2D1DD20C25A9421CD8300000F048F92F +:1048F00024490A681400CCB9234F3B6823B921002E +:10490000300000F043F838602900300000F03EF835 +:10491000431C2BD10C233000336000F039F903E045 +:10492000002DE0DA0C2333600020F8BD23685B1B08 +:1049300019D40B2B03D92360E418256003E06368C6 +:10494000A2420ED10B60300000F022F920000722B5 +:104950000B30231D9043C21A002AE6D01B1AA35025 +:10496000E3E75360EFE722006468C4E70323C41C55 +:104970009C43A042E1D0211A300000F007F8431C0C +:10498000DBD1C7E7381C00203C1C0020002370B599 +:10499000054C050008002360FDF786F9431C02D191 +:1049A000236803B12B6070BDCC1F002070B50400DC +:1049B0000D001F2904D9162303600120404270BD59 +:1049C000436C1BB18A009B181A6842B9200000F0A2 +:1049D00031F82A000100200000F01AF8EFE700206B +:1049E000012AECD0511C03D1162301302360E6E7E5 +:1049F000002428001C6090472000E0E710B5034B1E +:104A000001001868FFF7D2FF10BDC0460C0000205F +:104A1000002370B5064C050008001100236000F06B +:104A200033FB431C02D1236803B12B6070BDC04629 +:104A3000CC1F002010B500F0C5F910BD70B50C00FA +:104A40000E25495F00F0ACF8002803DB636D1B18EE +:104A5000636570BDA389024A1340A381F9E7C0468C +:104A6000FFEFFFFFF8B51F008B8905000C00160053 +:104A7000DB0505D50E23C95E0022022300F06EF887 +:104A8000A389054A28001340A38132000E23E15E6A +:104A90003B0000F01FF8F8BDFFEFFFFF70B50C0002 +:104AA0000E25495F00F05AF8A389421C03D1054A3C +:104AB0001340A38170BD41F200021343A3816065DE +:104AC000F8E7C046FFEFFFFF10B50E23C95E00F008 +:104AD00013F810BD70B50500080011000022054C48 +:104AE00022601A0000F01DF9431C02D1236803B1B3 +:104AF0002B6070BDCC1F0020002370B5054C050055 +:104B00000800236000F038F9431C02D1236803B188 +:104B10002B6070BDCC1F0020002370B5064C050033 +:104B200008001100236000F071F9431C02D12368D2 +:104B300003B12B6070BDC046CC1F0020002370B5B0 +:104B4000054C05000800236000F064FA431C02D104 +:104B5000236803B12B6070BDCC1F002070B5050029 +:104B6000080011000022054C22601A0000F0C5F870 +:104B7000431C02D1236803B12B6070BDCC1F002001 +:104B800010B50248FFF7E5FD10BDC046C41F002068 +:104B900010B50248FFF7DEFD10BDC046C41F00205F +:104BA00070B50500080011000022054C22601A00B3 +:104BB00000F04EF8431C02D1236803B12B6070BD96 +:104BC000CC1F0020094B10B50400186818B1836988 +:104BD0000BB9FFF71FFD0020132C06D8044BE4008F +:104BE000E358013301D0024BE01810BD0C00002047 +:104BF000401C0020F8B50500431C09D1FFF724F83C +:104C0000132406000027201C391CABBE041C346092 +:104C10002800F8BDF8B50500FFF716F813240600C4 +:104C20000027201C391CABBE041C28003460F8BDD2 +:104C300030B585B001AD0190029103920624201C8D +:104C4000291CABBE041C2000FFF7D4FF05B030BD0B +:104C500070B50E001500FFF7B5FF040030B9FEF780 +:104C6000F3FF092303600120404270BD2A00310098 +:104C70000068FFF7DDFF431CF7D06368281A1B1894 +:104C80006360F2E7F7B50C001600FFF79BFF050025 +:104C900038B9FEF7D9FF09230360012464422000DC +:104CA000FEBD022E03D9FEF7CFFF1623F4E7012E37 +:104CB00012D14368E418F6D46F462B680A26009395 +:104CC0007C60301C391CABBE061C3000FFF792FF25 +:104CD0000028E2DB6C60E2E7022EEDD103686F464C +:104CE00000930A36301C391CABBE061C3000FFF79F +:104CF00081FF2418431CDFD1CFE710B5FFF7C2FFB7 +:104D000010BD30B585B001AD01900291039205242C +:104D1000201C291CABBE041C2000FFF76BFF05B054 +:104D200030BD70B50E001500FFF74CFF040030B920 +:104D3000FEF78AFF09230360012040420FE02A00AA +:104D400031000068FFF7DDFF021EF5DB6368281AFB +:104D500019186160AA4202D10020FFF75BFF70BD05 +:104D600037B50224019001AD201C291CABBE041CE8 +:104D70002000FFF73FFF3EBD70B50500FFF722FFA3 +:104D8000040030B9FEF760FF0923036001204042B0 +:104D900070BD013D012D09D8094B9A681B699A42E3 +:104DA00004D101235B4203600020F1E72068FFF794 +:104DB000D7FF0028ECD101235B422360E8E7C0461F +:104DC000401C00200120704770B50C00FFF7FAFE70 +:104DD000060030B9FEF738FF092303600120404286 +:104DE00070BD42F2000362680C251343636040F219 +:104DF00000436364281C311CABBE051C2800FFF770 +:104E0000F9FE431CECD020610020E9E770B50C00EE +:104E10000500582200212000FEF735FF2800210060 +:104E2000FFF7D2FF70BD70B50D00040058220021BD +:104E30002800FEF728FF2000002100F013F80400EE +:104E4000431C0CD048F200136A68290013436B60BE +:104E5000FFF7BAFF05002000FFF78EFF2C002000AF +:104E600070BDFFFFF0B50D00002799B000902A4AF1 +:104E7000FB0001939B181C68631C39D00137142F69 +:104E8000F5D1FEF7E1FE012418236442036040E0FF +:104E90000223EC03E40F1D4200D01C4340F20163E7 +:104EA0001D4201D004231C4308231D4202D00422CA +:104EB00094431C43009B18000293FFF7B1F9746000 +:104EC000B0600124201C311CABBE061C002E0ADB86 +:104ED000114BFA009E5013000F4A3C0094460022EA +:104EE00063445A6015E03000FFF794FE040010E0C0 +:104EF00040F600232A0002AE1A409A42C8D131007F +:104F00000098FFF790FF431CC2D0FEF79DFE1123CF +:104F10000360200019B0F0BD401C0020F0B585B042 +:104F200000900191274800211500FFF79BFF040026 +:104F30002A0000210098FEF7A6FE631C15D0200071 +:104F4000FFF740FE0C260700301C391CABBE061CC8 +:104F50003000FFF74FFE032802DD0338A84207DCCC +:104F600020000124FFF708FF6442200005B0F0BDD7 +:104F700003AE042231002000FFF76AFE0328EFDDB4 +:104F80003378532BECD17378482BE9D1B378462B87 +:104F9000E6D1F378422BE3D1012201992000FFF7FB +:104FA00071FE0028DCDB2A0000992000FFF750FE8C +:104FB00005002000FFF7E0FE2800FFF71BFE0400BD +:104FC000D3E7C046F4640000F7B501240021094E80 +:104FD000094D01AF2200380031602C60FFF79EFFC1 +:104FE000002805DD02223B781C40134034602B6012 +:104FF000F7BDC046700000207400002010B5044CBE +:105000002268002A01DAFFF7DFFF206810BDC046E2 +:105010007000002070B5FFF7D5FD0925040020B908 +:10502000FEF712FE0560200070BD281C211CABBEDF +:10503000041C2000012CF7D0FEF706FE0024060019 +:105040001325281C211CABBE051C3560EBE7FFFFB8 +:105050000100012010B5024A404200F003F8C046AA +:105060002600020037B56D4600926960FFF7C6FF63 +:10507000202400B9083CFFF7C1FF18B1201C291CEF +:10508000ABBE041C009DF9E710B5062902D1024A07 +:10509000FFF7E8FF014AFBE72300020026000200B9 +:1050A000F8B5C046F8BC08BC9E467047F8B5C04687 +:1050B000F8BC08BC9E4670475465726D696E616CA1 +:1050C000000000005254540053454747455200FF2A +:1050D000303132333435363738394142434445462E +:1050E0006770745F74696D65725F696E697400FFE3 +:1050F0000D0A4750542054696D6572206F70656EBB +:1051000020415049206661696C65640D0A00000009 +:105110005B4552525D20496E2046756E6374696F1F +:105120006E3A20257328292C202573000D0A47503C +:10513000542054696D657220436C6F736520415033 +:1051400049206661696C65640D0A00000D0A4750CC +:10515000542054696D6572205374617274204150FB +:1051600049206661696C65640D0A00000D0A4750AC +:10517000542054696D6572205374617274656420A3 +:105180007375636365737366756C6C790D0A00FFE4 +:105190000D0A5265636569766572205461736B20F0 +:1051A0003A204D6573736167652072656365697642 +:1051B0006564205375636365737366756C6C790DF4 +:1051C0000A0000000D0A2020202044617461202084 +:1051D000203A20256420200D0A2020202053656ECF +:1051E000646572203A20257300FFFFFF73656D61CF +:1051F00070686F72655F7461736B5F656E747279EE +:1052000000FFFFFF0D0A2053656D6170686F7265C6 +:10521000205461736B203A205374617274696E6715 +:1052200020675F706572696F6469635F74696D653B +:10523000725F73656D2074696D6572000D0A526549 +:105240007475726E6564204572726F7220436F646C +:10525000653A203078257820200D0A000D0A205369 +:10526000656D6170686F7265205461736B203A20C0 +:1052700057616974696E6720666F722047505420C9 +:1052800049535220746F2072656C65617365207399 +:10529000656D6170686F7265200D0A000D0A2053FC +:1052A000656D6170686F7265205461736B203A2080 +:1052B00041637175697265642073656D6170686FB3 +:1052C0007265207375636365737366756C6C790DB5 +:1052D0000A0000000D0A53656D6170686F726520E9 +:1052E0005461736B203A204750542054696D6572A5 +:1052F00020436C6F736520415049206661696C657D +:10530000640D0A000D0A53656D6170686F72652047 +:105310005461736B203A204750542054696D657274 +:105320002073746F7020415049206661696C656418 +:105330000D0A00000D0A53656D6170686F7265207B +:105340005461736B203A204750542074696D657224 +:105350002073746F707065640D0A00000D0A536548 +:105360006D6170686F7265205461736B203A2053D1 +:10537000757370656E64696E672053656D617068E2 +:105380006F7265205461736B0D0A00000D0A53653E +:105390006D6170686F7265205461736B203A2041B3 +:1053A00070706C69636174696F6E20656E647320E0 +:1053B000686572652E205265737461727420746F13 +:1053C0002072756E20746865206170706C6963610D +:1053D00074696F6E20616761696E0D0A00FFFFFFDF +:1053E000640000009059000073656E6465725F741C +:1053F00061736B5F656E74727900FFFF312E300050 +:105400000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2A39 +:105410002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AEC +:105420002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ADC +:105430002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ACC +:105440002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ABC +:105450002A2A0D0A2A20202052656E657361732066 +:10546000465350204578616D706C652050726F6AAC +:1054700065637420666F72204672656552544F539F +:10548000204D6573736167652051756575652026CC +:105490002053656D6170686F7265204D6F64756C27 +:1054A0006520202A0D0A2A2020204578616D706C25 +:1054B000652050726F6A6563742056657273696FF8 +:1054C0006E20257320202020202020202020202036 +:1054D00020202020202020202020202020202020CC +:1054E00020202020202020202020202020202020BC +:1054F000202020202A0D0A2A202020466C657820B2 +:10550000536F667477617265205061636B205665D6 +:105510007273696F6E202025642E25642E25642009 +:10552000202020202020202020202020202020207B +:10553000202020202020202020202020202020206B +:105540002020202020202020202A0D0A2A2A2A2A52 +:105550002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AAB +:105560002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A9B +:105570002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A8B +:105580002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A7B +:105590002A2A2A2A2A2A2A2A2A2A2A2A0D0A526545 +:1055A00066657220746F20726561646D652E747813 +:1055B000742066696C6520666F72206D6F7265205D +:1055C00064657461696C73206F6E204578616D70DD +:1055D0006C652050726F6A65637420616E640D0A99 +:1055E00046535020557365722773204D616E756167 +:1055F0006C20666F72206D6F726520696E666F72C7 +:105600006D6174696F6E2061626F7574204672659A +:105610006552544F53204D65737361676520517512 +:1056200065756520262053656D6170686F72652011 +:105630006472697665720D0A000000000D0A4D65FE +:105640007373616765732061726520736861726549 +:1056500064206265747765656E2053656E6465725B +:105660005F5461736B2C2049535220616E64205249 +:10567000656365697665725F5461736B20666F72EE +:1056800020746865206669727374203630207365F3 +:10569000636F6E64732E0A4C617465722C205365BF +:1056A0006E64657220616E6420526563656976651B +:1056B00072205461736B732077696C6C2062652073 +:1056C00073757370656E6465642074696D657220AE +:1056D00077696C6C2062652073746F707065642EDE +:1056E0002053656D6170686F726520697320616316 +:1056F0007175697265640A616E642072656C6561BA +:10570000736564206265747765656E2053656D61AD +:1057100070686F7265205461736B20616E642049FC +:10572000535220666F7220746865206E657874200D +:105730003630207365636F6E647320616E6420532E +:10574000656D6170686F7265205461736B20697359 +:105750002073757370656E6465642E0A546F2072D1 +:1057600065737461727420746865206170706C690F +:10577000636174696F6E2C20706F77657220637936 +:10578000636C652074686520626F6172642E0A0024 +:105790000D0A2053656E6465725F5461736B203A25 +:1057A000205374617274696E6720675F70657269F7 +:1057B0006F6469635F74696D65725F6D7367712093 +:1057C00074696D65720000000D0A2053656E646592 +:1057D000725F5461736B203A204D65737361676526 +:1057E00020706F73746564206F6E205175657565E8 +:1057F000207375636365737366756C6C7900000064 +:105800000D0A2053656E6465725F5461736B203AB4 +:1058100020476F696E67206F6E2064656C61792028 +:10582000666F72203530306D730000000D0A205312 +:10583000656E6465725F5461736B203A20416674D3 +:1058400065722064656C6179206F66203530306D3B +:10585000730D0A000D0A53656E6465725F546173BF +:105860006B203A204D6573736167652051756575CE +:1058700065207265736574200D0A00000D0A53657A +:105880006E6465725F5461736B203A2047505420F8 +:1058900054696D657220436C6F73652041504920D7 +:1058A0006661696C65640D0A000000000D0A5365AD +:1058B0006E6465725F5461736B203A2047505420C8 +:1058C00054696D65722073746F7020415049206671 +:1058D00061696C65640D0A000D0A53656E6465723A +:1058E0005F5461736B203A204750542074696D6592 +:1058F000722073746F707065640D0A000D0A536531 +:105900006E6465725F5461736B203A205265636503 +:1059100069766572205461736B2053757370656E80 +:105920006465640D0A0000000D0A53656E646572BB +:105930005F5461736B203A2053656D6170686F72BC +:1059400065205461736B20526573756D65640D0A33 +:10595000000000000D0A53656E6465725F54617348 +:105960006B203A2053757370656E64696E672053BF +:10597000656E646572205461736B0D0A00FFFFFF52 +:105980004750542043616C6C6261636B00000000FF +:1059900053656E6465725F5461736B0000000000B4 +:1059A000006CDC020000000000366E010000000008 +:1059B000C510000000000000BC59000000000000FD +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E0000000FFFFDFDF000000000000006CDC02B1 +:1059F0000000000000366E0100000000390E0000BB +:105A000000000000085A0000000000000000000034 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000FFFF78 +:105A3000DFDF0000110000003C5A00000000010CF4 +:105A400001000000008000000300000000000100D1 +:105A500008010000000001060B0100000000010623 +:105A60000C01000000000000010200000000010421 +:105A700004020000040000000502000000400000D5 +:105A80000602000000000100000300000000010603 +:105A900003030000000001060403000000000113DE +:105AA000070400000000010C0904000000000104CC +:105AB0000B040000000001130E0900000000011398 +:105AC0000F09000052656365697665722054617341 +:105AD0006B00FFFF0000000053656D6170686F721E +:105AE00065205461736B00FF0000000053656E6415 +:105AF0006572205461736B00000000004A000000D2 +:105B00000000000000000000000000000000000095 +:105B100000000000000000000000000076506F72DE +:105B200074456E746572437269746963616C00FFD9 +:105B300076506F72744578697443726974696361F1 +:105B40006C00FFFF2828285343425F54797065207A +:105B50002A292028283078453030304530303055DB +:105B60004C29202B20307830443030554C292029C6 +:105B70002D3E494353522026202830783146465541 +:105B80004C202929203D3D20300000002E2E2F7270 +:105B9000612F6673702F7372632F726D5F6672650B +:105BA0006572746F735F706F72742F706F72742E82 +:105BB0006300FFFF7578437269746963616C4E65B9 +:105BC0007374696E6700FFFF785175657565476589 +:105BD0006E65726963526573657400FF785175650F +:105BE000756547656E657269634372656174655377 +:105BF000746174696300FFFF785175657565437260 +:105C000065617465436F756E74696E6753656D6128 +:105C100070686F726553746174696300785175655B +:105C2000756547656E6572696353656E6400FFFF55 +:105C300078517565756547656E6572696353656E04 +:105C40006446726F6D49535200FFFFFF78517565CE +:105C500075654769766546726F6D49535200FFFF5F +:105C60007851756575655265636569766500FFFFF6 +:105C700078517565756553656D6170686F726554AF +:105C8000616B650075784D6178436F756E74202186 +:105C90003D2030007578496E697469616C436F7599 +:105CA0006E74203C3D2075784D6178436F756E743D +:105CB00000FFFFFF757851756575654C656E6774FB +:105CC00068203E2028205542617365547970655FD5 +:105CD0007420292030000000707853746174696367 +:105CE000517565756520213D202828766F696420EF +:105CF0002A293029000000002128202820707563FF +:105D0000517565756553746F7261676520213D201B +:105D10002828766F6964202A293029202920262600 +:105D200020282075784974656D53697A65203D3D5A +:105D30002030202920290000212820282070756388 +:105D4000517565756553746F72616765203D3D20BF +:105D50002828766F6964202A2930292029202626C0 +:105D600020282075784974656D53697A6520213D36 +:105D700020302029202900007853697A65203D3D94 +:105D80002073697A656F66282051756575655F7443 +:105D9000202900FF70785175657565002E2E2F72D1 +:105DA000612F6177732F616D617A6F6E2D667265F9 +:105DB0006572746F732F6672656572746F735F6B53 +:105DC00065726E656C2F71756575652E6300FFFFDA +:105DD000212820282070764974656D546F517565AF +:105DE0007565203D3D202828766F6964202A29307A +:105DF0002920292026262028207078517565756570 +:105E00002D3E75784974656D53697A6520213D2072 +:105E100028205542617365547970655F742029208C +:105E20003055202920290000212820282078436F80 +:105E30007079506F736974696F6E203D3D20282022 +:105E4000282042617365547970655F74202920327F +:105E50002029202920262620282070785175657554 +:105E6000652D3E75784C656E67746820213D203144 +:105E700020292029000000002128202820785461B2 +:105E8000736B4765745363686564756C65725374AE +:105E90006174652829203D3D202820282042617317 +:105EA00065547970655F74202920302029202920CD +:105EB0002626202820785469636B73546F576169D4 +:105EC0007420213D20302029202900FF7078517551 +:105ED0006575652D3E75784974656D53697A6520E1 +:105EE0003D3D2030000000002128202820707851FE +:105EF000756575652D3E706348656164203D3D2084 +:105F00002828766F6964202A29302920292026260E +:105F1000202820707851756575652D3E752E785353 +:105F2000656D6170686F72652E784D75746578481F +:105F30006F6C64657220213D202828766F6964208B +:105F40002A2930292029202900FFFFFF28207078E6 +:105F5000517565756520290021282028202820708A +:105F6000764275666665722029203D3D2028287698 +:105F70006F6964202A2930292029202626202820FC +:105F800028207078517565756520292D3E757849F2 +:105F900074656D53697A6520213D20282055426142 +:105FA0007365547970655F7420292030552029204D +:105FB0002900FFFF785461736B4372656174655308 +:105FC000746174696300FFFF765461736B44656CA0 +:105FD0006179556E74696C00655461736B476574C3 +:105FE000537461746500FFFF765461736B5375736E +:105FF00070656E6400FFFFFF765461736B526573CA +:10600000756D6500765461736B537461727453637C +:10601000686564756C657200785461736B52657362 +:10602000756D65416C6C00FF785461736B496E63EC +:1060300072656D656E745469636B00FF76546173AD +:106040006B537769746368436F6E7465787400FF8F +:10605000765461736B506C6163654F6E4576656E07 +:10606000744C69737400FFFF765461736B506C61FC +:1060700063654F6E4576656E744C697374526573D3 +:106080007472696374656400785461736B52656DF2 +:106090006F766546726F6D4576656E744C69737484 +:1060A00000FFFFFF785461736B436865636B466F55 +:1060B0007254696D654F757400FFFFFF707276440E +:1060C000656C65746554434200FFFFFF707854436C +:1060D0004200FFFF70785443422D3E756353746154 +:1060E000746963616C6C79416C6C6F636174656435 +:1060F000203D3D202820282075696E74385F74206B +:1061000029203220290000002E2E2F72612F617766 +:10611000732F616D617A6F6E2D6672656572746F33 +:10612000732F6672656572746F735F6B65726E65EF +:106130006C2F7461736B732E6300FFFF7078507265 +:106140006576696F757357616B6554696D6500009D +:1061500028207854696D65496E6372656D656E744B +:10616000203E20305520290075785363686564759A +:106170006C657253757370656E646564203D3D2077 +:106180003000FFFF70784576656E744C697374005B +:10619000785461736B546F526573756D6500FFFFC2 +:1061A000707854696D654F757400FFFF49444C4524 +:1061B000000000007852657475726E20213D202821 +:1061C000202D31202900FFFF7578546F70507269BF +:1061D0006F7269747900FFFF70785469636B735450 +:1061E0006F5761697400FFFF707578537461636B5A +:1061F00042756666657220213D202828766F6964A5 +:10620000202A29302900000070785461736B427590 +:106210006666657220213D202828766F6964202AF1 +:10622000293029007853697A65203D3D2073697AC9 +:10623000656F6628205443425F74202900FFFFFFEA +:106240002820282028202820707844656C617965F2 +:10625000645461736B4C69737420292D3E75784EBC +:10626000756D6265724F664974656D73203D3D20A2 +:1062700028205542617365547970655F7420292028 +:10628000302029203F20282028204261736554793E +:1062900070655F74202920312029203A2028202889 +:1062A0002042617365547970655F74202920302025 +:1062B000292029202900FFFF7078556E626C6F63DA +:1062C0006B656454434200FF757853636865647579 +:1062D0006C657253757370656E64656400FFFFFFD3 +:1062E000AE3A0000AE3A0000AE3A0000A03A00001C +:1062F0007C3A0000203B0000AE3A0000AE3A0000BD +:10630000A03A00007C3A00007854696D65724372CF +:106310006561746554696D65725461736B00FFFF4C +:106320007854696D657247656E65726963436F6D18 +:106330006D616E6400FFFFFF70727650726F63656F +:1063400073734578706972656454696D657200FF96 +:1063500070727650726F63657373526563656976A8 +:106360006564436F6D6D616E647300FF7072765388 +:10637000776974636854696D65724C6973747300EE +:10638000546D725100FFFFFF28207854696D6572CB +:10639000506572696F64496E5469636B73203E2067 +:1063A000302029002E2E2F72612F6177732F616D9F +:1063B000617A6F6E2D6672656572746F732F667287 +:1063C000656572746F735F6B65726E656C2F74694F +:1063D0006D6572732E6300FF78526573756C74007F +:1063E0002820707854696D65722D3E7854696D650A +:1063F00072506572696F64496E5469636B73203EB5 +:106400002030202900FFFFFF546D72205376630077 +:106410007852657475726E007854696D657200000B +:106420002C2066756E6374696F6E3A200061737319 +:10643000657274696F6E2022257322206661696C13 +:1064400065643A2066696C6520222573222C206CD5 +:10645000696E65202564257325730A0010000020ED +:10646000232D302B2000686C4C006566674546473D +:1064700000303132333435363738394142434445C0 +:10648000460030313233343536373839616263642F +:10649000656600FF00000000000000000000000032 +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000003A73656D69686F7374696E67B8 +:106500002D666561747572657300FFFF0000000001 +:10651000C800000080590000F80F000010000020A3 +:1065200000000000B4640000D46400009464000023 +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000FFFFFFFFFFFFFFFF2D05000001050000DB +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:0400000300001CF1EC +:00000001FF diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..c9326e3272 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,316 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is Disabled + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 128 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: Reset is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is disabled after reset + OFS1 register settings: Voltage Detection 0 Level: 1.90 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 CTSU0_TS15 Low None "Peripheral mode" - None "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 ADC0_AN06 - - "Analog mode" - None "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 SPI0_RSPCK Low None "Peripheral mode" CMOS None "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 SPI0_SSL0 Low None "Peripheral mode" CMOS None "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 SCI0_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPIO Low None "Output mode (Initial Low)" CMOS - "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 GPIO - IRQ06 "Input mode" - None "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 SPI0_MOSI Low - "Peripheral mode" - None "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 SPI0_MISO Low - "Peripheral mode" CMOS None "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 USBFS0_VBUS Low None "Peripheral mode" CMOS None "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 CTSU0_TSCAP Low None "Peripheral mode" CMOS None "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 - - - Disabled - - "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI0_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 USBFS0_DP - - "Peripheral mode" - - "USB_FS0: DP" + P915 18 USBFS0_DM - - "Peripheral mode" - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "Timer Driver on r_gpt" + Parameter Checking: Default (BSP) + Pin Output Support: Disabled + + Module "Heap 2" + Amazon FreeRTOS + General: Custom FreeRTOSConfig.h: + General: Use Preemption: Enabled + General: Use Port Optimised Task Selection: Disabled + General: Use Tickless Idle: Disabled + Hooks: Use Idle Hook: Enabled + Hooks: Use Malloc Failed Hook: Disabled + Hooks: Use Daemon Task Startup Hook: Disabled + Hooks: Use Tick Hook: Disabled + General: Cpu Clock Hz: SystemCoreClock + General: Tick Rate Hz: 1000 + General: Max Priorities: 5 + General: Minimal Stack Size: 128 + General: Max Task Name Len: 16 + Stats: Use Trace Facility: Disabled + Stats: Use Stats Formatting Functions: Disabled + General: Use 16 Bit Ticks: Disabled + General: Idle Should Yield: Enabled + General: Use Task Notifications: Enabled + General: Use Mutexes: Disabled + General: Use Recursive Mutexes: Disabled + General: Use Counting Semaphores: Enabled + Hooks: Check For Stack Overflow: Disabled + General: Queue Registry Size: 10 + General: Use Queue Sets: Disabled + General: Use Time Slicing: Disabled + General: Use Newlib Reentrant: Disabled + General: Enable Backward Compatibility: Disabled + General: Num Thread Local Storage Pointers: 5 + General: Stack Depth Type: uint32_t + General: Message Buffer Length Type: size_t + Memory Allocation: Support Static Allocation: Enabled + Memory Allocation: Support Dynamic Allocation: Enabled + Memory Allocation: Total Heap Size: 0x1000 + Memory Allocation: Application Allocated Heap: Disabled + Stats: Generate Run Time Stats: Disabled + Timers: Use Timers: Enabled + Timers: Timer Task Priority: 3 + Timers: Timer Queue Length: 10 + Timers: Timer Task Stack Depth: 128 + General: Library Max Syscall Interrupt Priority: Priority 1 + General: Assert: assert ( x ) + General: Include Application Defined Privileged Functions: Disabled + Optional Functions: vTaskPrioritySet() Function: Enabled + Optional Functions: uxTaskPriorityGet() Function: Enabled + Optional Functions: vTaskDelete() Function: Enabled + Optional Functions: vTaskSuspend() Function: Enabled + Optional Functions: xResumeFromISR() Function: Enabled + Optional Functions: vTaskDelayUntil() Function: Enabled + Optional Functions: vTaskDelay() Function: Enabled + Optional Functions: xTaskGetSchedulerState() Function: Enabled + Optional Functions: xTaskGetCurrentTaskHandle() Function: Enabled + Optional Functions: uxTaskGetStackHighWaterMark() Function: Disabled + Optional Functions: xTaskGetIdleTaskHandle() Function: Disabled + Optional Functions: eTaskGetState() Function: Enabled + Optional Functions: xEventGroupSetBitFromISR() Function: Enabled + Optional Functions: xTimerPendFunctionCall() Function: Disabled + Optional Functions: xTaskAbortDelay() Function: Disabled + Optional Functions: xTaskGetHandle() Function: Disabled + Optional Functions: xTaskResumeFromISR() Function: Enabled + RA: Hardware Stack Monitor: Enabled + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_periodic_timer_msgq Timer Driver on r_gpt" + General: Name: g_periodic_timer_msgq + General: Channel: 0 + General: Mode: Periodic + General: Period: 1 + General: Period Unit: Seconds + Output: Duty Cycle Percent (only applicable in PWM mode): 50 + Output: Duty Cycle Range (only applicable in PWM mode): Shortest: 2 PCLK, Longest: (Period - 1) PCLK + Output: GTIOCA Output Enabled: False + Output: GTIOCA Stop Level: Pin Level Low + Output: GTIOCB Output Enabled: False + Output: GTIOCB Stop Level: Pin Level Low + Input: Count Up Source: Unused + Input: Count Down Source: Unused + Input: Start Source: Unused + Input: Stop Source: Unused + Input: Clear Source: Unused + Input: Capture A Source: Unused + Input: Capture B Source: Unused + Input: GTIOCA Input Filter: No Filter + Input: GTIOCB Input Filter: No Filter + Interrupts: Callback: periodic_timer_msgq_cb + Interrupts: Overflow Interrupt Priority: Priority 0 (highest) + Interrupts: Capture A Interrupt Priority: Disabled + Interrupts: Capture B Interrupt Priority: Disabled + + Instance "Heap 2" + Instance "g_periodic_timer_sem Timer Driver on r_gpt" + General: Name: g_periodic_timer_sem + General: Channel: 0 + General: Mode: Periodic + General: Period: 1 + General: Period Unit: Seconds + Output: Duty Cycle Percent (only applicable in PWM mode): 50 + Output: Duty Cycle Range (only applicable in PWM mode): Shortest: 2 PCLK, Longest: (Period - 1) PCLK + Output: GTIOCA Output Enabled: False + Output: GTIOCA Stop Level: Pin Level Low + Output: GTIOCB Output Enabled: False + Output: GTIOCB Stop Level: Pin Level Low + Input: Count Up Source: Unused + Input: Count Down Source: Unused + Input: Start Source: Unused + Input: Stop Source: Unused + Input: Clear Source: Unused + Input: Capture A Source: Unused + Input: Capture B Source: Unused + Input: GTIOCA Input Filter: No Filter + Input: GTIOCB Input Filter: No Filter + Interrupts: Callback: periodic_timer_semphr_cb + Interrupts: Overflow Interrupt Priority: Priority 0 (highest) + Interrupts: Capture A Interrupt Priority: Disabled + Interrupts: Capture B Interrupt Priority: Disabled + + Thread "Sender Task" + Symbol: sender_task + Name: Sender Task + Stack size (bytes): 1024 + Priority: 1 + Thread Context: NULL + Memory Allocation: Static + + Thread "Receiver Task" + Symbol: receiver_task + Name: Receiver Task + Stack size (bytes): 512 + Priority: 1 + Thread Context: NULL + Memory Allocation: Dynamic + + Thread "Semaphore Task" + Symbol: semaphore_task + Name: Semaphore Task + Stack size (bytes): 1024 + Priority: 1 + Thread Context: NULL + Memory Allocation: Dynamic + + Object "g_queue Queue" + Symbol: g_queue + Item Size (Bytes): 15 + Queue Length (Items): 4 + Memory Allocation: Static + + Object "g_binary_semaphore Binary Semaphore" + Symbol: g_binary_semaphore + Memory Allocation: Static + diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..f59a62e052 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..6f0223c83e --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "FreeRTOS Message Queue & Semaphore" +#define BANNER_INFO "\r\n********************************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n********************************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/freertos_ep.h b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/freertos_ep.h new file mode 100644 index 0000000000..7cd3605663 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/freertos_ep.h @@ -0,0 +1,45 @@ +/*********************************************************************************************************************** + * File Name : freertos_ep.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef FREERTOS_EP_H_ +#define FREERTOS_EP_H_ + +#define EP_INFO "\r\nMessages are shared between Sender_Task, ISR and Receiver_Task for the first 60 seconds.\n"\ + "Later, Sender and Receiver Tasks will be suspended timer will be stopped. Semaphore is acquired\n"\ + "and released between Semaphore Task and ISR for the next 60 seconds and Semaphore Task is suspended.\n"\ + "To restart the application, power cycle the board.\n" + +#define WAIT_TIME (500u) // Wait time for task on Semaphore and Message Queue +#define TASK_SUSPEND_COUNT (60u) // No of times the ISR executes total for a 60sec run time + +/* Message Structure */ +typedef struct { + uint8_t data; + char *task_name; +}msg_t; + +/* Task handles */ +extern TaskHandle_t receiver_task; +extern TaskHandle_t semaphore_task; + +#endif /* FREERTOS_EP_H_ */ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.c new file mode 100644 index 0000000000..5903fb8dd4 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.c @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : gpt_timer_initialize.c + * Description : Contains function definition. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" +#include "gpt_timer_initialize.h" + +/*******************************************************************************************************************//** + * @brief Initialize and start the GPT timer instance + * + * @param[in] p_timer_ctrl Timer instance control structure + * @param[in] p_timer_cfg Timer instance config structure + * @retval FSP_SUCCESS or any other error value. + **********************************************************************************************************************/ +fsp_err_t gpt_timer_init(gpt_instance_ctrl_t * p_timer_ctrl, const timer_cfg_t * p_timer_cfg) +{ + fsp_err_t fsp_err = FSP_SUCCESS; + + /* Open GPT timer instance */ + fsp_err = R_GPT_Open (p_timer_ctrl, p_timer_cfg); + /* Handle error */ + if ( FSP_SUCCESS != fsp_err ) + { + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nGPT Timer open API failed\r\n"); + return fsp_err; + } + + + /* Start GPT Timer instance */ + fsp_err = R_GPT_Start (p_timer_ctrl); + /* Handle error */ + if (FSP_SUCCESS != fsp_err) + { + /* Close timer if failed to start */ + if ( FSP_SUCCESS != R_GPT_Close (p_timer_ctrl) ) + { + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nGPT Timer Close API failed\r\n"); + } + + APP_ERR_PRINT ("\r\nGPT Timer Start API failed\r\n"); + return fsp_err; + } + else + { + APP_PRINT ("\r\nGPT Timer Started successfully\r\n"); + } + return FSP_SUCCESS; +} +/*******************************************************************************************************************//** + * @} (end addtogroup freertos_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.h b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.h new file mode 100644 index 0000000000..b5809b5006 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/gpt_timer_initialize.h @@ -0,0 +1,30 @@ +/*********************************************************************************************************************** + * File Name : gpt_timer_initialize.h + * Description : Contains function definition. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ +#ifndef GPT_TIMER_INITIALIZE_H_ +#define GPT_TIMER_INITIALIZE_H_ + +/* Function initializes the timer instance */ +fsp_err_t gpt_timer_init(gpt_instance_ctrl_t * p_timer_ctrl, const timer_cfg_t * p_timer_cfg); + + +#endif /* GPT_TIMER_INITIALIZE_H_ */ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..32fabe7016 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,28 @@ +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ +void hal_entry(void) { + /* TODO: add your own code here */ +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) { + if (BSP_WARM_START_POST_C == event) { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/receiver_task_entry.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/receiver_task_entry.c new file mode 100644 index 0000000000..6daf8396b0 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/receiver_task_entry.c @@ -0,0 +1,55 @@ +/*********************************************************************************************************************** + * File Name : receiver_task.c + * Description : Contains function definition. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "receiver_task.h" +#include "common_utils.h" +#include "freertos_ep.h" +#include "gpt_timer_initialize.h" + + +/*******************************************************************************************************************//** + * @addtogroup freertos_ep + * @{ + **********************************************************************************************************************/ + +/* Receiver Task entry function */ +/* pvParameters contains TaskHandle_t */ +void receiver_task_entry(void *pvParameters) +{ + FSP_PARAMETER_NOT_USED (pvParameters); + + /* Message variable to receive message */ + msg_t message_from_task = {RESET_VALUE}; + + while (true) + { + /* Receive messages until queue is empty and print same */ + if ( pdPASS == xQueueReceive (g_queue , &message_from_task , portMAX_DELAY ) ) + { + APP_PRINT ("\r\nReceiver Task : Message received Successfully\r\n"); + APP_PRINT ("\r\n Data : %d \r\n Sender : %s", message_from_task.data, message_from_task.task_name); + } + } +} +/*******************************************************************************************************************//** + * @} (end addtogroup freertos_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/semaphore_task_entry.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/semaphore_task_entry.c new file mode 100644 index 0000000000..6b65aabc55 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/semaphore_task_entry.c @@ -0,0 +1,138 @@ +/*********************************************************************************************************************** + * File Name : semaphore_task.c + * Description : Contains function definition. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "semaphore_task.h" +#include "common_utils.h" +#include "freertos_ep.h" +#include "gpt_timer_initialize.h" + +/*******************************************************************************************************************//** + * @addtogroup freertos_ep + * @{ + **********************************************************************************************************************/ + +/* Flag to suspend Semaphore task */ +static bool b_suspend_semphr_task = false; + +/* Semaphore Task entry function */ +/* pvParameters contains TaskHandle_t */ +void semaphore_task_entry (void *pvParameters) +{ + FSP_PARAMETER_NOT_USED(pvParameters); + + /* The rate at which the task waits on the Semaphore availability. */ + TickType_t Semphr_wait_ticks = pdMS_TO_TICKS ( WAIT_TIME ); + + APP_PRINT ("\r\n Semaphore Task : Starting g_periodic_timer_sem timer"); + /* Start GPT timer to 'Give' Semaphore periodically at 1sec for semaphore_task */ + fsp_err_t fsp_err = gpt_timer_init ( &g_periodic_timer_sem_ctrl , &g_periodic_timer_sem_cfg ); + /* Handle error */ + if(FSP_SUCCESS != fsp_err) + { + APP_ERR_TRAP(fsp_err); + } + + while (true) + { + if ( true != b_suspend_semphr_task ) + { + APP_PRINT ("\r\n Semaphore Task : Waiting for GPT ISR to release semaphore \r\n"); + + if ( pdPASS == xSemaphoreTake ( g_binary_semaphore , Semphr_wait_ticks ) ) + { + /* Print if the semaphore is acquired successfully */ + APP_PRINT ("\r\n Semaphore Task : Acquired semaphore successfully\r\n"); + } + } + else + { + /* Stop the GPT timer */ + fsp_err = R_GPT_Stop (&g_periodic_timer_sem_ctrl); + /* Handle error */ + if ( FSP_SUCCESS != fsp_err ) + { + if (FSP_SUCCESS != R_GPT_Close (&g_periodic_timer_sem_ctrl)) + { + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nSemaphore Task : GPT Timer Close API failed\r\n"); + } + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nSemaphore Task : GPT Timer stop API failed\r\n"); + APP_ERR_TRAP (fsp_err); + } + APP_PRINT ("\r\nSemaphore Task : GPT timer stopped\r\n"); + + fsp_err = R_GPT_Close ( &g_periodic_timer_sem_ctrl ); + if ( FSP_SUCCESS != fsp_err ) + { + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nSemaphore Task : GPT Timer Close API failed\r\n"); + APP_ERR_TRAP (fsp_err); + } + + APP_PRINT ("\r\nSemaphore Task : Suspending Semaphore Task\r\n"); + APP_PRINT ("\r\nSemaphore Task : Application ends here. Restart to run the application again\r\n"); + /* Suspends calling task */ + vTaskSuspend (RESET_VALUE); + } + } +} + + +/*******************************************************************************************************************//** + * @brief User defined GPT irq callback for Semaphore. + * + * @param[in] timer_callback_args_t Callback function parameter data + * @retval None + **********************************************************************************************************************/ +void periodic_timer_semphr_cb(timer_callback_args_t *p_args) +{ + FSP_PARAMETER_NOT_USED(p_args); + + /* Counter to track task suspend count */ + static uint8_t semphr_counter = RESET_VALUE; + + /* Variable is set to true if priority of unblocked task is higher + * than the task that was in running state when interrupt occurred */ + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + + /* If ISR is executed for 60sec then set the flag to suspend task */ + if( TASK_SUSPEND_COUNT == semphr_counter ) + { + /* Set flag to suspend Semaphore tasks */ + b_suspend_semphr_task = true; + } + else + { + /* Release semaphore */ + xSemaphoreGiveFromISR ( g_binary_semaphore , &xHigherPriorityTaskWoken ); + + /* Increment counter to suspend task */ + semphr_counter++; + } + + /* context switch will be performed if xHigherPriorityTaskWoken is equal to pdTRUE. */ + portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); +} +/*******************************************************************************************************************//** + * @} (end addtogroup freertos_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/sender_task_entry.c b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/sender_task_entry.c new file mode 100644 index 0000000000..d6fd2f9cb7 --- /dev/null +++ b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/e2studio/src/sender_task_entry.c @@ -0,0 +1,190 @@ +/*********************************************************************************************************************** + * File Name : sender_task.c + * Description : Contains function definition. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "sender_task.h" +#include "common_utils.h" +#include "freertos_ep.h" +#include "gpt_timer_initialize.h" + +/*******************************************************************************************************************//** + * @addtogroup freertos_ep + * @{ + **********************************************************************************************************************/ + + +/* Flag to check Message Queue task completion */ +static bool b_suspend_msqQ_task = false; + +/* Sender Task entry function */ +/* pvParameters contains TaskHandle_t */ +void sender_task_entry(void *pvParameters) +{ + FSP_PARAMETER_NOT_USED (pvParameters); + + /* Variable to store task state */ + eTaskState Task_State = RESET_VALUE; + + fsp_pack_version_t version = {RESET_VALUE}; + + /* Initialize the message to send to Message Queue */ + msg_t message_to_task = {100 , "Sender_Task"}; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet (&version); + + /* Example Project information printed on the RTT */ + APP_PRINT (BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + APP_PRINT (EP_INFO); + + /* The rate at which the task waits on the Message availability. */ + TickType_t Queue_wait_ticks = pdMS_TO_TICKS ( WAIT_TIME ); + + /* Initialize the variable used by the call to vTaskDelayUntil(). */ + TickType_t last_execution_time = xTaskGetTickCount (); + + /* Check the task state, if in running or ready state only, + * suspend Semaphore task. Semaphore task will be resumed after + * Message Queue task has completed execution */ + Task_State = eTaskGetState ( semaphore_task ); + if( (eBlocked == Task_State) || (eRunning == Task_State) || (eReady == Task_State) ) + { + vTaskSuspend (semaphore_task); + } + + APP_PRINT ("\r\n Sender_Task : Starting g_periodic_timer_msgq timer"); + /* Start GPT timer to start sending message to Message Queue periodically at 1sec from GPT callback */ + fsp_err_t fsp_err = gpt_timer_init ( &g_periodic_timer_msgq_ctrl , &g_periodic_timer_msgq_cfg ); + /* Handle error */ + if(FSP_SUCCESS != fsp_err) + { + APP_ERR_TRAP(fsp_err); + } + + while (true) + { + /* Check if flag is set, to suspend Message Queue task. If not set, + * continue sending messages to Message Queue at 500ms periodically. */ + if ( true != b_suspend_msqQ_task ) + { + + /* Send message to back of Message Queue */ + if ( pdPASS == xQueueSendToBack ( g_queue , &message_to_task , Queue_wait_ticks ) ) + { + APP_PRINT ("\r\n Sender_Task : Message posted on Queue successfully"); + APP_PRINT ("\r\n Sender_Task : Going on delay for 500ms"); + + /* Places the task into the Blocked state. The task + * will execute every 500ms once */ + vTaskDelayUntil ( &last_execution_time , WAIT_TIME ); + + APP_PRINT ("\r\n Sender_Task : After delay of 500ms\r\n"); + } + } + else + { + /* Flush the message from the Queue before suspending the task */ + if ( pdPASS == xQueueReset (g_queue) ) + { + APP_PRINT ("\r\nSender_Task : Message Queue reset \r\n"); + + /* Suspend Message Queue tasks and resume Semaphore task for Execution */ + fsp_err = R_GPT_Stop (&g_periodic_timer_msgq_ctrl); + /* Handle error */ + if ( FSP_SUCCESS != fsp_err ) + { + if ( FSP_SUCCESS != R_GPT_Close (&g_periodic_timer_msgq_ctrl)) + { + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nSender_Task : GPT Timer Close API failed\r\n"); + } + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nSender_Task : GPT Timer stop API failed\r\n"); + APP_ERR_TRAP (fsp_err); + } + APP_PRINT ("\r\nSender_Task : GPT timer stopped\r\n"); + + fsp_err = R_GPT_Close (&g_periodic_timer_msgq_ctrl); + if ( FSP_SUCCESS != fsp_err ) + { + /* Print out in case of error */ + APP_ERR_PRINT ("\r\nSender_Task : GPT Timer Close API failed\r\n"); + APP_ERR_TRAP (fsp_err); + } + + vTaskSuspend (receiver_task); + APP_PRINT ("\r\nSender_Task : Receiver Task Suspended\r\n"); + + /* Before suspending current task resume the semaphore task */ + vTaskResume (semaphore_task); + APP_PRINT ("\r\nSender_Task : Semaphore Task Resumed\r\n"); + APP_PRINT ("\r\nSender_Task : Suspending Sender Task\r\n"); + + /* Suspends calling task */ + vTaskSuspend (RESET_VALUE); + } + } + } +} + + +/*******************************************************************************************************************//** + * @brief User defined GPT irq callback for Message Queue. + * + * @param[in] timer_callback_args_t Callback function parameter data + * @retval None + **********************************************************************************************************************/ +void periodic_timer_msgq_cb(timer_callback_args_t *p_args) +{ + FSP_PARAMETER_NOT_USED (p_args); + + /* Counter to track task suspend count */ + static uint8_t msgQ_counter = RESET_VALUE; + + /* Variable is set to true if priority of unblocked task is higher + * than the task that was in running state when interrupt occurred */ + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + + /* Initialize the message to send to Message Queue */ + static msg_t message_to_task = {200 , "GPT Callback"}; + + /* If ISR is executed for 60sec then set the flag to suspend task */ + if( TASK_SUSPEND_COUNT == msgQ_counter ) + { + /* Set flag to suspend Message Queue tasks */ + b_suspend_msqQ_task = true; + } + else + { + /* Send message to Message Queue */ + if ( pdPASS == xQueueSendToBackFromISR (g_queue , &message_to_task , &xHigherPriorityTaskWoken) ) + { + /* Increment counter on successfully sending message to suspend task */ + msgQ_counter++; + } + } + /* A context switch will be performed if xHigherPriorityTaskWoken is equal to pdTRUE. */ + portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); +} + +/*******************************************************************************************************************//** + * @} (end addtogroup freertos_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/freertos/freertos_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..d5ca1d6bed0f471f2f5582b32e1020ed8dfa402f GIT binary patch literal 4436 zcmd^?-ESIK5XI*;mHHnf(tS*-D2^+&Qky4#;m{gP0N1IiKH#sE783_>o#c;idww%a zmtAZp@6if&xp(f&nRDh|X8-+X!@l{VuCMJY2q zAMAJi>f5ycgP z8q3$%t?~a%-ivK%Y~pbf5m7-g*Joyb>-$W$kwNA$6!x)uo-5LYqTI;uOt!?t!`!Zg z?#d(Lq1cJ?{`~y5?9$_t??~&~%InlIM}|f7Blid^6Ms7K_}7k{h&RHr5Yi$Xuy-a* zFbO_Te?FRIJ9$W+?`OE!V|!TYiash&mdtmB0URKN=^}J+4!Y!Wq%r1Ed2Amwix%ki zX$2zZh1QUBXmIV-5z$6VTR)YcLU}GohKPf{T2wS9Gqe z*s60-yi%(ABI96znXE&`VCYo&qxl=h1rx>N&pq~3R$#gIS-fQZ)$6jtGPIZ4RmBE& zXf5%0tUb{8k+#N)?dthJ_4bSIjPGh}DBEJc>ibCdhh@txv43ih3cIN5cG!3I8E6Dw z9o>KS-$mp2z@q2h1GgQ@VyI|`nrFqK=E@RN-~BR+N0i7ofhRL*3DtovtcJ4Mv)8(V zgkPy%Pa}OH0`)-O+rFY`E!dgEe@_?L@8~%#4)lDi_`AM#NAp{H>c|T#h% z5&>)(p)Gs|Vl}hIXLF9M+d@dxBS+A+{X62}r=_{fxZ_#v2m!po^tODF-B3~S-16s8 zjBHv<{%DO8reZTL^0u02)^4O!j)Du-Oke5CA zMx(l(&C1LjPyM9kRMuj+Oric1|)_3Ud92d8~sy@pvGQFa~#I#i_^s#CI~cdM*Tdv|z{8J%b|FM+%%MYG)5{ZZzv04N;SNCudgfiWN@K*h}^EChIv)hd5)a^CnNHfsk+}p>x*N zdR5iyDQgUS*sK1{zN9{S!>fy3&{G%i*8bFgKD`ah(x=j`j&;AWAKmhSxT3cz`n*>U zaq0aizoR$G^>dA!$>vf%r|Nm=wdtv&7wh<)empvmSKezxzmdJ@z*o~rMXyE-x>5S# zb6r#YUdY4T{#y2Tbm?@D^e-Tv$?KJ#pK0{Ih|%5Ljuwxw^I$FZ@Rrz3d}*`V+unw5 zU+lA=>ARvwhfi|g9fZ!1K9aWz`h7U#eP)%>^{k1Bj+=TD;<^+|XbT%Hd7bIb`^(JL zDfYc=!h(|_at6y>SLlSM*+tL2gXHZ5hMIY!9cqBF%AJn&RG;y(viRp+*Dttuu63LV zeaE}LGL;XWhy^-o?LMu^49pdZ$SEo(a)#}>*r((E;9l!2G(C`i#HF)A#oRHG{oOi- zKHuG`4jR9A4eQ$6wlk7R-q1$MAl}F>mO7&=J9V_Omm*uaI-4kHDQUj7W7Gt zsl8BVQ%{vT&9PvpS`Ej6puU?w#msG$oA1{7Zj*ID4E8(vSMR9j_D*B$oUCY0DfSfK T3*SxP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..06849f47ea --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + kint_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..ace9770ab9 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,17 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=1570288955,ra/board/ra2a1_ek/board_leds.h|811579141,ra/board/ra2a1_ek/board_init.c|1634941367,ra/board/ra2a1_ek/board_leds.c|3781303622,ra/board/ra2a1_ek/board_init.h|1192771973,ra/board/ra2a1_ek/board.h +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h|2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=1719600019,ra/fsp/inc/fsp_version.h|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|3667622829,ra/fsp/inc/instances/r_ioport.h|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|860418405,ra/fsp/inc/fsp_common_api.h|2319720569,ra/fsp/inc/fsp_features.h|2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c|2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1533961824,ra/fsp/inc/api/r_ioport_api.h|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|3241443262,ra/fsp/inc/api/bsp_api.h|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=3667622829,ra/fsp/inc/instances/r_ioport.h|3642215214,ra/fsp/src/r_ioport/r_ioport.c|1533961824,ra/fsp/inc/api/r_ioport_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_kint\#\#\#\#0.8.0/all=737479228,ra/fsp/inc/instances/r_kint.h|2405179742,ra/fsp/inc/api/r_keymatrix_api.h|1278080354,ra/fsp/src/r_kint/r_kint.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_kint\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..317de65114 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=PinConfiguration +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..3a0c7e28a4 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..253f23cad3 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,172 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.align_composite_type_declarators=false +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=82 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=82 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=false +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_preprocessor_directives=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_identifier_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_expression=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=120 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..8f9798f9bd --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..40f2dbde79 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..8c0743e34f --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Key Input + Renesas.RA.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.jlink b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.launch b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.launch new file mode 100644 index 0000000000..ed86527a1a --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep Debug.launch @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..c3bc14d597 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/kint_ek_ra2a1_ep.hex @@ -0,0 +1,473 @@ +:10000000D00D002089150000151500008515000091 +:100010008515000085150000851500000000000012 +:100020000000000000000000000000008515000036 +:1000300085150000000000008515000085150000F2 +:10004000611100000000000000000000000000003E +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFDFCEFFFFFCFF0F00FFFF0F002E +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F21C04C2F20004237863B940F233 +:100510000003C0F200032BB141F62850C0F20000E6 +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2200141F6285043 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F0B5C646C3680E00816805008846CF1A0C +:10056000416800B5C8189C18974206D9310001F0BF +:10057000C3F8EC6004BC9046F0BD3A00310001F0D5 +:10058000BBF84346E41AF1192200686801F0B4F898 +:10059000EC60EFE7F8B54746CE46884680B51600D2 +:1005A0000700C568846840F200091AE0013B5B1B44 +:1005B000641BB44200D934009C4200D91C007B6803 +:1005C00022005819414601F097F82D19A144A04482 +:1005D000361BBC68631B5A1E93415B421D40FD6085 +:1005E00036B13B699D42E1D3013B1B195B1BDFE741 +:1005F00048460CBC90469946F8BDC04670B540F2DE +:1006000094440323C2F200042361636140F258035F +:1006100041F23472C2F20003E36140F20043C0F2DF +:100620000002A261226640F2380241F240712025A8 +:1006300023620023C2F200026266E01DC0F20001E4 +:100640000422A3626362E362A5662367E3666367CD +:1006500001F052F841F24473C0F200031A682260BC +:100660009B88A571A38070BD431C70B515005A000E +:10067000D21840F29443D200C2F20003D61840F2DE +:100680009442C2F20002944643001B18DB0063440C +:10069000DC6A012C0BD0CCB1022C06D12A00300030 +:1006A000FFF778FF0400200070BD0024FBE79A6A82 +:1006B000586A82421DD9013A121A2C00954200D97B +:1006C000140022003000FFF743FFECE79A6A586AF3 +:1006D000824209D9013A121A9542E4D82A00300020 +:1006E000FFF736FF2C00DEE71B6AD218013A121A18 +:1006F000F2E71B6AD218013A121ADEE7F8B540F2A7 +:100700009443C2F200031B7805005BB20E00170091 +:1007100063B1EFF31084012181F310883A003100B6 +:100720002800FFF7A1FF84F31088F8BDFFF766FFEC +:10073000EFE7C04610B5040083686268581C904219 +:1007400007D82268D154E36862680133E36003008C +:10075000A0609A4200D010BD21682069FFF7CEFF4B +:10076000A368984203D001235B42E360F3E70023D0 +:10077000A360F0E7F8B54E4645465746DE46E0B57D +:100780001E000A9B80460F0015009946914200D238 +:1007900077E00B000122B3FBF5F301329D42FAD959 +:1007A000B246964200D2924601230B9A1A409346D3 +:1007B000002A5AD14B46002B57D00B9B20249B0775 +:1007C00058D4D14502D850E0D1450ED001235B4228 +:1007D0009C4621004046E144FFF7ACFF4346DB68FE +:1007E000002B3CDB4B46002BEED10124012E03D91C +:1007F000013E6C43012EFBD8B7FBF4F39D42F8D9C0 +:1008000041F24C76C0F2000606E0B4FBF5F3AC42D0 +:100810000DD31C00B7FBF3F322005A43F1564046B8 +:10082000BF1AFFF787FF4346DB68002BEDDA5B4614 +:10083000ABB14B469BB1CA4502D310E0D1450ED0B7 +:1008400001235B429C4620214046E144FFF772FFB2 +:100850004346DB68002B02DB4B46002BEED13CBC51 +:1008600090469946A246AB46F8BD4346DB68002B4E +:10087000BBDAF4E774427441634210241C40203414 +:100880009FE701228CE7C046F0B55746DE464E464C +:100890004546E0B59DB00CAB9B46079340230893BB +:1008A00000230C009146042740F2010A02900993AC +:1008B0000B900A93002161560134002900D1AAE06F +:1008C00025290CD007A8FFF735FF0A980028F1DA90 +:1008D0001DB03CBC90469946A246AB46F0BD0023F5 +:1008E000E356621C00260225082110002B2B0DD098 +:1008F0002B2B0EDD2D2B57D0302B0FD114002E4378 +:100900000023E356621C10002B2BF1D13E43140050 +:10091000F6E7232B02D10E431400F1E7190030391A +:10092000C9B2092900D980E00025B4462E001D0077 +:1009300001E014000132B3009B195B005B19002534 +:100940005557303B28003038C0B211001E0009282E +:10095000EFD92B00A01C350066462E2B69D0002352 +:100960000C00CB5640F2000801E00023E3561A00C9 +:100970000134BA43682AF8D0642B77D03DDD732B5D +:1009800000D1C6E026DD752B12D14B4649461B68C7 +:1009900007A81A1D0A6019680A22019600954346A5 +:1009A000FFF7E8FE0A9891E7534614001E43A7E7B5 +:1009B000782B00D089E74B4649461B6807A81A1DCB +:1009C0000A6019681022019600954346FFF7D2FE8F +:1009D0000A987BE7702B00D077E74B4649461B68A7 +:1009E00007A81A1D0A6019680023019308330093B1 +:1009F0001022FFF7BFFE0A9868E7582BDBD0632B65 +:100A000000D19AE0252B00D05FE707A82521FFF74A +:100A100091FE0A985AE70A98002800DC58E7099ADC +:100A2000002A00D095E0801852E7210000252E2BE7 +:100A300095D10123CB5604001A00303AD2B240F2CD +:100A40000008092A93D81900404683001B185B0050 +:100A50005B18002101346156303B0A00303AD2B2B3 +:100A60001800092AF1D90B00804680E74B46494619 +:100A70001B681A1D1B680A60DA1703939B18534002 +:100A80000122092B07DD0A2000E00B0093FBF0F1A7 +:100A90000132632BF9DC43460493904561D3022372 +:100AA000334095B3039A002A61DB37425FD10BB123 +:100AB000434653B35346334227D135B3049B9D423B +:100AC00023D905961E0001E0B5420AD007A82021CF +:100AD000FFF730FE0A98013D002800DAF8E6002D05 +:100AE000F2D1059E039B002B43DB37424CD10323FD +:100AF0003340022B4DD007A80196009543460A22A9 +:100B00000399FFF737FE0A98E0E60A980028E9DA29 +:100B1000DEE64B4649461B681A1D0A601D6806E062 +:100B200007A8FFF707FE0A98002800DAD0E60021A0 +:100B3000695601350029F3D1C7E64B4649461B6883 +:100B400007A81A1D0A6000215956FFF7F3FD0A98FD +:100B5000BCE659460298FFF7D1FD0A98099A801819 +:100B6000B6E6022304923340002DCED09AE7013D31 +:100B70009DE75B422D2107A80393FFF7DBFD0A9851 +:100B8000002800DAA4E6B2E72B2107A8FFF7D2FD80 +:100B9000F5E74346002BAED18DB1049B9D4203D8AF +:100BA000A9E7049B9D42A6D007A83021FFF7C2FD0C +:100BB0000A98013D002800DA8AE6002DF1D10025CF +:100BC00099E7C0460EB400B582B003AB02CB01AAD0 +:100BD0000193FFF759FE02B008BC03B01847C046A6 +:100BE00040F2445010B5C2F2000000F059FA00B9CA +:100BF00010BD41F2707341F2687241F29471C0F21B +:100C00000003C0F20002C0F200010020FFF7DAFF8B +:100C1000EEE7C046F0B583B06B469F1D01236A46E0 +:100C20005B42040040F23C503B800023561D01AD66 +:100C3000002240F20131C2F200002B70337000F04C +:100C4000D1FA002800D0B9E0012340F23C505B42C9 +:100C50003A0040F20031C2F200003B8000F0AAFAF4 +:100C6000002800D092E03B881A0022415B085340E4 +:100C700001221A4200D12A7040F23C50012240F277 +:100C80000131C2F2000000F0ADFA002800D065E0AA +:100C900040F23C50002240F20231C2F2000000F06B +:100CA000A1FA002842D1012340F23C505B423A00B5 +:100CB00040F20031C2F200003B8000F07BFAE8B95C +:100CC0003B881A0022419B08534001221A4200D15E +:100CD0003270033C631E9C412B7841341BB1337846 +:100CE000002B00D182E033781BB12B78002B00D190 +:100CF00089E0002333702B7003B0F0BD41F6B032B1 +:100D000041F67031BE23C0F20002C0F200010020A3 +:100D1000FFF758FFFFF764FF41F690310122C0F260 +:100D200000010020FFF74EFF00BEC9E741F6284250 +:100D300041F67031BA23C0F20002C0F20001002077 +:100D4000FFF740FFFFF74CFF41F690310122C0F260 +:100D500000010020FFF736FF00BEA4E741F6EC32A9 +:100D600041F67031B923C0F20002C0F20001002048 +:100D7000FFF728FFFFF734FF41F690310122C0F260 +:100D800000010020FFF71EFF00BE81E741F6B032F0 +:100D900041F67031B023C0F20002C0F20001002021 +:100DA000FFF710FFFFF71CFF41F690310122C0F260 +:100DB00000010020FFF706FF00BE54E741F6343281 +:100DC00041F67031AC23C0F20002C0F200010020F5 +:100DD000FFF7F8FEFFF704FF41F690310122C0F261 +:100DE00000010020FFF7EEFE00BE2DE741F6644152 +:100DF0002200C0F200010020FFF7E4FE3378002B50 +:100E000000D176E771E741F684412200C0F200018B +:100E10000020FFF7D7FE6CE7002330B585B002ACA9 +:100E200020000293039300F03BFB6278E378019289 +:100E3000A27841F2B471009241F2B072C0F20001A6 +:100E4000C0F200020020FFF7BDFE41F68C11002029 +:100E5000C0F20001FFF7B6FE41F6A44140F2445053 +:100E6000C0F20001C2F2000000F0D4F80400002833 +:100E700000D07CE040F24450C2F2000000F038F9AB +:100E80000400002800D08BE041F6A82140F258442D +:100E9000C0F200010020FFF795FEC2F20004012518 +:100EA00021E0802B02D10420FFF7B4FE40F23C5039 +:100EB000012240F20131C2F2000000F093F9002853 +:100EC0003DD140F23C50012240F20231C2F200001A +:100ED00000F088F9D8B90023039340F2E83140F2DA +:100EE000901000F0E9FA2368002BF6D0EFF310839E +:100EF00085F31088226803920022226083F3108811 +:100F0000039B402BCDD10320FFF784FECEE741F6B3 +:100F1000F82241F670317623C0F20002C0F20001DF +:100F20000020FFF74FFEFFF75BFE41F690310122F4 +:100F3000C0F200010020FFF745FE00BECBE741F6FE +:100F4000EC3241F670317623C0F20002C0F20001AB +:100F50000020FFF737FEFFF743FE41F690310122F4 +:100F6000C0F200010020FFF72DFE00BEA9E741F608 +:100F7000642341F25C7241F29471C0F20003C0F24A +:100F80000002C0F200010020FFF71CFE41F6903184 +:100F90002200C0F200010020FFF714FE00BE69E746 +:100FA00041F6842341F25C7241F29471C0F2000375 +:100FB000C0F20002C0F200010020FFF703FEFFF7BD +:100FC0000FFE41F690312200C0F200010020FFF731 +:100FD000F9FD00BE58E7C04610B5022800D010BD8C +:100FE00041F6B84140F23C50C0F20001C2F20000AC +:100FF00000F090F9F3E7C04628B140F25843426848 +:10100000C2F200031A60704710B5FFF705FF002019 +:1010100010BDC046F0B50300D0B3C9B38A68BAB3F7 +:1010200006240C57002C33DB0068002832D10A68F4 +:10103000FF2A31D8802259600D7940F200371543DC +:101040000022C4F20802157010724EF20012CEF2A5 +:1010500000029446A508AD006544EA59032694466B +:101060004A79FF2126409201F6000A40B240B14081 +:1010700066468E433243EA5140F25052A400C2F217 +:101080000002A35044F65462C4F649321A6000E0EC +:101090000120F0BD0E20FCE740F27A50F9E7C0468F +:1010A00018B344F654630268C4F649339A421AD11D +:1010B00006221F2143689A561140530901228A4093 +:1010C0004EF200112033CEF200019B005A50BFF3C4 +:1010D0004F8FBFF36F8F00220023C4F208021372F8 +:1010E0000360002070470720FCE70120FAE7C046B4 +:1010F00010B500282FD044F654630268C4F6493373 +:101100009A4226D100234268C4F208031178134C96 +:101110001972002119710623D35646F200011A00F4 +:10112000C032C4F2000192005058204050501F219C +:10113000012219408A404EF20011CEF200018C4685 +:1011400040F2801100205B099B0063445A501A60F2 +:1011500010BD0720FCE70120FAE7C046FFFFFEFFB5 +:1011600070B582B0EFF3038340F25052103B5BB294 +:101170009900C2F200028D5846F200000021C033EF +:10118000C4F20801C4F200009B000A79084E1C5802 +:10119000D2B234401C50D343DBB20B716B6868464B +:1011A000D968019200919B68984702B070BDC04613 +:1011B000FFFFFEFF90B145F254230068C5F24F03D4 +:1011C00098420DD152B10023C4F204039C46002082 +:1011D000090A490161444B68138070470120FCE70C +:1011E0000720FAE700B345F254230068C5F24F0325 +:1011F000984213D1012A15D8FF2301200B409840B3 +:101200004FF6FF7303405AB10022C4F20402944621 +:101210000020090A490161448B6070470720FCE700 +:101220000304F1E70320F8E70120F6E7F0B5DE4616 +:1012300057464E464546E0B583B0EFF31082012392 +:1012400083F3108840F24C53C2F2000301931B68F1 +:1012500033B940F60054C4F20404E3704033E37041 +:10126000019C23680133236082F31088038883B3D1 +:101270000B6840F600049846254B002240F2FF0C14 +:101280009946C4F20404D10041448E888025330A73 +:101290009A4663461E40534609686D021B01294267 +:1012A0000FD04F469D19AD00AA462D593D40AB4683 +:1012B00055465F462F514D460D40AB4655465F465D +:1012C0002F519B199B0019510132038892B293420E +:1012D000D9D8EFF31082012383F31088019B1B6898 +:1012E0001BB101990B68013B0B60019B1B6833B973 +:1012F00040F60051C4F20401CB708033CB7082F30E +:10130000108803B03CBC90469946A246AB46F0BD5F +:10131000FFFFFEFF10B50B0080B179B14A686AB1DA +:1013200045F254220168C5F24F02914208D0026092 +:10133000191D1800FFF77AFF002010BD0120FCE7FF +:101340000E20FAE74EF20003A022C4F201039A5CD9 +:10135000824217D036229A5C1AB93C215A5CD207D5 +:10136000FCD54EF20002A021C4F20102535CDB0660 +:10137000FCD450544EF20002A021C4F20102535C8E +:10138000DB06FCD47047C0464EF20003262240F232 +:101390000801C4F20103985C1B6A8000C2F20001DC +:1013A00041585B015B0F40F29042D940C2F200020B +:1013B000116070474EF2000340F2FE323649C4F22B +:1013C000010370B599524CF2000140F20010002464 +:1013D000C4F201010C5240F2080446F60041C2F288 +:1013E0000004C0F2DC21216041F20021C0F27A0148 +:1013F000616048F2000142F20040A16021610022D8 +:1014000040F21341C0F2F400E0605A540920A221D6 +:10141000585440F28041585C18B140F281401A544F +:101420005A540020FFF78EFF4EF2000300213622AF +:10143000C4F2010399543C315A5CD207FCD5012512 +:10144000312200219D540B3A99540131FF31C1F2F0 +:1014500000011962985C1A6A800020585201520FEC +:1014600040F29041D04040F2FE32C2F200010860EA +:101470000A4999524CF2000240F2041340F204115E +:10148000C4F20102D552535A002BFCD10121013381 +:10149000FF33D15270BDC04603A5FFFF00A5FFFF7B +:1014A00020B180231B030360002070470120FCE76C +:1014B00001380028FCD1704740F290424CF60023DE +:1014C0004143C2F2000270B51468C3F69A330D00AE +:1014D000B3FBF4F4080040F2E8320023002100F0EE +:1014E000DFF831B9B0FBF4F0800808B1FFF7E0FF96 +:1014F00070BDA400B5FBF4F040F2E83200230021F7 +:1015000000F0CEF80029F0D001204042FFF7D0FFD4 +:10151000EEE7C046F8B546F2000340F2401240F252 +:101520005C4700240126C4F200039D5AC2F2000762 +:10153000ADB22B00E340E0B21E4203D0A300DB5962 +:1015400003B1984701340D2CF3D146F2000340F269 +:101550003012C4F200039D52F8BDC04646F20000AE +:101560000023C4F2000041F60852C0F200029A18AB +:1015700011781A00C032920001331150202BF2D1A1 +:101580007047C04600BE704710B500F003F8FFF783 +:101590003BFDFEE770B5002082B0FFF71DFD002483 +:1015A000FFF708FF6B46DC71DA1DDB7947F20003B9 +:1015B000C4F204035968374840F20005014040F680 +:1015C00000005960C4F204000168C2F20005C907B6 +:1015D000C90F11700168C907C90F11700168012096 +:1015E000C907C90F11708022596852050A435A6011 +:1015F000FFF7F2FC40F2D05240F21C00C2F20002AF +:10160000C2F20000121A002100F07FF840F2000040 +:1016100040F2080241F62C51C2F20000C2F2000270 +:10162000121AC0F2000100F067F840F600531A4A9F +:10163000C4F200039C801A8040F6D012C2F200026D +:101640009A6040F6D052C2F20002DA6046F200021E +:1016500040F2201141F20000C4F200025052012277 +:101660009A80FFF791FE0220FFF7B6FC40F20403D8 +:10167000C2F200035B1B9E10002B04DD08CD013479 +:101680009847A642FADCFFF769FF002000F006F851 +:1016900002B070BDFFFFFFEF00A5FFFF7047C0461F +:1016A000F0B54FF6FF75CE4647462C00154080B585 +:1016B0002F000440160C9946030C5D4367437343A7 +:1016C00066433C0C7619A4199C46A54203D9802395 +:1016D0005B029846C4444B464FF6FF764343514362 +:1016E000250C374065442404E4195B19591820007F +:1016F0000CBC90469946F0BD002310B59A4200D12B +:1017000010BDCC5CC4540133F8E7030012189342B7 +:1017100000D1704719700133F9E7FFFFF8B5C046F3 +:10172000F8BC08BC9E467047F8B5C046F8BC08BC7B +:101730009E4670475465726D696E616C00000000D2 +:101740005254540053454747455200FF303132331D +:1017500034353637383941424344454668616C5F19 +:10176000656E74727900FFFF636C65616E75700061 +:101770000D0A202A20525F4B494E545F436C6F7311 +:101780006520415049206661696C6564202A200DFE +:101790000A0000005B4552525D20496E2046756E7E +:1017A0006374696F6E3A20257328292C20257300F5 +:1017B000312E30000D0A2A2A2A2A2A2A2A2A2A2ADF +:1017C0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A79 +:1017D0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A69 +:1017E0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A59 +:1017F0002A2A2A2A2A2A2A2A0D0A2A202020526541 +:101800006E6573617320465350204578616D706C2E +:10181000652050726F6A65637420666F7220725F14 +:101820006B696E74204D6F64756C652020202020DC +:101830002020202020202020202020202A0D0A2ABD +:101840002020204578616D706C652050726F6A654C +:1018500063742056657273696F6E20257320202093 +:101860002020202020202020202020202020202078 +:101870002020202020202020202020202020202A5E +:101880000D0A2A202020466C657820536F667477F5 +:10189000617265205061636B2056657273696F6E6B +:1018A000202025642E25642E256420202020202041 +:1018B0002020202020202020202020202020202028 +:1018C0002020202020202A0D0A2A2A2A2A2A2A2AF1 +:1018D0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A68 +:1018E0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A58 +:1018F0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A48 +:101900002A2A2A2A2A2A2A2A2A2A2A0D0A526566D5 +:10191000657220746F20726561646D652E747874D1 +:101920002066696C6520666F72206D6F7265206439 +:10193000657461696C73206F6E204578616D706CA1 +:10194000652050726F6A65637420616E640D0A468B +:10195000535020557365722773204D616E75616C0D +:1019600020666F72206D6F726520696E666F726D92 +:101970006174696F6E2061626F757420725F6B694C +:101980006E74206472697665720D0A000D0A0D0A84 +:101990005468652070726F6A6563742064656D6F4A +:1019A0006E73747261746573204B494E54206D6F71 +:1019B00064756C6520666F72202832783229206B3E +:1019C0006579732070726F63657373696E672E0D2E +:1019D0000A506C6561736520636F6E6E6563742079 +:1019E0006D6174726978206B657970616420746FC1 +:1019F000204D43552070696E73206173206D656EB4 +:101A000074696F6E656420696E20726561646D65CE +:101A10002066696C650D0A4F6E20707265737320C5 +:101A20006F66206B65792C20746865206B65792062 +:101A30006576656E7420697320646574656374658A +:101A40006420616E6420646973706C6179656420E0 +:101A50006F6E20525454207669657765720D0A0DB9 +:101A60000A0000000D0A202A204B494E54206F70B6 +:101A7000656E20415049206661696C6564202A20AA +:101A80000D0A00000D0A202A20525F4B494E545F78 +:101A9000456E61626C6520415049206661696C65E4 +:101AA00064202A200D0A00000D0A202A2A204B4912 +:101AB0004E54206F70656E20616E6420656E6162A9 +:101AC0006C6564206E6F772C205072657373206B89 +:101AD00065792066726F6D206B6579706164206135 +:101AE0007474616368656420746F204D4355202AC7 +:101AF0002A200D0A00000000525F494F504F5254F7 +:101B00005F50696E57726974652826675F696F70E8 +:101B10006F72745F6374726C2C20524F575F422C4B +:101B2000204253505F494F5F4C4556454C5F4849F2 +:101B300047482900525F494F504F52545F50696ED9 +:101B400057726974652826675F696F706F72745F7A +:101B50006374726C2C20524F575F412C20425350BB +:101B60005F494F5F4C4556454C5F4C4F572900002D +:101B7000257320415049206661696C656420617459 +:101B8000204C696E65206E756D626572202564005B +:101B90000D0A52657475726E6564204572726F72BB +:101BA00020436F64653A203078257820200D0A00A4 +:101BB000525F494F504F52545F506F72745265617B +:101BC000642826675F696F706F72745F6374726CEC +:101BD0002C204B45595041445F504F52542C2026E5 +:101BE000706F72745F64617461290000525F494FC5 +:101BF000504F52545F50696E57726974652826675A +:101C00005F696F706F72745F6374726C2C20524FD7 +:101C1000575F412C204253505F494F5F4C4556451A +:101C20004C5F484947482900525F494F504F525432 +:101C30005F50696E57726974652826675F696F70B7 +:101C40006F72745F6374726C2C20524F575F422C1A +:101C5000204253505F494F5F4C4556454C5F4C4FB7 +:101C6000572900000D0A202A2A436F6C756D6E20DB +:101C7000256320616E6420526F7720412A2A200D4F +:101C80000A0000000D0A202A2A436F6C756D6E2031 +:101C9000256320616E6420526F7720422A2A200D2E +:101CA0000A000000C000000001020000F90F00005F +:101CB000000000000000000009000000C01C00003F +:101CC0000000010008010000000000000102000007 +:101CD00004000000050200000040000006020000B1 +:101CE00000000100000300000500000001030000E7 +:101CF00005000000020300000000010803030000CB +:101D00000000010804030000330000000000000090 +:101D100000000000000000000000000000000000C3 +:0C1D2000000000000000000000000000B7 +:081D2C002D0500000105000077 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:04000003000015895B +:00000001FF diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..de9941f53e --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,179 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is Disabled + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 128 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: Reset is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is disabled after reset + OFS1 register settings: Voltage Detection 0 Level: 1.90 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 CTSU0_TS15 Low None "Peripheral mode" - None "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 ADC0_AN06 - - "Analog mode" - None "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 SPI0_RSPCK Low None "Peripheral mode" CMOS None "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 SPI0_SSL0 Low None "Peripheral mode" CMOS None "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 SCI0_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPIO Low None "Output mode (Initial Low)" CMOS - "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 GPIO - IRQ06 "Input mode" - None "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 SPI0_MOSI Low - "Peripheral mode" - None "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 SPI0_MISO Low - "Peripheral mode" CMOS None "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 USBFS0_VBUS Low None "Peripheral mode" CMOS None "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 CTSU0_TSCAP Low None "Peripheral mode" CMOS None "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 - - - Disabled - - "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI0_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 USBFS0_DP - - "Peripheral mode" - - "USB_FS0: DP" + P915 18 USBFS0_DM - - "Peripheral mode" - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "Key Matrix Driver on r_kint" + Parameter Checking Enable: Default (BSP) + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_kint Key Matrix Driver on r_kint" + General: Name: g_kint + Input: Keymatrix Channel Mask: Channel 0: Disable + Input: Keymatrix Channel Mask: Channel 1: Disable + Input: Keymatrix Channel Mask: Channel 2: Disable + Input: Keymatrix Channel Mask: Channel 3: Disable + Input: Keymatrix Channel Mask: Channel 4: Disable + Input: Keymatrix Channel Mask: Channel 5: Disable + Input: Keymatrix Channel Mask: Channel 6: Enable + Input: Keymatrix Channel Mask: Channel 7: Enable + Interrupts: Trigger Type: Rising Edge + Interrupts: Callback: kint_callback + Interrupts: Key Interrupt Priority: Priority 2 + diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..e1b3447bf8 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (32) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..96acf09029 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_kint" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..215aad8bc6 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,244 @@ +/*********************************************************************************************************************** + * File Name : hal_entry.c + * Description : Contains data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" +#include "kint_ep.h" + +/* + * Private global variables + */ +/* used to capture KINT signal */ +static volatile uint32_t g_kint_signal = RESET_VALUE; + + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/* Private functions */ +static void process_row_identification(uint8_t kint_pin); +static void cleanup(void); + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ +void hal_entry(void) +{ + fsp_err_t err = FSP_SUCCESS; + fsp_pack_version_t version = {RESET_VALUE}; + volatile uint32_t captured_kint_sig = RESET_VALUE; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + + /* Example Project information printed on the Console */ + APP_PRINT(BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + APP_PRINT(EP_INFO); + + /* Open KINT module */ + err = R_KINT_Open(&g_kint_ctrl, &g_kint_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n * KINT open API failed * \r\n"); + + /* Trap here */ + APP_ERR_TRAP(err); + } + + /* Enable KINT interrupt */ + err = R_KINT_Enable(&g_kint_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n * R_KINT_Enable API failed * \r\n"); + + /* close KINT and IO port modules */ + cleanup(); + + /* Trap here */ + APP_ERR_TRAP(err); + } + + APP_PRINT("\r\n ** KINT open and enabled now, Press key from keypad attached to MCU ** \r\n"); + + while (true) + { + if (RESET_VALUE != g_kint_signal) + { + /* enter critical section to ensure capture of g_kint_signal value*/ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /* get the KINT channel mask information */ + captured_kint_sig = g_kint_signal; + g_kint_signal = RESET_VALUE; + + /* exit critical section */ + FSP_CRITICAL_SECTION_EXIT; + + switch (captured_kint_sig) + { + case CH_MASK_6: + { + process_row_identification(COL_A_BIT); + } + break; + + case CH_MASK_7: + { + process_row_identification(COL_B_BIT); + } + break; + + default: + break; + } + + /* restore initial Row pins level */ + ROW_INIT_LEVEL_SET(); + + captured_kint_sig = RESET_VALUE; + + } // end if statement + + /* Wait time for key processing */ + R_BSP_SoftwareDelay(400U, BSP_DELAY_UNITS_MILLISECONDS); + } +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) { + if (BSP_WARM_START_POST_C == event) { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} + +/*******************************************************************************************************************//** + * @brief KINT callback function. + * @param[in] p_args + * @retval None + **********************************************************************************************************************/ +void kint_callback(keymatrix_callback_args_t *p_args) +{ + if (NULL != p_args) + { + /* capture KINT event for a particular channel mask */ + g_kint_signal = p_args->channel_mask; + } +} + +/*******************************************************************************************************************//** + * @brief Scans rows when channel mask received from KINT user callback + * presuming column connected to KINT pins + * @param[IN] KINT configured pins + * @retval row value + **********************************************************************************************************************/ +static void process_row_identification(uint8_t kint_pin) +{ + ioport_size_t port_data = PORT_RAW_DATA; + volatile bool b_row_a_key = false; + volatile bool b_row_b_key = false; + uint8_t col_disp_pin = RESET_VALUE; + + /* As we got the column event, scan for the row to detect the particular key press */ + ROW_A_LOW(); + + /* Reset port_data before reading from port */ + port_data = PORT_RAW_DATA; + VALIDATE_IO_PORT_API(R_IOPORT_PortRead(&g_ioport_ctrl, KEYPAD_PORT, &port_data)) + + /* verify the row for this column */ + if ( ( READ_BIT(port_data, kint_pin) == READ_BIT(port_data, ROW_A_BIT) ) ) + { + b_row_a_key = true; + } + + /* Check KINT pin state when ROW_B P102 is set as low */ + ROW_A_HIGH(); + ROW_B_LOW(); + + /* Reset port_data before reading from port */ + port_data = PORT_RAW_DATA; + VALIDATE_IO_PORT_API(R_IOPORT_PortRead(&g_ioport_ctrl, KEYPAD_PORT, &port_data)) + + /* verify the row for this column */ + if ( ( READ_BIT(port_data, kint_pin) == READ_BIT(port_data, ROW_B_BIT) ) ) + { + b_row_b_key = true; + } + + /* col_disp_pin is updated with ASCII value for column to display in RTT viewer */ + if (COL_A_BIT == kint_pin) + { + col_disp_pin = COL_DISP_A_; + } + + if (COL_B_BIT == kint_pin) + { + col_disp_pin = COL_DISP_B_; + } + + /* On key press, detect the key by matching column state with row state. + * * + * FAULTY SCENARIO:IN case of GLITCH(which can occur) lead to false KINT event generation. + * In this case KINT pin logic state will always be low regardless of row pin change. + * Setting each row pins as "LOW" one by one and comparing it with KINT pin + * results in both flags getting set as true. To avoid this scenario, used both flags + * to validate the valid key + * + */ + if ( (true == b_row_a_key) && (false == b_row_b_key) ) + { + APP_PRINT ("\r\n **Column %c and Row A** \r\n", col_disp_pin); + } + + if ((true == b_row_b_key) && (false == b_row_a_key)) + { + APP_PRINT ("\r\n **Column %c and Row B** \r\n", col_disp_pin); + } + + /* reset row identification flags */ + b_row_b_key = false; + b_row_a_key = false; +} + +/*******************************************************************************************************************//** + * @brief Close KINT modules when any API return error return value + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +static void cleanup(void) +{ + if (FSP_SUCCESS != R_KINT_Close(&g_kint_ctrl)) + { + APP_ERR_PRINT("\r\n * R_KINT_Close API failed * \r\n"); + } +} diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/kint_ep.h b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/kint_ep.h new file mode 100644 index 0000000000..cc60f0f920 --- /dev/null +++ b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/e2studio/src/kint_ep.h @@ -0,0 +1,123 @@ +/*********************************************************************************************************************** + * File Name : kint_ep.h + * Description : Contains data structures and functions used in kint_ep.h + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef KINT_EP_H_ +#define KINT_EP_H_ + +/* channel masks */ +typedef enum +{ + CH_MASK_0 = 0x01, + CH_MAKS_1 = 0x02, + CH_MASK_2 = 0x04, + CH_MASK_3 = 0x08, + CH_MASK_4 = 0x10, + CH_MASK_5 = 0x20, + CH_MASK_6 = 0x40, + CH_MASK_7 = 0x80 +}channel_mask_t; + +/* for RTT Viewer display of column number in ASCII */ +typedef enum +{ + COL_DISP_A_ = 0x41, + COL_DISP_B_ = 0x42 +}col_identifier_t; + +/* + * user specific macros + */ + +/* Check IO-port API return and trap error(if any error occurs) cleans up and display failure details on RTT viewer */ +#define VALIDATE_IO_PORT_API(API) if (FSP_SUCCESS != API)\ + { APP_PRINT("%s API failed at Line number %d", \ + #API, __LINE__);\ + cleanup();\ + APP_ERR_TRAP(true);\ + } + +#if defined (BOARD_RA2A1_EK) +#define KEYPAD_PORT (bsp_io_port_t)BSP_IO_PORT_03 + +/* Keypad Pin details */ +#define ROW_A (bsp_io_port_pin_t) BSP_IO_PORT_03_PIN_01 +#define ROW_B (bsp_io_port_pin_t) BSP_IO_PORT_03_PIN_02 +#define COL_A (bsp_io_port_pin_t) BSP_IO_PORT_03_PIN_03 +#define COL_B (bsp_io_port_pin_t) BSP_IO_PORT_03_PIN_04 + + +/* Row and column bit position */ +#define COL_A_BIT 3U /* P303 */ +#define COL_B_BIT 4U /* P304 */ +#define ROW_A_BIT 1U /* P301 */ +#define ROW_B_BIT 2U /* P302 */ + +#else +#define KEYPAD_PORT (bsp_io_port_t)BSP_IO_PORT_01 + +/* Keypad Pin details */ +#define ROW_A (bsp_io_port_pin_t) BSP_IO_PORT_01_PIN_01 +#define ROW_B (bsp_io_port_pin_t) BSP_IO_PORT_01_PIN_02 +#define COL_A (bsp_io_port_pin_t) BSP_IO_PORT_01_PIN_06 +#define COL_B (bsp_io_port_pin_t) BSP_IO_PORT_01_PIN_07 + +/* Row and column bit position */ +#define COL_A_BIT 6U /* P106 */ +#define COL_B_BIT 7U /* P107 */ +#define ROW_A_BIT 1U /* P101 */ +#define ROW_B_BIT 2U /* P102 */ + +#endif + + +/* Row pins set as low */ +#define ROW_A_LOW() VALIDATE_IO_PORT_API(\ + R_IOPORT_PinWrite(&g_ioport_ctrl, ROW_A, BSP_IO_LEVEL_LOW)) + +#define ROW_B_LOW() VALIDATE_IO_PORT_API(\ + R_IOPORT_PinWrite(&g_ioport_ctrl, ROW_B, BSP_IO_LEVEL_LOW)) + +/* Row pins set as HIGH */ +#define ROW_A_HIGH() VALIDATE_IO_PORT_API(\ + R_IOPORT_PinWrite(&g_ioport_ctrl, ROW_A, BSP_IO_LEVEL_HIGH)) + +#define ROW_B_HIGH() VALIDATE_IO_PORT_API(\ + R_IOPORT_PinWrite(&g_ioport_ctrl, ROW_B, BSP_IO_LEVEL_HIGH)) + +/* Set Row and column pin at initial state i.e. HIGH */ +#define ROW_INIT_LEVEL_SET() ROW_A_HIGH()\ + ROW_B_HIGH(); + +/* Read value of the bit from the variable */ +#define READ_BIT(number, position) (uint8_t)((ioport_size_t)(number >> (uint8_t)position) & 1U) + +#define PORT_RAW_DATA 0xFFFF + +#define EP_INFO "\r\n\r\nThe Project demonstrates KINT module functionality for processing \r\n"\ + "keys in a 2x2 key matrix. "\ + "Please connect matrix keypad to MCU pins\r\nas mentioned in readme file. "\ + "On pressing one of the keys connected\r\nto the board, the key-event"\ + " is detected and displayed on RTTViewer\r\n\r\n\r\n" + + +#endif /* KINT_EP_H_ */ diff --git a/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/kint/kint_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..e4813b35134483e120c3bf8fac36ea72f2ffdc6d GIT binary patch literal 5920 zcmd^@Sx;M65Xa9ek@^i1>AV$CLdv34ZKO(OjT5#SQ&Lq`WpEa!#vt3oZ9jb5|8K^_ zT?~PTFT!{!YWxOYhSAG}hX0X(fG^ zmeUXEcl~RnH)){HD0TG7X)E>h?@W|KogL`hnXSWVC|-PbwA-`YtouRgrl+=^wK_KH zPI{}WCtf|HhX0bd=hV7=`uB|cNYdU)(nP$6 zqDL-VM(Ii#UYb<6t6atyF`TO-5mqBdaN^8?NPWgjJUMUH2$6INa5>KtrEw+?kCdavF-~L_bd*5 zY1NfJ10gw!`z*5Kbb+2(Z-bWtX;|%^$YyKg$k@DeCLiGOccvTO$fm)_qz`lwZLVw= zE`h=-I?LL$(+g!-PDkk=ZOfY{%7>P%G_{t~rtWuzyI=In`li;}qRr`7eIM)hVQv^D z^pDe{Oh)Y+9rXM99BBn!d-{E4|FhQN0mY$x9~o_16m3a6&^{*)w3nwkwTv&ja3mff z$Mp$Iwx!jsE~wg~+DfnWizfW@9L|!8J$vGIq^p_M?L^jDbY~C#hq|zSL-#?ktNRnl z-?XzE+HdG?Ph2>Gkx3NIDv`k4=O9v~!C*_-t!0 zEZ#G#HlzW5!_({Hg>`L7h4Z%Ed&ID2d+Ps&?hi%Z5+%OCzx-qMSigs&BYx$W5Z`@K z?~6;zes@HH4#wmo4!oM%8%Mkr{apej?@|>$UjpNuNEfN3E_$zleHU zXC2M!=JSZE`#12pWw>|bpsz=_j_Y-C%I3)eCDk0k5A;5Kf`75oQC{{#SW~x{`stZK zO8)Ui$+i71%IYEEv-FVs=b zC$Bn11_r9VN_ed;>P}RtBk4kIBHDqjS!`8N6-a{~|CQ$w&xx;R%6>Y<*#phdRLDck z1{djrCIO}%yv!WSG~3hfB>gz0pOfd9yRtriX|_1GX_fyzHx(SZqBs}Nfu~vTf+aEru1uvqanW^~HvMrvrYq)Lr1qp`PJc== zvN}4KHN*NOw06BS(%rnCDqicepgVjqvCL&kV{SW_9ZaC$WKQz%5i_PgAuwUWgNdH$ z)a6xmh*^wh6|7}Q2(xG$Kg%h!SAIu`H<=lz-CjX1lut^@u?OOQjP z_{M)d`Q?qQr&_f{F|i$<(EM32V!;#BU>ZsHb3D&QbOS#j4}7{#KGXA@Q}!B@`N+`B z6Oz*)BdhN56gW_8KB^lu;TPM_ztP!uNMbAi6x!6EofyfVj81zYyNQ z-l^`WcwpC~?zp{4m({5*k&j{JvQEcUwbrxgKD^g%;k|Orx$epGlkk1zfDrGvbLzr@ zlNCkh{&8JZT&bW{OFw5^k+6D)gfAUebof$nh4<%<>zw6dMAzfY8xwkOR?hkq>^*-= zy^-~y^1(asrFB)hQ&(puT95iqZKQ_`t#ZvP@=J-Fd!@Da$|16Iq`M2_K()TB7tQv( z=qT7wT-CbTRMvX$ysf+YJB)!e@vibwwo&Qh9Sxo3Q2*&j)MS4XQ}oN?eacJg`*gmc zsOT5oL70+MfB#F+G3)4qBW`{^)sS{u5Cpg mPu9=D(JN^AWW4QULIi)sd$zEcPDmAI7amLs%mX)f-~R! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..a4a3537357 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + lvd_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..9a3564bf57 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,17 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=1570288955,ra/board/ra2a1_ek/board_leds.h|811579141,ra/board/ra2a1_ek/board_init.c|1192771973,ra/board/ra2a1_ek/board.h|1634941367,ra/board/ra2a1_ek/board_leds.c|3781303622,ra/board/ra2a1_ek/board_init.h +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h|49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c|860418405,ra/fsp/inc/fsp_common_api.h|3241443262,ra/fsp/inc/api/bsp_api.h|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|2319720569,ra/fsp/inc/fsp_features.h|1719600019,ra/fsp/inc/fsp_version.h|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|1533961824,ra/fsp/inc/api/r_ioport_api.h|2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|3667622829,ra/fsp/inc/instances/r_ioport.h|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=1533961824,ra/fsp/inc/api/r_ioport_api.h|3642215214,ra/fsp/src/r_ioport/r_ioport.c|3667622829,ra/fsp/inc/instances/r_ioport.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_lvd\#\#\#\#0.8.0/all=4159338479,ra/fsp/inc/instances/r_lvd.h|3523523367,ra/fsp/inc/api/r_lvd_api.h|1983351311,ra/fsp/src/r_lvd/r_lvd.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_lvd\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..a2fb337b38 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..5d6fc50b0c --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..253f23cad3 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,172 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.align_composite_type_declarators=false +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=82 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=82 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=false +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_preprocessor_directives=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_identifier_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_expression=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=120 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..8f9798f9bd --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..e4225f4595 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..d3d5733d25 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Low Voltage Detection + Renesas.RA.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.jlink b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.launch b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.launch new file mode 100644 index 0000000000..d199219193 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep Debug.launch @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..143d182d80 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/lvd_ek_ra2a1_ep.hex @@ -0,0 +1,557 @@ +:10000000D01100205D1600004915000059160000AF +:100010005916000059160000591600000000000093 +:100020000000000000000000000000005916000061 +:100030005916000000000000591600005916000073 +:10004000C9110000000000000000000000000000D6 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFD3CEFFFFFCFF0F00FFFF0F003A +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F21C04C2F20004237863B940F233 +:100510000003C0F200032BB142F26420C0F20000DD +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2200142F264203A +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F0B5C646C3680E00816805008846CF1A0C +:10056000416800B5C8189C18974206D9310001F0BF +:100570002DF9EC6004BC9046F0BD3A00310001F06A +:1005800025F94346E41AF1192200686801F01EF9C2 +:10059000EC60EFE7F8B54746CE46884680B51600D2 +:1005A0000700C568846840F200091AE0013B5B1B44 +:1005B000641BB44200D934009C4200D91C007B6803 +:1005C00022005819414601F001F92D19A144A04417 +:1005D000361BBC68631B5A1E93415B421D40FD6085 +:1005E00036B13B699D42E1D3013B1B195B1BDFE741 +:1005F00048460CBC90469946F8BDC04610B540F63A +:100600009404032341F60802C2F2000423616361EB +:1006100040F24803C0F20002A261226640F23802B2 +:10062000C2F20003E36140F60003C2F20002626618 +:1006300041F61401102223620023A266E01DC0F2DD +:1006400000010C3AA3626362E3622367E3666367B7 +:1006500001F0BCF841F61803C0F200031A682260EA +:100660009B88A3802023A37110BDC046431C70B596 +:1006700015005A00D21840F69403D200C2F20003CB +:10068000D61840F69402C2F20002944643001B18AA +:10069000DB006344DC6A012C0BD0CCB1022C06D108 +:1006A0002A003000FFF776FF0400200070BD002410 +:1006B000FBE79A6A586A82421DD9013A121A2C0045 +:1006C000954200D9140022003000FFF741FFECE70B +:1006D0009A6A586A824209D9013A121A9542E4D8B4 +:1006E0002A003000FFF734FF2C00DEE71B6AD21827 +:1006F000013A121AF2E71B6AD218013A121ADEE71F +:10070000F8B540F69403C2F200031B7805005BB213 +:100710000E00170063B1EFF31084012181F31088FC +:100720003A0031002800FFF7A1FF84F31088F8BDDC +:10073000FFF764FFEFE7C04610B504008368626806 +:10074000581C904207D82268D154E368626801338C +:10075000E3600300A0609A4200D010BD21682069C8 +:10076000FFF7CEFFA368984203D001235B42E3600A +:10077000F3E70023A360F0E7F8B54E464546574639 +:10078000DE46E0B51E000A9B80460F001500994624 +:10079000914200D277E00B000122B3FBF5F3013266 +:1007A0009D42FAD9B246964200D2924601230B9A54 +:1007B0001A409346002A5AD14B46002B57D00B9B28 +:1007C00020249B0758D4D14502D850E0D1450ED003 +:1007D00001235B429C4621004046E144FFF7ACFF09 +:1007E0004346DB68002B3CDB4B46002BEED101245B +:1007F000012E03D9013E6C43012EFBD8B7FBF4F365 +:100800009D42F8D941F62006C0F2000606E0B4FB8E +:10081000F5F3AC420DD31C00B7FBF3F322005A43AF +:10082000F1564046BF1AFFF787FF4346DB68002BAF +:10083000EDDA5B46ABB14B469BB1CA4502D310E043 +:10084000D1450ED001235B429C4620214046E14425 +:10085000FFF772FF4346DB68002B02DB4B46002BA1 +:10086000EED13CBC90469946A246AB46F8BD434605 +:10087000DB68002BBBDAF4E7744274416342102456 +:100880001C4020349FE701228CE7C046F0B5574654 +:10089000DE464E464546E0B59DB00CAB9B46079301 +:1008A0004023089300230C009146042740F2010ADC +:1008B000029009930B900A9300216156013400299C +:1008C00000D1AAE025290CD007A8FFF735FF0A9828 +:1008D0000028F1DA1DB03CBC90469946A246AB46D2 +:1008E000F0BD0023E356621C0026022508211000FB +:1008F0002B2B0DD02B2B0EDD2D2B57D0302B0FD1CA +:1009000014002E430023E356621C10002B2BF1D160 +:100910003E431400F6E7232B02D10E431400F1E707 +:1009200019003039C9B2092900D980E00025B44640 +:100930002E001D0001E014000132B3009B195B0082 +:100940005B1900255557303B28003038C0B21100E4 +:100950001E000928EFD92B00A01C350066462E2B5F +:1009600069D000230C00CB5640F2000801E00023C0 +:10097000E3561A000134BA43682AF8D0642B77D0C2 +:100980003DDD732B00D1C6E026DD752B12D14B4621 +:1009900049461B6807A81A1D0A6019680A220196B1 +:1009A00000954346FFF7E8FE0A9891E75346140086 +:1009B0001E43A7E7782B00D089E74B4649461B68C2 +:1009C00007A81A1D0A60196810220196009543466F +:1009D000FFF7D2FE0A987BE7702B00D077E74B46F3 +:1009E00049461B6807A81A1D0A601968002301936D +:1009F000083300931022FFF7BFFE0A9868E7582BD0 +:100A0000DBD0632B00D19AE0252B00D05FE707A84D +:100A10002521FFF791FE0A985AE70A98002800DC82 +:100A200058E7099A002A00D095E0801852E7210083 +:100A300000252E2B95D10123CB5604001A00303A05 +:100A4000D2B240F20008092A93D819004046830028 +:100A50001B185B005B18002101346156303B0A0013 +:100A6000303AD2B21800092AF1D90B00804680E74B +:100A70004B4649461B681A1D1B680A60DA17039328 +:100A80009B1853400122092B07DD0A2000E00B00D0 +:100A900093FBF0F10132632BF9DC4346049390455C +:100AA00061D30223334095B3039A002A61DB3742B6 +:100AB0005FD10BB1434653B35346334227D135B3CD +:100AC000049B9D4223D905961E0001E0B5420AD041 +:100AD00007A82021FFF730FE0A98013D002800DA20 +:100AE000F8E6002DF2D1059E039B002B43DB374235 +:100AF0004CD103233340022B4DD007A8019600951B +:100B000043460A220399FFF737FE0A98E0E60A985F +:100B10000028E9DADEE64B4649461B681A1D0A60E2 +:100B20001D6806E007A8FFF707FE0A98002800DA0C +:100B3000D0E60021695601350029F3D1C7E64B46BE +:100B400049461B6807A81A1D0A6000215956FFF77D +:100B5000F3FD0A98BCE659460298FFF7D1FD0A98C2 +:100B6000099A8018B6E6022304923340002DCED0B5 +:100B70009AE7013D9DE75B422D2107A80393FFF70C +:100B8000DBFD0A98002800DAA4E6B2E72B2107A8CB +:100B9000FFF7D2FDF5E74346002BAED18DB1049BA4 +:100BA0009D4203D8A9E7049B9D42A6D007A8302107 +:100BB000FFF7C2FD0A98013D002800DA8AE6002D01 +:100BC000F1D1002599E7C0460EB400B582B003AB61 +:100BD00002CB01AA0193FFF759FE02B008BC03B093 +:100BE0001847C046002330B585B003AC20000393FE +:100BF00000F064FC6278E3780192A27841F6540137 +:100C0000009241F65002C0F20001C0F20002002042 +:100C1000FFF7DAFF41F62C210020C0F20001FFF7B8 +:100C2000D3FF42F2582441F648510020C0F200019F +:100C3000C0F20004FFF7C8FF2388002B6CD04EF2EF +:100C4000000340F21042C4F20103995C890700D509 +:100C50008CE042F2601140F64410C0F20001C2F292 +:100C6000000000F0E3F80400002866D142F26401BD +:100C70000020C0F2000140F64804FFF7A5FFC2F2D1 +:100C800000042378012BFCD142F2C4010020C0F201 +:100C90000001FFF799FF40F64410C2F2000000F097 +:100CA00015FA0500F0B142F2EC0341F6300242F2CF +:100CB0000001C0F20003C0F20002C0F200010020F7 +:100CC000FFF782FF40F64410C2F2000000F020FA65 +:100CD00090B941F668712A00C0F200010020FFF7C8 +:100CE00073FF00BE42F23C110020C0F20001FFF78A +:100CF0006BFF00232370C4E742F2181341F6300261 +:100D000042F20001C0F20003C0F20002C0F2000192 +:100D10000020FFF759FFDCE741F64C710020C0F2DC +:100D20000001FFF751FF41F668710622C0F2000191 +:100D30000020FFF749FF00BE81E742F2400341F681 +:100D4000300242F20001C0F20003C0F20002C0F221 +:100D500000010020FFF738FF41F668712200C0F261 +:100D600000010020FFF730FF00BE7FE70220995C02 +:100D70008143995441F688710020C0F20001FFF7C9 +:100D800023FF40F63C10636801221988C2F200007C +:100D900000F036FA0400002800D15AE741F6D47377 +:100DA00041F63C0242F20001C0F20003C0F2000230 +:100DB000C0F200010020FFF707FF42F21C0341F6DA +:100DC000300242F20001C0F20003C0F20002C0F2A1 +:100DD00000010020FFF7F8FE41F668712200C0F222 +:100DE00000010020FFF7F0FE00BE32E710B5022838 +:100DF00000D010BD42F2781140F63C10C0F2000164 +:100E0000C2F2000000F094FAF3E7C0460379012B28 +:100E100004D140F64802C2F2000213707047C04687 +:100E200010B5FFF7DFFE002010BDC046F8B5DE4666 +:100E300057464E4645460400E0B578B345F2446354 +:100E40000268C0F24C039A4200D1B4E031B30D689D +:100E5000681E012822D840F64C038700C2F2000326 +:100E6000DA59002A00D0A4E00A79012D1ED0032A05 +:100E700014D84E79012E0ED01BD9022E1CD18A799E +:100E8000012A0BD108228A56013200D0EFE0DC5152 +:100E90006160012320E04A7A7F2A0AD901252800CF +:100EA0003CBC90469946A246AB46F8BD0F2AE0D915 +:100EB000F5E7CA68002AF1D008228A56013200D02C +:100EC000D5E06160DC518B799846032E6FD0012EFE +:100ED00000D186E0002E70D04022DBB29846CE7959 +:100EE000F6011643F6B2022000F090FB42F23022E7 +:100EF0006368C0F200021B68D2595B019246EFF3AF +:100F0000108B012282F310884EF2000140F217404C +:100F100042F2282940F2184CC4F201010A5CDBB20B +:100F20009A43C0F200090A544D466246ED598A5C64 +:100F3000AA439146554662681279AA404D462A4313 +:100F40006546D2B24A550A5C13430B548BF31088A2 +:100F500042F23823C0F20003DD5942F240234246F8 +:100F6000C0F20003DB592E701A7042F248230022AF +:100F7000C0F20003DB591A7063685B79032B03D05E +:100F800001222B7813432B70012140F22C1000F02A +:100F9000A1FA04222B78022013432B7000F00CFBE3 +:100FA00045F24463C0F24C032360002577E7002636 +:100FB00099E7082573E70E2571E741F2B501023084 +:100FC000C0F20001C0B200F0B3FA01230135AB401A +:100FD00046F2000240F220119BB2C4F200025352CA +:100FE00081E7042342461A4390464EF2001240F233 +:100FF000003A0923CEF20002944652460325CB560E +:1010000098088000604482589446DAB291461540B0 +:101010008A7AFF219201ED000A40AA40A940654664 +:101020008D4351462A43425040F650129900C2F275 +:1010300000028C501A0046F20001C032C4F20001D6 +:10104000920050580B4D5B09284050501F224946D2 +:101050000A4096404EF20012CEF20002944640F250 +:1010600080129B0063449E501E6000263BE70625CD +:1010700015E7C046FFFFFEFF42F24823016810B5A6 +:101080004A1EC0F200039200D45884B0237801AA0B +:101090009B07DB0F13710191C36810009847022072 +:1010A00000F0B4FA00230220237000F085FA04B0A7 +:1010B00010BDC04640F64C0310B502388000C2F2A5 +:1010C0000003C3585868FFF7D7FF10BD10B50400E0 +:1010D000D8B145F244632268C0F24C0307209A421B +:1010E00000D010BD053800F091FA42F24822636842 +:1010F000C0F200021B680220013B9B009B580022AB +:101100001A7000F059FA0020EBE70120E9E7C04629 +:1011100070B50400002855D045F244632268C0F23F +:101120004C0307209A4200D070BD63680021186804 +:10113000451E0130C0B200F0FBF9092263689A56DF +:10114000130021330FD01F215309114001228A407F +:101150004EF200112033CEF200019B005A50BFF333 +:101160004F8FBFF36F8F022000F050FA42F2382306 +:101170000421AD00C0F20003EB581A788A431A70BC +:101180001A7803398A431A70EFF3108681F31088B6 +:101190004EF2000340F217406168C4F2010309688F +:1011A0001A5C49018A431A5486F31088022000F021 +:1011B00003FA40F64C030022C2F20003EA50226018 +:1011C0000020B1E70120AFE710B5EFF30383103B38 +:1011D0005BB21A0046F20001C032C4F20001920074 +:1011E0005058064C9B002040505040F65012C2F21E +:1011F00000029B585868FFF73FFF10BDFFFFFEFF3E +:1012000000B345F254230068C5F24F03984213D14E +:10121000012A15D8FF2301200B4098404FF6FF7399 +:1012200003405AB10022C4F2040294460020090A85 +:10123000490161448B6070470720FCE70304F1E734 +:101240000320F8E70120F6E7F0B5DE4657464E46A4 +:101250004546E0B583B0EFF31082012383F3108895 +:1012600040F64C13C2F2000301931B6833B940F6F9 +:101270000054C4F20404E3704033E370019C23681B +:101280000133236082F31088038883B30B6840F630 +:1012900000049846254B002240F2FF0C9946C4F208 +:1012A0000404D10041448E888025330A9A4663465F +:1012B0001E40534609686D021B0129420FD04F465C +:1012C0009D19AD00AA462D593D40AB4655465F4697 +:1012D0002F514D460D40AB4655465F462F519B1949 +:1012E0009B0019510132038892B29342D9D8EFF38F +:1012F0001082012383F31088019B1B681BB10199A5 +:101300000B68013B0B60019B1B6833B940F6005131 +:10131000C4F20401CB708033CB7082F3108803B029 +:101320003CBC90469946A246AB46F0BDFFFFFEFF8F +:1013300010B50B0080B179B14A686AB145F2542208 +:101340000168C5F24F02914208D00260191D1800D1 +:10135000FFF77AFF002010BD0120FCE70E20FAE71E +:101360004EF20003A022C4F201039A5C824217D01D +:1013700036229A5C1AB93C215A5CD207FCD54EF24F +:101380000002A021C4F20102535CDB06FCD45054DD +:101390004EF20002A021C4F20102535CDB06FCD431 +:1013A0007047C0464EF20003262240F20801C4F204 +:1013B0000103985C1B6A8000C2F2000141585B0186 +:1013C0005B0F40F69002D940C2F2000211607047F4 +:1013D0004EF2000340F2FE323649C4F2010370B50A +:1013E00099524CF2000140F200100024C4F20101B5 +:1013F0000C5240F2080446F60041C2F20004C0F26A +:10140000DC21216041F20021C0F27A01616048F2E2 +:10141000000142F20040A1602161002240F213412C +:10142000C0F2F400E0605A540920A221585440F25E +:101430008041585C18B140F281401A545A5400203F +:10144000FFF78EFF4EF2000300213622C4F20103A3 +:1014500099543C315A5CD207FCD501253122002138 +:101460009D540B3A99540131FF31C1F200011962C8 +:10147000985C1A6A800020585201520F40F6900181 +:10148000D04040F2FE32C2F2000108600A4999528F +:101490004CF2000240F2041340F20411C4F20102C3 +:1014A000D552535A002BFCD101210133FF33D152C5 +:1014B00070BDC04603A5FFFF00A5FFFF20B180233C +:1014C0001B030360002070470120FCE7013800285F +:1014D000FCD1704740F690024CF600234143C2F223 +:1014E000000270B51468C3F69A330D00B3FBF4F430 +:1014F000080040F2E8320023002100F03BF931B946 +:10150000B0FBF4F0800808B1FFF7E0FF70BDA40065 +:10151000B5FBF4F040F2E8320023002100F02AF994 +:101520000029F0D001204042FFF7D0FFEEE7C0468F +:1015300039B140F654038000C2F20003C1500020CC +:1015400070470120FCE7C046F8B546F2000340F2C0 +:10155000401240F6540700240126C4F200039D5AAD +:10156000C2F20007ADB22B00E340E0B21E4203D04E +:10157000A300DB5903B1984701340D2CF3D146F297 +:10158000000340F23012C4F200039D52F8BDC04681 +:1015900046F200000023C4F2000042F20822C0F22A +:1015A00000029A1811781A00C032920001331150CB +:1015B000202BF2D17047C04670B5EFF310810123A4 +:1015C00083F3108840F688034000C2F200031A5AE1 +:1015D0001AB11A5A013A92B21A521B5A83B94EF2F0 +:1015E000000240F2FE3542F25024C4F20102565B82 +:1015F000C0F20004044B205A334383439BB253533D +:1016000081F3108870BDC04600A5FFFF70B5EFF3F1 +:101610001085012383F3108840F688044000C2F24D +:101620000004235A83B94EF2000242F2502140F2E4 +:10163000FE36C4F20102C0F20001935B095A0B436B +:101640004AF200510B439353235A01339BB2235266 +:1016500085F3108870BDC04600BE704710B500F01D +:1016600003F8FFF7DDFBFEE770B5002082B0FFF75F +:10167000BDFB0024FFF7ACFE6B46DC71DA1DDB79A5 +:1016800047F20003C4F204035968374840F20005EA +:10169000014040F600005960C4F204000168C2F243 +:1016A0000005C907C90F11700168C907C90F11707A +:1016B00001680120C907C90F1170802259685205BD +:1016C0000A435A60FFF792FB40F6D01240F21C002A +:1016D000C2F20002C2F20000121A002100F07FF8EC +:1016E00040F2000040F2080242F26821C2F200001B +:1016F000C2F20002121AC0F2000100F067F840F6D0 +:1017000000531A4AC4F200039C801A8040F6D0525B +:10171000C2F200029A6041F2D012C2F20002DA6014 +:1017200046F2000240F2201141F20000C4F2000231 +:10173000505201229A80FFF735FE0220FFF756FB38 +:1017400040F20403C2F200035B1B9E10002B04DD79 +:1017500008CD01349847A642FADCFFF719FF0020B4 +:1017600000F006F802B070BDFFFFFFEF00A5FFFF1D +:101770007047C046F0B54FF6FF75CE4647462C0081 +:10178000154080B52F000440160C9946030C5D43AC +:101790006743734366433C0C7619A4199C46A542E3 +:1017A00003D980235B029846C4444B464FF6FF762C +:1017B00043435143250C374065442404E4195B1925 +:1017C000591820000CBC90469946F0BD002310B576 +:1017D0009A4200D110BDCC5CC4540133F8E7030039 +:1017E0001218934200D1704719700133F9E7FFFFD7 +:1017F000F8B5C046F8BC08BC9E467047F8B5C04670 +:10180000F8BC08BC9E4670475465726D696E616C89 +:10181000000000005254540053454747455200FF12 +:101820003031323334353637383941424344454616 +:1018300068616C5F656E74727900FFFF6368656351 +:101840006B5F72657365745F73746174757300FFA9 +:10185000312E30000D0A2A2A2A2A2A2A2A2A2A2A3E +:101860002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AD8 +:101870002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AC8 +:101880002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB8 +:101890002A2A2A2A2A2A2A2A0D0A2A2020205265A0 +:1018A0006E6573617320465350204578616D706C8E +:1018B000652050726F6A65637420666F7220725F74 +:1018C0006C7664204D6F64756C652020202020208C +:1018D00020202020202020202020202A0D0A2A201D +:1018E00020204578616D706C652050726F6A656369 +:1018F000742056657273696F6E2025732020202036 +:1019000020202020202020202020202020202020D7 +:1019100020202020202020202020202020202A0DD0 +:101920000A2A202020466C657820536F6674776100 +:101930007265205061636B2056657273696F6E200B +:101940002025642E25642E256420202020202020A0 +:101950002020202020202020202020202020202087 +:1019600020202020202A0D0A2A2A2A2A2A2A2A2A46 +:101970002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AC7 +:101980002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB7 +:101990002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA7 +:1019A0002A2A2A2A2A2A2A2A2A2A0D0A52656665FA +:1019B0007220746F20726561646D652E7478742076 +:1019C00066696C6520666F72206D6F726520646554 +:1019D0007461696C73206F6E204578616D706C6501 +:1019E0002050726F6A65637420616E640D0A4653FD +:1019F0005020557365722773204D616E75616C20A0 +:101A0000666F72206D6F726520696E666F726D61B0 +:101A100074696F6E2061626F757420725F6C76649A +:101A2000206472697665720D0A0000000D0A546820 +:101A300065206578616D706C652070726F6A656392 +:101A4000742064656D6F6E73747261746573207455 +:101A50006865207479706963616C20757365206FA7 +:101A60006620746865204C56442048414C206D6FB8 +:101A700064756C6520415049732E0D0A54686520C9 +:101A80006578616D706C652070726F6A6563742033 +:101A9000656E61626C6573204C56443020636972D8 +:101AA0006375697420746F207265736574204D438B +:101AB0005520616E64204C56443120746F20676558 +:101AC0006E6572617465206D61736B61626C652017 +:101AD000696E746572727570742E0D0A0D0A4C561B +:101AE000443020726573657473204D4355206F6ECA +:101AF0006C79207768656E20696E70757420766FDA +:101B00006C746167652064726F70732062656C6FBE +:101B100077204C564430207468726573686F6C642B +:101B20002076616C75652E0D0A546F2064657465AE +:101B3000637420746869732C207573657220686102 +:101B40007320746F20696E637265617365206261D2 +:101B5000636B2074686520766F6C746167652076AE +:101B6000616C75652061626F7665204C564430204B +:101B70007468726573686F6C642076616C75652E2D +:101B80000D0A427920646F696E6720746869732C4E +:101B9000204C45442077696C6C207475726E204F20 +:101BA0004E20696E6469636174696E67204C5644A7 +:101BB0003020726573657420646574656374696F41 +:101BC0006E2E0D0A45783A20322E38562069732041 +:101BD0004C564430207468726573686F6C6420766C +:101BE000616C75652C207768656E20696E70757400 +:101BF00020566F6C746167652064726F7073206625 +:101C0000726F6D20322E395620746F20322E375667 +:101C10002C204C56443020726573657473204D43FC +:101C2000552E0D0A557365722068617320746F20FC +:101C30007269736520696E70757420766F6C74615B +:101C400067652061626F766520322E3856206167A5 +:101C500061696E20746F20646574656374204C56EE +:101C600044302072657365742E0D0A0D0A4C56447B +:101C7000312067656E6572617465732061206D61E6 +:101C8000736B61626C6520696E74657272757074D5 +:101C9000206F6E6C79207768656E20696E70757440 +:101CA00020766F6C7461676520726973657320615B +:101CB000626F7665204C5644312074687265736893 +:101CC0006F6C642076616C75652E0D0A45783A203C +:101CD000322E3956206973204C5644312074687274 +:101CE0006573686F6C642076616C75652C2077680D +:101CF000656E20696E70757420766F6C74616765AF +:101D0000206973207261697365642066726F6D204B +:101D1000322E385620746F20332E30562C0D0A4C3C +:101D20005644312067656E6572617465732074680E +:101D300065206D61736B61626C6520696E7465729C +:101D4000727570742E0D0A000D0A4E6F74653A207C +:101D50002020202020202020202020202020202083 +:101D600020200D0A312E20546F2072756E204C56A3 +:101D700044204578616D706C652070726F6A656390 +:101D8000742C207573652065787465726E616C20A3 +:101D9000646562756767657220666F7220666C6144 +:101DA0007368696E672074686520636F64652C20B2 +:101DB000646973636F6E6E65637420202020202039 +:101DC000202020202020202020202020200D0A64F8 +:101DD0006562756767696E67206D6F646520616E07 +:101DE000642072756E207468652070726F6A656316 +:101DF000742E202020202020202020202020202081 +:101E000020202020200D0A322E20546F206465747B +:101E1000656374204C5644302052657365742C20E1 +:101E2000696E70757420766F6C7461676520686187 +:101E30007320746F2062652072616973656420622B +:101E400061636B2061626F76652074687265736888 +:101E50006F6C642076616C756528566465743029F2 +:101E6000206F6E6365206974206973202020202014 +:101E700020202020202020202020202020200D0A8B +:101E800064726F707065642062656C6F772074682F +:101E9000726573686F6C642076616C756528566432 +:101EA000657430292E20546869732077696C6C2022 +:101EB0007475726E204F4E204C454420616E642034 +:101EC0007072696E7473204C56443020726573656D +:101ED0007420646574656374696F6E206D657373D7 +:101EE0006167652020202020202020202020202025 +:101EF0002020202020200D0A6F6E204A6C696E6B16 +:101F00005254547669657765722E20566465743034 +:101F10002076616C7565732061726520646F6375EE +:101F20006D656E74656420696E20726561646D65AF +:101F30002E74787420666F722073706563696669A9 +:101F40006320626F6172642E0D0A00000D0A4E6FED +:101F5000206F6E2D626F617264204C454473204681 +:101F60006F756E64000000000D0A52657475726E24 +:101F70006564204572726F7220436F64653A203049 +:101F800078257820200D0A000D0A2A2A2A2A2A2AD2 +:101F90002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA1 +:101FA0002A2A204C5644302052657365742064659B +:101FB000746563746564202A2A2A2A2A2A2A2A2A0E +:101FC0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A0D8E +:101FD0000A0000000D0A202A2A20525F494F504F64 +:101FE00052545F50696E57726974652041504920A0 +:101FF0006661696C6564202A2A200D0A00000000D1 +:102000005B4552525D20496E2046756E6374696F60 +:102010006E3A20257328292C202573000D0A202ACA +:102020002A20556E61626C6520746F207475726E23 +:10203000204C4544206F6E202A2A200D0A00000003 +:102040000D0A202A2A20525F4C56445F4F70656E5D +:1020500020415049206661696C6564202A2A200D60 +:102060000A0000000D0A4C56443120456E61626C36 +:10207000656420746F2067656E65726174652061A8 +:10208000206D61736B61626C6520696E746572723C +:10209000757074207768656E20566F6C7461676523 +:1020A000207261697365732061626F766520746860 +:1020B00065207468726573686F6C642076616C75F6 +:1020C000650D0A000D0A566F6C74616765205261D8 +:1020D000697365642061626F7665207468726573E8 +:1020E000686F6C642076616C75652E000D0A202A7D +:1020F0002A20525F4C56445F537461747573436C6D +:1021000065617220415049206661696C6564202ACE +:102110002A200D0A000000000D0A202A2A20525F02 +:102120004C56445F436C6F73652041504920666193 +:10213000696C6564202A2A200D0A00000D0A4C569D +:1021400044312053746174757320666C6167206933 +:102150007320436C65617265642E0D0A00000000F7 +:102160000100000006010001FF0002000D0E00004A +:1021700000000000000000001100000080210000AD +:102180000000010C010000000080000003000000BE +:102190000000010008010000000001060B01000022 +:1021A000000001060C010000000000000102000018 +:1021B0000000010404020000040000000502000009 +:1021C00000400000060200000000010000030000C3 +:1021D00000000106030300000000010604030000E4 +:1021E00000000113070400000000010C09040000B6 +:1021F000000001040B040000000001130E090000A0 +:10220000000001130F0900000D0000000000000095 +:1022100000000000000000000000000000000000BE +:1022200000000000000000001F000000E0000000AF +:1022300000000000050000001AE401401BE401401A +:10224000E0E00140E2E00140E1E00140E3E0014084 +:10225000010002000800FFFF0100000060220000F2 +:082260000502FFFF0000000071 +:082268002D0500000105000036 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:040000030000165D86 +:00000001FF diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..7f06269630 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,176 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is Disabled + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 128 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: Reset is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is enabled after reset + OFS1 register settings: Voltage Detection 0 Level: 2.51 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 CTSU0_TS15 Low None "Peripheral mode" - None "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 ADC0_AN06 - - "Analog mode" - None "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 SPI0_RSPCK Low None "Peripheral mode" CMOS None "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 SPI0_SSL0 Low None "Peripheral mode" CMOS None "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 SCI0_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPIO Low None "Output mode (Initial Low)" CMOS - "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 GPIO - IRQ06 "Input mode" - None "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 SPI0_MOSI Low - "Peripheral mode" - None "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 SPI0_MISO Low - "Peripheral mode" CMOS None "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 USBFS0_VBUS Low None "Peripheral mode" CMOS None "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 CTSU0_TSCAP Low None "Peripheral mode" CMOS None "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 - - - Disabled - - "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI0_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 USBFS0_DP - - "Peripheral mode" - - "USB_FS0: DP" + P915 18 USBFS0_DM - - "Peripheral mode" - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "Low Voltage Detection Driver on r_lvd" + Parameter Checking: Default (BSP) + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_lvd Low Voltage Detection Driver on r_lvd" + Name: g_lvd + Monitor Number: 1 + Digital Filter Setting: Digital filter is Disabled + Voltage Threshold: Monitor 1 (2.90V) + Detection Response: Maskable interrupt + Voltage Slope: Rising voltage + Negation Delay: Delay from reset + Monitor Interrupt Callback: lvd1_callback + LVD Monitor Interrupt Priority: Priority 2 + diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..054ee669e1 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (2048) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..484ad8d938 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_lvd" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..f8d3adbef7 --- /dev/null +++ b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,210 @@ +/*********************************************************************************************************************** + * File Name : hal_entry.c + * Description : Contains data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" + +/*******************************************************************************************************************//** + * @addtogroup r_lvd_ep + * @{ + **********************************************************************************************************************/ + +/* Macro definition */ + +/* LVD0 detect reset value */ +#define SYSTEM_RSTSR0_DETECT_LVD0_RESET (1u) +#define SET_FLAG (1u) + +/* LVD Example project details */ +#define LVD_INFO "\r\nThe example project demonstrates the typical use of the LVD HAL module APIs."\ + "\r\nThe example project enables LVD0 circuit to reset MCU and LVD1 to generate maskable interrupt.\r\n"\ + "\r\nLVD0 resets MCU only when input voltage drops below LVD0 threshold value."\ + "\r\nTo detect this, user has to increase back the voltage value above LVD0 threshold value."\ + "\r\nBy doing this, LED will turn ON indicating LVD0 reset detection."\ + "\r\nEx: 2.8V is LVD0 threshold value, when input Voltage drops from 2.9V to 2.7V, LVD0 resets MCU."\ + "\r\nUser has to rise input voltage above 2.8V again to detect LVD0 reset.\r\n"\ + "\r\nLVD1 generates a maskable interrupt only when input voltage rises above LVD1 threshold value."\ + "\r\nEx: 2.9V is LVD1 threshold value, when input voltage is raised from 2.8V to 3.0V,"\ + "\r\nLVD1 generates the maskable interrupt.\r\n" + +/* Macro to display instructions on how to run LVD EP */ +#define LVD_NOTE "\r\nNote:\ + \r\n1. To run LVD Example project, use external debugger for flashing the code, disconnect\ + \r\ndebugging mode and run the project.\ + \r\n2. To detect LVD0 Reset, input voltage has to be raised back above threshold value(Vdet0) once it is\ + \r\ndropped below threshold value(Vdet0). This will turn ON LED and prints LVD0 reset detection message\ + \r\non JlinkRTTviewer. Vdet0 values are documented in readme.txt for specific board.\r\n" + +/* External Global Variables */ +/* LED Structure used to blink on board LED */ +extern bsp_leds_t g_bsp_leds; +volatile uint8_t g_lvd1_status = RESET_VALUE; + +/* function declarations */ +void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/* Private function declarations */ +static fsp_err_t check_reset_status(void); + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ +void hal_entry(void) +{ + fsp_pack_version_t version = {RESET_VALUE}; + fsp_err_t err = FSP_SUCCESS; // Error status + fsp_err_t lvd_err = FSP_SUCCESS; + + /* Version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + + /* Example Project information printed on the Console */ + APP_PRINT (BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + + APP_PRINT(LVD_INFO); + + APP_PRINT(LVD_NOTE); + + /* If this board has no LEDs then trap here */ + if (RESET_VALUE == g_bsp_leds.led_count) + { + APP_PRINT ("\r\nNo on-board LEDs Found"); + APP_ERR_TRAP (FSP_ERR_UNSUPPORTED); + } + + /* Check if reset is caused by LVD0 monitor */ + /* LVD0 is enabled in OFS1 register for this example project with specific detection voltage for each MCU. + * User can disable it by going to configuration.xml -> BSP -> properties -> OFS1 register settings. + * Here user will get both the options to enable Voltage detection 0 circuit and the voltage level. */ + + err = check_reset_status(); + if (FSP_SUCCESS != err) + { + /* Print Error on RTT console */ + APP_ERR_PRINT ("\r\n ** Unable to turn LED on ** \r\n"); + APP_ERR_TRAP (err); + } + + /* Open LVD1 instance to detect Voltage rise above threshold value by generating an maskable interrupt */ + err = R_LVD_Open(&g_lvd_ctrl, &g_lvd_cfg); + if (FSP_SUCCESS != err) + { + /* Print Error on RTT console */ + APP_ERR_PRINT ("\r\n ** R_LVD_Open API failed ** \r\n"); + APP_ERR_TRAP (err); + } + + APP_PRINT ("\r\nLVD1 Enabled to generate a maskable interrupt when Voltage raises above the threshold value\r\n"); + + while(true) + { + /* Check If Voltage increased than threshold value. If yes, notify user */ + if(SET_FLAG == g_lvd1_status) + { + APP_PRINT ("\r\nVoltage Raised above threshold value."); + + /* Clear LVD1 Status */ + err = R_LVD_StatusClear(&g_lvd_ctrl); + if (FSP_SUCCESS != err) + { + /* Print Error on RTT console */ + APP_ERR_PRINT ("\r\n ** R_LVD_StatusClear API failed ** \r\n"); + + /* Close LVD1 driver */ + lvd_err = R_LVD_Close(&g_lvd_ctrl); + if (FSP_SUCCESS != lvd_err) + { + APP_ERR_PRINT ("\r\n ** R_LVD_Close API failed ** \r\n"); + } + APP_ERR_TRAP (err); + } + + APP_PRINT ("\r\nLVD1 Status flag is Cleared.\r\n"); + g_lvd1_status = RESET_VALUE; + } + } +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) +{ + if (BSP_WARM_START_POST_C == event) + { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open (&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} + +/*******************************************************************************************************************//** + * @brief Check if reset caused by LVD0 or not. If yes, Turn LED ON. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +static fsp_err_t check_reset_status(void) +{ + fsp_err_t io_err = FSP_SUCCESS; + /* Check if reset was caused by the LVD0? If it was, turn on LED to indicate LVD0 reset triggered. */ + if (SYSTEM_RSTSR0_DETECT_LVD0_RESET == R_SYSTEM->RSTSR0_b.LVD0RF) + { + /* Clear the flag once read the value */ + R_SYSTEM->RSTSR0_b.LVD0RF = RESET_VALUE; + + /* Notify user that reset is caused by LVD0 monitor */ + APP_PRINT ("\r\n************************ LVD0 Reset detected ************************\r\n"); + + /* Turn ON LED */ + io_err = R_IOPORT_PinWrite (&g_ioport_ctrl, g_bsp_leds.p_leds[0], BSP_IO_LEVEL_HIGH); + if (FSP_SUCCESS != io_err) + { + /* Print Error on RTT console */ + APP_ERR_PRINT ("\r\n ** R_IOPORT_PinWrite API failed ** \r\n"); + } + } + return io_err; +} + +/*******************************************************************************************************************//** + * @brief This function is callback for r_lvd1 instance and notifies user about rise in Voltage level. + * @param[in] p_args LVD callback parameters + * @retval None + **********************************************************************************************************************/ +void lvd1_callback(lvd_callback_args_t *p_args) +{ + /* Voltage Raising detected */ + if(LVD_CURRENT_STATE_ABOVE_THRESHOLD == p_args->current_state) + { + /* Set the lvd1 status flag to notify the user about rise in voltage */ + g_lvd1_status = SET_FLAG; + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup r_lvd_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/lvd/lvd_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..b7ce13b7e197724809948cbb5d35f1fdda13ff5f GIT binary patch literal 10846 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 OjMvG{Cxv;(hwiVh<6^J? literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.cproject b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.cproject new file mode 100644 index 0000000000..42e00922fd --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.cproject @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..9d3da3b19e --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + rtc_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..2aecf812a4 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,17 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=1634941367,ra/board/ra2a1_ek/board_leds.c|1192771973,ra/board/ra2a1_ek/board.h|1570288955,ra/board/ra2a1_ek/board_leds.h|811579141,ra/board/ra2a1_ek/board_init.c|3781303622,ra/board/ra2a1_ek/board_init.h +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h|3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h|2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|3241443262,ra/fsp/inc/api/bsp_api.h|2319720569,ra/fsp/inc/fsp_features.h|860418405,ra/fsp/inc/fsp_common_api.h|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|3667622829,ra/fsp/inc/instances/r_ioport.h|2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|1533961824,ra/fsp/inc/api/r_ioport_api.h|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|1719600019,ra/fsp/inc/fsp_version.h|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=3642215214,ra/fsp/src/r_ioport/r_ioport.c|3667622829,ra/fsp/inc/instances/r_ioport.h|1533961824,ra/fsp/inc/api/r_ioport_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_rtc\#\#\#\#0.8.0/all=2684468875,ra/fsp/src/r_rtc/r_rtc.c|2955437353,ra/fsp/inc/api/r_rtc_api.h|496905641,ra/fsp/inc/api/r_cgc_api.h|2291518696,ra/fsp/inc/instances/r_rtc.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_rtc\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..a2fb337b38 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..a90a8f6a47 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..253f23cad3 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,172 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.align_composite_type_declarators=false +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=82 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=82 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=false +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_preprocessor_directives=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_identifier_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_expression=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=120 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..8f9798f9bd --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..e4225f4595 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..a6c237577d --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Real Time Clock + Renesas.RA.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..a739342070 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,178 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is Disabled + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 128 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: Reset is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is disabled after reset + OFS1 register settings: Voltage Detection 0 Level: 1.90 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 CTSU0_TS15 Low None "Peripheral mode" - None "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 ADC0_AN06 - - "Analog mode" - None "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 SPI0_RSPCK Low None "Peripheral mode" CMOS None "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 SPI0_SSL0 Low None "Peripheral mode" CMOS None "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 SCI0_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPIO Low None "Output mode (Initial Low)" CMOS - "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 GPIO - IRQ06 "Input mode" - None "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 SPI0_MOSI Low - "Peripheral mode" - None "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 SPI0_MISO Low - "Peripheral mode" CMOS None "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 USBFS0_VBUS Low None "Peripheral mode" CMOS None "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 CTSU0_TSCAP Low None "Peripheral mode" CMOS None "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 - - - Disabled - - "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI0_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 USBFS0_DP - - "Peripheral mode" - - "USB_FS0: DP" + P915 18 USBFS0_DM - - "Peripheral mode" - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "RTC Driver on r_rtc" + Parameter Checking Enable: Default (BSP) + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_rtc RTC Driver on r_rtc" + Name: g_rtc + Clock Source: Sub-Clock + Frequency Comparision Value (LOCO): 0xff + Automatic Adjustment Mode: Enabled + Automatic Adjustment Period: 1 Minute + Adjustment Type (Plus-Minus): Addition + Error Adjustment Value: 0x00 + Callback: rtc_callback + Alarm Interrupt Priority: Priority 2 + Period Interrupt Priority: Priority 2 + Carry Interrupt Priority: Priority 2 + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.jlink b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.launch b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.launch new file mode 100644 index 0000000000..fb3e445472 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep Debug.launch @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..ff18ca2138 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/rtc_ek_ra2a1_ep.hex @@ -0,0 +1,879 @@ +:10000000C80E002041260000CD2500003D2600003E +:100010003D2600003D2600003D26000000000000B7 +:100020000000000000000000000000003D2600006D +:100030003D260000000000003D2600003D26000097 +:10004000DD210000DD2100002D2200000000000065 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFDFCEFFFFFCFF0F00FFFF0F002E +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F28004C2F20004237863B940F2CF +:100510000003C0F200032BB143F22060C0F20000E0 +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2840143F22060D9 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F0B5C646C3680E00816805008846CF1A0C +:10056000416800B5C8189C18974206D9310002F0BE +:1005700025F9EC6004BC9046F0BD3A00310002F071 +:100580001DF94346E41AF1192200686802F016F9D1 +:10059000EC60EFE7F8B54746CE46884680B51600D2 +:1005A0000700C568846840F200091AE0013B5B1B44 +:1005B000641BB44200D934009C4200D91C007B6803 +:1005C00022005819414602F0F9F82D19A144A0441F +:1005D000361BBC68631B5A1E93415B421D40FD6085 +:1005E00036B13B699D42E1D3013B1B195B1BDFE741 +:1005F00048460CBC90469946F8BDC04670B540F2DE +:1006000070540323C2F200042361636140F2BC030F +:1006100042F60412C2F20003E36140F20043C0F26A +:100620000002A261226640F29C0242F610112025CF +:1006300023620023C2F200026266E01DC0F20001E4 +:100640000422A3626362E362A5662367E3666367CD +:1006500002F0B4F842F61413C0F200031A682260E4 +:100660009B88A571A38070BDF8B540F270535746C2 +:100670004E464546DE46C2F200031B78E0B55BB24B +:10068000070088461600002B66D040F27052C2F276 +:10069000000294467D00EB19DB0063441A6F91461B +:1006A000DA6E924691452ED813004A4634009B1AC2 +:1006B0009E4207D84CB920003CBC90469946A246C1 +:1006C000AB46F8BD1C00002CF5D0A24640F270529B +:1006D000C2F200029446EB19DB006344596E22001B +:1006E00049444046A14402F069F85446002CE2D047 +:1006F00040F27053C2F200039C464B46ED19ED00E8 +:1007000065442B67D7E74A469B6E34009B1A9E428E +:1007100029D840F27052C2F200029346EB19DB0076 +:100720009B445B465B6E22004B441900404602F03E +:1007300045F85B469B6EA144361B4B4515D053468E +:100740004A469B1A9A46564509D8002ECED0A24654 +:10075000A044B2443400B9E7FFF750FF95E756468E +:10076000002EC3D0F3E71C00D3E740F20009EAE70C +:1007700010B50B00EFF31084012181F310881900EC +:10078000FFF772FF84F3108810BDC046431C70B59C +:1007900015005A00D21840F27053D200C2F2000382 +:1007A000D61840F27052C2F20002944643001B1861 +:1007B000DB006344DC6A012C0BD0CCB1022C06D1E7 +:1007C0002A003000FFF7E6FE0400200070BD002480 +:1007D000FBE79A6A586A82421DD9013A121A2C0024 +:1007E000954200D9140022003000FFF7B1FEECE77B +:1007F0009A6A586A824209D9013A121A9542E4D893 +:100800002A003000FFF7A4FE2C00DEE71B6AD21896 +:10081000013A121AF2E71B6AD218013A121ADEE7FD +:10082000F8B540F27053C2F200031B7805005BB2CA +:100830000E00170063B1EFF31084012181F31088DB +:100840003A0031002800FFF7A1FF84F31088F8BDBB +:10085000FFF7D4FEEFE7C04610B540F27054002316 +:10086000C2F20004E3562BB1E36E206FC01A431EA0 +:10087000984110BDFFF7C2FEF6E7C04610B5040070 +:1008800083686268581C904207D82268D154E36894 +:1008900062680133E3600300A0609A4200D010BD9B +:1008A00021682069FFF7BCFFA368984203D00123A9 +:1008B0005B42E360F3E70023A360F0E7F8B54E4640 +:1008C00045465746DE46E0B51E000A9B80460F00AF +:1008D00015009946914200D277E00B000122B3FB4C +:1008E000F5F301329D42FAD9B246964200D29246C1 +:1008F00001230B9A1A409346002A5AD14B46002BEB +:1009000057D00B9B20249B0758D4D14502D850E0E8 +:10091000D1450ED001235B429C4621004046E14474 +:10092000FFF7ACFF4346DB68002B3CDB4B46002B5C +:10093000EED10124012E03D9013E6C43012EFBD8D8 +:10094000B7FBF4F39D42F8D942F61C16C0F200063C +:1009500006E0B4FBF5F3AC420DD31C00B7FBF3F398 +:1009600022005A43F1564046BF1AFFF787FF43461D +:10097000DB68002BEDDA5B46ABB14B469BB1CA4559 +:1009800002D310E0D1450ED001235B429C462021CA +:100990004046E144FFF772FF4346DB68002B02DB71 +:1009A0004B46002BEED13CBC90469946A246AB4646 +:1009B000F8BD4346DB68002BBBDAF4E774427441B0 +:1009C000634210241C4020349FE701228CE7C0467C +:1009D000F0B55746DE464E464546E0B59DB00CABF9 +:1009E0009B4607934023089300230C00914604275D +:1009F00040F2010A029009930B900A93002161567C +:100A00000134002900D1AAE025290CD007A8FFF75E +:100A100035FF0A980028F1DA1DB03CBC9046994693 +:100A2000A246AB46F0BD0023E356621C0026022519 +:100A3000082110002B2B0DD02B2B0EDD2D2B57D08A +:100A4000302B0FD114002E430023E356621C1000FC +:100A50002B2BF1D13E431400F6E7232B02D10E439A +:100A60001400F1E719003039C9B2092900D980E032 +:100A70000025B4462E001D0001E014000132B30031 +:100A80009B195B005B1900255557303B2800303817 +:100A9000C0B211001E000928EFD92B00A01C3500A0 +:100AA00066462E2B69D000230C00CB5640F200087E +:100AB00001E00023E3561A000134BA43682AF8D053 +:100AC000642B77D03DDD732B00D1C6E026DD752B7E +:100AD00012D14B4649461B6807A81A1D0A601968BF +:100AE0000A22019600954346FFF7E8FE0A9891E72F +:100AF000534614001E43A7E7782B00D089E74B46E6 +:100B000049461B6807A81A1D0A6019681022019639 +:100B100000954346FFF7D2FE0A987BE7702B00D082 +:100B200077E74B4649461B6807A81A1D0A601968F3 +:100B300000230193083300931022FFF7BFFE0A98A9 +:100B400068E7582BDBD0632B00D19AE0252B00D02F +:100B50005FE707A82521FFF791FE0A985AE70A9850 +:100B6000002800DC58E7099A002A00D095E0801898 +:100B700052E7210000252E2B95D10123CB560400EE +:100B80001A00303AD2B240F20008092A93D819006C +:100B9000404683001B185B005B180021013461563E +:100BA000303B0A00303AD2B21800092AF1D90B00C2 +:100BB000804680E74B4649461B681A1D1B680A6041 +:100BC000DA1703939B1853400122092B07DD0A20F3 +:100BD00000E00B0093FBF0F10132632BF9DC43469C +:100BE0000493904561D30223334095B3039A002ABE +:100BF00061DB37425FD10BB1434653B353463342B7 +:100C000027D135B3049B9D4223D905961E0001E0F0 +:100C1000B5420AD007A82021FFF730FE0A98013D0F +:100C2000002800DAF8E6002DF2D1059E039B002B88 +:100C300043DB37424CD103233340022B4DD007A86E +:100C40000196009543460A220399FFF737FE0A985A +:100C5000E0E60A980028E9DADEE64B4649461B68DA +:100C60001A1D0A601D6806E007A8FFF707FE0A982C +:100C7000002800DAD0E60021695601350029F3D1B9 +:100C8000C7E64B4649461B6807A81A1D0A600021A3 +:100C90005956FFF7F3FD0A98BCE659460298FFF74C +:100CA000BFFD0A98099A8018B6E6022304923340E1 +:100CB000002DCED09AE7013D9DE75B422D2107A88C +:100CC0000393FFF7DBFD0A98002800DAA4E6B2E7F9 +:100CD0002B2107A8FFF7D2FDF5E74346002BAED145 +:100CE0008DB1049B9D4203D8A9E7049B9D42A6D0E9 +:100CF00007A83021FFF7C2FD0A98013D002800DA5D +:100D00008AE6002DF1D1002599E7C0460EB400B562 +:100D100082B003AB02CB01AA0193FFF759FE02B0E8 +:100D200008BC03B01847C04643F2B443020040F287 +:100D30001860C0F200035B6810B51988C2F20000A9 +:100D400001F0ACFA040000B910BD00F00FFC42F64F +:100D5000687342F64C1242F69071C0F20003C0F282 +:100D60000002C0F200010020FFF7D0FF42F6AC7194 +:100D70002200C0F200010020FFF7C8FF00BEE3E739 +:100D8000F0B5DE464E4657464546E0B513260023ED +:100D90008FB005AC20006E440593337001F0DCFB8E +:100DA00042F65C110020C0F20001FFF7AFFF42F6EF +:100DB000A4110020C0F20001FFF7A8FF42F6EC12D8 +:100DC00042F6F011C0F20002C0F200010020FFF76D +:100DD0009DFF6178A378E278009142F634210020EB +:100DE000C0F20001FFF792FF42F65C110020C0F252 +:100DF0000001FFF78BFF42F67C210020C0F20001CA +:100E0000FFF784FF42F6FC210020C0F20001FFF74B +:100E10007DFF00F0DBF90400002800D048E142F635 +:100E2000D0310020C0F20001FFF770FF00F006FB98 +:100E30000400002800D054E140F2BC4440F2E448F1 +:100E400040F2C04740F2EC4A40F2E84543F2B44970 +:100E500000F038FBC2F20004C2F20008C2F2000740 +:100E6000C2F2000AC2F20005C0F2000906E02368DF +:100E7000012B44D02B68012B00D185E0FFF7ECFC5F +:100E80000028F4D02022002106A801F0A0FC202296 +:100E900006A90020FFF76CFC06A801F089FCFF23DF +:100EA0001840022800D1CCE000DC9CE0032800D1EF +:100EB000D5E0042800D0CFE000F0C0FA8346002837 +:100EC00000D1F0E000F052FB42F6F453C0F2000310 +:100ED00042F6381242F69071C0F20002C0F20001F0 +:100EE0000020FFF713FF42F6AC715A46C0F2000132 +:100EF0000020FFF70BFF00BE2368012BBAD142F69A +:100F000084610020C0F20001FFF700FF43461B6828 +:100F1000012B76D040F2C040C2F2000000F0C8FAC7 +:100F200042F6A0613B68FA6803937B68C0F2000157 +:100F30000293BB68002001937B6900933B69FFF734 +:100F4000E5FE42F6E8610020C0F20001FFF7DEFE98 +:100F50000120FFF7E9FE44F240210220C0F20F0118 +:100F600001F006FB0020FFF7DFFE42F6AC41002057 +:100F7000C0F20001FFF7CAFE00234246136023605F +:100F80002B68012B00D079E74B4640F218605B6874 +:100F900032001988C2F2000001F062F98346C8B13C +:100FA00000F0E4FA42F6447342F62C1242F69071D5 +:100FB000C0F20003C0F20002C0F200010020FFF7FF +:100FC000A5FE42F6AC715A46C0F200010020FFF7C0 +:100FD0009DFE00BE0123307858403070FFF7A4FE1C +:100FE00000232B604AE7012836D100F00FF9834631 +:100FF000002853D000F0BAFA42F63443C0F200039E +:1010000066E700F0B3FA42F6147342F62C1242F689 +:101010009071C0F20003C0F20002C0F20001002093 +:10102000FFF774FE53461B68002BA5D0534642F6CB +:10103000AC711A68C0F200010020FFF767FE00BE25 +:101040009AE700F053F98346A0B100F08FFA42F618 +:10105000EC43C0F200033BE700F034FA07E700F08E +:10106000C9F98346A8B100F081FA42F66853C0F28C +:1010700000032DE742F63C51C0F200010020FFF7CB +:1010800045FE42F6AC410020C0F20001FFF73EFEF3 +:10109000EDE642F6C451C0F20001EFE742F68441AA +:1010A000C0F20001EAE742F65061C0F20001E5E754 +:1010B00042F6B43342F62C1242F69071C0F20003AD +:1010C000C0F20002C0F200010020FFF71FFE42F64E +:1010D000AC712200C0F200010020FFF717FE00BE35 +:1010E0009DE600F043FA42F6FC3342F62C1242F63B +:1010F0009071C0F20003C0F20002C0F200010020B3 +:10110000FFF704FE42F6AC712200C0F2000100209D +:10111000FFF7FCFD00BE8FE610B5022800D010BD21 +:1011200043F2F83140F21860C0F20001C2F2000050 +:1011300001F04CF9F3E7C0460A7810B5303A930055 +:101140009B184A785B00303A9B18C360CA78303AE3 +:1011500093009B180A795B009B186422313B036162 +:101160008C79303C63011B1B9B001B19CC79DB0085 +:10117000303C62430C7A9B18303CA200121952009A +:101180009B184A7A9B18104A944663444361CA7A72 +:10119000303A93009B180A7B5B00303A9B188360BF +:1011A0008A7B303A93009B18CA7B5B00303A9B18CD +:1011B00043604A7C303A93009B188A7C5B00303A4B +:1011C0009B18036010BDC04664F8FFFF43F2D031A6 +:1011D00040F2206010B5C0F20001C2F2000000F041 +:1011E000FDFD040008B9200010BD43F2C01342F613 +:1011F000CC7242F69071C0F20003C0F20002C0F25D +:1012000000010020FFF782FDEDE7C04630B58DB04C +:101210002022002104A801F0DAFA43F2A0210020E4 +:10122000C0F20001FFF772FD43F2C0210020C0F2BE +:101230000001FFF76BFDFFF70FFB0028FBD020221A +:1012400004A90020FFF794FA40F2145004A9C2F256 +:101250000000FFF771FF40F2145140F22060C2F22B +:101260000001C2F2000000F00FFB0500002837D19A +:1012700040F2F04440F22060C2F200042100C2F2C9 +:10128000000000F0BDFE0500D0B940F26C7C626940 +:10129000206862441100009143F238310390606885 +:1012A00023690290A068013362610190E268C0F294 +:1012B000000100202361FFF729FD28000DB030BD9B +:1012C00043F21833C0F2000342F6D87242F690712E +:1012D000C0F20002C0F200010020FFF717FDECE7AA +:1012E00043F2F823C0F20003EEE7C04610B5A4B005 +:1012F0000EAC2C220021200001F069FA2C220021E2 +:1013000019A801F064FA2022002106A801F05FFA72 +:1013100043F2F8110020C0F20001FFF7F7FC40F2A1 +:101320000113C0F20113179343F2C02140F20113DD +:10133000C0F2000123850020FFF7E8FCFFF78CFADC +:101340000028FBD0202206A90020FFF711FA200078 +:1013500006A9FFF7F1FE40F220602100C2F2000072 +:1013600000F038FB0400002834D140F2206019A9B5 +:10137000C2F2000000F0B2FC0400D8B940F26C7C6C +:101380001E9A199862441100009143F26021039063 +:101390001A981D9B059002901B9801331E92019094 +:1013A0001C9AC0F2000100201D93FFF7AFFC200043 +:1013B00024B010BD43F2402342F6F07242F6907121 +:1013C000C0F20003C0F20002C0F200010020FFF7EB +:1013D0009DFCD3E743F2202342F6F07242F690716F +:1013E000C0F20003C0F20002C0F200010020FFF7CB +:1013F0008DFCDCE743F27C3110B5C0F20001002027 +:10140000FFF784FC40F220600E21C2F2000000F0E1 +:10141000EDF9040008B9200010BD43F2A43343F2F3 +:10142000080242F69071C0F20003C0F20002C0F25E +:1014300000010020FFF76AFCEDE7C04630B540F23E +:10144000F04440F22060C2F2000485B02100C2F2F4 +:10145000000000F0D5FD0500D0B940F26C7C626957 +:10146000206862441100009143F26C0103906068AF +:1014700023690290A068013362610190E268C0F2C2 +:10148000000100202361FFF741FC280005B030BDBA +:1014900043F2440343F2200242F69071C0F200038B +:1014A000C0F20002C0F200010020FFF72FFCECE7C1 +:1014B00040F26C7C03690133036143696344436117 +:1014C0007047C04643F2A40110B5C0F200010020ED +:1014D000FFF71CFC43F2E0010020C0F20001FFF71F +:1014E00015FC43F208110020C0F20001FFF70EFCCA +:1014F00043F234110020C0F20001FFF707FC43F271 +:1015000064110020C0F20001FFF700FC43F28C11CF +:101510000020C0F20001FFF7F9FB10BD037810B501 +:1015200033B140F2E8430122C2F200031A6010BD59 +:1015300040F2BC4340F2C04140F220600124C2F2BC +:101540000003C2F20001C2F200001C6000F058FD6E +:101550000028ECD040F2E443C2F200031C6040F2E9 +:10156000EC43C2F200031860E1E7C04640F220609D +:1015700010B5C2F2000000F0BDF800B910BD43F292 +:101580009C1343F2380242F69071C0F20003C0F29D +:101590000002C0F200010020FFF7B8FBEEE7C046F2 +:1015A00010B5FFF7EDFB002010BDC0464169F0B556 +:1015B0000B00643B0200632B16D804690B2C13D874 +:1015C00043F2A84040F26C73C0F20000CF18035DF4 +:1015D000651C2E009C46022D2BD0D3680320002BC7 +:1015E00001DD9C4502D2F0BD0320FCE7022D04DCA6 +:1015F0000D3440F26B7026000F1805200136710083 +:10160000891989008919B1FBF0F10F3BDB19BF087B +:10161000DB195B180721B3FBF1F4E000001B1B1A78 +:101620000633B3FBF1F1C800411A5B1A9361002045 +:10163000D9E7BB07D1D140F21D0CCEE7F0B5C646C5 +:1016400044F20003242100B5C4F20403595C047879 +:10165000C90645788278C90F4068A1421DD000268E +:101660002E215E542E36995D0029FCD1012640F2D0 +:10167000100C242726403601B0466646D95DB1439A +:1016800046463143D95544F200012426C4F20401F0 +:101690008B5DDB06DB0FA342FAD1012C11D03F2377 +:1016A00044F200011840920102432E20D2B2C4F24B +:1016B0000401113BCA540B5C9342FCD104BC90461C +:1016C000F0BD44F200012426C4F204018B5D9B06A8 +:1016D000DB0FAB42E3D020278B5D2C406401BB4382 +:1016E0001C438C5524240B5D9B06DB0FAB42FAD1C7 +:1016F000D5E7C04610B5002800D174E045F2434359 +:101700004268C0F252039A4200D06AE044F20002FA +:10171000222300210124C4F20402D1542431535C59 +:10172000A3435354535CDB07DB0F002BFAD1012199 +:101730004156002917DB1F244A090C400121A14012 +:101740004EF200142032CEF2000492001151BFF389 +:101750004F8FBFF36F8F012140F244624156C2F2B6 +:10176000000289008B5000228256002A18DB1F21BC +:101770005309114001228A404EF200112033CEF26B +:1017800000019B005A50BFF34F8FBFF36F8F0022B1 +:1017900040F2446300218256C2F200039200D1500D +:1017A00002228256002A18DB1F2153091140012210 +:1017B0008A404EF200112033CEF200019B005A50B5 +:1017C000BFF34F8FBFF36F8F022240F244630021BB +:1017D0008256C2F200039200D150002343600020E1 +:1017E00010BD0720FCE70120FAE7C04630B500280D +:1017F00046D045F243434268C0F252039A423BD17D +:10180000407840B2002839DB44F200022224C4F2BE +:101810000402135D0D012B43DBB21355135D1B094D +:101820008B42FBD10421135D0B43135544F200029C +:1018300022240421C4F20402135D1942FCD00300E7 +:1018400046F20002C033C4F200029B0099580D4CCE +:10185000214099501F220123024093404EF2001272 +:10186000CEF20002944640F28012400980006044AB +:1018700083500360002030BD0720FCE70B20FAE70F +:101880000120F8E7FFFFFEFFF8B506000C00002876 +:1018900000D199E0002900D196E045F24343426827 +:1018A000C0F2520307259A4201D02800F8BD0B6808 +:1018B0003B2B00D986E04B683B2B00D982E08B683C +:1018C000172B7FD80800FFF771FE0500002879D19B +:1018D00044F2000324210120C4F204035A5C824331 +:1018E0005A545A5CD207FCD40A222778B7FBF2FC80 +:1018F0006046800060444000381A27796146B7FB93 +:10190000F2FC090101436046C9B29970614680004A +:1019100060444000381A09010143207AC9B2B0FB83 +:10192000F2FC197161460F01890061444900411AB6 +:101930000F433F213940277E9971B7FBF2FC604687 +:10194000800060444000381A277B6146B7FBF2FCF8 +:10195000090101436046C9B21972614680006044C2 +:101960004000381A09010143C9B299722169013155 +:10197000C9B2B1FBF2FC67466046BF0067447F0016 +:101980000001C91B0143C9B2197361696439C9B245 +:10199000B1FBF2F294001001A2185200891A01431F +:1019A000C9B2D981F3681A7882B144F200022421C5 +:1019B0000120C4F20402535C03435354535CDB071D +:1019C000FCD572E7032570E701256EE79868FFF7FD +:1019D00035FEEAE770B5050082B00C0000283CD067 +:1019E00000293AD045F243434268C0F252039A427A +:1019F00030D10023C356002B36DB24228A5C12B17F +:101A00000A683B2A2ED82522A25C12B162683B2AC2 +:101A100028D82622A25C12BB40F20112218D9142ED +:101A200000D139E12822A25C02B321690B2919D81F +:101A30002922A25C1AB16269643A632A12D8E26868 +:101A4000D0B2012900D145E143F2A846C0F2000618 +:101A5000765C13E0072002B070BD0120FBE7A268AE +:101A6000172AD9D90320F6E70B20F4E72922A25C34 +:101A7000002A00D027E11F26E268D0B22721615C4E +:101A800019B1002AEEDD8642ECD32A22A25C002A9C +:101A900000D012E11F215A090B401E399940130052 +:101AA0004EF200102033CEF200009B001950BFF31D +:101AB0004F8FBFF36F8F002028562423E25C002A4B +:101AC00000D1E5E025781A3BB5FBF3F18B005B18FC +:101AD0005B000A01EB1A1343802252421A436B4601 +:101AE000D2B207331A7044F200011A78C4F204012A +:101AF000D2B20A742522A25C002A00D1C6E00A21D3 +:101B00002679B6FBF1F5A900491949002A01711A95 +:101B10001143802252420A43D2B21A7044F20001A9 +:101B20001A78C4F20401D2B28A742622A25C002A76 +:101B300000D1A9E00A21267AB6FBF1F5A9004919DE +:101B400049002A01711A1143802252420A43D2B23B +:101B50001A7044F200011A78C4F20401D2B20A7574 +:101B60002A22A25C002A00D18CE08022A169524284 +:101B70000A43D2B21A7044F200011A78C4F2040186 +:101B8000D2B28A752722A25C002A78D00A21267B4D +:101B9000B6FBF1F5A900491949002A01711A114350 +:101BA000802252420A43D2B21A7044F200011A78DB +:101BB000C4F20401D2B20A762822A25C002A5CD0C8 +:101BC0000A2122690132D2B2B2FBF1F5A90049190A +:101BD0004900521A2E011643802252423243D2B299 +:101BE0001A7044F200011A78C4F20401D2B28A7663 +:101BF0002922A15CF9B30A256269643AD2B2B2FB28 +:101C0000F5F6B500AD196D003401521B2243D2B276 +:101C10001A7044F200021B78C4F2040293837F23FB +:101C2000947FC90123400B43222101249377535C05 +:101C30002343222453542139135D1942FCD003005D +:101C400046F20002C0339B00C4F200029C58224DB1 +:101C50002C409C501F23034099404EF20013CEF2BB +:101C600000039C4640F28013400980006044C1504C +:101C700001600020EFE61970CBE71A70B1E701228E +:101C80001A7092E71A7076E71A7062E71A7045E7E1 +:101C90006B4607331A7026E7DA3AA25C002A00D1B5 +:101CA000C0E62000FFF782FC002800D0DAE600231F +:101CB000EB56181E00DA00E7ECE6A269062A00D807 +:101CC000E8E60320C7E66269643A632A00D8D2E6F0 +:101CD0000320C0E61D26D1E6FFFFFEFF70B50028F9 +:101CE00000D178E0002900D175E045F24343426815 +:101CF000C0F252039A4200D06BE044F20002072384 +:101D0000C4F20402157CEDB22809184084000019C1 +:101D10000F244000254040190860957CEDB2280949 +:101D20001840860080192540400040194860157D04 +:101D3000EDB228091840860080192540400040195E +:101D40008860957DEDB228091840860080192540ED +:101D5000400040198861157EEDB2280918408600C0 +:101D60008019254040004019C860907EC0B2050926 +:101D70002B409D005B1920405B001B18013B0B6151 +:101D8000908BC0B20309044024209D005B195B00C6 +:101D90001B19DBB264334B61137CDB090B54937C5E +:101DA0000130DB090B54137D0130DB090B54937DAB +:101DB0000430DB090B54137E0338DB090B54937E8C +:101DC0000130DB090B54937F29220020DB098B545F +:101DD00070BD0720FCE70120FAE7C046F8B545468C +:101DE000DE4657464E460400E0B50D00002800D1FF +:101DF000B3E0002900D1B0E045F243434268C0F2AD +:101E000052039A4200D1F3E00878E160012800D142 +:101E1000A5E08B6859785A681B78012B00D1A7E0A0 +:101E20003F2A00D9A2E00D220F211123AA566E6984 +:101E3000227069566170EB562661AE699B466661F9 +:101E40000026A37020722677002925DB4EF20013AE +:101E5000CEF200039C4640F200388E08B600B4442F +:101E60006346464640F2FF0A9B590327994653466C +:101E7000AE7B0F40FF00B6011E40BB40BE401F00BE +:101E80004B46BB431E4347466346DE5140F2446621 +:101E90008900C2F200068C51002A23DB4EF20013A7 +:101EA000CEF200039C469608B600664440F2003C21 +:101EB000634640F2FF09F358032798464B46297BB7 +:101EC0001740FF0089011940BB40B9401F0043463D +:101ED000BB4319436346F15040F244619200C2F2A1 +:101EE000000154505B46002B23DB99084EF200138F +:101EF000CEF200039C4640F2003789006144CB5982 +:101F000003269C4640F2FF085B461E4043462A7C5F +:101F1000F60092011A40B340B2401E006346B3433C +:101F20001A43CA515B4640F244629B00C2F200026F +:101F30009C5044F200032422C4F204039A5CD207AA +:101F40001BD545F243430020C0F2520363603CBC02 +:101F500090469946A246AB46F8BD0120F7E740F20D +:101F6000F8124B68073B934200D85CE70320EEE78A +:101F7000022900D054E70320E9E728229854C8BB7F +:101F800040F2E831643000F0F3FA44F20002242118 +:101F90000120C4F20402535C83435354535CDB07B7 +:101FA000DB0F002BFAD14026505C30435054217A8D +:101FB000012902D15385AB88938544F20002242184 +:101FC0007F23C4F20402505C03405354535C5BB261 +:101FD000002BFBDB0220535C0343535444F200020A +:101FE00024200221C4F20402135C1942FCD1A8E7A8 +:101FF0000E20ACE70121BE2000F0BAFAC5E7C046CA +:10200000F0B54E46DE4657464546E0B5844685B0B7 +:102010008946002800D1BFE0002900D1BCE045F28C +:1020200043434268C0F252039A4200D0AAE0022120 +:102030004156002900DACBE04EF20012CEF2000247 +:1020400090464B099B004344186803931F230B40A1 +:10205000D8400293012303409A46FBB944F20002A0 +:1020600022200224C4F20402135C234322241354CA +:102070002038135D1842FCD046F20003C031C4F290 +:1020800000038900CA5854480240CA500123029AEA +:102090000399934040F280128B500B6044F200038E +:1020A00040F2000BC4F20403624659461177987857 +:1020B00019799F791E7A9D7A1C7BDA89C0B292B217 +:1020C00001926246127FC9B2FFB2F6B2EDB2E4B23B +:1020D000002AE9D1019A8B46D2B2904602099100BA +:1020E0008C46624440F20F0C6146520008401018C2 +:1020F0004A46C0B210605A4612099000121858465B +:102100005200084011184A46C9B25160BA06920FEF +:1021100091005218614652000F40D7194A46FFB24B +:102120009760320991005218614652000E4096198C +:102130004A46F6B296612A09910052186146520049 +:102140000D4055194A46EDB2D5602209910052184A +:10215000614652000C4014194A46E4B2013C146135 +:102160004246120991005218404661465200014011 +:1021700052184946D2B264324A6152467AB140F2AC +:10218000000A01E040F2070A504605B03CBC904608 +:102190009946A246AB46F0BD40F2010AF4E722217F +:1021A00002205A5C82435A5444F200022030C4F2A6 +:1021B00004022039135C1942FCD10123029A0399CD +:1021C000934080228B50BFF34F8FBFF36F8FDBE7BD +:1021D00040F20B0AD8E7C046FFFFFEFF10B584B0FF +:1021E000EFF3038440F24463103C64B2C2F2000394 +:1021F000A200D35863B1196951B100229A565B69A4 +:10220000121B501E824102A802700393019388475B +:1022100046F20003C034C4F20003A400E2580249AD +:102220000A40E25004B010BDFFFFFEFFEFF303834E +:1022300040F24462103B5BB29900C2F200028A583D +:102240000121117746F20002C033C4F200029B0064 +:1022500099580248014099507047C046FFFFFEFF61 +:1022600010B5B8B145F254240368C5F24F04A34237 +:1022700012D17AB1FF200B0A014040F600001B0189 +:102280005B18C4F204009B001B5800209B07DB0F67 +:10229000137010BD0120FCE70720FAE700B345F2F8 +:1022A00054230068C5F24F03984213D1012A15D870 +:1022B000FF2301200B4098404FF6FF7303405AB1B3 +:1022C0000022C4F2040294460020090A4901614434 +:1022D0008B6070470720FCE70304F1E70320F8E771 +:1022E0000120F6E7F0B5DE4657464E464546E0B5D6 +:1022F00083B0EFF31082012383F3108840F2406330 +:10230000C2F2000301931B6833B940F60054C4F2D3 +:102310000404E3704033E370019C236801332360BD +:1023200082F31088038883B30B6840F60004984654 +:10233000254B002240F2FF0C9946C4F20404D10060 +:1023400041448E888025330A9A4663461E40534690 +:1023500009686D021B0129420FD04F469D19AD003F +:10236000AA462D593D40AB4655465F462F514D4636 +:102370000D40AB4655465F462F519B199B001951A6 +:102380000132038892B29342D9D8EFF3108201232D +:1023900083F31088019B1B681BB101990B68013BFB +:1023A0000B60019B1B6833B940F60051C4F2040175 +:1023B000CB708033CB7082F3108803B03CBC904666 +:1023C0009946A246AB46F0BDFFFFFEFF10B50B00DD +:1023D00080B179B14A686AB145F254220168C5F208 +:1023E0004F02914208D00260191D1800FFF77AFFD2 +:1023F000002010BD0120FCE70E20FAE74EF200039A +:10240000A022C4F201039A5C824217D036229A5C61 +:102410001AB93C215A5CD207FCD54EF20002A02129 +:10242000C4F20102535CDB06FCD450544EF20002AD +:10243000A021C4F20102535CDB06FCD47047C04605 +:102440004EF20003262240F26C01C4F20103985CB4 +:102450001B6A8000C2F2000141585B015B0F40F231 +:102460006C52D940C2F20002116070474EF2000374 +:1024700040F2FE323649C4F2010370B599524CF273 +:10248000000140F200100024C4F201010C5240F29D +:102490006C0446F60041C2F20004C0F2DC21216067 +:1024A00041F20021C0F27A01616048F2000142F27B +:1024B0000040A1602161002240F21341C0F2F4000B +:1024C000E0605A540920A221585440F28041585CDF +:1024D00018B140F281401A545A540020FFF78EFF81 +:1024E0004EF2000300213622C4F2010399543C311C +:1024F0005A5CD207FCD50125312200219D540B3AAC +:1025000099540131FF31C1F200011962985C1A6AD5 +:10251000800020585201520F40F26C51D04040F2DE +:10252000FE32C2F2000108600A4999524CF20002E0 +:1025300040F2041340F20411C4F20102D552535A7E +:10254000002BFCD101210133FF33D15270BDC046B5 +:1025500003A5FFFF00A5FFFF20B180231B0303603D +:10256000002070470120FCE701380028FCD17047AB +:1025700040F26C524CF600234143C2F2000270B5A7 +:102580001468C3F69A330D00B3FBF4F4080040F26C +:10259000E8320023002100F0DFF831B9B0FBF4F09D +:1025A000800808B1FFF7E0FF70BDA400B5FBF4F0B0 +:1025B00040F2E8320023002100F0CEF80029F0D0EC +:1025C00001204042FFF7D0FFEEE7C046F8B546F2E3 +:1025D000000340F2401240F2385700240126C4F2B2 +:1025E00000039D5AC2F20007ADB22B00E340E0B2F7 +:1025F0001E4203D0A300DB5903B1984701340D2CD0 +:10260000F3D146F2000340F23012C4F200039D52AF +:10261000F8BDC04646F200000023C4F2000043F2B9 +:102620008842C0F200029A1811781A00C032920053 +:1026300001331150202BF2D17047C04600BE7047C5 +:1026400010B500F003F8FEF7ABFFFEE770B5002011 +:1026500082B0FEF761FD0024FFF708FF6B46DC71D6 +:10266000DA1DDB7947F20003C4F2040359683748E6 +:1026700040F26405014040F600005960C4F20400D5 +:102680000168C2F20005C907C90F11700168C907C6 +:10269000C90F117001680120C907C90F117080228C +:1026A000596852050A435A60FEF736FD40F2C4628B +:1026B00040F28000C2F20002C2F20000121A0021B1 +:1026C00000F085F840F2000040F26C0243F2246111 +:1026D000C2F20000C2F20002121AC0F2000100F0C1 +:1026E0006DF840F600531A4AC4F200039C801A8029 +:1026F00040F6C822C2F200029A6040F6C862C2F2F6 +:102700000002DA6046F2000240F2201141F20000BD +:10271000C4F20002505201229A80FFF791FE02207B +:10272000FEF7FAFC40F26803C2F200035B1B9E1046 +:10273000002B04DD08CD01349847A642FADCFFF7F0 +:1027400069FF002000F006F802B070BDFFFFFFEF48 +:1027500000A5FFFF7047C046F0B54FF6FF75CE46A7 +:1027600047462C00154080B52F000440160C9946B2 +:10277000030C5D436743734366433C0C7619A4190D +:102780009C46A54203D980235B029846C4444B462D +:102790004FF6FF7643435143250C374065442404EC +:1027A000E4195B19591820000CBC90469946F0BDFD +:1027B00010B50A22002100F08DF810BD002310B5DD +:1027C0009A4200D110BDCC5CC4540133F8E7030039 +:1027D0001218934200D1704719700133F9E7FFFFD7 +:1027E000F0B585B001910E00384908278C4603905A +:1027F000350060462978741C405C2600384000286B +:10280000F6D12D2933D121780130AC1C0090002B5A +:1028100057D0102B09D1302907D1202021788143AE +:10282000582949D11023617802340098284D002698 +:102830004719B7FBF3FC60465843381A0290300042 +:102840000D00303D092D17D829008B4220DD751C65 +:102850000AD001267642844506D302D1029D8D42DC +:1028600002DB01265843081821780134E8E72B29B8 +:10287000CCD12178AC1CC9E70D00413D192D01D800 +:102880003739E2E70D00613D192D01D85739DCE7F2 +:10289000731C06D12223039938000B603AB905B0A6 +:1028A000F0BD009B03B14042002AF8D00EB1631E78 +:1028B0000193019B1360F2E73021002BB5D108335F +:1028C000B3E73029A9D00A23AFE7C046BF340000E0 +:1028D000FFFFFF7F10B513000A00010002480068E7 +:1028E000FFF77EFF10BDC04600000020F8B5C046CF +:1028F000F8BC08BC9E467047F8B5C046F8BC08BC9A +:102900009E4670475465726D696E616C00000000F0 +:102910005254540053454747455200FF303132333B +:1029200034353637383941424344454668616C5F37 +:10293000656E74727900FFFF726561645F496E7045 +:1029400075745F66726F6D5F525454006C65645F9E +:102950006C6576656C5F73657400FFFF0D0A2A2A4B +:102960002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AC7 +:102970002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB7 +:102980002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA7 +:102990002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A97 +:1029A000000000000D0A2A20202052656E65736128 +:1029B0007320465350204578616D706C65205072CD +:1029C0006F6A65637420666F7220725F7274632031 +:1029D0004D6F64756C652020202020202020202051 +:1029E000202020202020202A00000000312E30004E +:1029F0000D0A2A2020204578616D706C6520507288 +:102A00006F6A6563742056657273696F6E202573F3 +:102A100020202020202020202020202020202020B6 +:102A200020202020202020202020202020202020A6 +:102A300020202A000D0A2A202020466C6578205389 +:102A40006F667477617265205061636B20566572A2 +:102A500073696F6E202025642E25642E2564202046 +:102A60002020202020202020202020202020202066 +:102A7000202020202020202020202A000D0A52651E +:102A800066657220746F20726561646D652E74785E +:102A9000742066696C6520666F72206D6F726520A8 +:102AA00064657461696C73206F6E204578616D7028 +:102AB0006C652050726F6A65637420616E640D0AE4 +:102AC00046535020557365722773204D616E7561B2 +:102AD0006C20666F72206D6F726520696E666F7212 +:102AE0006D6174696F6E2061626F757420725F72C0 +:102AF0007463206472697665720D0A000D0A546869 +:102B0000652070726F6A6563742064656D6F6E73A3 +:102B100074726174657320525443206D6F64756CD8 +:102B2000652E0D0A55736572206973206769766595 +:102B30006E206F7074696F6E7320746F207365748C +:102B4000205254432043616C656E64617220746945 +:102B50006D6520616E642043616C656E64617220F6 +:102B6000616C61726D0D0A557365722063616E2030 +:102B7000656E61626C6520706572696F646963205F +:102B8000696E7465727275707420616E6420766906 +:102B90006577207468652063757272656E74205263 +:102BA00054432043616C656E6461722074696D6585 +:102BB0002E0D0A000D0A202A2A2052544320494E85 +:102BC0004954204641494C4544202A2A200D0A00F8 +:102BD0000D0A43757272656E74205254432043612E +:102BE0006C656E646172204461746520616E64205E +:102BF00054696D653A200D0A000000000D0A202A74 +:102C00002A2047657474696E672063757272656EF9 +:102C100074205254432043616C656E646172207469 +:102C2000696D65206661696C6564202A2A200D0A39 +:102C3000000000000D0A5254432043616C656E642D +:102C400061722054696D6520536574206661696CFA +:102C500065642E0D0A436C6F73696E672074686536 +:102C6000206472697665722E205265737461727485 +:102C700020746865204170706C69636174696F6E5F +:102C80000D0A00000D0A5254432043616C656E64C6 +:102C900061722054696D65206973207365742073B7 +:102CA00075636365737366756C6C79000D0A456EA8 +:102CB00074657220616E79206B657920286F746865 +:102CC0006572207468616E20312C322C332C3429CB +:102CD00020746F20676F206261636B20746F2074B3 +:102CE0006865206D656E75200D0A00000D0A52544E +:102CF000432043616C656E64617220416C61726D4A +:102D000020536574206661696C65642E0D0A436CFE +:102D10006F73696E67207468652064726976657286 +:102D20002E2052657374617274207468652041703E +:102D3000706C69636174696F6E0D0A000D0A5254FC +:102D4000432043616C656E64617220416C61726DF9 +:102D5000206973207365742073756363657373668C +:102D6000756C6C79000000000D0A506572696F6423 +:102D7000696320696E746572727570742072617413 +:102D8000652073657474696E67206661696C65643B +:102D90002E0D0A436C6F73696E672074686520643A +:102DA00072697665722E2052657374617274207434 +:102DB0006865204170706C69636174696F6E0D0A9B +:102DC000000000000D0A506572696F646963206934 +:102DD0006E746572727570742072617465206973A7 +:102DE00020736574207375636365737366756C6CAB +:102DF000790000000D0A47657474696E6720637579 +:102E00007272656E74205254432043616C656E6427 +:102E100061722074696D65206661696C65642E0D50 +:102E20000A436C6F73696E67207468652064726909 +:102E30007665722E205265737461727420746865B1 +:102E4000204170706C69636174696F6E0D0A0000D7 +:102E50000D0A47657474696E672063757272656EDA +:102E600074205254432043616C656E646172207417 +:102E7000696D652069732073756363657373667527 +:102E80006C0000000D0A2052544320416C61726DA9 +:102E900020496E74657272757074200D0A0000000E +:102EA0000D0A2052544320416C61726D206F6363A0 +:102EB0007572726564206174202044617465203AE3 +:102EC0002025642F25642F2564200A2054696D6510 +:102ED00020203A202564203A202564203A202564C9 +:102EE000200D0A0A000000000D0A204C45442077FE +:102EF000696C6C206265207475726E6564204F4E3B +:102F000020666F722032207365636F6E6473200DCC +:102F10000A0000000D0A202A2A2047657474696E91 +:102F200067205254432043616C656E646172207463 +:102F3000696D65206661696C6564202A2A200D0A26 +:102F4000000000000D0A202A2A20525F494F504FEE +:102F500052545F50696E52656164204641494C4548 +:102F600044202A2A200D0A000D0A202A2A20525F16 +:102F7000494F504F52545F50696E577269746520C3 +:102F80004641494C4544202A2A200D0A00000000F1 +:102F90005B4552525D20496E2046756E6374696FC1 +:102FA0006E3A20257328292C202573000D0A5265BE +:102FB0007475726E6564204572726F7220436F641F +:102FC000653A203078257820200D0A007274635FFE +:102FD000696E697400FFFFFF7365745F7274635FED +:102FE00063616C656E6461725F74696D6500FFFF9B +:102FF0007365745F7274635F63616C656E64617244 +:103000005F616C61726D00FF7365745F7274635F02 +:10301000706572696F6469635F7261746500FFFF58 +:103020006765745F7274635F63616C656E6461721F +:103030005F74696D6500FFFF7274635F6465696E3C +:10304000697400FF0D0A47657474696E67205254F5 +:10305000432043616C656E6461722074696D652004 +:103060006661696C65642E0D0A0000000D0A20522D +:1030700054432074696D65202044617465203A20B2 +:1030800025642F25642F2564200A2054696D65204E +:10309000203A202564203A202564203A2025642007 +:1030A0000D0A0A000D0A2A2A2A2A2A2A2A2A2A2A44 +:1030B0002A2A2A2A2A2A20525443204170706C69F5 +:1030C000636174696F6E204D656E75202A2A2A2A05 +:1030D0002A2A2A2A2A2A2A2A2A2A2A2A0D0A0000E1 +:1030E00031203A2020536574205254432043616CB0 +:1030F000656E646172204461746520616E64205461 +:10310000696D650D0A00000032203A202053657475 +:10311000205254432043616C656E64617220416C9F +:1031200061726D204461746520616E642054696D24 +:10313000650D0A0033203A20205365742052544311 +:1031400020506572696F6469632049525120526151 +:10315000746520616E642053746172742069740D0B +:103160000A00000034203A2020476574204375721D +:1031700072656E7420525443204461746520616E00 +:10318000642054696D650D0A000000005573657276 +:1031900020496E707574203A202000FF2A2A2052A0 +:1031A0005443206D6F64756C6520436C6F736520AC +:1031B0006661696C6564202A2A20200D0A00FFFFE1 +:1031C0000D0A525443206D6F64756C65206F7065F5 +:1031D0006E206661696C65642E0D0A5265737461B8 +:1031E000727420746865204170706C6963617469E1 +:1031F0006F6E0D0A00FFFFFF0D0A2053657474699E +:103200006E672043616C656E64617220416C61720F +:103210006D20666F7220525443200D0A000000009A +:103220000D0A43616C656E64617220616C61726D40 +:1032300020536574206661696C65642E0D0A000078 +:103240000D0A43616C656E64617220616C61726D20 +:1032500020476574206661696C65642E0D0A000064 +:103260000D0A2052544320416C61726D20736574C5 +:1032700020746F202044617465203A2025642F2536 +:10328000642F2564200A2054696D6520203A20258A +:1032900064203A202564203A202564200D0A0A0083 +:1032A0000D0A2053657474696E672052544320449C +:1032B00061746520616E642054696D65200D0A009B +:1032C0000D0A20456E746572204461746520616E3C +:1032D000642054696D6520696E2044443A4D4D3A2E +:1032E000595959592048483A4D4D3A535320666F21 +:1032F000726D61742E0D0A000D0A43616C656E6477 +:10330000617254696D6520536574206661696C65EE +:10331000642E0D0A000000000D0A43616C656E64A6 +:10332000617254696D6520476574206661696C65DA +:10333000642E0D0A000000000D0A20525443206341 +:10334000616C656E6461722073657420746F2020F7 +:1033500044617465203A2025642F25642F2564205C +:103360000A2054696D6520203A202564203A2025E2 +:1033700064203A202564200D0A0A00FF0D0A20531C +:10338000657474696E6720506572696F6469632043 +:10339000495251207261746520666F722052544305 +:1033A000200D0A000D0A506572696F646963206917 +:1033B0006E746572727570742072617465207365C5 +:1033C0007474696E67206661696C65642E0D0A000D +:1033D00000000000FF000000F033000002000201C6 +:1033E000020200001D1500000000000000000000A7 +:1033F0000100010000000000110000000034000086 +:103400000000010C0100000000800000030000002B +:103410000000010008010000000001060B0100008F +:10342000000001060C010000000000000102000085 +:103430000000010404020000040000000502000076 +:103440000040000006020000000001000003000030 +:103450000000010603030000000001060403000051 +:1034600000000113070400000000010C0904000023 +:10347000000001040B040000000001130E0900000D +:10348000000001130F090000191A1B0000000000C2 +:10349000000000000000000000000000000000002C +:1034A00000000000000000001F1C1F1E1F1E1F1F29 +:1034B0001E1F1E1F01000000BC340000050200207A +:1034C00020202020202020202828282828202020D4 +:1034D0002020202020202020202020202020208884 +:1034E00010101010101010101010101010101004E8 +:1034F0000404040404040404041010101010101038 +:10350000414141414141010101010101010101012B +:103510000101010101010101010110101010101041 +:1035200042424242424202020202020202020202FB +:103530000202020202020202020210101010200017 +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000FF0C +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:0436200000000000A6 +:103624000400002000000000E03500000036000027 +:10363400C035000000000000000000000000000091 +:103644000000000000000000000000000000000076 +:103654000000000000000000000000000000000066 +:103664000000000000000000000000000000000056 +:103674000000000000000000000000000000000046 +:0C368400000000002D0500000105000002 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:040000030000264192 +:00000001FF diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..e1b3447bf8 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (32) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..64021ff6f0 --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_rtc" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..5d2f1fdd2f --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,290 @@ +/*********************************************************************************************************************** + * File Name : hal_entry.c + * Description : Contains data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" +#include "rtc_ep.h" +#include + +/*******************************************************************************************************************//** + * @addtogroup rtc_ep + * @{ + **********************************************************************************************************************/ + +void R_BSP_WarmStart(bsp_warm_start_event_t event); +/* Internal function to read input from RTT */ +static void read_Input_from_RTT(void); +/* Internal function to toggle LED status */ +static void led_level_set(bsp_io_level_t led_level); +extern bsp_leds_t g_bsp_leds; +/* Variable to store time */ +rtc_time_t g_current_time = {RESET_VALUE}; + +volatile uint32_t g_alarm_irq_flag = RESET_FLAG; //flag to check occurrence of alarm interrupt +volatile uint32_t g_periodic_irq_flag = RESET_FLAG; //flag to check occurrence of periodic interrupt +volatile uint32_t g_invalid_sequence = RESET_FLAG; //flag to check if user provides options in proper sequence + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ +void hal_entry(void) +{ + fsp_err_t err = FSP_SUCCESS; + fsp_pack_version_t version = {RESET_VALUE}; + bsp_io_level_t Led_level = BSP_IO_LEVEL_LOW; + time_t rawtime = RESET_VALUE; + struct tm * time_info = {RESET_VALUE}; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + + /* Example Project information printed on the Console */ + APP_PRINT(BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + APP_PRINT(EP_INFO); + + /* Initialize RTC driver */ + err = rtc_init(); + if (FSP_SUCCESS != err) + { + /* RTC module init failed */ + APP_ERR_PRINT("\r\n ** RTC INIT FAILED ** \r\n"); + APP_ERR_TRAP(err); + } + + /* The usage of time related APIs from time.h (time(), localtime(), and asctime()) are for demonstration purpose. + * While implementing stand-alone application, user needs to avoid these APIs or have the proper implementation to take care of this. + * For now, this will work only in the Debugger environment. + * Note: If you flash the code and connect the RTT alone, it will be stuck in the loop waiting for the time(); + * In the Debugger mode this works, as the Debugger takes care of the syscal to get the time. */ + + /* Calculate current time in seconds since epoch */ + time(&rawtime); + /* Convert seconds value to calendar date and time. Default time-zone: GMT */ + time_info = localtime(&rawtime); + /* Prints local Calendar Date and Time referenced to GMT. */ + APP_PRINT("\r\nCurrent local date and time referenced to GMT: %s", asctime(time_info)); + + /* Menu for User Selection */ + APP_PRINT(MENU_INFO); + + while(true) + { + /* Process input only when User has provided one */ + if (APP_CHECK_DATA) + { + read_Input_from_RTT(); + } + + /* Check the occurrence of alarm interrupt */ + if (SET_FLAG == g_alarm_irq_flag) + { + APP_PRINT("\r\n RTC Alarm Interrupt \r\n"); + /* Get current RTC Calendar Date and Time */ + err = R_RTC_CalendarTimeGet(&g_rtc_ctrl, &g_current_time); + if (FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\n ** Getting RTC Calendar time failed ** \r\n"); + APP_ERR_TRAP(err); + } + /* Modify the date in standard format to user readable format */ + rtc_date_readability_update(&g_current_time); + APP_PRINT("\r\n RTC Alarm occurred at Date : %d/%d/%d \n Time : %d : %d : %d \r\n\n", g_current_time.tm_mday, + g_current_time.tm_mon, g_current_time.tm_year, g_current_time.tm_hour, + g_current_time.tm_min, g_current_time.tm_sec); + APP_PRINT("\r\n LED will be turned ON for 2 seconds \r\n"); + + /* Turn ON LED on occurrence of alarm */ + led_level_set(BSP_IO_LEVEL_HIGH); + /* Delay to glow LED for 2 seconds */ + R_BSP_SoftwareDelay(LED_DELAY, BSP_DELAY_UNITS_SECONDS); + /* Turn OFF LED */ + led_level_set(BSP_IO_LEVEL_LOW); + g_alarm_irq_flag = RESET_FLAG; + + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + } + + if (SET_FLAG == g_periodic_irq_flag) + { + /* Toggle LED on occurrence of periodic interrupt */ + err = R_IOPORT_PinRead(&g_ioport_ctrl, g_bsp_leds.p_leds[RESET_VALUE] , &Led_level); + if(FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\n ** R_IOPORT_PinRead FAILED ** \r\n"); + APP_ERR_TRAP(err); + } + + Led_level ^= BSP_IO_LEVEL_HIGH; + + led_level_set(Led_level); + g_periodic_irq_flag = RESET_FLAG; + } +} + +} + +/*******************************************************************************************************************//** + * @brief This function reads the command(input) for RTT and processes the command. + * + * @param[in] None + * @retval None + **********************************************************************************************************************/ +static void read_Input_from_RTT(void) +{ + fsp_err_t err = FSP_SUCCESS; // Error status + + /* Variable to store user input */ + unsigned char rByte[BUFFER_SIZE_DOWN] = {NULL_CHAR}; + uint8_t converted_rtt_input = RESET_VALUE; + + APP_READ(rByte); + converted_rtt_input = (uint8_t)atoi((char *)rByte); + + switch (converted_rtt_input) + { + case SET_TIME: + { + err = set_rtc_calendar_time(); + if (FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\nRTC Calendar Time Set failed.\r\nClosing the driver. Restart the Application\r\n"); + APP_ERR_TRAP(err); + } + else + { + APP_PRINT("\r\nRTC Calendar Time is set successfully"); + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + } + break; + } + + case SET_ALARM: + { + err = set_rtc_calendar_alarm(); + if (FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\nRTC Calendar Alarm Set failed.\r\nClosing the driver. Restart the Application\r\n"); + APP_ERR_TRAP(err); + } + else if (SET_FLAG == g_invalid_sequence) + { + APP_PRINT("\r\nPlease set RTC calendar Date and Time\r\n"); + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + g_invalid_sequence = RESET_FLAG; + } + else + { + APP_PRINT("\r\nRTC Calendar Alarm is set successfully"); + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + } + break; + } + + case SET_PERIODIC_IRQ: + { + err = set_rtc_periodic_rate(); + if (FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\nPeriodic interrupt rate setting failed.\r\nClosing the driver. Restart the Application\r\n"); + APP_ERR_TRAP(err); + } + else + { + APP_PRINT("\r\nPeriodic interrupt rate is set successfully"); + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + } + break; + } + + case GET_CURRENT_TIME: + { + err = get_rtc_calendar_time(); + if (FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\nGetting current RTC Calendar time failed.\r\nClosing the driver. Restart the Application\r\n"); + APP_ERR_TRAP(err); + } + else if (SET_FLAG == g_invalid_sequence) + { + APP_PRINT("\r\nPlease set RTC calendar Date and Time\r\n"); + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + g_invalid_sequence = RESET_FLAG; + } + else + { + APP_PRINT("\r\nGetting current RTC Calendar time is successful"); + APP_PRINT("\r\nEnter any key (other than 1,2,3,4) to go back to the menu \r\n"); + } + break; + } + + default: + { + APP_PRINT(MENU_INFO); + break; + } + } +} + +/*******************************************************************************************************************//** + * @brief This function sets the level of LED pins + * + * @param[IN] led_level level to be set + * @retval None + **********************************************************************************************************************/ +static void led_level_set(bsp_io_level_t led_level) +{ + fsp_err_t err = FSP_SUCCESS; + /* Set LED status */ + err = R_IOPORT_PinWrite(&g_ioport_ctrl, g_bsp_leds.p_leds[RESET_VALUE], led_level); + if(FSP_SUCCESS != err) + { + rtc_deinit(); + APP_ERR_PRINT("\r\n ** R_IOPORT_PinWrite FAILED ** \r\n"); + APP_ERR_TRAP(err); + } +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) { + if (BSP_WARM_START_POST_C == event) { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup rtc_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.c b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.c new file mode 100644 index 0000000000..f91e6d419c --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.c @@ -0,0 +1,307 @@ +/*********************************************************************************************************************** + * File Name : rtc_ep.c + * Description : Contains data structures and functions used in rtc_ep.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * Copyright [2015-2017] Renesas Electronics Corporation and/or its licensors. All Rights Reserved. + * + * This file is part of Renesas RA Flex Software Package (FSP) + * + * The contents of this file (the "contents") are proprietary and confidential to Renesas Electronics Corporation + * and/or its licensors ("Renesas") and subject to statutory and contractual protections. + * + * This file is subject to a Renesas FSP license agreement. Unless otherwise agreed in an FSP license agreement with + * Renesas: 1) you may not use, copy, modify, distribute, display, or perform the contents; 2) you may not use any name + * or mark of Renesas for advertising or publicity purposes or in connection with your use of the contents; 3) RENESAS + * MAKES NO WARRANTY OR REPRESENTATIONS ABOUT THE SUITABILITY OF THE CONTENTS FOR ANY PURPOSE; THE CONTENTS ARE PROVIDED + * "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, AND NON-INFRINGEMENT; AND 4) RENESAS SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, OR + * CONSEQUENTIAL DAMAGES, INCLUDING DAMAGES RESULTING FROM LOSS OF USE, DATA, OR PROJECTS, WHETHER IN AN ACTION OF + * CONTRACT OR TORT, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE CONTENTS. Third-party contents + * included in this file may be subject to different terms. + **********************************************************************************************************************/ + +#include "common_utils.h" +#include "rtc_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup rtc_ep + * @{ + **********************************************************************************************************************/ + +/* Variable to store time */ +static rtc_time_t g_set_time = {RESET_VALUE}; +static rtc_time_t g_present_time = {RESET_VALUE}; +static uint32_t set_time_flag = RESET_FLAG; //Flag to be set on successful RTC Calendar setting +static void rtc_date_time_conversion(rtc_time_t * time, unsigned char read_buffer[]); + +extern volatile uint32_t g_alarm_irq_flag; +extern volatile uint32_t g_periodic_irq_flag; +extern volatile uint32_t g_invalid_sequence; + + +/*******************************************************************************************************************//** + * @brief This functions initializes RTC module. + * @param[IN] None + * @retval FSP_SUCCESS Upon successful open of RTC module + * @retval Any Other Error code apart from FSP_SUCCESS Unsuccessful open + **********************************************************************************************************************/ +fsp_err_t rtc_init(void) +{ + fsp_err_t err = FSP_SUCCESS; // Error status + + /* Open RTC module */ + err = R_RTC_Open(&g_rtc_ctrl, &g_rtc_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nRTC module open failed.\r\nRestart the Application\r\n"); + } + return err; +} + +/*******************************************************************************************************************//** + * @brief This functions sets the Calendar time provided by user. + * @param[IN] None + * @retval FSP_SUCCESS Upon successful Calendar time set + * @retval Any Other Error code apart from FSP_SUCCESS Unsuccessful Calendar time set + **********************************************************************************************************************/ +fsp_err_t set_rtc_calendar_time(void) +{ + fsp_err_t err = FSP_SUCCESS; // Error status + unsigned char read_time[BUFFER_SIZE_DOWN] = {NULL_CHAR}; + + APP_PRINT ("\r\nSetting RTC Date and Time \r\n"); + + APP_PRINT("\r\nEnter Date and Time in DD:MM:YYYY HH:MM:SS format.\nSample Input: '04:11:2019 15:23:05'\r\n"); + + /* Wait until data is available in RTT */ + while(BYTES_RECEIVED_ZERO == APP_CHECK_DATA); + + /* Reading Calendar time provided by the user */ + APP_READ(read_time); + + /* Modify user provided date and time to standard format */ + rtc_date_time_conversion(&g_set_time, &read_time[0]); + + /* Set the time provided by user */ + err = R_RTC_CalendarTimeSet(&g_rtc_ctrl, &g_set_time); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nCalendarTime Set failed.\r\n"); + return err; + } + + /* Get the current Calendar time */ + err = R_RTC_CalendarTimeGet(&g_rtc_ctrl, &g_present_time); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nCalendarTime Get failed.\r\n"); + return err; + } + /* Modify the date in standard format to user readable format */ + rtc_date_readability_update(&g_present_time); + + APP_PRINT("\r\n RTC calendar set to Date : %d/%d/%d \n Time : %d : %d : %d \r\n\n", g_present_time.tm_mday, + g_present_time.tm_mon, g_present_time.tm_year, g_present_time.tm_hour, + g_present_time.tm_min, g_present_time.tm_sec); + set_time_flag = SET_FLAG; + return err; +} + +/*******************************************************************************************************************//** + * @brief This functions sets the alarm time provided by user. + * @param[IN] None + * @retval FSP_SUCCESS Upon successful Calendar alarm set + * @retval Any Other Error code apart from FSP_SUCCESS Unsuccessful Calendar alarm set + **********************************************************************************************************************/ +fsp_err_t set_rtc_calendar_alarm(void) +{ + fsp_err_t err = FSP_SUCCESS; // Error status + rtc_alarm_time_t alarm_time_set = {RESET_VALUE}; + rtc_alarm_time_t alarm_time_get = {RESET_VALUE}; + unsigned char read_alarm[BUFFER_SIZE_DOWN] = {NULL_CHAR}; + + /*Set alarm only if proper RTC Calendar date and Time is set */ + if (SET_FLAG == set_time_flag) + { + APP_PRINT("\r\nSetting Calendar Alarm for RTC \r\n"); + + /* Set the flags for which the alarm has to be generated */ + alarm_time_set.hour_match = false; + alarm_time_set.min_match = false; + alarm_time_set.sec_match = true; + alarm_time_set.mday_match = false; + alarm_time_set.mon_match = false; + alarm_time_set.year_match = false; + + APP_PRINT("\r\nEnter seconds value (Format: SS) for which recursive alarm has to be set. " + "\nPlease input seconds value in the range between 00 and 59.\nSample Input: '35'\r\n"); + + /* Wait until data is available in RTT */ + while(BYTES_RECEIVED_ZERO == APP_CHECK_DATA); + + /* Reading time value for which alarm has to be generated */ + APP_READ(read_alarm); + + /* Modify user provided time value to standard format */ + alarm_time_set.time.tm_sec = (((read_alarm[0] - ASCII_ZERO) * PLACE_VALUE_TEN )+ (read_alarm[1] - ASCII_ZERO)); + + /* Set the alarm time provided by user*/ + err = R_RTC_CalendarAlarmSet(&g_rtc_ctrl, &alarm_time_set); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nCalendar alarm Set failed.\r\n"); + return err; + } + + /* Get the alarm time */ + err = R_RTC_CalendarAlarmGet(&g_rtc_ctrl, &alarm_time_get); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nCalendar alarm Get failed.\r\n"); + return err; + } + + APP_PRINT("\r\nSeconds value for which alarm is set: %d",alarm_time_get.time.tm_sec); + } + else + { + /* Set this flag to notify the user to provide required options */ + g_invalid_sequence = SET_FLAG; + } + return err; +} + + +/*******************************************************************************************************************//** + * @brief This functions sets the periodic interrupt rate provided by user. + * @param[IN] None + * @retval FSP_SUCCESS Upon successful periodic interrupt rate set + * @retval Any Other Error code apart from FSP_SUCCESS Unsuccessful periodic interrupt rate set + **********************************************************************************************************************/ +fsp_err_t set_rtc_periodic_rate(void) +{ + fsp_err_t err = FSP_SUCCESS; // Error status + APP_PRINT("\r\n Setting Periodic IRQ rate for RTC \r\n"); + + /* Enable periodic interrupt rate */ + err = R_RTC_PeriodicIrqRateSet(&g_rtc_ctrl, RTC_PERIODIC_IRQ_SELECT_1_SECOND); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nPeriodic interrupt rate setting failed.\r\n"); + } + return err; +} + +/*******************************************************************************************************************//** + * @brief This functions gets the current RTC time. + * @param[IN] None + * @retval FSP_SUCCESS Upon successful current RTC time get + * @retval Any Other Error code apart from FSP_SUCCESS Unsuccessful current RTC time get + **********************************************************************************************************************/ +fsp_err_t get_rtc_calendar_time(void) +{ + fsp_err_t err = FSP_SUCCESS; // Error status + if (SET_FLAG == set_time_flag) + { + /* Get the current RTC Calendar time */ + err = R_RTC_CalendarTimeGet(&g_rtc_ctrl, &g_present_time); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nGetting RTC Calendar time failed.\r\n"); + return err; + } + /* Modify the date in standard format to user readable format */ + rtc_date_readability_update(&g_present_time); + + APP_PRINT("\r\n RTC time Date : %d/%d/%d \n Time : %d : %d : %d \r\n\n", g_present_time.tm_mday, + g_present_time.tm_mon , g_present_time.tm_year, g_present_time.tm_hour, + g_present_time.tm_min, g_present_time.tm_sec); + } + else + { + /* Set this flag to notify the user to provide required options */ + g_invalid_sequence = SET_FLAG; + } + return err; +} + +/*******************************************************************************************************************//** + * @brief This functions modifies the date in readable format to the user. + * @param[IN] time date to be modified + * @retval None + **********************************************************************************************************************/ +void rtc_date_readability_update(rtc_time_t * time) +{ + time->tm_mon += MON_ADJUST_VALUE; + time->tm_year += YEAR_ADJUST_VALUE; +} + +/*******************************************************************************************************************//** + * @brief This functions modifies the user input to rtc date and time. + * @param[IN] time date and time to be modified + * @param[IN] read_buffer Buffer that contains user input time values + * @retval None + **********************************************************************************************************************/ +static void rtc_date_time_conversion(rtc_time_t * time, unsigned char read_buffer[]) +{ + /* User is expected to enter Date and Time in DD:MM:YYYY HH:MM:SS format. This User input in the buffer is processed + * using the following conversion, where ASCII value is converted to integer value and stored in the RTC time structure. + * According to DD:MM:YYYY HH:MM:SS format, different array index values are used. */ + time->tm_mday = (((read_buffer[0] - ASCII_ZERO) * PLACE_VALUE_TEN) + (read_buffer[1] - ASCII_ZERO)); + time->tm_mon = ((((read_buffer[3] - ASCII_ZERO) * PLACE_VALUE_TEN) + (read_buffer[4] - ASCII_ZERO))) - MON_ADJUST_VALUE; + time->tm_year = (((read_buffer[6] - ASCII_ZERO) * PLACE_VALUE_THOUSAND) + + ((read_buffer[7] - ASCII_ZERO )* PLACE_VALUE_HUNDRED) + + ((read_buffer[8] - ASCII_ZERO) * PLACE_VALUE_TEN) + (read_buffer[9] - ASCII_ZERO)) - YEAR_ADJUST_VALUE; + time->tm_hour = (((read_buffer[11] - ASCII_ZERO) * PLACE_VALUE_TEN) + (read_buffer[12] - ASCII_ZERO)); + time->tm_min = (((read_buffer[14] - ASCII_ZERO) * PLACE_VALUE_TEN) + (read_buffer[15] - ASCII_ZERO)); + time->tm_sec = (((read_buffer[17] - ASCII_ZERO) * PLACE_VALUE_TEN )+ (read_buffer[18] - ASCII_ZERO)); +} + +/*******************************************************************************************************************//** + * @brief RTC callback function. + * @param[in] p_args + * @retval None + **********************************************************************************************************************/ +void rtc_callback(rtc_callback_args_t *p_args) +{ + if(RTC_EVENT_ALARM_IRQ == p_args->event) + { + g_alarm_irq_flag = SET_FLAG; + } + else + { + g_periodic_irq_flag = SET_FLAG; + } +} + +/*******************************************************************************************************************//** + * @brief This function closes opened RTC module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void rtc_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close RTC module */ + err = R_RTC_Close(&g_rtc_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* RTC Close failure message */ + APP_ERR_PRINT("** RTC module Close failed ** \r\n"); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup rtc_ep) + **********************************************************************************************************************/ + diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.h b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.h new file mode 100644 index 0000000000..9d7987de8f --- /dev/null +++ b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/e2studio/src/rtc_ep.h @@ -0,0 +1,87 @@ +/*********************************************************************************************************************** + * File Name : rtc_ep.h + * Description : Contains declarations of data structures and functions used in rtc_ep.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * Copyright [2015-2017] Renesas Electronics Corporation and/or its licensors. All Rights Reserved. + * + * This file is part of Renesas RA Flex Software Package (FSP) + * + * The contents of this file (the "contents") are proprietary and confidential to Renesas Electronics Corporation + * and/or its licensors ("Renesas") and subject to statutory and contractual protections. + * + * This file is subject to a Renesas FSP license agreement. Unless otherwise agreed in an FSP license agreement with + * Renesas: 1) you may not use, copy, modify, distribute, display, or perform the contents; 2) you may not use any name + * or mark of Renesas for advertising or publicity purposes or in connection with your use of the contents; 3) RENESAS + * MAKES NO WARRANTY OR REPRESENTATIONS ABOUT THE SUITABILITY OF THE CONTENTS FOR ANY PURPOSE; THE CONTENTS ARE PROVIDED + * "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE, AND NON-INFRINGEMENT; AND 4) RENESAS SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, OR + * CONSEQUENTIAL DAMAGES, INCLUDING DAMAGES RESULTING FROM LOSS OF USE, DATA, OR PROJECTS, WHETHER IN AN ACTION OF + * CONTRACT OR TORT, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE CONTENTS. Third-party contents + * included in this file may be subject to different terms. + **********************************************************************************************************************/ + +#ifndef RTC_EP_H_ +#define RTC_EP_H_ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +/* Macros for commands to be received through RTT input */ +#define SET_TIME (1U) +#define SET_ALARM (2U) +#define SET_PERIODIC_IRQ (3U) +#define GET_CURRENT_TIME (4U) + +#define EP_INFO "\r\nThe example project demonstrates RTC module."\ + "\r\nUsing RTT input, user can set RTC Calendar time and Calendar alarm"\ + "\r\nUser can enable periodic interrupt and view the current RTC Calendar time.\r\n" + +#define MENU_INFO "\r\n**************** RTC Application Menu ****************\r\n"\ + "1 : Set RTC Calendar Date and Time\r\n"\ + "2 : Set RTC Calendar Alarm Date and Time\r\n"\ + "3 : Set RTC Periodic IRQ Rate and Start it\r\n"\ + "4 : Get Current RTC Date and Time\r\n"\ + "User Input : " + +/* MACRO to flag the status */ +#define SET_FLAG (0x01) +#define RESET_FLAG (0x00) + +/* MACRO for ASCII value of zero */ +#define ASCII_ZERO (48) +/* MACRO for null character */ +#define NULL_CHAR '\0' + +/* MACRO for checking if no byte is received */ +#define BYTES_RECEIVED_ZERO (0U) + +/* MACRO for delay to be added */ +#define LED_DELAY (2U) +/*MACROs to adjust month and year values */ +#define MON_ADJUST_VALUE (1) +#define YEAR_ADJUST_VALUE (1900) + +/* MACROs for RTT input processing */ +#define PLACE_VALUE_TEN (10) +#define PLACE_VALUE_HUNDRED (100) +#define PLACE_VALUE_THOUSAND (1000) + +/*********************************************************************************************************************** + * User-defined APIs + **********************************************************************************************************************/ + +/* + * function declarations + */ +fsp_err_t rtc_init(void); +fsp_err_t set_rtc_calendar_time(void); +fsp_err_t set_rtc_calendar_alarm(void); +fsp_err_t set_rtc_periodic_rate(void); +fsp_err_t get_rtc_calendar_time(void); +void rtc_date_readability_update(rtc_time_t * time); +void rtc_deinit(void); +void rtc_callback(rtc_callback_args_t *p_args); + + +#endif /* RTC_EP_H_ */ diff --git a/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/rtc/rtc_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..a335c0e52eaf95afcc85233b88ed6e66c6169cb4 GIT binary patch literal 5282 zcmd^@U2hs!5QfjKEA<~F(z&cFx2_YnQk^Rs{6T6y3b;;G^#X(K(qfDNhqgby?fc9y z-UXV(>TR?FcF)e4d1vOG*;)SidpCXgNgbc3&*X1Tm2{sb>CZGx!*rW|O>?dNoL;1F z(q8&L{i3UOx=v$#W~rx7PRD7atG*z2vC|yI7M*r8+p3|Y$MrJn6*|6s_mxDb}PkY?c^ zdIMo1lHddN)6qnLW;Irr8!Pw!}ddtlB9`i(`ue3@QM><~!%Z|qE=INSFpfGZurh zbZ;^`_7>4vjX^f16#T+tj{%K}R` zovEsF>ZE2mQ5-K-18rNWX)UL!&d zem~+%i?$=h0@%VrP590g)$kgf>-X@wCWKhMFa(Ws`W}1eInllFxNcrmgn+ma=_BdF zyRNLF`NYmWV|a72jQ^p|Tas@}l2{O5u2{X$Z%cCIubdO|+mLiaTH5w|DhV)P8_7$v zcBV5}(2wvt$5BCE(^oFl4O%WF=l)J&VnvnSlXx4SW zZ&*ye=z#2W4;_0=J6tnb*5mPN1Ea?dujqQzC%PkY<-XwP$psa+su>i%-s@Y%bA_t>J}M0e^4 z2|bBC2d_3+waTa981h7~c$$4mbM&sUiz?W&DX67c;6DAPCqEMo@nu?NW*zExkq%6L zOA%wj%KH4FN#f3?Qm%bMD)tW~aVL#q%{|Q9%+)@R#dI>)oH>zpCZ&-y_{0{|WJvMU zfWh#G8bK$sr%zTqV{5WNSI3tE-#Q-V8YWm~b|!b`znONe+ga5g^Rdr&_cp~9dmQo9 zv@l&Ug%P{JTrpd`gA8=$azlAQyh8J)47QNITQYM?9QXN-`Hg)HrOSyk7E^_o6+0h#2!UNQ-E5jn=-7!o$8~gLfa!M`7P5 zbM9olNAD~0ye$zY?A+)aR#M6To$Ze96&<0bSWmQjF8|T@Qonn8J3n}Q zM<-L?+3LQ&ztzFCQq^&wCs$qHZgbpQ>#cXHGd`i z@Cc6F2pMm|L}K&V0Y3V_2XHRpM_=*W9)GY?(z!Z90Ncab zSl0_(mvyvsO@}L27w_c$kHf-p^Skcii@(8BYmWR%2&on45uBo{`+p!XgBk}%O$f50 zL(V}%3}^DA+!yFE<^JV0Mg{nDqufuKROlCAx;78jJ^0vDr0|fK(22aS`@au?gM5N{ zzT{hB<)!)cf2xg+J=Z7t!b}n4nUUp-BLO>|gW8Y2Mo+%CP6W5%Gyl~1ldoJe`-ZD& zHNX0wlXE6)+{!ChN$*CB_nF`ctN8AG<@o{*uQ|FpvG;fR@;@VF$e$ueqt%(QBX77f pRSgb>@7gfJ0=n>a5ZwR( literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/sci_i2c_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/sci_i2c_ek_ra2a1_ep.hex index 401d293e4b..c451c56b8b 100644 --- a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/sci_i2c_ek_ra2a1_ep.hex +++ b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/sci_i2c_ek_ra2a1_ep.hex @@ -736,27 +736,27 @@ :102DF000726F6A6563742064656D6F6E737472615F :102E0000746573205343495F493243204D617374A5 :102E10006572206F7065726174696F6E207468727C -:102E20006F756768206C6F6F702D6261636B2077C0 -:102E30006974682049494320536C61766520647247 -:102E4000697665722E0D0A4F6E2070726573736914 +:102E20006F7567680D0A6C6F6F702D6261636B2040 +:102E3000776974682049494320536C617665206442 +:102E400072697665722E204F6E2070726573736999 :102E50006E67207573657220707573682062757473 -:102E6000746F6E2C2036206279746573206F662033 -:102E7000646174612077696C6C2062652074726192 -:102E80006E736D697474656420616E64207265632D -:102E900065697665642E20546865207472616E736E -:102EA0006D69747465642064617461206973206362 -:102EB0006F6D7061726564207769746820746865ED -:102EC00020726563656976656420646174612E0DA6 -:102ED0000A4966207468652064617461206D6174BC -:102EE000636865732C206F6E2D626F617264204C75 -:102EF00045442073746172747320626C696E6B69EF -:102F00006E672E204F6E20612064617461206D69B0 -:102F1000736D617463682C204C454420737461792F -:102F200073204F4E2E0D0A4661696C757265206DD7 -:102F30006573736167657320616E64207374617477 -:102F4000757320697320646973706C61796564209E -:102F50006F6E205254545669657765722E0D0A0AB9 -:102F60000A0000000D0A202A2A20494943206472E1 +:102E6000746F6E2C20362062797465730D0A6F665C +:102E700020646174612077696C6C206265207472D3 +:102E8000616E736D697474656420616E642072652F +:102E90006365697665642E20546865207472616E7E +:102EA000736D697474656420646174612069730D65 +:102EB0000A636F6D7061726564207769746820744D +:102EC0006865207265636569766564206461746114 +:102ED0002E204966207468652064617461206D61EC +:102EE00074636865732C206F6E2D626F617264204D +:102EF0004C45440D0A73746172747320626C696E80 +:102F00006B696E672E204F6E2061206461746120B2 +:102F10006D69736D617463682C204C454420737433 +:102F2000617973204F4E2E204661696C7572652061 +:102F30006D657373616765730D0A616E64207374E8 +:102F40006174757320697320646973706C6179654D +:102F500064206F6E205254545669657765722E0D49 +:102F60000A0A0A000D0A202A2A20494943206472CD :102F70006976657220696E697469616C697A6174D9 :102F8000696F6E204641494C4544202A2A200D0A8B :102F9000000000005B4552525D20496E2046756E70 diff --git a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.c b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.c index f1afb77703..53b6306385 100644 --- a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.c +++ b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.c @@ -71,7 +71,7 @@ static void toggle_led(void); * @brief Initializes SCI_I2C_MASTER and IIC_SLAVE driver. * @param[IN] None * @retval FSP_SUCCESS SCI_I2C_MASTER and IIC_SLAVE driver opened successfully. - * @retval err Any Other Error code apart from FSP_SUCCES like Unsuccessful Open. + * @retval err Any Other Error code apart from FSP_SUCCESS like Unsuccessful Open. **********************************************************************************************************************/ fsp_err_t init_i2c_driver(void) { diff --git a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.h b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.h index 50d7a9b599..45542e364c 100644 --- a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.h +++ b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/e2studio/src/sci_i2c_ep.h @@ -50,10 +50,12 @@ /* Led toggle delay */ #define TOGGLE_DELAY 0x15E -#define EP_INFO "\r\nThis Example Project demonstrates SCI_I2C Master operation through loop-back with IIC Slave driver.\r\n"\ - "On pressing user push button, 6 bytes of data will be transmitted and received. The transmitted data is compared with the received data.\r\n"\ - "If the data matches, on-board LED starts blinking. On a data mismatch, LED stays ON.\r\n"\ - "Failure messages and status is displayed on RTTViewer.\r\n\n\n" +#define EP_INFO "\r\nThis Example Project demonstrates SCI_I2C Master operation through\r\n"\ + "loop-back with IIC Slave driver. On pressing user push button, 6 bytes\r\n"\ + "of data will be transmitted and received. The transmitted data is\r\n"\ + "compared with the received data. If the data matches, on-board LED\r\n"\ + "starts blinking. On a data mismatch, LED stays ON. Failure messages\r\n"\ + "and status is displayed on RTTViewer.\r\n\n\n" /* * Global functions */ diff --git a/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/sci_i2c/sci_i2c_ek_ra2a1_ep/readme.txt index 91c0f15e8b6c55742b301a167e01830a6ed67bce..aae71b9bd990dd8c205d5ca72224a9c73443c9d0 100644 GIT binary patch delta 1047 zcmZp3J>k8fO@L8hbF08)Hf0S4FNRWvT!sRMRE8o31t8A|NCq%uGUNei0|pZY&B=^X zhLam4MF^@j0;&y^5uIEhUPe%@1=w6ibpxO+_}yU4U=B7{eQ|&UBNlUwk=$#{V20Pd zsA^5Y=E_grCv7tMj~K_~cUb+1tjB=C5^TOJL3cpiJUK_|0~WQ&VQd5pWm3Z!*j&ZQdNL{m)fzKsZVr?Y#umV&I2P3bpu`g>gA%}sn2~LWuTLEbEYr+Y|RMsYe8J*W->h9NMos7{Vj zP#~xl;&@PA;g~#4!GYTfXuARfF9R2Y*5sQCZ<&F-$;TDaAyS*v^ delta 172 zcmX@%-R8QXO<;3}z$CWGi)36TFOnCT9H-1N`H*-XkZ&;AKw5y=fI(sMLV5Ykwdqa^nQuGdHbWRb+?O$tIF18vxi g84MV}8szgQKT?9Z!h=~CXvjw8w~U;V7pm+B08*Mdy8r+H diff --git a/example_projects/ek_ra2a1/source/sci_uart/sci_uart_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/sci_uart/sci_uart_ek_ra2a1_ep/readme.txt index d8b760a37e4780fd7557be504047d62a23e48ccd..dbbdbe23db2caa2449028eb075e7a16c213eaf4f 100644 GIT binary patch delta 28 gcmZ3bdrW`BGBI`q1~8o5C?d*i%;3Ixr6?mK0CRc>XnBdr8e diff --git a/example_projects/ek_ra2a1/source/wdt/wdt_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/wdt/wdt_ek_ra2a1_ep/readme.txt index b9d03f2e81ea8e21a5f55c5cdfe2e9b442c8bdac..019ee79e5b02164d5ff43a7d7f000665f718a2fa 100644 GIT binary patch delta 47 zcmbQGutj0R4t`}d1_g#721f=n244na26qNs23H1epjZ+^K0_iy5km??@#KU2kpT06 B3KIYT delta 21 ccmdm@FiT;>4t~xghJ1!Zh9ZWP$+!6<0Z$|b?EnA( diff --git a/example_projects/ek_ra4m1/downloadable/cac/cac_ek_ra4m1_ep.zip b/example_projects/ek_ra4m1/downloadable/cac/cac_ek_ra4m1_ep.zip new file mode 100644 index 0000000000000000000000000000000000000000..936d79bdf93f06b4badb0f54af68e3d19c666b64 GIT binary patch literal 64347 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 literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra4m1/downloadable/crc/crc_ek_ra4m1_ep.zip b/example_projects/ek_ra4m1/downloadable/crc/crc_ek_ra4m1_ep.zip new file mode 100644 index 0000000000000000000000000000000000000000..53d9a1864c5be3584caaaf1efdeacca3d46e1547 GIT binary patch literal 66901 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%0ABZrT3D4u*QB322=5M6-sYBv5lG%z!=aD1^c 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

gAPowk1&;RIEmjfoV8w}ViYNw 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 literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/downloadable/kint/kint_ek_ra2a1_ep.zip b/example_projects/ek_ra2a1/downloadable/kint/kint_ek_ra2a1_ep.zip new file mode 100644 index 0000000000000000000000000000000000000000..f2a3d229acf7c8f292279bb1723c971c72a1d08c GIT binary patch literal 59752 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�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%0AEbl7t-~Cz73(=y#6(cu)l=B*>)o+2R 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 F{{egj6N3N% literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/downloadable/lvd/lvd_ek_ra2a1_ep.zip b/example_projects/ek_ra2a1/downloadable/lvd/lvd_ek_ra2a1_ep.zip new file mode 100644 index 0000000000000000000000000000000000000000..9f18523706b4d0525077c4b9724411b3c69c9803 GIT binary patch literal 60438 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 Uym literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/source/agt/agt_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/agt/agt_ek_ra2a1_ep/readme.txt index 4700690f327cae590cc4f83ae3e159616feb7d41..6cb0e938ea8dca939ac0ad20885002b3c9b08f92 100644 GIT binary patch delta 36 rcmZoro}s+q62G_tLn1>SLkfceLlA=_gBgP_gE50UgWl$g{OcJ3q$&t| delta 12 TcmbQC+@QSS6948`{OcG2BQXU_ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.cproject b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.cproject new file mode 100644 index 0000000000..a8961231de --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.cproject @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..1eb979c3d5 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + cac_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..2d20d5d3ed --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,21 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=1192771973,ra/board/ra2a1_ek/board.h|3781303622,ra/board/ra2a1_ek/board_init.h|1570288955,ra/board/ra2a1_ek/board_leds.h|1634941367,ra/board/ra2a1_ek/board_leds.c|811579141,ra/board/ra2a1_ek/board_init.c +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h|3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=3241443262,ra/fsp/inc/api/bsp_api.h|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h|2319720569,ra/fsp/inc/fsp_features.h|860418405,ra/fsp/inc/fsp_common_api.h|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|1719600019,ra/fsp/inc/fsp_version.h|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1533961824,ra/fsp/inc/api/r_ioport_api.h|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c|2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|3667622829,ra/fsp/inc/instances/r_ioport.h|2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_cac\#\#\#\#0.8.0/all=1334145780,ra/fsp/inc/api/r_cac_api.h|949351854,ra/fsp/src/r_cac/r_cac.c|1394754492,ra/fsp/inc/instances/r_cac.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_cac\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_cgc\#\#\#\#0.8.0/all=496905641,ra/fsp/inc/api/r_cgc_api.h|3356924979,ra/fsp/src/r_cgc/r_cgc.c|3053687915,ra/fsp/inc/instances/r_cgc.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_cgc\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_icu\#\#\#\#0.8.0/all=1266105035,ra/fsp/inc/api/r_external_irq_api.h|1436205728,ra/fsp/src/r_icu/r_icu.c|1535354118,ra/fsp/inc/instances/r_icu.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_icu\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=3642215214,ra/fsp/src/r_ioport/r_ioport.c|1533961824,ra/fsp/inc/api/r_ioport_api.h|3667622829,ra/fsp/inc/instances/r_ioport.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..a2fb337b38 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..aece41049e --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..253f23cad3 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,172 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.align_composite_type_declarators=false +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=82 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=82 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=false +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_preprocessor_directives=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_identifier_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_expression=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=120 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..8f9798f9bd --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..00cbec1f58 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.jlink b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.launch b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.launch new file mode 100644 index 0000000000..f26b0e01ad --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep Debug.launch @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..0891475761 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/cac_ek_ra2a1_ep.hex @@ -0,0 +1,920 @@ +:10000000F00D0020412E0000312C00004F2E00008A +:100010004F2E00004F2E00004F2E00000000000069 +:100020000000000000000000000000004F2E000053 +:100030004F2E0000000000004F2E00004F2E000049 +:1000400085280000A9280000972800001F1D000037 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:100400000DEFFFFFDFCEFFFFFCFF0F00FFFF0F0030 +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F22004C2F20004237863B940F22F +:100510000003C0F200032BB143F61C10C0F2000030 +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2240143F61C1089 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:1005500080B582B000AF40F29443C2F200037B60EA +:100560007B6803221A617B6803225A617A6843F22E +:100570005003C0F2000393617A6840F23C03C2F278 +:100580000003D3617B6840F200421A627B6800225C +:100590009A627B6800225A627B680022DA627A687B +:1005A00043F25003C0F2000313667A6840F23C4302 +:1005B000C2F2000353667B6810229A667B680022B1 +:1005C0001A677B680022DA667B6800225A677B68BC +:1005D000DA1D43F25C03C0F200031000190004238B +:1005E0001A0002F017FD7A6843F26003C0F20003BC +:1005F0001000190007231A0002F00CFD7B6820226E +:100600009A71C046BD4602B080BD80B588B000AFCB +:10061000F860B9607A600023BB61FB68DB687B61CE +:10062000FB681B693B613A697B699A4205D93A6963 +:100630007B69D31A013BFB6107E0FB689A68396963 +:100640007B69CB1AD318013BFB61FB689A687B6915 +:10065000D21AFB69934200D91300FB61FA697B68E7 +:10066000934200D91300FB61FB685A687B69D31879 +:10067000FA69B968180002F0CDFCBA69FB69D318B1 +:10068000BB61BA68FB69D318BB607A68FB69D31A8F +:100690007B607A69FB69D3187B61FB689B687A6928 +:1006A0009A4201D100237B61FB687A69DA607B683A +:1006B000002BB5D1BB691800BD4608B080BD80B520 +:1006C00088B000AFF860B9607A60FB68DB68FB61F6 +:1006D000FB689A68FB69D31ABB61BA697B689A4266 +:1006E0000ED9FB685A68FB69D3187A68B968180094 +:1006F00002F090FCFA697B68D218FB68DA601AE0B5 +:10070000BB697B61FB685A68FB69D3187A69B96871 +:10071000180002F07FFC7A68BB69D31A7B61FB6822 +:100720005868BA68BB69D3187A69190002F072FC7C +:10073000FB687A69DA60C046BD4608B080BD80B506 +:1007400086B000AF78607B681B693B617B68DB68C3 +:10075000FB603A69FB689A4208D87B689A68FB6834 +:10076000D21A3B69D318013B7B6104E03A69FB680C +:10077000D31A013B7B617B691800BD4606B080BD82 +:1007800080B588B000AFF860B9607A60BB68BB61C3 +:10079000FB685A1C13005B009B18DB0040F294427C +:1007A000C2F200029B187B617B695B69012B19D047 +:1007B00013B1022B29D031E07B691800FFF7BFFF8E +:1007C00003003B613A697B689A4202D20023FB61D5 +:1007D00027E07B68FB617A68B9697B691800FFF7DD +:1007E0006EFF1EE07B691800FFF7A9FF03003B6165 +:1007F0003A697B68934200D91300FB61FA69B969D1 +:100800007B691800FFF75BFF0BE07A68B9697B69C9 +:100810001800FFF7FAFE0300FB6102E00023FB6112 +:10082000C046FB691800BD4608B080BD80B586B0E3 +:1008300000AFF860B9607A6040F29443C2F20003FE +:100840001B785BB20BB9FFF783FEEFF31083012136 +:1008500081F310887B617A68B968FB681800FFF73C +:100860008FFF03003B617B6983F310883B691800AD +:10087000BD4606B080BD80B584B000AF78600A0088 +:10088000FB1C1A707B689B68FB60FB685A1C7B68CA +:100890005B689A420FD87B681A68FB68D318FA1C09 +:1008A00012781A70FB685A1C7B689A607B68DB6858 +:1008B0005A1C7B68DA607B689A687B685B689A423E +:1008C00015D17B6818697B6819687B689B681A007A +:1008D000FFF7ACFF02007B689B689A4204D07B68FC +:1008E00001225242DA6002E07B6800229A60C04630 +:1008F000BD4604B080BD80B58AB000AFF860B96075 +:100900007A603B60BB683B6201237B620123FB6131 +:1009100007E03A6A7B68B2FBF3F33B62FB690133A1 +:10092000FB613A6A7B689A42F3D23A68FB699A4261 +:1009300001D93B68FB617B6B012213404BBB3B6BD6 +:100940003BB37B6B0222134033B13B6823B91B23BB +:10095000FB1830221A7003E01B23FB1820221A70A8 +:100960000FE03B6B013B3B631B23FB1800229A56B5 +:10097000FB6811001800FFF77EFFFB68DB68002BA7 +:1009800006DB3B6B2BB1FA693B6B9A42E9D300E083 +:10099000C046FB68DB68002B56DB3B68012B03D9A4 +:1009A0003B68013B3B6009E0BA687B6AB2FBF3F34A +:1009B0007B617A697B689A4200D204E07B6A7A683C +:1009C00053437B62E9E7BA687B6AB2FBF3F37B616E +:1009D0007B697A6A5343BA68D31ABB6043F26803EF +:1009E000C0F200037A699B1800229A56FB68110036 +:1009F0001800FFF740FFFB68DB68002B08DB7A6A12 +:100A00007B68B2FBF3F37B627B6A002BDBD100E0F7 +:100A1000C0467B6B01221340B3B13B6BA3B10BE02B +:100A20003B6B013B3B63FB6820211800FFF723FF72 +:100A3000FB68DB68002B06DB3B6B2BB1FA693B6B79 +:100A40009A42EDD300E0C046C046BD460AB080BD24 +:100A500090B589B002AFF860B9607A603B60BB685E +:100A6000DA179B1853403B6101237B6107E07B68E9 +:100A70003A6992FBF3F33B617B6901337B617B68ED +:100A80003A699A42F3DA3A687B699A4201D93B683B +:100A90007B61BB6A4BB1BB68002B03DBFB6A0422A2 +:100AA000134013B1BB6A013BBB62FB6A02221340D5 +:100AB0000BB13B68D3B1FB6A01221340B3B9BB6AE7 +:100AC000A3B10BE0BB6A013BBB62FB6820211800AD +:100AD000FFF7D1FEFB68DB68002B06DBBB6A2BB19E +:100AE0007A69BB6A9A42EDD300E0C046FB68DB68D6 +:100AF000002B48DBBB68002B08DABB685B42BB609D +:100B0000FB682D211800FFF7B6FE08E0FB6A0422FF +:100B1000134023B1FB682B211800FFF7ACFEFB68E4 +:100B2000DB68002B2FDBFB6A02221340E3B1FB6A78 +:100B300001221340C3B93B68B3B9BB6AA3B10BE050 +:100B4000BB6A013BBB62FB6830211800FFF793FED4 +:100B5000FB68DB68002B06DBBB6A2BB17A69BB6ADA +:100B60009A42EDD300E0C046FB68DB68002B0ADB4D +:100B7000B9683C687A68F868FB6A0193BB6A0093BD +:100B80002300FFF7B8FEC046BD4607B090BD90B544 +:100B9000A3B002AFF860B9607A6050217B181022D0 +:100BA000BA181A607B1840225A607B1800229A609B +:100BB0007B18FA681A617B180022DA607F217B18A3 +:100BC000BA6812781A70BB680133BB607B181B7857 +:100BD0005BB2002B00D168E17B181B785BB2252B40 +:100BE00000D051E100233B670123BB677F217B18C5 +:100BF000BA6812781A707B181B785BB22B2B18D04E +:100C000002DC232B1DD024E02D2B02D0302B08D06A +:100C10001FE03B6F012213433B67BB680133BB609E +:100C20001AE03B6F022213433B67BB680133BB6092 +:100C300012E03B6F042213433B67BB680133BB6088 +:100C40000AE03B6F082213433B67BB680133BB607C +:100C500002E00023BB67C046BB6F002BC6D1002358 +:100C6000FB667F217B18BA6812781A707B181B7894 +:100C70005BB22F2B14DD7B181B785BB2392B0FDC9A +:100C8000BB680133BB60FA6E13009B009B185B00CE +:100C90001A007B181B785BB2D318303BFB66E0E789 +:100CA00000237B677F217B18BA6812781A707B1843 +:100CB0001B785BB22E2B21D1BB680133BB607F2137 +:100CC0007B18BA6812781A707B181B785BB22F2BCE +:100CD00014DD7B181B785BB2392B0FDCBB6801334A +:100CE000BB607A6F13009B009B185B001A007B1897 +:100CF0001B785BB2D318303B7B67E0E77F23FB18A0 +:100D0000BA6812781A707F22BB181B785BB26C2B02 +:100D100004D0BB181B785BB2682B08D1BB680133C9 +:100D2000BB607F23FB18BA6812781A70EBE77F2349 +:100D3000FB181B785BB2642B29D007DC582B4ED0F4 +:100D4000632B0FD0252B00D193E099E0732B5AD061 +:100D500003DC702B00D179E092E0752B2BD0782B3F +:100D60003DD08DE07B681B68191D7A6811601B6897 +:100D7000BB6767217B18BA6F1A707B1800229A56DE +:100D80005023FB1811001800FFF775FD78E07B6811 +:100D90001B68191D7A6811601B68BB677A6FB96F91 +:100DA0005023F8183B6F0193FB6E009313000A2247 +:100DB000FFF74EFE64E07B681B68191D7A681160BE +:100DC0001B68BB67B96F7A6F5023F8183B6F0193AC +:100DD000FB6E009313000A22FFF78DFD50E07B6845 +:100DE0001B68191D7A6811601B68BB67B96F7A6F41 +:100DF0005023F8183B6F0193FB6E009313001022F1 +:100E0000FFF779FD3CE07B681B68191D7A6811606B +:100E10001B68BB667F217B18BA6E12781A70BB6E96 +:100E20000133BB667B181B785BB26BB17B18002269 +:100E30009A5650243B1911001800FFF71CFD3B196E +:100E4000DB68002BE6DA00E0C04619E07B681B682F +:100E5000191D7A6811601B68BB67B96F5023F818B9 +:100E6000002301930823009308231022FFF743FD7A +:100E700006E05023FB1825211800FFF7FCFCC046B4 +:100E8000BB680133BB6009E07F23FB1800229A5640 +:100E90005023FB1811001800FFF7EDFC5023FB183E +:100EA000DB68002B00DB89E600E0C0465022BB185F +:100EB000DB68002B12DDBB189B683BB1BB189A683E +:100EC0001023F918FB681800FFF7B0FC50217B18BD +:100ED000DA687B189B68D2187B18DA605023FB18FD +:100EE000DB681800BD4621B090BD0EB480B585B05A +:100EF00000AF78602023FB18BB600823FA18F9695B +:100F00007B681800FFF743FE0300FB60FB681800D6 +:100F1000BD4605B080BC08BC03B0184790B589B089 +:100F200002AF00233B610023BB601623FB180122A4 +:100F300052421A800F23FB1800221A700E23FB184E +:100F400000221A703A0043F25453C0F200031968A9 +:100F500011609B88938008243B19180001F030FE33 +:100F60002200BB18DB781C00BB189B781800BB184C +:100F70005B7843F27802C0F2000243F27C01C0F2D7 +:100F800000010193009023000020FFF7AEFF43F221 +:100F90005423C0F2000319000020FFF7A6FF43F618 +:100FA0001C02C0F2000240F24453C2F200031100DE +:100FB000180000F002FF03003B613B69D3B143F22C +:100FC0006433C0F2000343F2CC72C0F2000243F279 +:100FD0008831C0F200010020FFF787FF3B694BB169 +:100FE0003A6943F2A433C0F2000319000020FFF76E +:100FF0007CFF00BE43F63402C0F2000240F25053C0 +:10100000C2F200031100180001F03DFA03003B6139 +:101010003B69E3B143F2C433C0F2000343F2CC7244 +:10102000C0F2000243F28831C0F200010020FFF755 +:101030005CFF00F0DCFA3B694BB13A6943F2A43340 +:10104000C0F2000319000020FFF74FFF00BE43F677 +:101050002002C0F2000240F25853C2F20003110015 +:10106000180000F067FD03003B613B69F3B143F2F8 +:10107000E833C0F2000343F2CC72C0F2000243F244 +:101080008831C0F200010020FFF72FFF00F08CFA3A +:1010900000F0ADFA3B694BB13A6943F2A433C0F2B8 +:1010A000000319000020FFF720FF00BE0F217A186F +:1010B00043F63403C0F200035B7813700A00BB18D8 +:1010C0001B78062B00D173E0BB181B783A00D15C6B +:1010D00040F24453C2F200030022180000F09BFECD +:1010E00003003B613B69E3B143F21443C0F20003E8 +:1010F00043F2CC72C0F2000243F28831C0F2000128 +:101100000020FFF7F2FE00F0B8FA3B694BB13A69F4 +:1011100043F2A433C0F2000319000020FFF7E5FEFC +:1011200000BE16243B193A191288013A1A800F237F +:10113000FB181B783A00D25C40F24453C2F2000321 +:101140001100180000F097FE03003B613B191B885B +:1011500023B13B6940F2901293421CD143F23C43CD +:10116000C0F2000343F2CC72C0F2000243F28831B5 +:10117000C0F200010020FFF7B8FE00F07EFA3B69E4 +:101180004BB13A6943F2A433C0F2000319000020C6 +:10119000FFF7ABFE00BE3B6940F293129342C0D012 +:1011A00043F26443C0F2000319000020FFF79DFEE4 +:1011B0000E217A1843F63403C0F200035B791370F2 +:1011C0000A00BB181B78062B00D173E0BB181B78F4 +:1011D0003A00D15C40F24453C2F2000300221800EE +:1011E00000F019FE03003B613B69E3B143F2144395 +:1011F000C0F2000343F2CC72C0F2000243F2883125 +:10120000C0F200010020FFF770FE00F036FA3B69E3 +:101210004BB13A6943F2A433C0F200031900002035 +:10122000FFF763FE00BE16243B193A191288013AF3 +:101230001A800E23FB181B783A00D25C40F244530C +:10124000C2F200031100180000F015FE03003B611C +:101250003B191B8823B13B6940F2901293421CD189 +:1012600043F23C43C0F2000343F2CC72C0F20002EE +:1012700043F28831C0F200010020FFF736FE00F093 +:10128000FCF93B694BB13A6943F2A433C0F2000365 +:1012900019000020FFF729FE00BE3B6940F29312BF +:1012A0009342C0D043F2A043C0F2000319000020D3 +:1012B000FFF71BFE40F25853C2F20003180000F083 +:1012C000DAFC03003B613B69E3B143F2D843C0F26F +:1012D000000343F2CC72C0F2000243F28831C0F244 +:1012E00000010020FFF701FE00F0C7F93B694BB198 +:1012F0003A6943F2A433C0F2000319000020FFF75B +:10130000F4FD00BE40F24D43C2F200031B78DBB295 +:10131000002BF7D040F24D43C2F2000300221A70B6 +:1013200043F20453C0F2000319000020FFF7DDFD73 +:1013300000F024F803003B613B69002BE2D043F24C +:101340002853C0F2000343F2CC72C0F2000243F211 +:101350008831C0F200010020FFF7C7FD00F08DF9D1 +:101360003B69002BCED03A6943F2A433C0F20003AC +:1013700019000020FFF7B9FD00BEC3E780B582B0B9 +:1013800000AF00237B603B0000221A80BB1C0122BF +:1013900052421A8040F20003C2F20003FF221A7088 +:1013A00040F24C43C2F2000300221A7040F2505344 +:1013B000C2F20003180001F09BF803007B607B6819 +:1013C00083B143F25C53C0F2000343F2D872C0F21F +:1013D000000243F28831C0F200010020FFF785FDD2 +:1013E0007B68B2E043F28C53C0F200031900002086 +:1013F000FFF77BFD18E0BB1CBA1C1288013A1A806B +:10140000BB1C1B8883B943F2AC53C0F2000343F208 +:10141000D872C0F2000243F28831C0F2000100200D +:10142000FFF763FD142390E040F24C43C2F2000347 +:101430001B78DBB201225340DBB2002BDBD140F240 +:101440000003C2F200031B78DBB2002B57D0012B44 +:1014500068D13A0040F25053C2F200031100180064 +:1014600001F096F803007B607B6883B143F2E85398 +:10147000C0F2000343F2D872C0F2000243F2883196 +:10148000C0F200010020FFF730FD7B685DE043F211 +:101490000C63C0F2000319000020FFF726FD3B009B +:1014A0001B881A0043F25463C0F2000319000020A5 +:1014B000FFF71BFD40F25053C2F20003180001F089 +:1014C0003FF803007B607B6883B143F27063C0F236 +:1014D000000343F2D872C0F2000243F28831C0F236 +:1014E00000010020FFF701FD7B682EE043F29C63C2 +:1014F000C0F2000319000020FFF7F7FC24E043F2DC +:10150000BC63C0F2000343F2D872C0F2000243F29F +:101510008831C0F200010020FFF7E7FC40F25823B9 +:101520007B6011E043F22C73C0F2000343F2D872E7 +:10153000C0F2000243F28831C0F200010020FFF740 +:10154000D4FC0C237B60C0467B681800BD4602B00B +:1015500080BD80B582B000AF78607B6863B17B6886 +:101560001A7840F20003C2F200031A7040F24C43B2 +:10157000C2F2000301221A70C046BD4602B080BD0F +:1015800080B582B000AF78607B684BB17B685B68E8 +:10159000062B05D140F24D43C2F2000301221A701E +:1015A000C046BD4602B080BD80B582B000AF00230A +:1015B0007B6040F25053C2F20003180001F00EF8B5 +:1015C00003007B607B6873B143F25873C0F2000381 +:1015D00043F2F072C0F2000243F28831C0F200011F +:1015E0000020FFF782FCC046BD4602B080BD80B53A +:1015F00082B000AF00237B6040F24453C2F200038C +:10160000180000F05BFC03007B607B6873B143F261 +:101610007C73C0F2000343F2FC72C0F2000243F29A +:101620008831C0F200010020FFF75FFCC046BD46D4 +:1016300002B080BD80B582B000AF00237B6040F275 +:101640005853C2F20003180000F03BFB03007B601C +:101650007B6873B143F2A073C0F2000343F6080243 +:10166000C0F2000243F28831C0F200010020FFF70F +:101670003CFCC046BD4602B080BD80B500AFFFF760 +:1016800093FFFFF7B4FFFFF7D5FFC046BD4680BD0F +:1016900080B582B000AF0200FB1D1A70FB1D1B78E5 +:1016A000022B0BD143F6D802C0F2000240F23C53A9 +:1016B000C2F200031100180000F07CF8C046BD46DD +:1016C00002B080BD80B500AFFFF728FC00231800F2 +:1016D000BD4680BD80B584B000AF0023FB60EFF352 +:1016E00010837B607B68FB600123BB60BB6883F376 +:1016F000108840F26853C2F200031B685BB940F6E1 +:101700000053C4F204030022DA7040F60053C4F21E +:1017100004034022DA7040F26853C2F200031B68EF +:101720005A1C40F26853C2F200031A60FB683B6027 +:101730003B6883F31088C046BD4604B080BD80B5C9 +:1017400084B000AF0023FB60EFF310837B607B6805 +:10175000FB600123BB60BB6883F3108840F26853D1 +:10176000C2F200031B6853B140F26853C2F2000397 +:101770001B685A1E40F26853C2F200031A6040F21E +:101780006853C2F200031B685BB940F60053C4F211 +:1017900004030022DA7040F60053C4F204038022EE +:1017A000DA70FB683B603B6883F31088C046BD4637 +:1017B00004B080BD80B584B000AF786039607B68CC +:1017C000FB60FB680BB901231DE03B680BB90123EB +:1017D00019E03B685B680BB9012314E0FB681A68E9 +:1017E00045F25423C5F24F039A4201D10E230AE079 +:1017F000FA6845F25423C5F24F0313603B681800A2 +:1018000000F005F800231800BD4604B080BD90B577 +:1018100085B000AF78607B68BB60FFF75BFF0E238D +:10182000FB1800221A8017E0BB685A680E217B184B +:101830001B88DB00D3189888BB685A680C007B189B +:101840001B88DB00D3181B68190000F013F83B1944 +:101850001A883B1901321A80BB681B880E22BA18FD +:1018600012889A42E0D3FFF76AFFC046BD4605B032 +:1018700090BDFFFF90B583B000AF02003960BB1D83 +:101880001A803A6880235B0213403BB340F60003A2 +:10189000C4F20403BA1D1288120A92B21000BA1DD3 +:1018A0001288FF210A4001018A189100CA5816487F +:1018B0000240CA5040F60003C4F20403BA1D128865 +:1018C000120A92B21400BA1D1288FF210A40396828 +:1018D0000D480140200182189200D15040F60003CB +:1018E000C4F20403BA1D1288120A92B21000BA1D83 +:1018F0001288FF210A4001018A1892003968D150EC +:10190000C046BD4603B090BDFFFFFEFF80B582B06C +:1019100000AFEFF303837B607B683B603B001B8879 +:10192000DB05DB0D9BB2DBB2103BDBB25BB2180018 +:10193000BD4602B080BD80B582B000AF0200396004 +:10194000FB1D1A70FB1D00229A5640F26C53C2F226 +:10195000000392003968D150C046BD4602B080BD38 +:1019600080B582B000AF0200FB1D1A7046F2000382 +:10197000C4F20003FA1D127852B2C0329100CA5864 +:1019800003480240CA50C046BD4602B080BDC046B2 +:10199000FFFFFEFF80B582B000AF0200FB1D1A7092 +:1019A000FB1D1B785BB21800FFF7DAFFFB1D1B78ED +:1019B0001A001F231A4011004EF20013CEF200034A +:1019C000FA1D127852B2520901208840010060329B +:1019D0009200D150C046BD4602B080BD90B585B0E2 +:1019E00000AFB9607A600F243B19021C1A704EF2E6 +:1019F0000013CEF200033A19127852B29208C032A4 +:101A00009200D3583A191278110003220A40D200EA +:101A1000FF2191400A00D2431A401000BB689B018D +:101A2000FF221A403B191B78190003230B40DB00EF +:101A30009A4011004EF20013CEF200033A191278C8 +:101A400052B292080143C0329200D1507A683B19D9 +:101A50001B785BB211001800FFF76DFFC046BD4652 +:101A600005B090BD80B582B000AF0200FB1D1A70BA +:101A7000FB1D1B781A001F231A4011004EF20013A1 +:101A8000CEF20003FA1D127852B2520901208840AA +:101A900001009200D150C046BD4602B080BD80B565 +:101AA00082B000AF0200FB1D1A70FB1D1B785BB2F9 +:101AB0001800FFF76FFFFB1D1B785BB21800FFF7E4 +:101AC000D1FFC046BD4602B080BD80B582B000AF38 +:101AD0000200FB1D1A70FB1D1B781A001F231A4001 +:101AE00011004EF20013CEF20003FA1D127852B22A +:101AF000520901208840010020329200D150BFF3EA +:101B00004F8FBFF36F8FC046BD4602B080BD80B51A +:101B100082B000AF0200FB1D1A70FB1D00229A5616 +:101B200040F26C53C2F200039200D3581800BD4635 +:101B300002B080BD80B586B000AF786039607B6848 +:101B40007B617B690BB9012391E07B691A6844F2E0 +:101B50005533C0F249039A4201D10E2387E03B6816 +:101B60000BB9012383E03B681B781A00FF23D340A5 +:101B70000122134013B940F27A5378E03B689B6826 +:101B80002BB13B685B78FF2B01D103236FE03B68EF +:101B900002229A567B691A7146F20003C4F20003CE +:101BA0007A69127952B2C0329200D3583B6146F240 +:101BB0000003C4F200037A69127952B2C032920073 +:101BC0000021D1503B689A687B699A603B68DA686B +:101BD0007B69DA603B681A787B695A7146F20003C8 +:101BE000C4F200037A695279002199543B681A794A +:101BF0000F203B1812011A703B685B79DB01D9B2E8 +:101C00003B183A1812780A431A703B68D9783B1887 +:101C10003A1812780A431A7046F20003C4F200031D +:101C20007A69527911003A1812785A5446F2000330 +:101C3000C4F200037A69127952B2C0329200396953 +:101C4000D1507B691B795BB2002B09DB7B690420D7 +:101C500018563B685B7819007B691A00FFF7BEFED7 +:101C60007A6944F25533C0F2490313600023180027 +:101C7000BD4606B080BD80B584B000AF78607B689B +:101C8000FB60FB680BB9012317E0FB681A6844F29C +:101C90005533C0F249039A4201D007230DE0FB6897 +:101CA0001B795BB2002B01DA0B2306E0FB681B7982 +:101CB0005BB21800FFF7F3FE00231800BD4604B026 +:101CC00080BD80B584B000AF78607B68FB60FB6846 +:101CD0000BB901231FE0FB681A6844F25533C0F2C8 +:101CE00049039A4201D0072315E0FB681B795BB2D8 +:101CF000002B0CDBFB681B795BB21800FFF7E5FEDD +:101D0000FB681B795BB200211800FFF714FEFB682B +:101D100000221A6000231800BD4604B080BDB0B593 +:101D200084B000AF0E257C19FFF7F0FD030023708F +:101D30007B191B785BB21800FFF7E9FE0300BB605C +:101D40000F217B1800221A7046F20003C4F2000330 +:101D5000BA6852799B5C9B079B0FDBB2032B03D1C4 +:101D60007B1801221A7006E00E23FB181B785BB269 +:101D70001800FFF7F5FDBB6883B1BB689B686BB1CA +:101D8000BB685B791A003B005A60BB68DA683B00AD +:101D90001A60BB689B683A00100098470F23FB1835 +:101DA0001B7833B10E23FB181B785BB21800FFF7CA +:101DB000D7FDC046BD4604B0B0BD80B584B000AF0D +:101DC000786039607B68FB607B680BB901231EE09B +:101DD0003B680BB901231AE0FB681A6844F24373AD +:101DE000C0F243039A4201D10E2310E040F2504367 +:101DF000C2F20003FA681A603B681A68FB689A60CE +:101E0000FA6844F24373C0F24303136000231800DE +:101E1000BD4604B080BD80B586B000AFF8607A6082 +:101E20000B23FB180A1C1A70FB687B6100233B61C3 +:101E30007B69180000F05AF803003B613B690BB165 +:101E40003B6914E00B23FB181B78052B01D1012300 +:101E50000DE0012000F061F80B23FB181B78002136 +:101E6000180000F0B5F9012000F076F80023180002 +:101E7000BD4606B080BD80B584B000AF78600A0072 +:101E8000FB1C1A707B68FB60FB68180000F02EF8E2 +:101E90000300BB60BB680BB1BB680BE0FB1C1B788D +:101EA000180000F026F90300BB60BB680BB1BB68EB +:101EB00000E000231800BD4604B080BD80B584B0AA +:101EC00000AF78607B68FB60FB68180000F00EF8DC +:101ED0000300BB60BB680BB1BB6803E0FB6800227A +:101EE0001A6000231800BD4604B080BD80B582B0E2 +:101EF00000AF78607B680BB901230AE07B681A6841 +:101F000044F24373C0F243039A4201D0072300E036 +:101F100000231800BD4602B080BD80B582B000AF7E +:101F20000200FB1D1A704CF20003C4F2010340F2E0 +:101F3000001200219952012000F02EFFFB1D1B789A +:101F4000012B05D1002000F002FD002000F024FF4D +:101F5000C046BD4602B080BD80B582B000AF020071 +:101F6000FB1D1A70FB1D1B78012B0AD1002000F00D +:101F7000B3FE4EF20003C4F201031B6A180000F026 +:101F800076F8012000F0A8FE4CF20003C4F2010331 +:101F900040F2041201219952C0464CF20003C4F2EF +:101FA000010340F204129B5A9BB2002BF5D14CF274 +:101FB0000003C4F2010340F2001201219952C0460D +:101FC000BD4602B080BD80B582B000AF786040F2FF +:101FD0009043C2F200031B6848F20002934201D012 +:101FE000002321E04EF20003C4F2010336229B5C81 +:101FF000DBB27BB14EF20003C4F2010338229B5CDA +:10200000DBB23BB14EF20003C4F2010332229B5C0F +:10201000DBB20BB9002307E07A68EE23DB0513403F +:102020000BB1002300E001231800BD4602B080BDC3 +:1020300080B584B000AF78600A00FB1C1A70FB1CEE +:102040001B787BB17B68FB6040F20443C4F2004321 +:10205000FA681A4040F20443C4F200439A4201D0A5 +:10206000002300E001231800BD4604B080BD80B508 +:1020700084B000AF78604EF20003C4F201030F2277 +:10208000BA1840215B5C13707B681800FFF79BFF58 +:1020900003001BB1042000F05AFC26E00F23FB18BC +:1020A0001A787B6811001800FFF7C2FF030073B1B4 +:1020B00040F29043C2F200031A6844F24023C0F297 +:1020C0000F039A4203D8032000F041FC0DE040F2D8 +:1020D0009043C2F200031A6841F20023C0F27A036F +:1020E0009A4202D8012000F032FCC046BD4604B03E +:1020F00080BDB0B584B000AF0200FB1D1A700F2583 +:102100007C19FB1D1B78180000F01BF803002370DE +:102110007B191A78FB1D1B781100180000F028F8B5 +:10212000030013B940F2931307E00F23FB181B7849 +:1021300013B940F2901300E000231800BD4604B02C +:10214000B0BD80B582B000AF0200FB1D1A70FB1D50 +:102150001A7843F60013C0F200039200D3581B789C +:10216000DBB25A425341DBB21800BD4602B080BD1B +:1021700080B586B000AF0200FB1D1A70BB1D0A1CA3 +:102180001A7016237B61FB1D1B7801229A401300F5 +:102190007A6913400BB1012316E04EF20003C4F23A +:1021A00001033C229B5CDBB23B61FB1D1B783A695F +:1021B000DA40130001221340FB60BB1D1B78FA6854 +:1021C000D31A5A425341DBB21800BD4606B080BD57 +:1021D00080B582B000AF0200FB1D1A70BB1D0A1C47 +:1021E0001A70FB1D1A7843F60013C0F20003920028 +:1021F000D358BA1D12781A70C046FB1D1A7843F6E0 +:102200000013C0F200039200D3581B78DBB2BA1D52 +:1022100012789A42F1D1C046BD4602B080BD80B569 +:1022200082B000AF0200FB1D1A70FB1D1B787F2BD4 +:1022300017D8FB1D1B781A001F231A4011004EF2FD +:102240000013CEF20003FA1D127852B25209012097 +:102250008840010020329200D150BFF34F8FBFF36E +:102260006F8FC046BD4602B080BD80B582B000AF62 +:10227000EFF303837B607B683B603B001B88DB05DF +:10228000DB0D9BB2DBB2103BDBB25BB21800BD468C +:1022900002B080BD80B582B000AF02003960FB1D86 +:1022A0001A70FB1D00229A5640F26C53C2F20003D2 +:1022B00092003968D150C046BD4602B080BDFFFFD4 +:1022C00080B582B000AF0200FB1D1A7046F2000319 +:1022D000C4F20003FA1D127852B2C0329100CA58FB +:1022E00003480240CA50C046BD4602B080BDC04649 +:1022F000FFFFFEFF80B582B000AF0200FB1D1A7029 +:10230000FB1D1B785BB21800FFF7DAFFFB1D1B7883 +:102310001A001F231A4011004EF20013CEF20003E0 +:10232000FA1D127852B25209012088400100603231 +:102330009200D150C046BD4602B080BD90B585B078 +:1023400000AFB9607A600F243B19021C1A704EF27C +:102350000013CEF200033A19127852B29208C0323A +:102360009200D3583A191278110003220A40D20081 +:10237000FF2191400A00D2431A401000BB689B0124 +:10238000FF221A403B191B78190003230B40DB0086 +:102390009A4011004EF20013CEF200033A1912785F +:1023A00052B292080143C0329200D1507A683B1970 +:1023B0001B785BB211001800FFF76CFFC046BD46EA +:1023C00005B090BD80B582B000AF0200FB1D1A7051 +:1023D000FB1D1B781A001F231A4011004EF2001338 +:1023E000CEF20003FA1D127852B252090120884041 +:1023F00001009200D150C046BD4602B080BD80B5FC +:1024000082B000AF0200FB1D1A70FB1D1B785BB28F +:102410001800FFF76FFFFB1D1B785BB21800FFF77A +:10242000D1FFC046BD4602B080BD90B585B000AFBB +:10243000B9607A600F243B19021C1A707A68B96877 +:102440003B191B785BB21800FFF778FF3B191B782C +:102450005BB21800FFF7D3FFC046BD4605B090BD84 +:1024600080B582B000AF0200FB1D1A70FB1D002278 +:102470009A5640F26C53C2F200039200D3581800EF +:10248000BD4602B080BD80B584B000AF78603960D1 +:102490007B68FB600023BB60FB680BB9012323E072 +:1024A000FB681A6844F24313C0F243039A4201D115 +:1024B0000E2319E03B680BB9012315E03B68DA886D +:1024C0003B681B899A4201D201230DE0FB683A6800 +:1024D0005A60FB68180000F0CDF8FA6844F2431324 +:1024E000C0F243031360BB681800BD4604B080BD52 +:1024F00080B584B000AF78607B68FB60FB680BB987 +:10250000012319E0FB681A6844F24313C0F2430345 +:102510009A4201D007230FE044F20063C4F204039F +:1025200001221A70C04644F20063C4F204031B780F +:10253000DBB2012BF7D100231800BD4604B080BDEB +:1025400080B584B000AF78607B68FB60FB680BB936 +:10255000012319E0FB681A6844F24313C0F24303F5 +:102560009A4201D007230FE044F20063C4F204034F +:1025700000221A70C04644F20063C4F204031B78C0 +:10258000DBB2002BF7D100231800BD4604B080BD9C +:1025900080B584B000AF786039607B68FB60FB6811 +:1025A0000BB9012316E03B680BB9012312E0FB686D +:1025B0001A6844F24313C0F243039A4201D007233E +:1025C00008E044F20063C4F204035B899AB23B68FA +:1025D0001A8000231800BD4604B080BD80B584B0C9 +:1025E00000AF78607B68FB60FB680BB901233DE0BE +:1025F000FB681A6844F24313C0F243039A4201D0C5 +:10260000072333E044F20063C4F2040300221A708B +:10261000FB685B681B7B5BB21800FFF700FEFB6882 +:102620005B689B7A5BB21800FFF7F9FDFB685B689B +:10263000DB7A5BB21800FFF7F2FDC04644F200639C +:10264000C4F204031B78DBB2002BF7D147F200037E +:10265000C4F204035A6847F20003C4F204030121E0 +:102660000A435A60FB6800221A6000231800BD4626 +:1026700004B080BD80B586B000AF78607B685B68D1 +:10268000BB6000237B6100233B610023FB6047F2BA +:102690000003C4F204035A6847F20003C4F20403BF +:1026A00001218A435A6044F20063C4F20403002209 +:1026B0001A70C04644F20063C4F204031B78DBB214 +:1026C000002BF7D144F20063C4F204037022DA70E5 +:1026D0007B685B681B791B011A007B6913437B6174 +:1026E000BB685B78072B04D17B69012213437B61B4 +:1026F00008E0BB685B785B001A003B69134301226A +:1027000013433B61BB68DB789B011A007B69134371 +:102710007B61BB689B789B011A003B6913433B615B +:10272000BB681B781B011A003B6913433B61BB6804 +:102730005B795B001A007B6913437B61BB689B7A02 +:102740005BB2002B0DDBBB680A201856BB685B7BB5 +:1027500019007B681A00FFF768FEFB68022213432A +:10276000FB607B685B68DB7A5BB2002B0DDBBB68D0 +:102770000B201856BB689B7B19007B681A00FFF77B +:1027800054FEFB6804221343FB60BB681B7B5BB2F7 +:10279000002B0DDBBB680C201856BB68DB7B1900D7 +:1027A0007B681A00FFF741FEFB6801221343FB60C0 +:1027B00044F20063C4F204037A69D2B25A7044F25C +:1027C0000063C4F204033A69D2B29A7044F200631F +:1027D000C4F20403FA68D2B2DA7044F20063C4F2BD +:1027E0000403BA68D288DA8044F20063C4F20403B6 +:1027F000BA6812891A81C046BD4606B080BDB0B520 +:1028000086B000AF02003960FB1D1A7017257C19D5 +:10281000FFF72BFD030023707B191B785BB21800B8 +:10282000FFF71EFE03003B613B695B681B697BB1E0 +:1028300008217B18FA1D12781A703B695B685A6987 +:102840007B185A603B695B681B697A1810009847CF +:1028500044F20063C4F20403DB78D9B23B68DAB215 +:1028600044F20063C4F204030A43D2B2DA701723BD +:10287000FB181B785BB21800FFF722FDC046BD466F +:1028800006B0B0BD80B500AF10210020FFF7B7FF44 +:10289000C046BD4680BD80B500AF40210220FFF795 +:1028A000AEFFC046BD4680BD80B500AF20210120EF +:1028B000FFF7A5FFC046BD4680BD80B582B000AF22 +:1028C0000200FB1D1A704EF20003C4F20103A022A5 +:1028D0009B5CDBB2FA1D12789A4234D04EF20003B0 +:1028E000C4F2010336229B5CDBB25BB9C0464EF2F8 +:1028F0000003C4F201033C229B5CDB07DB0FDBB26D +:10290000012BF4D1C0464EF20003C4F20103A02211 +:102910009B5CDB06DB0FDBB2002BF4D14EF2000335 +:10292000C4F20103FA1DA02112785A54C0464EF297 +:102930000003C4F20103A0229B5CDB06DB0FDBB2C9 +:10294000002BF4D100E0C046BD4602B080BD80B58A +:1029500082B000AF0200FB1D1A70FB1D1B78042B18 +:102960001FD1C0464EF20003C4F20103AA229B5CB1 +:10297000DB06DB0FDBB2002BF4D14EF20003C4F216 +:102980000103AA2201219954C0464EF20003C4F269 +:102990000103AA229B5CDB06DB0FDBB2002BF4D128 +:1029A00021E0C0464EF20003C4F20103AA229B5C60 +:1029B000DB06DB0FDBB2002BF4D14EF20003C4F2D6 +:1029C0000103AA2200219954C0464EF20003C4F22A +:1029D0000103AA229B5CDBB2002BF6D1FB1D1B7806 +:1029E0001800FFF76AFFC046BD4602B080BD80B543 +:1029F00082B000AF4EF20003C4F2010326229B5CBA +:102A0000DBB27B6040F20C03C2F200037A689200F2 +:102A1000D2584EF20003C4F201031B6A5B015B0F44 +:102A2000DBB2DA4040F29043C2F200031A60C046C3 +:102A3000BD4602B080BD80B500AF4EF20003C4F2C7 +:102A400001033122012199544EF20003C4F2010323 +:102A50002622002199544EF20003C4F2010340F2F1 +:102A60000012C1F200021A62FFF7C1FFC046BD4664 +:102A700080BDFFFF80B500AF4EF20003C4F201033A +:102A800040F2FE324C4999524CF20003C4F2010369 +:102A900040F200120021995240F20C03C2F20003EE +:102AA00046F60042C0F2DC221A6040F20C03C2F289 +:102AB000000341F20022C0F27A025A6040F20C0395 +:102AC000C2F2000348F200029A6040F20C03C2F224 +:102AD000000342F20042C0F2F402DA6040F20C035A +:102AE000C2F2000348F200021A614EF20003C4F27F +:102AF000010340F21342002199544EF20003C4F244 +:102B00000103A222092199544EF20003C4F20103E9 +:102B100040F280429B5CDBB27BB14EF20003C4F218 +:102B2000010340F28142002199544EF20003C4F2A5 +:102B3000010340F28042002199540020FFF7BDFEBE +:102B40004EF20003C4F20103362200219954C0461C +:102B50004EF20003C4F201033C229B5CDB07DB0F57 +:102B6000DBB2012BF4D1FFF766FF4EF20003C4F293 +:102B7000010340F2FE32114999524CF20003C4F2B3 +:102B8000010340F2041201219952C0464CF20003A5 +:102B9000C4F2010340F204129B5A9BB2002BF5D100 +:102BA0004CF20003C4F2010340F2001201219952D9 +:102BB000C046BD4680BDC04603A5FFFF00A5FFFF80 +:102BC00080B582B000AF78607B680BB901230CE060 +:102BD0007B6800221A707B6800225A707B6808228A +:102BE0009A707B680022DA7000231800BD4602B09C +:102BF00080BD80B582B000AF0200FB1D1A70FB1DC6 +:102C00001A7840F25443C2F200039200D3585BB1E9 +:102C1000FB1D1A7840F25443C2F200039200D358CD +:102C2000FA1D127810009847C046BD4602B080BD1C +:102C300080B582B000AF46F20003C4F200033A1D33 +:102C400040F240115B5A1380FB1D00221A7012E003 +:102C50003B1D1A88FB1D1B78DA401300012213402C +:102C600023B1FB1D1B781800FFF7C3FFFB1D1A786B +:102C7000FB1D01321A70FB1D1B780C2BE8D946F2A4 +:102C80000003C4F200033A1D40F2301112885A5278 +:102C9000C046BD4602B080BD80B582B000AF002303 +:102CA0007B6012E043F6E003C0F200037A689B18F1 +:102CB0001A7846F20003C4F2000311007A68C032A9 +:102CC0009200D1507B6801337B607B681F2BE9D970 +:102CD000C046BD4602B080BD80B586B000AF0200E0 +:102CE000FB1D1A7000237B61EFF31083FB60FB6810 +:102CF0007B6101233B613B6983F31088FB1D1A78DC +:102D000040F28843C2F200035200D35A9BB283B10F +:102D1000FB1D1A7840F28843C2F200035100CB5ADF +:102D20009BB2013B99B240F28843C2F200035200C9 +:102D3000D152FB1D1A7840F28843C2F200035200C0 +:102D4000D35A9BB2EBB94EF20003C4F2010340F236 +:102D5000FE329B5A9BB20F4A13439AB2FB1D19785D +:102D600043F61413C0F200034900CB5ADB4399B277 +:102D70004EF20003C4F201030A4091B240F2FE3267 +:102D800099527B69BB60BB6883F31088C046BD461F +:102D900006B080BD00A5FFFF80B586B000AF020081 +:102DA000FB1D1A7000237B61EFF31083FB60FB684F +:102DB0007B6101233B613B6983F31088FB1D1A781B +:102DC00040F28843C2F200035200D35A9BB2DBB9EF +:102DD0004EF20003C4F2010340F2FE329B5A9AB253 +:102DE000FB1D197843F61413C0F200034900CB5AB7 +:102DF00013439AB24EF20003C4F201030F490A438F +:102E000091B240F2FE329952FB1D1A7840F288438B +:102E1000C2F200035100CB5A9BB2013399B240F287 +:102E20008843C2F200035200D1527B69BB60BB6889 +:102E300083F31088C046BD4606B080BD00A5FFFFE5 +:102E400080B500AF00F00AF8FEF73CFCFEE780B565 +:102E500000AF00BEC046BD4680BDFFFF80B582B05A +:102E600000AF0020FEF714FCFFF704FE00F082F82C +:102E70000120FEF70DFC40F2EC52C2F2000240F2DB +:102E80002003C2F20003D21A40F22003C2F2000370 +:102E90000021180000F0C7F840F20C02C2F2000254 +:102EA00040F20003C2F20003D21A43F62011C0F22E +:102EB000000140F20003C2F20003180000F0AAF87B +:102EC00040F60053C4F2000300229A8040F60053FB +:102ED000C4F20003264A1A8040F60053C4F20003ED +:102EE00040F6F012C2F200029A6040F60053C4F2BB +:102EF000000340F6F052C2F20002DA6046F200032C +:102F0000C4F2000340F2201241F20001995240F64F +:102F10000053C4F2000301229A80FFF768FD0220EB +:102F2000FEF7B6FB40F20802C2F2000240F20403D0 +:102F3000C2F20003D31A9B103B6000237B600AE0BF +:102F400040F20403C2F200037A689200D358984713 +:102F50007B6801337B607A683B689A42F0DBFFF75D +:102F60009BFE002000F04EF8C046BD4602B080BD7A +:102F700000A5FFFF80B582B000AFFB1D00221A70D4 +:102F8000FB1D1B7847F20003C4F204035A6847F2A2 +:102F90000003C4F204031A490A405A6040F60003D1 +:102FA000C4F204031B68DB07DB0FDBB21A00FB1D56 +:102FB0001A7040F60003C4F204031B68DB07DB0F42 +:102FC000DBB21A00FB1D1A7040F60003C4F20403C2 +:102FD0001B68DB07DB0FDBB21A00FB1D1A7047F220 +:102FE0000003C4F204035A6847F20003C4F2040366 +:102FF000802149050A435A60C046BD4602B080BDE3 +:10300000FFFFFFEF80B582B000AF7860C046BD46DD +:1030100002B080BD002310B59A4200D110BDCC5C37 +:10302000C4540133F8E703001218934200D17047EB +:1030300019700133F9E7FFFFF8B5C046F8BC08BCCA +:103040009E467047F8B5C046F8BC08BC9E4670471F +:103050005465726D696E616C00000000525454003A +:1030600053454747455200FF303132333435363708 +:103070003839414243444546312E30000D0A2A2A50 +:103080002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA0 +:103090002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A90 +:1030A0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A80 +:1030B0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A70 +:1030C0000D0A2A20202052656E65736173204653D5 +:1030D00050204578616D706C652050726F6A656331 +:1030E0007420666F7220725F636163204D6F647538 +:1030F0006C6520202020202020202020202020203F +:103100002020202A0D0A2A2020204578616D706C2D +:10311000652050726F6A6563742056657273696FBB +:103120006E202573202020202020202020202020F9 +:10313000202020202020202020202020202020208F +:103140002020202020202A0D0A2A202020466C65DD +:103150007820536F667477617265205061636B20CD +:1031600056657273696F6E202025642E25642E25A6 +:10317000642020202020202020202020202020200B +:10318000202020202020202020202020202A0D0A5E +:103190002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A8F +:1031A0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A7F +:1031B0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A6F +:1031C0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A5F +:1031D0002A2A0D0A526566657220746F2072656135 +:1031E000646D652E7478742066696C6520666F72F4 +:1031F000206D6F72652064657461696C73206F6EF9 +:10320000204578616D706C652050726F6A656374DB +:1032100020616E640D0A4653502055736572277302 +:10322000204D616E75616C20666F72206D6F7265E6 +:1032300020696E666F726D6174696F6E2061626F76 +:10324000757420725F636163206472697665720DC4 +:103250000A0000000D0A54686973206578616D707A +:103260006C652070726F6A6563742064656D6F6E43 +:10327000737472617465732062617369632066752B +:103280006E6374696F6E616C6974696573206F66D3 +:1032900020434143206472697665722E0D0A4F6E99 +:1032A000207072657373696E67207468652075732A +:1032B0006572207075736820627574746F6E2C204F +:1032C000434143206D6F64756C6520737461727443 +:1032D00073206D6561737572696E6720746865200F +:1032E0000D0A6163637572616379206F662073658F +:1032F0006C65637465642074617267657420636CC7 +:103300006F636B20616761696E73742074686520F8 +:1033100073656C6563746564207265666572656E5D +:10332000636520636C6F636B2E0D0A526573756C59 +:1033300074206F6620746865206D656173757265B1 +:103340006D656E7420697320646973706C61796552 +:1033500064206F6E205254545669657765722E0D45 +:103360000A0000000D0A2A2A20525F4347435F4F9C +:1033700070656E20415049204641494C4544202A01 +:103380002A200D0A000000005B4552525D20496E64 +:103390002046756E6374696F6E3A20257328292C58 +:1033A000202573000D0A52657475726E65642045A0 +:1033B00072726F7220436F64653A203078257820EE +:1033C000200D0A000D0A2A2A20525F4341435F4F15 +:1033D00070656E20415049204641494C4544202AA1 +:1033E0002A200D0A000000000D0A2A2A20525F49F7 +:1033F00043555F45787465726E616C4972714F70A8 +:10340000656E20415049204641494C4544202A2AB6 +:103410000D0A00000D0A2A2A20525F4347435F43EA +:103420006C6F636B53746172742041504920464144 +:10343000494C4544202A2A200D0A0000202A2A202F +:10344000556E61626C6520746F20207374616269CF +:103450006C697A652043474320636C6F636B202A55 +:103460002A0D0D000D0A53656C6563746564204375 +:103470004743205265666572656E636520636C6FB5 +:10348000636B207374617274656420616E64207371 +:10349000746162696C697A65642E0D0A000000002F +:1034A0000D0A53656C65637465642043474320547B +:1034B000617267657420636C6F636B2073746172F3 +:1034C00074656420616E642073746162696C697AEA +:1034D00065642E0D0A0000000D0A2A2A525F494336 +:1034E000555F45787465726E616C497271456E61A5 +:1034F000626C6520415049204641494C45442A2A86 +:103500000D0A00000D0A5374617274204341432078 +:103510006D6561737572656D656E74206F7065722F +:103520006174696F6E0D0A000D0A2A2A2043414317 +:10353000204D4541535552454D454E542050524F14 +:1035400043455353204641494C4544202A2A0D0AFD +:103550000000000003040001020300000D0A2A2AF3 +:1035600020525F4341435F53746172744D656173D0 +:103570007572656D656E7420415049204641494C15 +:103580004544202A2A200D0A000000000D0A43416C +:1035900043206D6561737572656D656E742073741B +:1035A00061727465642E0D0A00000000202A2A2032 +:1035B0004E6F206576656E74207265636569766509 +:1035C0006420647572696E6720434143206D6561B4 +:1035D000737572656D656E74206F70657261746964 +:1035E0006F6E202A2A0D0D000D0A2A2A20525F43F1 +:1035F00041435F5265616420415049204641494C36 +:103600004544202A2A200D0A000000000D0A4341EB +:1036100043206D6561737572656D656E7420636FAF +:103620006D706C6574656420616E642073656C6593 +:10363000637465642074617267657420636C6F6382 +:103640006B2069732061636375726174652E0D0A66 +:10365000000000000D0A43414320636F756E7465DE +:10366000722076616C7565203A2025640D0A000091 +:103670000D0A2A2A20525F4341435F53746F704DF5 +:103680006561737572656D656E74204150492046A1 +:1036900041494C4544202A2A200D0A000D0A434185 +:1036A00043206D6561737572656D656E742073740A +:1036B0006F707065642E0D0A000000000D0A2A2A42 +:1036C000204672657175656E6379206572726F72DE +:1036D000206F6363757272656420616E642043417C +:1036E0004320636F756E7465722076616C7565201A +:1036F0006973206E6F7420696E2072616E67652039 +:103700006F6620636F6E6669677572656420757099 +:1037100070657220616E64206C6F776572206C69D1 +:103720006D69742E2A2A0D0A000000000D0A2A2A4B +:103730002043414320636F756E746572206F766518 +:1037400072666C6F77206F636375727265642E208A +:103750002A2A0D0A000000000D0A2A2A20525F437F +:1037600041435F436C6F7365204150492046414996 +:103770004C4544202A2A200D0A0000000D0A2A2A5E +:1037800020525F4347435F436C6F7365204150494C +:10379000204641494C4544202A2A200D0A000000B9 +:1037A0002A2A20525F4943555F45787465726E61DD +:1037B0006C497271436C6F736520415049204641DA +:1037C000494C4544202A2A0D0A00FFFF68616C5FBE +:1037D000656E74727900FFFF6361635F6D6561738D +:1037E0007572656D656E745F70726F63657373007B +:1037F0006465696E69745F63616300FF6465696E27 +:1038000069745F63676300FF6465696E69745F650F +:10381000787465726E616C5F6972710000000000FF +:1038200006020301030100008115000000000000F2 +:1038300000000000030000000002CC8C3473010281 +:103840000002030353150000000000000000000008 +:103850000000010C010000000080000003000000D7 +:103860000000010008010000000001060B0100003B +:10387000000001060C010000000000000102000031 +:103880000000010404020000040000000502000022 +:1038900000400000060200000000010000030000DC +:1038A00000000106030300000000010604030000FD +:1038B00000000113070400000000010C09040000CF +:1038C000000001040B040000000001130E090000B9 +:1038D000000001130F090000110000005038000023 +:1038E000353637070000000000000000000000002F +:1038F00000000000000000000000000000000000C8 +:1039000036E0014038E0014090E4014032E00140FF +:1039100080E40140010002000800FFFF00000000F9 +:0C392000FF0000002D0500000105000064 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:0400000300002E418A +:00000001FF diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..59f7f45015 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Clock Accuracy Measurement Circuit + Renesas.RA.0.8.0.pack + + + Clock Generation Circuit + Renesas.RA.0.8.0.pack + + + External Interrupt + Renesas.RA.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..30efb8f5eb --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,199 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is automatically activated after a reset (Autostart mode) + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 1 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: NMI request or interrupt request is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is disabled after reset + OFS1 register settings: Voltage Detection 0 Level: 1.90 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 CTSU0_TS15 Low None "Peripheral mode" - None "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 ADC0_AN06 - - "Analog mode" - None "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 SPI0_RSPCK Low None "Peripheral mode" CMOS None "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 SPI0_SSL0 Low None "Peripheral mode" CMOS None "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 SCI0_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPIO Low None "Output mode (Initial Low)" CMOS - "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 IRQ0_IRQ06 - IRQ06 "IRQ mode" - - "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 SPI0_MOSI Low - "Peripheral mode" - None "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 SPI0_MISO Low - "Peripheral mode" CMOS None "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 USBFS0_VBUS Low None "Peripheral mode" CMOS None "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 CTSU0_TSCAP Low None "Peripheral mode" CMOS None "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 - - - Disabled - - "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI0_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 USBFS0_DP - - "Peripheral mode" - - "USB_FS0: DP" + P915 18 USBFS0_DM - - "Peripheral mode" - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "Clock Accuracy Circuit Driver on r_cac" + Parameter Checking: Default (BSP) + + Module "CGC Driver on r_cgc" + Parameter Checking: Default (BSP) + + Module "External IRQ Driver on r_icu" + Parameter Checking: Default (BSP) + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_cac Clock Accuracy Circuit Driver on r_cac" + Name: g_cac + Reference clock divider: 8192 + Reference clock source: Main Oscillator + Reference clock digital filter: Disabled + Reference clock edge detect: Rising + Measurement clock divider: 1 + Measurement clock source: HOCO + Upper Limit Threshold: 36044 + Lower Limit Threshold: 29492 + Frequency Error Interrupt Priority: Priority 3 + Measurement End Interrupt Priority: Priority 2 + Overflow Interrupt Priority: Priority 3 + Callback: cac_callback + + Instance "g_cgc CGC Driver on r_cgc" + Name: g_cgc + NMI Callback: NULL + + Instance "g_external_irq External IRQ Driver on r_icu" + Name: g_external_irq + Channel: 6 + Trigger: Rising + Digital Filtering: Enabled + Digital Filtering Sample Clock (Only valid when Digital Filtering is Enabled): PCLK / 64 + Callback: external_irq_cb + Pin Interrupt Priority: Priority 2 + diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..f59a62e052 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/cac_ep.h b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/cac_ep.h new file mode 100644 index 0000000000..b677176dc5 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/cac_ep.h @@ -0,0 +1,66 @@ +/*********************************************************************************************************************** + * File Name : cac_ep.h + * Description : Contains Macros and function declarations. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ +#ifndef CAC_EP_H_ +#define CAC_EP_H_ + +/* Macro definition */ +/* External IRQ channel for specific boards*/ +#if defined (BOARD_RA6M3_EK) || defined (BOARD_RA6M3G_EK) +#define USER_SW_IRQ_NUMBER (0x0D) +#elif defined (BOARD_RA6M2_EK) || defined (BOARD_RA4M1_EK) +#define USER_SW_IRQ_NUMBER (0x00) +#elif defined (BOARD_RA2A1_EK) +#define USER_SW_IRQ_NUMBER (0x06) +#else +#define USER_SW_IRQ_NUMBER (0x08) +#endif + +/* Event flag to identify CAC events */ +#define CAC_EVENT_VALUE 0XFF +/* To determine number of measurement clocks(CGC) available in CAC configurator */ +#define TARGET_CGC_CLK_CNT 0x06 + +#define EP_INFO "\r\nThis example project demonstrates basic functionalities of CAC driver."\ + "\r\nOn pressing the user push button, CAC module starts measuring the \r\naccuracy of selected target clock"\ + " against the selected reference clock."\ + "\r\nResult of the measurement is displayed on RTTViewer.\r\n" + +/* Private enum*/ +/* Enumeration of the possible target clocks. As CGC and CAC clock sources have different enum values.*/ +typedef enum e_target_clk_src +{ + TARGET_CLOCK_SOURCE_HOCO = 0x00, /* To Select Target clock as HOCO (High speed on chip oscillator)*/ + TARGET_CLOCK_SOURCE_MOCO = 0x01, /* To Select Target clock as MOCO (Middle speed on chip oscillator)*/ + TARGET_CLOCK_SOURCE_lOCO = 0x02, /* To Select Target clock as LOCO (Middle speed on chip oscillator)*/ + TARGET_CLOCK_SOURCE_MAIN_OSC = 0x03, /* To Select Target clock as Main clock oscillator*/ + TARGET_CLOCK_SOURCE_SUBCLOCK = 0x04, /* To Select Target clock as Sub-clock*/ + TARGET_CLOCK_SOURCE_PCLKB = 0x03 /* To select Target clock as PCLKB and its one of clock source is Main OSC.*/ +} target_clock_t; + +/* Function declaration */ +void deinit_cac(void); +void deinit_cgc(void); +void deinit_external_irq(void); +void clean_up(void); + +#endif /* CAC_EP_H_ */ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..2d4cbe5111 --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_cac" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..c822dfd89e --- /dev/null +++ b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,419 @@ +/*********************************************************************************************************************** + * File Name : hal_entry.c + * Description : Contains data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" +#include "cac_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup cac_ep + * @{ + **********************************************************************************************************************/ + +/* Global variable */ +/* variable to capture CAC events. */ +static volatile uint8_t g_cac_event = CAC_EVENT_VALUE; +static volatile bool b_cac_status_flag = false; +/* Boolean flag to determine switch is pressed or not.*/ +static volatile bool b_sw_press = false; + +/* Private function*/ +static fsp_err_t cac_measurement_process(void); + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ + +void hal_entry(void) +{ + fsp_err_t err = FSP_SUCCESS; + fsp_pack_version_t version = {RESET_VALUE}; + uint16_t cgc_time_out = UINT16_MAX; + /* used to get reference clock from CAC configurable property "Reference clock source".*/ + uint8_t ref_clk = RESET_VALUE; + /* used to get target clock from CAC configurable property "measurement clock source".*/ + uint8_t target_clk = RESET_VALUE; + /* Supported clocks in this EP */ + uint8_t target_cgc_clk_src[TARGET_CGC_CLK_CNT] = {TARGET_CLOCK_SOURCE_MAIN_OSC, + TARGET_CLOCK_SOURCE_SUBCLOCK, + TARGET_CLOCK_SOURCE_HOCO, + TARGET_CLOCK_SOURCE_MOCO, + TARGET_CLOCK_SOURCE_lOCO, + TARGET_CLOCK_SOURCE_PCLKB}; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + + /* Example Project information printed on the RTT */ + APP_PRINT(BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + APP_PRINT(EP_INFO); + + /* Open CGC module */ + err = R_CGC_Open(&g_cgc_ctrl, &g_cgc_cfg); + /* Handle error */ + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CGC_Open API FAILED ** \r\n"); + APP_ERR_TRAP(err); + } + + /* Open CAC module */ + err = R_CAC_Open(&g_cac_ctrl, &g_cac_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CAC_Open API FAILED ** \r\n"); + + /* de-initialize all the opened modules before trap*/ + deinit_cgc(); + APP_ERR_TRAP(err); + } + + /* Open ICU module */ + err = R_ICU_ExternalIrqOpen(&g_external_irq_ctrl, &g_external_irq_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* ICU Open failure message */ + APP_ERR_PRINT ("\r\n** R_ICU_ExternalIrqOpen API FAILED **\r\n"); + + /* de-initialize all the opened modules before trap*/ + deinit_cac(); + deinit_cgc(); + APP_ERR_TRAP(err); + } + + /* copy the reference clock selected from configurator to local buffer*/ + ref_clk = g_cac_cfg.cac_ref_clock.clock; + + /* If reference clock is not IWDT clock, then start and check stability of reference clock selected in configurator.*/ + if (CAC_CLOCK_SOURCE_IWDT != ref_clk) + { + /* Start selected target clock. */ + err = R_CGC_ClockStart(&g_cgc_ctrl, target_cgc_clk_src[ref_clk], NULL); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CGC_ClockStart API FAILED ** \r\n"); + /* close all the opened modules before trap*/ + clean_up(); + APP_ERR_TRAP(err); + } + + /* Check selected target clock for stability */ + do + { + /*start checking for timeout to avoid infinite loop*/ + --cgc_time_out; + + err = R_CGC_ClockCheck(&g_cgc_ctrl, target_cgc_clk_src[ref_clk]); + + /*check for time elapse*/ + if ((RESET_VALUE == cgc_time_out) || (FSP_ERR_CLOCK_INACTIVE == err)) + { + /*we have reached to a scenario where CGC clock is not stabilized*/ + APP_ERR_PRINT (" ** Unable to stabilize CGC clock **\r\r"); + /* close all the opened modules before trap*/ + clean_up(); + APP_ERR_TRAP(err); + } + }while(FSP_ERR_NOT_STABILIZED == err); + APP_PRINT("\r\nSelected CGC Reference clock started and stabilized.\r\n"); + } + + /* copy the target clock selected from configurator to local buffer*/ + target_clk = g_cac_cfg.cac_meas_clock.clock; + + /* If target clock is not IWDT clock, then start and check stability of target clock selected in configurator.*/ + if (CAC_CLOCK_SOURCE_IWDT != target_clk) + { + /* Start selected target clock. */ + err = R_CGC_ClockStart(&g_cgc_ctrl, target_cgc_clk_src[target_clk], NULL); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CGC_ClockStart API FAILED ** \r\n"); + /* close all the opened modules before trap*/ + clean_up(); + APP_ERR_TRAP(err); + } + + /* Check selected target clock for stability */ + do + { + /*start checking for timeout to avoid infinite loop*/ + --cgc_time_out; + + err = R_CGC_ClockCheck(&g_cgc_ctrl, target_cgc_clk_src[target_clk]); + + /*check for time elapse*/ + if ((RESET_VALUE == cgc_time_out) || (FSP_ERR_CLOCK_INACTIVE == err)) + { + /*we have reached to a scenario where CGC clock is not stabilized*/ + APP_ERR_PRINT (" ** Unable to stabilize CGC clock **\r\r"); + /* close all the opened modules before trap*/ + clean_up(); + APP_ERR_TRAP(err); + } + }while(FSP_ERR_NOT_STABILIZED == err); + APP_PRINT("\r\nSelected CGC Target clock started and stabilized.\r\n"); + } + + /* Enable ICU module */ + err = R_ICU_ExternalIrqEnable(&g_external_irq_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* ICU Enable failure message */ + APP_ERR_PRINT ("\r\n**R_ICU_ExternalIrqEnable API FAILED**\r\n"); + /* close all the opened modules before trap*/ + clean_up(); + APP_ERR_TRAP(err); + } + + while (true) + { + if(true == b_sw_press) + { + /* Clear user pushbutton flag */ + b_sw_press = false; + + APP_PRINT("\r\nStart CAC measurement operation\r\n"); + /* process cac measurement operation.*/ + err = cac_measurement_process(); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** CAC MEASUREMENT PROCESS FAILED **\r\n"); + /* close all the opened modules before trap*/ + clean_up(); + APP_ERR_TRAP(err); + } + } + } +} + +/*******************************************************************************************************************//** + * @brief Perform CAC measurement operation + * @param[IN] None + * @retval FSP_SUCCESS Upon successful CAC measurement. + * @retval Any Other Error code apart from FSP_SUCCES on Unsuccessful measurement . + **********************************************************************************************************************/ +static fsp_err_t cac_measurement_process(void) +{ + fsp_err_t err = FSP_SUCCESS; + uint16_t cac_counter_val = RESET_VALUE; + uint16_t cac_time_out = UINT16_MAX; + + /* Reset flags before starting CAC measurement*/ + g_cac_event = CAC_EVENT_VALUE; + b_cac_status_flag = false; + + /* Begin a measurement */ + err = R_CAC_StartMeasurement(&g_cac_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CAC_StartMeasurement API FAILED ** \r\n"); + return err; + } + + APP_PRINT("\r\nCAC measurement started.\r\n") + + /* Wait for measurement complete or error generation event. */ + while (true != b_cac_status_flag) + { + /*start checking for timeout to avoid infinite loop*/ + --cac_time_out; + + /*check for time elapse*/ + if (RESET_VALUE == cac_time_out) + { + /*we have reached to a scenario where CAC event not occurred*/ + APP_ERR_PRINT (" ** No event received during CAC measurement operation **\r\r"); + return FSP_ERR_TIMEOUT; + } + } + + /* Check for event received from CAC callback. */ + switch (g_cac_event) + { + case CAC_EVENT_MEASUREMENT_COMPLETE : + { + err = R_CAC_Read(&g_cac_ctrl, &cac_counter_val); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CAC_Read API FAILED ** \r\n"); + return err; + } + + APP_PRINT("\r\nCAC measurement completed and selected target clock is accurate.\r\n") + APP_PRINT("\r\nCAC counter value : %d\r\n",cac_counter_val); + + /* Stop a measurement */ + err = R_CAC_StopMeasurement(&g_cac_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CAC_StopMeasurement API FAILED ** \r\n"); + return err; + } + APP_PRINT("\r\nCAC measurement stopped.\r\n"); + } + break; + + case CAC_EVENT_FREQUENCY_ERROR : + { + APP_ERR_PRINT("\r\n** Frequency error occurred and CAC counter value is not in range of configured upper " + "and lower limit.**\r\n"); + + /* returning from here as counter value is not in the range of configured upper limit and lower limit.*/ + err = FSP_ERR_INVALID_CAC_REF_CLOCK; + } + break; + + default : + { + APP_ERR_PRINT("\r\n** CAC counter overflow occurred. **\r\n"); + + /* returning from here as counter buffer overflows. */ + err = FSP_ERR_OVERFLOW; + } + break; + } + + return err; +} + +/*******************************************************************************************************************//** + * @brief User defined CAC callback. + * @param[IN] p_args + * @retval None + **********************************************************************************************************************/ +void cac_callback(cac_callback_args_t *p_args) +{ + if (NULL != p_args) + { + g_cac_event = p_args->event; + b_cac_status_flag = true; + } +} + +/*******************************************************************************************************************//** + * @brief User defined external irq callback. + * @param[IN] p_args + * @retval None + **********************************************************************************************************************/ +void external_irq_cb(external_irq_callback_args_t *p_args) +{ + /* Make sure it's the right interrupt*/ + if ( (NULL != p_args) && (USER_SW_IRQ_NUMBER == p_args->channel) ) + { + b_sw_press = true; + } +} + +/***************************************************************************************************************** + * @brief Close the CAC HAL driver. + * @param[IN] None + * @retval None + ****************************************************************************************************************/ +void deinit_cac(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close cac module */ + err = R_CAC_Close(&g_cac_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CAC_Close API FAILED ** \r\n"); + } +} + +/***************************************************************************************************************** + * @brief Close the CGC HAL driver. + * @param[IN] None + * @retval None + ****************************************************************************************************************/ +void deinit_cgc(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close CGC module */ + err = R_CGC_Close(&g_cgc_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\n** R_CGC_Close API FAILED ** \r\n"); + } +} + +/*******************************************************************************************************************//** + * @brief This function closes opened ICU module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void deinit_external_irq(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* close opened external interrupt module */ + err = R_ICU_ExternalIrqClose(&g_external_irq_ctrl); + /* Handle error */ + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT ("** R_ICU_ExternalIrqClose API FAILED **\r\n"); + } +} + +/***************************************************************************************************************** + * @brief Close all modules. + * @param[in] None + * @retval None + ****************************************************************************************************************/ +void clean_up(void) +{ + /* de-initialize all the opened modules before trap*/ + deinit_cac(); + deinit_cgc(); + deinit_external_irq(); +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) +{ + if (BSP_WARM_START_POST_C == event) + { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open (&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup cac_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/cac/cac_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..7d1f65e4e97d8ab28d3634654a33640fa08356d1 GIT binary patch literal 6242 zcmd^@?NeJ-5XR5fI^%!P&YW?^fod%US~}YCLkKU862K&ss^d5z6pRf46DaB*uRg!s zEcf07TGW2)WRl!_UUr{-_T}uofB&_RKKr0PAE%FGZ%*}en$FT6X_WfuIQ^2&HTGj# zN{`ZF`ZE2byHmG zvv9!Pp)kQD_&|MoG{JW85Inz~;hg5v-CXtPy?lSd{I)QF1B5W0g$~X^7hHBV#yno` zr$04|FYw#DJ>WK+pKtd@vBEL!lWe zg0p1LMs(~g*s5}nEmDg3!eVEEnTSKiV5lei@%gdgf{ASU$EJIzRbaWWS)@e#RpYY2 z(n-&iRXMfOPTCNU`^tfqjWjft)0(cg6mKu|&-j|gI$E34_xjz_|J_`(m8^e|?q#xQ z+t#suTi>=ukk!=xw|1X3jto}p+Hc#|cC?}+Z9AH0$ByRm1XIi8GK)k!5qca?Sh68h zTl%o7qgCtarT#&}U3hO-BP}5Ubz8rywj*mV*qKBAu0B{_*LAGe()GUdui4(Z=4-lY zN(wvBd^6&GW80CU0c@e6A$(h6HLOPF^c+?*b|C+9MwZ5g5Z~?#EF}kP!U9H1^WuM^RZLQvxl$QN(Y6Te3 z&B}e#_FPv)L0eMRB^w`A{W%?(k@3V&_?*akDS1udX=*%duKK?4c}F`vmRF7O@Ts#K z(YbC>?{NcK_w964uS!xj9*Y>MW(X{B+QA6yVx`A;nT4=r+Ft6W=K+2rKHLu0AvbLG zHO{a56rB;BU?5WP#inAQWAW;d?%7RdOwRSq2y_~Hn1-24pzuVd;`18JKx0RcajvmkfF>*yfuW( zM?fcUVQ$BR`QH%$4hcqsJFyTvakCe7{Em z`8&J9ah7AnF@pRX+11jnXWAE4G@_jxpl(dZIX=Xj#5*>#b4{#JK|PnM^(NxktAp3r zqTWPxY6}T92|q_%%|=x6RyXpl_)2}-D>2TneZk3+3 zum8*Rm94)c#^|uJzQ3!JII*sjd+(5n{fAm{B8fxwJ@ni3)!vUqcXF;i^Gwp|lm?RE z9b0shv5K>k2qu2W5oFSPdS}HM+mHsTI=0*q?xC(hgSN5tGxSy=&$Wzf4cBzE2a%#&%k6my0EBhEq+BR2)sX} zgB@EW@D$-zz$G#{D_>}y7y^&$h9S;)&e5#ca_?0Ud0g&EGU(frClESV?iTesFP+!< zkaH*W*V2lr;Ic;IS%*&0$2KQus(P0!np`h&63<3umR%ZNd^^)%BvbIfnK8y4nJ^MR z9``);5k=Ep!ivCL_|E%vvXTr7KC2ci|0@e_@@-k?f5Y*31_$0EZs3xCf3C$2o|5|F zny1XdZeri#raDi?`Sa4yp2d%iL28UY(;SF7bnxWrkr0tw_M*>U=fSY|-P}-nh-SVU zru{@%cxo%2x$rZ&&nUk4%tbHt=Tzf|ij#ti1&xH=L_xvKSa*>vX!IP}oUqx{f7GOM zmXkqYuO3V8c_RT4?=4=Ek9)m~5fu9e)wy1AZ z@f}sy9a+1S9&7jW^n>=fht~CU_p>TS&1M$U?c$$Uft5LNF=y4=JxzSj%YUtJq04>c z86K>)WYx{JGHdRAGS)K2Zp&9w)_JVct<=TaqO5tpye&)OG;=(i!CYD2f~x3}yy6^s zjj0RYbZqk$gLfn3@f({b);L#-xT#BH!9fvO^((ziy?1L#oA2Y@Ma-=zJ{*JBmyUG2 zmIflhbB^XR|QTM@Rv z_r!8zPnG}75S268-#S%mKyZFNgE@UJZB)3beSu@%7-CK53fog51rJ<>JFkb-wBnh}>u9-Snax5vim`bU4n2Q!`a~Q=zckhzeDNNR z>P1C>+3Qb?I5$qUeq`qc9Sz-Z-%gmGc5{09Sw&C4dorTmW0436+|;loed$pSq|qf3 s$*!NS)KBkR$>(zQy{_s+ZJn+P_%+_|&E{iquDt79EuUpX%pLR8KcEAU?EnA( literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.cproject b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.cproject new file mode 100644 index 0000000000..c150a992dd --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.cproject @@ -0,0 +1,286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.project b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.project new file mode 100644 index 0000000000..0f2badcea7 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.project @@ -0,0 +1,32 @@ + + + crc_ek_ra2a1_ep + + + + + + com.renesas.cdt.ra.contentgen.raBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..ebafeadcd2 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..86de7bc296 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +is.toolchain.version=true +store.version=2 +toolchain.version=8.3.1.20190703 diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs new file mode 100644 index 0000000000..3268617d57 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.packs.componentfiles.prefs @@ -0,0 +1,21 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/all=1095500234,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|3495366234,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|3736767158,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|2543792910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|3529996436,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|62340664,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|3196007711,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|1205116042,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|1308985158,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|1738009366,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|2559325634,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|1821161948,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|2865554903,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|2056941722,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h|2504940735,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|2483273362,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|3479797971,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|2340816491,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|2459031624,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|3528041316,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|3902733036,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|3047267965,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|3237532280,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.5.1/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/all=811579141,ra/board/ra2a1_ek/board_init.c|1192771973,ra/board/ra2a1_ek/board.h|1570288955,ra/board/ra2a1_ek/board_leds.h|3781303622,ra/board/ra2a1_ek/board_init.h|1634941367,ra/board/ra2a1_ek/board_leds.c +Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/all=2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/all= +Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#0.8.0/libraries= +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/all=3472947784,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|49520982,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h|2664258381,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h +Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#0.8.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/all=2957208586,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|3241443262,ra/fsp/inc/api/bsp_api.h|607458656,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|1055176819,ra/fsp/src/bsp/cmsis/Device/RENESAS/SVD/RA.svd|2501106053,ra/fsp/src/bsp/mcu/all/bsp_irq.h|2218484130,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|2319720569,ra/fsp/inc/fsp_features.h|2004004453,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|1069668933,ra/fsp/src/bsp/mcu/all/bsp_common.c|315113526,ra/fsp/src/bsp/mcu/all/bsp_irq.c|2012628183,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|3128541822,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1719600019,ra/fsp/inc/fsp_version.h|1017925130,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|860418405,ra/fsp/inc/fsp_common_api.h|1710389471,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|3527876008,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|488232601,ra/fsp/src/bsp/mcu/all/bsp_common.h|1779562172,ra/fsp/src/bsp/mcu/all/bsp_io.h|2773691312,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|3496225376,ra/fsp/src/bsp/mcu/all/bsp_delay.h|603378250,ra/fsp/src/bsp/mcu/all/bsp_io.c|3667622829,ra/fsp/inc/instances/r_ioport.h|1847495715,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|1236496807,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|1378965177,ra/fsp/src/bsp/mcu/all/bsp_delay.c|3824661351,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|715523488,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|1558476715,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|1533961824,ra/fsp/inc/api/r_ioport_api.h +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_crc\#\#\#\#0.8.0/all=3142088579,ra/fsp/inc/api/r_crc_api.h|1752295597,ra/fsp/src/r_crc/r_crc.c|1199801732,ra/fsp/inc/instances/r_crc.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_crc\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_icu\#\#\#\#0.8.0/all=1436205728,ra/fsp/src/r_icu/r_icu.c|1266105035,ra/fsp/inc/api/r_external_irq_api.h|1535354118,ra/fsp/inc/instances/r_icu.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_icu\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/all=3667622829,ra/fsp/inc/instances/r_ioport.h|3642215214,ra/fsp/src/r_ioport/r_ioport.c|1533961824,ra/fsp/inc/api/r_ioport_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#0.8.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#0.8.0/all=1191149080,ra/fsp/inc/api/r_uart_api.h|3658548615,ra/fsp/src/r_sci_uart/r_sci_uart.c|3368052384,ra/fsp/inc/instances/r_sci_uart.h|398594556,ra/fsp/inc/api/r_transfer_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#0.8.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs new file mode 100644 index 0000000000..a2fb337b38 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ra.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs new file mode 100644 index 0000000000..fdf58ff938 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/com.renesas.cdt.ra.threads.configurator.prefs @@ -0,0 +1,2 @@ +collapse/module.driver.uart_on_sci_uart.1137302411=false +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..8bb3b969ca --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..253f23cad3 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,172 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.formatter.align_composite_type_declarators=false +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=18 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=82 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=0 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=82 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=82 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block=next_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=false +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_preprocessor_directives=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.cdt.core.formatter.indentation.size=4 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_identifier_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_pointer_operators_in_expression=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=120 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=4 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg new file mode 100644 index 0000000000..8f9798f9bd --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/R7FA2A1AB3CFM.pincfg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg new file mode 100644 index 0000000000..a5e7fed0a4 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/RA2A1-EK.pincfg @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/configuration.xml b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..b41d6020a0 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/configuration.xml @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I/O Port + Renesas.RA.0.8.0.pack + + + Board Support Package Common Files + Renesas.RA.0.8.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.0.8.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.5.1.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.0.8.0.pack + + + Cyclic Redundancy Check + Renesas.RA.0.8.0.pack + + + External Interrupt + Renesas.RA.0.8.0.pack + + + SCI UART + Renesas.RA.0.8.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.jlink b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.jlink new file mode 100644 index 0000000000..39b6d054aa --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.jlink @@ -0,0 +1,39 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.launch b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.launch new file mode 100644 index 0000000000..750aa66c7b --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep Debug.launch @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep.hex b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep.hex new file mode 100644 index 0000000000..4c8696f14a --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/crc_ek_ra2a1_ep.hex @@ -0,0 +1,828 @@ +:10000000F80D0020ED27000079270000E927000007 +:10001000E9270000E9270000E927000000000000B0 +:10002000000000000000000000000000E9270000C0 +:10003000E927000000000000E9270000E927000090 +:10004000A119000091180000211B0000011C0000F4 +:10005000F522000000000000000000000000000089 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 +:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30 +:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 +:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10 +:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF +:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF +:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF +:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF +:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF +:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F +:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F +:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F +:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F +:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F +:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F +:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F +:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F +:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F +:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F +:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE +:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE +:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE +:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFDFCEFFFFFCFF0F00FFFF0F002E +:10041000FCFF0F00FFFF0F00FCFF0F00FFFF0F00AE +:10042000FCFF0F20FFFF0F20FCFF7F40FFFF7F40FE +:10043000FCFF0D40FFFF0D40FFFFFFFFFFFFFFFF31 +:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC +:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC +:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C +:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C +:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C +:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C +:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C +:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C +:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C +:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C +:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C +:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C +:1005000010B540F22004C2F20004237863B940F22F +:100510000003C0F200032BB143F25C30C0F20000D4 +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB140F2240143F25C302D +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F0B5C646C3680E00816805008846CF1A0C +:10056000416800B5C8189C18974206D9310002F0BE +:1005700003FAEC6004BC9046F0BD3A00310002F092 +:10058000FBF94346E41AF1192200686802F0F4F915 +:10059000EC60EFE7F8B54746CE46884680B51600D2 +:1005A0000700C568846840F200091AE0013B5B1B44 +:1005B000641BB44200D934009C4200D91C007B6803 +:1005C00022005819414602F0D7F92D19A144A04440 +:1005D000361BBC68631B5A1E93415B421D40FD6085 +:1005E00036B13B699D42E1D3013B1B195B1BDFE741 +:1005F00048460CBC90469946F8BDC04610B540F23E +:100600008844032342F6B412C2F2000423616361FA +:1006100040F24C03C0F20002A261226640F23C02AA +:10062000C2F20003E36140F20043C2F200026266DC +:1006300042F6C011102223620023A266E01DC0F220 +:1006400000010C3AA3626362E3622367E3666367B7 +:1006500002F092F942F6C413C0F200031A68226055 +:100660009B88A3802023A37110BDC046431C70B596 +:1006700015005A00D21840F28843D200C2F200039B +:10068000D61840F28842C2F20002944643001B187A +:10069000DB006344DC6A012C0BD0CCB1022C06D108 +:1006A0002A003000FFF776FF0400200070BD002410 +:1006B000FBE79A6A586A82421DD9013A121A2C0045 +:1006C000954200D9140022003000FFF741FFECE70B +:1006D0009A6A586A824209D9013A121A9542E4D8B4 +:1006E0002A003000FFF734FF2C00DEE71B6AD21827 +:1006F000013A121AF2E71B6AD218013A121ADEE71F +:10070000F8B540F28843C2F200031B7805005BB2E3 +:100710000E00170063B1EFF31084012181F31088FC +:100720003A0031002800FFF7A1FF84F31088F8BDDC +:10073000FFF764FFEFE7C04610B504008368626806 +:10074000581C904207D82268D154E368626801338C +:10075000E3600300A0609A4200D010BD21682069C8 +:10076000FFF7CEFFA368984203D001235B42E3600A +:10077000F3E70023A360F0E7F8B54E464546574639 +:10078000DE46E0B51E000A9B80460F001500994624 +:10079000914200D277E00B000122B3FBF5F3013266 +:1007A0009D42FAD9B246964200D2924601230B9A54 +:1007B0001A409346002A5AD14B46002B57D00B9B28 +:1007C00020249B0758D4D14502D850E0D1450ED003 +:1007D00001235B429C4621004046E144FFF7ACFF09 +:1007E0004346DB68002B3CDB4B46002BEED101245B +:1007F000012E03D9013E6C43012EFBD8B7FBF4F365 +:100800009D42F8D942F6CC16C0F2000606E0B4FBD1 +:10081000F5F3AC420DD31C00B7FBF3F322005A43AF +:10082000F1564046BF1AFFF787FF4346DB68002BAF +:10083000EDDA5B46ABB14B469BB1CA4502D310E043 +:10084000D1450ED001235B429C4620214046E14425 +:10085000FFF772FF4346DB68002B02DB4B46002BA1 +:10086000EED13CBC90469946A246AB46F8BD434605 +:10087000DB68002BBBDAF4E7744274416342102456 +:100880001C4020349FE701228CE7C046F0B5574654 +:10089000DE464E464546E0B59DB00CAB9B46079301 +:1008A0004023089300230C009146042740F2010ADC +:1008B000029009930B900A9300216156013400299C +:1008C00000D1AAE025290CD007A8FFF735FF0A9828 +:1008D0000028F1DA1DB03CBC90469946A246AB46D2 +:1008E000F0BD0023E356621C0026022508211000FB +:1008F0002B2B0DD02B2B0EDD2D2B57D0302B0FD1CA +:1009000014002E430023E356621C10002B2BF1D160 +:100910003E431400F6E7232B02D10E431400F1E707 +:1009200019003039C9B2092900D980E00025B44640 +:100930002E001D0001E014000132B3009B195B0082 +:100940005B1900255557303B28003038C0B21100E4 +:100950001E000928EFD92B00A01C350066462E2B5F +:1009600069D000230C00CB5640F2000801E00023C0 +:10097000E3561A000134BA43682AF8D0642B77D0C2 +:100980003DDD732B00D1C6E026DD752B12D14B4621 +:1009900049461B6807A81A1D0A6019680A220196B1 +:1009A00000954346FFF7E8FE0A9891E75346140086 +:1009B0001E43A7E7782B00D089E74B4649461B68C2 +:1009C00007A81A1D0A60196810220196009543466F +:1009D000FFF7D2FE0A987BE7702B00D077E74B46F3 +:1009E00049461B6807A81A1D0A601968002301936D +:1009F000083300931022FFF7BFFE0A9868E7582BD0 +:100A0000DBD0632B00D19AE0252B00D05FE707A84D +:100A10002521FFF791FE0A985AE70A98002800DC82 +:100A200058E7099A002A00D095E0801852E7210083 +:100A300000252E2B95D10123CB5604001A00303A05 +:100A4000D2B240F20008092A93D819004046830028 +:100A50001B185B005B18002101346156303B0A0013 +:100A6000303AD2B21800092AF1D90B00804680E74B +:100A70004B4649461B681A1D1B680A60DA17039328 +:100A80009B1853400122092B07DD0A2000E00B00D0 +:100A900093FBF0F10132632BF9DC4346049390455C +:100AA00061D30223334095B3039A002A61DB3742B6 +:100AB0005FD10BB1434653B35346334227D135B3CD +:100AC000049B9D4223D905961E0001E0B5420AD041 +:100AD00007A82021FFF730FE0A98013D002800DA20 +:100AE000F8E6002DF2D1059E039B002B43DB374235 +:100AF0004CD103233340022B4DD007A8019600951B +:100B000043460A220399FFF737FE0A98E0E60A985F +:100B10000028E9DADEE64B4649461B681A1D0A60E2 +:100B20001D6806E007A8FFF707FE0A98002800DA0C +:100B3000D0E60021695601350029F3D1C7E64B46BE +:100B400049461B6807A81A1D0A6000215956FFF77D +:100B5000F3FD0A98BCE659460298FFF7D1FD0A98C2 +:100B6000099A8018B6E6022304923340002DCED0B5 +:100B70009AE7013D9DE75B422D2107A80393FFF70C +:100B8000DBFD0A98002800DAA4E6B2E72B2107A8CB +:100B9000FFF7D2FDF5E74346002BAED18DB1049BA4 +:100BA0009D4203D8A9E7049B9D42A6D007A8302107 +:100BB000FFF7C2FD0A98013D002800DA8AE6002D01 +:100BC000F1D1002599E7C0460EB400B582B003AB61 +:100BD00002CB01AA0193FFF759FE02B008BC03B093 +:100BE0001847C04620B10379012B09D0022B00D051 +:100BF000704740F24E430122C2F200031A70F7E739 +:100C000040F24D42C2F200021370F1E710B14368A6 +:100C1000062B00D0704740F24C430122C2F2000381 +:100C20001A70F7E740F2645010B5C2F2000001F00C +:100C300033FB00B910BD42F6442342F6F81242F6E7 +:100C40007021C0F20003C0F20002C0F200010020D7 +:100C5000FFF7BAFFEEE7C04640F25C5010B5C2F2B3 +:100C6000000001F0BBFB00B910BD42F6242342F6A0 +:100C70000C2242F67021C0F20003C0F20002C0F262 +:100C800000010020FFF7A0FFEEE7C04640F2385019 +:100C900010B5C2F2000000F019FB00B910BD42F619 +:100CA0008C2342F6182242F67021C0F20003C0F2F3 +:100CB0000002C0F200010020FFF786FFEEE7C04609 +:100CC00043F25033C0F200035B6800B5198843F269 +:100CD0005C23C0F200031B6883B00200180001937C +:100CE00001F052F808B903B000BD43F2381243F2E4 +:100CF000841140F2B113C0F20002C0F200010020E2 +:100D0000FFF762FFFFF7A8FFFFF7C0FFFFF78AFFBB +:100D100043F2A4110122C0F200010020FFF754FFAA +:100D200000BEE0E743F25C2310B543F25034C0F25A +:100D300000031B6882B0C0F20004019363680122C3 +:100D40001988019801F020F870B940F2E83140F2BA +:100D50005E1001F0E3FC636800221988019801F03D +:100D600013F8F0B902B010BD43F2C41243F284117B +:100D700040F2A513C0F20002C0F200010020FFF70C +:100D800023FFFFF769FFFFF781FFFFF74BFF43F2F8 +:100D9000A4110122C0F200010020FFF715FF00BEE0 +:100DA000D3E743F2102243F2841140F2A713C0F2BA +:100DB0000002C0F200010020FFF706FFFFF74CFF22 +:100DC000FFF764FFFFF72EFF43F2A4110122C0F2E8 +:100DD00000010020FFF7F8FE00BEC3E7F0B5DE46D5 +:100DE00057464E4645460023E0B58FB004AC200080 +:100DF000049301F087FC6278E3780192A27842F6CE +:100E0000B421009242F6B022C0F20001C0F200020A +:100E10000020FFF7D9FE42F68C410020C0F200010D +:100E2000FFF7D2FE43F2842140F23850C0F20001B5 +:100E3000C2F2000000F05EFB0400002800D07BE15D +:100E400043F2682140F25C50C0F20001C2F200009F +:100E500001F09CFA0400002800D0C2E143F27021A6 +:100E600040F26450C0F20001C2F2000001F06AF9E1 +:100E70000400002800D097E140F26450C2F2000064 +:100E800001F0D6F90400002800D06EE143F2682397 +:100E900040F24C4440F24D4940F24E45C0F200034E +:100EA0000393C2F2000407AFC2F20009C2F20005C8 +:100EB000039B00261B789A462378002BFCD042F631 +:100EC00034710020C0F200012670FFF77DFE40F271 +:100ED00005230822C0F20343002109A807930596C1 +:100EE00006967E6001F051FD0020FFF7E9FE4B46BB +:100EF0001E7053462E70012B00D1B3E0023B012B34 +:100F000000D9CEE0042340F25C500B934FF6FF7300 +:100F100005AA0BA9C2F200000C930D9701F0D8FAB4 +:100F20008046002800D0B2E0039A02AB9B89527839 +:100F300059BA002A00D0C6E040F2060B4FF6FF7106 +:100F4000BB8040F25C50C2F2000001F05FFA8046C4 +:100F5000002856D140F238505A463900C2F20000FB +:100F600000F03CFA8046002800D095E040F238506E +:100F70005A4609A9C2F2000000F022FA8046002871 +:100F800000D0B8E001235B4203E0013B002B00D11D +:100F90009FE02A78002AF8D04A461278002AF4D036 +:100FA00040F25C5006A9C2F2000001F063FA8046EC +:100FB000002800D0A4E040F25C50C2F2000001F032 +:100FC000D1F98046002800D09FE0069B002B00D07E +:100FD000A0E043F294010020C0F20001FFF7F4FD0D +:100FE0005A46390009A801F0B9FC002800D063E78F +:100FF00043F2B801C0F20001FFF7E6FDFFF792FEF1 +:101000005AE742F69873C0F2000342F6E81242F63D +:101010007021C0F20002C0F200010020FFF7D4FDF1 +:101020000120FFF74DFE43F2141342F6DC1242F6A4 +:101030007021C0F20003C0F20002C0F200010020E3 +:10104000FFF7C2FDFFF708FEFFF720FEFFF7EAFDFE +:1010500043F2A4114246C0F200010020FFF7B4FDA4 +:1010600000BE25E7042340F25C500B9305AAFB3336 +:101070000BA9C2F200000C930D9701F029FA8046EB +:1010800028B9059B40F2050B3B71FF2159E742F659 +:101090007873C0F20003B8E742F6B873C0F20003F9 +:1010A000B3E742F64C7342F6E81242F67021C0F202 +:1010B0000003C0F20002C0F200010020FFF784FD2F +:1010C00040F20608ACE7B98040F2060B4FF6FF711C +:1010D00037E742F6F87342F6E81242F67021C0F2A2 +:1010E0000003C0F20002C0F200010020FFF76CFD17 +:1010F00040F2140894E742F6D873C0F2000384E784 +:1011000043F24803C0F200037FE743F27003C0F2EA +:1011100000037AE743F2EC0342F6E81242F670214C +:10112000C0F20003C0F20002C0F200010020FFF78D +:101130004BFD40F2120873E742F6AC6342F6DC1254 +:1011400042F67021C0F20003C0F20002C0F20001BA +:101150000020FFF739FD43F2A4112200C0F2000184 +:101160000020FFF731FD00BE6AE6FFF775FDFFF7CF +:101170008DFDFFF757FD42F60C7342F6DC1242F686 +:101180007021C0F20003C0F20002C0F20001002092 +:10119000FFF71AFD43F2A4112200C0F20001002063 +:1011A000FFF712FD00BE71E6FFF756FDFFF76EFD7B +:1011B00042F6E86342F6DC1242F67021C0F2000308 +:1011C000C0F20002C0F200010020FFF7FDFC43F274 +:1011D000A4112200C0F200010020FFF7F5FC00BEC0 +:1011E0004AE6FFF753FD42F6CC6342F6DC1242F6C4 +:1011F0007021C0F20003C0F20002C0F20001002022 +:10120000FFF7E2FC43F2A4112200C0F2000100202B +:10121000FFF7DAFC00BE21E610B5022800D010BDB1 +:1012200043F2B42140F23050C0F20001C2F200009B +:1012300000F000FFF3E7C04610B5FFF7CFFD002038 +:1012400010BDC046F0B51F260125D4B22640B540DA +:101250004EF20016C64653092033CEF200069B001C +:1012600000B588469D51BFF34F8FBFF36F8F1300BA +:1012700046F20005C033C4F200059B005E59124FD0 +:101280004EF200113E405E5103252540FF24CEF270 +:1012900000018C46210040F20037ED00A940930880 +:1012A0009B006344DE5992008E43414689010C4005 +:1012B000AC403443DC5140F27853C2F20003D050CA +:1012C00004BC9046F0BDC046FFFFFEFF70B500288D +:1012D00058D044F655134268C5F243339A424FD171 +:1012E00000230521026A43609370C3691F22595687 +:1012F00001231D004C0911408D404EF20011203495 +:10130000CEF20001A4006550BFF34F8FBFF36F8F83 +:101310000B251E00C46965576C091540AE4020348A +:10132000A4006650BFF34F8FBFF36F8F07251E00D9 +:10133000C46965576C091540AE402034A40066505E +:10134000BFF34F8FBFF36F8F0925C46965572A40DC +:101350006C0993402200203292005350BFF34F8F0C +:10136000BFF36F8FC36947F20002187880231B0612 +:10137000C3400020C4F2040211680B43136070BD27 +:101380000720FCE70120FAE710B5A0B199B192B1AE +:1013900044F655134468C5F243339C420DD10323F0 +:1013A000807803400020022B06D111430130084011 +:1013B00010B1032000E0012010BD0720FCE7C0466B +:1013C00070B504000E001500FFF7DEFF18B9A06924 +:1013D00010B96661A56170BD0820FCE770B5040016 +:1013E0000E001500FFF7D0FFA8B92069002800D033 +:1013F0007DE07B22236A99780A409A7022785AB15C +:10140000E2692561D269E660527A012A21D0802101 +:101410009A780A439A7070BDA1788A07920FAD1A24 +:10142000B218E260E2692561D269527A012A58D085 +:1014300080249A7822439A7003220A40022A02D01A +:101440003278DA70E7E74FF6006132880A43DA81D2 +:10145000E1E74FF6FF7221899142D8D0EFF3108572 +:10146000012383F3108840F27453C2F200031A6818 +:1014700032B940F60051C4F20401CA704032CA7059 +:101480001A6801321A6085F31088FF2125892A0A1B +:101490002940120140F6000552180521C4F2040546 +:1014A00092005151EFF31081012282F310881A68E3 +:1014B00012B11A68013A1A601B6833B940F600523B +:1014C000C4F20402D3708033D37081F31088802576 +:1014D000236A21789A782A439A7000299BD1A178AF +:1014E000AAE74FF6FF7225899542B7D1A0E70820F9 +:1014F00091E7C046F0B54546DE4657464E46E0B554 +:10150000040083B00D00002800D19FE1002900D124 +:101510009CE14B69002B00D198E1CB69002B00D1F5 +:1015200094E15B68002B00D190E144F655134268CA +:10153000C5F243339A4200D196E140F20323097881 +:101540000120CB401840002800D187E16B797F2B28 +:1015500000D97CE1EB797F2B00D978E16B7A7F2B86 +:1015600000D974E10B22AA56002A00DA6FE143F693 +:101570000003C0F20023CB185B012362002900D1D5 +:101580006FE10023237003210120A378E5618B43E1 +:101590000343A3706B78022B04D1A3788B43022101 +:1015A0000B43A370A97A2000FFF74CFE052229798E +:1015B000AA562000FFF746FE0722A979AA56200066 +:1015C000FFF740FE0922297AAA562000FFF73AFECB +:1015D000802147F2000328780906C140C4F20403C1 +:1015E0001A68E7698A431A600022236A9A701A719E +:1015F0005A729A72DA725A834032DA743A3A1A7725 +:101600002278A2B1F969013A097A1140080240F63C +:10161000007101404FF6FF70120302401143012296 +:10162000114306220A439A829A8A9142FCD1AA78EF +:10163000E9781201C9000A436978012900D11EE145 +:101640000239481E8141102049420140E231D2B2A4 +:101650001A709971E969FF2600910A7B0D000192C9 +:101660005200D2B25A734A7888782021D2014001C0 +:10167000014032400A430021197229788A46023912 +:10168000012900D8F2E00326D2B2DA71009A51683B +:101690008A7848785A701A783040B24302431A70F8 +:1016A000CA7859369A74D8790A78B04332400243DE +:1016B000DA710022E26022616261A2610522BA56FB +:1016C00046F200011000C030C4F20001800046580C +:1016D0006E4D40F2C0092E4046501F263000A846ED +:1016E0000125104085404EF20010CEF200008446E5 +:1016F00052099200624440F2801C60461550156009 +:101700000B22BA5691444846800081464058050055 +:10171000404605404846455035001540A94601253C +:10172000484685404EF20010CEF2000083466046E7 +:10173000520992005A4415501560072240F2C00920 +:10174000BA569144484680008146405805004046BC +:1017500005404846455035001540A94601254846F4 +:1017600085404EF20010CEF20000834660465209DA +:1017700092005A44155015600922BA564546170082 +:10178000C037BF0078581640054001207D50B0405A +:101790006146520992005A4450501060514603224B +:1017A0000A4070210A439A7001234FF6FF725B4290 +:1017B000009923814B89934241D023814B7A022B9C +:1017C00061D00420012B02D0CBBB019BBBB3EFF354 +:1017D0001081012383F3108840F27453C2F2000396 +:1017E0001A6832B940F60055C4F20405EA70403276 +:1017F000EA701A6801321A6081F31088FF21258986 +:1018000029402A0A40F6000512015218C4F20405C4 +:1018100092005051EFF31082012181F31088196872 +:1018200011B11968013919601B6833B940F60051CC +:10183000C4F20401CB708033CB7082F3108844F67D +:101840005513C5F243336360002000E0012003B06C +:101850003CBC90469946A246AB46F0BD40F27A5059 +:10186000F5E7102323708EE60E20F0E751465E70F8 +:10187000022901D10E310A43D2B2DA7119E73F31A0 +:101880000A43B231E3E60520A1E7C046FFFFFEFFB1 +:10189000F0B5CE46474680B585B0EFF30383103BE5 +:1018A0005BB21A0046F20001C032C4F2000192009D +:1018B0005058394C9B002040505040F27852C2F2B0 +:1018C00000029B58D8691A69016929B1E2B105B0D3 +:1018D0000CBC90469946F0BD1C6AB2B119789D784F +:1018E0008C46AF07D968BF0FCE19B1466646D21BEA +:1018F000FEB903273D40022D3FD00978E1704946EB +:101900001A61D960002AE2D11C6A7F22A1780A40BC +:1019100004210A43A2700022DA6003780292009345 +:101920006A46802313718369039343696846984725 +:10193000CDE70D8819490D43ADB2E5814D461A61D9 +:10194000DD60E58AED04ED0E654511D288460AB9E1 +:101950001DE0DAB14946464609880135314389B26E +:10196000E181D21BB9446545F3D349461A61D96078 +:101970007F21257929402171A8E74FF60065098864 +:101980002943E18149461A61D9609FE71A612179AB +:101990007F320A402271B8E7FFFFFEFF00FEFFFF23 +:1019A000F0B587B0EFF30383103B5BB21A0046F249 +:1019B0000001C0329200C4F200015058574C9B0005 +:1019C0002040505040F27852C2F200029C58E36925 +:1019D000DA69527A4ABB4FF6FF722189914224D0CC +:1019E000EFF31081012383F3108840F27453C2F2A5 +:1019F00000031A6832B940F60050C4F20400C27005 +:101A00004032C2701A6801321A6081F31088FF22D6 +:101A100021890B0A0A401B0140F600019B18052290 +:101A20009B00C4F204015A50E369032740F2FF16F9 +:101A30001A789B6902AD02922178226AEB60002934 +:101A400049D0D38ADB06A3B1138A33400193A3693B +:101A5000002B49D104332B71019B2800AB60E36953 +:101A60005B699847217831B1226AD38ADB06002B63 +:101A7000E5D1BE231371E369DB695B7A4BBB4FF69B +:101A8000FF7322899A4224D0FF21130A1B010A40C6 +:101A900040F600019B180422C4F204019B005A5036 +:101AA000EFF31082012383F3108840F27453C2F2E3 +:101AB0000003196811B11968013919601B6833B93D +:101AC00040F60051C4F20401CB708033CB7082F336 +:101AD000108807B0F0BDA3783B40022BB4D05379F7 +:101AE0000193A369002BB5D0A27801A99207920FA8 +:101AF000606900F041FFA37862699B079B0FD218D1 +:101B00006261A269D31AA361002BABD1AB60013330 +:101B10002B71E36928005B699847A3E7FFFFFEFF8D +:101B200070B584B0EFF3038440F27853103C64B294 +:101B3000A200C2F20003D5587B22296AEB698E7895 +:101B4000187832408A7000226946029202320A7185 +:101B50009A69009003925B696846984746F20003D1 +:101B6000C034C4F20003A400E25824490A40E25001 +:101B7000EB69DB695B7A012B01D004B070BD4FF6D5 +:101B8000FF7229899142F8D0EFF3108183F3108816 +:101B900040F27453C2F200031A6832B940F60050A2 +:101BA000C4F20400C2704032C2701A6801321A6076 +:101BB00081F31088FF212889020A0140120140F6B2 +:101BC000000052180421C4F2040092001150EFF3F7 +:101BD0001082033981F31088196811B1196801392D +:101BE00019601B6833B940F60051C4F20401CB7090 +:101BF0008033CB7082F31088BFE7C046FFFFFEFF43 +:101C0000F0B585B0EFF3038440F27853103C64B232 +:101C1000C2F20003A200D7580021FD6910226846D5 +:101C20002E7800F0B2FE3A783B6A2ABBB9780332CC +:101C30000A40022A20D038216F4658791A79C0B25A +:101C4000D2B211403971D20622D438211A790096C5 +:101C50008A431A71AB690290039368466B6998478F +:101C600046F20003C034C4F20003A400E2580C4959 +:101C70000A40E25005B0F0BD40F2FF1038216F4637 +:101C80001A8A10401A79D2B211403971D206DCD5C5 +:101C90001A7FD207D9D4402211433971D5E7C04603 +:101CA000FFFFFEFF60B145F254230268C5F24F0307 +:101CB0009A4203D100230360002070470720FCE70D +:101CC0000120FAE730B140F20013C0F200130360C4 +:101CD000002070470120FCE70620704710B5B8B11E +:101CE00045F254240368C5F24F04A34212D17AB1DD +:101CF000FF200B0A014040F600001B015B18C4F2F4 +:101D000004009B001B5800209B07DB0F137010BDC5 +:101D10000120FCE70720FAE790B145F25423006860 +:101D2000C5F24F0398420DD152B10023C4F204030F +:101D30009C460020090A490161444B6813807047A2 +:101D40000120FCE70720FAE710B5D0B145F2542492 +:101D50000068C5F24F04A0420FD183B10020C4F245 +:101D6000040084461800904300041A4002430020F7 +:101D7000090A490161448A6010BD0720FCE703207D +:101D8000FAE70120F8E7C04600B345F254230068A3 +:101D9000C5F24F03984213D1012A15D8FF23012021 +:101DA0000B4098404FF6FF7303405AB10022C4F233 +:101DB000040294460020090A490161448B6070477F +:101DC0000720FCE70304F1E70320F8E70120F6E72A +:101DD00010B5E0B145F254240068C5F24F04A042AA +:101DE00011D193B10020C4F2040084461000090A06 +:101DF000490161440C681840204380B293439843E2 +:101E00000860002010BD0720FCE70320FAE701204E +:101E1000F8E7C046B0B145F254230068C5F24F035D +:101E2000984211D172B1090A4B1E032B0ED8002320 +:101E3000C4F204039C460020490161444B681B0C1A +:101E4000138070470120FCE70720FAE70320F8E73A +:101E500010B500B345F254230068C5F24F03984211 +:101E60001BD1C2B10B0A581E03281BD80020C4F294 +:101E700004008446FF200140FE3804008C405B01D2 +:101E800063445B68A1B21B0C0B40994207D000234E +:101E90000020137010BD0120FCE70720FAE7107046 +:101EA0000020F7E70320F5E710B5E8B145F2542428 +:101EB0000068C5F24F04A04214D18BB1090A481E34 +:101EC00003280DD80020C4F2040084461800904373 +:101ED00000041A400243002049016144CA6010BD59 +:101EE0000320FCE70720FAE70120F8E700282BD0C1 +:101EF00045F254230068C5F24F0398421BD1012AD2 +:101F000017D8080A431E032B13D8FF231940FE3BA2 +:101F10008B400021C4F204018C4640016044012A38 +:101F20000BD0C2681B0413431B0C1B04C3600020AE +:101F300000E0032070470720FCE74FF6FF72C168FE +:101F400013400B431340F1E70120F3E7F0B5DE4601 +:101F500057464E464546E0B583B0EFF31082012365 +:101F600083F3108840F27453C2F2000301931B689C +:101F700033B940F60054C4F20404E3704033E37014 +:101F8000019C23680133236082F31088038883B3A4 +:101F90000B6840F600049846254B002240F2FF0CE7 +:101FA0009946C4F20404D10041448E888025330A46 +:101FB0009A4663461E40534609686D021B0129423A +:101FC0000FD04F469D19AD00AA462D593D40AB4656 +:101FD00055465F462F514D460D40AB4655465F4630 +:101FE0002F519B199B0019510132038892B29342E1 +:101FF000D9D8EFF31082012383F31088019B1B686B +:102000001BB101990B68013B0B60019B1B6833B945 +:1020100040F60051C4F20401CB708033CB7082F3E0 +:10202000108803B03CBC90469946A246AB46F0BD32 +:10203000FFFFFEFF10B50B0080B179B14A686AB1AD +:1020400045F254220168C5F24F02914208D0026065 +:10205000191D1800FFF77AFF002010BD0120FCE7D2 +:102060000E20FAE710B50B0078B145F25422016852 +:10207000C5F24F0291420AD13BB15A682AB1180009 +:10208000191DFFF763FF002010BD0120FCE70720AA +:10209000FAE7C046F0B5002850D045F25423006856 +:1020A000C5F24F03984247D1EFF31085012383F324 +:1020B000108840F27453C2F20003186830B940F639 +:1020C0000054C4F20404E0704030E0701C68013435 +:1020D0001C6085F31088FF24080A00012140D40306 +:1020E0000BD540F600054418C4F20405A400675956 +:1020F000134E374016406751665140F600044018B1 +:10210000C4F2040480000251EFF31082012181F334 +:102110001088196811B11968013919601B681BB161 +:1021200082F310880020F0BD40F60051C4F2040193 +:10213000CB708033CB70F3E70720F4E70120F2E7A0 +:10214000FFFFFEFFF0B5D6464F464646C0B5002815 +:1021500064D044F255330268C0F249039A4262D017 +:1021600000295BD0FF230A78D340DB0758D58B6862 +:1021700013B14C78FF2C58D002254D5746F200067B +:10218000AC00A44640F2003440F20009C4F200065C +:10219000664437590571B8464F4637518360CB685E +:1021A00046F20007C3604B46B246C4F200074271D4 +:1021B000BB540B79CE781B0133434E79DBB2F60169 +:1021C0003343DBB2BB54434652461351002D1ADB56 +:1021D0004EF20013CEF2000398460323AA081D40D6 +:1021E0004B78FF21ED009B010B40A940AB409200D2 +:1021F000424416598E433343135140F2785362469A +:10220000C2F20003D05044F25533C0F249030360D8 +:1022100000201CBC90469946A246F0BD0120F8E77C +:1022200040F27A50F5E70E20F3E70320F1E7C046CD +:1022300010B500282BD044F255330268C0F2490390 +:102240009A4220D10423C356002B1EDB1A0046F20B +:102250000001C032C4F20001920050580D4C2040E1 +:1022600050501F21012219408A404EF20011CEF237 +:1022700000018C4640F2801100205B099B00634402 +:102280005A501A6010BD0720FCE70B20FAE7012026 +:10229000F8E7C046FFFFFEFF002829D044F255337F +:1022A0000268C0F249039A4220D104228256002AD1 +:1022B00018DB1F215309114001228A404EF2001100 +:1022C0002033CEF200019B005A50BFF34F8FBFF373 +:1022D0006F8F042240F2785300218256C2F200032D +:1022E0009200D15000230360002070470720FCE7D4 +:1022F0000120FAE770B582B0EFF3038440F278531F +:10230000103C64B2C2F20003A200D15846F20002AF +:102310004879C4F20002135C8D689B079B0F032B66 +:102320000DD0C034A400A3580D4E3340A35025B1A6 +:10233000CB68019000936846A84702B070BD25B1F4 +:10234000CB68019000936846A84746F20003C0346A +:10235000C4F20003A400E25801490A40E250ECE74D +:10236000FFFFFEFF80B145F243230268C0F2430342 +:102370009A4207D144F2000300220020C4F207036E +:102380005A7070470720FCE70120FAE708B301B351 +:1023900045F243230268C0F243039A421BD0036014 +:1023A00047F2000341600220C4F204035A688243EA +:1023B0005A604B780A789B01DBB2134380221343A7 +:1023C00044F20002C4F2070213700023002053708D +:1023D00070470120FCE70E20FAE7C046A0B145F2A5 +:1023E00043230268C0F243039A420BD147F2000331 +:1023F0000221C4F204035A680A435A6000230360AE +:10240000002070470720FCE70120FAE730B50028DC +:102410002DD045F243230268C0F243039A421ED1F5 +:1024200040234468FF2562885001034044F20000C5 +:102430002A40C4F2070082812278012A04D082B1A6 +:102440004FF6FF75032A0CD80D4085608022134398 +:1024500044F200020020C4F20702537030BD07208E +:10246000FCE744F20002C4F207029160EEE70120AB +:10247000F4E7C046C8B1C1B145F243230268C0F2D7 +:1024800043039A420FD143681B78012B0FD0BBB195 +:10249000032B15D844F20003C4F207031B89002064 +:1024A0009BB20B6000E0072070470120FCE744F27C +:1024B0000003C4F207031B7A0020DBB20B60F3E7D2 +:1024C00044F20003C4F207039B6800200B60EBE7B3 +:1024D000F0B500283ED08B68002B3BD0002A39D0C5 +:1024E0000C68002C38D045F243260768C0F243063A +:1024F0000725B7422CD14E6841680D78012D33D0A5 +:10250000002D2BD0032D29D84FF6FF710E4044F239 +:102510000001C4F207018E60691E02292BD9A408AC +:10252000A00018183CB144F20004C4F2070402CB26 +:1025300061608342FBD1012D2ED03DB3032D25D800 +:1025400044F20003C4F207031B899BB20025136009 +:102550002800F0BD0125FBE70325F9E744F200015F +:10256000C4F207018E60D7E7FF210E4044F200015C +:10257000C4F207018E6044F200001C19C4F2070087 +:10258000197801330171A342FAD1D4E744F2000370 +:10259000C4F207039B68D9E744F20003C4F20703BF +:1025A0001B7ADBB2D2E7C0464EF20003A022C4F28F +:1025B00001039A5C824217D036229A5C1AB93C21F8 +:1025C0005A5CD207FCD54EF20002A021C4F20102EF +:1025D000535CDB06FCD450544EF20002A021C4F23E +:1025E0000102535CDB06FCD47047C0464EF2000388 +:1025F000262240F20C01C4F20103985C1B6A8000A1 +:10260000C2F2000141585B015B0F40F28442D940A5 +:10261000C2F20002116070474EF2000340F2FE3237 +:102620003649C4F2010370B599524CF2000140F2F0 +:1026300000100024C4F201010C5240F20C0446F6D2 +:102640000041C2F20004C0F2DC21216041F200210D +:10265000C0F27A01616048F2000142F20040A160DC +:102660002161002240F21341C0F2F400E0605A54AC +:102670000920A221585440F28041585C18B140F220 +:1026800081401A545A540020FFF78EFF4EF2000387 +:1026900000213622C4F2010399543C315A5CD2071E +:1026A000FCD50125312200219D540B3A995401316A +:1026B000FF31C1F200011962985C1A6A800020584B +:1026C0005201520F40F28441D04040F2FE32C2F239 +:1026D000000108600A4999524CF2000240F20413CA +:1026E00040F20411C4F20102D552535A002BFCD11E +:1026F00001210133FF33D15270BDC04603A5FFFF56 +:1027000000A5FFFF20B180231B030360002070475A +:102710000120FCE701380028FCD1704740F28442D8 +:102720004CF600234143C2F2000270B51468C3F6B0 +:102730009A330D00B3FBF4F4080040F2E8320023B2 +:10274000002100F0DFF831B9B0FBF4F0800808B1E7 +:10275000FFF7E0FF70BDA400B5FBF4F040F2E832F3 +:102760000023002100F0CEF80029F0D001204042E3 +:10277000FFF7D0FFEEE7C046F8B546F2000340F29F +:10278000401240F2504700240126C4F200039D5A33 +:10279000C2F20007ADB22B00E340E0B21E4203D00C +:1027A000A300DB5903B1984701340D2CF3D146F255 +:1027B000000340F23012C4F200039D52F8BDC0463F +:1027C00046F200000023C4F2000043F2F422C0F2FB +:1027D00000029A1811781A00C03292000133115089 +:1027E000202BF2D17047C04600BE704710B500F0F4 +:1027F00003F8FEF721FDFEE770B5002082B0FEF77A +:102800000BFD0024FFF708FF6B46DC71DA1DDB7956 +:1028100047F20003C4F204035968374840F2040544 +:10282000014040F600005960C4F204000168C2F2A1 +:102830000005C907C90F11700168C907C90F1170D8 +:1028400001680120C907C90F11708022596852051B +:102850000A435A60FEF7E0FC40F2F85240F22000D2 +:10286000C2F20002C2F20000121A002100F08DF83C +:1028700040F2000040F20C0243F26031C2F200006C +:10288000C2F20002121AC0F2000100F075F840F620 +:1028900000531A4AC4F200039C801A8040F6F812D2 +:1028A000C2F200029A6040F6F852C2F20002DA6008 +:1028B00046F2000240F2201141F20000C4F2000290 +:1028C000505201229A80FFF791FE0220FEF7A4FCED +:1028D00040F20803C2F200035B1B9E10002B04DDD4 +:1028E00008CD01349847A642FADCFFF769FF0020C3 +:1028F00000F006F802B070BDFFFFFFEF00A5FFFF7C +:102900007047C046F0B54FF6FF75CE4647462C00DF +:10291000154080B52F000440160C9946030C5D430A +:102920006743734366433C0C7619A4199C46A54241 +:1029300003D980235B029846C4444B464FF6FF768A +:1029400043435143250C374065442404E4195B1983 +:10295000591820000CBC90469946F0BD30B50024B3 +:102960000139A24201D1002005E0035D01340D5D73 +:10297000AB42F6D0581B30BD002310B59A4200D1AF +:1029800010BDCC5CC4540133F8E703001218934225 +:1029900000D1704719700133F9E7FFFFF8B5C04661 +:1029A000F8BC08BC9E467047F8B5C046F8BC08BCE9 +:1029B0009E4670475465726D696E616C0000000040 +:1029C0005254540053454747455200FF303132338B +:1029D00034353637383941424344454668616C5F87 +:1029E000656E74727900FFFF6372635F6F7065726A +:1029F0006174696F6E00FFFF6465696E69745F657D +:102A0000787465726E616C5F697271006465696E7D +:102A100069745F63726300FF6465696E69745F75F2 +:102A2000617274002A2A20525F4352435F436C6FE5 +:102A3000736520415049204641494C4544202A2A8B +:102A40000D0A00FF2A2A20525F4943555F457874DA +:102A500065726E616C497271436C6F736520415091 +:102A600049204641494C4544202A2A0D0A000000CD +:102A70005B4552525D20496E2046756E6374696FE6 +:102A80006E3A20257328292C202573002A2A2052EB +:102A90005F5343495F554152545F436C6F736520E8 +:102AA000415049204641494C4544202A2A0D0A00FC +:102AB000312E30000D0A2A2A2A2A2A2A2A2A2A2ACC +:102AC0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A66 +:102AD0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A56 +:102AE0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A46 +:102AF0002A2A2A2A2A2A2A2A0D0A2A20202052652E +:102B00006E6573617320465350204578616D706C1B +:102B1000652050726F6A65637420666F7220725F01 +:102B2000637263204D6F64756C6520202020202027 +:102B300020202020202020202020202A0D0A2A20AA +:102B400020204578616D706C652050726F6A6563F6 +:102B5000742056657273696F6E20257320202020C3 +:102B60002020202020202020202020202020202065 +:102B700020202020202020202020202020202A0D5E +:102B80000A2A202020466C657820536F667477618E +:102B90007265205061636B2056657273696F6E2099 +:102BA0002025642E25642E2564202020202020202E +:102BB0002020202020202020202020202020202015 +:102BC00020202020202A0D0A2A2A2A2A2A2A2A2AD4 +:102BD0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A55 +:102BE0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A45 +:102BF0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A35 +:102C00002A2A2A2A2A2A2A2A2A2A0D0A5265666587 +:102C10007220746F20726561646D652E7478742003 +:102C200066696C6520666F72206D6F7265206465E1 +:102C30007461696C73206F6E204578616D706C658E +:102C40002050726F6A65637420616E640D0A46538A +:102C50005020557365722773204D616E75616C202D +:102C6000666F72206D6F726520696E666F726D613E +:102C700074696F6E2061626F757420725F63726336 +:102C8000206472697665720D0A0000000D0A5468AE +:102C90006973204578616D706C652050726F6A654C +:102CA00063742064656D6F6E7374726174657320F4 +:102CB000435243206F7065726174696F6E20666F56 +:102CC00072207472616E736D697373696F6E0D0A31 +:102CD000696E206E6F726D616C206D6F646520612E +:102CE0006E6420726563657074696F6E20696E2012 +:102CF000736E6F6F70206D6F64652E204F6E207045 +:102D000072657373696E6720757365720D0A7075ED +:102D100073682D627574746F6E2C20435243207655 +:102D2000616C756520696E206E6F726D616C206DCF +:102D30006F64652069732063616C63756C61746591 +:102D40006420666F7220342062797465730D0A6F97 +:102D50006620646174612E205468652063616C6331 +:102D6000756C61746564204352432076616C7565AF +:102D700020616C6F6E6720776974682074686520C5 +:102D8000646174612069730D0A7472616E732D72CF +:102D900065636569766564206F6E207363695F752E +:102DA000617274207468726F756768206C6F6F70E1 +:102DB0002D6261636B2E0D0A0D0A496620746865E9 +:102DC000204352432076616C756520666F722073D4 +:102DD0006E6F6F70206D6F6465206973207A657205 +:102DE0006F20616E64207472616E736D697420610E +:102DF0006E6420726563656976650D0A6275666644 +:102E000065722061726520657175616C20746865FA +:102E10006E204F6E2D626F617264204C45442062BB +:102E20006C696E6B206173207369676E206F66201A +:102E30007375636365737366756C0D0A4352432043 +:102E40006F7065726174696F6E2E204F6E20612005 +:102E500064617461206D69736D617463682C204CCA +:102E60004544207374617973204F4E2E204661696A +:102E70006C757265206D657373616765730D0A61AA +:102E80006E64207374617475732069732064697350 +:102E9000706C61796564206F6E2052545456696578 +:102EA0007765722E0D0A0A0A00000000525F534334 +:102EB000495F556172745F4F70656E2041504920C3 +:102EC0004641494C4544200D0A000000525F4352E0 +:102ED000435F4F70656E20415049204641494C4543 +:102EE00044200D0A00000000525F4943555F4578B9 +:102EF0007465726E616C4972714F70656E204150DD +:102F000049204641494C4544200D0A00525F49433F +:102F1000555F45787465726E616C497271456E617A +:102F2000626C6520415049204641494C4544200D82 +:102F30000A0000000D0A537461727420435243204A +:102F40004F7065726174696F6E0D0A00554E53556E +:102F500050504F525445442043524320504F4C59F7 +:102F60004E4F4D49414C2053454C454345435445F4 +:102F700044200D0A00000000525F4352435F43614A +:102F80006C63756C61746520415049204641494C21 +:102F90004544200D0A000000525F4352435F536EC8 +:102FA0006F6F70456E61626C6520415049204641EB +:102FB000494C4544200D0A00525F5343495F554137 +:102FC00052545F5772697465204150492046414907 +:102FD0004C4544200D0A0000525F5343495F554160 +:102FE00052545F5265616420415049204641494C2A +:102FF0004544200D0A000000202A2A2055617274E1 +:1030000020747820616E64207278206576656E7415 +:1030100073206E6F742072656365697665642064E1 +:103020007572696E67207561727420777269746554 +:10303000206F722072656164206F706572617469BF +:103040006F6E202A2A0D0D00525F4352435F436189 +:103050006C63756C6174656456616C756547657405 +:1030600020415049204641494C4544200D0A00006A +:10307000525F4352435F536E6F6F70446973616276 +:103080006C6520415049204641494C4544200D0A79 +:10309000000000000D0A435243204F7065726174B6 +:1030A000696F6E20697320737563636573736675EA +:1030B0006C2E20200D0A000055617274207472611C +:1030C0006E736D697474656420616E6420726563EB +:1030D00065697665642064617461207375636365F6 +:1030E000737366756C6C792E200D0A00554152542D +:1030F000206C6F6F702D6261636B207472616E73F0 +:103100006D697373696F6E206572726F72200D0A3C +:10311000000000000D0A202A2A20435243206F702D +:1031200065726174696F6E206661696C6564202ADE +:103130002A200D0A00FFFFFF525F494F504F5254A3 +:103140005F50696E577269746528675F696F706F49 +:1031500072742E705F6374726C2C675F6273705F41 +:103160006C6564732E705F6C6564735B5245534588 +:10317000545F56414C55455D2C20625F76616C75FD +:1031800065290000257320415049206661696C65FE +:1031900064206174204C696E65206E756D62657285 +:1031A000202564000D0A52657475726E65642045B1 +:1031B00072726F7220436F64653A203078257820F0 +:1031C000200D0A00525F494F504F52545F50696EB4 +:1031D000577269746528675F696F706F72742E70BB +:1031E0005F6374726C2C675F6273705F6C6564738D +:1031F0002E705F6C6564735B52455345545F564156 +:103200004C55455D2C204C45445F4F4E2900000035 +:10321000525F494F504F52545F50696E57726974F4 +:103220006528675F696F706F72742E705F63747268 +:103230006C2C675F6273705F6C6564732E705F6C7B +:103240006564735B52455345545F56414C55455D2B +:103250002C204C45445F4F46462900003005002095 +:10326000B4320000143300000101310000000000FE +:1032700006020401030100000D0C00000000000024 +:10328000000000000100000002000201020202032F +:103290000000000000000000E50B0000000000003E +:1032A000A432000000010000000000200100FFFF28 +:1032B0000000000007000000BC3200000000010018 +:1032C00008010000000000000102000004000000EE +:1032D000050200000040000006020000000001009E +:1032E00000030000000001050A04000000000105C1 +:1032F0000B0400007778797A0700000000000000D6 +:1033000000000000000000000000000000000000BD +:103310000000000035200000A51C00006520000012 +:1033200095200000511E0000ED1E0000D91C000079 +:10333000DD1C0000891D0000D11D0000151E0000CD +:10334000A91E0000191D0000491D0000C51C000039 +:1033500001000000583300000502FFFF00000000DC +:0C33600040000C002D05000001050000DD +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:04000003000027EDE5 +:00000001FF diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..0433bd81f6 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/ra_cfg.txt @@ -0,0 +1,213 @@ +RA Configuration + Board "EK-RA2A1 " + R7FA2A1AB3CFM + part_number: R7FA2A1AB3CFM + rom_size_bytes: 262144 + ram_size_bytes: 32768 + data_flash_size_bytes: 8192 + package_style: LQFP + package_pins: 64 + + RA2A1 + series: 2 + + RA2A1 Family + OFS0 register settings: Independent WDT: Start Mode: IWDT is Disabled + OFS0 register settings: Independent WDT: Timeout Period: 2048 cycles + OFS0 register settings: Independent WDT: Dedicated Clock Frequency Divisor: 128 + OFS0 register settings: Independent WDT: Window End Position: 0% (no window end position) + OFS0 register settings: Independent WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: Independent WDT: Reset Interrupt Request Select: Reset is enabled + OFS0 register settings: Independent WDT: Stop Control: Stop counting when in Sleep, Snooze mode, or Software Standby + OFS0 register settings: WDT: Start Mode Select: Stop WDT after a reset (register-start mode) + OFS0 register settings: WDT: Timeout Period: 16384 cycles + OFS0 register settings: WDT: Clock Frequency Division Ratio: 128 + OFS0 register settings: WDT: Window End Position: 0% (no window end position) + OFS0 register settings: WDT: Window Start Position: 100% (no window start position) + OFS0 register settings: WDT: Reset Interrupt Request: Reset + OFS0 register settings: WDT: Stop Control: Stop counting when entering Sleep mode + OFS1 register settings: Voltage Detection 0 Circuit Start: Voltage monitor 0 reset is disabled after reset + OFS1 register settings: Voltage Detection 0 Level: 1.90 V + OFS1 register settings: HOCO Oscillation Enable: HOCO oscillation is enabled after reset + Use Low Voltage Mode: Disable + MPU: Enable or disable PC Region 0: Disabled + MPU: PC0 Start: 0x000FFFFC + MPU: PC0 End: 0x000FFFFF + MPU: Enable or disable PC Region 1: Disabled + MPU: PC1 Start: 0x000FFFFC + MPU: PC1 End: 0x000FFFFF + MPU: Enable or disable Memory Region 0: Disabled + MPU: Memory Region 0 Start: 0x000FFFFC + MPU: Memory Region 0 End: 0x000FFFFF + MPU: Enable or disable Memory Region 1: Disabled + MPU: Memory Region 1 Start: 0x200FFFFC + MPU: Memory Region 1 End: 0x200FFFFF + MPU: Enable or disable Memory Region 2: Disabled + MPU: Memory Region 2 Start: 0x407FFFFC + MPU: Memory Region 2 End: 0x407FFFFF + MPU: Enable or disable Memory Region 3: Disabled + MPU: Memory Region 3 Start: 0x400DFFFC + MPU: Memory Region 3 End: 0x400DFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes) - A minimum of 4K (0x1000) is required if standard library functions are to be used.: 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + Soft Reset: Disabled + PFS Protect: Enabled + Main Oscillator Wait Time: 32768 us + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive: Standard (12.5pf) + Subclock Stabilization Time (ms): 1000 + + Clocks + XTAL 16000000Hz + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + FCLK Div /2 + SDADCCLK Src: HOCO + SDADCCLK Div /12 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + RA2A1-EK.pincfg -> g_bsp_pin_cfg + ADREG 37 SDADC0_ADREG - - - - - - + AVCC0 56 ANALOG0_AVCC0 - - - - - - + AVCC1 39 ANALOG0_AVCC1 - - - - - - + AVSS0 57 ANALOG0_AVSS0 - - - - - - + AVSS1 40 ANALOG0_AVSS1 - - - - - - + P000 63 - - - Disabled - - "AGT1: AGTIO; CTSU0: TS16; GPT4: GTIOCB; ICU0: IRQ04; IIC0: SCL; KINT0: KRM0; SCI9: RXD; SCI9: SCL; SPI1: MISO" + P001 62 - - - Disabled - - "CTSU0: TS15; ICU0: IRQ00; RTC0: RTCOUT; SCI9: CTS; SPI1: RSPCK" + P002 61 - - - Disabled - - "ADC0: AN07; DAC81: DA; OPAMP2: AMP+" + P003 60 - - - Disabled - - "ADC0: AN06; OPAMP2: AMP-" + P012 55 - - - Disabled - - "ADC0: AN08; OPAMP2: AMPO" + P013 54 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN05; DAC80: DA; GPT6: GTIOCB; OPAMP1: AMP+" + P014 53 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN04; ANALOG0: VREFL; GPT6: GTIOCA; OPAMP1: AMP-" + P015 52 - - - Disabled - - "ADC0: AN03; OPAMP1: AMPO" + P100 48 - - - Disabled - - "ACMPHS0: IVCMP; ADC0: AN16; CTSU0: TS23; GPT5: GTIOCB; ICU0: IRQ04; SCI9: SDA; SCI9: TXD; SDADC0: ANSDP0" + P101 47 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN17; CTSU0: TS22; GPT5: GTIOCA; ICU0: IRQ05; SCI9: RXD; SCI9: SCL; SDADC0: ANSDN0" + P102 46 - - - Disabled - - "ADC0: AN18; CTSU0: TS21; GPT6: GTIOCB; SCI9: CTS; SDADC0: ANSDP1; SPI1: SSL0" + P103 45 - - - Disabled - - "ADC0: AN19; CTSU0: TS20; GPT6: GTIOCA; SDADC0: ANSDN1; SPI1: RSPCK" + P104 44 - - - Disabled - - "ADC0: AN20; CTSU0: TS19; ICU0: IRQ06; SDADC0: ANSDP2; SPI1: MISO" + P105 43 - - - Disabled - - "ADC0: AN21; CTSU0: TS18; ICU0: IRQ07; SDADC0: ANSDN2; SPI1: MOSI" + P106 42 - - - Disabled - - "ADC0: AN22; SDADC0: ANSDP3" + P107 41 - - - Disabled - - "ADC0: AN23; SDADC0: ANSDN3" + P108 33 DEBUG0_SWDIO Low - "Peripheral mode" - None "DEBUG0: SWDIO" + P109 64 - - - Disabled - - "ACMP(0-1): VCOUT; ACMPLP0: CMPREF; ADC0: ADTRG; AGT0: AGTOA; CTSU0: TS17; GPT_POEG1: GTETRG; GPT1: GTIOCB; ICU0: IRQ03; IIC1: SCL; KINT0: KRM1; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P110 34 - - - Disabled - - "ACMPLP1: CMPREF; ADC0: ADTRG; AGT0: AGTOB; CAN0: CTX; CGC0: CLKOUT; CTSU0: TSCAP; GPT_OPS0: GTOWLO; GPT2: GTIOCB; ICU0: IRQ02; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI9: RXD; SCI9: SCL; SPI0: RSPCK" + P111 35 - - - Disabled - - "CTSU0: TS14; ICU0: IRQ06; IIC1: SCL; RTC0: RTCOUT; SPI0: RSPCK" + P112 36 - - - Disabled - - "CGC0: CLKOUT; CTSU0: TSCAP; ICU0: IRQ07; IIC1: SDA; SPI0: SSL0" + P200 27 - - - Disabled - - "ICU0: NMI" + P201 26 GPIO - - "Input mode" - None "SYSTEM0: MD" + P204 24 - - - Disabled - - "CTSU0: TS09; SCI0: RXD; SCI0: SCL; SCI9: SCK; SPI1: MOSI" + P205 23 GPIO Low None "Output mode (Initial Low)" CMOS - "CTSU0: TS08; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ00; IIC1: SDA; SCI0: SDA; SCI0: TXD; SCI1: CTS; SPI1: MISO" + P206 22 GPIO - IRQ06 "Input mode" - None "AGT0: AGTIO; CTSU0: TS07; GPT_OPS0: GTOVUP; GPT3: GTIOCA; ICU0: IRQ06; IIC1: SCL; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI1: SSL0" + P212 10 - - - Disabled - - "AGT0: AGTIO; CGC0: EXTAL; GPT_POEG1: GTETRG; GPT0: GTIOCB; ICU0: IRQ03; SCI1: SDA; SCI1: TXD" + P213 9 - - - Disabled - - "AGT1: AGTEE; CGC0: XTAL; GPT_POEG0: GTETRG; GPT0: GTIOCA; ICU0: IRQ02; SCI1: RXD; SCI1: SCL" + P214 7 - - - Disabled - - "CGC0: XCOUT" + P215 6 - - - Disabled - - "CGC0: XCIN" + P300 32 DEBUG0_SWCLK Low - "Peripheral mode" - None "DEBUG0: SWCLK" + P301 31 - - - Disabled - - "AGT1: AGTOB; CTSU0: TS13; GPT_OPS0: GTOWUP; GPT2: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM4; RTC0: RTCOUT; SCI0: RXD; SCI0: SCL; SCI9: CTS; SPI1: MOSI" + P302 30 - - - Disabled - - "AGT1: AGTOA; CAC0: CACREF; CTSU0: TS12; GPT_OPS0: GTOVLO; GPT3: GTIOCB; ICU0: IRQ04; KINT0: KRM5; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI1: RSPCK" + P303 29 - - - Disabled - - "CAN0: CRX; CTSU0: TS11; GPT6: GTIOCB; KINT0: KRM6; SCI0: CTS; SCI1: SCK; SPI0: MOSI" + P304 28 - - - Disabled - - "CAN0: CTX; CTSU0: TS10; GPT6: GTIOCA; KINT0: KRM7; SCI0: SCK; SCI9: SDA; SCI9: TXD; SPI0: MISO" + P400 1 - - - Disabled - - "ACMPLP0: CMPIN; AGT0: AGTEE; CTSU0: TS00; GPT_POEG0: GTETRG; GPT1: GTIOCA; ICU0: IRQ00; IIC1: SDA; KINT0: KRM2; RTC0: RTCOUT; SCI0: CTS; SCI1: RXD; SCI1: SCL; SPI0: MOSI" + P401 2 - - - Disabled - - "ACMP(0-1): VCOUT; AGT1: AGTEE; CTSU0: TS01; GPT_OPS0: GTIU; GPT4: GTIOCA; ICU0: IRQ05; IIC0: SDA; KINT0: KRM3; SCI0: SCK; SCI9: SCK; SPI1: SSL1" + P402 3 - - - Disabled - - "CTSU0: TS02; GPT_OPS0: GTIV; GPT0: GTIOCA; SCI9: CTS; SPI1: SSL2" + P403 4 - - - Disabled - - "CTSU0: TS03; GPT_OPS0: GTIW; GPT0: GTIOCB; SCI1: SCK; SPI1: SSL3" + P407 16 - - - Disabled - - "AGT0: AGTIO; CAC0: CACREF; CAN0: CTX; CTSU0: TSCAP; GPT_OPS0: GTOULO; GPT0: GTIOCB; ICU0: IRQ01; IIC0: SCL; SCI0: SDA; SCI0: TXD; SCI9: SDA; SCI9: TXD; SPI1: RSPCK; USB_FS0: VBUS; USB_FS0: VBUS" + P408 15 - - - Disabled - - "ACMPLP1: CMPIN; AGT0: AGTO; CAN0: CRX; CTSU0: TS06; GPT_OPS0: GTOUUP; GPT0: GTIOCA; ICU0: IRQ01; IIC0: SDA; SCI0: RXD; SCI0: SCL; SCI1: SDA; SCI1: TXD; SPI0: SSL0" + P409 14 - - - Disabled - - "AGT1: AGTO; CAN0: CTX; CTSU0: TSCAP; GPT0: GTIOCA; ICU0: IRQ07; IIC0: SCL; SCI0: SCK; SCI1: CTS; SPI0: SSL1" + P410 13 SCI1_TXD Low - "Peripheral mode" CMOS None "CTSU0: TS05; GPT5: GTIOCB; SCI0: CTS; SCI1: SDA; SCI1: TXD; SPI0: SSL2" + P411 12 SCI1_RXD Low - "Peripheral mode" CMOS None "CTSU0: TS04; GPT5: GTIOCA; SCI0: SDA; SCI0: TXD; SCI1: RXD; SCI1: SCL; SPI0: SSL3" + P500 49 - - - Disabled - - "ACMPHS0: IVCMP; ACMPHS0: IVREF; ADC0: AN00; CTSU0: TS24; DAC0: DA; GPT5: GTIOCA; ICU0: IRQ03; OPAMP0: AMP+; SCI0: RXD; SCI0: SCL" + P501 50 - - - Disabled - - "ACMPHS0: IVREF; ADC0: AN01; CTSU0: TS25; GPT5: GTIOCB; ICU0: IRQ02; OPAMP0: AMP-; SCI0: SDA; SCI0: TXD" + P502 51 - - - Disabled - - "ADC0: AN02; ICU0: IRQ01; OPAMP0: AMPO; SCI0: CTS" + P914 19 - - - Disabled - - "USB_FS0: DP" + P915 18 - - - Disabled - - "USB_FS0: DM" + RES# 25 SYSTEM0_RES - - - - - - + SBIAS/VREFI 38 SDADC0_SBIAS - - - - - - + VCC 11 SYSTEM0_VCC - - - - - - + VCCUSB 20 USBFS0_VCC - - - - - - + VCCUSBLDO 21 USBFS0_VCCLDO - - - - - - + VCL 5 SYSTEM0_VCL - - - - - - + VREFH - ANALOG0_VREFH - - - - - - + VREFH0 59 ANALOG0_VREFH0 - - - - - - + VREFL0 58 ANALOG0_VREFL0 - - - - - - + VSS 8 SYSTEM0_VSS - - - - - - + VSSUSB 17 USBFS0_VSS - - - - - - + + User Events + + Module "I/O Port Driver on r_ioport" + Parameter Checking: Default (BSP) + + Module "UART Driver on r_sci_uart" + Parameter Checking: Default (BSP) + FIFO Support: Enable + DTC Support: Disable + RS232/RS485 Flow Control Support: Enable + + Module "CRC Driver on r_crc" + Parameter Checking: Default (BSP) + + Module "External IRQ Driver on r_icu" + Parameter Checking: Default (BSP) + + HAL + Instance "g_ioport I/O Port Driver on r_ioport" + Name: g_ioport + Port 1 ELC Trigger Source: Disabled + Port 2 ELC Trigger Source: Disabled + Port 3 ELC Trigger Source: Disabled + Port 4 ELC Trigger Source: Disabled + + Instance "g_uart UART Driver on r_sci_uart" + General: Name: g_uart + General: Channel: 1 + General: Data Bits: 8bits + General: Parity: None + General: Stop Bits: 1bit + Baud: Baud Rate: 115200 + Baud: Enable Baud Rate Modulation: Disabled + Baud: Max Error (%): 5 + Flow Control: CTS/RTS Selection: RTS (CTS is disabled) + Flow Control: UART Communication Mode: RS232 + Flow Control: Pin Control: Disabled + Flow Control: RTS Pin Port: 09 + Flow Control: RTS Pin Pin: 14 + Extra: Clock Source: Internal Clock + Extra: Start bit detection: Falling Edge + Extra: Noise Cancel: Disable + Extra: Receive FIFO Trigger Level: One + Interrupts: Callback: uart_cb + Interrupts: Receive Interrupt Priority: Priority 2 + Interrupts: Transmit Data Empty Interrupt Priority: Priority 2 + Interrupts: Transmit End Interrupt Priority: Priority 2 + Interrupts: Error Interrupt Priority: Priority 2 + + Instance "g_crc CRC Driver on r_crc" + Name: g_crc + CRC Polynomial: CRC-8 + Bit Order: MSB + Snoop Address: SCI1_FRDRL + + Instance "g_external_irq External IRQ Driver on r_icu" + Name: g_external_irq + Channel: 6 + Trigger: Rising + Digital Filtering: Enabled + Digital Filtering Sample Clock (Only valid when Digital Filtering is Enabled): PCLK / 64 + Callback: ext_irq_cb + Pin Interrupt Priority: Priority 2 + diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/script/ra2a1.ld b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/script/ra2a1.ld new file mode 100644 index 0000000000..68bb0c187b --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/script/ra2a1.ld @@ -0,0 +1,267 @@ +/* + Linker File for S124 MCU +*/ + +/* Linker script to configure memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x040000 /* 256K */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x008000 /* 32K */ + DATA_FLASH (rx) : ORIGIN = 0x40100000, LENGTH = 0x0002000 /* 8K */ + + ID_CODE (rx) : ORIGIN = 0x01010018, LENGTH = 0x20 /* 32 bytes */ +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a libnosys.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + __end__ = .; + + /* ROM Registers start at address 0x00000400 */ + . = __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = __ROM_Start + 0x500; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + *(vtable) + *(.data.*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + __end__ = .; + end = __end__; + KEEP(*(.heap*)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* Data flash. */ + .data_flash : + { + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + } > DATA_FLASH + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE +} \ No newline at end of file diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..7a1575602d --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,1695 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.c +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 14765 $ + +Additional information: + Type "int" is assumed to be 32-bits in size + H->T Host to target communication + T->H Target to host communication + + RTT channel 0 is always present and reserved for Terminal usage. + Name is fixed to "Terminal" + + Effective buffer size: SizeOfBuffer - 1 + + WrOff == RdOff: Buffer is empty + WrOff == (RdOff - 1): Buffer is full + WrOff > RdOff: Free space includes wrap-around + WrOff < RdOff: Used space includes wrap-around + (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0): + Buffer full and wrap-around after next byte + + +---------------------------------------------------------------------- +*/ + +#include "SEGGER_RTT.h" + +#include // for memcpy + +/********************************************************************* +* +* Configuration, default values +* +********************************************************************** +*/ + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP 1024 // Size of the buffer for terminal output of target, up to host +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN 16 // Size of the buffer for terminal input to target from host (Usually keyboard input) +#endif + +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS 2 // Number of up-buffers (T->H) available on this target +#endif + +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS 2 // Number of down-buffers (H->T) available on this target +#endif + +#ifndef SEGGER_RTT_BUFFER_SECTION + #if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_BUFFER_SECTION SEGGER_RTT_SECTION + #endif +#endif + +#ifndef SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT 0 +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP +#endif + +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() +#endif + +#ifndef STRLEN + #define STRLEN(a) strlen((a)) +#endif + +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 +#endif + +#ifndef SEGGER_RTT_MEMCPY + #ifdef MEMCPY + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) MEMCPY((pDest), (pSrc), (NumBytes)) + #else + #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) memcpy((pDest), (pSrc), (NumBytes)) + #endif +#endif + +#ifndef MIN + #define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX + #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif +// +// For some environments, NULL may not be defined until certain headers are included +// +#ifndef NULL + #define NULL 0 +#endif + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ +#if (defined __ICCARM__) || (defined __ICCRX__) + #define RTT_PRAGMA(P) _Pragma(#P) +#endif + +#if SEGGER_RTT_ALIGNMENT || SEGGER_RTT_BUFFER_ALIGNMENT + #if (defined __GNUC__) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #elif (defined __ICCARM__) || (defined __ICCRX__) + #define PRAGMA(A) _Pragma(#A) +#define SEGGER_RTT_ALIGN(Var, Alignment) RTT_PRAGMA(data_alignment=Alignment) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_ALIGN(Var, Alignment) Var __attribute__ ((aligned (Alignment))) + #else + #error "Alignment not supported for this compiler." + #endif +#else + #define SEGGER_RTT_ALIGN(Var, Alignment) Var +#endif + +#if defined(SEGGER_RTT_SECTION) || defined (SEGGER_RTT_BUFFER_SECTION) + #if (defined __GNUC__) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section))) Var + #elif (defined __ICCARM__) || (defined __ICCRX__) +#define SEGGER_RTT_PUT_SECTION(Var, Section) RTT_PRAGMA(location=Section) \ + Var + #elif (defined __CC_ARM) + #define SEGGER_RTT_PUT_SECTION(Var, Section) __attribute__ ((section (Section), zero_init)) Var + #else + #error "Section placement not supported for this compiler." + #endif +#else + #define SEGGER_RTT_PUT_SECTION(Var, Section) Var +#endif + + +#if SEGGER_RTT_ALIGNMENT + #define SEGGER_RTT_CB_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_ALIGNMENT) +#else + #define SEGGER_RTT_CB_ALIGN(Var) Var +#endif + +#if SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGN(Var) SEGGER_RTT_ALIGN(Var, SEGGER_RTT_BUFFER_ALIGNMENT) +#else + #define SEGGER_RTT_BUFFER_ALIGN(Var) Var +#endif + + +#if defined(SEGGER_RTT_SECTION) + #define SEGGER_RTT_PUT_CB_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_SECTION) +#else + #define SEGGER_RTT_PUT_CB_SECTION(Var) Var +#endif + +#if defined(SEGGER_RTT_BUFFER_SECTION) + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) SEGGER_RTT_PUT_SECTION(Var, SEGGER_RTT_BUFFER_SECTION) +#else + #define SEGGER_RTT_PUT_BUFFER_SECTION(Var) Var +#endif + +/********************************************************************* +* +* Static const data +* +********************************************************************** +*/ + +static unsigned char _aTerminalId[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + +/********************************************************************* +* +* Static data +* +********************************************************************** +*/ +// +// RTT Control Block and allocate buffers for channel 0 +// +SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT)); + +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer [BUFFER_SIZE_UP])); +SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN])); + +static unsigned char _ActiveTerminal; + +/********************************************************************* +* +* Static functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* _DoInit() +* +* Function description +* Initializes the control block an buffers. +* May only be called via INIT() to avoid overriding settings. +* +*/ +#define INIT() do { \ + if (_SEGGER_RTT.acID[0] == '\0') { _DoInit(); } \ + } while (0) +static void _DoInit(void) { + SEGGER_RTT_CB* p; + // + // Initialize control block + // + p = &_SEGGER_RTT; + p->MaxNumUpBuffers = SEGGER_RTT_MAX_NUM_UP_BUFFERS; + p->MaxNumDownBuffers = SEGGER_RTT_MAX_NUM_DOWN_BUFFERS; + // + // Initialize up buffer 0 + // + p->aUp[0].sName = "Terminal"; + p->aUp[0].pBuffer = _acUpBuffer; + p->aUp[0].SizeOfBuffer = sizeof(_acUpBuffer); + p->aUp[0].RdOff = 0u; + p->aUp[0].WrOff = 0u; + p->aUp[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Initialize down buffer 0 + // + p->aDown[0].sName = "Terminal"; + p->aDown[0].pBuffer = _acDownBuffer; + p->aDown[0].SizeOfBuffer = sizeof(_acDownBuffer); + p->aDown[0].RdOff = 0u; + p->aDown[0].WrOff = 0u; + p->aDown[0].Flags = SEGGER_RTT_MODE_DEFAULT; + // + // Finish initialization of the control block. + // Copy Id string in three steps to make sure "SEGGER RTT" is not found + // in initializer memory (usually flash) by J-Link + // + strcpy(&p->acID[7], "RTT"); + strcpy(&p->acID[0], "SEGGER"); + p->acID[6] = ' '; +} + +/********************************************************************* +* +* _WriteBlocking() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* The caller is responsible for managing the write chunk sizes as +* _WriteBlocking() will block until all data has been posted successfully. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* >= 0 - Number of bytes written into buffer. +*/ +static unsigned _WriteBlocking(SEGGER_RTT_BUFFER_UP* pRing, const char* pBuffer, unsigned NumBytes) { + unsigned NumBytesToWrite; + unsigned NumBytesWritten; + unsigned RdOff; + unsigned WrOff; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + // + // Write data to buffer and handle wrap-around if necessary + // + NumBytesWritten = 0u; + WrOff = pRing->WrOff; + do { + RdOff = pRing->RdOff; // May be changed by host (debug probe) in the meantime + if (RdOff > WrOff) { + NumBytesToWrite = RdOff - WrOff - 1u; + } else { + NumBytesToWrite = pRing->SizeOfBuffer - (WrOff - RdOff + 1u); + } + NumBytesToWrite = MIN(NumBytesToWrite, (pRing->SizeOfBuffer - WrOff)); // Number of bytes that can be written until buffer wrap-around + NumBytesToWrite = MIN(NumBytesToWrite, NumBytes); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + pRing->WrOff = WrOff; + } while (NumBytes); + // + return NumBytesWritten; +} + +/********************************************************************* +* +* _WriteNoCheck() +* +* Function description +* Stores a specified number of characters in SEGGER RTT ring buffer +* and updates the associated write pointer which is periodically +* read by the host. +* It is callers responsibility to make sure data actually fits in buffer. +* +* Parameters +* pRing Ring buffer to post to. +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there might not be enough space in the "Up"-buffer, call _WriteBlocking +*/ +static void _WriteNoCheck(SEGGER_RTT_BUFFER_UP* pRing, const char* pData, unsigned NumBytes) { + unsigned NumBytesAtOnce; + unsigned WrOff; + unsigned Rem; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; +#endif + } else { + // + // We reach the end of the buffer, so need to wrap around + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + WrOff; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer + WrOff, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + SEGGER_RTT_MEMCPY(pRing->pBuffer, pData + Rem, NumBytesAtOnce); + pRing->WrOff = NumBytesAtOnce; +#endif + } +} + +/********************************************************************* +* +* _PostTerminalSwitch() +* +* Function description +* Switch terminal to the given terminal ID. It is the caller's +* responsibility to ensure the terminal ID is correct and there is +* enough space in the buffer for this to complete successfully. +* +* Parameters +* pRing Ring buffer to post to. +* TerminalId Terminal ID to switch to. +*/ +static void _PostTerminalSwitch(SEGGER_RTT_BUFFER_UP* pRing, unsigned char TerminalId) { + unsigned char ac[2]; + + ac[0] = 0xFFu; + ac[1] = _aTerminalId[TerminalId]; // Caller made already sure that TerminalId does not exceed our terminal limit + _WriteBlocking(pRing, (const char*)ac, 2u); +} + +/********************************************************************* +* +* _GetAvailWriteSpace() +* +* Function description +* Returns the number of bytes that can be written to the ring +* buffer without blocking. +* +* Parameters +* pRing Ring buffer to check. +* +* Return value +* Number of bytes that are free in the buffer. +*/ +static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { + r = pRing->SizeOfBuffer - 1u - WrOff + RdOff; + } else { + r = RdOff - WrOff - 1u; + } + return r; +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_ReadNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* Do not lock against interrupts and multiple access. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_DOWN* pRing; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + const char* pSrc; +#endif + // + INIT(); + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + pBuffer = (unsigned char*)pData; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + NumBytesRead = 0u; + // + // Read from current read position to wrap-around of buffer, first + // + if (RdOff > WrOff) { + NumBytesRem = pRing->SizeOfBuffer - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + // + // Handle wrap-around of buffer + // + if (RdOff == pRing->SizeOfBuffer) { + RdOff = 0u; + } + } + // + // Read remaining items of buffer + // + NumBytesRem = WrOff - RdOff; + NumBytesRem = MIN(NumBytesRem, BufferSize); + if (NumBytesRem > 0u) { +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pSrc = pRing->pBuffer + RdOff; + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, pRing->pBuffer + RdOff, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_Read +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the host. +* +* Parameters +* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +*/ +unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + // + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteWithOverwriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block. +* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application +* and overwrites data if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, data is overwritten. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link +* connection reads RTT data. +*/ +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + char* pDst; +#endif + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Check if we will overwrite data and need to adjust the RdOff. + // + if (pRing->WrOff == pRing->RdOff) { + Avail = pRing->SizeOfBuffer - 1u; + } else if ( pRing->WrOff < pRing->RdOff) { + Avail = pRing->RdOff - pRing->WrOff - 1u; + } else { + Avail = pRing->RdOff - pRing->WrOff - 1u + pRing->SizeOfBuffer; + } + if (NumBytes > Avail) { + pRing->RdOff += (NumBytes - Avail); + while (pRing->RdOff >= pRing->SizeOfBuffer) { + pRing->RdOff -= pRing->SizeOfBuffer; + } + } + // + // Write all data, no need to check the RdOff, but possibly handle multiple wrap-arounds + // + Avail = pRing->SizeOfBuffer - pRing->WrOff; + do { + if (Avail > NumBytes) { + // + // Last round + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, NumBytes); + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + pDst = pRing->pBuffer + pRing->WrOff; + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY(pRing->pBuffer + pRing->WrOff, pData, Avail); + pData += Avail; + pRing->WrOff = 0; + NumBytes -= Avail; +#endif + Avail = (pRing->SizeOfBuffer - 1); + } + } while (NumBytes); +} + +/********************************************************************* +* +* SEGGER_RTT_WriteSkipNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteSkipNoLock does not lock the application and +* skips all data, if the data does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* MUST be > 0!!! +* This is done for performance reasons, so no initial check has do be done. +* +* Return value +* 1: Data has been copied +* 0: No space, data has not been copied +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, all data is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +#if (RTT_USE_ASM == 0) +unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + unsigned RdOff; + unsigned WrOff; + unsigned Rem; + // + // Cases: + // 1) RdOff <= WrOff => Space until wrap-around is sufficient + // 2) RdOff <= WrOff => Space after wrap-around needed (copy in 2 chunks) + // 3) RdOff < WrOff => No space in buf + // 4) RdOff > WrOff => Space is sufficient + // 5) RdOff > WrOff => No space in buf + // + // 1) is the most common case for large buffers and assuming that J-Link reads the data fast enough + // + pData = (const char *)pBuffer; + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + RdOff = pRing->RdOff; + WrOff = pRing->WrOff; + if (RdOff <= WrOff) { // Case 1), 2) or 3) + Avail = pRing->SizeOfBuffer - WrOff - 1u; // Space until wrap-around (assume 1 byte not usable for case that RdOff == 0) + if (Avail >= NumBytes) { // Case 1)? +CopyStraight: + memcpy(pRing->pBuffer + WrOff, pData, NumBytes); + pRing->WrOff = WrOff + NumBytes; + return 1; + } + Avail += RdOff; // Space incl. wrap-around + if (Avail >= NumBytes) { // Case 2? => If not, we have case 3) (does not fit) + Rem = pRing->SizeOfBuffer - WrOff; // Space until end of buffer + memcpy(pRing->pBuffer + WrOff, pData, Rem); // Copy 1st chunk + NumBytes -= Rem; + // + // Special case: First check that assumed RdOff == 0 calculated that last element before wrap-around could not be used + // But 2nd check (considering space until wrap-around and until RdOff) revealed that RdOff is not 0, so we can use the last element + // In this case, we may use a copy straight until buffer end anyway without needing to copy 2 chunks + // Therefore, check if 2nd memcpy is necessary at all + // + if (NumBytes) { + memcpy(pRing->pBuffer, pData + Rem, NumBytes); + } + pRing->WrOff = NumBytes; + return 1; + } + } else { // Potential case 4) + Avail = RdOff - WrOff - 1u; + if (Avail >= NumBytes) { // Case 4)? => If not, we have case 5) (does not fit) + goto CopyStraight; + } + } + return 0; // No space in buffer +} +#endif + +/********************************************************************* +* +* SEGGER_RTT_WriteNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* SEGGER_RTT_WriteNoLock does not lock the application. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ +unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + + pData = (const char *)pBuffer; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // How we output depends upon the mode... + // + switch (pRing->Flags) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother. + // + Avail = _GetAvailWriteSpace(pRing); + if (Avail < NumBytes) { + Status = 0u; + } else { + Status = NumBytes; + _WriteNoCheck(pRing, pData, NumBytes); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode, trim to what we can output without blocking. + // + Avail = _GetAvailWriteSpace(pRing); + Status = Avail < NumBytes ? Avail : NumBytes; + _WriteNoCheck(pRing, pData, Status); + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + Status = _WriteBlocking(pRing, pData, NumBytes); + break; + default: + Status = 0u; + break; + } + // + // Finish up. + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_Write +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block which is then read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* pBuffer Pointer to character array. Does not need to point to a \0 terminated string. +* NumBytes Number of bytes to be stored in the SEGGER RTT control block. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ +unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Call the non-locking write function + // + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_WriteString +* +* Function description +* Stores string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* s Pointer to string. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* (2) String passed to this function has to be \0 terminated +* (3) \0 termination character is *not* stored in RTT buffer +*/ +unsigned SEGGER_RTT_WriteString(unsigned BufferIndex, const char* s) { + unsigned Len; + + Len = STRLEN(s); + return SEGGER_RTT_Write(BufferIndex, s, Len); +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkipNoLock +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* SEGGER_RTT_PutCharSkipNoLock does not lock the application and +* skips the byte, if it does not fit into the buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +* (2) For performance reasons this function does not call Init() +* and may only be called after RTT has been initialized. +* Either by calling SEGGER_RTT_Init() or calling another RTT API function first. +*/ + +unsigned SEGGER_RTT_PutCharSkipNoLock(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_PutCharSkip +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) If there is not enough space in the "Up"-buffer, the character is dropped. +*/ + +unsigned SEGGER_RTT_PutCharSkip(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + + /********************************************************************* +* +* SEGGER_RTT_PutChar +* +* Function description +* Stores a single character/byte in SEGGER RTT buffer. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal"). +* c Byte to be stored. +* +* Return value +* Number of bytes which have been stored in the "Up"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +*/ + +unsigned SEGGER_RTT_PutChar(unsigned BufferIndex, char c) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned WrOff; + unsigned Status; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + // + // Get write position and handle wrap-around if necessary + // + WrOff = pRing->WrOff + 1; + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0; + } + // + // Wait for free space if mode is set to blocking + // + if (pRing->Flags == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + while (WrOff == pRing->RdOff) { + ; + } + } + // + // Output byte if free space is available + // + if (WrOff != pRing->RdOff) { + pRing->pBuffer[pRing->WrOff] = c; + pRing->WrOff = WrOff; + Status = 1; + } else { + Status = 0; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + return Status; +} + +/********************************************************************* +* +* SEGGER_RTT_GetKey +* +* Function description +* Reads one character from the SEGGER RTT buffer. +* Host has previously stored data there. +* +* Return value +* < 0 - No character available (buffer empty). +* >= 0 - Character which has been read. (Possible values: 0 - 255) +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0. +*/ +int SEGGER_RTT_GetKey(void) { + char c; + int r; + + r = (int)SEGGER_RTT_Read(0u, &c, 1u); + if (r == 1) { + r = (int)(unsigned char)c; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_WaitKey +* +* Function description +* Waits until at least one character is avaible in the SEGGER RTT buffer. +* Once a character is available, it is read and this function returns. +* +* Return value +* >=0 - Character which has been read. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +* (2) This function is blocking if no character is present in RTT buffer +*/ +int SEGGER_RTT_WaitKey(void) { + int r; + + do { + r = SEGGER_RTT_GetKey(); + } while (r < 0); + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasKey +* +* Function description +* Checks if at least one character for reading is available in the SEGGER RTT buffer. +* +* Return value +* == 0 - No characters are available to read. +* == 1 - At least one character is available. +* +* Notes +* (1) This function is only specified for accesses to RTT buffer 0 +*/ +int SEGGER_RTT_HasKey(void) { + unsigned RdOff; + int r; + + INIT(); + RdOff = _SEGGER_RTT.aDown[0].RdOff; + if (RdOff != _SEGGER_RTT.aDown[0].WrOff) { + r = 1; + } else { + r = 0; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_HasData +* +* Function description +* Check if there is data from the host in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasData(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aDown[BufferIndex]; + v = pRing->WrOff; + return v - pRing->RdOff; +} + +/********************************************************************* +* +* SEGGER_RTT_HasDataUp +* +* Function description +* Check if there is data remaining to be sent in the given buffer. +* +* Return value: +* ==0: No data +* !=0: Data in buffer +* +*/ +unsigned SEGGER_RTT_HasDataUp(unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + unsigned v; + + pRing = &_SEGGER_RTT.aUp[BufferIndex]; + v = pRing->RdOff; + return pRing->WrOff - v; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocDownBuffer +* +* Function description +* Run-time configuration of the next down-buffer (H->T). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocDownBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumDownBuffers) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_AllocUpBuffer +* +* Function description +* Run-time configuration of the next up-buffer (T->H). +* The next buffer, which is not used yet is configured. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. Buffer Index +* < 0 - Error +*/ +int SEGGER_RTT_AllocUpBuffer(const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int BufferIndex; + + INIT(); + SEGGER_RTT_LOCK(); + BufferIndex = 0; + do { + if (_SEGGER_RTT.aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers); + if (BufferIndex < _SEGGER_RTT.MaxNumUpBuffers) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + } else { + BufferIndex = -1; + } + SEGGER_RTT_UNLOCK(); + return BufferIndex; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer (T->H). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 - O.K. +* < 0 - Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + _SEGGER_RTT.aUp[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aUp[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aUp[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aUp[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_ConfigDownBuffer +* +* Function description +* Run-time configuration of a specific down-buffer (H->T). +* Buffer to be configured is specified by index. +* This includes: Buffer address, size, name, flags, ... +* +* Parameters +* BufferIndex Index of the buffer to configure. +* sName Pointer to a constant name string. +* pBuffer Pointer to a buffer to be used. +* BufferSize Size of the buffer. +* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message). +* +* Return value +* >= 0 O.K. +* < 0 Error +* +* Additional information +* Buffer 0 is configured on compile-time. +* May only be called once per buffer. +* Buffer name and flags can be reconfigured using the appropriate functions. +*/ +int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + if (BufferIndex > 0u) { + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + _SEGGER_RTT.aDown[BufferIndex].pBuffer = (char*)pBuffer; + _SEGGER_RTT.aDown[BufferIndex].SizeOfBuffer = BufferSize; + _SEGGER_RTT.aDown[BufferIndex].RdOff = 0u; + _SEGGER_RTT.aDown[BufferIndex].WrOff = 0u; + } + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameUpBuffer +* +* Function description +* Run-time configuration of a specific up-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameUpBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetNameDownBuffer +* +* Function description +* Run-time configuration of a specific Down-buffer name (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* sName Pointer to a constant name string. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetNameDownBuffer(unsigned BufferIndex, const char* sName) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].sName = sName; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsUpBuffer +* +* Function description +* Run-time configuration of specific up-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsUpBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumUpBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aUp[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_SetFlagsDownBuffer +* +* Function description +* Run-time configuration of specific Down-buffer flags (T->H). +* Buffer to be configured is specified by index. +* +* Parameters +* BufferIndex Index of the buffer to renamed. +* Flags Flags to set for the buffer. +* +* Return value +* >= 0 O.K. +* < 0 Error +*/ +int SEGGER_RTT_SetFlagsDownBuffer(unsigned BufferIndex, unsigned Flags) { + int r; + + INIT(); + if (BufferIndex < (unsigned)_SEGGER_RTT.MaxNumDownBuffers) { + SEGGER_RTT_LOCK(); + _SEGGER_RTT.aDown[BufferIndex].Flags = Flags; + SEGGER_RTT_UNLOCK(); + r = 0; + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_Init +* +* Function description +* Initializes the RTT Control Block. +* Should be used in RAM targets, at start of the application. +* +*/ +void SEGGER_RTT_Init (void) { + _DoInit(); +} + +/********************************************************************* +* +* SEGGER_RTT_SetTerminal +* +* Function description +* Sets the terminal to be used for output on channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* +* Return value +* >= 0 O.K. +* < 0 Error (e.g. if RTT is configured for non-blocking mode and there was no space in the buffer to set the new terminal Id) +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId) { + unsigned char ac[2]; + SEGGER_RTT_BUFFER_UP* pRing; + unsigned Avail; + int r; + // + INIT(); + // + r = 0; + ac[0] = 0xFFu; + if (TerminalId < sizeof(_aTerminalId)) { // We only support a certain number of channels + ac[1] = _aTerminalId[TerminalId]; + pRing = &_SEGGER_RTT.aUp[0]; // Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed + SEGGER_RTT_LOCK(); // Lock to make sure that no other task is writing into buffer, while we are and number of free bytes in buffer does not change downwards after checking and before writing + if ((pRing->Flags & SEGGER_RTT_MODE_MASK) == SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL) { + _ActiveTerminal = TerminalId; + _WriteBlocking(pRing, (const char*)ac, 2u); + } else { // Skipping mode or trim mode? => We cannot trim this command so handling is the same for both modes + Avail = _GetAvailWriteSpace(pRing); + if (Avail >= 2) { + _ActiveTerminal = TerminalId; // Only change active terminal in case of success + _WriteNoCheck(pRing, (const char*)ac, 2u); + } else { + r = -1; + } + } + SEGGER_RTT_UNLOCK(); + } else { + r = -1; + } + return r; +} + +/********************************************************************* +* +* SEGGER_RTT_TerminalOut +* +* Function description +* Writes a string to the given terminal +* without changing the terminal for channel 0. +* +* Parameters +* TerminalId Index of the terminal. +* s String to be printed on the terminal. +* +* Return value +* >= 0 - Number of bytes written. +* < 0 - Error. +* +*/ +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s) { + int Status; + unsigned FragLen; + unsigned Avail; + SEGGER_RTT_BUFFER_UP* pRing; + // + INIT(); + // + // Validate terminal ID. + // + if (TerminalId < (char)sizeof(_aTerminalId)) { // We only support a certain number of channels + // + // Get "to-host" ring buffer. + // + pRing = &_SEGGER_RTT.aUp[0]; + // + // Need to be able to change terminal, write data, change back. + // Compute the fixed and variable sizes. + // + FragLen = STRLEN(s); + // + // How we output depends upon the mode... + // + SEGGER_RTT_LOCK(); + Avail = _GetAvailWriteSpace(pRing); + switch (pRing->Flags & SEGGER_RTT_MODE_MASK) { + case SEGGER_RTT_MODE_NO_BLOCK_SKIP: + // + // If we are in skip mode and there is no space for the whole + // of this output, don't bother switching terminals at all. + // + if (Avail < (FragLen + 4u)) { + Status = 0; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_NO_BLOCK_TRIM: + // + // If we are in trim mode and there is not enough space for everything, + // trim the output but always include the terminal switch. If no room + // for terminal switch, skip that totally. + // + if (Avail < 4u) { + Status = -1; + } else { + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, (FragLen < (Avail - 4u)) ? FragLen : (Avail - 4u)); + _PostTerminalSwitch(pRing, _ActiveTerminal); + } + break; + case SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL: + // + // If we are in blocking mode, output everything. + // + _PostTerminalSwitch(pRing, TerminalId); + Status = (int)_WriteBlocking(pRing, s, FragLen); + _PostTerminalSwitch(pRing, _ActiveTerminal); + break; + default: + Status = -1; + break; + } + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + } else { + Status = -1; + } + return Status; +} + + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..97dc3c8026 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT.h +Purpose : Implementation of SEGGER real-time transfer which allows + real-time communication on targets which support debugger + memory accesses while the CPU is running. +Revision: $Rev: 14765 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + + + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ +#ifndef RTT_USE_ASM + #if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__) || (defined __clang__)) && (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as up-buffer (T->H) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + unsigned WrOff; // Position of next item to be written by either target. + volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host. + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_UP; + +// +// Description for a circular buffer (also called "ring buffer") +// which is used as down-buffer (H->T) +// +typedef struct { + const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4" + char* pBuffer; // Pointer to start of buffer + unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty. + volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host. + unsigned RdOff; // Position of next item to be read by target (down-buffer). + unsigned Flags; // Contains configuration flags +} SEGGER_RTT_BUFFER_DOWN; + +// +// RTT control block which describes the number of buffers available +// as well as the configuration for each buffer +// +// +typedef struct { + char acID[16]; // Initialized to "SEGGER RTT" + int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2) + int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2) + SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host + SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target +} SEGGER_RTT_CB; + +/********************************************************************* +* +* Global data +* +********************************************************************** +*/ +extern SEGGER_RTT_CB _SEGGER_RTT; + +/********************************************************************* +* +* RTT API functions +* +********************************************************************** +*/ +#ifdef __cplusplus + extern "C" { +#endif +int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags); +int SEGGER_RTT_GetKey (void); +unsigned SEGGER_RTT_HasData (unsigned BufferIndex); +int SEGGER_RTT_HasKey (void); +unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex); +void SEGGER_RTT_Init (void); +unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName); +int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags); +int SEGGER_RTT_WaitKey (void); +unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s); +void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c); +unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (_SEGGER_RTT.aDown[n].WrOff - _SEGGER_RTT.aDown[n].RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT "Terminal" API functions +* +********************************************************************** +*/ +int SEGGER_RTT_SetTerminal (unsigned char TerminalId); +int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s); + +/********************************************************************* +* +* RTT printf functions (require SEGGER_RTT_printf.c) +* +********************************************************************** +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...); +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList); + +#ifdef __cplusplus + } +#endif + +#endif // ifndef(SEGGER_RTT_ASM) + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ + +// +// Operating modes. Define behavior if buffer is full (not enough space for entire message) +// +#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default) +#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits. +#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer. +#define SEGGER_RTT_MODE_MASK (3) + +// +// Control sequences, based on ANSI. +// Can be used to control color, and clear the screen +// +#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors +#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left + +#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m" +#define RTT_CTRL_TEXT_RED "\x1B[2;31m" +#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m" +#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m" +#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m" +#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m" +#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m" +#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m" + +#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m" +#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m" +#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m" +#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m" +#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m" +#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m" +#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m" +#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m" + +#define RTT_CTRL_BG_BLACK "\x1B[24;40m" +#define RTT_CTRL_BG_RED "\x1B[24;41m" +#define RTT_CTRL_BG_GREEN "\x1B[24;42m" +#define RTT_CTRL_BG_YELLOW "\x1B[24;43m" +#define RTT_CTRL_BG_BLUE "\x1B[24;44m" +#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m" +#define RTT_CTRL_BG_CYAN "\x1B[24;46m" +#define RTT_CTRL_BG_WHITE "\x1B[24;47m" + +#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m" +#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m" +#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m" +#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m" +#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m" +#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m" +#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m" +#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m" + + +#endif + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..f59a62e052 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,330 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_Conf.h +Purpose : Implementation of SEGGER real-time transfer (RTT) which + allows real-time communication on targets which support + debugger memory accesses while the CPU is running. +Revision: $Rev: 15929 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) + +#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) + +#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) + +#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) + +/********************************************************************* +* +* RTT memcpy configuration +* +* memcpy() is good for large amounts of data, +* but the overhead is big for small amounts, which are usually stored via RTT. +* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead. +* +* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions. +* This is may be required with memory access restrictions, +* such as on Cortex-A devices with MMU. +*/ +#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +// +// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets +// +//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__)) +// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes)) +//#endif + +// +// Target is not allowed to perform other RTT operations while string still has not been stored completely. +// Otherwise we would probably end up with a mixed string in the buffer. +// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here. +// +// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4. +// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches. +// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly. +// (Higher priority = lower priority number) +// Default value for embOS: 128u +// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) +// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC +// or define SEGGER_RTT_LOCK() to completely disable interrupts. +// + +#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if (defined(__SES_ARM) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, $1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + #elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (LockState) \ + : \ + ); \ + } + + #elif defined(__ARM_ARCH_7A__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + __asm volatile ("mrs r1, CPSR \n\t" \ + "mov %0, r1 \n\t" \ + "orr r1, r1, #0xC0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : "=r" (LockState) \ + : \ + : "r1" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \ + "mrs r1, CPSR \n\t" \ + "bic r1, r1, #0xC0 \n\t" \ + "and r0, r0, #0xC0 \n\t" \ + "orr r1, r1, r0 \n\t" \ + "msr CPSR_c, r1 \n\t" \ + : \ + : "r" (LockState) \ + : "r0", "r1" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif ((defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || (defined (__ARM7M__) && (__CORE__ == __ARM7M__))) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t LockState; \ + LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char PRIMASK __asm( "primask"); \ + LockState = PRIMASK; \ + PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() PRIMASK = LockState; \ + __schedule_barrier(); \ + } + #elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = LockState; \ + __schedule_barrier(); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for TI ARM +*/ +#ifdef __TI_ARM__ + #if defined (__TI_ARM_V6M0__) + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(LockState); \ + } + #elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int LockState; \ + LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #define SEGGER_RTT_LOCK() { \ + unsigned long LockState; \ + LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration fallback +*/ +#ifndef SEGGER_RTT_LOCK + #define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts) +#endif + +#ifndef SEGGER_RTT_UNLOCK + #define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state) +#endif + +#endif +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..50d55d45df --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* SEGGER RTT * Real Time Transfer for embedded targets * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* SEGGER strongly recommends to not make any changes * +* to or modify the source code of this software in order to stay * +* compatible with the RTT protocol and J-Link. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* o Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +* * +* RTT version: 6.52b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 12360 $ +---------------------------------------------------------------------- +*/ +#include "SEGGER_RTT.h" +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64) +#endif + +#include +#include + + +#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) +#define FORMAT_FLAG_PAD_ZERO (1u << 1) +#define FORMAT_FLAG_PRINT_SIGN (1u << 2) +#define FORMAT_FLAG_ALTERNATE (1u << 3) + +/********************************************************************* +* +* Types +* +********************************************************************** +*/ + +typedef struct { + char* pBuffer; + unsigned BufferSize; + unsigned Cnt; + + int ReturnValue; + + unsigned RTTBufferIndex; +} SEGGER_RTT_PRINTF_DESC; + +/********************************************************************* +* +* Function prototypes +* +********************************************************************** +*/ + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* _StoreChar +*/ +static void _StoreChar(SEGGER_RTT_PRINTF_DESC * p, char c) { + unsigned Cnt; + + Cnt = p->Cnt; + if ((Cnt + 1u) <= p->BufferSize) { + *(p->pBuffer + Cnt) = c; + p->Cnt = Cnt + 1u; + p->ReturnValue++; + } + // + // Write part of string, when the buffer is full + // + if (p->Cnt == p->BufferSize) { + if (SEGGER_RTT_Write(p->RTTBufferIndex, p->pBuffer, p->Cnt) != p->Cnt) { + p->ReturnValue = -1; + } else { + p->Cnt = 0u; + } + } +} + +/********************************************************************* +* +* _PrintUnsigned +*/ +static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC * pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + static const char _aV2C[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + unsigned Div; + unsigned Digit; + unsigned Number; + unsigned Width; + char c; + + Number = v; + Digit = 1u; + // + // Get actual field width + // + Width = 1u; + while (Number >= Base) { + Number = (Number / Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + // + // Print leading chars if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) { + if (FieldWidth != 0u) { + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) { + c = '0'; + } else { + c = ' '; + } + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, c); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Compute Digit. + // Loop until Digit has the value of the highest digit required. + // Example: If the output is 345 (Base 10), loop 2 times until Digit is 100. + // + while (1) { + if (NumDigits > 1u) { // User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned) + NumDigits--; + } else { + Div = v / Digit; + if (Div < Base) { // Is our divider big enough to extract the highest digit from value? => Done + break; + } + } + Digit *= Base; + } + // + // Output digits + // + do { + Div = v / Digit; + v -= Div * Digit; + _StoreChar(pBufferDesc, _aV2C[Div]); + if (pBufferDesc->ReturnValue < 0) { + break; + } + Digit /= Base; + } while (Digit); + // + // Print trailing spaces if necessary + // + if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + } +} + +/********************************************************************* +* +* _PrintInt +*/ +static void _PrintInt(SEGGER_RTT_PRINTF_DESC * pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags) { + unsigned Width; + int Number; + + Number = (v < 0) ? -v : v; + + // + // Get actual field width + // + Width = 1u; + while (Number >= (int)Base) { + Number = (Number / (int)Base); + Width++; + } + if (NumDigits > Width) { + Width = NumDigits; + } + if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) { + FieldWidth--; + } + + // + // Print leading spaces if necessary + // + if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, ' '); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + // + // Print sign if necessary + // + if (pBufferDesc->ReturnValue >= 0) { + if (v < 0) { + v = -v; + _StoreChar(pBufferDesc, '-'); + } else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) { + _StoreChar(pBufferDesc, '+'); + } else { + + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print leading zeros if necessary + // + if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) { + if (FieldWidth != 0u) { + while ((FieldWidth != 0u) && (Width < FieldWidth)) { + FieldWidth--; + _StoreChar(pBufferDesc, '0'); + if (pBufferDesc->ReturnValue < 0) { + break; + } + } + } + } + if (pBufferDesc->ReturnValue >= 0) { + // + // Print number without sign + // + _PrintUnsigned(pBufferDesc, (unsigned)v, Base, NumDigits, FieldWidth, FormatFlags); + } + } + } +} + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SEGGER_RTT_vprintf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string +* pParamList Pointer to the list of arguments for the format string +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +*/ +int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList) { + char c; + SEGGER_RTT_PRINTF_DESC BufferDesc; + int v; + unsigned NumDigits; + unsigned FormatFlags; + unsigned FieldWidth; + char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE]; + + BufferDesc.pBuffer = acBuffer; + BufferDesc.BufferSize = SEGGER_RTT_PRINTF_BUFFER_SIZE; + BufferDesc.Cnt = 0u; + BufferDesc.RTTBufferIndex = BufferIndex; + BufferDesc.ReturnValue = 0; + + do { + c = *sFormat; + sFormat++; + if (c == 0u) { + break; + } + if (c == '%') { + // + // Filter out flags + // + FormatFlags = 0u; + v = 1; + do { + c = *sFormat; + switch (c) { + case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++; break; + case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++; break; + case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++; break; + case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++; break; + default: v = 0; break; + } + } while (v); + // + // filter out field with + // + FieldWidth = 0u; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + FieldWidth = (FieldWidth * 10u) + ((unsigned)c - '0'); + } while (1); + + // + // Filter out precision (number of digits to display) + // + NumDigits = 0u; + c = *sFormat; + if (c == '.') { + sFormat++; + do { + c = *sFormat; + if ((c < '0') || (c > '9')) { + break; + } + sFormat++; + NumDigits = NumDigits * 10u + ((unsigned)c - '0'); + } while (1); + } + // + // Filter out length modifier + // + c = *sFormat; + do { + if ((c == 'l') || (c == 'h')) { + sFormat++; + c = *sFormat; + } else { + break; + } + } while (1); + // + // Handle specifiers + // + switch (c) { + case 'c': { + char c0; + v = va_arg(*pParamList, int); + c0 = (char)v; + _StoreChar(&BufferDesc, c0); + break; + } + case 'd': + v = va_arg(*pParamList, int); + _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'u': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags); + break; + case 'x': + case 'X': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags); + break; + case 's': + { + const char * s = va_arg(*pParamList, const char *); + do { + c = *s; + s++; + if (c == '\0') { + break; + } + _StoreChar(&BufferDesc, c); + } while (BufferDesc.ReturnValue >= 0); + } + break; + case 'p': + v = va_arg(*pParamList, int); + _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u); + break; + case '%': + _StoreChar(&BufferDesc, '%'); + break; + default: + break; + } + sFormat++; + } else { + _StoreChar(&BufferDesc, c); + } + } while (BufferDesc.ReturnValue >= 0); + + if (BufferDesc.ReturnValue > 0) { + // + // Write remaining data, if any + // + if (BufferDesc.Cnt != 0u) { + SEGGER_RTT_Write(BufferIndex, acBuffer, BufferDesc.Cnt); + } + BufferDesc.ReturnValue += (int)BufferDesc.Cnt; + } + return BufferDesc.ReturnValue; +} + +/********************************************************************* +* +* SEGGER_RTT_printf +* +* Function description +* Stores a formatted string in SEGGER RTT control block. +* This data is read by the host. +* +* Parameters +* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal") +* sFormat Pointer to format string, followed by the arguments for conversion +* +* Return values +* >= 0: Number of bytes which have been stored in the "Up"-buffer. +* < 0: Error +* +* Notes +* (1) Conversion specifications have following syntax: +* %[flags][FieldWidth][.Precision]ConversionSpecifier +* (2) Supported flags: +* -: Left justify within the field width +* +: Always print sign extension for signed conversions +* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision +* Supported conversion specifiers: +* c: Print the argument as one char +* d: Print the argument as a signed integer +* u: Print the argument as an unsigned integer +* x: Print the argument as an hexadecimal integer +* s: Print the string pointed to by the argument +* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.) +*/ +int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) { + int r; + va_list ParamList; + + va_start(ParamList, sFormat); + r = SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList); + va_end(ParamList); + return r; +} +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..d822b0c36f --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/common_utils.h @@ -0,0 +1,71 @@ +/*********************************************************************************************************************** + * File Name : common_utils.h + * Description : Contains macros, data structures and functions used common to the EP + ***********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.h" +#include "bsp_pin_cfg.h" +#include "r_ioport.h" +/* SEGGER RTT and error related headers */ +#include "SEGGER_RTT/SEGGER_RTT.h" + + +#define BIT_SHIFT_8 (8u) +#define SIZE_64 (64u) + +#define LVL_ERR (1u) /* error conditions */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_crc" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************"\ + "\r\nRefer to readme.txt file for more details on Example Project and" \ + "\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define SEGGER_INDEX (0) + +#define APP_PRINT(fn_, ...) SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__); + +#define APP_ERR_PRINT(fn_, ...) if(LVL_ERR)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#define APP_ERR_TRAP(err) if(err) {\ + SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", err);\ + __asm("BKPT #0\n");} /* trap upon the error */ + +#define APP_READ(read_data) SEGGER_RTT_Read (SEGGER_INDEX, read_data, sizeof(read_data)); + +#define APP_CHECK_DATA SEGGER_RTT_HasKey() + + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/crc_ep.h b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/crc_ep.h new file mode 100644 index 0000000000..8b396f3bc5 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/crc_ep.h @@ -0,0 +1,84 @@ +/*********************************************************************************************************************** + * File Name : crc_ep.h + * Description : Contains macros and function declarations. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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. + ***********************************************************************************************************************/ + +#ifndef CRC_EP_H_ +#define CRC_EP_H_ + +/* External IRQ channel */ +/* board specific */ +#if defined (BOARD_RA6M3_EK) || defined (BOARD_RA6M3G_EK) +#define IRQ_CHANNEL 0x0D +#elif defined (BOARD_RA6M2_EK) || defined (BOARD_RA4M1_EK) +#define IRQ_CHANNEL 0x00 +#elif defined (BOARD_RA2A1_EK) +#define IRQ_CHANNEL 0x06 +#else +#define IRQ_CHANNEL 0x08 +#endif + +/* for on board LED */ +#define LED_ON (bool)BSP_IO_LEVEL_HIGH +#define LED_OFF (bool)BSP_IO_LEVEL_LOW + +/*Length of input buffer to calculate CRC in normal mode*/ +#define NUM_BYTES (4U) + +/* size of input buffer */ +#define BUF_LEN (8U) + +/* Led toggle delay */ +#define TOGGLE_DELAY (0x15E) + +/* 8 and 16 bit seed value and data length */ +#define EIGHT_BIT_SEED (0xff) +#define SIXTEEN_BIT_SEED (0xffff) +#define EIGHT_BIT_DATA_LEN (5U) +#define SIXTEEN_BIT_DATA_LEN (6U) + +#define EP_INFO "\r\nThis Example Project demonstrates CRC operation for transmission\r\n"\ + "in normal mode and reception in snoop mode. On pressing user\r\n"\ + "push-button, CRC value in normal mode is calculated for 4 bytes\r\n"\ + "of data. The calculated CRC value along with the data is\r\n"\ + "trans-received on sci_uart through loop-back.\r\n"\ + "\r\nIf the CRC value for snoop mode is zero and transmit and receive\r\n"\ + "buffer are equal then On-board LED blink as sign of successful\r\n"\ + "CRC operation. On a data mismatch, LED stays ON. Failure messages\r\n"\ + "and status is displayed on RTTViewer.\r\n\n\n" + +/* Check IO-port API return and trap error(if any error occurs) cleans up and display failure details on RTT viewer */ +#define VALIDATE_IO_PORT_API(API) if (FSP_SUCCESS != API)\ + { APP_PRINT("%s API failed at Line number %d", \ + #API, __LINE__);\ + cleanup();\ + APP_ERR_TRAP(true);\ + } + +/* Function declaration */ +void toggle_led(void); +void cleanup(void); +void deinit_crc(void); +void deinit_external_irq(void); +void deinit_uart(void); + + +#endif /* CRC_EP_H_ */ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..949b176fc8 --- /dev/null +++ b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/e2studio/src/hal_entry.c @@ -0,0 +1,453 @@ +/*********************************************************************************************************************** + * File Name : hal_entry.c + * Description : Contains data structures and functions used in hal_entry.c. + **********************************************************************************************************************/ +/*********************************************************************************************************************** + * 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 "common_utils.h" +#include "crc_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup crc_ep + * @{ + **********************************************************************************************************************/ + +/* IRQ callback */ +static volatile bool b_switch_count = false; +static volatile bool b_uart_rxflag = false; +static volatile bool b_uart_txflag = false; + +/* for on board LEDs */ +extern bsp_leds_t g_bsp_leds; + +/* private functions */ +static fsp_err_t crc_operation(void); +static void set_led(bool b_value); + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/*******************************************************************************************************************//** + * The RA Configuration tool generates main() and uses it to generate threads if an RTOS is used. This function is + * called by main() when no RTOS is used. + **********************************************************************************************************************/ + +void hal_entry(void) +{ + fsp_err_t err = FSP_SUCCESS; + fsp_pack_version_t version = {RESET_VALUE}; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + + /* Project information printed on the Console */ + APP_PRINT(BANNER_INFO, EP_VERSION, version.major, version.minor, version.patch); + APP_PRINT(EP_INFO); + + /* Open uart module */ + err = R_SCI_UART_Open(&g_uart_ctrl, &g_uart_cfg); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_SCI_Uart_Open API FAILED \r\n"); + APP_ERR_TRAP(err); + } + + /* Open CRC module*/ + err = R_CRC_Open(&g_crc_ctrl, &g_crc_cfg); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* close opened uart module*/ + deinit_uart(); + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_CRC_Open API FAILED \r\n"); + APP_ERR_TRAP(err); + } + + /* Open External IRQ module*/ + err = R_ICU_ExternalIrqOpen(&g_external_irq_ctrl, &g_external_irq_cfg); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* close all opened modules */ + deinit_crc(); + deinit_uart(); + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_ICU_ExternalIrqOpen API FAILED \r\n"); + APP_ERR_TRAP(err); + } + + /* Enable External interrupt for specified pin */ + err = R_ICU_ExternalIrqEnable(&g_external_irq_ctrl); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* close all the opened modules */ + cleanup(); + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_ICU_ExternalIrqEnable API FAILED \r\n"); + APP_ERR_TRAP(err); + } + + while(true) + { + if (true == b_switch_count) + { + /* Clear user pushbutton flag */ + b_switch_count = false; + /* Notify user the start of CRC operation*/ + APP_PRINT("\r\nStart CRC Operation\r\n"); + + /*Perform CRC operation in normal and snoop mode*/ + err = crc_operation(); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* Turn on LED as sign of CRC operation failure */ + set_led(LED_ON); + + /* print RTT message */ + APP_ERR_PRINT ("\r\n ** CRC operation failed ** \r\n"); + /* close all the opened modules before trap */ + cleanup(); + APP_ERR_TRAP(err); + } + } + } +} + +/*******************************************************************************************************************//** + * @brief Performs CRC calculation in normal and snoop mode and toggle LED on successful operation + * else Turn LED ON on failure. Also displays failure messages in RTT. + * @param[IN] None + * @retval FSP_SUCCESS On successfully CRC result in snoop and normal operation mode. + * @retval err Any Other Error code apart from FSP_SUCCES Unsuccessful operation. + **********************************************************************************************************************/ +static fsp_err_t crc_operation (void) +{ + fsp_err_t err = FSP_SUCCESS; + /* CRC inputs structure */ + crc_input_t input_data; + uint32_t normal_crc_value = RESET_VALUE; + uint32_t snoop_crc_value = RESET_VALUE; + uint32_t uart_time_out = UINT32_MAX; + uint32_t seed_value = RESET_VALUE; + uint8_t input_buffer[BUF_LEN] = {0x05,0x02,0x03,0x04}; + uint8_t dest_buffer[BUF_LEN] = {RESET_VALUE}; + uint8_t uart_data_len = RESET_VALUE; + + /* Before beginning the operation turn off LED */ + set_led(LED_OFF); + + /*clear callback event flag */ + b_uart_rxflag = false; + b_uart_txflag = false; + + /* update seed value and transfer uart_data_len as per the polynomial used */ + if(CRC_POLYNOMIAL_CRC_8 == g_crc_cfg.polynomial) + { + seed_value = EIGHT_BIT_SEED; //seed value for 8 bit polynomial + uart_data_len = EIGHT_BIT_DATA_LEN; //Data length for 8 bit polynomial operation + } + else if ((CRC_POLYNOMIAL_CRC_16 == g_crc_cfg.polynomial) || (CRC_POLYNOMIAL_CRC_CCITT == g_crc_cfg.polynomial)) + { + seed_value = SIXTEEN_BIT_SEED; //seed value for 16 bit polynomial + uart_data_len = SIXTEEN_BIT_DATA_LEN; //Data length for 16 bit polynomial operation + } + else + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("UNSUPPORTED CRC POLYNOMIAL SELECECTED \r\n"); + return FSP_ERR_UNSUPPORTED; + } + + /* update CRC input structure for normal mode */ + input_data.num_bytes = NUM_BYTES; + input_data.crc_seed = seed_value; + input_data.p_input_buffer = &input_buffer; + + /* calculate crc value for input data in Normal mode */ + err = R_CRC_Calculate(&g_crc_ctrl, &input_data , &normal_crc_value); + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_CRC_Calculate API FAILED \r\n"); + return err; + } + + /* append calculated CRC value from normal mode to input buffer */ + if (CRC_POLYNOMIAL_CRC_8 == g_crc_cfg.polynomial) + { + /* append 8 bit CRC value to input data*/ + input_buffer[4] = (uint8_t) normal_crc_value; + } + else if ((CRC_POLYNOMIAL_CRC_16 == g_crc_cfg.polynomial) || (CRC_POLYNOMIAL_CRC_CCITT == g_crc_cfg.polynomial)) + { + /* extract the bytes from 16 bit CRC value and append to input buffer as per the selected byte order + * in CRC configuration.*/ + if(CRC_BIT_ORDER_LMS_LSB == g_crc_cfg.bit_order) + { + input_buffer[4] = (uint8_t) (normal_crc_value & 0xFF); //extract first byte + input_buffer[5] = (uint8_t) ((normal_crc_value >>8) & 0xFF); //extract second byte + } + else + { + input_buffer[5] = (uint8_t) (normal_crc_value & 0xFF); //extract first byte + input_buffer[4] = (uint8_t) ((normal_crc_value >>8) & 0xFF); //extract second byte + } + } + else + { + /*do nothing */ + } + + /*Enable snoop mode*/ + err = R_CRC_SnoopEnable(&g_crc_ctrl , seed_value); + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_CRC_SnoopEnable API FAILED \r\n"); + return err; + } + + /* Perform SCI UART loop-back transmission from TX to RX*/ + /* Perform uart write operation */ + err = R_SCI_UART_Write(&g_uart_ctrl,input_buffer,uart_data_len); + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_SCI_UART_Write API FAILED \r\n"); + return err; + } + + /* Perform uart read operation */ + err = R_SCI_UART_Read(&g_uart_ctrl,dest_buffer,uart_data_len); + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_SCI_UART_Read API FAILED \r\n"); + return err; + } + + /* wait for tx and rx complete event */ + while((true != b_uart_txflag) || (true != b_uart_rxflag)) + { + /*start checking for timeout to avoid infinite loop*/ + --uart_time_out; + + /*check for time elapse*/ + if (RESET_VALUE == uart_time_out) + { + /*we have reached to a scenario where uart tx and rx events not occurred*/ + APP_ERR_PRINT (" ** Uart tx and rx events not received during uart write or read operation **\r\r"); + return FSP_ERR_TIMEOUT; + } + } + + /* Get CRC value in snoop mode for receive data */ + err = R_CRC_CalculatedValueGet(&g_crc_ctrl, &snoop_crc_value); + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_CRC_CalculatedValueGet API FAILED \r\n"); + return err; + } + + /* Disable snoop operation */ + err = R_CRC_SnoopDisable(&g_crc_ctrl); + if (FSP_SUCCESS != err) + { + /* Display failure message in RTT */ + APP_ERR_PRINT ("R_CRC_SnoopDisable API FAILED \r\n"); + return err; + } + + /* validate the CRC results */ + if (RESET_VALUE == snoop_crc_value) + { + APP_PRINT ("\r\nCRC Operation is successful. \r\n"); + + /* compare uart write and read data buffer */ + if ( RESET_VALUE == memcmp(dest_buffer, input_buffer , uart_data_len)) + { + APP_PRINT ("Uart transmitted and received data successfully. \r\n"); + /* toggle led as sign of successful operation */ + toggle_led(); + } + } + else + { + APP_ERR_PRINT ("UART loop-back transmission error \r\n"); + return FSP_ERR_ABORTED; + } + return err; +} + +/*******************************************************************************************************************//** + * @brief User defined sci uart driver callback function + * @param[IN] p_args + * @retval None + **********************************************************************************************************************/ +void uart_cb(uart_callback_args_t *p_args) +{ + if (NULL != p_args) + { + switch(p_args->event) + { + case UART_EVENT_RX_COMPLETE: + b_uart_rxflag = true; + break; + case UART_EVENT_TX_COMPLETE: + b_uart_txflag = true; + break; + default: + break; + } + } +} + +/*******************************************************************************************************************//** + * @brief User defined External IRQ driver callback function + * @param[IN] p_args + * @retval None + **********************************************************************************************************************/ +void ext_irq_cb(external_irq_callback_args_t *p_args) +{ + /* Make sure its a right interrupt */ + if ( (NULL != p_args) && (IRQ_CHANNEL == p_args->channel) ) + { + b_switch_count = true; + } +} + +/*******************************************************************************************************************//** + * This function is called to do closing of external irq module using its HAL level API. + * @brief Close the external irq module. Handle the Error internally with Proper Message. + * Application handles the rest. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ + void deinit_external_irq(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* close opened External IRQ module */ + err = R_ICU_ExternalIrqClose(&g_external_irq_ctrl); + /* Handle error */ + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT ("** R_ICU_ExternalIrqClose API FAILED **\r\n"); + } +} + +/*******************************************************************************************************************//** + * This function is called to do closing of crc module using its HAL level API. + * @brief Close the crc module. Handle the Error internally with Proper Message. + * Application handles the rest. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void deinit_crc(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* close opened crc module */ + err = R_CRC_Close(&g_crc_ctrl); + /* Handle error */ + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT ("** R_CRC_Close API FAILED **\r\n"); + } +} + +/*******************************************************************************************************************//** + * This function is called to do closing of sci uart module using its HAL level API. + * @brief Close the sci uart module. Handle the Error internally with Proper Message. + * Application handles the rest. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void deinit_uart(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* close opened External IRQ module */ + err = R_SCI_UART_Close(&g_uart_ctrl); + /* Handle error */ + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT ("** R_SCI_UART_Close API FAILED **\r\n"); + } +} + +/*******************************************************************************************************************//** + * @brief This function is called to do closing of all opened module. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void cleanup(void) +{ + /* close all the opened modules */ + deinit_crc(); + deinit_uart(); + deinit_external_irq(); +} + +/*******************************************************************************************************************//** + * @brief Toggle on board LED, which are connected and supported by BSP + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void toggle_led(void) +{ + VALIDATE_IO_PORT_API(R_IOPORT_PinWrite(g_ioport.p_ctrl,g_bsp_leds.p_leds[RESET_VALUE], LED_ON)); + R_BSP_SoftwareDelay(TOGGLE_DELAY, BSP_DELAY_UNITS_MILLISECONDS); + VALIDATE_IO_PORT_API(R_IOPORT_PinWrite(g_ioport.p_ctrl,g_bsp_leds.p_leds[RESET_VALUE], LED_OFF)); +} + +/*******************************************************************************************************************//** + * @brief Turn on_board LED ON or OFF. + * @param[IN] b_value LED_ON or LED_OFF + * @retval None + **********************************************************************************************************************/ +static void set_led(bool b_value) +{ + VALIDATE_IO_PORT_API(R_IOPORT_PinWrite(g_ioport.p_ctrl,g_bsp_leds.p_leds[RESET_VALUE], b_value)); +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. This implementation uses the event that is + * called right before main() to set up the pins. + * + * @param[in] event Where at in the start up process the code is currently at + **********************************************************************************************************************/ +void R_BSP_WarmStart(bsp_warm_start_event_t event) { + if (BSP_WARM_START_POST_C == event) { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup crc_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/readme.txt b/example_projects/ek_ra2a1/source/crc/crc_ek_ra2a1_ep/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..7f794c0a473d6899c6a51ea865533757f51c56c0 GIT binary patch literal 7682 zcmd^@>u*$56vfZiHt|2u`t1eHGUzZhFf{h?u z$v!a0zC?4VHu{P3sQjj0VnN(K90PlOqB(f&D4Yg6tZg`r{O~+dV7;SO;+S6VtL;oS zT~XU8qOdQU_Tv4u+ID4Im(e-rYDj@OaKDX16?~~VhSx@dp5!8JptLIti2UoY4K%8- zVG{ZeH458KqZcX3!Ztg*EPkZbRh53(D67Krsn)_)wDiM6Z5{)FYWi$Hqh9r zJlFTOem||2VejmsGO6|yC#AbZ=W9&d92GX{ner9Z_ zubSGl6>{lCB9TZvwr5c6$*Qbc)5EBNMm;Fc^ou2f^LTFR|Ca2*=Dxn~#du;=X*Sl= zkA_V>_`jlekE-;4SvFnKDCV!k|DL2_@v{D{>DM^U+Wa)Ew5@2sy428~H3WiPS`_nGtL^F<`B=WuiahY&m8ED|mLKEp2keR$}`%@@z}9(neyR zjAtE?Ioe#WB8Eg0zT-9C-4`z8L9ZugoaC|df-`KLX)-VMWdYfU_$Hsco@P0fKDSww zOk*}!HutvwSB-rwSOH3YmZC!1RE=;{eo{q1^#kryvedI9{hpP(F`8Km!jB59(&rad z83(FoTm!j+s%7kH#DSz9sve>qr|x#WmX*tiD$!$Uppx2`L|1fKZ|0~Ku?u#S7g#yS zq&l@$cHW*e5Ye`MU3;i`sBx+3sqCo_Cz6-)+j8rAc%pendX6;~Z(NHFWy2*|_NGN*C=;iRyuKG&9@IhM4c z+Fr_kyr$f$Gj2qN zmik;bAB#j{zK+^LJWJVcC6x*uzTOriZzR|9(-BdsWIc$<{!BG{FAXKc5rMoJ>TX!FdJV; zDiK6-m#&;B$1C;LyyDc9c?R2vP}(+%v+1mbiHw=aT4xP6NdtIO8U_a`NAudo|Pd*!wH*33J`+v{c_>{(Q?Y1r&Y)fsFLZl$Tl14| z*}4*Ym)V(pJCcwnu%Cm)D}5uIb9!GD9>}wP)~5gJ{#=8s-$TtKd&3R5TO;l@vNQFM zx}(ku-ZjXk+(a1<&=^d!V*55GV@`%UiU>Gg