From 3506b8541bf40eaa92369afde2e0ab1dbf99a1a9 Mon Sep 17 00:00:00 2001 From: ra-fsp-systems Date: Mon, 7 Feb 2022 21:23:26 -0500 Subject: [PATCH] Example Projects for RA/FSP --- .../i3c_master_ek_ra2e2_ep/e2studio/.cproject | 297 +++ .../i3c_master_ek_ra2e2_ep/e2studio/.project | 38 + .../e2studio/.settings/CoverageSetting.xml | 7 + .../.settings/DebugVirtualConsoleSetting.xml | 13 + .../com.renesas.cdt.ddsc.content.prefs | 2 + ...enesas.cdt.ddsc.packs.componentfiles.prefs | 18 + .../com.renesas.cdt.ddsc.settingseditor.prefs | 2 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 197 ++ .../org.eclipse.cdt.managedbuilder.core.prefs | 11 + .../e2studio/R7FA2E2A72DNK.pincfg | 46 + .../e2studio/configuration.xml | 311 +++ .../i3c_master_ek_ra2e2_ep Debug_Flat.jlink | 42 + .../i3c_master_ek_ra2e2_ep Debug_Flat.launch | 78 + .../e2studio/i3c_master_ek_ra2e2_ep.hex | 1227 ++++++++++ .../e2studio/ra_cfg.txt | 229 ++ .../e2studio/script/fsp.ld | 612 +++++ .../e2studio/script/memory_regions.ld | 21 + .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 2090 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 493 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 429 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 ++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 765 ++++++ .../e2studio/src/i3c_master_ep.h | 88 + .../i3c_master_ek_ra2e2_ep/i3c_notes.md | 136 ++ .../images/highLevel_i3c.jpg | Bin 0 -> 28713 bytes .../images/i3c_master_banner_info.jpg | Bin 0 -> 140654 bytes .../images/i3c_master_rtt_log1.jpg | Bin 0 -> 68049 bytes .../images/i3c_master_rtt_log2.jpg | Bin 0 -> 60238 bytes .../images/i3c_slave_banner_info.jpg | Bin 0 -> 107663 bytes .../images/i3c_slave_rtt_log.jpg | Bin 0 -> 39140 bytes .../i3c_master_ek_ra2e2_ep/readme.txt | 52 + .../i3c_slave_ek_ra2e2_ep/e2studio/.cproject | 297 +++ .../i3c_slave_ek_ra2e2_ep/e2studio/.project | 38 + .../e2studio/.settings/CoverageSetting.xml | 7 + .../.settings/DebugVirtualConsoleSetting.xml | 13 + .../e2studio/.settings/IORegisterSetting.xml | 4 + .../com.renesas.cdt.ddsc.content.prefs | 2 + ...enesas.cdt.ddsc.packs.componentfiles.prefs | 20 + .../com.renesas.cdt.ddsc.settingseditor.prefs | 2 + .../com.renesas.cdt.managedbuild.gnuarm.prefs | 4 + .../e2studio/.settings/language.settings.xml | 25 + .../.settings/org.eclipse.cdt.core.prefs | 197 ++ .../org.eclipse.cdt.managedbuilder.core.prefs | 11 + .../e2studio/R7FA2E2A72DNK.pincfg | 46 + .../e2studio/configuration.xml | 327 +++ .../i3c_slave_ek_ra2e2_ep Debug_Flat.jlink | 42 + .../i3c_slave_ek_ra2e2_ep Debug_Flat.launch | 79 + .../e2studio/i3c_slave_ek_ra2e2_ep.hex | 1129 +++++++++ .../i3c_slave_ek_ra2e2_ep/e2studio/ra_cfg.txt | 241 ++ .../e2studio/script/fsp.ld | 612 +++++ .../e2studio/script/memory_regions.ld | 21 + .../e2studio/src/SEGGER_RTT/SEGGER_RTT.c | 2090 +++++++++++++++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT.h | 493 ++++ .../e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h | 429 ++++ .../src/SEGGER_RTT/SEGGER_RTT_printf.c | 505 ++++ .../e2studio/src/common_utils.h | 71 + .../e2studio/src/hal_entry.c | 143 ++ .../e2studio/src/i3c_slave_ep.c | 662 ++++++ .../e2studio/src/i3c_slave_ep.h | 134 ++ .../i3c_slave_ek_ra2e2_ep/i3c_notes.md | 136 ++ .../images/highLevel_i3c.jpg | Bin 0 -> 28713 bytes .../images/i3c_master_banner_info.jpg | Bin 0 -> 140654 bytes .../images/i3c_master_rtt_log1.jpg | Bin 0 -> 68049 bytes .../images/i3c_master_rtt_log2.jpg | Bin 0 -> 60238 bytes .../images/i3c_slave_banner_info.jpg | Bin 0 -> 107663 bytes .../images/i3c_slave_rtt_log.jpg | Bin 0 -> 39140 bytes .../i3c_slave_ek_ra2e2_ep/readme.txt | 52 + 70 files changed, 15641 insertions(+) create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.project create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.jlink create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.launch create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep.hex create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/fsp.ld create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/memory_regions.ld create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/i3c_master_ep.h create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/i3c_notes.md create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/highLevel_i3c.jpg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_banner_info.jpg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_rtt_log1.jpg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_rtt_log2.jpg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_slave_banner_info.jpg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_slave_rtt_log.jpg create mode 100644 example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/readme.txt create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.cproject create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.project create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/IORegisterSetting.xml create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/language.settings.xml create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/configuration.xml create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.jlink create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.launch create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep.hex create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/ra_cfg.txt create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/fsp.ld create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/memory_regions.ld create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/common_utils.h create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/hal_entry.c create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.c create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.h create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/i3c_notes.md create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/highLevel_i3c.jpg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_banner_info.jpg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_rtt_log1.jpg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_rtt_log2.jpg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_slave_banner_info.jpg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_slave_rtt_log.jpg create mode 100644 example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/readme.txt diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.cproject b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.cproject new file mode 100644 index 0000000000..a5d6b6fd42 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.cproject @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.project b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.project new file mode 100644 index 0000000000..2ea1f94ab3 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.project @@ -0,0 +1,38 @@ + + + i3c_master_ek_ra2e2_ep + + + + + + com.renesas.cdt.ddsc.contentgen.ddscBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + com.renesas.cdt.ddsc.contentgen.ddscInterlockBundleBuilder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ddsc.contentgen.ddscNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..9554acb752 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,7 @@ + + + 1.0 + + + + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml new file mode 100644 index 0000000000..856e6788b6 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml @@ -0,0 +1,13 @@ + + + + + true + + false + + 0 + true + false + + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs new file mode 100644 index 0000000000..cce6e83772 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ddsc.content.defaultlinkerscript=script/fsp.ld +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs new file mode 100644 index 0000000000..f9c3845c6f --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs @@ -0,0 +1,18 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.8.0+renesas.0.fsp.3.5.0/all=3127123217,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|1017116116,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|3007265674,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|2381390623,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|1372010515,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|3898569239,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|1441545198,ra/arm/CMSIS_5/LICENSE.txt|364344841,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|4290386133,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|2333906976,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|1577199483,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|1044777225,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|3358993753,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|1564341101,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|1745843273,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|2851112248,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|304461792,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|2718020009,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|1168186370,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm55.h|302860276,ra/arm/CMSIS_5/CMSIS/Core/Include/cachel1_armv7.h|3163610011,ra/arm/CMSIS_5/CMSIS/Core/Include/pmu_armv8.h|3911746910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|1494441116,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|965562395,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|2701379970,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|3552689244,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h|2327633156,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.8.0+renesas.0.fsp.3.5.0/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2e2_ek\#\#\#\#3.5.0/all=3239291531,ra/board/ra2e2_ek/board_init.h|506167513,ra/board/ra2e2_ek/board.h|2892256288,ra/board/ra2e2_ek/board_init.c|1942221203,ra/board/ra2e2_ek/board_leds.h|703113810,ra/board/ra2e2_ek/board_leds.c +Renesas\#\#BSP\#\#Board\#\#ra2e2_ek\#\#\#\#3.5.0/libraries= +Renesas\#\#BSP\#\#ra2e2\#\#device\#\#\#\#3.5.0/all=2308894280,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2e2\#\#device\#\#\#\#3.5.0/libraries= +Renesas\#\#BSP\#\#ra2e2\#\#device\#\#R7FA2E2A72DNK\#\#3.5.0/libraries= +Renesas\#\#BSP\#\#ra2e2\#\#fsp\#\#\#\#3.5.0/all=793534509,ra/fsp/src/bsp/mcu/ra2e2/bsp_mcu_info.h|2527444713,ra/fsp/src/bsp/mcu/ra2e2/bsp_elc.h|2518953311,ra/fsp/src/bsp/mcu/ra2e2/bsp_icu.h|809680274,ra/fsp/src/bsp/mcu/ra2e2/bsp_feature.h +Renesas\#\#BSP\#\#ra2e2\#\#fsp\#\#\#\#3.5.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#3.5.0/all=568600546,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|3984836408,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|3549961311,ra/fsp/src/bsp/mcu/all/bsp_tfu.h|1499520276,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|1939984091,ra/fsp/inc/api/r_ioport_api.h|2308894280,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|1552630912,ra/fsp/src/bsp/mcu/all/bsp_guard.h|731782070,ra/fsp/src/bsp/mcu/all/bsp_irq.h|1353647784,ra/fsp/src/bsp/mcu/all/bsp_delay.c|2977689308,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1630997354,ra/fsp/src/bsp/mcu/all/bsp_irq.c|546480625,ra/fsp/inc/fsp_common_api.h|3492513568,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|3998046333,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/base_addresses.h|3983299396,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1904866635,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|470601830,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|3606266210,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|2920829723,ra/fsp/src/bsp/mcu/all/bsp_guard.c|2425160085,ra/fsp/inc/api/bsp_api.h|1992062042,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|1615019982,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|3255765648,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|4051445857,ra/fsp/src/bsp/mcu/all/bsp_common.h|2208590403,ra/fsp/inc/instances/r_ioport.h|1236602439,ra/fsp/src/bsp/mcu/all/bsp_io.c|3297195641,ra/fsp/inc/fsp_version.h|521902797,ra/fsp/src/bsp/mcu/all/bsp_security.h|460577388,ra/fsp/src/bsp/mcu/all/bsp_io.h|2386285210,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|2847966430,ra/fsp/src/bsp/mcu/all/bsp_security.c|400573940,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|4222527282,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|1728953905,ra/fsp/inc/fsp_features.h|3753300083,ra/fsp/src/bsp/mcu/all/bsp_arm_exceptions.h|2906400,ra/fsp/src/bsp/mcu/all/bsp_common.c +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_agt\#\#\#\#3.5.0/all=937966027,ra/fsp/inc/instances/r_agt.h|496001117,ra/fsp/src/r_agt/r_agt.c|232390045,ra/fsp/inc/api/r_timer_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_agt\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_i3c\#\#\#\#3.5.0/all=844149391,ra/fsp/inc/instances/r_i3c.h|2131973053,ra/fsp/inc/api/r_i3c_api.h|3200828695,ra/fsp/src/r_i3c/r_i3c.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_i3c\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#3.5.0/all=1939984091,ra/fsp/inc/api/r_ioport_api.h|2208590403,ra/fsp/inc/instances/r_ioport.h|3254285722,ra/fsp/src/r_ioport/r_ioport.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#3.5.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs new file mode 100644 index 0000000000..2e1942faad --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ddsc.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..0c9b5d059c --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_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=10.3.1.20210824 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..69d83f3144 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..e17ec91775 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,197 @@ +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_lambda_expression=20 +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_linkage_declaration=end_of_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.comment_formatter_off_tag=@formatter\:off +org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on +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_block_comment=true +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.format_header_comment=true +org.eclipse.cdt.core.formatter.format_line_comment=true +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_linkage=false +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_label_compare_to_statements=true +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_colon_in_constructor_initializer_list=insert +org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert +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_structured_binding_name_list=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_lambda_return=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_opening_structured_binding_name_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=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_closing_structured_binding_name_list=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_structured_binding_name_list=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_lambda_return=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_linkage_declaration=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_opening_structured_binding_name_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=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_ref_qualifier_in_structured_binding=do not 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_comment_formatter_tag=true +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs new file mode 100644 index 0000000000..35a921a149 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/CPATH/delimiter=; +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/CPATH/operation=remove +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/C_INCLUDE_PATH/delimiter=; +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/C_INCLUDE_PATH/operation=remove +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/append=true +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/appendContributed=true +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/LIBRARY_PATH/delimiter=; +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/LIBRARY_PATH/operation=remove +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/append=true +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1802379401/appendContributed=true diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg new file mode 100644 index 0000000000..a76ccb618e --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/configuration.xml b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..07220ea938 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/configuration.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Board Support Package Common Files + Renesas.RA.3.5.0.pack + + + I/O Port + Renesas.RA.3.5.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.8.0+renesas.0.fsp.3.5.0.pack + + + RA2E2-EK Board Support Files + Renesas.RA_board_ra2e2_ek.3.5.0.pack + + + Board support package for R7FA2E2A72DNK + Renesas.RA_mcu_ra2e2.3.5.0.pack + + + Board support package for RA2E2 + Renesas.RA_mcu_ra2e2.3.5.0.pack + + + Board support package for RA2E2 - FSP Data + Renesas.RA_mcu_ra2e2.3.5.0.pack + + + Asynchronous General Purpose Timer + Renesas.RA.3.5.0.pack + + + I3C + Renesas.RA.3.5.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.jlink b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.jlink new file mode 100644 index 0000000000..d07e7e8ab3 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.jlink @@ -0,0 +1,42 @@ +[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] +EraseType = 0x00 +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 +[RAM] +VerifyDownload = 0x00 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.launch b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.launch new file mode 100644 index 0000000000..9bf5f3435d --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep Debug_Flat.launch @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep.hex b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep.hex new file mode 100644 index 0000000000..512271b290 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/i3c_master_ek_ra2e2_ep.hex @@ -0,0 +1,1227 @@ +:10000000C05B0020313600001D3500002D36000099 +:100010002D3600002D3600002D3600002D36000054 +:100020000000000000000000000000002D3600006D +:100030002D360000000000002D3600002D36000097 +:10004000D52B00008D280000B92D00000000000015 +:1000500000000000B52D000000000000F52E00009B +:1000600000000000E12C000000000000BD32000094 +: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 +:1005000010B544F29004C2F20004237863B940F2BB +:100510000003C0F200032BB144F6D030C0F200005B +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB144F2940144F6D03040 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F8B58368C568CE4699465B1B4746984602 +:100560004368040080B50E0017005819904509D95A +:1005700003F050F9BFF35F8FED19E560C0BCB946D9 +:10058000B046F8BD424603F045F94B463100ED193F +:10059000ED1A2A006068414403F03CF9BFF35F8F15 +:1005A000E560EBE7F8B54746CE46884680B51600CD +:1005B000070040F20009C56884681CE0013B5B1B32 +:1005C000641BB44200D934009C4200D91C007B68F3 +:1005D00022004146581903F01DF92D19A144A044E9 +:1005E000361BBC68631B5A1E93415B421D40BFF320 +:1005F0005F8FFD6036B13B699D42DFD3013B1B1924 +:100600005B1BDDE74846C0BCB946B046F8BDC046F6 +:1006100010B544F2AC04C2F20004A822002120006C +:1006200003F001F9032343F6D4122361636144F21A +:100630006413C0F20002C2F20003A261E36141F25E +:10064000000323620023A3626362E362226644F232 +:100650005412C2F2000262661022A2662367E366A9 +:100660006367BFF35F8F43F6E0125321C0F20002CD +:1006700001E00F215156E1540133013A102BF8D11A +:10068000BFF35F8F10BDC046F8B544F2AC034546DA +:100690004E46DE465746C2F200031B78E0B5884658 +:1006A00006001500002B65D044F2AC02C2F2000235 +:1006B00094467700BB19DB0063441A6F9146DA6EEB +:1006C000924691452ED813004A462C009B1A9D4213 +:1006D00007D84CB92000F0BCBB46B246A946A0469C +:1006E000F8BD1C00002CF5D0A24644F2AC02C2F2C8 +:1006F00000029446BB19DB006344596E2200494452 +:100700004046A14403F086F85446002CE2D044F25F +:10071000AC03C2F200039C464B46BF19FF0067447E +:100720003B67D7E74A469B6E2C009B1A9D4228D810 +:1007300044F2AC02C2F200029346BB19DB009B44B8 +:100740005B46596E22004944404603F063F85B461D +:100750009B6EA1442D1B4B4515D053464A469B1A10 +:100760009A46554509D8002DCFD0A246A044AA44A8 +:100770002C00BAE7FFF74CFF96E75546002DC4D092 +:10078000F3E71C00D4E740F20009EAE710B50B00DC +:10079000EFF31084012181F310881900FFF774FF33 +:1007A00084F3108810BDC046431C70B50400580087 +:1007B000C01844F2AC03C2F200039C4663001B194C +:1007C000DB006344DC6AC00015006044012C05D0E6 +:1007D000022C1ED084B10024200070BD9A6A5C6A8D +:1007E000A2421FD9013A121B2C00954200D91400D5 +:1007F0002200FFF7ADFEEFE79A6A5E6AB2420CD9BB +:10080000013A921B9542E7D82A00FFF7A1FE2C007F +:10081000E2E7FFF7C7FE0400DEE71B6AD218013AE1 +:10082000921BEFE71B6AD218013A121BDCE7C046A5 +:10083000F8B544F2AC03C2F200031B7804000D00CB +:10084000160063B1EFF31087012181F310883200A5 +:1008500029002000FFF7A8FF87F31088F8BDFFF7F5 +:10086000D7FEEFE710B544F2AC04C2F200042378DF +:100870002BB1E36E206FC01A431E984110BDFFF7E5 +:10088000C7FEF6E710B5040083686268581C904202 +:1008900007D82268D154E36862680133E36003003B +:1008A000A0609A4200D010BD21682069FFF7C0FF08 +:1008B000A368984203D001235B42E360F3E700237F +:1008C000A360F0E7F8B557464E464546DE46E0B52C +:1008D0001E000A9B0F00814615009A460B9997420D +:1008E0006DD33B000122B3FBF5F301329D42FAD9EF +:1008F0009046B24200D2B04601231A000A40934605 +:100900000B4240D15346002B3DD020248B0751D4BD +:10091000D04538D201235B429C4621004846E24440 +:10092000FFF7B0FF4B46DB68002B26DB5346002B5E +:10093000EED10124012E03D9013E6C43012EFBD8D8 +:10094000B7FBF4F39D42F8D943F67826C0F20006CF +:1009500006E0B4FBF5F3AC420DD31C00B7FBF3F398 +:1009600022005A43F1564846BF1AFFF78BFF4B4609 +:10097000DB68002BEDDA5B46C3B9F0BCBB46B24680 +:10098000A946A046F8BD4B46DB68002BD1DAF4E758 +:10099000D045F2D201235B429C4620214846E244E6 +:1009A000FFF770FF4B46DB68002BE6DB5346002B5E +:1009B000EED1E2E77442744124012034A8E7012219 +:1009C00096E7C046F0B5DE4657464E464546E0B58A +:1009D0009DB00CAB079340230893002309930A931F +:1009E000B74B83460C00904640F201099A460B90A3 +:1009F00005E007A8FFF746FF0A98002861DB002101 +:100A000061560134002963D02529F2D12200002348 +:100A1000D356002602250820140021392D2B0DD095 +:100A20002D2B0FDC232B12D02B2B00D04CE10E43AF +:100A300001320023D35614002D2BF1D14B46013245 +:100A40001E43F6E7302B05D12E430132F1E7064372 +:100A50000132EEE71A00303AD2B20025092A0FD847 +:100A60001900AB005B195B005B1800210134615673 +:100A7000303B0A00303AD2B21D00092AF1D90B00EE +:100A80002E2B00D1CDE000230027E356042102E005 +:100A900000230134E3561A008A43682AF8D0252B34 +:100AA00007D0583BDBB2202B07D852469B00D358C7 +:100AB0009F46252107A8FFF7E5FE0A980134002884 +:100AC0009DDA1DB0F0BCBB46B246A946A046F0BDBB +:100AD0000A980028F5DD099A002A00D0BDE08018A8 +:100AE000EFE7434641461B6807A81A1D0A601968CC +:100AF00010223B0001960095FFF7E4FE01340A98AE +:100B0000DDE7434641461B6807A81A1D0A601968BD +:100B10000A223B0001960095FFF7D4FE01340A98A3 +:100B2000CDE7434641461B681A1D0A601D6805E073 +:100B300007A8FFF7A7FE0A980028BFDB0021695627 +:100B400001350029F4D10A98B8E7434641461B68AD +:100B500007A81A1D0A6019680023019308331022A0 +:100B60000093FFF7AFFE01340A98A8E743464146D9 +:100B70001B681A1D1B680A60DA1703939B18534001 +:100B80000122092B06DD0A201900013293FBF0F344 +:100B90006329F9DC0497974267D385B3039B002B45 +:100BA00067DB730765D4B30700D547B34B463342C1 +:100BB00025D125B30596049EAE421FD207A8202159 +:100BC000FFF760FE0A98013D002800DA76E7002D65 +:100BD000F2D1059E039B002B4DDB730756D40323F4 +:100BE0003340022B57D007A83B000A2203990196F5 +:100BF0000095FFF767FE01340A9860E7059E0A98A2 +:100C00000028E7DA01345AE7434641461B6807A843 +:100C10001A1D0A6000215956FFF734FE01340A9864 +:100C20004DE70123E356611C1A00303AD2B20C00A2 +:100C30000027092A00D929E71900BB00DB195B004E +:100C40005B18002101346156303B0A00303AD2B2C1 +:100C50001F00092AF1D90B0018E758460CA9FFF725 +:100C6000E7FD0A98099A80182BE70492002DC6D058 +:100C700094E7013D97E75B422D2107A80393FFF717 +:100C800001FE0A980028AADA013418E72B2107A8E8 +:100C9000FFF7F8FDF5E7002FA5D19DB1049BAB420E +:100CA00009D207A83021FFF7EDFD0A98013D002881 +:100CB000F3DA013403E70A98002894DA0134FEE6F7 +:100CC000F439000000258EE70025DCE60EB400B5FF +:100CD00082B003AB02CB01AA0193FFF773FE02B00F +:100CE00008BC03B01847C04645F26C2010B5C2F2EC +:100CF000000001F0C7F800B910BD43F6882344F6A0 +:100D0000740243F6AC21C0F20003C0F20002C0F24C +:100D100000010020FFF7DAFFEEE7C04645F2CC20E5 +:100D200010B5C2F2000002F087FA00B910BD43F618 +:100D3000C82344F6680243F6AC21C0F20003C0F2B7 +:100D40000002C0F200010020FFF7C0FFEEE7C0463E +:100D5000F8B545F265150023C2F200052B700400BA +:100D600045F2602345F2CC2040F6B832C2F20003CF +:100D7000C2F200001A6002F045FA060000285FD1B6 +:100D800045F2CC20C2F2000002F008FA060008BBCF +:100D900045F298110127C2F200012B78C3B9002354 +:100DA00000269A00885828B1380098400643885891 +:100DB0000138885001330C2BF3D1300020402642FB +:100DC000EBD045F2C8130022C2F200031A6000E023 +:100DD0000020F8BD43F61033C0F2000344F69C0235 +:100DE00043F6AC21C0F20002C0F200010020FFF780 +:100DF0006DFF43F6543344F6C00243F6AC210020A5 +:100E0000C0F20003C0F20002C0F20001FFF75EFF73 +:100E100045F26C20C2F2000001F034F8A8B945F2A6 +:100E2000CC20C2F2000002F007FA28BB43F63431AE +:100E30003200C0F200010020FFF748FF00BEA7E724 +:100E400043F6EC23C0F20003C8E743F6882344F6D8 +:100E5000740243F6AC210020C0F20003C0F200028D +:100E6000C0F20001FFF732FF45F2CC20C2F20000D1 +:100E700002F0E2F90028D9D043F6C82344F668020C +:100E800043F6AC21C0F20003C0F20002C0F2000140 +:100E90000020FFF71BFFC9E745F268110623C2F2E5 +:100EA000000110B545F26C200B700023C2F2000067 +:100EB0008B814B608B6001F09DF9040010BB80209A +:100EC000FFF746FF70B143F608410020C0F2000171 +:100ED000FFF7FCFE45F2F0130022C2F200031A6095 +:100EE000200010BD43F6C43344F6101243F6AC2183 +:100EF000C0F20003C0F20002C0F20001FFF7E6FEFC +:100F00001424E0E743F6983344F6101243F6AC217C +:100F1000C0F20003C0F20002C0F200010020FFF79F +:100F2000D5FEDDE7F0B5DE4657464E464546002382 +:100F3000E0B58FB009AC0C2200210BA809930A93ED +:100F400002F071FC200002F0ADFA6278E3780192C1 +:100F5000A27843F65841009243F65442C0F2000191 +:100F6000C0F200020020FFF7B1FE43F6B4510020AA +:100F7000C0F20001FFF7AAFE44F6941145F2CC201E +:100F8000C0F20001C2F2000002F014F804000028D0 +:100F900000D0A7E344F6401145F26C20C0F20001F6 +:100FA000C2F2000001F0A8F80400002800D07EE39F +:100FB00044F254010020C0F20001FFF787FE44F222 +:100FC000000145F26C20C2F20001C2F2000001F003 +:100FD000F7F80400002800D04CE345F29014C2F268 +:100FE000000405220021200002F01DFC712345F2BF +:100FF0006C20637090336380013B2200FF3B002133 +:10100000C2F20000637100F0B7FF0400002800D0B6 +:1010100013E345F26C20C2F2000001F0BFF90400B6 +:10102000002800D0ECE245F2CC1145F26C202022E1 +:10103000C2F20001C2F2000000F0DCFE0400002851 +:1010400000D0C0E245F25C2B45F2F413C2F2000B73 +:101050005A4645F26C20C2F20003136007210123B7 +:101060000022C2F2000000F07DFE0400002800D043 +:101070008CE24020FFF76CFE45F2641345F2F01855 +:10108000C2F200031B78C2F2000823B143461B687A +:10109000002B00D069E244F2DC110020C0F2000114 +:1010A000FFF714FEFFF7F8FE0400002800D032E33B +:1010B00044F258210020C0F20001FFF707FE45F27C +:1010C0003423C2F20003059345F25823C2F2000311 +:1010D000079345F2EC1345F27C1445F2542945F28E +:1010E000781A45F2661745F26716C2F20003C2F29B +:1010F0000004C2F20009C2F2000AC2F2000704931F +:10110000C2F20006FFF7AEFB10BB40F6C630FFF799 +:101110001FFE8307F6D53B78EBBB3378002BF1D06D +:1011200044F2D8710020C0F20001FFF7CFFD049B0C +:1011300044F608011A78534600201B68C0F20001EB +:10114000FFF7C4FD00233370FFF78CFB0028DCD0D1 +:10115000102200210AA802F066FB10220AA9002032 +:10116000FFF714FB0AA802F03BFBFF2318400128FD +:1011700000D199E0022835D044F278610020C0F215 +:101180000001FFF7A3FD44F258210020C0F2000146 +:10119000FFF79CFDB9E744F288610020C0F200012E +:1011A000FFF794FD45F26C20012300220721C2F2D3 +:1011B000000000F0D7FD0500002800D0C1E040206D +:1011C000FFF7C6FD002800D12EE1002344F24C7148 +:1011D00042463B70C0F20001013300201360FFF76C +:1011E00075FD9AE74B46059A1D68100045F23423B9 +:1011F000E9B2C2F200032030891ACA181A7001330A +:101200009842FAD14B4645F2342145F26C20013523 +:101210001D6020220023C2F20001C2F2000001F092 +:1012200085FA0500002800D0C5E040F20010FFF765 +:101230008FFD002800D121E1012140F2F41002F0DD +:101240003FF9594645F26C20002320220968C2F27A +:10125000000000F0D7FE0500002800D01FE140F29A +:101260000020FFF775FD002800D107E145F234208A +:10127000079B20221B68C2F200001900069302F0AF +:10128000BBFA002800D05FE144F2B051C0F2000187 +:10129000FFF71CFD534644F2FC511A68C0F20001EE +:1012A0000020FFF713FD6EE743461A681AB963780A +:1012B000002B00D1C7E044F23C410020C0F2000105 +:1012C000FFF704FD44F26C410020C0F20001FFF77B +:1012D000FDFC44F2A0410020C0F20001FFF7F6FC43 +:1012E00044F26C410020C0F20001FFF7EFFC44F231 +:1012F000D4416278C0F200010020FFF7E7FC44F21D +:10130000F441227AC0F200010020FFF7DFFC44F232 +:101310001451627AC0F200010020FFF7D7FCE17996 +:10132000E378A2780391A17900200291617901917B +:101330002179009144F23451C0F20001FFF7C6FC5C +:1013400021E744F2D86344F6800243F6AC21C0F2B0 +:101350000003C0F20002C0F200010020FFF7B6FC5B +:1013600044F2147344F6281243F6AC210020C0F274 +:101370000003C0F20002C0F20001FFF7A7FC45F233 +:101380006C20C2F2000000F07DFD002800D09BE040 +:1013900045F2CC20C2F2000001F04EFF002800D040 +:1013A00082E043F634312A00C0F200010020FFF74A +:1013B0008DFC00BEB1E644F26853C0F2000344F66F +:1013C000D80243F6AC210020C0F20002C0F20001B6 +:1013D000FFF77CFC44F2406344F6281243F6AC214C +:1013E0000020C0F20003C0F20002C0F20001FFF7CB +:1013F0006DFC45F26C20C2F2000000F043FD0028B5 +:1014000000D081E045F2CC20C2F2000001F014FFD0 +:10141000002869D143F634312A00C0F200010020CF +:10142000FFF754FC00BEAEE643F6C43344F6800238 +:1014300043F6AC21C0F20003C0F20002C0F200018A +:10144000FFF744FCC1E644F2D42344F6F40243F629 +:10145000AC21C0F20003C0F20002C0F20001002083 +:10146000FFF734FCFFF718FD00285DD144F2C831C6 +:101470000020C0F20001FFF729FC84E643F6C433E4 +:1014800044F6D80243F6AC210020C0F20003C0F2BB +:101490000002C0F20001FFF719FC14259AE744F29C +:1014A0008C53C0F200038AE743F6C82344F668026F +:1014B00043F6AC21C0F20003C0F20002C0F200010A +:1014C0000020FFF703FC6CE743F6882344F6740220 +:1014D00043F6AC21C0F20003C0F20002C0F20001EA +:1014E0000020FFF7F3FB53E743F6C82344F66802F6 +:1014F00043F6AC21C0F20003C0F20002C0F20001CA +:101500000020FFF7E3FB85E743F6882344F67402E7 +:1015100043F6AC21C0F20003C0F20002C0F20001A9 +:101520000020FFF7D3FB6DE744F2683344F6F40282 +:1015300043F6AC21C0F20003C0F20002C0F2000189 +:101540000020FFF7C3FB1EE644F21C6344F6D802FA +:1015500043F6AC210020C0F20003C0F20002C0F24A +:101560000001FFF7B3FB252534E744F27811002092 +:10157000C0F20001FFF7AAFB434644F2B0111A681B +:10158000C0F200010020FFF7A1FB91E544F23C13FB +:1015900044F6281243F6AC21C0F20003C0F2000268 +:1015A000C0F200010020FFF791FBFFF79DFBFFF762 +:1015B000B5FB43F634312200C0F200010020FFF7F2 +:1015C00085FB00BE55E544F2141344F6281243F699 +:1015D000AC21C0F20003C0F20002C0F20001002002 +:1015E000FFF774FBFFF780FBFFF798FB43F63431FE +:1015F0002200C0F200010020FFF768FB00BE21E5D9 +:1016000044F2EC0344F6281243F6AC21C0F2000386 +:10161000C0F20002C0F200010020FFF757FBFFF705 +:1016200063FBFFF77BFB43F634312200C0F200017D +:101630000020FFF74BFB00BEF5E444F2B80344F68C +:10164000281243F6AC21C0F20003C0F20002C0F23F +:1016500000010020FFF73AFBFFF746FBFFF75EFBB8 +:1016600043F634312200C0F200010020FFF72EFBC8 +:1016700000BECEE444F28C0344F6281243F6AC21BB +:10168000C0F20003C0F20002C0F200010020FFF728 +:101690001DFBFFF729FBFFF741FB43F63431220026 +:1016A000C0F200010020FFF711FB00BE95E444F2F8 +:1016B000300344F6281243F6AC21C0F20003C0F216 +:1016C0000002C0F200010020FFF700FBFFF726FB3D +:1016D00043F634312200C0F200010020FFF7F6FA91 +:1016E00000BE65E444F20C0344F6281243F6AC2134 +:1016F000C0F20003C0F20002C0F200010020FFF7B8 +:10170000E5FA43F634312200C0F200010020FFF771 +:10171000DDFA00BE3EE444F2242344F6281243F6E8 +:10172000AC21C0F20003C0F20002C0F200010020B0 +:10173000FFF7CCFAFFF7D8FAFFF7F0FA43F63431A7 +:101740002200C0F200010020FFF7C0FA00BEAFE4A3 +:1017500000B583B040B94CF2000390220121C4F2DD +:101760007E03995403B000BD0228FBD144F6341324 +:1017700045F26420C0F200035B68C2F20000190069 +:10178000019300F0C1FAEDE745F2C8134268C2F2D6 +:10179000000370B51A6045F298130478C2F2000392 +:1017A000A100CA580132CA50092C08D82D4B5B58E9 +:1017B0009F4645F278138268C2F200031A6070BD3A +:1017C00045F264130122C2F200031A70F7E745F2F2 +:1017D00078138268C2F200031A6045F25C2245F277 +:1017E000582145F2F413C2F200021068C2F200015F +:1017F000C2F20003086098421CD01360DFE745F294 +:101800007C147123C568C2F2000406222900A01CC2 +:10181000637001F0FFFFAB792372EB796372CEE75F +:10182000437C5BB1012BCAD145F26612C2F20002C1 +:101830001370C4E7030020331360C0E745F2671359 +:101840000122C2F200031A7045F278138268C2F2D4 +:1018500000031A6045F2EC13827CC2F200031A7096 +:10186000ADE7C0464048000045F26022C2F20002E7 +:10187000136810B5013B136003B110BD45F2651349 +:1018800045F2CC200122C2F20003C2F200001A701D +:1018900001F09EFCF1E7C04610B5FFF743FB0020C6 +:1018A00010BDC04660B145F254230268C5F24F0333 +:1018B0009A4203D100230360002070470720FCE711 +:1018C0000120FAE70620704710B5B8B145F254235D +:1018D0000068C5F24F03984212D17AB1FF2040F65A +:1018E00000040B0A0840190109180020C4F204047E +:1018F00089000B599B07DB0F137010BD0120FCE71B +:101900000720FAE790B145F254230068C5F24F036F +:1019100098420DD152B10023C4F204039C4600202A +:10192000090A490161444B68138070470120FCE7B4 +:101930000720FAE710B5D0B145F254240068C5F28B +:101940004F04A0420FD183B10020C4F204008446AA +:101950001800904300041A4002430020090A49017C +:1019600061448A6010BD0720FCE70320FAE70120EC +:10197000F8E7C04600B345F254230068C5F24F03B0 +:10198000984213D1012A15D8FF2001230840834033 +:1019900072B14FF6FF7213400022C4F20402944663 +:1019A000090A4901614400208B6000E0072070476C +:1019B0001B04F1E70320FAE70120F8E710B5D8B1DE +:1019C00045F254240068C5F24F04A04210D18BB1F7 +:1019D0000020C4F2040084461000090A4901614451 +:1019E0000C6818402043934398430860002010BDC2 +:1019F0000720FCE70320FAE70120F8E7C0B145F231 +:101A000054230068C5F24F03984213D182B10123D9 +:101A1000090A8B40062018420ED00023C4F20403AA +:101A20009C460020490161444B681B0C13807047A1 +:101A30000120FCE70720FAE70320F8E730B510B3F0 +:101A400045F254230068C5F24F0398421DD1D2B12C +:101A5000012420000B0A9840062505421AD00020D8 +:101A6000C4F2040084465B0163445868FF231940B4 +:101A700023008B40000C99B20340994207D0002309 +:101A80000020137030BD0120FCE70720FAE700209A +:101A90001470F7E70320F5E710B5F8B145F25424C8 +:101AA0000068C5F24F04A04216D19BB10120090A7B +:101AB0008840062404420DD00020C4F2040084466D +:101AC000180090430004134003430020490161447F +:101AD000CB6010BD0320FCE70720FAE70120F8E700 +:101AE00030B5002835D045F254240368C5F24F04C0 +:101AF000A3421DD1012A19D801231C00080A8440E1 +:101B00000625254212D04001012A13D00022C4F23A +:101B100004029446FF2211408B406044C4681B04B9 +:101B200023431B0C1B04C360002000E0032030BDD6 +:101B30000720FCE70023FF24C4F204039C46214055 +:101B40004FF6FF738A406044C5681A402A43134029 +:101B5000E9E70120EBE7C046F0B5002854D045F294 +:101B600054230468C5F24F0307209C4200D0F0BD07 +:101B7000EFF31080012383F3108845F23034C2F272 +:101B80000004236833B940F60055C4F20405EB7035 +:101B90004033EB7023680133236080F31088D30354 +:101BA00021D4FF200B0A0840190140F60003091850 +:101BB000C4F204038900CA50EFF31082012383F3B7 +:101BC0001088236813B12368013B2360236833B96D +:101BD00040F60051C4F20401CB708033CB7082F325 +:101BE00010880020C3E7FF2040F600050B0A0840DC +:101BF00019010B18C4F204059B005F59034E3740CE +:101C000016405F515E51D0E70120B0E7FFFFFEFFB5 +:101C1000F0B5DE4657464E464546E0B583B0EFF395 +:101C20001082012383F3108845F23033C2F200039F +:101C300001931B6833B940F60051C4F20401CB7024 +:101C40004033CB7001990B6801330B6082F310882D +:101C500003889A46BBB3802340F600055B02994691 +:101C6000284B002240F2FF089C464168C4F204055C +:101C70000AE043461E4023019B1901329B0092B2A9 +:101C80005851083192451ED04B468E880868340A58 +:101C90001842EED043461E4023019C19A70064461B +:101CA00000977F599B1927403C00009F01327C51CF +:101CB000674607403C00009F9B0092B27C51083170 +:101CC00058519245E0D1EFF31082012383F310883D +:101CD000019B1B681BB101990B68013B0B60019BC9 +:101CE0001B6833B940F60051C4F20401CB70803355 +:101CF000CB7082F3108803B0F0BCBB46B246A94655 +:101D0000A046F0BDFFFFFEFF030010B5080073B151 +:101D100069B14A685AB145F254221968C5F24F02B6 +:101D2000914206D01A60FFF773FF002010BD01201A +:101D3000FCE70E20FAE7C046030010B508006BB1BF +:101D400045F254221B68C5F24F02934208D129B1D3 +:101D50004B681BB1FFF75CFF002010BD0120FCE7C2 +:101D60000720FAE730B5C8B343F243340568C0F240 +:101D70004904A54234D18468882C33D08468002C6F +:101D800030D0032A25D9202A28D107292ED02BBBD1 +:101D90008468012C28D10534846004009B06C901A5 +:101DA0001943322318344463002508241204CCF26A +:101DB00000030A431A4340F250138563C46340682A +:101DC000C25040F2E012C5508358A3438350002014 +:101DD00005E00729DBD1D418032CD9D9012030BD67 +:101DE0000720FCE70520FAE70820F8E7012BCFD011 +:101DF000F4E7C046F0B5CE46474680B5C8B343F2D7 +:101E000043330468C0F249039C4237D189B382B39B +:101E10008368882B34D08368042B31D08368002BEF +:101E20002ED040F21F093C274C46C36D1B69DE577C +:101E30009C46730926401E3C2500B5404EF2001614 +:101E40002033CEF200069B009D51BFF34F8FBFF3AE +:101E50006F8F0023C26450228364416483546346BD +:101E60004D46DA5700201540AC4053099B009C5169 +:101E700000E00120C0BCB946B046F0BD0720F9E73C +:101E80000520F7E70200F0B5002800D172E043F228 +:101E900043330168C0F24903994200D068E0012150 +:101EA000C36D0E001C693823E056193B45091840E4 +:101EB00086404EF200102035CEF20000AD002E50CC +:101EC000BFF34F8FBFF36F8F39250F00665775092A +:101ED0001E40B7402035AD002F50BFF34F8FBFF3EA +:101EE0006F8F3A250F00665775091E40B7402035A1 +:101EF000AD002F50BFF34F8FBFF36F8F3B250F0007 +:101F0000665775091E40B7402035AD002F50BFF30E +:101F10004F8FBFF36F8F3C2565576C092B400D0029 +:101F20009D40230020339B001D50BFF34F8FBFF314 +:101F30006F8F536858694000400858611962186AE9 +:101F40000028FCD1EFF31085012383F31088D46DB2 +:101F500046F6FC7127680924E41BA340C4F204017F +:101F60004E6833434B604B6885F310881060F0BDBA +:101F70000720FCE70120FAE730B5002832D043F211 +:101F800043330468C0F249039C422DD152B3137904 +:101F9000002B35D120292DD040F2242C0124436878 +:101FA000C90063445918D378634054795B03240310 +:101FB000234344F200041C43537818095840850811 +:101FC00068404508684001258543E80103437F20B8 +:101FD00015781B04284092780343234332B1002034 +:101FE0000B6030BD0120FCE70720FAE780221206D3 +:101FF0001343F4E740F2A02C416800246144DBE77E +:102000000620EEE7F0B5D6464F4646460400C0B57A +:10201000002843D043F243302568C0F2490085428E +:102020003ED100293AD0A068002863D0A068882853 +:1020300002D0A06801285BD140F2390C40F21F0A9F +:102040006546E06D006947575546804678092F4040 +:102050001E3D2E00BE404EF200172030CEF200078B +:102060008000C651BFF34F8FBFF36F8F00206163B5 +:102070004021A063E26360544146604656460856DC +:102080000640B54041098900CD51A16800200129D1 +:1020900008D0E0BCBA46B146A846F0BD0120F8E73A +:1020A0000720F6E7E0260831A160217D7605890644 +:1020B000314080263606B446DB07634465680B432F +:1020C000216900240904C0F2FF1421400B43482178 +:1020D000C6F200010B4340F2501112046B506A50DB +:1020E00040F2E0124939AB58FF398B43AB50D0E78F +:1020F0000820CEE70520CCE770B505000C000028CD +:1021000057D0002955D08B68002B52D00B69002B7B +:102110004FD043F243320168C0F2490291424AD0A3 +:1021200038229A5C7F2A44D83B229A5C7F2A40D886 +:102130003A229A5C7F2A3CD839229A5C7F2A38D886 +:102140003C229A5C7F2A34D83D229B5C7F2B30D87E +:102150002379012B31D000211F32043001F063FBC1 +:1021600043F24333C0F249032B60EC65EFF3108C6C +:10217000012181F310880920246846F6FC73001BB6 +:102180000C008440C4F204035A68A2435A605B689E +:102190008CF3108843F20003C4F208036B605A69A1 +:1021A000520052085A611962186A0028FCD118605E +:1021B00000E0012070BD0E20FCE70620FAE7C046D3 +:1021C000030098B143F243320068C0F249029042E2 +:1021D0000ED159B1DA6D0020127932B980224978D6 +:1021E0005B68090412060A439A6170470120FCE704 +:1021F0000720FAE7F0B5D6464F464646C0B5002858 +:102200004ED043F243330268C0F249039A424DD1A3 +:10221000002945D08D6815B14B68002B40D08368EC +:10222000882B47D08368002B44D00A78912A00D1AC +:10223000AFE08368012B3BD102734C7B0300002C81 +:102240003AD0002634331E73873686604E689D6010 +:102250001E6000265E600B7B802109068C46D20141 +:1022600061070A430021DB07634413430269C0F29C +:10227000FF1112040A40134348F23802C4F200026C +:10228000134340F2501208214668B3502B04B35058 +:102290009032B3588B43B35004B98DB9002000E09D +:1022A0000120E0BCBA46B146A846F0BD0720F8E7D9 +:1022B0000820F6E70520F4E7072628338660C5E7FF +:1022C000826A0121944649426144002200248846E2 +:1022D000C36A076B9F4207D941460133C95C9140ED +:1022E00008320C43202AF5D101225242914640F295 +:1022F0005818CC4440F2983A40F2FF09C362046295 +:102300004246B450BB4220D2002100246246013331 +:10231000D25C8A401443182902D008319F42F5D874 +:1023200052464946B258C36204621142E8D140F2B3 +:10233000E0120121B3588B43B350082DAED90832B7 +:10234000B35800201943B150ABE740F2E811012225 +:102350007358114F93437350C36D19693A23C8568C +:1023600046F200010300C033C4F200019B005C5838 +:102370003C405C501F2101408A404EF2001143094D +:1023800060339B00CEF200015A5040F29833F3586C +:10239000CDE7062085E7C046FFFFFEFFF0B5DE462D +:1023A00057464E464546E0B5030083B0002800D1AD +:1023B000B4E143F243320168C0F24902914200D0D5 +:1023C000A2E182689046002A00D0A4E1C06D59685D +:1023D000026914684C6754688C670079002800D043 +:1023E00095E1013098601530C0F21000C02540F230 +:1023F0009014ED020D51002440F294154C512C35EF +:102400004C5140F2D41640F20044A93DC0F21105EF +:102410004C638D5140F23F251036C0F210058D51AE +:102420008C63042440F2D815C0F210044C5140F2E1 +:10243000E814157B0851E83CFF3C4869AC43B94DB2 +:102440002402284020434861157B6C07E40F60009C +:102450000824AE072540F60F284330438865107ADC +:102460008507C607ED0F6C07F608558934432C43E2 +:102470004507ED0F0007AD07C00F2C43C0072043F1 +:10248000B024085110695469C86780200C509469C1 +:1024900004300C50107F08B99024085180204C69FA +:1024A000000620434EF20014486138210326CEF284 +:1024B0000004A4465156FF2788080E40F60080000D +:1024C0006044B4463E26965D40F20035B601374082 +:1024D0000097FF266746BE40445940F2C00CB44303 +:1024E000009E8C44BE403443445145F234308C004D +:1024F000C2F200002350019046F200046046C4F28C +:10250000000480008446884E005940F2801B304011 +:10251000814660464F4607511F20084084460120EF +:102520006746B84084464EF20010CEF20000814665 +:10253000674658464909890049440F500F603921C0 +:102540005156880880008446CC44604640598146F4 +:1025500003200840C0008246FF2057464E46B84040 +:1025600086430098B840824630005746384381463B +:1025700060464F4640F2C00C019E47518C44880093 +:102580008351604680008446674E00593040814642 +:1025900060464F4607511F20084084460120674689 +:1025A000B84084464EF20010CEF2000081466746E5 +:1025B00058464909890049440F500F603A21515645 +:1025C000880880008446CC446046405981460320F8 +:1025D0000840C0008246FF2057464E46B84086431A +:1025E0000098B840824630005746384381466046DE +:1025F0004F4640F2C00C019E47518C4488008351E5 +:1026000060468000844667460059474E40F23F0AC4 +:10261000304038511F200840844601206746B840AA +:102620004EF20017CEF20007B9465F46490989000D +:102630004944C85108603C21515603208F08BF000F +:10264000BC46CC4467467F590840B946C700FF20C6 +:102650004E46B8408643B146009E0198BE404F4664 +:102660003E4367467E518E0033500E00C036B600A2 +:1026700037592D48074037511F2601270E40B740D4 +:102680003E004EF20017CEF20007BC465F464909F5 +:1026900089006144CE510E603D2151568E08B6002E +:1026A000B44467467F590326B9465746D25D0E406B +:1026B000C0379201F6003A40B240B7404E46BE43A2 +:1026C000674632437A51019D8A0053510B00C03353 +:1026D0009B001A5902401A511F2301220B409A40B5 +:1026E00013004EF20012CEF2000294465A464909F7 +:1026F000890061448B500B60404603B0F0BCBB4680 +:10270000B246A946A046F0BD40F20708F4E7122001 +:10271000C0F210006AE640F20508EDE740F2010859 +:10272000EAE7C046FFFEFFFFFFFFFEFFF0B54F46A2 +:10273000D64646469C46C0B50700A0B143F2433397 +:102740000068C0F2490398420FD161B1BB68002B09 +:1027500000D196E0BB680820012B08D0E0BCBA4647 +:10276000B146A846F0BD0120F8E70720F6E70023B0 +:1027700000240026FB623A63B962A24206D00B5DD8 +:10278000E000834001341E43042CF6D140F2581877 +:1027900040F2983A40F2FF097B68FC623E62481EB4 +:1027A00041465E50A24245D9002500260134015D14 +:1027B000A9400E43182D02D00835A242F6D8514642 +:1027C0004D465958FC623E620D42E9D140F2E0109C +:1027D00001241958A1431950082A03D9083019585F +:1027E0000C431C50B96800200129B7D1E024802691 +:1027F000397D640589060C4036066146B4460026DC +:10280000C907614421433C69C0F2FF1624043440E7 +:1028100021434024C4F200042143082540F250140F +:10282000BD60195140F2E01112041A515A58AA43DE +:102830005A5093E740F2010940F2E814484619590A +:1028400081431951F96D10480C693A21655646F2D9 +:1028500000042900C031C4F2000489000E5906406A +:102860000E511F2448462C40A0404EF20014690926 +:1028700060318900CEF20004085140F29831595875 +:10288000A4E705206AE7C046FFFFFEFFF0B5DE467D +:1028900057464E464546E0B58FB0EFF3038345F209 +:1028A000343246F20006103B5BB29900C0339B0005 +:1028B000C2F20002C4F200068C58C34F9A5940F28B +:1028C000E0113A409A5140F254131020656840F2EA +:1028D0000109EA586B5883436B504FF6FF7313405E +:1028E000120F0392E26D01939046D268A36807929B +:1028F0004A466239FF39194002A80170A260082BCC +:1029000000D989E0062B00D905E105D1200010226D +:102910000021343000F087FF002600236365E13397 +:10292000FF33EB589A0603D56A69A8490A406A61E1 +:102930009B0501D4002E5ED01A231A222B622B6A2B +:102940001A42FCD140F2CC3240F2102102E06B5826 +:102950009B0702D4AB589B07F9D4002E00D0BBE0F4 +:1029600080236A69DB0513436B6140F2CC33EB587B +:102970009B0740D44EF2000145F2BC33C4F2010182 +:102980000A6AC2F200031B685201520F93400A6A9E +:1029900004265207520FD3401A0043461B690127F1 +:1029A0001868FF23010A1940034044F23F20B2FB9C +:1029B000F1F1C0F20F00B2FBF3F30A18B2FBF1F928 +:1029C0001A18B2FBF3F8CB4640F2803AC344012117 +:1029D000584600F075FD53466568013EEB58DB062E +:1029E0005A4253415B421F40002EF0D1002F00D0CD +:1029F000BDE0E36D984640F2E0127549AB5802A87D +:102A00000B40AB5043469B6898470FB0F0BCBB46A9 +:102A1000B246A946A046F0BD092B02D0872B00D0B4 +:102A20007AE740F29833EB581B041B0E002B00D1C1 +:102A300099E02700666D019B40F2581BE26B9E1BDC +:102A40003437002E3ADD5B4640F2E0110220EB58AD +:102A500040F2030A98466B5840F2010983436B50D9 +:102A60000025A36B934215D33B7B002B4BD1142243 +:102A7000002108A800F0D7FE524602AB1A76E36D9B +:102A800008A8DA689B680D924A463A7398473B7BE0 +:102A9000C3BBA36B41465A1CA263EA00D1400A00A3 +:102AA000616B0135CA54042D2CD0E26BB542D8D3EA +:102AB000636D04336365E36D65689846019938007A +:102AC0008A1A531E9A410491D6B20021102200F0B6 +:102AD000AAFE0023237320E740F2E8130421EA58FA +:102AE00040F2E0108A43EA50802252022A62002219 +:102AF0002A6284326A622A588A432A50EA580A4370 +:102B0000EA5032E7E26B636D043E04336365002EE6 +:102B1000D1DD656897E72000019A236B00219B1A9D +:102B200028300C22049300F07EFE40F2E812494661 +:102B3000AB588B43AB5042463A231269D1560B0037 +:102B4000C0339B009A5917409F511F234A090B40DD +:102B5000494699400B004EF200116032CEF200015E +:102B600092005350D8E62700E26B3437A6E788235B +:102B700005220121EA50404600F0A2FC09258826E2 +:102B8000072740F2050A6368012148469F5100F07B +:102B900097FC52466368012140469A51013D00F07E +:102BA0008FFC002DEFD10423626801219351404630 +:102BB00000F086FC0623626801214846935100F02C +:102BC0007FFC6568AF5114E7FFFFFEFFFFFFFFDFEB +:102BD000DFFDFFFFF0B5D6464F464646C0B586B08E +:102BE000EFF3038345F23432103B5BB29900C2F23B +:102BF00000028C5846F20002C033C4F200029B006F +:102C0000995836480140995040F2E012636899584B +:102C1000D13AFF3AC0F21002114219D0A368062B34 +:102C200005D006B0E0BCBA46B146A846F0BDA36BDD +:102C3000082BF6D100236A46A363137023001833D0 +:102C40000393E36D6846DA689B6805929847E8E766 +:102C500040F298329A581204120E9600002ADDD0E3 +:102C6000270040F2581A3437524640F2E011022051 +:102C7000002540F203099A5890465A5882435A5008 +:102C8000A36BE26B934214D33B7BFBB9142200216C +:102C9000684600F0C8FD6B464A461A70E36D684608 +:102CA000DA689B68059201223A7398473B7B6BB9BF +:102CB000A36B41465A1CA263EA00D1400A00616B33 +:102CC0000135CA54042D01D0B542D9D3636D043EF9 +:102CD00004336365002EA1DD6368C5E7FFFFFEFFD7 +:102CE000F0B5CE46474680B5EFF3038345F2343264 +:102CF000103B5BB29900C2F200028E5846F200020D +:102D000040F2581C40F2983940F2FF08C0339B0053 +:102D1000C4F2000299582648014099507568376BF3 +:102D2000306AF36A6246A8509F421DD900210020F4 +:102D3000B26A541E0133E25C8A401043182902D063 +:102D400008319F42F6D84A464146AA58F36230629B +:102D50001142E7D140F2E0120121AB588B43AB5056 +:102D6000C0BCB946B046F0BD40F2E81101226B5834 +:102D700093436B50F36D0E4E19693A23C85646F2D1 +:102D800000010300C033C4F200019B005C583440D2 +:102D90005C501F2101408A404EF20011430960330C +:102DA0009B00CEF200015A5040F29833EB58D1E725 +:102DB000FFFFFEFF7047C046F0B5DE4657464E4661 +:102DC0004546E0B589B0EFF3038345F23432103B5A +:102DD0005BB29900C2F200028C5846F20002C03386 +:102DE000C4F200029B0099584148FF2601409950C7 +:102DF00040F27C1263689A5816400192A26D9219B3 +:102E0000A265F21C9208B2B392002700B21A924651 +:102E100040F27C1B44375A469B580025984640F2A6 +:102E20000209AE4223D0A36CE26C934214D33B7BE5 +:102E3000EBB91422002102A800F0F5FC4A4602ABCF +:102E40001A70E36D02A8DA689B68079201223A7350 +:102E500098473B7B5BB9A36C41465A1CA264EA00CD +:102E6000D1400A00616C0135CA54042DD9D1043E09 +:102E700063685645CFD140F2E01104205A5882438E +:102E80005A50019EF30128D51422002102A800F017 +:102E9000CAFC012202AB1A702723B10E0B40039328 +:102EA000A36D350404936D0E02AB9D74E66DF3685B +:102EB0000793022D18D0019B1B0A1A4202D102234C +:102EC00002AA5374200010220021443000F0ABFC11 +:102ED000002302A8A365B368984709B0F0BCBB46BD +:102EE000B246A946A046F0BD02AB5A74EAE7C04616 +:102EF000FFFFFEFFF0B5C64600B586B0EFF30383D3 +:102F000045F23432103B5BB29900C2F200028C5899 +:102F100046F20002C033C4F200029B0099582348D5 +:102F2000014040F2D0109950E26DD3680593636878 +:102F3000196B1E584B0536D569460B2368460B7036 +:102F40009368984780236268DB055169184D0B43ED +:102F5000536180235B031F00984637401E4207D011 +:102F60000A236A461370E36D68469B689847474694 +:102F700040F204084346334208D06A4601331370D6 +:102F8000E36D68469B68984743461F4340F2D01163 +:102F900063681A6B15401D635A58BA435A5006B0FD +:102FA00080BCB846F0BD01256D42D2E7FFFFFEFFB1 +:102FB000FFFBFFFFF0B5C646040000B5002800D1B6 +:102FC000C8E0002900D1C5E0CD69002D00D1C1E0E5 +:102FD00044F254730268C0F241039A4200D1BBE04C +:102FE0004B69002B00D1BDE08B7C7F2B00D9CCE05E +:102FF000032201260B7C3000DA401040164200D13B +:10300000C0E02A78502A00D1B5E015006E35EDB247 +:10301000012D00D89BE0002A00D0B8E00A7A032AEC +:1030200000D994E0022A00D191E040F64002C0F2BB +:103030004002944663441B02A3606160EFF3108674 +:10304000012282F3108803250F7C46F6FC73ED1BEA +:10305000AA40C4F20403D8689043D860DB6886F3C2 +:1030600010880023A2681373137B9B07D80F002BD3 +:10307000FADBCB699073DF781D781E790723087A15 +:103080003B40002D6AD128B102356840000103435E +:103090000020DBB20025167495745373907345F2CB +:1030A000E8204B686568E3602D7CC2F20000AD004B +:1030B0002B50013B13601223CB56002B3BDB4EF20F +:1030C0000012CEF20002944640F2003898088000C8 +:1030D000604440F2FF0C42460325664687584A7C0E +:1030E0001D40ED0092013240AE40AA404546B74334 +:1030F0003A43425145F234329800C2F20002845001 +:103100001A0046F20000C032C4F2000092001558C6 +:10311000214E354015501F200122184082404EF2AA +:103120000010CEF20000844640F280105B099B0044 +:1031300063441A501A604B69002023618B69A361B4 +:103140000023636144F25473C0F24103236080BCE6 +:10315000B846F0BD0120FAE70E20F8E7502D06D062 +:103160002B4397E70B78012B00D041E73CE7502039 +:10317000034300208EE71E42E9D00A7A002A00D1DC +:1031800053E7E4E740F27A50E1E70B20DFE70A7A01 +:10319000072A00D849E7DAE7FFFFFEFFA8B144F2AB +:1031A00054730268C0F241039A420CD181680A7BD1 +:1031B000D207D20F0B7B9B07DB0F9A42FAD1F12388 +:1031C00000200B7370470720FCE70120FAE7C04698 +:1031D000A8B144F254730268C0F241039A420CD180 +:1031E00081680A7BD207D20F0B7B9B07DB0F9A42C9 +:1031F000FAD1F02300200B7370470720FCE7012071 +:10320000FAE7C046B0B144F254730268C0F2410319 +:103210009A420DD181680A7BD207D20F0B7B9B07A4 +:10322000DB0F9A42FAD1C3680020013B0B60704764 +:103230000720FCE70120FAE710B500283CD044F253 +:1032400054730268C0F241039A4233D181680A7B09 +:10325000D207D20F0B7B9B07DB0F9A42FAD1F423E4 +:103260000B7300230B7443689B7C5BB21A00213202 +:1032700003D100230360002010BD002B13DB1F21AE +:103280005A090B401E39994013004EF200142033A6 +:10329000CEF200049B001951BFF34F8FBFF36F8F25 +:1032A00043689B7C5BB245F234329B00C2F2000261 +:1032B0009850DEE70720DFE70120DDE7F0B5C646DE +:1032C00000B584B0EFF30383103B5BB21A0046F203 +:1032D0000001C032C4F2000192005058254C9B00FE +:1032E0002040505045F23432C2F200029D58A96885 +:1032F0006A680B7B1078DBB2012824D02A699C46CF +:10330000002A33D0686901AB9846D0B11900060095 +:1033100098CE98C163469B0601D500230371AB6923 +:10332000036090476B6913B1444607CC07C3A96893 +:103330000A7BD2B20F2313400B7304B080BCB84693 +:10334000F0BD1800E6E7F42045F2E8240873E538FC +:1033500083430B73127CE8689200C2F200041051A0 +:103360002A6901389C460860002ACBD16346DAB24C +:10337000E0E7C046FFFFFEFF4EF20003262244F2C4 +:103380007801C4F20103985C1B6A8000C2F200015C +:1033900041585B015B0F45F2BC32D940C2F20002DA +:1033A000116070474EF2000340F2FE323B49C4F216 +:1033B000010330B599524CF20001002243F6C87067 +:1033C000C4F27E010A5444F2780046F60041C2F28B +:1033D0000000C0F2DC21016041F20021C0F27A015C +:1033E000416048F20001C260026181602632995C4E +:1033F0001A6A890041585201520F45F2BC34D1403B +:10340000A022C2F2000421609A5CCAB136229A5C02 +:103410001AB93C215A5CD207FCD54EF20002A02119 +:10342000C4F20102535CDB06DD0F002BFADB5554BE +:103430004EF20002A021C4F20102535CDB06FCD470 +:103440004EF2000200213623C4F20102D1543C3175 +:10345000535CDB07FCD501213123D1544FF6C473F3 +:10346000C4F27E03197000252623D5540135FF359B +:103470001562D55C136AAD0040595B015B0FD84003 +:1034800040F2FE3320600648D0524CF2000343F66F +:10349000C872C4F27E03995430BDC04603A5FFFF35 +:1034A00000A5FFFF28B10023C0F205330360002010 +:1034B00070470120FCE7C04601380028FCD1704766 +:1034C00045F2BC324CF600234143C2F2000270B513 +:1034D0001468C3F69A330D00B3FBF4F4080040F20D +:1034E000E8320023002100F04DF931B9B0FBF4F0CF +:1034F000800808B1FFF7E0FF70BDA000B5FBF0F059 +:1035000040F2E8320023002100F03CF90029F0D01D +:1035100001204042FFF7D0FFEEE7C046F8B546F283 +:10352000000340F2401245F2F02500240127C4F2C6 +:1035300000039E5AC2F20005B6B23300E340E0B287 +:103540001F4202D02B6803B1984701340435102C78 +:10355000F3D146F2000340F23012C4F200039E524F +:10356000F8BDC04646F200000023C4F2000044F655 +:103570000C22C0F200029A1811781A00C032920090 +:1035800001331150202BF2D17047C04670B5EFF3D4 +:103590001081012383F3108845F2B4334000C2F256 +:1035A00000031A5A1AB11A5A013A92B21A521B5A05 +:1035B00083B94EF2000240F2FE3544F66424C4F2B0 +:1035C0000102565B054BC0F20004205A334383438B +:1035D0009BB2535381F3108870BDC04600A5FFFF16 +:1035E00070B5EFF31081012383F3108845F2B432F4 +:1035F0004000C2F20002135A83B94EF2000444F6AE +:10360000642540F2FE36C4F20104C0F20005A35B5B +:103610002D5A2B434AF200552B43A353135A01331F +:103620009BB2135281F3108870BDC04600BE704734 +:1036300010B500F003F8FEF72FF9FEE740F20003A3 +:103640004EF6005270B5CEF20002C0F2000382B016 +:1036500093600020FEF77CF8FFF7A4FE6B4600267F +:10366000DC1D267001202378FFF7BAFFEFF31081ED +:10367000012585F3108846F6FC73C4F204039A68AA +:103680003D4802409A609A6881F3108840F6000134 +:10369000C4F204010A68D207D20F22700A68D20766 +:1036A000D20F22700A68D207D20F2270EFF3108176 +:1036B00085F3108880229868520502439A609B68BF +:1036C00081F310880120FFF761FF0120FEF740F829 +:1036D00040F60053294AC4F200039E801A8045F246 +:1036E000C072C2F200029A6045F6C032C2F2000215 +:1036F000DA6046F2000240F2201141F20000C4F20A +:103700000002505245F2C03244F29000C2F2000270 +:10371000C2F200009D800021121A00F084F844F2E9 +:10372000000044F2780244F6D431C2F20000C2F242 +:103730000002121AC0F2000100F06CF844F27005A9 +:1037400044F27403C2F20005C2F200035B1B9E1038 +:10375000002B05DD002408CD01349847A642FADC91 +:10376000FFF70AFE0220FDF7F3FFFFF7FBFE002044 +:1037700000F006F802B070BDFFFFFFEF00A5FFFFED +:103780007047C046F0B54FF6FF75CE46474699469E +:103790002B0015400E0029000340140C80B50700D3 +:1037A000000C59434543634360435B190C0CE41818 +:1037B0008C46A54203D980235B0298464044230CE3 +:1037C00061461B1820044FF6FF740C4049467943AC +:1037D0007243C91800198918C0BCB946B046F0BD7B +:1037E00010B50A22002100F0B5F810BD014B186891 +:1037F0007047C0460C40002030B500240139A24279 +:1038000001D1002005E0035D01340D5DAB42F6D02F +:10381000581B30BD002310B59A4200D110BDCC5CBE +:10382000C4540133F8E703008218934200D1704773 +:1038300019700133F9E7FFFFF0B585B003900091EF +:103840000192012B44D00800242B41D83F4A08257F +:1038500094460400664622780130B65C01003700C9 +:103860002F402E42F5D12D2A39D140F2010C027899 +:10387000A11C002B65D0102B09D1302A07D12020A4 +:103880000A788243582A57D110234A780231304EA1 +:1038900018006644B6FBF3F700247843301A029010 +:1038A00020001500303D092D1FD82A0093422BDD42 +:1038B000002C26DB01246442874206D302D1029DFC +:1038C000954202DB0124584310180A780131E8E7D9 +:1038D000FFF78CFF16230360002005B0F0BDBC4647 +:1038E0002B2AC6D10278A11CC3E71500413D192D32 +:1038F00001D8373ADAE71500613D192D04D8573A57 +:10390000D4E701246442E0E7002C09DA2223039A79 +:1039100030001360019B002BDFD04B1E009307E0AB +:10392000634603B14042019B002BD6D0002CF4D15A +:10393000019B009A1A60D0E73022002BA7D10833F0 +:10394000A5E7302A9BD00A23A1E7C0466D4A0000B4 +:10395000FFFFFF7F10B513000A0001000248006856 +:10396000FFF76AFF10BDC0460C4000204275696C2D +:103970007420776974682052656E657361732041A5 +:103980006476616E63656420466C657869626C6517 +:1039900020536F667477617265205061636B616755 +:1039A000652076657273696F6E20332E352E300078 +:1039B000332E352E3000000000000503F8B5C04658 +:1039C000F8BC08BC9E467047F8B5C046F8BC08BCB9 +:1039D0009E4670475465726D696E616C00FFFFFF13 +:1039E0000000000000005454522052454747455300 +:1039F00000FFFFFFE20A0000BA0A0000BA0A000056 +:103A0000BA0A0000BA0A0000BA0A0000BA0A0000A6 +:103A1000BA0A0000BA0A0000BA0A0000BA0A000096 +:103A2000080C00006C0B0000BA0A0000BA0A000083 +:103A3000BA0A0000BA0A0000BA0A0000BA0A000076 +:103A4000BA0A0000BA0A0000BA0A0000BA0A000066 +:103A5000BA0A00004A0B0000BA0A0000BA0A0000C5 +:103A6000220B0000BA0A0000020B0000BA0A000094 +:103A7000BA0A0000E20A00003031323334353637FA +:103A800038394142434445460D0A4552524F52206F +:103A90003A20525F4933435F436C6F736520415056 +:103AA00049204641494C45442E0D0A005B4552527F +:103AB0005D20496E2046756E6374696F6E3A2025ED +:103AC0007328292C202573000D0A4552524F52208D +:103AD0003A20525F4147545F436C6F7365204150F9 +:103AE00049204641494C45442E0D0A000D0A4552D5 +:103AF000524F52203A20525F4147545F52657365DE +:103B00007420415049204641494C4544200D0A004B +:103B10000D0A4552524F52203A20525F4147545F9E +:103B2000537461727420415049204641494C4544C8 +:103B3000200D0A000D0A52657475726E6564204589 +:103B400072726F7220436F64653A20307825782056 +:103B5000200D0A000D0A4552524F52203A2073742C +:103B60006172745F74696D656F75745F74696D659A +:103B7000725F776974685F646566696E65645F6DBE +:103B8000732066756E6374696F6E206661696C651B +:103B9000642E0D0A00FFFFFF0D0A4552524F5220BE +:103BA0003A20525F4933435F436F6D6D616E6453DA +:103BB000656E6420415049204641494C45442E0DD4 +:103BC0000A0000000D0A4552524F52203A20526519 +:103BD00071756573746564206576656E74206E6FAB +:103BE00074207265636569766564207769746820FE +:103BF000696E207370656369666965642074696DB8 +:103C0000656F75742E0D0A000D0A494E464F203A15 +:103C1000204343432044796E616D696320416464AD +:103C2000726573732041737369676E6D656E74207E +:103C30007472616E7366657220636F6D706C65740B +:103C40006564207375636365737366756C6C792E38 +:103C50000D0A00FF312E30000D0A2A2A2A2A2A2AAC +:103C60002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB4 +:103C70002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA4 +:103C80002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A94 +:103C90002A2A2A2A2A2A2A2A2A2A2A2A0D0A2A20CB +:103CA000202052656E65736173204653502045781D +:103CB000616D706C652050726F6A65637420666F09 +:103CC0007220725F69336320696E206D6173746561 +:103CD00072206D6F64652020202020202020202A63 +:103CE0000D0A2A2020204578616D706C6520507285 +:103CF0006F6A6563742056657273696F6E202573F1 +:103D000020202020202020202020202020202020B3 +:103D100020202020202020202020202020202020A3 +:103D200020202A0D0A2A202020466C657820536F17 +:103D3000667477617265205061636B20566572739B +:103D4000696F6E202025642E25642E256420202096 +:103D50002020202020202020202020202020202063 +:103D60002020202020202020202A0D0A2A2A2A2A4A +:103D70002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA3 +:103D80002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A93 +:103D90002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A83 +:103DA0002A2A2A2A2A2A2A2A2A2A2A2A2A2A0D0AB0 +:103DB0000000000054686973206578616D706C655F +:103DC0002070726F6A6563742064656D6F6E7374C2 +:103DD00072617465732074686520747970696361B9 +:103DE0006C20757365206F662074686520493343C5 +:103DF00020447269766572206173206D6173746509 +:103E0000720D0A6F6E2052656E65736173205241A8 +:103E1000204D435573206261736564206F6E20529C +:103E2000656E65736173204653502E20546865207B +:103E3000493343206D61737465722064656D6F6EE4 +:103E400073747261746573206F7065726174696FE9 +:103E50006E0D0A776974682049334320736C61766C +:103E60006520636F6E6E6563746564206F6E20619C +:103E70006E6F7468657220524120626F6172642EA9 +:103E8000206F6E636520696E697469616C697A611F +:103E900074696F6E2069730D0A737563636573735C +:103EA00066756C2C2069742077696C6C2073746162 +:103EB00072742061737369676E696E672064796ECE +:103EC000616D6963206164647265737365732074E6 +:103ED0006F20736C61766520646576696365732015 +:103EE00070726573656E74206F6E207468652062F1 +:103EF00075732E0D0A5468652045502070657266F2 +:103F00006F726D732077726974652F7265616420BA +:103F10006F7065726174696F6E20616E6420646990 +:103F200073706C6179732064657669636520696E6E +:103F3000666F726D6174696F6E2062617365642073 +:103F40006F6E207573657220696E7075742E0D0A20 +:103F50004572726F7220616E6420696E666F206DAB +:103F6000657373616765732077696C6C2062652087 +:103F70007072696E746564206F6E204A6C696E6B36 +:103F80005254545669657765722E0D0A52656665FE +:103F90007220746F20726561646D652E7478742070 +:103FA00066696C6520666F72206D6F72652064654E +:103FB0007461696C73206F6E204578616D706C65FB +:103FC0002050726F6A65637420616E640D0A4653F7 +:103FD0005020557365722773204D616E75616C209A +:103FE000666F72206D6F726520696E666F726D61AB +:103FF00074696F6E2061626F757420725F693363DC +:10400000206472697665720D0A0000000D0A45523F +:10401000524F52203A20525F4147545F4F70656EB5 +:1040200020415049204641494C4544200D0A00009A +:104030000D0A4552524F52203A20525F4933435F96 +:104040004F70656E20415049204641494C454420FF +:104050000D0A00000D0A494E464F203A20493343CD +:1040600020496E697469616C697A6564207375634F +:104070006365737366756C6C7920696E206D61730E +:10408000746572206D6F64652E0D0A000D0A45522D +:10409000524F52203A20525F4933435F446576695C +:1040A0006365436667536574204150492046414922 +:1040B0004C4544200D0A00000D0A4552524F522033 +:1040C0003A20525F4933435F4D61737465724465B2 +:1040D000766963655461626C65536574204150492B +:1040E000204641494C4544200D0A00000D0A455226 +:1040F000524F52203A20525F4933435F456E61620E +:104100006C6520415049204641494C4544200D0AE8 +:10411000000000000D0A4552524F52203A20525FD3 +:104120004933435F496269526561642041504920C7 +:104130004641494C4544200D0A0000000D0A4552F5 +:10414000524F52203A20525F4933435F44796E61A7 +:104150006D69634164647265737341737369676EFB +:104160006D656E74537461727420415049204641EC +:10417000494C4544200D0A000D0A494E464F203A4D +:104180002042757320636F6E66696775726174692A +:104190006F6E20697320636F6D706C657465642049 +:1041A0007375636365737366756C6C792E0D0A00A5 +:1041B000494E464F203A204E756D626572206F66FB +:1041C0002049334320646576696365206F6E206201 +:1041D00075733A202564202A2A0D0A00494E464F5D +:1041E000203A2053656E64696E6720434343206222 +:1041F000726F616463617374207369676E616C20B0 +:10420000666F722044796E616D69632061646472C7 +:104210006573732061737369676E6D656E740D0AE3 +:10422000000000000D0A4552524F52203A206933D7 +:10423000635F62726F6164636173745F6363635F22 +:1042400073656E642066756E6374696F6E20666157 +:10425000696C65642E0D0A00200D0A493343204D18 +:104260006173746572206F7065726174696F6E73CB +:10427000203A200D0A312E20446973706C61792038 +:1042800049334320736C61766520646576696365A4 +:1042900020496E666F726D6174696F6E2069662069 +:1042A000657869737473206F6E204933432062759B +:1042B000730D0A322E2049334320577269746520EA +:1042C00052656164206F7065726174696F6E0D0A6A +:1042D000000000000D0A4552524F52203A204E6F06 +:1042E00020536C6176652064657669636520657826 +:1042F00069737473206F6E20493343206275732C89 +:104300000D0A53656E64696E672062726F61646343 +:1043100061737420636F6D6D6F6E20636F6D6D617F +:104320006E6420636F646520746F20636865636BDF +:1043300020666F7220736C61766520486F74204A26 +:104340006F696E2072657175657374730D0A506CB8 +:10435000656173652072652D636865636B206167B5 +:1043600061696E0D0A0000000D0A4552524F52203D +:104370003A204E6F20536C617665206465766963E0 +:104380006520657869737473206F6E20493343200C +:104390006275732C20706C6561736520636F6E6647 +:1043A00069726D206F6E20706879736963616C202B +:1043B000636F6E6E656374696F6E206F6E206275D9 +:1043C000732E0D0A000000000D0A494E464F203A98 +:1043D00020506C656173652072652D636865636B41 +:1043E0002077697468206D656E75206F7074696FD1 +:1043F0006E203120746F20766965772064796E6154 +:104400006D6963206164647265737320617373699D +:10441000676E656420746F20736C617665206265D9 +:10442000666F7265207573696E67206D656E7520A5 +:104430006F7074696F6E20320D0A00000D0A494ECC +:10444000464F203A206E756D626572206F66204976 +:10445000334320646576696365206F6E20627573EF +:104460003A202564202A2A0D0A0A00002A2A2A2A2C +:104470002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A9C +:104480002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A8C +:104490002A2A2A2A2A2A2A2A2A2A2A0D0A00000037 +:1044A0002A20202020202020202020202020202002 +:1044B000202049334320536C61766520496E666F36 +:1044C00020202020202020202020202020202A0DF5 +:1044D0000A0000002D2044796E616D6963204164FB +:1044E00064726573733A2020203078253032780D5D +:1044F0000A0000002D204243523A20202020202094 +:104500002020202020202020203078253032780DD7 +:104510000A0000002D204443523A20202020202071 +:104520002020202020202020203078253032780DB7 +:104530000A0000002D205049443A2020202020204D +:10454000202020202020202020307825303278257F +:10455000303278253032782530327825303278255F +:104560003032780D0A0000000D0A4552524F522099 +:104570003A20525F4933435F577269746520415056 +:1045800049204641494C45442E0D0A000D0A45522A +:10459000524F52203A20525F4933435F5265616463 +:1045A00020415049204641494C45442E0D0A000007 +:1045B0000D0A494E464F203A2044617461207772BB +:1045C000697474656E20746F2049334320736C6185 +:1045D00076652069732072656164206261636B2077 +:1045E000616E64206D61746368696E67202D20536D +:1045F0005543434553530D0A00000000494E464FB2 +:104600003A2044617461205472616E736665722051 +:1046100073697A6520307825780D0A000D0A4552B5 +:10462000524F52203A2044617461206D69736D616C +:10463000746368202D204641494C5552450D0A00AF +:104640000D0A4552524F52203A206D6173746572C3 +:104650005F77726974655F726561645F76657269C0 +:1046600066792066756E6374696F6E206661696C29 +:1046700065642E0D0A000000496E76616C69642045 +:10468000496E7075740D0A000D0A494E464F203A66 +:10469000204120686F74204A6F696E206576656ED0 +:1046A000742069732072656365697665642C20499E +:1046B0006E69746961746520444141207573696E47 +:1046C0006720434343207472616E736D697373692D +:1046D0006F6E2E0D0A0000000D0A4552524F5220F7 +:1046E0003A20525F4933435F44796E616D6963419B +:1046F00064647265737341737369676E6D656E741C +:10470000537461727420415049204641494C4544DC +:104710002E0D0A000D0A4552524F52203A20686F62 +:10472000745F6A6F696E5F726571756573745F70CF +:10473000726F636573732066756E6374696F6E2044 +:104740006661696C65642E0D0A0000000D0A494E11 +:10475000464F203A20444141207573696E672043DB +:104760004343207472616E736D697373696F6E2059 +:10477000636F6D706C657465642C200D0A706C65D8 +:1047800061736520636865636B2062792070726570 +:104790007373696E67207573657220696E707574C6 +:1047A00020312028617661696C61626C65206174DA +:1047B000206D656E75206F7074696F6E2920666F4D +:1047C0007220736C61766520696E666F726D6174BC +:1047D000696F6E0D0A0000000D0A494E464F203ADF +:1047E000206120736C6176652049424920747261B2 +:1047F0006E7366657220697320726563656976659C +:10480000642E0D0A000000000D0A494E464F203A62 +:104810002054617267657420616464726573733AD1 +:104820003078253032782C20494249205061796C0B +:104830006F61642073697A653A25640D0A00FFFF91 +:10484000FE17000020180000BE170000BE17000071 +:10485000BE170000BE170000C0170000B21700000E +:10486000B2170000CE1700006167745F6465696E5F +:10487000697400FF6933635F6465696E697400FF82 +:10488000686F745F6A6F696E5F7265717565737466 +:104890005F70726F6365737300FFFFFF7374617203 +:1048A000745F74696D656F75745F74696D65725F4F +:1048B000776974685F646566696E65645F6D7300CF +:1048C0006933635F6170705F6576656E745F6E6F8C +:1048D0007469667900FFFFFF6D61737465725F77BD +:1048E000726974655F726561645F76657269667925 +:1048F00000FFFFFF636865636B5F646973705F69E6 +:1049000033635F736C617665496E666F00FFFFFF0E +:104910006933635F62726F6164636173745F636361 +:10492000635F73656E6400FF68616C5F656E7472CF +:104930007900FFFF64520020BC4900002C4A0000AF +:1049400000000000000000008917000000000000C7 +:10495000544900002808070828080708000000003C +:104960000F000000020000003000000080BB0000CB +:104970000000000000000000FFFFFFFF0004040033 +:104980000000000000000000000000000100090518 +:104990000207020200000000C05D000000000000ED +:1049A000E02E000000010B0069180000000000006C +:1049B000B449000000000001000000FF09000000F1 +:1049C000C4490000040000000F00000000000100C6 +:1049D00008010000004000000B010000040000007E +:1049E0000C01000000400000050200000000010072 +:1049F00000030000000001070004000000000107A0 +:104A000001040000040000000E0900000A1E1E0040 +:104A10000014000600080011000000000000000063 +:104A2000000000000000000000000000091D000060 +:104A3000A5180000391D0000591B00003D1A000098 +:104A4000E11A0000C5180000C9180000751900001F +:104A5000BD190000FD190000991A00000519000099 +:104A6000351900000100020008001000002020207D +:104A7000202020202020282828282820202020200E +:104A800020202020202020202020202020881010DE +:104A9000101010101010101010101010100404043A +:104AA00004040404040404101010101010104141F8 +:104AB00041414141010101010101010101010101E6 +:104AC00001010101010101011010101010104242FA +:104AD00042424242020202020202020202020202B6 +:104AE0000202020202020202101010102000000056 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B600000000000000000000000000000FFFFFF48 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:044BD00000000000E1 +:104BD4007070000000000000000000001040002081 +:104BE40000000000904B0000B04B0000704B000030 +:104BF40000000000000000000000000000000000B1 +:104C040000000000000000000000000000000000A0 +:104C14000000000000000000000000000000000090 +:104C24000000000000000000000000000000000080 +:104C34000000000000000000000000000000000070 +:084C44002D0500000105000030 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:040000030000363192 +:00000001FF diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..d2cf534629 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/ra_cfg.txt @@ -0,0 +1,229 @@ +FSP Configuration + Board "EK-RA2E2" + R7FA2E2A72DNK + part_number: R7FA2E2A72DNK + rom_size_bytes: 65536 + ram_size_bytes: 8192 + data_flash_size_bytes: 2048 + package_style: QFP + package_pins: 24 + + RA2E2 + series: 2 + + RA2E2 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: Internal Clock Supply Architecture Type: Type A + 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: Not Supported + 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 + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes): 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + Clock Registers not Reset Values during Startup: Disabled + Main Oscillator Populated: Populated + PFS Protect: Enabled + C Runtime Initialization : Enabled + Early BSP Initialization : Disabled + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive (Drive capacitance availability varies by MCU): Standard/Normal mode + Subclock Stabilization Time (ms): 1000 + + Clocks + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + EK-RA2E2.pincfg -> g_bsp_pin_cfg + P010 24 - VREFH0_PMOD1_GPIO9 - - Disabled - - "ADC0: AN005; SYSTEM: VREFH0" - None - - + P011 23 - VREFL0_PMOD1_GPIO10 - - Disabled - - "ADC0: AN006; SYSTEM: VREFL0" - None - - + P014 22 - PMOD1_MIKROBUS_ARDUINO_RESET - - Disabled - - "ADC0: AN009" - None - - + P015 21 GPIO LED3_RED_ARDUINO_D2_PMOD2_RESET M None "Output mode (Initial Low)" - - "ADC0: AN010; IRQ: IRQ7" - IO - - + P100 20 - ARDUINO_D12_MIKROBUS_MISO_PMOD2_RXD9 - - Disabled - - "ADC0: AN022; AGT0: AGTIO0; GPT8: GTIOC8B; GPT_POEGA: GTETRGA; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9; SPI0: MISO0" - None - - + P101 19 - ARDUINO_D11_MIKROBUS_MOSI_PMOD2_TXD9 - - Disabled - - "ADC0: AN021; AGT0: AGTEE0; GPT8: GTIOC8A; GPT_POEGB: GTETRGB; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - None - - + P102 18 - ARDUINO_D13_MIKROBUS_SCK_PMOD2_SCK9 - - Disabled - - "ADC0: ADTRG0; ADC0: AN020; AGT0: AGTO0; GPT5: GTIOC5B; GPT_OPS: GTOWLO; IRQ: IRQ4; KINT: KRM02; SCI9: SCK9; SCI9: TXD9; SPI0: RSPCK0" - None - - + P103 17 - ARDUINO_D10_MIKROBUS_SS_PMOD2_CTS9 - - Disabled - - "ADC0: AN019; AGT0: AGTOB0; GPT5: GTIOC5A; GPT_OPS: GTOWUP; IRQ: IRQ6; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P108 12 JTAG/SWD_SWDIO - H None "Peripheral mode" - - "AGT1: AGTOA1; GPT7: GTIOC7B; GPT_OPS: GTOULO; IRQ: IRQ5; JTAG/SWD: SWDIO; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - IO - - + P109 13 - ARDUINO_D5_MIKROBUS_PWM_PMOD1_RXD9 - - Disabled - - "AGT1: AGTO1; CGC: CLKOUT; GPT4: GTIOC4A; GPT_OPS: GTOVUP; IRQ: IRQ7; KINT: KRM01; SCI9: SCK9; SCI9: TXD9; SPI0: MISO0" - None - - + P110 14 - ARDUINO_D3_MIKROBUS_INT_PMOD1_CTS - - Disabled - - "AGT0: AGTOA0; GPT4: GTIOC4B; GPT_OPS: GTOVLO; IRQ: IRQ3; KINT: KRM00; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P111 15 GPIO SW1 - IRQ4 "Input mode" - - "AGT0: AGTOA0; GPT6: GTIOC6A; IRQ: IRQ4; KINT: KRM03; SCI9: RXD9; SCI9: SCK9" - IO - - + P112 16 GPIO LED1_BLUE H None "Output mode (Initial Low)" - - "AGT0: AGTOB0; GPT6: GTIOC6B; IRQ: IRQ1; KINT: KRM02; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P200 10 - NMI - - Disabled - - "IRQ: NMI" - None - - + P201 9 - MD_ARDUINO_D4_PMOD2_GPIO10 - - Disabled - - "SYSTEM: MD" - None - - + P205 7 GPIO SW2 - IRQ1 "Input mode" - - "AGT1: AGTO1; CGC: CLKOUT; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P300 11 JTAG/SWD_SWCLK - H None "Peripheral mode" - - "AGT1: AGTOB1; GPT7: GTIOC7A; GPT_OPS: GTOUUP; IRQ: IRQ0; JTAG/SWD: SWCLK; SCI9: RXD9; SCI9: SCK9; SPI0: RSPCK0" - IO - - + P400 1 I3C0_SCL0 IIC_SCL0 H None "Peripheral mode" - - "AGT1: AGTIO1; CAC: CACREF; GPT9: GTIOC9A; I3C0: SCL0; IRQ: IRQ0; KINT: KRM02; SCI9: SCK9; SCI9: TXD9" - IO - - + P401 2 I3C0_SDA0 IIC_SDA0 H None "Peripheral mode" - - "AGT1: AGTEE1; GPT9: GTIOC9B; GPT_POEGA: GTETRGA; I3C0: SDA0; IRQ: IRQ5; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9" - IO - - + P914 6 GPIO LED2_GREEN H None "Output mode (Initial Low)" - - "AGT1: AGTOA1; GPT_POEGB: GTETRGB; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9" - IO - - + RES# 8 SYSTEM_RES# - - - - - - - - IO "Read only" - + VCC 5 SYSTEM_VCC - - - - - - - - IO "Read only" - + VCL 3 SYSTEM_VCL - - - - - - - - IO "Read only" - + VSS 4 SYSTEM_VSS - - - - - - - - IO "Read only" - + R7FA2E2A72DNK.pincfg -> + P010 24 - VREFH0_PMOD1_GPIO9 - - Disabled - - "ADC0: AN005; SYSTEM: VREFH0" - None - - + P011 23 - VREFL0_PMOD1_GPIO10 - - Disabled - - "ADC0: AN006; SYSTEM: VREFL0" - None - - + P014 22 - PMOD1_MIKROBUS_ARDUINO_RESET - - Disabled - - "ADC0: AN009" - None - - + P015 21 - LED3_RED_ARDUINO_D2_PMOD2_RESET M None Disabled - - "ADC0: AN010; IRQ: IRQ7" - IO - - + P100 20 - ARDUINO_D12_MIKROBUS_MISO_PMOD2_RXD9 - - Disabled - - "ADC0: AN022; AGT0: AGTIO0; GPT8: GTIOC8B; GPT_POEGA: GTETRGA; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9; SPI0: MISO0" - None - - + P101 19 - ARDUINO_D11_MIKROBUS_MOSI_PMOD2_TXD9 - - Disabled - - "ADC0: AN021; AGT0: AGTEE0; GPT8: GTIOC8A; GPT_POEGB: GTETRGB; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - None - - + P102 18 - ARDUINO_D13_MIKROBUS_SCK_PMOD2_SCK9 - - Disabled - - "ADC0: ADTRG0; ADC0: AN020; AGT0: AGTO0; GPT5: GTIOC5B; GPT_OPS: GTOWLO; IRQ: IRQ4; KINT: KRM02; SCI9: SCK9; SCI9: TXD9; SPI0: RSPCK0" - None - - + P103 17 - ARDUINO_D10_MIKROBUS_SS_PMOD2_CTS9 - - Disabled - - "ADC0: AN019; AGT0: AGTOB0; GPT5: GTIOC5A; GPT_OPS: GTOWUP; IRQ: IRQ6; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P108 12 JTAG/SWD_SWDIO - H None "Peripheral mode" - - "AGT1: AGTOA1; GPT7: GTIOC7B; GPT_OPS: GTOULO; IRQ: IRQ5; JTAG/SWD: SWDIO; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - IO - - + P109 13 - ARDUINO_D5_MIKROBUS_PWM_PMOD1_RXD9 - - Disabled - - "AGT1: AGTO1; CGC: CLKOUT; GPT4: GTIOC4A; GPT_OPS: GTOVUP; IRQ: IRQ7; KINT: KRM01; SCI9: SCK9; SCI9: TXD9; SPI0: MISO0" - None - - + P110 14 - ARDUINO_D3_MIKROBUS_INT_PMOD1_CTS - - Disabled - - "AGT0: AGTOA0; GPT4: GTIOC4B; GPT_OPS: GTOVLO; IRQ: IRQ3; KINT: KRM00; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P111 15 - SW1 - None Disabled - - "AGT0: AGTOA0; GPT6: GTIOC6A; IRQ: IRQ4; KINT: KRM03; SCI9: RXD9; SCI9: SCK9" - IO - - + P112 16 - LED1_BLUE H None Disabled - - "AGT0: AGTOB0; GPT6: GTIOC6B; IRQ: IRQ1; KINT: KRM02; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P200 10 - NMI - - Disabled - - "IRQ: NMI" - None - - + P201 9 - MD_ARDUINO_D4_PMOD2_GPIO10 - - Disabled - - "SYSTEM: MD" - None - - + P205 7 - SW2 - None Disabled - - "AGT1: AGTO1; CGC: CLKOUT; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P300 11 JTAG/SWD_SWCLK - H None "Peripheral mode" - - "AGT1: AGTOB1; GPT7: GTIOC7A; GPT_OPS: GTOUUP; IRQ: IRQ0; JTAG/SWD: SWCLK; SCI9: RXD9; SCI9: SCK9; SPI0: RSPCK0" - IO - - + P400 1 - IIC_SCL0 H None Disabled - - "AGT1: AGTIO1; CAC: CACREF; GPT9: GTIOC9A; I3C0: SCL0; IRQ: IRQ0; KINT: KRM02; SCI9: SCK9; SCI9: TXD9" - IO - - + P401 2 - IIC_SDA0 H None Disabled - - "AGT1: AGTEE1; GPT9: GTIOC9B; GPT_POEGA: GTETRGA; I3C0: SDA0; IRQ: IRQ5; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9" - IO - - + P914 6 - LED2_GREEN H None Disabled - - "AGT1: AGTOA1; GPT_POEGB: GTETRGB; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9" - IO - - + RES# 8 SYSTEM_RES# - - - - - - - - IO "Read only" - + VCC 5 SYSTEM_VCC - - - - - - - - IO "Read only" - + VCL 3 SYSTEM_VCL - - - - - - - - IO "Read only" - + VSS 4 SYSTEM_VSS - - - - - - - - IO "Read only" - + + User Events + + User Event Links + + Module "I/O Port (r_ioport)" + Parameter Checking: Default (BSP) + + Module "I3C (r_i3c)" + Parameter Checking: Default (BSP) + Unaligned Buffer Support: Enabled + Master Support: Enabled + Slave Support: Disabled + + Module "Timer, Low-Power (r_agt)" + Parameter Checking: Default (BSP) + Pin Output Support: Disabled + Pin Input Support: Disabled + + HAL + Instance "g_ioport I/O Port (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 + Port B ELC Trigger Source: Disabled + Port C ELC Trigger Source: Disabled + Port D ELC Trigger Source: Disabled + Port E ELC Trigger Source: Disabled + Pin Configuration Name: g_bsp_pin_cfg + + Instance "g_i3c0 I3C (r_i3c)" + Name: g_i3c0 + Callback: g_i3c0_callback + Callback Context: NULL + Device Type: Main Master + Bitrate Settings: Standard Mode: Open-Drain: Logic High Period (ns): 167 + Bitrate Settings: Standard Mode: Open-Drain: Frequency: 1000000 + Bitrate Settings: Standard Mode: Push-Pull: Logic High Period (ns): 167 + Bitrate Settings: Standard Mode: Push-Pull: Frequency: 3400000 + Bitrate Settings: Extended Mode: Open-Drain: Logic High Period (ns): 167 + Bitrate Settings: Extended Mode: Open-Drain: Frequency: 1000000 + Bitrate Settings: Extended Mode: Push-Pull: Logic High Period (ns): 167 + Bitrate Settings: Extended Mode: Push-Pull: Frequency: 3400000 + Bitrate Settings: Bus Timing: Open Drain Rising Time (ns): 0 + Bitrate Settings: Bus Timing: Open Drain Falling Time (ns): 0 + Bitrate Settings: Bus Timing: Push-Pull Rising Time (ns): 0 + Bitrate Settings: Bus Timing: Push-Pull Falling Time (ns): 0 + Bitrate Settings: Clock Stalling: Address Assignment Phase: Disabled + Bitrate Settings: Clock Stalling: Transition Phase: Disabled + Bitrate Settings: Clock Stalling: Parity Phase: Disabled + Bitrate Settings: Clock Stalling: Ack Phase: Disabled + Bitrate Settings: Clock Stalling: Time (us): 0 + Bus Free Condition Detection Time (ns): 38.4 + Bus Available Condition Detection Time (us): 1 + Bus Idle Condition Detection Time (us): 1000 + Master Mode: ACK Hot-Join Requests: Enabled + Master Mode: Notify Rejected Hot-Join Requests.: Enabled + Master Mode: Notify Rejected Mastership Requests.: Enabled + Master Mode: Notify Rejected Interrupt Requests.: Enabled + Slave Mode: Command Response Info: ENEC/DISEC: In-Band Interrupts: Disabled + Timeout Detection: Disabled + Slave Mode: Command Response Info: ENEC/DISEC: Hot-Join Requests: Disabled + Slave Mode: Command Response Info: ENTASn: Activity State: Activity State 0 + Slave Mode: Command Response Info: SETMWL/GETMWL: Max Write Length: 65535 + Slave Mode: Command Response Info: SETMRL/GETMRL: Max Read Length: 65535 + Slave Mode: Command Response Info: SETMRL/GETMRL: Max IBI Payload Length: 0 + Slave Mode: Command Response Info: GETMXDS: Write Data Rate: 2Mhz + Slave Mode: Command Response Info: GETMXDS: Read Data Rate: 2Mhz + Slave Mode: Command Response Info: GETMXDS: Clock to Data Turnaround Time: 8 Nanoseconds + Slave Mode: Command Response Info: GETMXDS: Include Max Read Turnaround Time: Disabled + Slave Mode: Command Response Info: GETMXDS: Max Read Turnaround Time: 0 + Slave Mode: Command Response Info: GETXTIME: Frequency Byte: 0 + Slave Mode: Command Response Info: GETXTIME: Inaccuracy Byte: 0 + Interrupts: Interrupt Priority: Priority 2 + Interrupts: Error and Event Interrupt Priority: Priority 2 + Interrupts: Receive Status ICU Group 3: Disabled + Interrupts: Receive Status ICU Group 5: Enabled + + Instance "g_timeout_timer Timer, Low-Power (r_agt)" + General: Name: g_timeout_timer + General: Channel: 0 + General: Mode: Periodic + General: Period: 1 + General: Period Unit: Milliseconds + Output: Duty Cycle Percent (only applicable in PWM mode): 50 + General: Count Source: PCLKB + Output: AGTOA Output: Disabled + Output: AGTOB Output: Disabled + Output: AGTO Output: Disabled + Input: Measurement Mode: Measure Disabled + Input: Input Filter: No Filter + Input: Enable Pin: Enable Pin Not Used + Input: Trigger Edge: Trigger Edge Rising + Interrupts: Callback: g_timeout_timer_callback + Interrupts: Underflow Interrupt Priority: Priority 1 + diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/fsp.ld b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/fsp.ld new file mode 100644 index 0000000000..11f5ade632 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/fsp.ld @@ -0,0 +1,612 @@ +/* + Linker File for Renesas FSP +*/ + +INCLUDE memory_regions.ld + +QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH); +OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH); +OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH); + +/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */ +__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0); + +RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0; +RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0; +RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH; +RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH; + +OPTION_SETTING_START_NS = 0x0100A180; + +/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings. + * Bootloader images do not configure option settings because they are owned by the bootloader. + * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */ +__bl_FSP_BOOTABLE_IMAGE = 1; +__bln_FSP_BOOTABLE_IMAGE = 1; +PROJECT_SECURE_OR_FLAT = !DEFINED(PROJECT_NONSECURE) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE); +USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE); + +__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH; +__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH; +__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_NS_START - FLASH_APPLICATION_NSC_LENGTH; +__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : + RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH; +__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : + __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH; +__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2; +__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START; +__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2; + +FLASH_ORIGIN = DEFINED(FLASH_IMAGE_START) ? FLASH_IMAGE_START : FLASH_START; +LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH : + DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH : + FLASH_LENGTH; + +/* Define memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH + RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH + QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH + OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH + OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH + OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH + OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH + SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH + OPTION_SETTING (r): ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH + OPTION_SETTING_S (r): ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH + ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a 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__ + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + * __qspi_flash_start__ + * __qspi_flash_end__ + * __qspi_flash_code_size__ + * __qspi_region_max_size__ + * __qspi_region_start_address__ + * __qspi_region_end_address__ + * __ospi_device_0_start__ + * __ospi_device_0_end__ + * __ospi_device_0_code_size__ + * __ospi_device_0_region_max_size__ + * __ospi_device_0_region_start_address__ + * __ospi_device_0_region_end_address__ + * __ospi_device_1_start__ + * __ospi_device_1_end__ + * __ospi_device_1_code_size__ + * __ospi_device_1_region_max_size__ + * __ospi_device_1_region_start_address__ + * __ospi_device_1_region_end_address__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __tz_FLASH_S = ABSOLUTE(FLASH_START); + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + + /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */ + . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500; + + /* Allocate flash write-boundary-aligned + * space for sce9 wrapped public keys for mcuboot if the module is used. + */ + . = ALIGN(128); + KEEP(*(.mcuboot_sce9_key*)) + + *(.text*) + + KEEP(*(.version)) + 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 = .; + __usb_dev_descriptor_start_hs = .; + KEEP(*(.usb_device_desc_hs*)) + __usb_cfg_descriptor_start_hs = .; + KEEP(*(.usb_config_desc_hs*)) + __usb_interface_descriptor_start_hs = .; + KEEP(*(.usb_interface_desc_hs*)) + __usb_descriptor_end_hs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .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 = .; + + __tz_RAM_S = ORIGIN(RAM); + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + *(vtable) + /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */ + *(.data.*) + *(.data) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + + . = ALIGN(4); + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + /* TrustZone Secure Gateway Stubs Section. */ + .gnu.sgstubs : ALIGN (1024) + { + . = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024); + __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024); + _start_sg = .; + *(.gnu.sgstubs*) + . = ALIGN(32); + _end_sg = .; + } > FLASH + + __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768); + FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N; + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH); + + /* QSPI_FLASH section to be downloaded via debugger */ + .qspi_flash : + { + __qspi_flash_start__ = .; + KEEP(*(.qspi_flash*)) + KEEP(*(.code_in_qspi*)) + __qspi_flash_end__ = .; + } > QSPI_FLASH + __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__; + + /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */ + __qspi_flash_code_addr__ = __etext + (__data_end__ - __data_start__); + .qspi_non_retentive : AT (__qspi_flash_code_addr__) + { + __qspi_non_retentive_start__ = .; + KEEP(*(.qspi_non_retentive*)) + __qspi_non_retentive_end__ = .; + } > QSPI_FLASH + __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__; + + __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */ + __qspi_region_start_address__ = __qspi_flash_start__; + __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_QSPI_FLASH_N = __qspi_non_retentive_end__; + + /* Support for OctaRAM */ + .OSPI_DEVICE_0_NO_LOAD (NOLOAD): + { + . = ALIGN(4); + __ospi_device_0_start__ = .; + *(.ospi_device_0_no_load*) + . = ALIGN(4); + __ospi_device_0_end__ = .; + } > OSPI_DEVICE_0_RAM + + .OSPI_DEVICE_1_NO_LOAD (NOLOAD): + { + . = ALIGN(4); + __ospi_device_1_start__ = .; + *(.ospi_device_1_no_load*) + . = ALIGN(4); + __ospi_device_1_end__ = .; + } > OSPI_DEVICE_1_RAM + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0); + + /* OSPI_DEVICE_0 section to be downloaded via debugger */ + .OSPI_DEVICE_0 : + { + __ospi_device_0_start__ = .; + KEEP(*(.ospi_device_0*)) + KEEP(*(.code_in_ospi_device_0*)) + __ospi_device_0_end__ = .; + } > OSPI_DEVICE_0 + __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__; + + /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */ + __ospi_device_0_code_addr__ = __etext + (__data_end__ - __data_start__); + .ospi_device_0_non_retentive : AT (__ospi_device_0_code_addr__) + { + __ospi_device_0_non_retentive_start__ = .; + KEEP(*(.ospi_device_0_non_retentive*)) + __ospi_device_0_non_retentive_end__ = .; + } > OSPI_DEVICE_0 + __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__; + + __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */ + __ospi_device_0_region_start_address__ = __ospi_device_0_start__; + __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1); + + /* OSPI_DEVICE_1 section to be downloaded via debugger */ + .OSPI_DEVICE_1 : + { + __ospi_device_1_start__ = .; + KEEP(*(.ospi_device_1*)) + KEEP(*(.code_in_ospi_device_1*)) + __ospi_device_1_end__ = .; + } > OSPI_DEVICE_1 + __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__; + + /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */ + __ospi_device_1_code_addr__ = __etext + (__data_end__ - __data_start__); + .ospi_device_1_non_retentive : AT (__ospi_device_1_code_addr__) + { + __ospi_device_1_non_retentive_start__ = .; + KEEP(*(.ospi_device_1_non_retentive*)) + __ospi_device_1_non_retentive_end__ = .; + } > OSPI_DEVICE_1 + __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__; + + __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */ + __ospi_device_1_region_start_address__ = __ospi_device_1_start__; + __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__; + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + . = ALIGN(8); + /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */ + KEEP(*(.heap.*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + /* Place the STD heap here. */ + KEEP(*(.heap)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects. + * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary. + * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */ + __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024); + + /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects. + * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not + * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary. + * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */ + __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192); + + /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects. + * The EDMAC is a non-secure bus master and can only access non-secure RAM. */ + .ns_buffer (NOLOAD): + { + /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */ + . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .; + + KEEP(*(.ns_buffer*)) + } > RAM + + /* Data flash. */ + .data_flash : + { + . = ORIGIN(DATA_FLASH); + __tz_DATA_FLASH_S = .; + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + + __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024); + } > DATA_FLASH + + /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */ + __tz_SDRAM_S = ORIGIN(SDRAM); + + /* SDRAM */ + .sdram (NOLOAD): + { + __SDRAM_Start = .; + KEEP(*(.sdram*)) + KEEP(*(.frame*)) + __SDRAM_End = .; + } > SDRAM + + /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */ + __tz_SDRAM_N = __SDRAM_End; + + /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */ + __tz_ID_CODE_S = ORIGIN(ID_CODE); + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE + + /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */ + __tz_ID_CODE_N = __ID_Code_End; + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING); + + .option_setting : + { + __OPTION_SETTING_Start = .; + KEEP(*(.option_setting_ofs0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_Start + 0x10 : __OPTION_SETTING_Start; + KEEP(*(.option_setting_dualsel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_Start + 0x34 : __OPTION_SETTING_Start; + KEEP(*(.option_setting_sas)) + __OPTION_SETTING_End = .; + } > OPTION_SETTING = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_N = OPTION_SETTING_START_NS; + + .option_setting_ns : + { + __OPTION_SETTING_NS_Start = .; + KEEP(*(.option_setting_ofs1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_banksel)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps0)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps2)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps0)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps2)) + __OPTION_SETTING_NS_End = .; + } > OPTION_SETTING = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S); + + .option_setting_s : + { + __OPTION_SETTING_S_Start = .; + KEEP(*(.option_setting_ofs1_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_banksel_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_ofs1_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_banksel_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel2)) + __OPTION_SETTING_S_End = .; + } > OPTION_SETTING_S = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End; +} diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/memory_regions.ld b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/memory_regions.ld new file mode 100644 index 0000000000..415b06c3a4 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/script/memory_regions.ld @@ -0,0 +1,21 @@ +/* generated memory regions file - do not edit */ +RAM_START = 0x20004000; +RAM_LENGTH = 0x2000; +FLASH_START = 0x00000000; +FLASH_LENGTH = 0x10000; +DATA_FLASH_START = 0x40100000; +DATA_FLASH_LENGTH = 0x800; +OPTION_SETTING_START = 0x00000000; +OPTION_SETTING_LENGTH = 0x0; +OPTION_SETTING_S_START = 0x00000000; +OPTION_SETTING_S_LENGTH = 0x0; +ID_CODE_START = 0x01010018; +ID_CODE_LENGTH = 0x20; +SDRAM_START = 0x90000000; +SDRAM_LENGTH = 0x0; +QSPI_FLASH_START = 0x60000000; +QSPI_FLASH_LENGTH = 0x0; +OSPI_DEVICE_0_START = 0x68000000; +OSPI_DEVICE_0_LENGTH = 0x0; +OSPI_DEVICE_1_START = 0x70000000; +OSPI_DEVICE_1_LENGTH = 0x0; diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..2a2d31f188 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,2090 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------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: 24766 $ + +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 +* +********************************************************************** +*/ + +#if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #ifdef SEGGER_RTT_CB_ALIGN + #error "Custom SEGGER_RTT_CB_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_BUFFER_ALIGN + #error "Custom SEGGER_RTT_BUFFER_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_PUT_CB_SECTION + #error "Custom SEGGER_RTT_PUT_CB_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_PUT_BUFFER_SECTION + #error "Custom SEGGER_RTT_PUT_BUFFER_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_BUFFER_ALIGNMENT + #error "Custom SEGGER_RTT_BUFFER_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_ALIGNMENT + #error "Custom SEGGER_RTT_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif +#endif + +#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 SEGGER_RTT_CPU_CACHE_LINE_SIZE +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT SEGGER_RTT_CPU_CACHE_LINE_SIZE +#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 STRCPY + #define STRCPY(pDest, pSrc) strcpy((pDest), (pSrc)) +#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__) || (defined __clang__)) + #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__) || (defined __clang__)) + #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 +// +#if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #if ((defined __GNUC__) || (defined __clang__)) + SEGGER_RTT_CB _SEGGER_RTT __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE))); + static char _acUpBuffer [SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_UP)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE))); + static char _acDownBuffer[SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_DOWN)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE))); + #else + #error "Don't know how to place _SEGGER_RTT, _acUpBuffer, _acDownBuffer cache-line aligned" + #endif +#else + 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])); +#endif + +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() { \ + volatile SEGGER_RTT_CB* pRTTCBInit; \ + pRTTCBInit = (volatile SEGGER_RTT_CB*)((char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); \ + do { \ + if (pRTTCBInit->acID[0] == '\0') { \ + _DoInit(); \ + } \ + } while (0); \ + } + +static void _DoInit(void) { + volatile SEGGER_RTT_CB* p; // Volatile to make sure that compiler cannot change the order of accesses to the control block + static const char _aInitStr[] = "\0\0\0\0\0\0TTR REGGES"; // Init complete ID string to make sure that things also work if RTT is linked to a no-init memory area + unsigned i; + // + // Initialize control block + // + p = (volatile SEGGER_RTT_CB*)((char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access control block uncached so that nothing in the cache ever becomes dirty and all changes are visible in HW directly + memset((SEGGER_RTT_CB*)p, 0, sizeof(_SEGGER_RTT)); // Make sure that the RTT CB is always zero initialized. + 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 = BUFFER_SIZE_UP; + 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 = BUFFER_SIZE_DOWN; + 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 backwards to make sure that "SEGGER RTT" is not found in initializer memory (usually flash), + // as this would cause J-Link to "find" the control block at a wrong address. + // + RTT__DMB(); // Force order of memory accesses for cores that may perform out-of-order memory accesses + for (i = 0; i < sizeof(_aInitStr) - 1; ++i) { + p->acID[i] = _aInitStr[sizeof(_aInitStr) - 2 - i]; // Skip terminating \0 at the end of the array + } + RTT__DMB(); // Force order of memory accesses for cores that may perform out-of-order memory accesses +} + +/********************************************************************* +* +* _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; + volatile char* pDst; + // + // 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); + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytes); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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) + SEGGER_RTT_UNCACHED_OFF; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; + SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF; + SEGGER_RTT_MEMCPY((void*)pDst, pData + Rem, NumBytesAtOnce); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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_ReadUpBufferNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the application. +* Do not lock against interrupts and multiple access. +* Used to do the same operation that J-Link does, to transfer +* RTT data via other channels, such as TCP/IP or UART. +* +* Parameters +* BufferIndex Index of Up-buffer to be used. +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-up-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +*/ +unsigned SEGGER_RTT_ReadUpBufferNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_UP* pRing; + volatile char* pSrc; + + INIT(); + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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); + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, 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) { + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + // + // Update read offset of buffer + // + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* 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; + volatile char* pSrc; + // + INIT(); + pRing = (SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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); + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, 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) { + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_ReadUpBuffer +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the application. +* Used to do the same operation that J-Link does, to transfer +* RTT data via other channels, such as TCP/IP or UART. +* +* Parameters +* BufferIndex Index of Up-buffer to be used. +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-up-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +* This function locks against all other RTT operations. I.e. during +* the read operation, writing is also locked. +* If only one consumer reads from the up buffer, +* call sEGGER_RTT_ReadUpBufferNoLock() instead. +*/ +unsigned SEGGER_RTT_ReadUpBuffer(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadUpBufferNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + 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; + volatile char* pDst; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pData = (const char *)pBuffer; + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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 + // + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytes); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pData, Avail); + pData += Avail; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + // + // 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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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: + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; + memcpy((void*)pDst, pData, NumBytes); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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 + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; + memcpy((void*)pDst, 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) { + pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF; + memcpy((void*)pDst, pData + Rem, NumBytes); + } + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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_WriteDownBufferNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block inside a buffer. +* SEGGER_RTT_WriteDownBufferNoLock does not lock the application. +* Used to do the same operation that J-Link does, to transfer +* RTT data from other channels, such as TCP/IP or UART. +* +* Parameters +* BufferIndex Index of "Down"-buffer to be used. +* 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 "Down"-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. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +*/ +unsigned SEGGER_RTT_WriteDownBufferNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + // + // Get "to-target" ring buffer. + // It is save to cast that to a "to-host" buffer. Up and Down buffer differ in volatility of offsets that might be modified by J-Link. + // + pData = (const char *)pBuffer; + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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_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; + // + // Get "to-host" ring buffer. + // + pData = (const char *)pBuffer; + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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_WriteDownBuffer +* +* Function description +* Stores a specified number of characters in SEGGER RTT control block in a 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. +* +* Return value +* Number of bytes which have been stored in the "Down"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +* This function locks against all other RTT operations. I.e. during +* the write operation, writing from the application is also locked. +* If only one consumer writes to the down buffer, +* call SEGGER_RTT_WriteDownBufferNoLock() instead. +*/ +unsigned SEGGER_RTT_WriteDownBuffer(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + + INIT(); + SEGGER_RTT_LOCK(); + Status = SEGGER_RTT_WriteDownBufferNoLock(BufferIndex, pBuffer, NumBytes); // Call the non-locking write function + SEGGER_RTT_UNLOCK(); + 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(); + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); // Call the non-locking write function + 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; + volatile char* pDst; + // + // Get "to-host" ring buffer. + // + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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) { + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; + *pDst = c; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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) { + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; + *pDst = c; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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) { + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; + *pDst = c; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned RdOff; + int r; + + INIT(); + pRing = (SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + RdOff = pRing->RdOff; + if (RdOff != pRing->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_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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; + volatile SEGGER_RTT_CB* pRTTCB; + + INIT(); + SEGGER_RTT_LOCK(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + BufferIndex = 0; + do { + if (pRTTCB->aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < pRTTCB->MaxNumDownBuffers); + if (BufferIndex < pRTTCB->MaxNumDownBuffers) { + pRTTCB->aDown[BufferIndex].sName = sName; + pRTTCB->aDown[BufferIndex].pBuffer = (char*)pBuffer; + pRTTCB->aDown[BufferIndex].SizeOfBuffer = BufferSize; + pRTTCB->aDown[BufferIndex].RdOff = 0u; + pRTTCB->aDown[BufferIndex].WrOff = 0u; + pRTTCB->aDown[BufferIndex].Flags = Flags; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + } 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; + volatile SEGGER_RTT_CB* pRTTCB; + + INIT(); + SEGGER_RTT_LOCK(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + BufferIndex = 0; + do { + if (pRTTCB->aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < pRTTCB->MaxNumUpBuffers); + if (BufferIndex < pRTTCB->MaxNumUpBuffers) { + pRTTCB->aUp[BufferIndex].sName = sName; + pRTTCB->aUp[BufferIndex].pBuffer = (char*)pBuffer; + pRTTCB->aUp[BufferIndex].SizeOfBuffer = BufferSize; + pRTTCB->aUp[BufferIndex].RdOff = 0u; + pRTTCB->aUp[BufferIndex].WrOff = 0u; + pRTTCB->aUp[BufferIndex].Flags = Flags; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + } 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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_UP* pUp; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) { + SEGGER_RTT_LOCK(); + pUp = &pRTTCB->aUp[BufferIndex]; + if (BufferIndex) { + pUp->sName = sName; + pUp->pBuffer = (char*)pBuffer; + pUp->SizeOfBuffer = BufferSize; + pUp->RdOff = 0u; + pUp->WrOff = 0u; + } + pUp->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_DOWN* pDown; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) { + SEGGER_RTT_LOCK(); + pDown = &pRTTCB->aDown[BufferIndex]; + if (BufferIndex) { + pDown->sName = sName; + pDown->pBuffer = (char*)pBuffer; + pDown->SizeOfBuffer = BufferSize; + pDown->RdOff = 0u; + pDown->WrOff = 0u; + } + pDown->Flags = Flags; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_UP* pUp; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) { + SEGGER_RTT_LOCK(); + pUp = &pRTTCB->aUp[BufferIndex]; + pUp->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_DOWN* pDown; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) { + SEGGER_RTT_LOCK(); + pDown = &pRTTCB->aDown[BufferIndex]; + pDown->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_UP* pUp; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) { + SEGGER_RTT_LOCK(); + pUp = &pRTTCB->aUp[BufferIndex]; + pUp->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_DOWN* pDown; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) { + SEGGER_RTT_LOCK(); + pDown = &pRTTCB->aDown[BufferIndex]; + pDown->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) +* +* Notes +* (1) Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed +*/ +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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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; +} + +/********************************************************************* +* +* SEGGER_RTT_GetAvailWriteSpace +* +* Function description +* Returns the number of bytes available in the ring buffer. +* +* Parameters +* BufferIndex Index of the up buffer. +* +* Return value +* Number of bytes that are free in the selected up buffer. +*/ +unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + return _GetAvailWriteSpace(pRing); +} + + +/********************************************************************* +* +* SEGGER_RTT_GetBytesInBuffer() +* +* Function description +* Returns the number of bytes currently used in the up buffer. +* +* Parameters +* BufferIndex Index of the up buffer. +* +* Return value +* Number of bytes that are used in the buffer. +*/ +unsigned SEGGER_RTT_GetBytesInBuffer(unsigned BufferIndex) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + volatile SEGGER_RTT_CB* pRTTCB; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + RdOff = pRTTCB->aUp[BufferIndex].RdOff; + WrOff = pRTTCB->aUp[BufferIndex].WrOff; + if (RdOff <= WrOff) { + r = WrOff - RdOff; + } else { + r = pRTTCB->aUp[BufferIndex].SizeOfBuffer - (WrOff - RdOff); + } + return r; +} + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..eb1985cd58 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,493 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------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: 24346 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ + +#ifndef RTT_USE_ASM + // + // Some cores support out-of-order memory accesses (reordering of memory accesses in the core) + // For such cores, we need to define a memory barrier to guarantee the order of certain accesses to the RTT ring buffers. + // Needed for: + // Cortex-M7 (ARMv7-M) + // Cortex-M23 (ARM-v8M) + // Cortex-M33 (ARM-v8M) + // Cortex-A/R (ARM-v7A/R) + // + // We do not explicitly check for "Embedded Studio" as the compiler in use determines what we support. + // You can use an external toolchain like IAR inside ES. So there is no point in checking for "Embedded Studio" + // + #if (defined __CROSSWORKS_ARM) // Rowley Crossworks + #define _CC_HAS_RTT_ASM_SUPPORT 1 + #if (defined __ARM_ARCH_7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #else + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + #elif (defined __ARMCC_VERSION) + // + // ARM compiler + // ARM compiler V6.0 and later is clang based. + // Our ASM part is compatible to clang. + // + #if (__ARMCC_VERSION >= 6000000) + #define _CC_HAS_RTT_ASM_SUPPORT 1 + #else + #define _CC_HAS_RTT_ASM_SUPPORT 0 + #endif + #if (defined __ARM_ARCH_6M__) // Cortex-M0 / M1 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 // No ASM support for this architecture + #elif (defined __ARM_ARCH_7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #else + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + #elif ((defined __GNUC__) || (defined __clang__)) + // + // GCC / Clang + // + #define _CC_HAS_RTT_ASM_SUPPORT 1 + // ARM 7/9: __ARM_ARCH_5__ / __ARM_ARCH_5E__ / __ARM_ARCH_5T__ / __ARM_ARCH_5T__ / __ARM_ARCH_5TE__ + #if (defined __ARM_ARCH_7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 // Only Cortex-M7 needs a DMB but we cannot distinguish M4 and M7 here... + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #else + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + #elif ((defined __IASMARM__) || (defined __ICCARM__)) + // + // IAR assembler/compiler + // + #define _CC_HAS_RTT_ASM_SUPPORT 1 + #if (__VER__ < 6300000) + #define VOLATILE + #else + #define VOLATILE volatile + #endif + #if (defined __ARM7M__) // Needed for old versions that do not know the define yet + #if (__CORE__ == __ARM7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #endif + #endif + #if (defined __ARM7EM__) + #if (__CORE__ == __ARM7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM8M_BASELINE__) + #if (__CORE__ == __ARM8M_BASELINE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM8M_MAINLINE__) + #if (__CORE__ == __ARM8M_MAINLINE__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM8EM_MAINLINE__) + #if (__CORE__ == __ARM8EM_MAINLINE__) // Cortex-??? + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM7A__) + #if (__CORE__ == __ARM7A__) // Cortex-A 32-bit ARMv7-A + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM7R__) + #if (__CORE__ == __ARM7R__) // Cortex-R 32-bit ARMv7-R + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif +// TBD: __ARM8A__ => Cortex-A 64-bit ARMv8-A +// TBD: __ARM8R__ => Cortex-R 64-bit ARMv8-R + #else + // + // Other compilers + // + #define _CC_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + // + // If IDE and core support the ASM version, enable ASM version by default + // + #ifndef _CORE_HAS_RTT_ASM_SUPPORT + #define _CORE_HAS_RTT_ASM_SUPPORT 0 // Default for unknown cores + #endif + #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef _CORE_NEEDS_DMB + #define _CORE_NEEDS_DMB 0 +#endif + +#ifndef RTT__DMB + #if _CORE_NEEDS_DMB + #error "Don't know how to place inline assembly for DMB" + #else + #define RTT__DMB() + #endif +#endif + +#ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE + #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0) // On most target systems where RTT is used, we do not have a CPU cache, therefore 0 is a good default here +#endif + +#ifndef SEGGER_RTT_UNCACHED_OFF + #if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #else + #define SEGGER_RTT_UNCACHED_OFF (0) + #endif +#endif +#if RTT_USE_ASM + #if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +// +// Determine how much we must pad the control block to make it a multiple of a cache line in size +// Assuming: U8 = 1B +// U16 = 2B +// U32 = 4B +// U8/U16/U32* = 4B +// +#if SEGGER_RTT_CPU_CACHE_LINE_SIZE // Avoid division by zero in case we do not have any cache + #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (((NumBytes + SEGGER_RTT_CPU_CACHE_LINE_SIZE - 1) / SEGGER_RTT_CPU_CACHE_LINE_SIZE) * SEGGER_RTT_CPU_CACHE_LINE_SIZE) +#else + #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes) +#endif +#define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24)) +#define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE) + +/********************************************************************* +* +* 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 +#if SEGGER_RTT__CB_PADDING + unsigned char aDummy[SEGGER_RTT__CB_PADDING]; +#endif +} 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); +unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex); +unsigned SEGGER_RTT_GetBytesInBuffer (unsigned BufferIndex); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (((SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT transfer functions to send RTT data via other channels. +* +********************************************************************** +*/ +unsigned SEGGER_RTT_ReadUpBuffer (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadUpBufferNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); + +#define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + +/********************************************************************* +* +* 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_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..ba58c75d1d --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,429 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------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: 24316 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +// +// Take in and set to correct values for Cortex-A systems with CPU cache +// +//#define SEGGER_RTT_CPU_CACHE_LINE_SIZE (32) // Largest cache line size (in bytes) in the current system +//#define SEGGER_RTT_UNCACHED_OFF (0xFB000000) // Address alias where RTT CB and buffers can be accessed uncached +// +// Most common case: +// Up-channel 0: RTT +// Up-channel 1: SystemView +// +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#endif +// +// Most common case: +// Down-channel 0: RTT +// Down-channel 1: SystemView +// +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) +#endif + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP (4096) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) +#endif + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) +#endif + +/********************************************************************* +* +* 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. +*/ +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +#endif +// +// 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. +// +#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) +#endif + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if ((defined(__SES_ARM) || defined(__SES_RISCV) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) && !defined(WIN32)) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, #1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (_SEGGER_RTT__LockState) \ + : \ + : "r1", "cc" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (_SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (_SEGGER_RTT__LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1", "cc" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (_SEGGER_RTT__LockState) \ + : \ + ); \ + } + + #elif (defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__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" (_SEGGER_RTT__LockState) \ + : \ + : "r1", "cc" \ + ); + + #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" (_SEGGER_RTT__LockState) \ + : "r0", "r1", "cc" \ + ); \ + } + #elif defined(__riscv) || defined(__riscv_xlen) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + __asm volatile ("csrr %0, mstatus \n\t" \ + "csrci mstatus, 8 \n\t" \ + "andi %0, %0, 8 \n\t" \ + : "=r" (_SEGGER_RTT__LockState) \ + : \ + : \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("csrr a1, mstatus \n\t" \ + "or %0, %0, a1 \n\t" \ + "csrs mstatus, %0 \n\t" \ + : \ + : "r" (_SEGGER_RTT__LockState) \ + : "a1" \ + ); \ + } + #else + #define SEGGER_RTT_LOCK() + #define SEGGER_RTT_UNLOCK() + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) || \ + (defined (__ARM8M_BASELINE__) && (__CORE__ == __ARM8M_BASELINE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \ + } + #elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || \ + (defined (__ARM7M__) && (__CORE__ == __ARM7M__)) || \ + (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) || \ + (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(_SEGGER_RTT__LockState); \ + } + #elif (defined (__ARM7A__) && (__CORE__ == __ARM7A__)) || \ + (defined (__ARM7R__) && (__CORE__ == __ARM7R__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__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" (_SEGGER_RTT__LockState) \ + : \ + : "r1", "cc" \ + ); + + #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" (_SEGGER_RTT__LockState) \ + : "r0", "r1", "cc" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + register unsigned char _SEGGER_RTT__PRIMASK __asm( "primask"); \ + _SEGGER_RTT__LockState = _SEGGER_RTT__PRIMASK; \ + _SEGGER_RTT__PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() _SEGGER_RTT__PRIMASK = _SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + _SEGGER_RTT__LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = _SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(_SEGGER_RTT__LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #include + #define SEGGER_RTT_LOCK() { \ + unsigned long _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | _SEGGER_RTT__LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for embOS Simulation on Windows +* (Can also be used for generic RTT locking with embOS) +*/ +#if defined(WIN32) || defined(SEGGER_RTT_LOCK_EMBOS) + +void OS_SIM_EnterCriticalSection(void); +void OS_SIM_LeaveCriticalSection(void); + +#define SEGGER_RTT_LOCK() { \ + OS_SIM_EnterCriticalSection(); + +#define SEGGER_RTT_UNLOCK() OS_SIM_LeaveCriticalSection(); \ + } +#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_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..815f585131 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 17697 $ +---------------------------------------------------------------------- +*/ +#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_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..05de959afe --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.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 LVL_DEBUG (3u) /* debug-level messages */ + +#define LOG_LEVEL LVL_ERR /* To See the Debug Messages, LOG_LEVEL should be set to LVL_DEBUG */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_i3c" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" in master mode *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************\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() +#define APP_DBG_PRINT(fn_, ...) if(LOG_LEVEL >= LVL_DEBUG)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[DBG] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..e9c76fc325 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/hal_entry.c @@ -0,0 +1,765 @@ +/*********************************************************************************************************************** + * 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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#include "common_utils.h" +#include "i3c_master_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup i3c_master_ep + * @{ + **********************************************************************************************************************/ + +FSP_CPP_HEADER +void R_BSP_WarmStart(bsp_warm_start_event_t event); +FSP_CPP_FOOTER + +/* Global Variables */ +static volatile uint32_t g_i3c_event_count[I3C_EVENT_INTERNAL_ERROR + ONE]; +static volatile uint32_t g_i3c_event_status = RESET_VALUE; + +/* Configure the information for the slave device. */ +static i3c_device_cfg_t master_device_cfg = +{ + /* This is the Static I3C / I2C Legacy address defined by the device manufacturer. */ + .static_address = I3C_MASTER_DEVICE_STATIC_ADDRESS, + /* The dynamic address will be automatically updated when the master configures this device using CCC ENTDAA. */ + .dynamic_address = I3C_MASTER_DEVICE_DYNAMIC_ADDRESS +}; + +/* I3C bus/device management */ +static i3c_device_table_cfg_t g_device_table_cfg; +static i3c_device_information_t g_device_slave_info; +static uint32_t g_num_device_on_bus = RESET_VALUE; +static uint8_t g_ibi_target_address = RESET_VALUE; +static volatile bool b_bus_initialized = false; +static volatile bool b_target_hj_received = false; +static volatile bool b_target_ibi_transfer_received = false; + +/* data buffers */ +static uint8_t g_ibi_read_data[MAX_IBI_PAYLOAD_SIZE] BSP_ALIGN_VARIABLE(WORD_ALIGN); +static uint8_t g_write_data[MAX_WRITE_DATA_LEN] BSP_ALIGN_VARIABLE(WORD_ALIGN); +static uint8_t g_read_data[2][MAX_READ_DATA_LEN] BSP_ALIGN_VARIABLE(WORD_ALIGN); +static uint8_t * p_next = NULL; +static uint8_t * p_last = NULL; +static uint32_t g_data_transfer_size = RESET_VALUE; + +/* Setup the command descriptor. */ +static i3c_command_descriptor_t command_descriptor; + +static uint32_t g_write_read_routine_count = RESET_VALUE; +static volatile bool b_process_timeout = false; + + +/* Private function declarations.*/ +static fsp_err_t i3c_broadcast_ccc_send(void); +static void set_next_read_buffer(void); +static fsp_err_t check_disp_i3c_slaveInfo(void); +static uint32_t i3c_app_event_notify(uint32_t set_event_flag_value, uint32_t timout); +static fsp_err_t master_write_read_verify(void); +static fsp_err_t start_timeout_timer_with_defined_ms(uint32_t timeout_ms); +static fsp_err_t hot_join_request_process(void); +static void i3c_deinit(void); +static void agt_deinit(void); + +/*******************************************************************************************************************//** + * main() is generated by the RA Configuration editor and is used 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}; + unsigned char input_data[BUFFER_SIZE_DOWN] = {RESET_VALUE}; + uint8_t converted_rtt_input = RESET_VALUE; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + APP_PRINT(BANNER_INFO,EP_VERSION,version.major, version.minor, version.patch ); + APP_PRINT(EP_INFO); + + /* Initialize AGT driver */ + err = R_AGT_Open(&g_timeout_timer_ctrl, &g_timeout_timer_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_AGT_Open API FAILED \r\n"); + APP_ERR_TRAP(err); + } + + /* Initializes the I3C module. */ + err = R_I3C_Open(&g_i3c0_ctrl, &g_i3c0_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Open API FAILED \r\n"); + /* de-initialize the opened AGT timer module.*/ + agt_deinit(); + APP_ERR_TRAP(err); + } + APP_PRINT("\r\nINFO : I3C Initialized successfully in master mode.\r\n"); + + /* Set the device configuration for this device. */ + err = R_I3C_DeviceCfgSet(&g_i3c0_ctrl, &master_device_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_DeviceCfgSet API FAILED \r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* Set the I3C devices information through device table entries */ + memset(&g_device_table_cfg, RESET_VALUE, sizeof(i3c_device_table_cfg_t)); + + g_device_table_cfg.dynamic_address = (uint8_t)(I3C_SLAVE_DEVICE_DYNAMIC_ADDRESS_START); + g_device_table_cfg.device_protocol = I3C_DEVICE_PROTOCOL_I3C; + g_device_table_cfg.ibi_accept = true; + g_device_table_cfg.ibi_payload = true; + g_device_table_cfg.master_request_accept = false; + + err = R_I3C_MasterDeviceTableSet(&g_i3c0_ctrl, RESET_VALUE, &g_device_table_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_MasterDeviceTableSet API FAILED \r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* Enable I3C Mode. */ + err = R_I3C_Enable(&g_i3c0_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Enable API FAILED \r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* Set the buffer for storing IBI data that is read from the slave. */ + err = R_I3C_IbiRead(&g_i3c0_ctrl, g_ibi_read_data, MAX_IBI_PAYLOAD_SIZE); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_IbiRead API FAILED \r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* Reset the buffer for storing data received during a read transfer. */ + p_next = g_read_data[RESET_VALUE]; + + /* Start assigning dynamic addresses to devices on the bus using the CCC ENTDAA command. */ + /* we have one slave device hence last argument is ONE */ + err = R_I3C_DynamicAddressAssignmentStart(&g_i3c0_ctrl, I3C_ADDRESS_ASSIGNMENT_MODE_ENTDAA, RESET_VALUE, ONE); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_DynamicAddressAssignmentStart API FAILED \r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* waiting for the bus initialization */ + /* hold up the application until the DAA is completed */ + i3c_app_event_notify(I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE, WAIT_TIME); + if((b_bus_initialized)&&(g_num_device_on_bus)) + { + APP_PRINT ("\r\nINFO : Bus configuration is completed successfully.\r\n"); + APP_PRINT ("INFO : Number of I3C device on bus: %d **\r\n", g_num_device_on_bus); + } + else + { + APP_PRINT("INFO : Sending CCC broadcast signal for Dynamic address assignment\r\n"); + /* sending broadcast signal.*/ + err = i3c_broadcast_ccc_send(); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : i3c_broadcast_ccc_send function failed.\r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + } + /* Print menu option.*/ + APP_PRINT(EP_FUNCTION_MENU) + + while (true) + { + /*Check for RTT input from user*/ + if (APP_CHECK_DATA) + { + /* Cleaning buffer */ + memset(&input_data[RESET_VALUE], NULL_CHAR, BUFFER_SIZE_DOWN); + converted_rtt_input = RESET_VALUE; + + /*Read RTT input from user*/ + APP_READ (input_data); + converted_rtt_input = (uint8_t)atoi((char *)input_data); + + switch (converted_rtt_input) + { + case DISPLAY_I3C_SLAVE_INFO: + { + /* Display slave info.*/ + check_disp_i3c_slaveInfo(); + break; + } + + case MASTER_WRITE_READ: + { + /* Perform master write read operation.*/ + err = master_write_read_verify(); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : master_write_read_verify function failed.\r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + break; + } + + default: + { + APP_PRINT("Invalid Input\r\n"); + break; + } + } /* switch end */ + APP_PRINT(EP_FUNCTION_MENU) + }/* if APP check end */ + + /* wait for I3C events.*/ + uint32_t event_flag = i3c_app_event_notify((I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE | + I3C_EVENT_FLAG_COMMAND_COMPLETE | + I3C_EVENT_FLAG_WRITE_COMPLETE | + I3C_EVENT_FLAG_READ_COMPLETE | + I3C_EVENT_FLAG_IBI_READ_COMPLETE | + I3C_EVENT_FLAG_IBI_READ_BUFFER_FULL | + I3C_EVENT_FLAG_INTERNAL_ERROR), WAIT_TIME); + + /* check if event is IBI read complete and hot-join request received.*/ + if((event_flag & I3C_EVENT_FLAG_IBI_READ_COMPLETE) && (b_target_hj_received)) + { + /* perform hot join request process.*/ + err = hot_join_request_process(); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : hot_join_request_process function failed.\r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + } + + /* check if event is IBI read complete and IBI transfer is received.*/ + if((event_flag & I3C_EVENT_FLAG_IBI_READ_COMPLETE) && (b_target_ibi_transfer_received)) + { + APP_PRINT ("\r\nINFO : a slave IBI transfer is received.\r\n"); + APP_PRINT ("\r\nINFO : Target address:0x%02x, IBI Payload size:%d\r\n", g_ibi_target_address, g_data_transfer_size); + b_target_ibi_transfer_received = false; + } + + } + +#if BSP_TZ_SECURE_BUILD + /* Enter non-secure code */ + R_BSP_NonSecureEnter(); +#endif +} + +/*******************************************************************************************************************//** + * 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_RESET == event) + { +#if BSP_FEATURE_FLASH_LP_VERSION != 0 + + /* Enable reading from data flash. */ + R_FACI_LP->DFLCTL = 1U; + + /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and + * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */ +#endif + } + + if (BSP_WARM_START_POST_C == event) + { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg); + } +} + +#if BSP_TZ_SECURE_BUILD + +BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable (); + +/* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */ +BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable () +{ + +} +#endif + +/*******************************************************************************************************************//** + * @brief This function processes dynamic address assignment procedure, If a Hot-Join event is received. + * @param[IN] None + * @retval FSP_SUCCESS or Any Other Error code apart from FSP_SUCCESS upon unsuccessful hot_join_request_process. + **********************************************************************************************************************/ +static fsp_err_t hot_join_request_process(void) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t status = RESET_VALUE; + + APP_PRINT ("\r\nINFO : A hot Join event is received, Initiate DAA using CCC transmission.\r\n"); + + /* If a Hot-Join event is received, then the master can initiate the dynamic address assignment procedure. */ + err = R_I3C_DynamicAddressAssignmentStart(&g_i3c0_ctrl, I3C_ADDRESS_ASSIGNMENT_MODE_ENTDAA, RESET_VALUE, ONE); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : R_I3C_DynamicAddressAssignmentStart API FAILED.\r\n"); + return err; + } + + /* wait for address assignment complete event. */ + status = i3c_app_event_notify(I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE, WAIT_TIME); + if(RESET_VALUE == status) + { + APP_ERR_PRINT ("\r\nERROR : Requested event not received with in specified timeout.\r\n"); + err = FSP_ERR_TIMEOUT; + } + /* Reset hot joint event flag.*/ + b_target_hj_received = false; + /* Update number of device as ONE */ + g_num_device_on_bus = ONE; + APP_PRINT("\r\nINFO : DAA using CCC transmission completed, \r\nplease check by pressing user input 1 (available at menu option) for slave information\r\n"); + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief This function send a broadcast or direct command to slave devices on the bus. + * @param[IN] None + * @retval FSP_SUCCESS or Any Other Error code apart from FSP_SUCCESS upon unsuccessful i3c_broadcast_ccc_send. + **********************************************************************************************************************/ +static fsp_err_t i3c_broadcast_ccc_send(void) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t status = RESET_VALUE; + + /* Send the command RSTDAA */ + command_descriptor.command_code = I3C_CCC_BROADCAST_RSTDAA; + /* Set a buffer for storing the data read by the command. */ + command_descriptor.p_buffer = NULL; + /* The length for a GETMWL command is 2 bytes. */ + command_descriptor.length = RESET_VALUE; + /* Terminate the transfer with a Repeated Start condition. */ + command_descriptor.restart = false; + /* The GETMWL command is a Direct Get Command. */ + command_descriptor.rnw = false; + + /* Send a broadcast or direct command to slave devices on the bus.*/ + err = R_I3C_CommandSend(&g_i3c0_ctrl, &command_descriptor); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : R_I3C_CommandSend API FAILED.\r\n"); + return err; + } + + /* wait for command complete.*/ + status = i3c_app_event_notify(I3C_EVENT_FLAG_COMMAND_COMPLETE, WAIT_TIME); + if(RESET_VALUE == status) + { + APP_ERR_PRINT ("\r\nERROR : Requested event not received with in specified timeout.\r\n"); + err = FSP_ERR_TIMEOUT; + } + + APP_PRINT ("\r\nINFO : CCC Dynamic Address Assignment transfer completed successfully.\r\n"); + g_num_device_on_bus = RESET_VALUE; + + return err; +} + +/*******************************************************************************************************************//** + * @brief This function is callback for i3c. + * + * @param[IN] p_args + **********************************************************************************************************************/ +void g_i3c0_callback(i3c_callback_args_t const *const p_args) +{ + /* update the event in global array and this will be used in i3c_app_event_notify function.*/ + g_i3c_event_status = p_args->event_status; + g_i3c_event_count[p_args->event]++; + + switch(p_args->event) + { + case I3C_EVENT_ENTDAA_ADDRESS_PHASE: + { + /* The device PID, DCR, and BCR registers will be available in i3c_callback_args_t::p_slave_info. */ + g_device_slave_info.dynamic_address = (uint8_t)(I3C_SLAVE_DEVICE_DYNAMIC_ADDRESS_START); + memcpy(g_device_slave_info.slave_info.pid, p_args->p_slave_info->pid, sizeof(p_args->p_slave_info->pid)); + g_device_slave_info.slave_info.bcr = p_args->p_slave_info->bcr; + g_device_slave_info.slave_info.dcr = p_args->p_slave_info->dcr; + break; + } + + case I3C_EVENT_ADDRESS_ASSIGNMENT_COMPLETE: + { + /* set the bus initialized flag.*/ + b_bus_initialized = true; + break; + } + + case I3C_EVENT_READ_COMPLETE: + { + /* The number of bytes returns from the slave will be available in i3c_callback_args_t::transfer_size. */ + g_data_transfer_size = p_args->transfer_size; + set_next_read_buffer(); + break; + } + + case I3C_EVENT_WRITE_COMPLETE: + { + /* The number of bytes writes to the slave will be available in i3c_callback_args_t::transfer_size. */ + g_data_transfer_size = p_args->transfer_size; + break; + } + + case I3C_EVENT_COMMAND_COMPLETE: + { + /* The command code and transfer size will be available in p_args. + * If the command code is a Broadcast or Direct Set, then data will + * be stored in the read buffer provided by i3c_api_t::read. + * If the command code is a Direct Get, then the data will be automatically + * sent from device SFR. */ + g_data_transfer_size = p_args->transfer_size; + break; + } + + case I3C_EVENT_IBI_READ_COMPLETE: + { + /* When an IBI is completed, the transfer_size, ibi_type, and ibi_address will be available in p_args. */ + switch (p_args->ibi_type) + { + case I3C_IBI_TYPE_INTERRUPT: + { + /* Notify the application that an IBI was read. */ + b_target_ibi_transfer_received = true; + g_data_transfer_size = p_args->transfer_size; + g_ibi_target_address = p_args->ibi_address; + break; + } + case I3C_IBI_TYPE_HOT_JOIN: + { + b_target_hj_received = true; + break; + } + default: + { + break; + } + } + break; + } + + default: + { + break; + } + } +} + +/*******************************************************************************************************************//** + * @brief This function starts the timer and wait for the event set in the i3c callback till specified timeout. + * @param[IN] set_event_flag_value requested event flag + * @param[IN] timeout specified timeout + * @retval on successful operation, returns i3c event flag value. + **********************************************************************************************************************/ +static uint32_t i3c_app_event_notify(uint32_t set_event_flag_value, uint32_t timeout) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t get_event_flag_value = RESET_VALUE; + /* Reset the timeout flag. */ + b_process_timeout = false; + + /* start the timer.*/ + err = start_timeout_timer_with_defined_ms(timeout); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : start_timeout_timer_with_defined_ms function failed.\r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* wait for the event set in the i3c callback till specified timeout.*/ + while (!b_process_timeout) + { + /* process for all i3c events.*/ + for(uint8_t cnt = RESET_VALUE; cnt < (I3C_EVENT_INTERNAL_ERROR+ONE); cnt++) + { + /* check for callback event.*/ + if(g_i3c_event_count[cnt] > RESET_VALUE) + { + /* store the event in local variable.*/ + get_event_flag_value |= (uint32_t)(0x1 << cnt); + g_i3c_event_count[cnt] -= ONE; + } + } + + /* check for event received from i3c callback function is similar to event which user wants.*/ + get_event_flag_value = (set_event_flag_value & get_event_flag_value); + if(get_event_flag_value) + { + g_i3c_event_status = RESET_VALUE; + return get_event_flag_value; + } + } + return 0; +} + +/*******************************************************************************************************************//** + * @brief This function sets the next read buffer. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +static void set_next_read_buffer(void) +{ + p_last = p_next; + p_next = ((p_next == g_read_data[RESET_VALUE]) ? g_read_data[ONE] : g_read_data[RESET_VALUE]); +} + +/*******************************************************************************************************************//** + * @brief This function checks the slave device is present on bus and display slave device information. + * @param[IN] None + * @retval FSP_SUCCESS or Any Other Error code apart from FSP_SUCCESS upon unsuccessful check_disp_i3c_slaveInfo. + **********************************************************************************************************************/ +static fsp_err_t check_disp_i3c_slaveInfo(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* check for slave device existence on the bus. */ + if ((RESET_VALUE == g_num_device_on_bus) && (RESET_VALUE == g_device_slave_info.dynamic_address)) + { + APP_ERR_PRINT("\r\nERROR : No Slave device exists on I3C bus,\r\n" + "Sending broadcast common command code to check for slave Hot Join requests\r\n" + "Please re-check again\r\n"); + + /* sending broadcast ccc.*/ + err = i3c_broadcast_ccc_send(); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : No Slave device exists on I3C bus, please confirm on physical connection on bus.\r\n"); + return err; + } + APP_PRINT("\r\nINFO : Please re-check with menu option 1 to view dynamic address assigned to slave before using menu option 2\r\n"); + } + else + { + APP_PRINT ("\r\nINFO : number of I3C device on bus: %d **\r\n\n", g_num_device_on_bus); + + APP_PRINT("***********************************************\r\n") + APP_PRINT("* I3C Slave Info *\r\n") + APP_PRINT("***********************************************\r\n") + APP_PRINT("- Dynamic Address: 0x%02x\r\n", g_device_slave_info.dynamic_address) + APP_PRINT("- BCR: 0x%02x\r\n", g_device_slave_info.slave_info.bcr) + APP_PRINT("- DCR: 0x%02x\r\n", g_device_slave_info.slave_info.dcr) + APP_PRINT("- PID: 0x%02x%02x%02x%02x%02x%02x\r\n", + g_device_slave_info.slave_info.pid[0], + g_device_slave_info.slave_info.pid[1], + g_device_slave_info.slave_info.pid[2], + g_device_slave_info.slave_info.pid[3], + g_device_slave_info.slave_info.pid[4], + g_device_slave_info.slave_info.pid[5]) + } + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief This function performs the I3C master write and read operation. + * @param[IN] None + * @retval FSP_SUCCESS or Any Other Error code apart from FSP_SUCCESS upon unsuccessful master_write_read_verify. + **********************************************************************************************************************/ +static fsp_err_t master_write_read_verify(void) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t status = RESET_VALUE; + + /* update buffer */ + for (uint32_t cnt = RESET_VALUE; cnt < sizeof(g_write_data); cnt++) + { + g_write_data[cnt] = (uint8_t) (cnt + g_write_read_routine_count) & UINT8_MAX; + } + g_write_read_routine_count++; + + /* perform write operation.*/ + err = R_I3C_Write(&g_i3c0_ctrl, g_write_data, sizeof(g_write_data), false); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : R_I3C_Write API FAILED.\r\n"); + return err; + } + + /* wait for write complete event.*/ + status = i3c_app_event_notify(I3C_EVENT_FLAG_WRITE_COMPLETE, WAIT_TIME); + if(RESET_VALUE == status) + { + APP_ERR_PRINT ("\r\nERROR : Requested event not received with in specified timeout.\r\n"); + return FSP_ERR_TIMEOUT; + } + R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MICROSECONDS); + + /* Start a read operation. */ + err = R_I3C_Read(&g_i3c0_ctrl, p_next, MAX_READ_DATA_LEN, false); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : R_I3C_Read API FAILED.\r\n"); + return err; + } + + /* wait for read complete event.*/ + status = i3c_app_event_notify(I3C_EVENT_FLAG_READ_COMPLETE, WAIT_TIME); + if(RESET_VALUE == status) + { + APP_ERR_PRINT ("\r\nERROR : Requested event not received with in specified timeout.\r\n"); + return FSP_ERR_TIMEOUT; + } + + /* compare read data with written data on slave.*/ + if (RESET_VALUE == memcmp(g_write_data, p_last, sizeof(g_write_data))) + { + APP_PRINT("\r\nINFO : Data written to I3C slave is read back and matching - SUCCESS\r\n"); + APP_PRINT("INFO: Data Transfer size 0x%x\r\n",g_data_transfer_size); + } + else + { + APP_ERR_PRINT("\r\nERROR : Data mismatch - FAILURE\r\n"); + return FSP_ERR_INVALID_DATA; + } + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief This function closes opened I3C module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void i3c_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close I3C module */ + err = R_I3C_Close(&g_i3c0_ctrl); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* I3C Close failure message */ + APP_ERR_PRINT("\r\nERROR : R_I3C_Close API FAILED.\r\n"); + } +} + +/* timer related functions */ +static uint32_t timeout_value_in_ms = RESET_VALUE; + +/*******************************************************************************************************************//** + * @brief This function is callback for periodic mode timer and stops AGT0 timer in Periodic mode. + * + * @param[in] (timer_callback_args_t *) p_args + **********************************************************************************************************************/ +void g_timeout_timer_callback(timer_callback_args_t *p_args) +{ + FSP_PARAMETER_NOT_USED(p_args); + + /* check if specified timeout is zero.*/ + if(RESET_VALUE == --timeout_value_in_ms) + { + /* set the timeout flag.*/ + b_process_timeout = true; + /* stop AGT timer.*/ + R_AGT_Stop(&g_timeout_timer_ctrl); + } +} + +/*******************************************************************************************************************//************** + * @brief This function Resets the counter value and start the AGT timer. + * @param[IN] timeout_ms + * @retval FSP_SUCCESS or Any Other Error code apart from FSP_SUCCESS upon unsuccessful start_timeout_timer_with_defined_ms. + ***********************************************************************************************************************************/ +static fsp_err_t start_timeout_timer_with_defined_ms(uint32_t timeout_ms) +{ + fsp_err_t err = FSP_SUCCESS; + + /* update the specified timeout into a global variable and this will be checked in timer callback.*/ + timeout_value_in_ms = timeout_ms; + /* Resets the counter value.*/ + err = R_AGT_Reset(&g_timeout_timer_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_AGT_Reset API FAILED \r\n"); + return err; + } + + /* start the AGT timer.*/ + err = R_AGT_Start(&g_timeout_timer_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_AGT_Start API FAILED \r\n"); + } + return err; +} + +/*******************************************************************************************************************//** + * @brief This function closes opened AGT module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void agt_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close AGT0 module */ + err = R_AGT_Close(&g_timeout_timer_ctrl); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* AGT0 Close failure message */ + APP_ERR_PRINT("\r\nERROR : R_AGT_Close API FAILED.\r\n"); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup i3c_master_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/i3c_master_ep.h b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/i3c_master_ep.h new file mode 100644 index 0000000000..223d84826e --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/e2studio/src/i3c_master_ep.h @@ -0,0 +1,88 @@ +/*********************************************************************************************************************** + * File Name : i3c_master_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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#ifndef I3C_MASTER_EP_H_ +#define I3C_MASTER_EP_H_ + +#define MAX_IBI_PAYLOAD_SIZE (32) +#define MAX_WRITE_DATA_LEN (32) +#define MAX_READ_DATA_LEN (32) +#define I3C_MASTER_DEVICE_STATIC_ADDRESS (0x70) +#define I3C_MASTER_DEVICE_DYNAMIC_ADDRESS (0x70) +#define I3C_SLAVE_DEVICE_DYNAMIC_ADDRESS_START (0x71) +#define WAIT_TIME (3000) +/* MACRO for null character */ +#define NULL_CHAR '\0' +#define WORD_ALIGN (4) +#define ONE (1) + +/* I3C Event Flags */ +#define I3C_EVENT_FLAG_ENTDAA_ADDRESS_PHASE 0x00000001 +#define I3C_EVENT_FLAG_IBI_READ_COMPLETE 0x00000002 +#define I3C_EVENT_FLAG_IBI_READ_BUFFER_FULL 0x00000004 +#define I3C_EVENT_FLAG_READ_BUFFER_FULL 0x00000008 +#define I3C_EVENT_FLAG_IBI_WRITE_COMPLETE 0x00000010 +#define I3C_EVENT_FLAG_HDR_EXIT_PATTERN_DETECTED 0x00000020 +#define I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE 0x00000040 +#define I3C_EVENT_FLAG_COMMAND_COMPLETE 0x00000080 +#define I3C_EVENT_FLAG_WRITE_COMPLETE 0x00000100 +#define I3C_EVENT_FLAG_READ_COMPLETE 0x00000200 +#define I3C_EVENT_FLAG_TIMEOUT_DETECTED 0x00000400 +#define I3C_EVENT_FLAG_INTERNAL_ERROR 0x00000800 + +typedef enum rtt_menu_options +{ + DISPLAY_I3C_SLAVE_INFO = 1, + MASTER_WRITE_READ = 2 +}rtt_menu_options_t; + + +/** Structure for configuring a slave address when the driver is in slave mode (See @ref i3c_api_t::deviceCfgSet). */ +typedef struct s_i3c_slave_device_information +{ + uint8_t static_address; + uint8_t dynamic_address; + i3c_slave_info_t slave_info; ///< PID, BCR, and DCR registers for the device (Slave mode only). + uint16_t max_read_length; + uint16_t max_write_length; + uint8_t pending_interrupt; ///< Contains the interrupt number of any pending interrupt, or 0 if no interrupts are pending. + uint8_t protocol_error; + uint8_t vendor_status; ///< Reserved for vendor-specific meaning. + i3c_activity_state_t activity_mode; +} i3c_device_information_t; + +#define EP_INFO "This example project demonstrates the typical use of the I3C Driver as master\r\n"\ + "on Renesas RA MCUs based on Renesas FSP. The I3C master demonstrates operation\r\n"\ + "with I3C slave connected on another RA board. once initialization is\r\n"\ + "successful, it will start assigning dynamic addresses to slave devices present on the bus.\r\n"\ + "The EP performs write/read operation and displays device information based on user input.\r\n"\ + "Error and info messages will be printed on JlinkRTTViewer.\r\n"\ + "Refer to readme.txt file for more details on Example Project and\r\n"\ + "FSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +#define EP_FUNCTION_MENU " \r\nI3C Master operations : \r\n"\ + "1. Display I3C slave device Information if exists on I3C bus\r\n"\ + "2. I3C Write Read operation\r\n" + + +#endif /* I3C_MASTER_EP_H_ */ diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/i3c_notes.md b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/i3c_notes.md new file mode 100644 index 0000000000..002671c16d --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/i3c_notes.md @@ -0,0 +1,136 @@ +**Note :** MD file is common for both i3c_master and i3c_slave EP. + +# Introduction # + +The sample code accompanying this file shows the operation of the I3C Driver on Renesas RA2E2 MCUs based on Renesas FSP. +The I3C master on EK-RA2E2 demonstrates operations associated with an I3C slave running on another RA2E2 board. Once initialization is successful, +I3C Master device assigns slave address to I3C slave device through DAA (dynamic address assignment) using I3C common command code (CCC). +Once Dynamic Address Assignment is completed, the Master EP performs write/read operations, and displays slave device information based on user input. +If the on-board switch is pressed on the slave side, it will initiate an IBI transfer request. +The application status messages will be displayed in the Jlink RTT Viewer and on-board LEDs. Refer **[LED Status](#led-status)** section for LED observation. + + +Please refer to the [Example Project Usage Guide](https://github.com/renesas/ra-fsp-examples/blob/master/example_projects/Example%20Project%20Usage%20Guide.pdf) +for general information on example projects and [readme.txt](./readme.txt) for specifics of operation. + +## Required Resources ## +To build and run the I3C example project, the following resources are needed. + +### Hardware ### +* Renesas EK-RA2E2 kit - 2x +* USB A to USB Micro B Cable - 2x +* Jumper wires to link EK-RA2E2 kits - 5x +* Pull up resistor of value 3.9 or 4.7k ohms - 1x + +Refer to [readme.txt](./readme.txt) for information on how to connect the hardware. + +### Software ### +1. Refer to the software required section in [Example Project Usage Guide](https://github.com/renesas/ra-fsp-examples/blob/master/example_projects/Example%20Project%20Usage%20Guide.pdf) + + +## Related Collateral References ## +The following documents can be referred to for enhancing your understanding of +the operation of this example project: +- [FSP User Manual on GitHub](https://renesas.github.io/fsp/) +- [FSP Known Issues](https://github.com/renesas/fsp/issues) + + +# Project Notes # + +## System Level Block Diagram ## + High level block diagram + +![I3C](images/highLevel_i3c.jpg "High Level Block Diagram") + + +## FSP Modules Used ## +List of important modules that are used in this example project. Refer to the FSP User Manual for further details on each module listed below. + +| Module Name | Usage | Searchable Keyword | +|-------------|-----------------------------------------------|-----------------------------------------------| +|I3C | Driver for the I3C peripheral to demonstrate Master and Slave mode on RA2E2 MCUs | i3c| +|AGT | Driver for the AGT peripheral is used for demonstrating timeout condition. | agt| +|ICU | The external_irq interface is for configuring interrupts to fire when a trigger condition is detected on an external IRQ pin | icu| + + +## Module Configuration Notes ## +This section describes FSP Configurator properties which are important or different than those selected by default. + +**I3C Master Configuration properties** + +| Module Property Path and Identifier | Default Value | Used Value | Reason | +| :-------------------------------------: | :---------------: | :------------: | :--------: | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Common > Slave Support |Enable | Disable |As only master mode is required, disable slave support to decrease code size. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > ACK Hot-Join Requests |Disable | Enable |Enable Hot-Join Requests acknowledgment. If a Hot-Join event is received, then the master will initiate the dynamic address assignment. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > Notify Rejected Hot-Join Requests |Disable | Enable |Generate a callback when an IBI Hot-Join Request is rejected. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > Notify Rejected Mastership Requests |Disable | Enable |Generate a callback when an IBI Mastership Request is rejected. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > Notify Rejected Interrupt Requests |Disable | Enable |Generate a callback when an IBI Interrupt Request is rejected. | + +**I3C Slave Configuration properties** + +| Module Property Path and Identifier | Default Value | Used Value | Reason | +| :-------------------------------------: | :---------------: | :------------: | :--------: | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Common > Master Support |Enable | Disable |If only slave mode is required, disable master support to decrease code size. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > ENEC/DISEC > In-Band Interrupts |Disable | Enable |Enable the In-Band Interrupts capability, so that the slave should issue IBI requests. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > ENEC/DISEC > Hot-Join Requests |Disable | Enable |Enable the Hot-Join Requests capability, so that the slave should issue Hot-Join requests. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > SETMWL/GETMWL > Max Write Length |65535 | 64 |Set the Device Max Write Length. In this EP, the write buffer is 64-byte. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > SETMRL/GETMRL > Max Read Length |65535 | 64 |Set the Device Max Read Length. In this EP, the read buffer is 64-byte. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > SETMRL/GETMRL > Max IBI Payload Length |0 | 32 |Set the Device Max IBI Payload Length. In this EP, the IBI read buffer is 32-byte. | + +The table below lists the FSP provided API used at the application layer by this example project. + +| API Name | Usage | +|-------------|--------------------------------------------------------------------------------| +|R_I3C_Open|This API is used to Open the I3C instance. | +|R_I3C_DeviceCfgSet|This API is used to set the configuration for this device | +|R_I3C_MasterDeviceTableSet|This API configures an entry in the master device table. | +|R_I3C_Enable|This API is used to Enable the I3C device. | +|R_I3C_IbiRead|This API is used to set the read buffer for storing received IBI data. Used in only master mode. | +|R_I3C_DynamicAddressAssignmentStart|This API is used to start the Dynamic Address Assignment Process. | +|R_I3C_Write|This API is used to set the write buffer for the transfer. In master mode, start the transfer. | +|R_I3C_Read|This API is used set the read buffer for the transfer. In master mode, start the transfer. | +|R_I3C_SlaveStatusSet|This API is used to set the status returned to the master in response to a GETSTATUS command. | +|R_I3C_IbIWrite|This API is used to initiate an IBI write operation. Used in only Slave mode. | +|R_I3C_Close|This API is used to close the I3C instance | +|R_AGT_Open|This API is used to initialize the AGT module instance. | +|R_AGT_Stop|This API is used to stop the timer. | +|R_AGT_Reset|This API is used to reset the counter value. | +|R_AGT_Start|This API is used to Start timer. | +|R_AGT_Close|This API is used to close the AGT module instance. | +|R_ICU_ExternalIrqOpen|This API is used to prepare an external IRQ pin for operation. | +|R_ICU_ExternalIrqEnable|This API is used to enable external interrupt for specified channel at NVIC. | +|R_ICU_ExternalIrqClose|This API is used to close the external interrupt channel. | +|R_IOPORT_PinRead |This API is used to read the current status of GPIO Pin. | +|R_IOPORT_PinWrite |This API is used to write the value on GPIO Pin. | + + +## Verifying operation ## +1. Import, generate and build both i3c_master and i3c_slave EPs in different workspaces. + Before running the example project, make sure hardware connections are done on both master and slave side. +2. Download i3c_master EP to one EK-RA2E2 kit and run the project. +3. Download i3c_slave EP to another EK-RA2E2 kit and run the project. +4. Now open one Jlink RTT Viewer and connect to the master board and open another/second JlinkRTTViewer and connect it to slave board. +5. User can perform Menu option operations on the master side and check corresponding results for the Master and Slave EPs on the respective JlinkRTTViewer. +6. Also on slave side user can perform IBI transfer request using Push button(S2) and verify result on JLinkRTT_Viewer. + + Below images showcases the I3C Master output on JLinkRTT_Viewer: + + ![I3C Master banner snapshot](images/i3c_master_banner_info.jpg "Banner Info") + + ![I3C Master rtt output](images/i3c_master_rtt_log1.jpg "RTT output") + + ![I3C Master rtt output](images/i3c_master_rtt_log2.jpg "RTT output") + + Below images showcases the I3C Slave output on JLinkRTT_Viewer: + + ![I3C Slave banner sanpshot](images/i3c_slave_banner_info.jpg "Banner Info") + + ![I3C Slave rtt snapshot](images/i3c_slave_rtt_log.jpg "RTT output") + + +## LED Status ## +Below are the obsrvations of the LED operation on slave board : +* When Dynamic Address Assignment completes, the onboard Blue LED status will be toggled. +* When write trasfer completes, the onboard Green LED status will be toggled. +* When read transfer completes, the onboard Red LED status will be toggled. +* When IBI write trasfer completes, the onboard Green LED status will be toggled. \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/highLevel_i3c.jpg b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/highLevel_i3c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23b2a8564b7feb12ba2350c4cd9867fe6c4d1e34 GIT binary patch literal 28713 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 Qrt|!7yc7Rt*Uy>%1v?NK+5i9m literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_banner_info.jpg b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_banner_info.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21aaa1a5f583b5e1611cb71f4df380b63cac2a75 GIT binary patch literal 140654 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�{7cM_ip9|qx36US@ z^?dC(P}-VwYa-jaL%BNFPi3>%{MoNik^Ll|N=a1Sbpv?f0BZ(=dM*?;wt0a1qF>$( z!IC-wYP>p?6sLC+d9-RRU-WL)9eeHvX!<2(Db@`X@RvV`!( z2Yx$P!`+YF#!~P@7-3db)ot8BCY*>CGyq1huUad`Ele~HBX#vYF6yB}$C3Wx4m}aB zV}9LbKF4v|_e`>=$D$v+oQ$$;MZZG%tY};a*FfyK=w!zkXd)f3EyEMGmmG;dp+CHh zzgLDfT)O%~<2HRo!X)j3^X>h<4|d-tKj|Iq_q{vcm-D25 z5fDJf@stOxgyMeSL@Y^EG5-Fxg2;&9e2TnYv@#)qFM>tFL(44SK9Z~Vx`X)TSKiji z#a>U_LsTaqt;6Qw{Hqe(CE7$yDVrsWma@Q$!L?tzW*SOQUFm$s!7+HG&H`EQscM`B zOv0Y~GFjt}sI;F*amHW;l9P5nXFT4Mth?5$O8nVFQRiOCm#ydQGMAaM#^#^-mqV!| zYWBq6=PnPHAY}i1#7Od9_W+Edg)T?ju@Z+h4B1;nP$}6v(|-0@8hNHcs>fEuMhoEcY_$AbC7rgNqahjU!dEP4Vg~WE?iggy+~lx2uK9()!FQlCFrIF{_xny#K?5JJkBy z*1*^{)1fuETdfa-U({gxPA2K-qvqmumkvy8+j)30hgi%k7Z^!OKnwoLvGFs5SVukpIuU z)KjRoTLzj4b>rds4fXCD5loOSU4InU9!hDv`gOC8VT{h#}Uga31%fE2tAa!?Av4vfw0hrgT z2J6ZJ^gj;Z+V4Po%9VYDoZa`I`!%;toK{+D-CEmGWL0kKhXVW037QclVfDvq{<)e| ztMU3{)cWQpxdkf+F4;cCs_WW71+1YC6QLVwtQ|=Zdu-?OjseO|jBro9yvHw${qlD@$nh#;U(05Ja1?xwhqrVoBt|z^7-G YrQ}yL>HTf~OYR#*6jCH8qKW|j*{AVKasU7T literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_rtt_log1.jpg b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_rtt_log1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab03983bd3d35fd5935b62c2c0094be879242afb GIT binary patch literal 68049 zcmeFZ2UJtxmNpy(q)U;G5Tz;z2vSr^M7oHG3P_EL)Cdu2K>|^f-UJi`1f;8!NDTre z(gj4M2vS3Wg7kzE4iLh3y!XzXZ)U!GXXan)|Nix_H7A?}i@ZtBKKtFzes;_LkNs%~ z?z|X2os*r7jf0Jqm4lmugOdw9SlJKraC060^Y@=O`SbEW zuL6I#*jU;AtoZL8`=20uYzHt0S(y$J z`3D3Bp@JVic^VNJ6&(|slKT8bTKdb3%>07FqT-S_Z{Jl_*VNYG>OVBJw6?W(bbjvY z9vB?@K0NYcbc{rv`T1*h?)Urxb!~lPlePtH@BESL0EFqUV*OpRe^ob{eDe`{?ec=v$y1qkFcMDWu-q}3UHb03nQN9EavaA@~2&YABz=K|gPkQgFO zbAhm9rxg7CdTPB=(gVPP3ZIGUu;lG>DMDYOE*N<7eZYULr|M4FWZvUU7_>N^%2sgf z@KU>#fwsb{)o5tVY8&h@s&1#p2=d+~h$p6mF zYL3W*mqNfenr^#eJ;a{wxRu_y*{Y+|9eJ&+q*_r?t?HS9BCkGkta}pO9)FG+L91wR z%PI_Qu+%752gVdVUM6MT;SYR!PFsKMLrcU}fd|;K&^yb!X#bDsy>}K)g z$Lt#O5TXOU91%QuFZ2jSWrj5tFNKCuH&^ng4rD4-CCWejyEi|S-%{|^iByLUt(29u z>I~v9D-lbjEAu)n(rZF{75G!o?YH|7UIL|{X&*B4qKG0*dtMF5lXU&ekxT%*&6~_7 zHn6s6mAU7dGMXuW`T)z9OTy?&1pv8ax z`~$O1xvG}k0Q-^}f}&?>t#?WwE+g`=#;_C){0Ab9wuHS~H?#sHVf9X7`mX{}`;Z8U zxqZmd0*2T+xpPmDCmI7-O<}0r>kWzxOB+i`hWn7nCZKX3Vq`#uG6aHh=?{_sL|+_q zXglgGz7GkvN1p_U`w%u_ zjQ=V#px4tjCDuTdCB%e@p$ys{7Vh}u1-KS*8@FCcxBA$a!59%&>%_>GEpkYE8^@ad z^xf{=H9+-P0|C28)FS-bCTFj_eZLO!4cv2UIOSzYb≤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�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 Ne*QoGeAmy>{{yHgBsTy6 literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_rtt_log2.jpg b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/images/i3c_master_rtt_log2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9712cfa7788b7608dd4b70dd8a290c2e57067512 GIT binary patch literal 60238 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%0A4&BLrH*pW=G^!K&28*##hrce4Z7xAoKgpwpcz@ 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 GTn#uA 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 Tn8{|<}p8bYIij6=u~d%js@FQ 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 literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/readme.txt b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/readme.txt new file mode 100644 index 0000000000..f83fc04ba4 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_master/i3c_master_ek_ra2e2_ep/readme.txt @@ -0,0 +1,52 @@ +/*********************************************************************************************************************** +* +* Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. +* +* This software is supplied by Renesas Electronics America Inc. and may only be used with products of Renesas Electronics Corp. +* and its affiliates (“Renesas”). No other uses are authorized. This software is protected under all applicable laws, +* including copyright laws. +* Renesas reserves the right to change or discontinue this software. +* THE SOFTWARE IS DELIVERED TO YOU “AS IS,” AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT +* PERMISSIBLE UNDER APPLICABLE LAW,DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE. TO THE MAXIMUM +* EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE (OR ANY PERSON +* OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, WITHOUT LIMITATION, +* ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; +* ANY LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF +* THE POSSIBILITY OF SUCH LOSS,DAMAGES, CLAIMS OR COSTS. +* +**********************************************************************************************************************/ + +1. Project Overview: + + This example project demonstrates the typical use of the I3C Driver on Renesas RA2E2 MCUs based on Renesas FSP. + The I3C master on EK-RA2E2 demonstrates operations associated with an I3C slave running on another RA2E2 board. + Once initialization is successful, I3C Master device assigns slave address to I3C slave device through + DAA (dynamic address assignment) using I3C common command code (CCC). Once Dynamic Address Assignment is completed, + the Master EP performs write/read operations, and displays slave device information based on user input. + If the on-board switch is pressed on the slave side, it will initiate an IBI transfer request. + Error and info messages will be printed on Jlink RTTViewer. + +2. Hardware Requirement: + + i. 2x Renesas EK-RA2E2 kit. + ii. 2x USB A to USB Micro B Cable. + iii. 5x Jumper wires to link RA2E2 boards. + iv. 1x Pull up resistor of value 3.9 or 4.7k ohms. + +3. Hardware Connections: + Supported Board EK-RA2E2: + * Connect micro-USB cable between J10 on I3C master board EK-RA2E2 and PC. + * Connect micro-USB cable between J10 on I3C slave board EK-RA2E2 and PC. + * External 3V3 pull-up using 3.9 or 4.7k ohms resistor should be connected on SDA line. + * Three jumper wires are required to establish loop back connection along I3C lines across the board with pins as mentioned below. + + Master Board Slave Board + ------------- ------------ + SDA0 Pin P401 ----> SDA0 Pin 401 + SCL0 Pin P400 ----> SCL0 Pin 400 + Common GND + +Note: +1. On slave side user can perform IBI transfer request using onboard Push button(S2). +2. readme is common for both i3c_master and i3c_slave EP. \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.cproject b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.cproject new file mode 100644 index 0000000000..9f344ec320 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.cproject @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.project b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.project new file mode 100644 index 0000000000..8e041f580b --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.project @@ -0,0 +1,38 @@ + + + i3c_slave_ek_ra2e2_ep + + + + + + com.renesas.cdt.ddsc.contentgen.ddscBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + com.renesas.cdt.ddsc.contentgen.ddscInterlockBundleBuilder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.renesas.cdt.ddsc.contentgen.ddscNature + com.renesas.cdt.ra.contentgen.raNature + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml new file mode 100644 index 0000000000..9554acb752 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/CoverageSetting.xml @@ -0,0 +1,7 @@ + + + 1.0 + + + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml new file mode 100644 index 0000000000..856e6788b6 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/DebugVirtualConsoleSetting.xml @@ -0,0 +1,13 @@ + + + + + true + + false + + 0 + true + false + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/IORegisterSetting.xml b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/IORegisterSetting.xml new file mode 100644 index 0000000000..b3997a3eb6 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/IORegisterSetting.xml @@ -0,0 +1,4 @@ + + + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs new file mode 100644 index 0000000000..cce6e83772 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.content.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ddsc.content.defaultlinkerscript=script/fsp.ld +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs new file mode 100644 index 0000000000..dc9b84db16 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.packs.componentfiles.prefs @@ -0,0 +1,20 @@ +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.8.0+renesas.0.fsp.3.5.0/all=4290386133,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0plus.h|2635219934,ra/arm/CMSIS_5/CMSIS/Core/Include/tz_context.h|2381390623,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h|2333906976,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_version.h|3898569239,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h|1372010515,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm23.h|1017116116,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_compiler.h|1441545198,ra/arm/CMSIS_5/LICENSE.txt|3007265674,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv8mbl.h|3127123217,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm35p.h|3163610011,ra/arm/CMSIS_5/CMSIS/Core/Include/pmu_armv8.h|364344841,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc300.h|1168186370,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm55.h|2718020009,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm33.h|1564341101,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm7.h|1745843273,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm0.h|2851112248,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm1.h|1494441116,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h|3911746910,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h|2701379970,ra/arm/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h|3358993753,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm4.h|1577199483,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h|1044777225,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h|304461792,ra/arm/CMSIS_5/CMSIS/Core/Include/core_cm3.h|3552689244,ra/arm/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h|965562395,ra/arm/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h|2327633156,ra/arm/CMSIS_5/CMSIS/Core/Include/core_sc000.h|302860276,ra/arm/CMSIS_5/CMSIS/Core/Include/cachel1_armv7.h +Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#5.8.0+renesas.0.fsp.3.5.0/libraries= +Renesas\#\#BSP\#\#Board\#\#ra2e2_ek\#\#\#\#3.5.0/all=703113810,ra/board/ra2e2_ek/board_leds.c|2892256288,ra/board/ra2e2_ek/board_init.c|3239291531,ra/board/ra2e2_ek/board_init.h|506167513,ra/board/ra2e2_ek/board.h|1942221203,ra/board/ra2e2_ek/board_leds.h +Renesas\#\#BSP\#\#Board\#\#ra2e2_ek\#\#\#\#3.5.0/libraries= +Renesas\#\#BSP\#\#ra2e2\#\#device\#\#\#\#3.5.0/all=2308894280,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +Renesas\#\#BSP\#\#ra2e2\#\#device\#\#\#\#3.5.0/libraries= +Renesas\#\#BSP\#\#ra2e2\#\#device\#\#R7FA2E2A72DNK\#\#3.5.0/libraries= +Renesas\#\#BSP\#\#ra2e2\#\#fsp\#\#\#\#3.5.0/all=809680274,ra/fsp/src/bsp/mcu/ra2e2/bsp_feature.h|2527444713,ra/fsp/src/bsp/mcu/ra2e2/bsp_elc.h|2518953311,ra/fsp/src/bsp/mcu/ra2e2/bsp_icu.h|793534509,ra/fsp/src/bsp/mcu/ra2e2/bsp_mcu_info.h +Renesas\#\#BSP\#\#ra2e2\#\#fsp\#\#\#\#3.5.0/libraries= +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#3.5.0/all=568600546,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|1236602439,ra/fsp/src/bsp/mcu/all/bsp_io.c|2308894280,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|731782070,ra/fsp/src/bsp/mcu/all/bsp_irq.h|3549961311,ra/fsp/src/bsp/mcu/all/bsp_tfu.h|1499520276,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|3255765648,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|521902797,ra/fsp/src/bsp/mcu/all/bsp_security.h|2977689308,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|2208590403,ra/fsp/inc/instances/r_ioport.h|3984836408,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|1630997354,ra/fsp/src/bsp/mcu/all/bsp_irq.c|2847966430,ra/fsp/src/bsp/mcu/all/bsp_security.c|3297195641,ra/fsp/inc/fsp_version.h|460577388,ra/fsp/src/bsp/mcu/all/bsp_io.h|1552630912,ra/fsp/src/bsp/mcu/all/bsp_guard.h|2920829723,ra/fsp/src/bsp/mcu/all/bsp_guard.c|1992062042,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|1353647784,ra/fsp/src/bsp/mcu/all/bsp_delay.c|470601830,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|3492513568,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|2386285210,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|2906400,ra/fsp/src/bsp/mcu/all/bsp_common.c|1615019982,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|3606266210,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|3983299396,ra/fsp/src/bsp/mcu/all/bsp_delay.h|4051445857,ra/fsp/src/bsp/mcu/all/bsp_common.h|1728953905,ra/fsp/inc/fsp_features.h|400573940,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|2425160085,ra/fsp/inc/api/bsp_api.h|1904866635,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|4222527282,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|3998046333,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/base_addresses.h|1939984091,ra/fsp/inc/api/r_ioport_api.h|3753300083,ra/fsp/src/bsp/mcu/all/bsp_arm_exceptions.h|546480625,ra/fsp/inc/fsp_common_api.h +Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_agt\#\#\#\#3.5.0/all=232390045,ra/fsp/inc/api/r_timer_api.h|496001117,ra/fsp/src/r_agt/r_agt.c|937966027,ra/fsp/inc/instances/r_agt.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_agt\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_i3c\#\#\#\#3.5.0/all=844149391,ra/fsp/inc/instances/r_i3c.h|2131973053,ra/fsp/inc/api/r_i3c_api.h|3200828695,ra/fsp/src/r_i3c/r_i3c.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_i3c\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_icu\#\#\#\#3.5.0/all=1906465970,ra/fsp/inc/api/r_external_irq_api.h|2545672180,ra/fsp/inc/instances/r_icu.h|3018483678,ra/fsp/src/r_icu/r_icu.c +Renesas\#\#HAL\ Drivers\#\#all\#\#r_icu\#\#\#\#3.5.0/libraries= +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#3.5.0/all=2208590403,ra/fsp/inc/instances/r_ioport.h|3254285722,ra/fsp/src/r_ioport/r_ioport.c|1939984091,ra/fsp/inc/api/r_ioport_api.h +Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#3.5.0/libraries= +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs new file mode 100644 index 0000000000..2e1942faad --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.ddsc.settingseditor.prefs @@ -0,0 +1,2 @@ +com.renesas.cdt.ddsc.settingseditor.active_page=SWPConfigurator +eclipse.preferences.version=1 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/com.renesas.cdt.managedbuild.gnuarm.prefs new file mode 100644 index 0000000000..0c9b5d059c --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_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=10.3.1.20210824 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/language.settings.xml b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/language.settings.xml new file mode 100644 index 0000000000..44b0cad503 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..e17ec91775 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,197 @@ +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_lambda_expression=20 +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_linkage_declaration=end_of_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.comment_formatter_off_tag=@formatter\:off +org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on +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_block_comment=true +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.format_header_comment=true +org.eclipse.cdt.core.formatter.format_line_comment=true +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_linkage=false +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_label_compare_to_statements=true +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_colon_in_constructor_initializer_list=insert +org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert +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_structured_binding_name_list=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_lambda_return=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_opening_structured_binding_name_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=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_closing_structured_binding_name_list=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_structured_binding_name_list=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_lambda_return=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_linkage_declaration=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_opening_structured_binding_name_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=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_ref_qualifier_in_structured_binding=do not 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_comment_formatter_tag=true +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs new file mode 100644 index 0000000000..0780888f74 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/.settings/org.eclipse.cdt.managedbuilder.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/CPATH/delimiter=; +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/CPATH/operation=remove +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/C_INCLUDE_PATH/delimiter=; +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/C_INCLUDE_PATH/operation=remove +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/append=true +environment/buildEnvironmentInclude/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/appendContributed=true +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/LIBRARY_PATH/delimiter=; +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/LIBRARY_PATH/operation=remove +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/append=true +environment/buildEnvironmentLibrary/com.renesas.cdt.managedbuild.gnuarm.config.elf.debug.1505473763/appendContributed=true diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg new file mode 100644 index 0000000000..a76ccb618e --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/R7FA2E2A72DNK.pincfg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/configuration.xml b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/configuration.xml new file mode 100644 index 0000000000..514e5ad738 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/configuration.xml @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Board Support Package Common Files + Renesas.RA.3.5.0.pack + + + I/O Port + Renesas.RA.3.5.0.pack + + + Arm CMSIS Version 5 - Core (M) + Arm.CMSIS5.5.8.0+renesas.0.fsp.3.5.0.pack + + + RA2E2-EK Board Support Files + Renesas.RA_board_ra2e2_ek.3.5.0.pack + + + Board support package for R7FA2E2A72DNK + Renesas.RA_mcu_ra2e2.3.5.0.pack + + + Board support package for RA2E2 + Renesas.RA_mcu_ra2e2.3.5.0.pack + + + Board support package for RA2E2 - FSP Data + Renesas.RA_mcu_ra2e2.3.5.0.pack + + + Asynchronous General Purpose Timer + Renesas.RA.3.5.0.pack + + + I3C + Renesas.RA.3.5.0.pack + + + External Interrupt + Renesas.RA.3.5.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.jlink b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.jlink new file mode 100644 index 0000000000..d07e7e8ab3 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.jlink @@ -0,0 +1,42 @@ +[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] +EraseType = 0x00 +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 +[RAM] +VerifyDownload = 0x00 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.launch b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.launch new file mode 100644 index 0000000000..a263208347 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep Debug_Flat.launch @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep.hex b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep.hex new file mode 100644 index 0000000000..cd9ac66d2e --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/i3c_slave_ek_ra2e2_ep.hex @@ -0,0 +1,1129 @@ +:10000000A85B0020513600003D3500004D36000051 +:100010004D3600004D3600004D3600004D360000D4 +:100020000000000000000000000000004D3600004D +:100030004D360000000000004D3600004D36000037 +:100040008D290000C5280000692E00000000000076 +:1000500000000000452B000000000000152F0000EC +:1000600000000000712A000000000000DD320000E6 +:10007000000000003D1D0000000000000000000026 +: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 +:1005000010B544F23004C2F20004237863B940F21B +:100510000003C0F200032BB144F21060C0F20000EF +:1005200000E000BF0123237010BDC04640F200036D +:10053000C0F2000310B54BB144F2340144F2106034 +:10054000C2F20001C0F2000000E000BF10BDC046D2 +:10055000F8B58368C568CE4699465B1B4746984602 +:100560004368040080B50E0017005819904509D95A +:1005700003F046F9BFF35F8FED19E560C0BCB946E3 +:10058000B046F8BD424603F03BF94B463100ED1949 +:10059000ED1A2A006068414403F032F9BFF35F8F1F +:1005A000E560EBE7F8B54746CE46884680B51600CD +:1005B000070040F20009C56884681CE0013B5B1B32 +:1005C000641BB44200D934009C4200D91C007B68F3 +:1005D00022004146581903F013F92D19A144A044F3 +:1005E000361BBC68631B5A1E93415B421D40BFF320 +:1005F0005F8FFD6036B13B699D42DFD3013B1B1924 +:100600005B1BDDE74846C0BCB946B046F8BDC046F6 +:1006100010B544F24C04C2F20004A82200212000CC +:1006200003F0F7F8032343F68C022361636144F27D +:100630000413C0F20002C2F20003A261E36141F2BE +:10064000000323620023A3626362E362226644F232 +:10065000F402C2F2000262661022A2662367E36619 +:100660006367BFF35F8F43F698025321C0F2000225 +:1006700001E00F215156E1540133013A102BF8D11A +:10068000BFF35F8F10BDC046431C70B50400580017 +:10069000C01844F24C03C2F200039C4663001B19CD +:1006A000DB006344DC6AC00015006044012C05D007 +:1006B000022C1ED084B10024200070BD9A6A5C6AAE +:1006C000A2421FD9013A121B2C00954200D91400F6 +:1006D0002200FFF73DFFEFE79A6A5E6AB2420CD94B +:1006E000013A921B9542E7D82A00FFF731FF2C0010 +:1006F000E2E7FFF757FF0400DEE71B6AD218013A72 +:10070000921BEFE71B6AD218013A121BDCE7C046C6 +:10071000F8B544F24C03C2F200031B7804000D004C +:10072000160063B1EFF31087012181F310883200C6 +:1007300029002000FFF7A8FF87F31088F8BDFFF716 +:1007400067FFEFE710B5040083686268581C9042A9 +:1007500007D82268D154E36862680133E36003007C +:10076000A0609A4200D010BD21682069FFF7D0FF39 +:10077000A368984203D001235B42E360F3E70023C0 +:10078000A360F0E7F8B557464E464546DE46E0B56D +:100790001E000A9B0F00814615009A460B9997424E +:1007A0006DD33B000122B3FBF5F301329D42FAD930 +:1007B0009046B24200D2B04601231A000A40934646 +:1007C0000B4240D15346002B3DD020248B0751D4FF +:1007D000D04538D201235B429C4621004846E24482 +:1007E000FFF7B0FF4B46DB68002B26DB5346002BA0 +:1007F000EED10124012E03D9013E6C43012EFBD81A +:10080000B7FBF4F39D42F8D943F63016C0F2000668 +:1008100006E0B4FBF5F3AC420DD31C00B7FBF3F3D9 +:1008200022005A43F1564846BF1AFFF78BFF4B464A +:10083000DB68002BEDDA5B46C3B9F0BCBB46B246C1 +:10084000A946A046F8BD4B46DB68002BD1DAF4E799 +:10085000D045F2D201235B429C4620214846E24427 +:10086000FFF770FF4B46DB68002BE6DB5346002B9F +:10087000EED1E2E77442744124012034A8E701225A +:1008800096E7C046F0B5DE4657464E464546E0B5CB +:100890009DB00CAB079340230893002309930A9360 +:1008A000B74B83460C00904640F201099A460B90E4 +:1008B00005E007A8FFF746FF0A98002861DB002142 +:1008C00061560134002963D02529F2D1220000238A +:1008D000D356002602250820140021392D2B0DD0D7 +:1008E0002D2B0FDC232B12D02B2B00D04CE10E43F1 +:1008F00001320023D35614002D2BF1D14B46013287 +:100900001E43F6E7302B05D12E430132F1E70643B3 +:100910000132EEE71A00303AD2B20025092A0FD888 +:100920001900AB005B195B005B18002101346156B4 +:10093000303B0A00303AD2B21D00092AF1D90B002F +:100940002E2B00D1CDE000230027E356042102E046 +:1009500000230134E3561A008A43682AF8D0252B75 +:1009600007D0583BDBB2202B07D852469B00D35808 +:100970009F46252107A8FFF7E5FE0A9801340028C5 +:100980009DDA1DB0F0BCBB46B246A946A046F0BDFC +:100990000A980028F5DD099A002A00D0BDE08018E9 +:1009A000EFE7434641461B6807A81A1D0A6019680D +:1009B00010223B0001960095FFF7E4FE01340A98EF +:1009C000DDE7434641461B6807A81A1D0A601968FF +:1009D0000A223B0001960095FFF7D4FE01340A98E5 +:1009E000CDE7434641461B681A1D0A601D6805E0B5 +:1009F00007A8FFF7A7FE0A980028BFDB0021695669 +:100A000001350029F4D10A98B8E7434641461B68EE +:100A100007A81A1D0A6019680023019308331022E1 +:100A20000093FFF7AFFE01340A98A8E7434641461A +:100A30001B681A1D1B680A60DA1703939B18534042 +:100A40000122092B06DD0A201900013293FBF0F385 +:100A50006329F9DC0497974267D385B3039B002B86 +:100A600067DB730765D4B30700D547B34B46334202 +:100A700025D125B30596049EAE421FD207A820219A +:100A8000FFF760FE0A98013D002800DA76E7002DA6 +:100A9000F2D1059E039B002B4DDB730756D4032335 +:100AA0003340022B57D007A83B000A220399019636 +:100AB0000095FFF767FE01340A9860E7059E0A98E3 +:100AC0000028E7DA01345AE7434641461B6807A885 +:100AD0001A1D0A6000215956FFF734FE01340A98A6 +:100AE0004DE70123E356611C1A00303AD2B20C00E4 +:100AF0000027092A00D929E71900BB00DB195B0090 +:100B00005B18002101346156303B0A00303AD2B202 +:100B10001F00092AF1D90B0018E758460CA9FFF766 +:100B2000F7FD0A98099A80182BE70492002DC6D089 +:100B300094E7013D97E75B422D2107A80393FFF758 +:100B400001FE0A980028AADA013418E72B2107A829 +:100B5000FFF7F8FDF5E7002FA5D19DB1049BAB424F +:100B600009D207A83021FFF7EDFD0A98013D0028C2 +:100B7000F3DA013403E70A98002894DA0134FEE638 +:100B8000AC38000000258EE70025DCE60EB400B589 +:100B900082B003AB02CB01AA0193FFF773FE02B050 +:100BA00008BC03B01847C046002310B584B003AC9E +:100BB0002000039302F086FC6278E3780192A27829 +:100BC00043F64411009243F64012C0F20001C0F215 +:100BD00000020020FFF7DAFF43F6A0210020C0F258 +:100BE0000001FFF7D3FF44F2405145F2B020C0F2BC +:100BF0000001C2F2000002F0EDF9040068BB00F051 +:100C0000A5FC0400002855D100F072F9040000286A +:100C10003CD100F06BFA04000028FAD043F65053A0 +:100C200043F67C5243F6C041C0F20003C0F200021A +:100C3000C0F200010020FFF7A9FF00F025FD00F041 +:100C4000D5FC00F021FC43F6DC412200C0F200019B +:100C50000020FFF79BFF00BEDBE743F69C4343F613 +:100C60007C5243F6C041C0F20003C0F20002C0F261 +:100C700000010020FFF78AFF43F6DC412200C0F2AA +:100C800000010020FFF782FF00BEB8E743F62453BF +:100C900043F67C5243F6C041C0F20003C0F20002AA +:100CA000C0F200010020FFF771FF00F0EDFC00F042 +:100CB0009DFCC8E743F6FC4343F67C5243F6C04133 +:100CC000C0F20003C0F20002C0F200010020FFF7F2 +:100CD0005DFF00F0D9FC43F6DC412200C0F20001C8 +:100CE0000020FFF753FF00BE8EE7C04600B583B07B +:100CF00040B94CF2000390220121C4F27E039954C2 +:100D000003B000BD0228FBD144F2CC4345F23820A9 +:100D1000C0F200035B68C2F200001900019300F00A +:100D200005FFEDE7F8B545F205150023C2F2000511 +:100D30002B70040045F2342345F2B0206422C2F245 +:100D40000003C2F200001A6002F06CFA06000028EC +:100D50005FD145F2B020C2F2000002F02FFA060087 +:100D600008BB45F20C110127C2F200012B78C3B970 +:100D7000002300269A00885828B13800984006437E +:100D800088580138885001330C2BF3D130002040B3 +:100D90002642EBD045F23C130022C2F200031A6057 +:100DA00000E00020F8BD43F6AC53C0F2000344F26B +:100DB0005C4243F6C041C0F20002C0F200010020D4 +:100DC000FFF7E4FE43F6186344F2804243F6C04165 +:100DD0000020C0F20003C0F20002C0F20001FFF7E1 +:100DE000D5FE45F25020C2F2000001F0CBF8A8B9C0 +:100DF00045F2B020C2F2000002F02EFA28BB43F602 +:100E0000DC413200C0F200010020FFF7BFFE00BE4F +:100E1000A7E743F68853C0F20003C8E743F6D05370 +:100E200044F2404243F6C0410020C0F20003C0F249 +:100E30000002C0F20001FFF7A9FE45F2B020C2F2A5 +:100E4000000002F009FA0028D9D043F6F45344F226 +:100E50001C4243F6C041C0F20003C0F20002C0F2DF +:100E600000010020FFF792FEC9E7C046F8B545F241 +:100E7000E815C2F200052B783BBB44F20C04642752 +:100E8000C2F2000401E02B78FBB94020FFF74AFFD3 +:100E90002368013B2360002BF5D14306F3D443F6CE +:100EA0005C610020C0F20001FFF770FE45F25020A7 +:100EB000002300220121C2F2000001F02BFA0600FB +:100EC00030B92B782760002BDFD000263000F8BD2A +:100ED00043F67C6344F2984243F6C041C0F20003FB +:100EE000C0F20002C0F200010020FFF74FFEEDE764 +:100EF00045F2441010B5202284B00021C2F2000057 +:100F000002F087FC45F2EC1040220021C2F2000002 +:100F100002F07FFC44F2EC4145F25020C0F20001A7 +:100F2000C2F2000001F0FCF80400002800D0ACE0A0 +:100F300043F6D46144F20004C0F200010020FFF740 +:100F400025FE694BC2F20004638040F2005343F671 +:100F50000C7163600623C0F2000123810020FFF7BB +:100F600015FE43F628712278C0F200010020FFF739 +:100F70000DFE43F64471227AC0F200010020FFF713 +:100F800005FE43F66071627AC0F200010020FFF7AF +:100F9000FDFDE179E378A2780391A1790020029127 +:100FA000617901912179009143F67C71C0F20001D1 +:100FB000FFF7ECFD45F250202100C2F2000001F0E5 +:100FC0005BF80400002847D145F25020C2F200002F +:100FD00001F02CFA0400002800D07BE044F2C84362 +:100FE00045F25020C0F200031968C2F2000000F080 +:100FF000DFFE0400002858D144F230010020C0F286 +:101000000001FFF7C3FDFFF731FF0400002866D1A0 +:1010100045F2E81344F2A001C2F200031A78C0F2CC +:1010200000010020FFF7B2FD45F2302345F26811C0 +:1010300045F25020C2F20003C2F2000119604022C2 +:101040000023C2F2000000F051FF0400D0B144F2CE +:10105000E403C0F2000303E043F6AC73C0F2000304 +:1010600044F2B84243F6C0410020C0F20002C0F290 +:101070000001FFF78BFD45F25020C2F2000000F0A6 +:1010800081FFB8B9200004B010BD43F6B06344F24C +:10109000B84243F6C041C0F20003C0F20002C0F201 +:1010A00000010020FFF772FDECE744F20003C0F2FC +:1010B0000003D5E743F6D05344F2404243F6C04123 +:1010C000C0F20003C0F20002C0F200010020FFF7EE +:1010D0005DFDD7E743F6D873C0F20003C0E744F2E2 +:1010E0006403C0F20003BBE704CCFFFF70B540F619 +:1010F000D83082B0FFF716FE0400030600D5AAE040 +:10110000E30500D5F2E0A30547D545F2302245F2CC +:101110006813C2F200021168C2F20003994200D1C2 +:1011200090E145F2081645F2EC10C2F2000635686F +:101130001360C2F200002A0002F062FB45F2EC11DB +:1011400045F250202A000023C2F20001C2F2000042 +:1011500001F04AF80500002800D051E144F22821AE +:101160003268C0F200010020FFF710FD44F2CC43CA +:1011700045F22C25C0F200031B68C2F200052A00CC +:101180000F211800019300F0B1FA2A780F21534281 +:101190005A410198D2B200F0FFFAE30633D4230794 +:1011A00011D440F600031D002540234200D02CE15D +:1011B00045F20413C2F200031A78002A00D0CCE0F2 +:1011C000280002B070BD45F2302345F25020C2F233 +:1011D0000003196840220023C2F2000000F086FEDE +:1011E00005000028DDD044F2B013C0F2000344F241 +:1011F0004C4243F6C041C0F20002C0F200010020A0 +:10120000FFF7C4FCDCE745F2081344F25821C2F2B0 +:1012100000031A68C0F200010020FFF7B7FC44F297 +:10122000CC4345F22C25C0F200031B68C2F2000536 +:1012300018002A0040F60E11019300F057FA2A78A0 +:1012400040F60E1153425A410198D2B200F0A4FA6E +:101250002307A6D5B7E745F2E91544F20811C2F213 +:1012600000052A780020C0F20001FFF78FFC45F24C +:101270000813C2F200031A68002A00D0E5E02B78B8 +:10128000062B00D03CE745F2E81344F2541100224B +:10129000C2F20003C0F2000100201A70FFF776FCD2 +:1012A000FFF7E4FD002800D0DCE044F280110020CC +:1012B000C0F20001FFF76AFC44F2CC4345F22C2552 +:1012C000C0F200031B68C2F200052A00180040F2B9 +:1012D0000C11019300F00AFA2A7840F20C115342E3 +:1012E0005A410198D2B200F057FA09E745F230238B +:1012F00045F25020C2F20003196840220023C2F2D6 +:10130000000000F0F3FD0500002800D06BE745F277 +:10131000081344F2D411C2F200031A68C0F20001AB +:101320000020FFF733FC44F2CC4345F22C25C0F2F9 +:1013300000031B68C2F200052A00180040F60E11D7 +:10134000019300F0D3F92A7840F60E1153425A4126 +:101350000198D2B200F020FAD5E61D7044F2CC43D9 +:1013600045F20614C0F200031B68C2F2000422001A +:10137000180040F20521019300F0B8F945F264121B +:10138000C2F20002237812781343002B00D017E733 +:1013900044F2DC210020C0F20001FFF7F7FB44F229 +:1013A00000310020C0F20001FFF7F0FB45F24413CA +:1013B00045F24014C2F200031800C2F2000425688E +:1013C0002030E9B2C91ACA181A7001338342FAD11F +:1013D00045F2441245F25020013520230021C2F28B +:1013E0000002C2F20000256000F094FF0500A0BBDF +:1013F00044F254310020C0F20001FFF7C7FBDFE6E2 +:1014000044F20423C0F20003F1E644F28C2344F2D8 +:101410004C4243F6C041C0F20003C0F20002C0F2E9 +:1014200000010020FFF7B2FB45F23C1344F2B82163 +:10143000C2F2000300201A68C0F20001FFF7A6FB09 +:101440006425BDE60B0040336BE644F22811002012 +:10145000C0F20001FFF79AFB11E744F22C33C0F20F +:101460000003C4E644F2640344F24C4243F6C04134 +:101470000020C0F20003C0F20002C0F20001FFF73A +:1014800085FB64259CE6C04645F2502010B5C2F2AB +:10149000000000F077FD00B910BD43F6D05344F2D0 +:1014A000404243F6C041C0F20003C0F20002C0F265 +:1014B00000010020FFF76AFBEEE7C04645F23C134F +:1014C0004268C2F2000310B51A6045F20C120378AC +:1014D000C2F200029C00A1580131A150072B16D086 +:1014E00011D8042B06D145F208138268C2F200031A +:1014F0001A6010BD062BFCD145F2E813027CC2F243 +:1015000000031A70F5E7083B012BECD9F1E745F22F +:10151000E913C27CC2F200031A708368002BE8D082 +:1015200045F20812C2F20002136045F2302245F281 +:101530006813C2F200021168C2F20003994201D09E +:101540001360D6E70B0040331360D2E744F2D84172 +:1015500045F2402010B5C0F20001C2F2000000F0D8 +:1015600013FB0400002830D145F24020C2F20000F5 +:1015700000F082FB040008B9200010BD44F2BC3327 +:1015800044F2344243F6C0410020C0F20003C0F2EE +:101590000002C0F20001FFF7F9FA45F24020C2F262 +:1015A000000000F09DFB0028E6D044F2EC3344F24A +:1015B000284243F6C041C0F20003C0F20002C0F26C +:1015C00000010020FFF7E2FAD6E744F28C3344F240 +:1015D000344243F6C041C0F20003C0F20002C0F240 +:1015E00000010020FFF7D2FAC6E7C04645F24020CE +:1015F00010B5C2F2000000F073FB00B910BD44F258 +:10160000EC3344F2284243F6C041C0F20003C0F27A +:101610000002C0F200010020FFF7B8FAEEE7C04672 +:1016200000B5436883B0012B01D003B000BD45F283 +:101630000412C2F20002137044F2CC4345F2641269 +:10164000C0F200031B6840F205211800C2F200023C +:10165000019300F04BF8E8E745F23422C2F20002B1 +:10166000136810B5013B136003B110BD45F20513BB +:1016700045F2B0200122C2F20003C2F200001A704B +:1016800001F0B6FDF1E7C04645F2B02010B5C2F258 +:10169000000001F0E1FD00B910BD43F6F45344F23F +:1016A0001C4243F6C041C0F20003C0F20002C0F287 +:1016B00000010020FFF76AFAEEE7C04610B5FFF719 +:1016C00073FA002010BDC04660B145F25423026891 +:1016D000C5F24F039A4203D10023036000207047F4 +:1016E0000720FCE70120FAE70620704710B5B8B1E3 +:1016F00045F254230068C5F24F03984212D17AB1E3 +:10170000FF2040F600040B0A0840190109180020C8 +:10171000C4F2040489000B599B07DB0F137010BD42 +:101720000120FCE70720FAE790B145F25423006856 +:10173000C5F24F0398420DD152B10023C4F2040305 +:101740009C460020090A490161444B681380704798 +:101750000120FCE70720FAE710B5D0B145F2542488 +:101760000068C5F24F04A0420FD183B10020C4F23B +:10177000040084461800904300041A4002430020ED +:10178000090A490161448A6010BD0720FCE7032073 +:10179000FAE70120F8E7C04600B345F25423006899 +:1017A000C5F24F03984213D1012A15D8FF20012317 +:1017B0000840834072B14FF6FF7213400022C4F21A +:1017C00004029446090A4901614400208B6000E04C +:1017D000072070471B04F1E70320FAE70120F8E730 +:1017E00010B5D8B145F254240068C5F24F04A042A8 +:1017F00010D18BB10020C4F2040084461000090A05 +:10180000490161440C6818402043934398430860A1 +:10181000002010BD0720FCE70320FAE70120F8E7CD +:10182000C0B145F254230068C5F24F03984213D16A +:1018300082B10123090A8B40062018420ED00023F2 +:10184000C4F204039C460020490161444B681B0C10 +:10185000138070470120FCE70720FAE70320F8E730 +:1018600030B510B345F254230068C5F24F039842D7 +:101870001DD1D2B1012420000B0A98400625054253 +:101880001AD00020C4F2040084465B016344586807 +:10189000FF23194023008B40000C99B2034099426A +:1018A00007D000230020137030BD0120FCE7072083 +:1018B000FAE700201470F7E70320F5E710B5F8B158 +:1018C00045F254240068C5F24F04A04216D19BB1E2 +:1018D0000120090A8840062404420DD00020C4F2E9 +:1018E0000400844618009043000413400343002082 +:1018F00049016144CB6010BD0320FCE70720FAE7F3 +:101900000120F8E730B5002835D045F254240368AB +:10191000C5F24F04A3421DD1012A19D801231C008E +:10192000080A84400625254212D04001012A13D01E +:101930000022C4F204029446FF2211408B4060440E +:10194000C4681B0423431B0C1B04C360002000E07D +:10195000032030BD0720FCE70023FF24C4F204036A +:101960009C4621404FF6FF738A406044C5681A4088 +:101970002A431340E9E70120EBE7C046F0B5002811 +:1019800054D045F254230468C5F24F0307209C420B +:1019900000D0F0BDEFF31080012383F3108845F2EF +:1019A0001434C2F20004236833B940F60055C4F27F +:1019B0000405EB704033EB7023680133236080F340 +:1019C0001088D30321D4FF200B0A0840190140F6E8 +:1019D00000030918C4F204038900CA50EFF310820F +:1019E000012383F31088236813B12368013B23602C +:1019F000236833B940F60051C4F20401CB70803340 +:101A0000CB7082F310880020C3E7FF2040F600056A +:101A10000B0A084019010B18C4F204059B005F591A +:101A2000034E374016405F515E51D0E70120B0E7CA +:101A3000FFFFFEFFF0B5DE4657464E464546E0B591 +:101A400083B0EFF31082012383F3108845F214333F +:101A5000C2F2000301931B6833B940F60051C4F28F +:101A60000401CB704033CB7001990B6801330B60DC +:101A700082F3108803889A46BBB3802340F60005A2 +:101A80005B029946284B002240F2FF089C464168C1 +:101A9000C4F204050AE043461E4023019B190132AB +:101AA0009B0092B25851083192451ED04B468E8809 +:101AB0000868340A1842EED043461E4023019C19A0 +:101AC000A700644600977F599B1927403C00009F60 +:101AD00001327C51674607403C00009F9B0092B258 +:101AE0007C51083158519245E0D1EFF31082012327 +:101AF00083F31088019B1B681BB101990B68013BA4 +:101B00000B60019B1B6833B940F60051C4F204011D +:101B1000CB708033CB7082F3108803B0F0BCBB462F +:101B2000B246A946A046F0BDFFFFFEFF030010B578 +:101B3000080073B169B14A685AB145F25422196874 +:101B4000C5F24F02914206D01A60FFF773FF0020E2 +:101B500010BD0120FCE70E20FAE7C046030010B5D7 +:101B600008006BB145F254221B68C5F24F02934244 +:101B700008D129B14B681BB1FFF75CFF002010BDF5 +:101B80000120FCE70720FAE7F0B5D6464F46464667 +:101B9000C0B5002866D044F255330268C0F249034C +:101BA0009A4264D000295DD00F230A78D340DB0726 +:101BB0005AD58B6813B14C78FF2C5AD0022540F2CD +:101BC000003A4D5746F20006AC00A446544640F297 +:101BD0000009C4F20006057166443759B8464F46FD +:101BE00037518360CB6846F20007C3604B46C4F2AE +:101BF00000074271BB540B79CC781B0123434C790D +:101C0000DBB2E4012343DBB2BB5443465246B3503C +:101C1000002D1CDB4EF20013CEF200039846534613 +:101C2000AA0892004244D65803231D404B78FF2156 +:101C3000ED009B010B40A940AB408E43514633431E +:101C4000535045F218336246C2F20003D05044F2BA +:101C50005533C0F2490303600020E0BCBA46B146E8 +:101C6000A846F0BD0120F8E740F27A50F5E70E20D3 +:101C7000F3E70320F1E7C04610B500282BD044F26B +:101C800055330268C0F249039A4220D10423C35657 +:101C9000002B1EDB1A0046F20001C032C4F2000124 +:101CA000920050580D4C204050501F2101221940E5 +:101CB0008A404EF20011CEF200018C4640F28011B3 +:101CC00000205B099B0063445A501A6010BD072036 +:101CD000FCE70B20FAE70120F8E7C046FFFFFEFF14 +:101CE000002829D044F255330268C0F249039A42D1 +:101CF00020D104228256002A18DB1F2153091140EB +:101D000001228A404EF200112033CEF200019B00E6 +:101D10005A50BFF34F8FBFF36F8F042245F2183331 +:101D200000218256C2F200039200D15000230360CA +:101D3000002070470720FCE70120FAE730B583B0A8 +:101D4000EFF3038445F21833103C64B2C2F200038F +:101D5000A200D15846F200024879C4F20002135C96 +:101D60009B079B0F032B0ED0C034A400A3580F4D2C +:101D70002B40A3508B6823B1CA680190009268463B +:101D8000984703B030BD8B6823B1CA6801900092B8 +:101D90006846984746F20003C034C4F20003A4002A +:101DA000E25802490A40E250EBE7C046FFFFFEFF5F +:101DB00010B582B06B46998008B343F24333026892 +:101DC000C0F249039A4218D18368882B02D08368F5 +:101DD000042B16D1446840F264300B4A23581A4051 +:101DE0006B4619790F230B406946497909020B4369 +:101DF00013432350002002B010BD0720FBE7012051 +:101E0000F9E70520F7E7C046F000FFFFF0B5C6464A +:101E1000070000B54368012962D002295AD119622E +:101E20001A6A002AFCD140F2102002211A581142ED +:101E3000FCD040F2D016012421009A5911401442DE +:101E4000FAD140F2B02280259A584EF20000904616 +:101E500045F2A0326D021D62C4F201001962016AEE +:101E6000C2F2000212684901490F8A40016A49071B +:101E7000490FCA4080215B58511E9C465801C01A28 +:101E80008301181AC000604480010818B0FBF2F00A +:101E9000012101F025FB40F210237A68D3589B07FB +:101EA00011D493591C420ED140F210200221002679 +:101EB00040F2D0170124156213581942FCD0166263 +:101EC000D3591C42F7D0414640F2B023D15080BCD8 +:101ED000B846F0BD08221A621A6A002AA0D1A2E709 +:101EE00010221A621A6A002A9AD19CE7F0B5CE46EF +:101EF000474680B500283CD043F243330468C0F223 +:101F000049039C4237D1002933D08368002B36D057 +:101F10008368882B02D08368012B2ED140F21F09E1 +:101F200039274C46C36D1B69DE579C467309264012 +:101F30001E3C2500B5404EF200162033CEF20006BE +:101F40009B009D51BFF34F8FBFF36F8F0023C26380 +:101F5000402283634163835463464D46DA57002031 +:101F60001540AC4053099B009C51C0BCB946B046DB +:101F7000F0BD0120F9E70720F7E70820F5E7052085 +:101F8000F3E7C0460200F0B5002800D172E043F24A +:101F900043330168C0F24903994200D068E001214F +:101FA000C36D0E001C693823E056193B45091840E3 +:101FB00086404EF200102035CEF20000AD002E50CB +:101FC000BFF34F8FBFF36F8F39250F006657750929 +:101FD0001E40B7402035AD002F50BFF34F8FBFF3E9 +:101FE0006F8F3A250F00665775091E40B7402035A0 +:101FF000AD002F50BFF34F8FBFF36F8F3B250F0006 +:10200000665775091E40B7402035AD002F50BFF30D +:102010004F8FBFF36F8F3C2565576C092B400D0028 +:102020009D40230020339B001D50BFF34F8FBFF313 +:102030006F8F536858694000400858611962186AE8 +:102040000028FCD1EFF31085012383F31088D46DB1 +:1020500046F6FC7127680924E41BA340C4F204017E +:102060004E6833434B604B6885F310881060F0BDB9 +:102070000720FCE70120FAE7F0B500284AD043F238 +:1020800043330268C0F249039A4245D1002941D046 +:102090000C7A3F2322009A43402A3FD04B780F7896 +:1020A0001A095A4095086A4056087240012696431C +:1020B000F2011343FE221B04D203134040F2B0226C +:1020C0006507ED0F2D0340683D432B4383504B7A4A +:1020D00024021C4340F22033C450CB798C791B027C +:1020E00023435BBA9BB274328350CC788B780A79E5 +:1020F00024021C431204144340F228324B791B067D +:1021000023431BBA83508023426E5B021343436612 +:102110000020F0BD0120FCE70720FAE70620F8E7E1 +:1021200070B505000C00002857D0002955D08B68E9 +:10213000002B52D00B69002B4FD043F24332016881 +:10214000C0F2490291424AD038229A5C7F2A44D890 +:102150003B229A5C7F2A40D83A229A5C7F2A3CD85C +:1021600039229A5C7F2A38D83C229A5C7F2A34D85C +:102170003D229B5C7F2B30D82379002B31D000216E +:102180001F32043001F045FB43F24333C0F24903F0 +:102190002B60EC65EFF3108C012181F3108809208E +:1021A000246846F6FC73001B0C008440C4F2040350 +:1021B0005A68A2435A605B688CF3108843F20003AC +:1021C000C4F208036B605A69520052085A611962DE +:1021D000186A0028FCD1186000E0012070BD0E20B4 +:1021E000FCE70620FAE7C046F0B5CE46474680B584 +:1021F000002857D043F243330468C0F249039C429D +:1022000000D075E000294DD08368002B00D171E02B +:1022100083684768882B03D17B6ADB0600D574E0AE +:1022200000230025C362026381629A4206D0CC5C1F +:10223000DE00B44001332543042BF6D18468C36229 +:102240000562882C58D040F2581C40F2983940F270 +:10225000FF084E1E61467D509A4225D90024002574 +:102260000133F15CA1400D43182C02D008349A428E +:10227000F6D8494644467958C36205620C42E9D112 +:1022800040F2E01101247B580020A3437B50082A30 +:1022900004D940F2E812BB581C43BC50C0BCB9463C +:1022A000B046F0BD0120F9E740F2E81401213B59A6 +:1022B000174E8B433B51C36D18693A23C45646F2FF +:1022C00000002300C033C4F200009B001D583540BD +:1022D0001D501F20204081404EF2001063096033E2 +:1022E0009B00CEF20000195040F29833FB58C7E72C +:1022F0000720D3E70520D1E7803C3C623C6A002CF4 +:10230000FCD1C0261404BC519DE70820C6E7C04696 +:10231000FFFFFEFFF0B5CE46474680B5C8B343F297 +:1023200043340568C0F24904A54234D141B38468FE +:10233000882C3AD18468042C00D174E00424846091 +:10234000002442648464C364012929D04C1EA14145 +:102350004942490F490789462021C6F200018C46AF +:10236000E14444681BBB40F250124946A150082189 +:102370001B04A3509032A35800208B43A3500BE0C2 +:1023800040F2B02445682C59E404D0D50AB1002BA2 +:10239000CDD1012000E00720C0BCB946B046F0BD59 +:1023A00048F22009C4F20009DBE70520F4E7002623 +:1023B00040F2000C3500975DE9008F4061463943DB +:1023C0008C460136032D0CD0B342F3D140F27C127F +:1023D0008364A15040F2E01004252258AA43225001 +:1023E000C1E7042585647935FF356151042BF1D9A6 +:1023F000002740F2000C793DFF3D013A0135565D62 +:102400006146BE4031438C46182F02D00837AB429C +:10241000F4D162468564426240F2E81004252258F5 +:102420002A432250D6E70820B6E7C046F0B5DE467C +:1024300057464E464546E0B583B00090002800D18F +:102440003CE243F243330268C0F249039A4200D0AF +:102450002EE283689C46002B00D02CE28821C36DBD +:1024600083241B698160416840F2901062466404D5 +:102470000C5004300A5040F217142C300A5040F22D +:10248000D41540F20040C0F2110448634C5140F2B0 +:102490003F241035C0F210044C518863042040F2F0 +:1024A000D814C0F21000085112201034C0F21000ED +:1024B00008511D7BE83CFF3C4869AC43F64D2402C3 +:1024C0002840204348611D7B1A696C07E40F6000B7 +:1024D0000824AE072540F60F284330438865187A54 +:1024E0008507C607ED0F6C07F6085D8934432C435A +:1024F0004507ED0F0007AD07C00F2C43C007204371 +:10250000B02408518020CA675A690A509A69043079 +:102510000A50187F10B9624690300A5020202224B9 +:102520001D5C0130185C1C5D4000E40020432A243F +:1025300028431D5D01341C5DDE8CE4002C43A04665 +:102540002C241F5D08341D5D01341C5D2D02240404 +:10255000254328241C5D1A6B2404344340F2503672 +:1025600088512320FF0717430122185C40F2543999 +:10257000824092464A4656468E509A8C40F25839CE +:1025800092464A46564640F25C398E504A468C5036 +:1025900040F264348001085129201C5C40F268300C +:1025A00042460C5004300A5004300F5004300D5095 +:1025B00080204EF200124C69000620434861382109 +:1025C0000327CEF2000290465C56FF262740FA0011 +:1025D0003E27A008800040449046DF5D40F2003571 +:1025E000BA01324017004646FF22B240415940F23C +:1025F000C00891433A00B2401143415145F21830AE +:10260000A0444646009AC2F20000A1000A5046F2D9 +:102610000001B600B046C4F20001019776589F4A07 +:1026200037004646174077501F272740B8460127F6 +:102630004646B7404EF20016CEF20006B14640F2D2 +:1026400080126409A4004C44A750276039241C5709 +:102650000327A608B600B046C84446467659274028 +:10266000B146FE00FF27B740BB46B2464F465E4626 +:10267000B7435646019AB240464640F2C008174357 +:10268000009A7751A044A60032504646B600B046A4 +:102690007658824A37004646174077501F27274012 +:1026A000B84601274646B7404EF20016CEF2000665 +:1026B000B14640F280126409A4004C44A750276040 +:1026C0003A241C570327A608B600B046C84446461D +:1026D00076592740B146FE00FF27B740BB46B246B9 +:1026E0004F465E46B7435646019AB240464640F2D0 +:1026F000C0081743009A7751A044A60032504646BE +:10270000B600B0467658654A3700464617407750BF +:102710001F272740B84601274646B7404EF200160D +:10272000CEF20006B14640F280126409A4004C4487 +:10273000A75027603B241C570327A608B600B046C5 +:10274000C844464676592740B146FE00FF27B740A9 +:10275000BB46B2464F465E46B7435646019AB24024 +:10276000464640F2C0081743009A7751A044A6009D +:1027700032504646B600B0467658484A370046467C +:10278000174077501F272740B84601274646B740D5 +:102790004EF20016CEF20006B14640F280126409F5 +:1027A000A4004C44A75027603C241C570327A608CC +:1027B000B600B046C844464676592740B146FE00AA +:1027C000FF27B740BB46B2464F465E46B743564624 +:1027D000019A40F23F0BB240464640F2C008174310 +:1027E000009A7751A044A60032504646B600B04643 +:1027F00076582A4A37004646174077501F27274009 +:10280000B84601274646B7404EF20016CEF2000603 +:10281000B14640F280126409A4004C44A7502760DE +:102820003D241C570327A608B600B1464EF20016F9 +:10283000CEF20006B046C1444E4676592740B24615 +:10284000FE00B0465E469B5DC0369B013340FF27CD +:1028500046465246B740B3404E46BA431343009AE9 +:102860007351A3001A502300C0339B005A580B48E1 +:10287000012602405A501F2323409E404EF200136F +:10288000CEF20003984640F280126409A40044444A +:10289000A650266004E0C046FFFEFFFFFFFFFEFFDC +:1028A000604603B0F0BCBB46B246A946A046F0BDA8 +:1028B00040F2070CF4E740F2050CF1E740F2010C9E +:1028C000EEE7C04670B586B0EFF3038345F21832E9 +:1028D000103B5BB29900C2F200028D5846F2000232 +:1028E000C033C4F200029B0099582548014099501A +:1028F00040F2E01240F2541310206C68E158A358E3 +:102900008343A3507F236846AA68EE6D134003708B +:102910000B0F0193F36805930123AB60042A0DD1DB +:102920004FF6FF7328001940EB6C0C32591A0291D4 +:102930004430002100F06DFF8823AB6000236B65FD +:10294000E133FF33E3589A0603D562690D490A4023 +:1029500062619B0502D5AB68882B0AD040F2E01279 +:102960000949A35868460B40A350B368984706B07E +:1029700070BD02212800FFF749FA6C68EE6DEDE7A3 +:10298000FFFFFEFFFFFFFFDFDFFDFFFFF0B5D646D5 +:102990004F464646C0B586B0EFF3038345F2183282 +:1029A000103B5BB29900C2F200028C5846F2000262 +:1029B000C033C4F200029B0099582C480140995042 +:1029C00040F2E01263689958D13AFF3AC0F210021F +:1029D000114205D006B0E0BCBA46B146A846F0BDEB +:1029E00040F298329A581204120E9600002AF1D042 +:1029F000270040F2581A3437524640F2E0110220C4 +:102A0000002540F203099A5890465A5882435A507A +:102A1000A36BE26B934214D33B7BFBB914220021DE +:102A2000684600F0F6FE6B464A461A70E36D68464B +:102A3000DA689B68059201223A7398473B7B6BB931 +:102A4000A36B41465A1CA263EA00D1400A00616BA5 +:102A50000135CA54042D01D0B542D9D3636D043E6B +:102A600004336365002EB5DD6368C5E7FFFFFEFF35 +:102A7000F0B5CE46474680B5EFF3038345F21832F2 +:102A8000103B5BB29900C2F200028E5846F200027F +:102A900040F2581C40F2983940F2FF08C0339B00C6 +:102AA000C4F2000299582648014099507568376B66 +:102AB000306AF36A6246A8509F421DD90021002067 +:102AC000B26A541E0133E25C8A401043182902D0D6 +:102AD00008319F42F6D84A464146AA58F36230620E +:102AE0001142E7D140F2E0120121AB588B43AB50C9 +:102AF000C0BCB946B046F0BD40F2E81101226B58A7 +:102B000093436B50F36D0E4E19693A23C85646F243 +:102B100000010300C033C4F200019B005C58344044 +:102B20005C501F2101408A404EF20011430960337E +:102B30009B00CEF200015A5040F29833EB58D1E797 +:102B4000FFFFFEFFF0B5DE4657464E464546E0B570 +:102B50008FB0EFF3038345F2183246F20006103BC4 +:102B60005BB29900C0339B00C2F20002C4F20006BF +:102B70008C58BA4F9A5940F2E0113A409A5140F2BB +:102B800080136568B648EB586A5802406A504FF6A1 +:102B9000FF721A4011000192E26D9046D2680792CE +:102BA0005A01520F0392C022520513424CD11B020C +:102BB00000D4B3E0019B20000493082302AA137001 +:102BC00000210C22283000F024FE40F2E811434698 +:102BD000012218696B5893436B503A23C056030087 +:102BE000C0339B0099590F401F2101408A404EF28B +:102BF00000119F5143096033CEF200019B005A50EF +:102C00000021002340F220226365E133FF33EB58BB +:102C10001A4208D040F2C033EB58DBB21BB9A368AC +:102C2000882B00D10AE140F2E0128E49AB5802A88D +:102C30000B40AB50E36D9B6898470FB0F0BCBB46B0 +:102C4000B246A946A046F0BD1B0CDAB291467F22DF +:102C50001340072B00D1B7E040F29833EB581B0428 +:102C60001B0E002B00D1D0E0019B666D9E1BA36B59 +:102C7000002E3EDD270040F2581A3437524640F20B +:102C8000E0110220AA5840F2030B90466A58824392 +:102C90006A500025E26B9A4218D83A7B002A00D08D +:102CA000D2E00021143208A800F0B3FD5A4602AB6E +:102CB0001A76E36D08A8DA689B680D9201223A73D0 +:102CC00098473B7B002B00D0BDE0A36B41465A1CCC +:102CD000A263EA00D1400A00616B0135CA54042D99 +:102CE00000D1B0E0A36BAE42D4D8626D043262650D +:102CF00065684A46912A00D189E02BB12000102254 +:102D00000021343000F085FD072302AA1370130060 +:102D10004A46DA74019B0221049372E740F2983329 +:102D20002700EB5834371B041B0E002B40D0666D78 +:102D30008E1B002E3CDD40F258194B4640F2E0124B +:102D40000221EB5840F2030B9846AB5840F2010ABF +:102D50008B43AB500025A36BE26B934214D33B7BB8 +:102D6000FBB91422002108A800F053FD5A4602AB1B +:102D70001A76E36D08A8DA689B680D9252463A739A +:102D800098473B7B6BB9A36B41465A1CA263EA0090 +:102D9000D1400A00616B0135CA54042D01D0B542FF +:102DA000D9D3636D043E043365686365002EC4DCCB +:102DB000019B02AA049309230021137038001022FA +:102DC00000F027FD01211CE7019A0332920832B17D +:102DD000002340F25811013368589A42FBD1200079 +:102DE00010220021343000F014FD062302AA1370D3 +:102DF00040F23033EA580221002A00DB01E7EB58A9 +:102E000002AA9B019B0D1374FBE6A36B71E70421DF +:102E10006A6A11420BD0012240F29010A2602A5837 +:102E20001202120A2A5050302A588A432A5040F27D +:102E3000E81104206A5802436A505EE72000FEF75A +:102E4000E5FF6568EFE6A36B626D043E04326265E0 +:102E5000002E00DC4CE7656810E7C046FFFFFEFF70 +:102E6000FFFFEFFFDFFDFFFF70B5EFF3038345F2D8 +:102E70001832103B5BB29900C2F20002885846F249 +:102E80000002C0339B00C4F200029958204C21403C +:102E900099508368042B00D070BD40F27C114568C6 +:102EA000466A6E5040F2E016A9599943A951816CC7 +:102EB000C66CB1421BD340F2E816A9599943A951F7 +:102EC000C36D19693C23C8560300C0339B00995851 +:102ED0000C401F219C50012201408A404EF20011FB +:102EE00043096033CEF200019B005A50D4E7002220 +:102EF0000024436C5D1E01316B5C93401C43182A17 +:102F000002D008328E42F6D881644462C4E7C046DB +:102F1000FFFFFEFFF0B5C64600B586B0EFF30383B2 +:102F200045F21832103B5BB29900C2F200028C5895 +:102F300046F20002C033C4F200029B0099582348B5 +:102F4000014040F2D0109950E26DD3680593636858 +:102F5000196B1E584B0536D569460B2368460B7016 +:102F60009368984780236268DB055169184D0B43CD +:102F7000536180235B031F00984637401E4207D0F1 +:102F80000A236A461370E36D68469B689847474674 +:102F900040F204084346334208D06A4601331370B6 +:102FA000E36D68469B68984743461F4340F2D01143 +:102FB00063681A6B15401D635A58BA435A5006B0DD +:102FC00080BCB846F0BD01256D42D2E7FFFFFEFF91 +:102FD000FFFBFFFFF0B5C646040000B5002800D196 +:102FE000C8E0002900D1C5E0CD69002D00D1C1E0C5 +:102FF00044F254730268C0F241039A4200D1BBE02C +:103000004B69002B00D1BDE08B7C7F2B00D9CCE03D +:10301000032201260B7C3000DA401040164200D11A +:10302000C0E02A78502A00D1B5E015006E35EDB227 +:10303000012D00D89BE0002A00D0B8E00A7A032ACC +:1030400000D994E0022A00D191E040F64002C0F29B +:103050004002944663441B02A3606160EFF3108654 +:10306000012282F3108803250F7C46F6FC73ED1BCA +:10307000AA40C4F20403D8689043D860DB6886F3A2 +:1030800010880023A2681373137B9B07D80F002BB3 +:10309000FADBCB699073DF781D781E790723087AF5 +:1030A0003B40002D6AD128B102356840000103433E +:1030B0000020DBB20025167495745373907345F2AB +:1030C000CC204B686568E3602D7CC2F20000AD0047 +:1030D0002B50013B13601223CB56002B3BDB4EF2EF +:1030E0000012CEF20002944640F2003898088000A8 +:1030F000604440F2FF0C42460325664687584A7CEE +:103100001D40ED0092013240AE40AA404546B74313 +:103110003A43425145F218329800C2F200028450FC +:103120001A0046F20000C032C4F2000092001558A6 +:10313000214E354015501F200122184082404EF28A +:103140000010CEF20000844640F280105B099B0024 +:1031500063441A501A604B69002023618B69A36194 +:103160000023636144F25473C0F24103236080BCC6 +:10317000B846F0BD0120FAE70E20F8E7502D06D042 +:103180002B4397E70B78012B00D041E73CE7502019 +:10319000034300208EE71E42E9D00A7A002A00D1BC +:1031A00053E7E4E740F27A50E1E70B20DFE70A7AE1 +:1031B000072A00D849E7DAE7FFFFFEFFA8B144F28B +:1031C00054730268C0F241039A420CD181680A7BB1 +:1031D000D207D20F0B7B9B07DB0F9A42FAD1F12368 +:1031E00000200B7370470720FCE70120FAE7C04678 +:1031F000A8B144F254730268C0F241039A420CD160 +:1032000081680A7BD207D20F0B7B9B07DB0F9A42A8 +:10321000FAD1F02300200B7370470720FCE7012050 +:10322000FAE7C046B0B144F254730268C0F24103F9 +:103230009A420DD181680A7BD207D20F0B7B9B0784 +:10324000DB0F9A42FAD1C3680020013B0B60704744 +:103250000720FCE70120FAE710B500283CD044F233 +:1032600054730268C0F241039A4233D181680A7BE9 +:10327000D207D20F0B7B9B07DB0F9A42FAD1F423C4 +:103280000B7300230B7443689B7C5BB21A002132E2 +:1032900003D100230360002010BD002B13DB1F218E +:1032A0005A090B401E39994013004EF20014203386 +:1032B000CEF200049B001951BFF34F8FBFF36F8F05 +:1032C00043689B7C5BB245F218329B00C2F200025D +:1032D0009850DEE70720DFE70120DDE7F0B5C646BE +:1032E00000B584B0EFF30383103B5BB21A0046F2E3 +:1032F0000001C032C4F2000192005058254C9B00DE +:103300002040505045F21832C2F200029D58A96880 +:103310006A680B7B1078DBB2012824D02A699C46AE +:10332000002A33D0686901AB9846D0B11900060075 +:1033300098CE98C163469B0601D500230371AB6903 +:10334000036090476B6913B1444607CC07C3A96873 +:103350000A7BD2B20F2313400B7304B080BCB84673 +:10336000F0BD1800E6E7F42045F2CC240873E538F8 +:1033700083430B73127CE8689200C2F20004105180 +:103380002A6901389C460860002ACBD16346DAB22C +:10339000E0E7C046FFFFFEFF4EF20003262244F2A4 +:1033A0001801C4F20103985C1B6A8000C2F200019C +:1033B00041585B015B0F45F2A032D940C2F20002D6 +:1033C000116070474EF2000340F2FE323B49C4F2F6 +:1033D000010330B599524CF20001002243F6C87047 +:1033E000C4F27E010A5444F2180046F60041C2F2CB +:1033F0000000C0F2DC21016041F20021C0F27A013C +:10340000416048F20001C260026181602632995C2D +:103410001A6A890041585201520F45F2A034D14036 +:10342000A022C2F2000421609A5CCAB136229A5CE2 +:103430001AB93C215A5CD207FCD54EF20002A021F9 +:10344000C4F20102535CDB06DD0F002BFADB55549E +:103450004EF20002A021C4F20102535CDB06FCD450 +:103460004EF2000200213623C4F20102D1543C3155 +:10347000535CDB07FCD501213123D1544FF6C473D3 +:10348000C4F27E03197000252623D5540135FF357B +:103490001562D55C136AAD0040595B015B0FD840E3 +:1034A00040F2FE3320600648D0524CF2000343F64F +:1034B000C872C4F27E03995430BDC04603A5FFFF15 +:1034C00000A5FFFF28B10023C0F2053303600020F0 +:1034D00070470120FCE7C04601380028FCD1704746 +:1034E00045F2A0324CF600234143C2F2000270B50F +:1034F0001468C3F69A330D00B3FBF4F4080040F2ED +:10350000E8320023002100F04DF931B9B0FBF4F0AE +:10351000800808B1FFF7E0FF70BDA000B5FBF0F038 +:1035200040F2E8320023002100F03CF90029F0D0FD +:1035300001204042FFF7D0FFEEE7C046F8B546F263 +:10354000000340F2401245F2D42500240127C4F2C2 +:1035500000039E5AC2F20005B6B23300E340E0B267 +:103560001F4202D02B6803B1984701340435102C58 +:10357000F3D146F2000340F23012C4F200039E522F +:10358000F8BDC04646F200000023C4F2000044F239 +:10359000B052C0F200029A1811781A00C03292009C +:1035A00001331150202BF2D17047C04670B5EFF3B4 +:1035B0001081012383F3108845F298334000C2F252 +:1035C00000031A5A1AB11A5A013A92B21A521B5AE5 +:1035D00083B94EF2000240F2FE3544F20864C4F2B0 +:1035E0000102565B054BC0F20004205A334383436B +:1035F0009BB2535381F3108870BDC04600A5FFFFF6 +:1036000070B5EFF31081012383F3108845F29832EF +:103610004000C2F20002135A83B94EF2000444F291 +:10362000086540F2FE36C4F20104C0F20005A35B57 +:103630002D5A2B434AF200552B43A353135A0133FF +:103640009BB2135281F3108870BDC04600BE704714 +:1036500010B500F003F8FEF731F8FEE740F2000382 +:103660004EF6005270B5CEF20002C0F2000382B0F6 +:1036700093600020FDF73AFBFFF7A4FE6B4600269F +:10368000DC1D267001202378FFF7BAFFEFF31081CD +:10369000012585F3108846F6FC73C4F204039A688A +:1036A0003D4802409A609A6881F3108840F6000114 +:1036B000C4F204010A68D207D20F22700A68D20746 +:1036C000D20F22700A68D207D20F2270EFF3108156 +:1036D00085F3108880229868520502439A609B689F +:1036E00081F310880120FFF761FF0120FDF7FEFA4A +:1036F00040F60053294AC4F200039E801A8045F226 +:10370000A872C2F200029A6045F6A832C2F2000224 +:10371000DA6046F2000240F2201141F20000C4F2E9 +:103720000002505245F2A43244F23000C2F20002CC +:10373000C2F200009D800021121A00F06AF844F2E3 +:10374000000044F2180244F21461C2F20000C2F216 +:103750000002121AC0F2000100F052F844F2100503 +:1037600044F21403C2F20005C2F200035B1B9E1078 +:10377000002B05DD002408CD01349847A642FADC71 +:10378000FFF70AFE0220FDF7B1FAFFF7FBFE00206B +:1037900000F006F802B070BDFFFFFFEF00A5FFFFCD +:1037A0007047C046F0B54FF6FF75CE46474699467E +:1037B0002B0015400E0029000340140C80B50700B3 +:1037C000000C59434543634360435B190C0CE418F8 +:1037D0008C46A54203D980235B0298464044230CC3 +:1037E00061461B1820044FF6FF740C40494679438C +:1037F0007243C91800198918C0BCB946B046F0BD5B +:10380000002310B59A4200D110BDCC5CC4540133E2 +:10381000F8E703008218934200D170471970013312 +:10382000F9E7FFFF4275696C74207769746820526C +:10383000656E6573617320416476616E63656420B3 +:10384000466C657869626C6520536F667477617247 +:1038500065205061636B6167652076657273696F7F +:103860006E20332E352E3000332E352E30000000E2 +:1038700000000503F8B5C046F8BC08BC9E4670477A +:10388000F8B5C046F8BC08BC9E4670475465726DDA +:10389000696E616C00FFFFFF0000000000005454DF +:1038A000522052454747455300FFFFFFA209000041 +:1038B0007A0900007A0900007A0900007A090000FC +:1038C0007A0900007A0900007A0900007A090000EC +:1038D0007A0900007A090000C80A00002C0A0000DA +:1038E0007A0900007A0900007A0900007A090000CC +:1038F0007A0900007A0900007A0900007A090000BC +:103900007A0900007A0900007A0900000A0A00001A +:103910007A0900007A090000E20900007A09000033 +:10392000C20900007A0900007A090000A20900001B +:1039300030313233343536373839414243444546E5 +:10394000312E30000D0A2A2A2A2A2A2A2A2A2A2A2D +:103950002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AC7 +:103960002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB7 +:103970002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA7 +:103980002A2A2A2A2A2A2A2A0D0A2A20202052658F +:103990006E6573617320465350204578616D706C7D +:1039A000652050726F6A65637420666F7220725F63 +:1039B00069336320696E20736C617665206D6F6476 +:1039C00065202020202020202020202A0D0A2A20C7 +:1039D00020204578616D706C652050726F6A656358 +:1039E000742056657273696F6E2025732020202025 +:1039F00020202020202020202020202020202020C7 +:103A000020202020202020202020202020202A0DBF +:103A10000A2A202020466C657820536F66747761EF +:103A20007265205061636B2056657273696F6E20FA +:103A30002025642E25642E2564202020202020208F +:103A40002020202020202020202020202020202076 +:103A500020202020202A0D0A2A2A2A2A2A2A2A2A35 +:103A60002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB6 +:103A70002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA6 +:103A80002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A96 +:103A90002A2A2A2A2A2A2A2A2A2A0D0A000000006B +:103AA00054686973206578616D706C652070726F01 +:103AB0006A6563742064656D6F6E7374726174659A +:103AC0007320746865207479706963616C20757304 +:103AD00065206F662074686520493343204472690D +:103AE00076657220617320736C6176650D0A64657A +:103AF00076696365206F6E2052656E657361732011 +:103B00005241204D435573206261736564206F6E8E +:103B10002052656E65736173204653502E206F6E80 +:103B2000636520696E697469616C697A6174696F33 +:103B30006E206973207375636365737366756C2C8F +:103B40000D0A5468652045502077616974732066BA +:103B50006F72204441412C206F72206966204441DD +:103B600041206973206E6F7420636F6D706C657493 +:103B700065642069742077696C6C20696E6974696A +:103B80006174657320686F74206A6F696E20726556 +:103B900071756573742E0D0A4966206F6E2D626F04 +:103BA000617264207377697463682069732070722E +:103BB00065737365642C2069742077696C6C206967 +:103BC0006E69746961746520494249207472616E3E +:103BD0007366657220726571756573742E0D0A4582 +:103BE00072726F7220616E6420696E666F206D65FF +:103BF0007373616765732077696C6C2062652070F0 +:103C000072696E746564206F6E204A6C696E6B52C7 +:103C100054545669657765722E0D0A526566657251 +:103C200020746F20726561646D652E7478742066EF +:103C3000696C6520666F72206D6F726520646574B3 +:103C400061696C73206F6E204578616D706C6520C2 +:103C500050726F6A65637420616E640D0A4653503A +:103C600020557365722773204D616E75616C2066F7 +:103C70006F72206D6F726520696E666F726D617410 +:103C8000696F6E2061626F757420725F69336320A3 +:103C90006472697665720D0A000000000D0A4552D3 +:103CA000524F52203A20525F4147545F4F70656E29 +:103CB00020415049204641494C4544200D0A00000E +:103CC0005B4552525D20496E2046756E6374696F84 +:103CD0006E3A20257328292C202573000D0A526581 +:103CE0007475726E6564204572726F7220436F64E2 +:103CF000653A203078257820200D0A000D0A4552BB +:103D0000524F52203A206963755F696E697420666C +:103D1000756E6374696F6E206661696C65642E0DE3 +:103D20000A0000000D0A4552524F52203A206933D2 +:103D3000635F736C6176655F696E69742066756E2A +:103D40006374696F6E206661696C65642E0D0A008C +:103D50000D0A4552524F52203A20696E69745F69CC +:103D600033635F736C6176652066756E6374696F2B +:103D70006E206661696C65642E0D0A0068616C5F77 +:103D8000656E74727900FFFF0D0A4552524F522042 +:103D90003A20525F4147545F526573657420415029 +:103DA00049204641494C4544200D0A000D0A455220 +:103DB000524F52203A20525F4147545F5374617210 +:103DC0007420415049204641494C4544200D0A0089 +:103DD0000D0A4552524F52203A20525F4933435FF9 +:103DE000436C6F736520415049204641494C45441E +:103DF0002E0D0A000D0A4552524F52203A20525FB2 +:103E00004147545F436C6F736520415049204641E0 +:103E1000494C45442E0D0A000D0A4552524F52207E +:103E20003A2073746172745F74696D656F75745F45 +:103E300074696D65725F776974685F646566696EE1 +:103E400065645F6D732066756E6374696F6E20665E +:103E500061696C65642E0D0A00FFFFFF0D0A494E73 +:103E6000464F203A205265717565737420486F740F +:103E70002D4A6F696E204942490D0A000D0A4552CC +:103E8000524F52203A205265717565737420493340 +:103E9000435F4942495F545950455F484F545F4A18 +:103EA0004F494E204641494C4544200D0A00FFFF32 +:103EB0000D0A4552524F52203A20525F4933435F18 +:103EC0004F70656E20415049204641494C45442081 +:103ED0000D0A00000D0A494E464F203A204933434F +:103EE00020496E697469616C697A656420737563D1 +:103EF0006365737366756C6C7920696E20736C6191 +:103F00007665206D6F64652E0D0A000049334320ED +:103F100064657669636520496E666F726D61746968 +:103F20006F6E3A0D0A000000202D205374617469F1 +:103F30006320416464726573733A30782530327857 +:103F40000D0A0000202D204243523A20202020203C +:103F50002020202020203078253032780D0A0000E3 +:103F6000202D204443523A202020202020202020B1 +:103F700020203078253032780D0A0000202D205086 +:103F800049443A2020202020202020202020307862 +:103F90002530327825303278253032782530327825 +:103FA00025303278253032780D0A00000D0A45524E +:103FB000524F52203A20525F4933435F446576693D +:103FC0006365436667536574204150492046414903 +:103FD0004C4544200D0A00000D0A4552524F522014 +:103FE0003A20525F4933435F456E61626C65204100 +:103FF0005049204641494C4544200D0A000000002C +:104000000D0A4552524F52203A20525F4933435FC6 +:10401000536C617665537461747573536574204194 +:104020005049204641494C4544200D0A00000000FB +:104030000D0A494E464F203A2049334320646576A5 +:1040400069636520697320726561647920616E64BB +:104050002077616974696E6720666F722044414100 +:104060002E0D0A000D0A4552524F52203A20693354 +:10407000635F6465766963655F6461615F706172E7 +:1040800074696369706174696F6E2066756E6374BC +:10409000696F6E206661696C65642E0D0A00000010 +:1040A0000D0A494E464F203A20416464726573738D +:1040B0002061737369676E6D656E74206973206328 +:1040C0006F6D706C657465642C2064796E616D69C8 +:1040D0006320616464726573733A203078253032EE +:1040E000780D0A000D0A4552524F52203A20525F75 +:1040F0004933435F5265616420415049204641493C +:104100004C4544200D0A00FF0D0A494E464F203A07 +:10411000207265636569766564204343433A2030C5 +:104120007825780D0A000000494E464F203A20724B +:104130006563656976656420434343207061796CEB +:104140006F61642073697A653A20307825780D0AAA +:10415000000000000D0A494E464F203A20736C6162 +:1041600076652064796E616D69632061646472654F +:1041700073732069732072657365742E0D0A0000D5 +:104180000D0A494E464F203A20736C6176652064D3 +:10419000796E616D6963206164647265737320690F +:1041A000732061737369676E65642E0D0A000000E9 +:1041B0000D0A4552524F52203A20525F4933435F15 +:1041C0005265616420415049206661696C65642EC6 +:1041D0000D0A00000D0A494E464F203A20577269D9 +:1041E000746520636F6D706C6574652C20747261EA +:1041F0006E736665722073697A653A203078257827 +:104200000D0A00000D0A4552524F52203A20525FCB +:104210004933435F57726974652041504920666194 +:10422000696C65642E0D0A000D0A494E464F203A0E +:10423000205265616420636F6D706C6574652C201D +:104240007472616E736665722073697A653A2030A4 +:104250007825780D0A0000000D0A494E464F203A95 +:104260002049424920577269746520636F6D706CF4 +:104270006574652C207472616E7366657220736953 +:104280007A653A20307825780D0A00000D0A4552EB +:10429000524F52203A2049334320496E7465726E62 +:1042A000616C204572726F72206F63637572726504 +:1042B000642E0D0A000000000D0A494E464F203AB8 +:1042C000207472616E7366657220737461747573A5 +:1042D000203A20307825780D0A0000000D0A494E5A +:1042E000464F203A20557365722050757368627589 +:1042F00074746F6E20507265737365642E0D0A00BE +:10430000494E464F203A20496E69746961746520B0 +:10431000616E20494249207472616E736665722035 +:10432000726571756573742E0D0A00000D0A455291 +:10433000524F52203A20525F4933435F49626957D6 +:104340007269746520415049204641494C45442ECC +:104350000D0A00000D0A494E464F203A20494249B5 +:10436000207472616E736665722072657175657313 +:104370007420696E69746961746564207375636320 +:1043800065737366756C6C792E0D0A000D0A4552C3 +:10439000524F52203A20525F4943555F4578746529 +:1043A000726E616C4972714F70656E204150492088 +:1043B0004641494C45442E0D0A0000000D0A455265 +:1043C000524F52203A20525F4943555F45787465F9 +:1043D000726E616C497271456E61626C652041500C +:1043E00049204641494C45442E0D0A000D0A4552CC +:1043F000524F52203A20525F4943555F45787465C9 +:10440000726E616C497271436C6F736520415049E3 +:10441000204641494C45442E0D0A00FF6167745FF8 +:104420006465696E697400FF6963755F6465696ED0 +:10443000697400FF6963755F696E697400FFFFFF4F +:104440006933635F6465696E697400FF6933635F34 +:10445000736C6176655F6F707300FFFF73746172D8 +:10446000745F74696D656F75745F74696D65725F93 +:10447000776974685F646566696E65645F6D730013 +:104480006933635F6170705F6576656E745F6E6FD0 +:104490007469667900FFFFFF6933635F646576695D +:1044A00063655F6461615F706172746963697061A3 +:1044B00074696F6E00FFFFFF6933635F736C617631 +:1044C000655F696E697400FF0000FFFF38520020CD +:1044D00068450000D045000001020D000301000006 +:1044E0002116000000000000000000000000000095 +:1044F00001000000BD1400000000000000450000A5 +:10450000280808082709070800000000000000002C +:10451000020000003000000080BB0000000000002E +:1045200001000100400040002004040200000000DF +:10453000000000000000000001000905020702025F +:1045400000000000C05D000000000000E02E000040 +:1045500000030B0059160000000000006045000039 +:1045600000000001000000FF08000000704500008E +:10457000040000000F00000000000100080100001E +:10458000040000000C0100000040000005020000D3 +:10459000000001000003000000000107000400000B +:1045A0000000010701040000040000000E090000E3 +:1045B0000A1E1E0000140006000800110001000081 +:1045C00000000000000000000000000000000000EB +:1045D0002D1B0000C91600005D1B00007D190000A6 +:1045E0006118000005190000E9160000ED16000032 +:1045F00099170000E117000021180000BD18000005 +:1046000029170000591700000100020008001000DF +:0446100000000000A6 +:1046140041000000000000000000000064000000F1 +:084624002D0500000105000056 +:020000040101F8 +:10001800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8 +:0C002800FFFFFFFFFFFFFFFFFFFFFFFFD8 +:040000030000365172 +:00000001FF diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/ra_cfg.txt b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/ra_cfg.txt new file mode 100644 index 0000000000..f85be627c9 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/ra_cfg.txt @@ -0,0 +1,241 @@ +FSP Configuration + Board "EK-RA2E2" + R7FA2E2A72DNK + part_number: R7FA2E2A72DNK + rom_size_bytes: 65536 + ram_size_bytes: 8192 + data_flash_size_bytes: 2048 + package_style: QFP + package_pins: 24 + + RA2E2 + series: 2 + + RA2E2 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: Internal Clock Supply Architecture Type: Type A + 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: Not Supported + 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 + ID Code Mode: Unlocked (Ignore ID) + ID Code (32 Hex Characters): FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + + RA Common + Main stack size (bytes): 0x400 + Heap size (bytes): 0x400 + MCU Vcc (mV): 3300 + Parameter checking: Enabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + Clock Registers not Reset Values during Startup: Disabled + Main Oscillator Populated: Populated + PFS Protect: Enabled + C Runtime Initialization : Enabled + Early BSP Initialization : Disabled + Main Oscillator Clock Source: Crystal or Resonator + Subclock Populated: Populated + Subclock Drive (Drive capacitance availability varies by MCU): Standard/Normal mode + Subclock Stabilization Time (ms): 1000 + + Clocks + HOCO 48MHz + Clock Src: HOCO + ICLK Div /1 + PCLKB Div /2 + PCLKD Div /1 + CLKOUT Disabled + CLKOUT Div /1 + + Pin Configurations + EK-RA2E2.pincfg -> g_bsp_pin_cfg + P010 24 - VREFH0_PMOD1_GPIO9 - - Disabled - - "ADC0: AN005; SYSTEM: VREFH0" - None - - + P011 23 - VREFL0_PMOD1_GPIO10 - - Disabled - - "ADC0: AN006; SYSTEM: VREFL0" - None - - + P014 22 - PMOD1_MIKROBUS_ARDUINO_RESET - - Disabled - - "ADC0: AN009" - None - - + P015 21 GPIO LED3_RED_ARDUINO_D2_PMOD2_RESET M None "Output mode (Initial Low)" - - "ADC0: AN010; IRQ: IRQ7" - IO - - + P100 20 - ARDUINO_D12_MIKROBUS_MISO_PMOD2_RXD9 - - Disabled - - "ADC0: AN022; AGT0: AGTIO0; GPT8: GTIOC8B; GPT_POEGA: GTETRGA; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9; SPI0: MISO0" - None - - + P101 19 - ARDUINO_D11_MIKROBUS_MOSI_PMOD2_TXD9 - - Disabled - - "ADC0: AN021; AGT0: AGTEE0; GPT8: GTIOC8A; GPT_POEGB: GTETRGB; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - None - - + P102 18 - ARDUINO_D13_MIKROBUS_SCK_PMOD2_SCK9 - - Disabled - - "ADC0: ADTRG0; ADC0: AN020; AGT0: AGTO0; GPT5: GTIOC5B; GPT_OPS: GTOWLO; IRQ: IRQ4; KINT: KRM02; SCI9: SCK9; SCI9: TXD9; SPI0: RSPCK0" - None - - + P103 17 - ARDUINO_D10_MIKROBUS_SS_PMOD2_CTS9 - - Disabled - - "ADC0: AN019; AGT0: AGTOB0; GPT5: GTIOC5A; GPT_OPS: GTOWUP; IRQ: IRQ6; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P108 12 JTAG/SWD_SWDIO - H None "Peripheral mode" - - "AGT1: AGTOA1; GPT7: GTIOC7B; GPT_OPS: GTOULO; IRQ: IRQ5; JTAG/SWD: SWDIO; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - IO - - + P109 13 - ARDUINO_D5_MIKROBUS_PWM_PMOD1_RXD9 - - Disabled - - "AGT1: AGTO1; CGC: CLKOUT; GPT4: GTIOC4A; GPT_OPS: GTOVUP; IRQ: IRQ7; KINT: KRM01; SCI9: SCK9; SCI9: TXD9; SPI0: MISO0" - None - - + P110 14 - ARDUINO_D3_MIKROBUS_INT_PMOD1_CTS - - Disabled - - "AGT0: AGTOA0; GPT4: GTIOC4B; GPT_OPS: GTOVLO; IRQ: IRQ3; KINT: KRM00; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P111 15 - SW1 - - Disabled - - "AGT0: AGTOA0; GPT6: GTIOC6A; IRQ: IRQ4; KINT: KRM03; SCI9: RXD9; SCI9: SCK9" - None - - + P112 16 GPIO LED1_BLUE H None "Output mode (Initial Low)" - - "AGT0: AGTOB0; GPT6: GTIOC6B; IRQ: IRQ1; KINT: KRM02; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P200 10 - NMI - - Disabled - - "IRQ: NMI" - None - - + P201 9 - MD_ARDUINO_D4_PMOD2_GPIO10 - - Disabled - - "SYSTEM: MD" - None - - + P205 7 IRQ_IRQ1 SW2 - IRQ1 "IRQ mode" - - "AGT1: AGTO1; CGC: CLKOUT; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P300 11 JTAG/SWD_SWCLK - H None "Peripheral mode" - - "AGT1: AGTOB1; GPT7: GTIOC7A; GPT_OPS: GTOUUP; IRQ: IRQ0; JTAG/SWD: SWCLK; SCI9: RXD9; SCI9: SCK9; SPI0: RSPCK0" - IO - - + P400 1 I3C0_SCL0 IIC_SCL0 H None "Peripheral mode" - - "AGT1: AGTIO1; CAC: CACREF; GPT9: GTIOC9A; I3C0: SCL0; IRQ: IRQ0; KINT: KRM02; SCI9: SCK9; SCI9: TXD9" - IO - - + P401 2 I3C0_SDA0 IIC_SDA0 H None "Peripheral mode" - - "AGT1: AGTEE1; GPT9: GTIOC9B; GPT_POEGA: GTETRGA; I3C0: SDA0; IRQ: IRQ5; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9" - IO - - + P914 6 GPIO LED2_GREEN H None "Output mode (Initial Low)" - - "AGT1: AGTOA1; GPT_POEGB: GTETRGB; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9" - IO - - + RES# 8 SYSTEM_RES# - - - - - - - - IO "Read only" - + VCC 5 SYSTEM_VCC - - - - - - - - IO "Read only" - + VCL 3 SYSTEM_VCL - - - - - - - - IO "Read only" - + VSS 4 SYSTEM_VSS - - - - - - - - IO "Read only" - + R7FA2E2A72DNK.pincfg -> + P010 24 - VREFH0_PMOD1_GPIO9 - - Disabled - - "ADC0: AN005; SYSTEM: VREFH0" - None - - + P011 23 - VREFL0_PMOD1_GPIO10 - - Disabled - - "ADC0: AN006; SYSTEM: VREFL0" - None - - + P014 22 - PMOD1_MIKROBUS_ARDUINO_RESET - - Disabled - - "ADC0: AN009" - None - - + P015 21 - LED3_RED_ARDUINO_D2_PMOD2_RESET M None Disabled - - "ADC0: AN010; IRQ: IRQ7" - IO - - + P100 20 - ARDUINO_D12_MIKROBUS_MISO_PMOD2_RXD9 - - Disabled - - "ADC0: AN022; AGT0: AGTIO0; GPT8: GTIOC8B; GPT_POEGA: GTETRGA; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9; SPI0: MISO0" - None - - + P101 19 - ARDUINO_D11_MIKROBUS_MOSI_PMOD2_TXD9 - - Disabled - - "ADC0: AN021; AGT0: AGTEE0; GPT8: GTIOC8A; GPT_POEGB: GTETRGB; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - None - - + P102 18 - ARDUINO_D13_MIKROBUS_SCK_PMOD2_SCK9 - - Disabled - - "ADC0: ADTRG0; ADC0: AN020; AGT0: AGTO0; GPT5: GTIOC5B; GPT_OPS: GTOWLO; IRQ: IRQ4; KINT: KRM02; SCI9: SCK9; SCI9: TXD9; SPI0: RSPCK0" - None - - + P103 17 - ARDUINO_D10_MIKROBUS_SS_PMOD2_CTS9 - - Disabled - - "ADC0: AN019; AGT0: AGTOB0; GPT5: GTIOC5A; GPT_OPS: GTOWUP; IRQ: IRQ6; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P108 12 JTAG/SWD_SWDIO - H None "Peripheral mode" - - "AGT1: AGTOA1; GPT7: GTIOC7B; GPT_OPS: GTOULO; IRQ: IRQ5; JTAG/SWD: SWDIO; SCI9: CTS_RTS9; SCI9: TXD9; SPI0: MOSI0" - IO - - + P109 13 - ARDUINO_D5_MIKROBUS_PWM_PMOD1_RXD9 - - Disabled - - "AGT1: AGTO1; CGC: CLKOUT; GPT4: GTIOC4A; GPT_OPS: GTOVUP; IRQ: IRQ7; KINT: KRM01; SCI9: SCK9; SCI9: TXD9; SPI0: MISO0" - None - - + P110 14 - ARDUINO_D3_MIKROBUS_INT_PMOD1_CTS - - Disabled - - "AGT0: AGTOA0; GPT4: GTIOC4B; GPT_OPS: GTOVLO; IRQ: IRQ3; KINT: KRM00; SCI9: CTS_RTS9; SCI9: RXD9; SPI0: SSLA0" - None - - + P111 15 - SW1 - - Disabled - - "AGT0: AGTOA0; GPT6: GTIOC6A; IRQ: IRQ4; KINT: KRM03; SCI9: RXD9; SCI9: SCK9" - None - - + P112 16 - LED1_BLUE H None Disabled - - "AGT0: AGTOB0; GPT6: GTIOC6B; IRQ: IRQ1; KINT: KRM02; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P200 10 - NMI - - Disabled - - "IRQ: NMI" - None - - + P201 9 - MD_ARDUINO_D4_PMOD2_GPIO10 - - Disabled - - "SYSTEM: MD" - None - - + P205 7 - SW2 - None Disabled - - "AGT1: AGTO1; CGC: CLKOUT; IRQ: IRQ1; KINT: KRM01; SCI9: CTS_RTS9; SCI9: TXD9" - IO - - + P300 11 JTAG/SWD_SWCLK - H None "Peripheral mode" - - "AGT1: AGTOB1; GPT7: GTIOC7A; GPT_OPS: GTOUUP; IRQ: IRQ0; JTAG/SWD: SWCLK; SCI9: RXD9; SCI9: SCK9; SPI0: RSPCK0" - IO - - + P400 1 - IIC_SCL0 H None Disabled - - "AGT1: AGTIO1; CAC: CACREF; GPT9: GTIOC9A; I3C0: SCL0; IRQ: IRQ0; KINT: KRM02; SCI9: SCK9; SCI9: TXD9" - IO - - + P401 2 - IIC_SDA0 H None Disabled - - "AGT1: AGTEE1; GPT9: GTIOC9B; GPT_POEGA: GTETRGA; I3C0: SDA0; IRQ: IRQ5; KINT: KRM03; SCI9: CTS_RTS9; SCI9: RXD9" - IO - - + P914 6 - LED2_GREEN H None Disabled - - "AGT1: AGTOA1; GPT_POEGB: GTETRGB; IRQ: IRQ2; KINT: KRM00; SCI9: RXD9; SCI9: SCK9" - IO - - + RES# 8 SYSTEM_RES# - - - - - - - - IO "Read only" - + VCC 5 SYSTEM_VCC - - - - - - - - IO "Read only" - + VCL 3 SYSTEM_VCL - - - - - - - - IO "Read only" - + VSS 4 SYSTEM_VSS - - - - - - - - IO "Read only" - + + User Events + + User Event Links + + Module "I/O Port (r_ioport)" + Parameter Checking: Default (BSP) + + Module "I3C (r_i3c)" + Parameter Checking: Default (BSP) + Unaligned Buffer Support: Enabled + Master Support: Disabled + Slave Support: Enabled + + Module "Timer, Low-Power (r_agt)" + Parameter Checking: Default (BSP) + Pin Output Support: Disabled + Pin Input Support: Disabled + + Module "External IRQ (r_icu)" + Parameter Checking: Default (BSP) + + HAL + Instance "g_ioport I/O Port (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 + Port B ELC Trigger Source: Disabled + Port C ELC Trigger Source: Disabled + Port D ELC Trigger Source: Disabled + Port E ELC Trigger Source: Disabled + Pin Configuration Name: g_bsp_pin_cfg + + Instance "g_i3c0 I3C (r_i3c)" + Name: g_i3c0 + Callback: g_i3c0_callback + Callback Context: NULL + Device Type: Slave + Bitrate Settings: Standard Mode: Open-Drain: Logic High Period (ns): 167 + Bitrate Settings: Standard Mode: Open-Drain: Frequency: 1000000 + Bitrate Settings: Standard Mode: Push-Pull: Logic High Period (ns): 167 + Bitrate Settings: Standard Mode: Push-Pull: Frequency: 3000000 + Bitrate Settings: Extended Mode: Open-Drain: Logic High Period (ns): 190 + Bitrate Settings: Extended Mode: Open-Drain: Frequency: 1000000 + Bitrate Settings: Extended Mode: Push-Pull: Logic High Period (ns): 167 + Bitrate Settings: Extended Mode: Push-Pull: Frequency: 3400000 + Bitrate Settings: Bus Timing: Open Drain Rising Time (ns): 0 + Bitrate Settings: Bus Timing: Open Drain Falling Time (ns): 0 + Bitrate Settings: Bus Timing: Push-Pull Rising Time (ns): 0 + Bitrate Settings: Bus Timing: Push-Pull Falling Time (ns): 0 + Bitrate Settings: Clock Stalling: Address Assignment Phase: Disabled + Bitrate Settings: Clock Stalling: Transition Phase: Disabled + Bitrate Settings: Clock Stalling: Parity Phase: Disabled + Bitrate Settings: Clock Stalling: Ack Phase: Disabled + Bitrate Settings: Clock Stalling: Time (us): 0 + Bus Free Condition Detection Time (ns): 38.4 + Bus Available Condition Detection Time (us): 1 + Bus Idle Condition Detection Time (us): 1000 + Master Mode: ACK Hot-Join Requests: Disabled + Master Mode: Notify Rejected Hot-Join Requests.: Disabled + Master Mode: Notify Rejected Mastership Requests.: Disabled + Master Mode: Notify Rejected Interrupt Requests.: Disabled + Slave Mode: Command Response Info: ENEC/DISEC: In-Band Interrupts: Enabled + Timeout Detection: Disabled + Slave Mode: Command Response Info: ENEC/DISEC: Hot-Join Requests: Enabled + Slave Mode: Command Response Info: ENTASn: Activity State: Activity State 0 + Slave Mode: Command Response Info: SETMWL/GETMWL: Max Write Length: 64 + Slave Mode: Command Response Info: SETMRL/GETMRL: Max Read Length: 64 + Slave Mode: Command Response Info: SETMRL/GETMRL: Max IBI Payload Length: 32 + Slave Mode: Command Response Info: GETMXDS: Write Data Rate: 2Mhz + Slave Mode: Command Response Info: GETMXDS: Read Data Rate: 2Mhz + Slave Mode: Command Response Info: GETMXDS: Clock to Data Turnaround Time: 10 Nanoseconds + Slave Mode: Command Response Info: GETMXDS: Include Max Read Turnaround Time: Disabled + Slave Mode: Command Response Info: GETMXDS: Max Read Turnaround Time: 0 + Slave Mode: Command Response Info: GETXTIME: Frequency Byte: 0 + Slave Mode: Command Response Info: GETXTIME: Inaccuracy Byte: 0 + Interrupts: Interrupt Priority: Priority 2 + Interrupts: Error and Event Interrupt Priority: Priority 2 + Interrupts: Receive Status ICU Group 3: Disabled + Interrupts: Receive Status ICU Group 5: Enabled + + Instance "g_timeout_timer Timer, Low-Power (r_agt)" + General: Name: g_timeout_timer + General: Channel: 0 + General: Mode: Periodic + General: Period: 1 + General: Period Unit: Milliseconds + Output: Duty Cycle Percent (only applicable in PWM mode): 50 + General: Count Source: PCLKB + Output: AGTOA Output: Disabled + Output: AGTOB Output: Disabled + Output: AGTO Output: Disabled + Input: Measurement Mode: Measure Disabled + Input: Input Filter: No Filter + Input: Enable Pin: Enable Pin Not Used + Input: Trigger Edge: Trigger Edge Rising + Interrupts: Callback: g_timeout_timer_callback + Interrupts: Underflow Interrupt Priority: Priority 3 + + Instance "g_external_irq_sw1 External IRQ (r_icu)" + Name: g_external_irq_sw1 + Channel: 1 + Trigger: Falling + Digital Filtering: Enabled + Digital Filtering Sample Clock (Only valid when Digital Filtering is Enabled): PCLK / 64 + Callback: external_irq_callback + Pin Interrupt Priority: Priority 2 + diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/fsp.ld b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/fsp.ld new file mode 100644 index 0000000000..11f5ade632 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/fsp.ld @@ -0,0 +1,612 @@ +/* + Linker File for Renesas FSP +*/ + +INCLUDE memory_regions.ld + +QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH); +OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH); +OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH); + +/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */ +__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0); + +RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0; +RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0; +RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH; +RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH; + +OPTION_SETTING_START_NS = 0x0100A180; + +/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings. + * Bootloader images do not configure option settings because they are owned by the bootloader. + * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */ +__bl_FSP_BOOTABLE_IMAGE = 1; +__bln_FSP_BOOTABLE_IMAGE = 1; +PROJECT_SECURE_OR_FLAT = !DEFINED(PROJECT_NONSECURE) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE); +USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE); + +__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH; +__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH; +__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_NS_START - FLASH_APPLICATION_NSC_LENGTH; +__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : + RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH; +__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : + __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH; +__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2; +__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START; +__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2; + +FLASH_ORIGIN = DEFINED(FLASH_IMAGE_START) ? FLASH_IMAGE_START : FLASH_START; +LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH : + DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH : + FLASH_LENGTH; + +/* Define memory regions. */ +MEMORY +{ + FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH + RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH + QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH + OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH + OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH + OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH + OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH + SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH + OPTION_SETTING (r): ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH + OPTION_SETTING_S (r): ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH + ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a 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__ + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + * __qspi_flash_start__ + * __qspi_flash_end__ + * __qspi_flash_code_size__ + * __qspi_region_max_size__ + * __qspi_region_start_address__ + * __qspi_region_end_address__ + * __ospi_device_0_start__ + * __ospi_device_0_end__ + * __ospi_device_0_code_size__ + * __ospi_device_0_region_max_size__ + * __ospi_device_0_region_start_address__ + * __ospi_device_0_region_end_address__ + * __ospi_device_1_start__ + * __ospi_device_1_end__ + * __ospi_device_1_code_size__ + * __ospi_device_1_region_max_size__ + * __ospi_device_1_region_start_address__ + * __ospi_device_1_region_end_address__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __tz_FLASH_S = ABSOLUTE(FLASH_START); + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + + /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */ + . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Reserving 0x100 bytes of space for ROM registers. */ + . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x500; + + /* Allocate flash write-boundary-aligned + * space for sce9 wrapped public keys for mcuboot if the module is used. + */ + . = ALIGN(128); + KEEP(*(.mcuboot_sce9_key*)) + + *(.text*) + + KEEP(*(.version)) + 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 = .; + __usb_dev_descriptor_start_hs = .; + KEEP(*(.usb_device_desc_hs*)) + __usb_cfg_descriptor_start_hs = .; + KEEP(*(.usb_config_desc_hs*)) + __usb_interface_descriptor_start_hs = .; + KEEP(*(.usb_interface_desc_hs*)) + __usb_descriptor_end_hs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + .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 = .; + + __tz_RAM_S = ORIGIN(RAM); + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + *(vtable) + /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */ + *(.data.*) + *(.data) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + + . = ALIGN(4); + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + + /* TrustZone Secure Gateway Stubs Section. */ + .gnu.sgstubs : ALIGN (1024) + { + . = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024); + __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024); + _start_sg = .; + *(.gnu.sgstubs*) + . = ALIGN(32); + _end_sg = .; + } > FLASH + + __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768); + FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N; + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH); + + /* QSPI_FLASH section to be downloaded via debugger */ + .qspi_flash : + { + __qspi_flash_start__ = .; + KEEP(*(.qspi_flash*)) + KEEP(*(.code_in_qspi*)) + __qspi_flash_end__ = .; + } > QSPI_FLASH + __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__; + + /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */ + __qspi_flash_code_addr__ = __etext + (__data_end__ - __data_start__); + .qspi_non_retentive : AT (__qspi_flash_code_addr__) + { + __qspi_non_retentive_start__ = .; + KEEP(*(.qspi_non_retentive*)) + __qspi_non_retentive_end__ = .; + } > QSPI_FLASH + __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__; + + __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */ + __qspi_region_start_address__ = __qspi_flash_start__; + __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_QSPI_FLASH_N = __qspi_non_retentive_end__; + + /* Support for OctaRAM */ + .OSPI_DEVICE_0_NO_LOAD (NOLOAD): + { + . = ALIGN(4); + __ospi_device_0_start__ = .; + *(.ospi_device_0_no_load*) + . = ALIGN(4); + __ospi_device_0_end__ = .; + } > OSPI_DEVICE_0_RAM + + .OSPI_DEVICE_1_NO_LOAD (NOLOAD): + { + . = ALIGN(4); + __ospi_device_1_start__ = .; + *(.ospi_device_1_no_load*) + . = ALIGN(4); + __ospi_device_1_end__ = .; + } > OSPI_DEVICE_1_RAM + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0); + + /* OSPI_DEVICE_0 section to be downloaded via debugger */ + .OSPI_DEVICE_0 : + { + __ospi_device_0_start__ = .; + KEEP(*(.ospi_device_0*)) + KEEP(*(.code_in_ospi_device_0*)) + __ospi_device_0_end__ = .; + } > OSPI_DEVICE_0 + __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__; + + /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */ + __ospi_device_0_code_addr__ = __etext + (__data_end__ - __data_start__); + .ospi_device_0_non_retentive : AT (__ospi_device_0_code_addr__) + { + __ospi_device_0_non_retentive_start__ = .; + KEEP(*(.ospi_device_0_non_retentive*)) + __ospi_device_0_non_retentive_end__ = .; + } > OSPI_DEVICE_0 + __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__; + + __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */ + __ospi_device_0_region_start_address__ = __ospi_device_0_start__; + __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1); + + /* OSPI_DEVICE_1 section to be downloaded via debugger */ + .OSPI_DEVICE_1 : + { + __ospi_device_1_start__ = .; + KEEP(*(.ospi_device_1*)) + KEEP(*(.code_in_ospi_device_1*)) + __ospi_device_1_end__ = .; + } > OSPI_DEVICE_1 + __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__; + + /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */ + __ospi_device_1_code_addr__ = __etext + (__data_end__ - __data_start__); + .ospi_device_1_non_retentive : AT (__ospi_device_1_code_addr__) + { + __ospi_device_1_non_retentive_start__ = .; + KEEP(*(.ospi_device_1_non_retentive*)) + __ospi_device_1_non_retentive_end__ = .; + } > OSPI_DEVICE_1 + __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__; + + __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */ + __ospi_device_1_region_start_address__ = __ospi_device_1_start__; + __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__; + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + . = ALIGN(8); + /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */ + KEEP(*(.heap.*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + /* Place the STD heap here. */ + KEEP(*(.heap)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects. + * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary. + * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */ + __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024); + + /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects. + * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not + * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary. + * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */ + __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192); + + /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects. + * The EDMAC is a non-secure bus master and can only access non-secure RAM. */ + .ns_buffer (NOLOAD): + { + /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */ + . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .; + + KEEP(*(.ns_buffer*)) + } > RAM + + /* Data flash. */ + .data_flash : + { + . = ORIGIN(DATA_FLASH); + __tz_DATA_FLASH_S = .; + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + + __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024); + } > DATA_FLASH + + /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */ + __tz_SDRAM_S = ORIGIN(SDRAM); + + /* SDRAM */ + .sdram (NOLOAD): + { + __SDRAM_Start = .; + KEEP(*(.sdram*)) + KEEP(*(.frame*)) + __SDRAM_End = .; + } > SDRAM + + /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */ + __tz_SDRAM_N = __SDRAM_End; + + /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */ + __tz_ID_CODE_S = ORIGIN(ID_CODE); + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE + + /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */ + __tz_ID_CODE_N = __ID_Code_End; + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING); + + .option_setting : + { + __OPTION_SETTING_Start = .; + KEEP(*(.option_setting_ofs0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_Start + 0x10 : __OPTION_SETTING_Start; + KEEP(*(.option_setting_dualsel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_Start + 0x34 : __OPTION_SETTING_Start; + KEEP(*(.option_setting_sas)) + __OPTION_SETTING_End = .; + } > OPTION_SETTING = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_N = OPTION_SETTING_START_NS; + + .option_setting_ns : + { + __OPTION_SETTING_NS_Start = .; + KEEP(*(.option_setting_ofs1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_banksel)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps0)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps2)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps0)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps2)) + __OPTION_SETTING_NS_End = .; + } > OPTION_SETTING = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S); + + .option_setting_s : + { + __OPTION_SETTING_S_Start = .; + KEEP(*(.option_setting_ofs1_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_banksel_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_ofs1_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_banksel_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel2)) + __OPTION_SETTING_S_End = .; + } > OPTION_SETTING_S = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End; +} diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/memory_regions.ld b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/memory_regions.ld new file mode 100644 index 0000000000..415b06c3a4 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/script/memory_regions.ld @@ -0,0 +1,21 @@ +/* generated memory regions file - do not edit */ +RAM_START = 0x20004000; +RAM_LENGTH = 0x2000; +FLASH_START = 0x00000000; +FLASH_LENGTH = 0x10000; +DATA_FLASH_START = 0x40100000; +DATA_FLASH_LENGTH = 0x800; +OPTION_SETTING_START = 0x00000000; +OPTION_SETTING_LENGTH = 0x0; +OPTION_SETTING_S_START = 0x00000000; +OPTION_SETTING_S_LENGTH = 0x0; +ID_CODE_START = 0x01010018; +ID_CODE_LENGTH = 0x20; +SDRAM_START = 0x90000000; +SDRAM_LENGTH = 0x0; +QSPI_FLASH_START = 0x60000000; +QSPI_FLASH_LENGTH = 0x0; +OSPI_DEVICE_0_START = 0x68000000; +OSPI_DEVICE_0_LENGTH = 0x0; +OSPI_DEVICE_1_START = 0x70000000; +OSPI_DEVICE_1_LENGTH = 0x0; diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c new file mode 100644 index 0000000000..2a2d31f188 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.c @@ -0,0 +1,2090 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------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: 24766 $ + +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 +* +********************************************************************** +*/ + +#if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #ifdef SEGGER_RTT_CB_ALIGN + #error "Custom SEGGER_RTT_CB_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_BUFFER_ALIGN + #error "Custom SEGGER_RTT_BUFFER_ALIGN() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_PUT_CB_SECTION + #error "Custom SEGGER_RTT_PUT_CB_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_PUT_BUFFER_SECTION + #error "Custom SEGGER_RTT_PUT_BUFFER_SECTION() is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_BUFFER_ALIGNMENT + #error "Custom SEGGER_RTT_BUFFER_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif + #ifdef SEGGER_RTT_ALIGNMENT + #error "Custom SEGGER_RTT_ALIGNMENT is not supported for SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif +#endif + +#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 SEGGER_RTT_CPU_CACHE_LINE_SIZE +#endif + +#ifndef SEGGER_RTT_BUFFER_ALIGNMENT + #define SEGGER_RTT_BUFFER_ALIGNMENT SEGGER_RTT_CPU_CACHE_LINE_SIZE +#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 STRCPY + #define STRCPY(pDest, pSrc) strcpy((pDest), (pSrc)) +#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__) || (defined __clang__)) + #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__) || (defined __clang__)) + #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 +// +#if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #if ((defined __GNUC__) || (defined __clang__)) + SEGGER_RTT_CB _SEGGER_RTT __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE))); + static char _acUpBuffer [SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_UP)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE))); + static char _acDownBuffer[SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_DOWN)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE))); + #else + #error "Don't know how to place _SEGGER_RTT, _acUpBuffer, _acDownBuffer cache-line aligned" + #endif +#else + 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])); +#endif + +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() { \ + volatile SEGGER_RTT_CB* pRTTCBInit; \ + pRTTCBInit = (volatile SEGGER_RTT_CB*)((char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); \ + do { \ + if (pRTTCBInit->acID[0] == '\0') { \ + _DoInit(); \ + } \ + } while (0); \ + } + +static void _DoInit(void) { + volatile SEGGER_RTT_CB* p; // Volatile to make sure that compiler cannot change the order of accesses to the control block + static const char _aInitStr[] = "\0\0\0\0\0\0TTR REGGES"; // Init complete ID string to make sure that things also work if RTT is linked to a no-init memory area + unsigned i; + // + // Initialize control block + // + p = (volatile SEGGER_RTT_CB*)((char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access control block uncached so that nothing in the cache ever becomes dirty and all changes are visible in HW directly + memset((SEGGER_RTT_CB*)p, 0, sizeof(_SEGGER_RTT)); // Make sure that the RTT CB is always zero initialized. + 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 = BUFFER_SIZE_UP; + 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 = BUFFER_SIZE_DOWN; + 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 backwards to make sure that "SEGGER RTT" is not found in initializer memory (usually flash), + // as this would cause J-Link to "find" the control block at a wrong address. + // + RTT__DMB(); // Force order of memory accesses for cores that may perform out-of-order memory accesses + for (i = 0; i < sizeof(_aInitStr) - 1; ++i) { + p->acID[i] = _aInitStr[sizeof(_aInitStr) - 2 - i]; // Skip terminating \0 at the end of the array + } + RTT__DMB(); // Force order of memory accesses for cores that may perform out-of-order memory accesses +} + +/********************************************************************* +* +* _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; + volatile char* pDst; + // + // 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); + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesWritten += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; + while (NumBytesToWrite--) { + *pDst++ = *pBuffer++; + }; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pBuffer, NumBytesToWrite); + NumBytesWritten += NumBytesToWrite; + pBuffer += NumBytesToWrite; + NumBytes -= NumBytesToWrite; + WrOff += NumBytesToWrite; +#endif + if (WrOff == pRing->SizeOfBuffer) { + WrOff = 0u; + } + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + + WrOff = pRing->WrOff; + Rem = pRing->SizeOfBuffer - WrOff; + if (Rem > NumBytes) { + // + // All data fits before wrap around + // + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + WrOff += NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff = WrOff; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytes); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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) + SEGGER_RTT_UNCACHED_OFF; + NumBytesAtOnce = Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF; + NumBytesAtOnce = NumBytes - Rem; + while (NumBytesAtOnce--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff = NumBytes - Rem; +#else + NumBytesAtOnce = Rem; + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; + SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytesAtOnce); + NumBytesAtOnce = NumBytes - Rem; + pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF; + SEGGER_RTT_MEMCPY((void*)pDst, pData + Rem, NumBytesAtOnce); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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_ReadUpBufferNoLock() +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the application. +* Do not lock against interrupts and multiple access. +* Used to do the same operation that J-Link does, to transfer +* RTT data via other channels, such as TCP/IP or UART. +* +* Parameters +* BufferIndex Index of Up-buffer to be used. +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-up-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +*/ +unsigned SEGGER_RTT_ReadUpBufferNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) { + unsigned NumBytesRem; + unsigned NumBytesRead; + unsigned RdOff; + unsigned WrOff; + unsigned char* pBuffer; + SEGGER_RTT_BUFFER_UP* pRing; + volatile char* pSrc; + + INIT(); + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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); + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, 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) { + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + // + // Update read offset of buffer + // + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* 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; + volatile char* pSrc; + // + INIT(); + pRing = (SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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); + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, 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) { + pSrc = (pRing->pBuffer + RdOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytesRead += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; + while (NumBytesRem--) { + *pBuffer++ = *pSrc++; + }; +#else + SEGGER_RTT_MEMCPY(pBuffer, (void*)pSrc, NumBytesRem); + NumBytesRead += NumBytesRem; + pBuffer += NumBytesRem; + BufferSize -= NumBytesRem; + RdOff += NumBytesRem; +#endif + } + if (NumBytesRead) { + pRing->RdOff = RdOff; + } + // + return NumBytesRead; +} + +/********************************************************************* +* +* SEGGER_RTT_ReadUpBuffer +* +* Function description +* Reads characters from SEGGER real-time-terminal control block +* which have been previously stored by the application. +* Used to do the same operation that J-Link does, to transfer +* RTT data via other channels, such as TCP/IP or UART. +* +* Parameters +* BufferIndex Index of Up-buffer to be used. +* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-up-buffer to. +* BufferSize Size of the target application buffer. +* +* Return value +* Number of bytes that have been read. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +* This function locks against all other RTT operations. I.e. during +* the read operation, writing is also locked. +* If only one consumer reads from the up buffer, +* call sEGGER_RTT_ReadUpBufferNoLock() instead. +*/ +unsigned SEGGER_RTT_ReadUpBuffer(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) { + unsigned NumBytesRead; + + SEGGER_RTT_LOCK(); + // + // Call the non-locking read function + // + NumBytesRead = SEGGER_RTT_ReadUpBufferNoLock(BufferIndex, pBuffer, BufferSize); + // + // Finish up. + // + SEGGER_RTT_UNLOCK(); + // + 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; + volatile char* pDst; + // + // Get "to-host" ring buffer and copy some elements into local variables. + // + pData = (const char *)pBuffer; + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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 + // + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + Avail = NumBytes; + while (NumBytes--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff += Avail; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pData, NumBytes); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff += NumBytes; +#endif + break; + } else { + // + // Wrap-around necessary, write until wrap-around and reset WrOff + // + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; +#if SEGGER_RTT_MEMCPY_USE_BYTELOOP + NumBytes -= Avail; + while (Avail--) { + *pDst++ = *pData++; + }; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + pRing->WrOff = 0; +#else + SEGGER_RTT_MEMCPY((void*)pDst, pData, Avail); + pData += Avail; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + // + // 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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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: + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; + memcpy((void*)pDst, pData, NumBytes); + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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 + pDst = (pRing->pBuffer + WrOff) + SEGGER_RTT_UNCACHED_OFF; + memcpy((void*)pDst, 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) { + pDst = pRing->pBuffer + SEGGER_RTT_UNCACHED_OFF; + memcpy((void*)pDst, pData + Rem, NumBytes); + } + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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_WriteDownBufferNoLock +* +* Function description +* Stores a specified number of characters in SEGGER RTT +* control block inside a buffer. +* SEGGER_RTT_WriteDownBufferNoLock does not lock the application. +* Used to do the same operation that J-Link does, to transfer +* RTT data from other channels, such as TCP/IP or UART. +* +* Parameters +* BufferIndex Index of "Down"-buffer to be used. +* 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 "Down"-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. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +*/ +unsigned SEGGER_RTT_WriteDownBufferNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + unsigned Avail; + const char* pData; + SEGGER_RTT_BUFFER_UP* pRing; + // + // Get "to-target" ring buffer. + // It is save to cast that to a "to-host" buffer. Up and Down buffer differ in volatility of offsets that might be modified by J-Link. + // + pData = (const char *)pBuffer; + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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_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; + // + // Get "to-host" ring buffer. + // + pData = (const char *)pBuffer; + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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_WriteDownBuffer +* +* Function description +* Stores a specified number of characters in SEGGER RTT control block in a 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. +* +* Return value +* Number of bytes which have been stored in the "Down"-buffer. +* +* Notes +* (1) Data is stored according to buffer flags. +* +* Additional information +* This function must not be called when J-Link might also do RTT. +* This function locks against all other RTT operations. I.e. during +* the write operation, writing from the application is also locked. +* If only one consumer writes to the down buffer, +* call SEGGER_RTT_WriteDownBufferNoLock() instead. +*/ +unsigned SEGGER_RTT_WriteDownBuffer(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) { + unsigned Status; + + INIT(); + SEGGER_RTT_LOCK(); + Status = SEGGER_RTT_WriteDownBufferNoLock(BufferIndex, pBuffer, NumBytes); // Call the non-locking write function + SEGGER_RTT_UNLOCK(); + 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(); + Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes); // Call the non-locking write function + 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; + volatile char* pDst; + // + // Get "to-host" ring buffer. + // + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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) { + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; + *pDst = c; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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) { + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; + *pDst = c; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile char* pDst; + // + // Prepare + // + INIT(); + SEGGER_RTT_LOCK(); + // + // Get "to-host" ring buffer. + // + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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) { + pDst = (pRing->pBuffer + pRing->WrOff) + SEGGER_RTT_UNCACHED_OFF; + *pDst = c; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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) { + SEGGER_RTT_BUFFER_DOWN* pRing; + unsigned RdOff; + int r; + + INIT(); + pRing = (SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + RdOff = pRing->RdOff; + if (RdOff != pRing->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_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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; + volatile SEGGER_RTT_CB* pRTTCB; + + INIT(); + SEGGER_RTT_LOCK(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + BufferIndex = 0; + do { + if (pRTTCB->aDown[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < pRTTCB->MaxNumDownBuffers); + if (BufferIndex < pRTTCB->MaxNumDownBuffers) { + pRTTCB->aDown[BufferIndex].sName = sName; + pRTTCB->aDown[BufferIndex].pBuffer = (char*)pBuffer; + pRTTCB->aDown[BufferIndex].SizeOfBuffer = BufferSize; + pRTTCB->aDown[BufferIndex].RdOff = 0u; + pRTTCB->aDown[BufferIndex].WrOff = 0u; + pRTTCB->aDown[BufferIndex].Flags = Flags; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + } 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; + volatile SEGGER_RTT_CB* pRTTCB; + + INIT(); + SEGGER_RTT_LOCK(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + BufferIndex = 0; + do { + if (pRTTCB->aUp[BufferIndex].pBuffer == NULL) { + break; + } + BufferIndex++; + } while (BufferIndex < pRTTCB->MaxNumUpBuffers); + if (BufferIndex < pRTTCB->MaxNumUpBuffers) { + pRTTCB->aUp[BufferIndex].sName = sName; + pRTTCB->aUp[BufferIndex].pBuffer = (char*)pBuffer; + pRTTCB->aUp[BufferIndex].SizeOfBuffer = BufferSize; + pRTTCB->aUp[BufferIndex].RdOff = 0u; + pRTTCB->aUp[BufferIndex].WrOff = 0u; + pRTTCB->aUp[BufferIndex].Flags = Flags; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + } 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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_UP* pUp; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) { + SEGGER_RTT_LOCK(); + pUp = &pRTTCB->aUp[BufferIndex]; + if (BufferIndex) { + pUp->sName = sName; + pUp->pBuffer = (char*)pBuffer; + pUp->SizeOfBuffer = BufferSize; + pUp->RdOff = 0u; + pUp->WrOff = 0u; + } + pUp->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_DOWN* pDown; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) { + SEGGER_RTT_LOCK(); + pDown = &pRTTCB->aDown[BufferIndex]; + if (BufferIndex) { + pDown->sName = sName; + pDown->pBuffer = (char*)pBuffer; + pDown->SizeOfBuffer = BufferSize; + pDown->RdOff = 0u; + pDown->WrOff = 0u; + } + pDown->Flags = Flags; + RTT__DMB(); // Force data write to be complete before writing the , in case CPU is allowed to change the order of memory accesses + 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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_UP* pUp; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) { + SEGGER_RTT_LOCK(); + pUp = &pRTTCB->aUp[BufferIndex]; + pUp->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_DOWN* pDown; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) { + SEGGER_RTT_LOCK(); + pDown = &pRTTCB->aDown[BufferIndex]; + pDown->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_UP* pUp; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_UP_BUFFERS) { + SEGGER_RTT_LOCK(); + pUp = &pRTTCB->aUp[BufferIndex]; + pUp->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; + volatile SEGGER_RTT_CB* pRTTCB; + volatile SEGGER_RTT_BUFFER_DOWN* pDown; + + INIT(); + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + if (BufferIndex < SEGGER_RTT_MAX_NUM_DOWN_BUFFERS) { + SEGGER_RTT_LOCK(); + pDown = &pRTTCB->aDown[BufferIndex]; + pDown->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) +* +* Notes +* (1) Buffer 0 is always reserved for terminal I/O, so we can use index 0 here, fixed +*/ +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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + 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_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[0] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + // + // 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; +} + +/********************************************************************* +* +* SEGGER_RTT_GetAvailWriteSpace +* +* Function description +* Returns the number of bytes available in the ring buffer. +* +* Parameters +* BufferIndex Index of the up buffer. +* +* Return value +* Number of bytes that are free in the selected up buffer. +*/ +unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex) { + SEGGER_RTT_BUFFER_UP* pRing; + + pRing = (SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[BufferIndex] + SEGGER_RTT_UNCACHED_OFF); // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + return _GetAvailWriteSpace(pRing); +} + + +/********************************************************************* +* +* SEGGER_RTT_GetBytesInBuffer() +* +* Function description +* Returns the number of bytes currently used in the up buffer. +* +* Parameters +* BufferIndex Index of the up buffer. +* +* Return value +* Number of bytes that are used in the buffer. +*/ +unsigned SEGGER_RTT_GetBytesInBuffer(unsigned BufferIndex) { + unsigned RdOff; + unsigned WrOff; + unsigned r; + volatile SEGGER_RTT_CB* pRTTCB; + // + // Avoid warnings regarding volatile access order. It's not a problem + // in this case, but dampen compiler enthusiasm. + // + pRTTCB = (volatile SEGGER_RTT_CB*)((unsigned char*)&_SEGGER_RTT + SEGGER_RTT_UNCACHED_OFF); // Access RTTCB uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + RdOff = pRTTCB->aUp[BufferIndex].RdOff; + WrOff = pRTTCB->aUp[BufferIndex].WrOff; + if (RdOff <= WrOff) { + r = WrOff - RdOff; + } else { + r = pRTTCB->aUp[BufferIndex].SizeOfBuffer - (WrOff - RdOff); + } + return r; +} + +/*************************** End of file ****************************/ diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h new file mode 100644 index 0000000000..eb1985cd58 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT.h @@ -0,0 +1,493 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------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: 24346 $ +---------------------------------------------------------------------- +*/ + +#ifndef SEGGER_RTT_H +#define SEGGER_RTT_H + +#include "SEGGER_RTT_Conf.h" + +/********************************************************************* +* +* Defines, defaults +* +********************************************************************** +*/ + +#ifndef RTT_USE_ASM + // + // Some cores support out-of-order memory accesses (reordering of memory accesses in the core) + // For such cores, we need to define a memory barrier to guarantee the order of certain accesses to the RTT ring buffers. + // Needed for: + // Cortex-M7 (ARMv7-M) + // Cortex-M23 (ARM-v8M) + // Cortex-M33 (ARM-v8M) + // Cortex-A/R (ARM-v7A/R) + // + // We do not explicitly check for "Embedded Studio" as the compiler in use determines what we support. + // You can use an external toolchain like IAR inside ES. So there is no point in checking for "Embedded Studio" + // + #if (defined __CROSSWORKS_ARM) // Rowley Crossworks + #define _CC_HAS_RTT_ASM_SUPPORT 1 + #if (defined __ARM_ARCH_7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #else + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + #elif (defined __ARMCC_VERSION) + // + // ARM compiler + // ARM compiler V6.0 and later is clang based. + // Our ASM part is compatible to clang. + // + #if (__ARMCC_VERSION >= 6000000) + #define _CC_HAS_RTT_ASM_SUPPORT 1 + #else + #define _CC_HAS_RTT_ASM_SUPPORT 0 + #endif + #if (defined __ARM_ARCH_6M__) // Cortex-M0 / M1 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 // No ASM support for this architecture + #elif (defined __ARM_ARCH_7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #else + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + #elif ((defined __GNUC__) || (defined __clang__)) + // + // GCC / Clang + // + #define _CC_HAS_RTT_ASM_SUPPORT 1 + // ARM 7/9: __ARM_ARCH_5__ / __ARM_ARCH_5E__ / __ARM_ARCH_5T__ / __ARM_ARCH_5T__ / __ARM_ARCH_5TE__ + #if (defined __ARM_ARCH_7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 // Only Cortex-M7 needs a DMB but we cannot distinguish M4 and M7 here... + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() __asm volatile ("dmb\n" : : :); + #else + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + #elif ((defined __IASMARM__) || (defined __ICCARM__)) + // + // IAR assembler/compiler + // + #define _CC_HAS_RTT_ASM_SUPPORT 1 + #if (__VER__ < 6300000) + #define VOLATILE + #else + #define VOLATILE volatile + #endif + #if (defined __ARM7M__) // Needed for old versions that do not know the define yet + #if (__CORE__ == __ARM7M__) // Cortex-M3 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #endif + #endif + #if (defined __ARM7EM__) + #if (__CORE__ == __ARM7EM__) // Cortex-M4/M7 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM8M_BASELINE__) + #if (__CORE__ == __ARM8M_BASELINE__) // Cortex-M23 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM8M_MAINLINE__) + #if (__CORE__ == __ARM8M_MAINLINE__) // Cortex-M33 + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM8EM_MAINLINE__) + #if (__CORE__ == __ARM8EM_MAINLINE__) // Cortex-??? + #define _CORE_HAS_RTT_ASM_SUPPORT 1 + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM7A__) + #if (__CORE__ == __ARM7A__) // Cortex-A 32-bit ARMv7-A + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif + #if (defined __ARM7R__) + #if (__CORE__ == __ARM7R__) // Cortex-R 32-bit ARMv7-R + #define _CORE_NEEDS_DMB 1 + #define RTT__DMB() asm VOLATILE ("DMB"); + #endif + #endif +// TBD: __ARM8A__ => Cortex-A 64-bit ARMv8-A +// TBD: __ARM8R__ => Cortex-R 64-bit ARMv8-R + #else + // + // Other compilers + // + #define _CC_HAS_RTT_ASM_SUPPORT 0 + #define _CORE_HAS_RTT_ASM_SUPPORT 0 + #endif + // + // If IDE and core support the ASM version, enable ASM version by default + // + #ifndef _CORE_HAS_RTT_ASM_SUPPORT + #define _CORE_HAS_RTT_ASM_SUPPORT 0 // Default for unknown cores + #endif + #if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT) + #define RTT_USE_ASM (1) + #else + #define RTT_USE_ASM (0) + #endif +#endif + +#ifndef _CORE_NEEDS_DMB + #define _CORE_NEEDS_DMB 0 +#endif + +#ifndef RTT__DMB + #if _CORE_NEEDS_DMB + #error "Don't know how to place inline assembly for DMB" + #else + #define RTT__DMB() + #endif +#endif + +#ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE + #define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0) // On most target systems where RTT is used, we do not have a CPU cache, therefore 0 is a good default here +#endif + +#ifndef SEGGER_RTT_UNCACHED_OFF + #if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #else + #define SEGGER_RTT_UNCACHED_OFF (0) + #endif +#endif +#if RTT_USE_ASM + #if SEGGER_RTT_CPU_CACHE_LINE_SIZE + #error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0" + #endif +#endif + +#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file +#include +#include + +/********************************************************************* +* +* Defines, fixed +* +********************************************************************** +*/ + +// +// Determine how much we must pad the control block to make it a multiple of a cache line in size +// Assuming: U8 = 1B +// U16 = 2B +// U32 = 4B +// U8/U16/U32* = 4B +// +#if SEGGER_RTT_CPU_CACHE_LINE_SIZE // Avoid division by zero in case we do not have any cache + #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (((NumBytes + SEGGER_RTT_CPU_CACHE_LINE_SIZE - 1) / SEGGER_RTT_CPU_CACHE_LINE_SIZE) * SEGGER_RTT_CPU_CACHE_LINE_SIZE) +#else + #define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes) +#endif +#define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24)) +#define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE) + +/********************************************************************* +* +* 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 +#if SEGGER_RTT__CB_PADDING + unsigned char aDummy[SEGGER_RTT__CB_PADDING]; +#endif +} 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); +unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex); +unsigned SEGGER_RTT_GetBytesInBuffer (unsigned BufferIndex); +// +// Function macro for performance optimization +// +#define SEGGER_RTT_HASDATA(n) (((SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_DOWN*)((char*)&_SEGGER_RTT.aDown[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) + +#if RTT_USE_ASM + #define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock +#endif + +/********************************************************************* +* +* RTT transfer functions to send RTT data via other channels. +* +********************************************************************** +*/ +unsigned SEGGER_RTT_ReadUpBuffer (unsigned BufferIndex, void* pBuffer, unsigned BufferSize); +unsigned SEGGER_RTT_ReadUpBufferNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize); +unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); +unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes); + +#define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly + +/********************************************************************* +* +* 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_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h new file mode 100644 index 0000000000..ba58c75d1d --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_Conf.h @@ -0,0 +1,429 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------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: 24316 $ + +*/ + +#ifndef SEGGER_RTT_CONF_H +#define SEGGER_RTT_CONF_H + +#ifdef __IAR_SYSTEMS_ICC__ + #include +#endif + +/********************************************************************* +* +* Defines, configurable +* +********************************************************************** +*/ + +// +// Take in and set to correct values for Cortex-A systems with CPU cache +// +//#define SEGGER_RTT_CPU_CACHE_LINE_SIZE (32) // Largest cache line size (in bytes) in the current system +//#define SEGGER_RTT_UNCACHED_OFF (0xFB000000) // Address alias where RTT CB and buffers can be accessed uncached +// +// Most common case: +// Up-channel 0: RTT +// Up-channel 1: SystemView +// +#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS + #define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3) +#endif +// +// Most common case: +// Down-channel 0: RTT +// Down-channel 1: SystemView +// +#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS + #define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3) +#endif + +#ifndef BUFFER_SIZE_UP + #define BUFFER_SIZE_UP (4096) // Size of the buffer for terminal output of target, up to host (Default: 1k) +#endif + +#ifndef BUFFER_SIZE_DOWN + #define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16) +#endif + +#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE + #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64) +#endif + +#ifndef SEGGER_RTT_MODE_DEFAULT + #define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0) +#endif + +/********************************************************************* +* +* 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. +*/ +#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP + #define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop +#endif +// +// 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. +// +#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20) +#endif + +/********************************************************************* +* +* RTT lock configuration for SEGGER Embedded Studio, +* Rowley CrossStudio and GCC +*/ +#if ((defined(__SES_ARM) || defined(__SES_RISCV) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) && !defined(WIN32)) + #if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + __asm volatile ("mrs %0, primask \n\t" \ + "movs r1, #1 \n\t" \ + "msr primask, r1 \n\t" \ + : "=r" (_SEGGER_RTT__LockState) \ + : \ + : "r1", "cc" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \ + : \ + : "r" (_SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + __asm volatile ("mrs %0, basepri \n\t" \ + "mov r1, %1 \n\t" \ + "msr basepri, r1 \n\t" \ + : "=r" (_SEGGER_RTT__LockState) \ + : "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \ + : "r1", "cc" \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \ + : \ + : "r" (_SEGGER_RTT__LockState) \ + : \ + ); \ + } + + #elif (defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__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" (_SEGGER_RTT__LockState) \ + : \ + : "r1", "cc" \ + ); + + #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" (_SEGGER_RTT__LockState) \ + : "r0", "r1", "cc" \ + ); \ + } + #elif defined(__riscv) || defined(__riscv_xlen) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + __asm volatile ("csrr %0, mstatus \n\t" \ + "csrci mstatus, 8 \n\t" \ + "andi %0, %0, 8 \n\t" \ + : "=r" (_SEGGER_RTT__LockState) \ + : \ + : \ + ); + + #define SEGGER_RTT_UNLOCK() __asm volatile ("csrr a1, mstatus \n\t" \ + "or %0, %0, a1 \n\t" \ + "csrs mstatus, %0 \n\t" \ + : \ + : "r" (_SEGGER_RTT__LockState) \ + : "a1" \ + ); \ + } + #else + #define SEGGER_RTT_LOCK() + #define SEGGER_RTT_UNLOCK() + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR EWARM +*/ +#ifdef __ICCARM__ + #if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) || \ + (defined (__ARM8M_BASELINE__) && (__CORE__ == __ARM8M_BASELINE__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \ + } + #elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || \ + (defined (__ARM7M__) && (__CORE__ == __ARM7M__)) || \ + (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) || \ + (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) + #ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY + #define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) + #endif + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_BASEPRI(); \ + __set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() __set_BASEPRI(_SEGGER_RTT__LockState); \ + } + #elif (defined (__ARM7A__) && (__CORE__ == __ARM7A__)) || \ + (defined (__ARM7R__) && (__CORE__ == __ARM7R__)) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__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" (_SEGGER_RTT__LockState) \ + : \ + : "r1", "cc" \ + ); + + #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" (_SEGGER_RTT__LockState) \ + : "r0", "r1", "cc" \ + ); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RX +*/ +#ifdef __ICCRX__ + #define SEGGER_RTT_LOCK() { \ + unsigned long _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for IAR RL78 +*/ +#ifdef __ICCRL78__ + #define SEGGER_RTT_LOCK() { \ + __istate_t _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_interrupt_state(); \ + __disable_interrupt(); + + #define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for KEIL ARM +*/ +#ifdef __CC_ARM + #if (defined __TARGET_ARCH_6S_M) + #define SEGGER_RTT_LOCK() { \ + unsigned int _SEGGER_RTT__LockState; \ + register unsigned char _SEGGER_RTT__PRIMASK __asm( "primask"); \ + _SEGGER_RTT__LockState = _SEGGER_RTT__PRIMASK; \ + _SEGGER_RTT__PRIMASK = 1u; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() _SEGGER_RTT__PRIMASK = _SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + register unsigned char BASEPRI __asm( "basepri"); \ + _SEGGER_RTT__LockState = BASEPRI; \ + BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \ + __schedule_barrier(); + + #define SEGGER_RTT_UNLOCK() BASEPRI = _SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = __get_PRIMASK(); \ + __set_PRIMASK(1); + + #define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__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 _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY); + + #define SEGGER_RTT_UNLOCK() _set_interrupt_priority(_SEGGER_RTT__LockState); \ + } + #endif +#endif + +/********************************************************************* +* +* RTT lock configuration for CCRX +*/ +#ifdef __RX + #include + #define SEGGER_RTT_LOCK() { \ + unsigned long _SEGGER_RTT__LockState; \ + _SEGGER_RTT__LockState = get_psw() & 0x010000; \ + clrpsw_i(); + + #define SEGGER_RTT_UNLOCK() set_psw(get_psw() | _SEGGER_RTT__LockState); \ + } +#endif + +/********************************************************************* +* +* RTT lock configuration for embOS Simulation on Windows +* (Can also be used for generic RTT locking with embOS) +*/ +#if defined(WIN32) || defined(SEGGER_RTT_LOCK_EMBOS) + +void OS_SIM_EnterCriticalSection(void); +void OS_SIM_LeaveCriticalSection(void); + +#define SEGGER_RTT_LOCK() { \ + OS_SIM_EnterCriticalSection(); + +#define SEGGER_RTT_UNLOCK() OS_SIM_LeaveCriticalSection(); \ + } +#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_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c new file mode 100644 index 0000000000..815f585131 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/SEGGER_RTT/SEGGER_RTT_printf.c @@ -0,0 +1,505 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 1995 - 2021 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: 7.56b * +* * +********************************************************************** + +---------------------------END-OF-HEADER------------------------------ +File : SEGGER_RTT_printf.c +Purpose : Replacement for printf to write formatted data via RTT +Revision: $Rev: 17697 $ +---------------------------------------------------------------------- +*/ +#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_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/common_utils.h b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/common_utils.h new file mode 100644 index 0000000000..ec4c7ddb80 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#ifndef COMMON_UTILS_H_ +#define COMMON_UTILS_H_ + +/* generic headers */ +#include +#include +#include +#include "hal_data.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 LVL_DEBUG (3u) /* debug-level messages */ + +#define LOG_LEVEL LVL_ERR /* To See the Debug Messages, LOG_LEVEL should be set to LVL_DEBUG */ + +#define RESET_VALUE (0x00) + +#define EP_VERSION ("1.0") +#define MODULE_NAME "r_i3c" +#define BANNER_INFO "\r\n******************************************************************"\ + "\r\n* Renesas FSP Example Project for "MODULE_NAME" in slave mode *"\ + "\r\n* Example Project Version %s *"\ + "\r\n* Flex Software Pack Version %d.%d.%d *"\ + "\r\n******************************************************************\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() +#define APP_DBG_PRINT(fn_, ...) if(LOG_LEVEL >= LVL_DEBUG)\ + SEGGER_RTT_printf (SEGGER_INDEX, "[DBG] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__); + +#endif /* COMMON_UTILS_H_ */ diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/hal_entry.c b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/hal_entry.c new file mode 100644 index 0000000000..f0fb74134d --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/hal_entry.c @@ -0,0 +1,143 @@ +/*********************************************************************************************************************** + * 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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#include "common_utils.h" +#include "i3c_slave_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup i3c_slave_ep + * @{ + **********************************************************************************************************************/ + +FSP_CPP_HEADER +void R_BSP_WarmStart(bsp_warm_start_event_t event); +FSP_CPP_FOOTER + +/*******************************************************************************************************************//** + * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function + * is called by main() when no RTOS is used. + **********************************************************************************************************************/ +void hal_entry(void) +{ + /* To capture the status(Success/Failure) of each Function/API. */ + fsp_err_t err = FSP_SUCCESS; + fsp_pack_version_t version = {RESET_VALUE}; + + /* version get API for FLEX pack information */ + R_FSP_VersionGet(&version); + APP_PRINT(BANNER_INFO,EP_VERSION,version.major, version.minor, version.patch ); + APP_PRINT(EP_INFO); + + /* Initialize AGT driver */ + err = R_AGT_Open(&g_timeout_timer_ctrl, &g_timeout_timer_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_AGT_Open API FAILED \r\n"); + APP_ERR_TRAP(err); + } + + /* Initialize ICU driver */ + err = icu_init(); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : icu_init function failed.\r\n"); + /* de-initialize the opened AGT timer module.*/ + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* Initialize I3C slave device.*/ + err = i3c_slave_init(); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : i3c_slave_init function failed.\r\n"); + /* de-initialize the opened AGT timer and ICU modules.*/ + agt_deinit(); + icu_deinit(); + APP_ERR_TRAP(err); + } + + while(true) + { + /* Perform I3C slave operation.*/ + err = i3c_slave_ops(); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : init_i3c_slave function failed.\r\n"); + /* de-initialize the opened AGT timer, I3C and ICU modules.*/ + agt_deinit(); + icu_deinit(); + i3c_deinit(); + APP_ERR_TRAP(err); + } + } + +#if BSP_TZ_SECURE_BUILD + /* Enter non-secure code */ + R_BSP_NonSecureEnter(); +#endif +} + +/*******************************************************************************************************************//** + * 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_RESET == event) + { +#if BSP_FEATURE_FLASH_LP_VERSION != 0 + + /* Enable reading from data flash. */ + R_FACI_LP->DFLCTL = 1U; + + /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and + * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */ +#endif + } + + if (BSP_WARM_START_POST_C == event) + { + /* C runtime environment and system clocks are setup. */ + + /* Configure pins. */ + R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg); + } +} + +#if BSP_TZ_SECURE_BUILD + +BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable (); + +/* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */ +BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable () +{ + +} +#endif + +/*******************************************************************************************************************//** + * @} (end addtogroup i3c_slave_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.c b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.c new file mode 100644 index 0000000000..94da395a62 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.c @@ -0,0 +1,662 @@ +/*********************************************************************************************************************** + * File Name : i3c_slave_ep.c + * Description : Contains functions definitions 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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + +#include "common_utils.h" +#include "i3c_slave_ep.h" + +/*******************************************************************************************************************//** + * @addtogroup i3c_slave_ep + * @{ + **********************************************************************************************************************/ + +/* Global variables.*/ +volatile uint32_t g_i3c_event_count[I3C_EVENT_INTERNAL_ERROR + ONE]; +volatile uint32_t g_i3c_event_status = RESET_VALUE; +static volatile bool b_process_timeout = false; +static volatile bool b_onboard_sw_pressed = false; + +/* Configure the information for the slave device. */ +static i3c_device_cfg_t g_slave_device_cfg = +{ + /* This is the Static I3C / I2C Legacy address defined by the device manufacturer. */ + .static_address = I3C_SLAVE_DEVICE_STATIC_ADDRESS, + /* The dynamic address will be automatically updated when the master configures this device using CCC ENTDAA. */ + .dynamic_address = RESET_VALUE +}; + +static i3c_device_status_t g_slave_device_status = +{ + .pending_interrupt = RESET_VALUE, + .vendor_status = RESET_VALUE +}; + +static uint8_t g_ibi_write_data[MAX_IBI_PAYLOAD_SIZE] BSP_ALIGN_VARIABLE(WORD_ALIGN); +static uint8_t g_write_data[MAX_WRITE_DATA_LEN] BSP_ALIGN_VARIABLE(WORD_ALIGN); +static uint8_t g_read_data[2][MAX_READ_DATA_LEN] BSP_ALIGN_VARIABLE(WORD_ALIGN); +static uint8_t * p_next = NULL; +static uint8_t * p_last = NULL; + +static uint8_t g_slave_received_ccc_code = RESET_VALUE; +static uint8_t g_slave_dynamic_address = RESET_VALUE; +static uint32_t g_data_transfer_size = RESET_VALUE; +static uint32_t g_wait_count = MAX_WAIT_TIME_BUS_INIT_10S; +static uint32_t g_ibi_write_count = RESET_VALUE; +static bsp_io_level_t g_last_switch_status; +static bsp_io_level_t g_cur_switch_status; +static bsp_io_level_t led_status; + +/* private function declarations.*/ +static fsp_err_t i3c_device_daa_participation(void); +static void set_next_read_buffer(void); +static uint32_t i3c_app_event_notify(uint32_t set_event_flag_value, uint32_t timout); +static fsp_err_t start_timeout_timer_with_defined_ms(uint32_t timeout_ms); + +/*******************************************************************************************************************//** + * @brief Initializes I3C driver as an I3C slave device. + * @param[IN] None + * @retval FSP_SUCCESS I3C driver is opened and configured successfully. + * @retval err Any Other Error code apart from FSP_SUCCESS like Unsuccessful Open. + **********************************************************************************************************************/ +fsp_err_t i3c_slave_init(void) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t pid_lower_32bits = RESET_VALUE; + uint16_t pid_upper_16bits = RESET_VALUE; + + memset(g_ibi_write_data, RESET_VALUE, sizeof(g_ibi_write_data)); + memset(g_write_data, RESET_VALUE, sizeof(g_write_data)); + + /* Initializes the I3C module. */ + err = R_I3C_Open(&g_i3c0_ctrl, &g_i3c0_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Open API FAILED \r\n"); + return err; + } + APP_PRINT("\r\nINFO : I3C Initialized successfully in slave mode.\r\n"); + + + /* Set the device configuration for this device. */ + g_slave_device_cfg.slave_info.bcr = BCR_SETTING; + g_slave_device_cfg.slave_info.dcr = DCR_SETTING; + pid_lower_32bits = (uint32_t)(((uint32_t)(PID_VENDOR_PART_ID << PID_PART_ID_Pos) & PID_PART_ID_Msk) | + ((uint32_t)(PID_VENDOR_INSTANCE_ID << PID_INSTANCE_ID_Pos) & PID_INSTANCE_ID_Msk) | + ((uint32_t)(PID_VENDOR_DEF << PID_VENDOR_DEF_Pos) & PID_VENDOR_DEF_Msk)); + pid_upper_16bits = (uint16_t) (((uint16_t)(PID_TYPE_SELECTION) & PID_TYPE_Msk) | + ((uint16_t)(PID_MANUFACTURER) & PID_MANUFACTURER_Msk)); + + g_slave_device_cfg.slave_info.pid[0] = (uint8_t)(pid_upper_16bits >> 8); + g_slave_device_cfg.slave_info.pid[1] = (uint8_t)(pid_upper_16bits >> 0); + g_slave_device_cfg.slave_info.pid[2] = (uint8_t)(pid_lower_32bits >> 24); + g_slave_device_cfg.slave_info.pid[3] = (uint8_t)(pid_lower_32bits >> 16); + g_slave_device_cfg.slave_info.pid[4] = (uint8_t)(pid_lower_32bits >> 8); + g_slave_device_cfg.slave_info.pid[5] = (uint8_t)(pid_lower_32bits >> 0); + + APP_PRINT("I3C device Information:\r\n"); + APP_PRINT(" - Static Address:0x%02x\r\n", g_slave_device_cfg.static_address); + APP_PRINT(" - BCR: 0x%02x\r\n", g_slave_device_cfg.slave_info.bcr); + APP_PRINT(" - DCR: 0x%02x\r\n", g_slave_device_cfg.slave_info.dcr); + APP_PRINT(" - PID: 0x%02x%02x%02x%02x%02x%02x\r\n", + g_slave_device_cfg.slave_info.pid[0], + g_slave_device_cfg.slave_info.pid[1], + g_slave_device_cfg.slave_info.pid[2], + g_slave_device_cfg.slave_info.pid[3], + g_slave_device_cfg.slave_info.pid[4], + g_slave_device_cfg.slave_info.pid[5]); + + /* Set the device configuration for this device. */ + err = R_I3C_DeviceCfgSet(&g_i3c0_ctrl, &g_slave_device_cfg); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_DeviceCfgSet API FAILED \r\n"); + /* de-initialize the opened I3C module.*/ + i3c_deinit(); + return err; + } + + /* Enable Slave Mode. */ + err = R_I3C_Enable(&g_i3c0_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Enable API FAILED \r\n"); + /* de-initialize the opened I3C module.*/ + i3c_deinit(); + return err; + } + + /* Set the status returned to the master in response to a GETSTATUS command */ + err = R_I3C_SlaveStatusSet(&g_i3c0_ctrl, g_slave_device_status); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_SlaveStatusSet API FAILED \r\n"); + /* de-initialize the opened I3C module.*/ + i3c_deinit(); + return err; + } + + APP_PRINT("\r\nINFO : I3C device is ready and waiting for DAA.\r\n"); + + /* waiting for the bus initialization */ + err = i3c_device_daa_participation(); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : i3c_device_daa_participation function failed.\r\n"); + /* de-initialize the opened I3C module.*/ + i3c_deinit(); + return err; + } + + APP_PRINT ("\r\nINFO : Address assignment is completed, dynamic address: 0x%02x\r\n", g_slave_dynamic_address); + /* Set the buffer for storing data received during a read transfer. */ + p_next = g_read_data[RESET_VALUE]; + + /* Read the data from I3C bus.*/ + err = R_I3C_Read(&g_i3c0_ctrl, p_next, MAX_READ_DATA_LEN, false); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Read API FAILED \r\n"); + /* de-initialize the opened I3C module.*/ + i3c_deinit(); + return err; + } + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief This functions processes master request or send IBI to master. + * @param[IN] None + * @retval FSP_SUCCESS Master request processed successfully. + * @retval err Any Other Error code apart from FSP_SUCCESS like Unsuccessful IBI write. + **********************************************************************************************************************/ +fsp_err_t i3c_slave_ops(void) +{ + fsp_err_t status = FSP_SUCCESS; + uint32_t event_flag = RESET_VALUE; + + /* wait for I3C events.*/ + event_flag = i3c_app_event_notify((I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE | + I3C_EVENT_FLAG_COMMAND_COMPLETE | + I3C_EVENT_FLAG_WRITE_COMPLETE | + I3C_EVENT_FLAG_READ_COMPLETE | + I3C_EVENT_FLAG_READ_BUFFER_FULL | + I3C_EVENT_FLAG_IBI_WRITE_COMPLETE | + I3C_EVENT_FLAG_INTERNAL_ERROR), WAIT_TIME); + + /* check if flag is command complete and broadcast flag from master.*/ + if(I3C_EVENT_FLAG_COMMAND_COMPLETE & event_flag) + { + APP_PRINT ("\r\nINFO : received CCC: 0x%x\r\n", g_slave_received_ccc_code); + if(g_data_transfer_size) + { + APP_PRINT ("INFO : received CCC payload size: 0x%x\r\n", g_data_transfer_size); + } + + if(I3C_CCC_BROADCAST_RSTDAA == g_slave_received_ccc_code) + { + /* the current device dynamic address is reset by master */ + g_slave_dynamic_address = RESET_VALUE; + APP_PRINT ("\r\nINFO : slave dynamic address is reset.\r\n"); + /* process i3c device DAA block.*/ + status = i3c_device_daa_participation(); + if (FSP_SUCCESS != status) + { + APP_ERR_PRINT ("\r\nERROR : i3c_device_daa_participation function failed.\r\n"); + return FSP_ERR_INTERNAL; + } + APP_PRINT ("\r\nINFO : slave dynamic address is assigned.\r\n"); + /* toggle the blue led.*/ + R_IOPORT_PinRead(g_ioport.p_ctrl, LED1_BLUE, &led_status); + R_IOPORT_PinWrite(g_ioport.p_ctrl, LED1_BLUE, (!led_status)); + } + } + + /* check if event is write complete.*/ + if(event_flag & I3C_EVENT_FLAG_WRITE_COMPLETE) + { + /* Note that the application may also call i3c_api_t::read or i3c_api_t::write from this event + * In order to set the transfer buffers for the next transfer. */ + /* When a read buffer is full or a write operation (Master Read / Slave Write) is complete, prepare a buffer for reading. */ + status = R_I3C_Read(&g_i3c0_ctrl, p_next, MAX_READ_DATA_LEN, false); + if (FSP_SUCCESS != status) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Read API failed.\r\n"); + return status; + } + + APP_PRINT ("\r\nINFO : Write complete, transfer size: 0x%x\r\n", g_data_transfer_size); + /* toggle the green led.*/ + R_IOPORT_PinRead(g_ioport.p_ctrl, LED2_GREEN, &led_status); + R_IOPORT_PinWrite(g_ioport.p_ctrl, LED2_GREEN, (!led_status)); + } + + /* check if event is read complete.*/ + if(event_flag & I3C_EVENT_FLAG_READ_COMPLETE) + { + /* set the next read buffer.*/ + set_next_read_buffer(); + /* Note that the application may also call i3c_api_t::read or i3c_api_t::write from this event + * In order to set the transfer buffers for the next transfer. */ + /* When a read operation (Master Write / Slave Read) is complete, prepare a buffer for writing. */ + memcpy(&g_write_data[RESET_VALUE], p_last, g_data_transfer_size); + status = R_I3C_Write(&g_i3c0_ctrl, g_write_data, g_data_transfer_size, false); + if (FSP_SUCCESS != status) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Write API failed.\r\n"); + return status; + } + + APP_PRINT ("\r\nINFO : Read complete, transfer size: 0x%x\r\n", g_data_transfer_size); + /* toggle the red led.*/ + R_IOPORT_PinRead(g_ioport.p_ctrl, LED3_RED_ARDUINO_D2_PMOD2_RESET, &led_status); + R_IOPORT_PinWrite(g_ioport.p_ctrl, LED3_RED_ARDUINO_D2_PMOD2_RESET, (!led_status)); + } + + /* check if event is IBI write complete.*/ + if(event_flag & I3C_EVENT_FLAG_IBI_WRITE_COMPLETE) + { + APP_PRINT ("\r\nINFO : IBI Write complete, transfer size: 0x%x\r\n", g_data_transfer_size); + /* toggle the green led.*/ + R_IOPORT_PinRead(g_ioport.p_ctrl, LED2_GREEN, &led_status); + R_IOPORT_PinWrite(g_ioport.p_ctrl, LED2_GREEN, (!led_status)); + } + + /* check if event is read buffer full.*/ + if(event_flag & I3C_EVENT_FLAG_READ_BUFFER_FULL) + { + /*If there is no user provided read buffer, or if the user provided read buffer has been filled, + * the driver will notify the application that the buffer is full. The application may provide + * a new read buffer by calling i3c_api_t::read. If no read buffer is provided, then any remaining bytes + * in the transfer will be dropped.*/ + status = R_I3C_Read(&g_i3c0_ctrl, p_next, MAX_READ_DATA_LEN, false); + if (FSP_SUCCESS != status) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_Read API failed.\r\n"); + return status; + } + } + + /* check if event is internal error.*/ + if(event_flag & I3C_EVENT_FLAG_INTERNAL_ERROR) + { + APP_ERR_PRINT ("\r\nERROR : I3C Internal Error occurred.\r\n"); + APP_PRINT ("\r\nINFO : transfer status : 0x%x\r\n", g_i3c_event_status); + return FSP_ERR_INTERNAL; + } + + /* check if on-board switch is pressed.*/ + if(true == read_onboard_sw_status()) + { + /* Notify that user pushbutton is pressed */ + APP_PRINT("\r\nINFO : User Pushbutton Pressed.\r\n"); + APP_PRINT("INFO : Initiate an IBI transfer request.\r\n"); + + /* Set the value of the data to write. */ + for (uint32_t cnt = RESET_VALUE; cnt < sizeof(g_ibi_write_data); cnt++) + { + g_ibi_write_data[cnt] = (uint8_t) (cnt + g_ibi_write_count) & UINT8_MAX; + } + g_ibi_write_count++; + + /* Initiate an IBI write operation.*/ + status = R_I3C_IbiWrite(&g_i3c0_ctrl, I3C_IBI_TYPE_INTERRUPT, g_ibi_write_data, sizeof(g_ibi_write_data)); + if (FSP_SUCCESS != status) + { + APP_ERR_PRINT ("\r\nERROR : R_I3C_IbiWrite API FAILED.\r\n"); + return status; + } + APP_PRINT("\r\nINFO : IBI transfer request initiated successfully.\r\n"); + } + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief This function closes opened I3C module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void i3c_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close I3C module */ + err = R_I3C_Close(&g_i3c0_ctrl); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* I3C Close failure message */ + APP_ERR_PRINT("\r\nERROR : R_I3C_Close API FAILED.\r\n"); + } +} + +/*******************************************************************************************************************//** + * @brief This function is callback for i3c. + * + * @param[in] p_args + **********************************************************************************************************************/ +void g_i3c0_callback(i3c_callback_args_t const *const p_args) +{ + /* update the event in global array and this will be used in i3c_app_event_notify function.*/ + g_i3c_event_status = p_args->event_status; + g_i3c_event_count[p_args->event]++; + + switch(p_args->event) + { + case I3C_EVENT_ADDRESS_ASSIGNMENT_COMPLETE: + { + g_slave_dynamic_address = p_args->dynamic_address; + break; + } + + case I3C_EVENT_READ_COMPLETE: + { + /* The number of bytes read by the slave will be available in i3c_callback_args_t::transfer_size. */ + g_data_transfer_size = p_args->transfer_size; + break; + } + + case I3C_EVENT_WRITE_COMPLETE: + { + /* The number of bytes written by the slave will be available in i3c_callback_args_t::transfer_size. */ + g_data_transfer_size = p_args->transfer_size; + break; + } + + case I3C_EVENT_IBI_WRITE_COMPLETE: + { + /* Notify the application that the IBI write is complete. */ + g_data_transfer_size = p_args->transfer_size; + break; + } + + case I3C_EVENT_COMMAND_COMPLETE: + { + /* The command code and transfer size will be available in p_args. + * If the command code is a Broadcast or Direct Set, then data will + * be stored in the read buffer provided by i3c_api_t::read. + * If the command code is a Direct Get, then the data will be automatically + * sent from device SFR. */ + g_slave_received_ccc_code = p_args->command_code; + if(p_args->transfer_size) + { + g_data_transfer_size = p_args->transfer_size; + set_next_read_buffer(); + } + break; + } + + default: + { + break; + } + } +} + +/*******************************************************************************************************************//** + * @brief This functions waits for bus initialization and sends IBI hot join request to master. + * @param[IN] None + * @retval FSP_SUCCESS hot join request processed successfully. + * @retval err Any Other Error code apart from FSP_SUCCESS like Unsuccessful IBI write. + **********************************************************************************************************************/ +static fsp_err_t i3c_device_daa_participation(void) +{ + fsp_err_t status = FSP_SUCCESS; + uint32_t event_flag = RESET_VALUE; + + /* waiting for the bus initialization */ + while(RESET_VALUE == g_slave_dynamic_address) + { + event_flag = i3c_app_event_notify(I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE, WAIT_TIME); + if((--g_wait_count == RESET_VALUE)&&(!(event_flag & I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE))) + { + APP_PRINT ("\r\nINFO : Request Hot-Join IBI\r\n"); + /* Initiate an IBI write operation.*/ + status = R_I3C_IbiWrite(&g_i3c0_ctrl, I3C_IBI_TYPE_HOT_JOIN, NULL, RESET_VALUE); + if (FSP_SUCCESS != status) + { + APP_ERR_PRINT ("\r\nERROR : Request I3C_IBI_TYPE_HOT_JOIN FAILED \r\n"); + return status; + } + g_wait_count = MAX_WAIT_TIME_BUS_INIT_10S; + } + } + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @brief This function starts the timer and wait for the event set in the i3c callback till specified timeout. + * @param[IN] set_event_flag_value requested event flag + * @param[IN] timeout specified timeout + * @retval on successful operation, returns i3c event flag value. + **********************************************************************************************************************/ +static uint32_t i3c_app_event_notify(uint32_t set_event_flag_value, uint32_t timeout) +{ + fsp_err_t err = FSP_SUCCESS; + uint32_t get_event_flag_value = RESET_VALUE; + /* Reset the timeout flag. */ + b_process_timeout = false; + + /* start the timer.*/ + err = start_timeout_timer_with_defined_ms(timeout); + if(FSP_SUCCESS != err) + { + APP_ERR_PRINT("\r\nERROR : start_timeout_timer_with_defined_ms function failed.\r\n"); + /* de-initialize the opened I3C and AGT timer module.*/ + i3c_deinit(); + agt_deinit(); + APP_ERR_TRAP(err); + } + + /* wait for the event set in the i3c callback till specified timeout.*/ + while (!b_process_timeout) + { + /* process for all i3c events.*/ + for(uint8_t cnt = RESET_VALUE; cnt < (I3C_EVENT_INTERNAL_ERROR+ONE); cnt++) + { + /* check for callback event.*/ + if(g_i3c_event_count[cnt] > RESET_VALUE) + { + /* store the event in local variable.*/ + get_event_flag_value |= (uint32_t)(0x1 << cnt); + g_i3c_event_count[cnt] -= ONE; + } + } + + /* check for event received from i3c callback function is similar to event which user wants.*/ + get_event_flag_value = (set_event_flag_value & get_event_flag_value); + if(get_event_flag_value) + { + g_i3c_event_status = RESET_VALUE; + return get_event_flag_value; + } + } + return 0; +} + +/*******************************************************************************************************************//** + * @brief This function sets the next read buffer. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +static void set_next_read_buffer(void) +{ + p_last = p_next; + p_next = ((p_next == g_read_data[RESET_VALUE]) ? g_read_data[ONE] : g_read_data[RESET_VALUE]); +} + +/*******************************************************************************************************************//** + * @brief This functions initializes and enables ICU module. + * @param[IN] None + * @retval FSP_SUCCESS Upon successful open of ICU module + * @retval Any Other Error code apart from FSP_SUCCESS Unsuccessful open + **********************************************************************************************************************/ +fsp_err_t icu_init(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Open ICU module */ + err = R_ICU_ExternalIrqOpen(&g_external_irq_sw1_ctrl, &g_external_irq_sw1_cfg); + /* Handle error */ + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_ICU_ExternalIrqOpen API FAILED.\r\n"); + return err; + } + + /* Enable ICU module */ + err = R_ICU_ExternalIrqEnable(&g_external_irq_sw1_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_ICU_ExternalIrqEnable API FAILED.\r\n"); + /* de-initialize the opened ICU module.*/ + icu_deinit(); + } + return err; +} + +/*******************************************************************************************************************//** + * @brief This function closes opened ICU module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void icu_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close ICU module */ + err = R_ICU_ExternalIrqClose(&g_external_irq_sw1_ctrl); + /* Handle error */ + if (FSP_SUCCESS != err) + { + /* ICU Close failure message */ + APP_ERR_PRINT("\r\nERROR : R_ICU_ExternalIrqClose API FAILED.\r\n"); + } +} + +/*******************************************************************************************************************//** + * @brief User defined external irq callback. + * @param[IN] p_args + * @retval None + **********************************************************************************************************************/ +void external_irq_callback(external_irq_callback_args_t *p_args) +{ + /* check for the right interrupt*/ + if(USER_SW_IRQ_NUMBER == p_args->channel) + { + b_onboard_sw_pressed = true; + R_IOPORT_PinRead(g_ioport.p_ctrl, BSP_IO_PORT_02_PIN_05, &g_last_switch_status); + } +} + +/*******************************************************************************************************************//** + * @brief This function reads the on board switch status. + * @param[IN] None + * @retval True if switch is pressed else return false. + **********************************************************************************************************************/ +bool read_onboard_sw_status(void) +{ + if(true == b_onboard_sw_pressed) + { + /* Reset the flag.*/ + b_onboard_sw_pressed = false; + /* Read the current status of switch.*/ + R_IOPORT_PinRead(g_ioport.p_ctrl, BSP_IO_PORT_02_PIN_05, &g_cur_switch_status); + if((g_cur_switch_status == BSP_IO_LEVEL_LOW) && (g_last_switch_status == BSP_IO_LEVEL_LOW)) + { + return true; + } + } + return false; +} + +/* timer related functions */ +static uint32_t timeout_value_in_ms = RESET_VALUE; + +/*******************************************************************************************************************//** + * @brief This function is callback for periodic mode timer and stops AGT0 timer in Periodic mode. + * + * @param[in] (timer_callback_args_t *) p_args + **********************************************************************************************************************/ +void g_timeout_timer_callback(timer_callback_args_t *p_args) +{ + FSP_PARAMETER_NOT_USED(p_args); + + /* check if specified timeout is zero.*/ + if(RESET_VALUE == --timeout_value_in_ms) + { + /* set the timeout flag.*/ + b_process_timeout = true; + /* stop AGT timer.*/ + R_AGT_Stop(&g_timeout_timer_ctrl); + } +} + +/*******************************************************************************************************************//************** + * @brief This function Resets the counter value and start the AGT timer. + * @param[IN] timeout_ms + * @retval FSP_SUCCESS or Any Other Error code apart from FSP_SUCCESS upon unsuccessful start_timeout_timer_with_defined_ms. + ***********************************************************************************************************************************/ +static fsp_err_t start_timeout_timer_with_defined_ms(uint32_t timeout_ms) +{ + fsp_err_t err = FSP_SUCCESS; + + /* update the specified timeout into a global variable and this will be checked in timer callback.*/ + timeout_value_in_ms = timeout_ms; + /* Resets the counter value.*/ + err = R_AGT_Reset(&g_timeout_timer_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_AGT_Reset API FAILED \r\n"); + return err; + } + + /* start the AGT timer.*/ + err = R_AGT_Start(&g_timeout_timer_ctrl); + if (FSP_SUCCESS != err) + { + APP_ERR_PRINT ("\r\nERROR : R_AGT_Start API FAILED \r\n"); + } + return err; +} + +/*******************************************************************************************************************//** + * @brief This function closes opened AGT module before the project ends up in an Error Trap. + * @param[IN] None + * @retval None + **********************************************************************************************************************/ +void agt_deinit(void) +{ + fsp_err_t err = FSP_SUCCESS; + + /* Close AGT0 module */ + err = R_AGT_Close(&g_timeout_timer_ctrl); + /* handle error */ + if (FSP_SUCCESS != err) + { + /* AGT0 Close failure message */ + APP_ERR_PRINT("\r\nERROR : R_AGT_Close API FAILED.\r\n"); + } +} + +/*******************************************************************************************************************//** + * @} (end addtogroup i3c_slave_ep) + **********************************************************************************************************************/ diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.h b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.h new file mode 100644 index 0000000000..a37a19a3b7 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/e2studio/src/i3c_slave_ep.h @@ -0,0 +1,134 @@ +/*********************************************************************************************************************** + * File Name : i3c_slave_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) 2020 Renesas Electronics Corporation. All rights reserved. + ***********************************************************************************************************************/ + + +#ifndef I3C_SLAVE_EP_H_ +#define I3C_SLAVE_EP_H_ + +#define I3C_SLAVE_DEVICE_STATIC_ADDRESS (0x41) +#define MAX_WRITE_DATA_LEN (64) +#define MAX_READ_DATA_LEN (64) +#define MAX_IBI_PAYLOAD_SIZE (32) +#define WAIT_TIME (100) +#define MAX_WAIT_TIME_BUS_INIT_10S (100UL) +/* External IRQ channel number */ +#define USER_SW_IRQ_NUMBER (0x01) + +#define WORD_ALIGN (4) +#define ONE (1) + +/* BCR structure defined by MIPI I3C */ +#define BCR_BIT6_7_FOR_I3C_SLAVE (0x0) +#define BCR_BIT6_7_FOR_I3C_MASTER (0x1) +#define BCR0_Pos (0) +#define BCR0_Msk (0x01) +#define BCR1_Pos (1) +#define BCR1_Msk (0x02) +#define BCR2_Pos (2) +#define BCR2_Msk (0x04) +#define BCR3_Pos (3) +#define BCR3_Msk (0x08) +#define BCR4_Pos (4) +#define BCR4_Msk (0x10) +#define BCR5_Pos (5) +#define BCR5_Msk (0x20) +#define BCR76_Pos (6) +#define BCR76_Msk (0xc0) + +/* user defined I3C slave BCR */ +#define I3C_SLAVE_DEVICE_SPEED_LIMITATION (0) +#define I3C_SLAVE_DEVICE_IBI_REQUEST_CAPABLE (1) +#define I3C_SLAVE_DEVICE_IBI_WITH_PAYLOAD (1) +#define I3C_SLAVE_DEVICE_OFFLINE_CAPABLE (0) +#define I3C_SLAVE_DEVICE_IS_BRIDGE (0) +#define I3C_SLAVE_DEVICE_SUPPORT_GETCAPS (0) +#define I3C_SLAVE_DEVICE_ROLE (BCR_BIT6_7_FOR_I3C_SLAVE) + +#define BCR_SETTING (((I3C_SLAVE_DEVICE_SPEED_LIMITATION << BCR0_Pos) & BCR0_Msk) | \ + ((I3C_SLAVE_DEVICE_IBI_REQUEST_CAPABLE << BCR1_Pos) & BCR1_Msk) | \ + ((I3C_SLAVE_DEVICE_IBI_WITH_PAYLOAD << BCR2_Pos) & BCR2_Msk) | \ + ((I3C_SLAVE_DEVICE_OFFLINE_CAPABLE << BCR3_Pos) & BCR3_Msk) | \ + ((I3C_SLAVE_DEVICE_IS_BRIDGE << BCR4_Pos) & BCR4_Msk) | \ + ((I3C_SLAVE_DEVICE_SUPPORT_GETCAPS << BCR5_Pos) & BCR5_Msk) | \ + ((I3C_SLAVE_DEVICE_ROLE << BCR76_Pos) & BCR76_Msk)) + +/* DCR setting */ +#define DCR_SETTING (0x00) + +/* PID setting */ +#define PID_TYPE_VENDOR_FIXED (0x0) +#define PID_TYPE_RANDOM (0x1) +/* MIPI Manufacturer ID */ +#define PID_RENESAS_MANUFACTURER_ID (0x04CCU) +/* Higher 16Bits in PID structure */ +#define PID_MANUFACTURER_Pos (1) +#define PID_MANUFACTURER_Msk (0xfffe) +#define PID_TYPE_Pos (0) +#define PID_TYPE_Msk (0x0001) +/* Lower 32Bits in PID structure */ +#define PID_VENDOR_DEF_Pos (0) +#define PID_VENDOR_DEF_Msk (0x00000fff) +#define PID_INSTANCE_ID_Pos (12) +#define PID_INSTANCE_ID_Msk (0x0000f000) +#define PID_PART_ID_Pos (16) +#define PID_PART_ID_Msk (0xffff0000) + +/* user config */ +#define PID_MANUFACTURER (PID_RENESAS_MANUFACTURER_ID) +#define PID_TYPE_SELECTION (PID_TYPE_VENDOR_FIXED) +#define PID_VENDOR_PART_ID (0x0005U) +#define PID_VENDOR_INSTANCE_ID (0x00U) +#define PID_VENDOR_DEF (0x0000U) + +/* I3C Event Flag */ +#define I3C_EVENT_FLAG_ENTDAA_ADDRESS_PHASE 0x00000001 +#define I3C_EVENT_FLAG_IBI_READ_COMPLETE 0x00000002 +#define I3C_EVENT_FLAG_IBI_READ_BUFFER_FULL 0x00000004 +#define I3C_EVENT_FLAG_READ_BUFFER_FULL 0x00000008 +#define I3C_EVENT_FLAG_IBI_WRITE_COMPLETE 0x00000010 +#define I3C_EVENT_FLAG_HDR_EXIT_PATTERN_DETECTED 0x00000020 +#define I3C_EVENT_FLAG_ADDRESS_ASSIGNMENT_COMPLETE 0x00000040 +#define I3C_EVENT_FLAG_COMMAND_COMPLETE 0x00000080 +#define I3C_EVENT_FLAG_WRITE_COMPLETE 0x00000100 +#define I3C_EVENT_FLAG_READ_COMPLETE 0x00000200 +#define I3C_EVENT_FLAG_TIMEOUT_DETECTED 0x00000400 +#define I3C_EVENT_FLAG_INTERNAL_ERROR 0x00000800 + +#define EP_INFO "This example project demonstrates the typical use of the I3C Driver as slave\r\n"\ + "device on Renesas RA MCUs based on Renesas FSP. once initialization is successful,\r\n"\ + "The EP waits for DAA, or if DAA is not completed it will initiates hot join request.\r\n"\ + "If on-board switch is pressed, it will initiate IBI transfer request.\r\n"\ + "Error and info messages will be printed on JlinkRTTViewer.\r\n"\ + "Refer to readme.txt file for more details on Example Project and\r\n"\ + "FSP User's Manual for more information about "MODULE_NAME" driver\r\n" + +/* function declarations */ +fsp_err_t i3c_slave_init(void); +fsp_err_t i3c_slave_ops(void); +fsp_err_t icu_init(void); +bool read_onboard_sw_status(void); +void i3c_deinit(void); +void icu_deinit(void); +void agt_deinit(void); + +#endif /* I3C_SLAVE_EP_H_ */ diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/i3c_notes.md b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/i3c_notes.md new file mode 100644 index 0000000000..002671c16d --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/i3c_notes.md @@ -0,0 +1,136 @@ +**Note :** MD file is common for both i3c_master and i3c_slave EP. + +# Introduction # + +The sample code accompanying this file shows the operation of the I3C Driver on Renesas RA2E2 MCUs based on Renesas FSP. +The I3C master on EK-RA2E2 demonstrates operations associated with an I3C slave running on another RA2E2 board. Once initialization is successful, +I3C Master device assigns slave address to I3C slave device through DAA (dynamic address assignment) using I3C common command code (CCC). +Once Dynamic Address Assignment is completed, the Master EP performs write/read operations, and displays slave device information based on user input. +If the on-board switch is pressed on the slave side, it will initiate an IBI transfer request. +The application status messages will be displayed in the Jlink RTT Viewer and on-board LEDs. Refer **[LED Status](#led-status)** section for LED observation. + + +Please refer to the [Example Project Usage Guide](https://github.com/renesas/ra-fsp-examples/blob/master/example_projects/Example%20Project%20Usage%20Guide.pdf) +for general information on example projects and [readme.txt](./readme.txt) for specifics of operation. + +## Required Resources ## +To build and run the I3C example project, the following resources are needed. + +### Hardware ### +* Renesas EK-RA2E2 kit - 2x +* USB A to USB Micro B Cable - 2x +* Jumper wires to link EK-RA2E2 kits - 5x +* Pull up resistor of value 3.9 or 4.7k ohms - 1x + +Refer to [readme.txt](./readme.txt) for information on how to connect the hardware. + +### Software ### +1. Refer to the software required section in [Example Project Usage Guide](https://github.com/renesas/ra-fsp-examples/blob/master/example_projects/Example%20Project%20Usage%20Guide.pdf) + + +## Related Collateral References ## +The following documents can be referred to for enhancing your understanding of +the operation of this example project: +- [FSP User Manual on GitHub](https://renesas.github.io/fsp/) +- [FSP Known Issues](https://github.com/renesas/fsp/issues) + + +# Project Notes # + +## System Level Block Diagram ## + High level block diagram + +![I3C](images/highLevel_i3c.jpg "High Level Block Diagram") + + +## FSP Modules Used ## +List of important modules that are used in this example project. Refer to the FSP User Manual for further details on each module listed below. + +| Module Name | Usage | Searchable Keyword | +|-------------|-----------------------------------------------|-----------------------------------------------| +|I3C | Driver for the I3C peripheral to demonstrate Master and Slave mode on RA2E2 MCUs | i3c| +|AGT | Driver for the AGT peripheral is used for demonstrating timeout condition. | agt| +|ICU | The external_irq interface is for configuring interrupts to fire when a trigger condition is detected on an external IRQ pin | icu| + + +## Module Configuration Notes ## +This section describes FSP Configurator properties which are important or different than those selected by default. + +**I3C Master Configuration properties** + +| Module Property Path and Identifier | Default Value | Used Value | Reason | +| :-------------------------------------: | :---------------: | :------------: | :--------: | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Common > Slave Support |Enable | Disable |As only master mode is required, disable slave support to decrease code size. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > ACK Hot-Join Requests |Disable | Enable |Enable Hot-Join Requests acknowledgment. If a Hot-Join event is received, then the master will initiate the dynamic address assignment. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > Notify Rejected Hot-Join Requests |Disable | Enable |Generate a callback when an IBI Hot-Join Request is rejected. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > Notify Rejected Mastership Requests |Disable | Enable |Generate a callback when an IBI Mastership Request is rejected. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Master Mode > Notify Rejected Interrupt Requests |Disable | Enable |Generate a callback when an IBI Interrupt Request is rejected. | + +**I3C Slave Configuration properties** + +| Module Property Path and Identifier | Default Value | Used Value | Reason | +| :-------------------------------------: | :---------------: | :------------: | :--------: | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Common > Master Support |Enable | Disable |If only slave mode is required, disable master support to decrease code size. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > ENEC/DISEC > In-Band Interrupts |Disable | Enable |Enable the In-Band Interrupts capability, so that the slave should issue IBI requests. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > ENEC/DISEC > Hot-Join Requests |Disable | Enable |Enable the Hot-Join Requests capability, so that the slave should issue Hot-Join requests. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > SETMWL/GETMWL > Max Write Length |65535 | 64 |Set the Device Max Write Length. In this EP, the write buffer is 64-byte. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > SETMRL/GETMRL > Max Read Length |65535 | 64 |Set the Device Max Read Length. In this EP, the read buffer is 64-byte. | +| configuration.xml -> HAL/Common -> Properties > Settings > Property >Module I3C > Slave Mode > Command Response Info > SETMRL/GETMRL > Max IBI Payload Length |0 | 32 |Set the Device Max IBI Payload Length. In this EP, the IBI read buffer is 32-byte. | + +The table below lists the FSP provided API used at the application layer by this example project. + +| API Name | Usage | +|-------------|--------------------------------------------------------------------------------| +|R_I3C_Open|This API is used to Open the I3C instance. | +|R_I3C_DeviceCfgSet|This API is used to set the configuration for this device | +|R_I3C_MasterDeviceTableSet|This API configures an entry in the master device table. | +|R_I3C_Enable|This API is used to Enable the I3C device. | +|R_I3C_IbiRead|This API is used to set the read buffer for storing received IBI data. Used in only master mode. | +|R_I3C_DynamicAddressAssignmentStart|This API is used to start the Dynamic Address Assignment Process. | +|R_I3C_Write|This API is used to set the write buffer for the transfer. In master mode, start the transfer. | +|R_I3C_Read|This API is used set the read buffer for the transfer. In master mode, start the transfer. | +|R_I3C_SlaveStatusSet|This API is used to set the status returned to the master in response to a GETSTATUS command. | +|R_I3C_IbIWrite|This API is used to initiate an IBI write operation. Used in only Slave mode. | +|R_I3C_Close|This API is used to close the I3C instance | +|R_AGT_Open|This API is used to initialize the AGT module instance. | +|R_AGT_Stop|This API is used to stop the timer. | +|R_AGT_Reset|This API is used to reset the counter value. | +|R_AGT_Start|This API is used to Start timer. | +|R_AGT_Close|This API is used to close the AGT module instance. | +|R_ICU_ExternalIrqOpen|This API is used to prepare an external IRQ pin for operation. | +|R_ICU_ExternalIrqEnable|This API is used to enable external interrupt for specified channel at NVIC. | +|R_ICU_ExternalIrqClose|This API is used to close the external interrupt channel. | +|R_IOPORT_PinRead |This API is used to read the current status of GPIO Pin. | +|R_IOPORT_PinWrite |This API is used to write the value on GPIO Pin. | + + +## Verifying operation ## +1. Import, generate and build both i3c_master and i3c_slave EPs in different workspaces. + Before running the example project, make sure hardware connections are done on both master and slave side. +2. Download i3c_master EP to one EK-RA2E2 kit and run the project. +3. Download i3c_slave EP to another EK-RA2E2 kit and run the project. +4. Now open one Jlink RTT Viewer and connect to the master board and open another/second JlinkRTTViewer and connect it to slave board. +5. User can perform Menu option operations on the master side and check corresponding results for the Master and Slave EPs on the respective JlinkRTTViewer. +6. Also on slave side user can perform IBI transfer request using Push button(S2) and verify result on JLinkRTT_Viewer. + + Below images showcases the I3C Master output on JLinkRTT_Viewer: + + ![I3C Master banner snapshot](images/i3c_master_banner_info.jpg "Banner Info") + + ![I3C Master rtt output](images/i3c_master_rtt_log1.jpg "RTT output") + + ![I3C Master rtt output](images/i3c_master_rtt_log2.jpg "RTT output") + + Below images showcases the I3C Slave output on JLinkRTT_Viewer: + + ![I3C Slave banner sanpshot](images/i3c_slave_banner_info.jpg "Banner Info") + + ![I3C Slave rtt snapshot](images/i3c_slave_rtt_log.jpg "RTT output") + + +## LED Status ## +Below are the obsrvations of the LED operation on slave board : +* When Dynamic Address Assignment completes, the onboard Blue LED status will be toggled. +* When write trasfer completes, the onboard Green LED status will be toggled. +* When read transfer completes, the onboard Red LED status will be toggled. +* When IBI write trasfer completes, the onboard Green LED status will be toggled. \ No newline at end of file diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/highLevel_i3c.jpg b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/highLevel_i3c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23b2a8564b7feb12ba2350c4cd9867fe6c4d1e34 GIT binary patch literal 28713 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 Qrt|!7yc7Rt*Uy>%1v?NK+5i9m literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_banner_info.jpg b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_banner_info.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21aaa1a5f583b5e1611cb71f4df380b63cac2a75 GIT binary patch literal 140654 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�{7cM_ip9|qx36US@ z^?dC(P}-VwYa-jaL%BNFPi3>%{MoNik^Ll|N=a1Sbpv?f0BZ(=dM*?;wt0a1qF>$( z!IC-wYP>p?6sLC+d9-RRU-WL)9eeHvX!<2(Db@`X@RvV`!( z2Yx$P!`+YF#!~P@7-3db)ot8BCY*>CGyq1huUad`Ele~HBX#vYF6yB}$C3Wx4m}aB zV}9LbKF4v|_e`>=$D$v+oQ$$;MZZG%tY};a*FfyK=w!zkXd)f3EyEMGmmG;dp+CHh zzgLDfT)O%~<2HRo!X)j3^X>h<4|d-tKj|Iq_q{vcm-D25 z5fDJf@stOxgyMeSL@Y^EG5-Fxg2;&9e2TnYv@#)qFM>tFL(44SK9Z~Vx`X)TSKiji z#a>U_LsTaqt;6Qw{Hqe(CE7$yDVrsWma@Q$!L?tzW*SOQUFm$s!7+HG&H`EQscM`B zOv0Y~GFjt}sI;F*amHW;l9P5nXFT4Mth?5$O8nVFQRiOCm#ydQGMAaM#^#^-mqV!| zYWBq6=PnPHAY}i1#7Od9_W+Edg)T?ju@Z+h4B1;nP$}6v(|-0@8hNHcs>fEuMhoEcY_$AbC7rgNqahjU!dEP4Vg~WE?iggy+~lx2uK9()!FQlCFrIF{_xny#K?5JJkBy z*1*^{)1fuETdfa-U({gxPA2K-qvqmumkvy8+j)30hgi%k7Z^!OKnwoLvGFs5SVukpIuU z)KjRoTLzj4b>rds4fXCD5loOSU4InU9!hDv`gOC8VT{h#}Uga31%fE2tAa!?Av4vfw0hrgT z2J6ZJ^gj;Z+V4Po%9VYDoZa`I`!%;toK{+D-CEmGWL0kKhXVW037QclVfDvq{<)e| ztMU3{)cWQpxdkf+F4;cCs_WW71+1YC6QLVwtQ|=Zdu-?OjseO|jBro9yvHw${qlD@$nh#;U(05Ja1?xwhqrVoBt|z^7-G YrQ}yL>HTf~OYR#*6jCH8qKW|j*{AVKasU7T literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_rtt_log1.jpg b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_rtt_log1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab03983bd3d35fd5935b62c2c0094be879242afb GIT binary patch literal 68049 zcmeFZ2UJtxmNpy(q)U;G5Tz;z2vSr^M7oHG3P_EL)Cdu2K>|^f-UJi`1f;8!NDTre z(gj4M2vS3Wg7kzE4iLh3y!XzXZ)U!GXXan)|Nix_H7A?}i@ZtBKKtFzes;_LkNs%~ z?z|X2os*r7jf0Jqm4lmugOdw9SlJKraC060^Y@=O`SbEW zuL6I#*jU;AtoZL8`=20uYzHt0S(y$J z`3D3Bp@JVic^VNJ6&(|slKT8bTKdb3%>07FqT-S_Z{Jl_*VNYG>OVBJw6?W(bbjvY z9vB?@K0NYcbc{rv`T1*h?)Urxb!~lPlePtH@BESL0EFqUV*OpRe^ob{eDe`{?ec=v$y1qkFcMDWu-q}3UHb03nQN9EavaA@~2&YABz=K|gPkQgFO zbAhm9rxg7CdTPB=(gVPP3ZIGUu;lG>DMDYOE*N<7eZYULr|M4FWZvUU7_>N^%2sgf z@KU>#fwsb{)o5tVY8&h@s&1#p2=d+~h$p6mF zYL3W*mqNfenr^#eJ;a{wxRu_y*{Y+|9eJ&+q*_r?t?HS9BCkGkta}pO9)FG+L91wR z%PI_Qu+%752gVdVUM6MT;SYR!PFsKMLrcU}fd|;K&^yb!X#bDsy>}K)g z$Lt#O5TXOU91%QuFZ2jSWrj5tFNKCuH&^ng4rD4-CCWejyEi|S-%{|^iByLUt(29u z>I~v9D-lbjEAu)n(rZF{75G!o?YH|7UIL|{X&*B4qKG0*dtMF5lXU&ekxT%*&6~_7 zHn6s6mAU7dGMXuW`T)z9OTy?&1pv8ax z`~$O1xvG}k0Q-^}f}&?>t#?WwE+g`=#;_C){0Ab9wuHS~H?#sHVf9X7`mX{}`;Z8U zxqZmd0*2T+xpPmDCmI7-O<}0r>kWzxOB+i`hWn7nCZKX3Vq`#uG6aHh=?{_sL|+_q zXglgGz7GkvN1p_U`w%u_ zjQ=V#px4tjCDuTdCB%e@p$ys{7Vh}u1-KS*8@FCcxBA$a!59%&>%_>GEpkYE8^@ad z^xf{=H9+-P0|C28)FS-bCTFj_eZLO!4cv2UIOSzYb≤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�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 Ne*QoGeAmy>{{yHgBsTy6 literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_rtt_log2.jpg b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/images/i3c_master_rtt_log2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9712cfa7788b7608dd4b70dd8a290c2e57067512 GIT binary patch literal 60238 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%0A4&BLrH*pW=G^!K&28*##hrce4Z7xAoKgpwpcz@ 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 GTn#uA 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 Tn8{|<}p8bYIij6=u~d%js@FQ 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 literal 0 HcmV?d00001 diff --git a/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/readme.txt b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/readme.txt new file mode 100644 index 0000000000..f83fc04ba4 --- /dev/null +++ b/example_projects/ek_ra2e2/i3c_slave/i3c_slave_ek_ra2e2_ep/readme.txt @@ -0,0 +1,52 @@ +/*********************************************************************************************************************** +* +* Copyright [2020] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. +* +* This software is supplied by Renesas Electronics America Inc. and may only be used with products of Renesas Electronics Corp. +* and its affiliates (“Renesas”). No other uses are authorized. This software is protected under all applicable laws, +* including copyright laws. +* Renesas reserves the right to change or discontinue this software. +* THE SOFTWARE IS DELIVERED TO YOU “AS IS,” AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND TO THE FULLEST EXTENT +* PERMISSIBLE UNDER APPLICABLE LAW,DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, INCLUDING WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE SOFTWARE. TO THE MAXIMUM +* EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE (OR ANY PERSON +* OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, INCLUDING, WITHOUT LIMITATION, +* ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; +* ANY LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF +* THE POSSIBILITY OF SUCH LOSS,DAMAGES, CLAIMS OR COSTS. +* +**********************************************************************************************************************/ + +1. Project Overview: + + This example project demonstrates the typical use of the I3C Driver on Renesas RA2E2 MCUs based on Renesas FSP. + The I3C master on EK-RA2E2 demonstrates operations associated with an I3C slave running on another RA2E2 board. + Once initialization is successful, I3C Master device assigns slave address to I3C slave device through + DAA (dynamic address assignment) using I3C common command code (CCC). Once Dynamic Address Assignment is completed, + the Master EP performs write/read operations, and displays slave device information based on user input. + If the on-board switch is pressed on the slave side, it will initiate an IBI transfer request. + Error and info messages will be printed on Jlink RTTViewer. + +2. Hardware Requirement: + + i. 2x Renesas EK-RA2E2 kit. + ii. 2x USB A to USB Micro B Cable. + iii. 5x Jumper wires to link RA2E2 boards. + iv. 1x Pull up resistor of value 3.9 or 4.7k ohms. + +3. Hardware Connections: + Supported Board EK-RA2E2: + * Connect micro-USB cable between J10 on I3C master board EK-RA2E2 and PC. + * Connect micro-USB cable between J10 on I3C slave board EK-RA2E2 and PC. + * External 3V3 pull-up using 3.9 or 4.7k ohms resistor should be connected on SDA line. + * Three jumper wires are required to establish loop back connection along I3C lines across the board with pins as mentioned below. + + Master Board Slave Board + ------------- ------------ + SDA0 Pin P401 ----> SDA0 Pin 401 + SCL0 Pin P400 ----> SCL0 Pin 400 + Common GND + +Note: +1. On slave side user can perform IBI transfer request using onboard Push button(S2). +2. readme is common for both i3c_master and i3c_slave EP. \ No newline at end of file