Skip to content

Commit 7891c39

Browse files
committed
Get RISC-V coprocessor booting and running
1 parent f7002b0 commit 7891c39

23 files changed

Lines changed: 39722 additions & 251 deletions

ref_app/src/mcal/xtensa_esp32_s3/esp32s3.h

Lines changed: 39052 additions & 0 deletions
Large diffs are not rendered by default.

ref_app/src/mcal/xtensa_esp32_s3/mcal_cpu.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@
1414
#include <mcal_reg.h>
1515
#include <mcal_wdg.h>
1616

17+
#include <esp32s3.h>
18+
1719
extern "C"
1820
{
1921
auto main_c1() -> void;
2022
auto Mcu_StartCore1() -> void;
23+
auto Mcu_StartCoProcessorRiscV() -> void;
2124

2225
extern auto set_cpu_private_timer1(uint32_t) -> void;
2326
extern auto _start() -> void;
@@ -83,6 +86,18 @@ auto Mcu_StartCore1() -> void
8386
}
8487
}
8588

89+
extern "C"
90+
auto Mcu_StartCoProcessorRiscV() -> void
91+
{
92+
RTC_CNTL->COCPU_CTRL.bit.COCPU_SHUT_RESET_EN = 1;
93+
RTC_CNTL->ULP_CP_TIMER.reg = 0;
94+
RTC_CNTL->COCPU_CTRL.bit.COCPU_CLK_FO = 1;
95+
RTC_CNTL->COCPU_CTRL.bit.COCPU_DONE_FORCE = 1;
96+
RTC_CNTL->COCPU_CTRL.bit.COCPU_CLKGATE_EN = 1;
97+
RTC_CNTL->COCPU_CTRL.bit.COCPU_SEL = 0;
98+
RTC_CNTL->ULP_CP_CTRL.bit.ULP_CP_FORCE_START_TOP = 0;
99+
}
100+
86101
extern "C"
87102
auto main_c1() -> void
88103
{
@@ -108,6 +123,9 @@ auto mcal::cpu::post_init() noexcept -> void
108123
// Set the private cpu timer1 for core0.
109124
set_cpu_private_timer1(mcal::gpt::timer1_reload());
110125

126+
// Use core0 to start the RISC-V core.
127+
Mcu_StartCoProcessorRiscV();
128+
111129
// Use core0 to start core1.
112130
Mcu_StartCore1();
113131
}

ref_app/src/mcal/xtensa_esp32_s3/mcal_port.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535

3636
static void set_direction_input()
3737
{
38+
mcal::reg::reg_access_static<std::uint32_t, std::uint32_t, mcal::reg::gpio::enable_w1ts, bit_pos>::bit_clr();
39+
mcal::reg::reg_access_static<std::uint32_t, std::uint32_t, mcal::reg::gpio::enable1_w1ts, bit_pos>::bit_clr();
40+
mcal::reg::reg_access_static<std::uint32_t, std::uint32_t, mcal::reg::gpio::out, bit_pos>::bit_clr();
41+
mcal::reg::reg_access_static<std::uint32_t, std::uint32_t, mcal::reg::gpio::out1, bit_pos>::bit_clr();
3842
}
3943

4044
static void set_pin_high()

ref_app/src/mcal/xtensa_esp32_s3/mcal_reg.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,23 @@
9696
constexpr std::uint32_t swd_wprotect { rtc_cntl_base + UINT32_C(0x000000B8) };
9797
constexpr std::uint32_t sw_cpu_stall { rtc_cntl_base + UINT32_C(0x000000BC) };
9898
constexpr std::uint32_t store4 { rtc_cntl_base + UINT32_C(0x000000C0) };
99+
constexpr std::uint32_t store5 { rtc_cntl_base + UINT32_C(0x000000C4) };
100+
constexpr std::uint32_t store6 { rtc_cntl_base + UINT32_C(0x000000C8) };
101+
constexpr std::uint32_t store7 { rtc_cntl_base + UINT32_C(0x000000CC) };
102+
constexpr std::uint32_t low_power_st { rtc_cntl_base + UINT32_C(0x000000D0) };
103+
constexpr std::uint32_t diag0 { rtc_cntl_base + UINT32_C(0x000000D4) };
104+
constexpr std::uint32_t pad_hold { rtc_cntl_base + UINT32_C(0x000000D8) };
105+
constexpr std::uint32_t dig_pad_hold { rtc_cntl_base + UINT32_C(0x000000DC) };
106+
constexpr std::uint32_t ext_wakeup1 { rtc_cntl_base + UINT32_C(0x000000E0) };
107+
constexpr std::uint32_t ext_wakeup1_status { rtc_cntl_base + UINT32_C(0x000000E4) };
108+
constexpr std::uint32_t brown_out { rtc_cntl_base + UINT32_C(0x000000E8) };
109+
constexpr std::uint32_t time_low1 { rtc_cntl_base + UINT32_C(0x000000EC) };
110+
constexpr std::uint32_t time_high1 { rtc_cntl_base + UINT32_C(0x000000F0) };
111+
constexpr std::uint32_t xtal32k_clk_factor { rtc_cntl_base + UINT32_C(0x000000F4) };
112+
constexpr std::uint32_t xtal32k_conf { rtc_cntl_base + UINT32_C(0x000000F8) };
113+
constexpr std::uint32_t ulp_cp_timer { rtc_cntl_base + UINT32_C(0x000000FC) };
114+
constexpr std::uint32_t ulp_cp_ctrl { rtc_cntl_base + UINT32_C(0x00000100) };
115+
constexpr std::uint32_t cocpu_ctrl { rtc_cntl_base + UINT32_C(0x00000104) };
99116
} // namespace rtc_cntl
100117

101118
namespace timg0

ref_app/target.vcxproj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,14 +1034,16 @@
10341034
<None Include="target\micros\xtensa_esp32_s3\make\xtensa_esp32_s3_flags.gmk" />
10351035
<None Include="target\micros\xtensa_esp32_s3\make\xtensa_esp32_s3_flags_extra.gmk" />
10361036
<None Include="target\micros\xtensa_esp32_s3\startup\boot.S" />
1037+
<None Include="target\micros\xtensa_esp32_s3\startup\coprocessor_binary.S" />
10371038
<None Include="target\micros\xtensa_esp32_s3\startup\IntVectTable.S" />
10381039
<None Include="target\micros\xtensa_esp32_s3\startup\Std\ieee754-sf.S" />
10391040
<None Include="target\micros\xtensa_esp32_s3\startup\Std\lib1funcs.S" />
10401041
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\make\xtensa_esp32_s3_riscv_cop.ld" />
10411042
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\make\xtensa_esp32_s3_riscv_cop_files.gmk" />
10421043
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\make\xtensa_esp32_s3_riscv_cop_flags.gmk" />
1043-
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\boot.S" />
1044-
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\IntVectTable.S" />
1044+
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup\boot.S" />
1045+
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup\IntVectTable.S" />
1046+
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Scripts\bin2asm.py" />
10451047
</ItemGroup>
10461048
<ItemGroup>
10471049
<ClCompile Include="target\micros\am335x\startup\crt0.cpp" />
@@ -1146,15 +1148,15 @@
11461148
<ClCompile Include="target\micros\xtensa_esp32_s3\startup\crt0_init_ram.cpp" />
11471149
<ClCompile Include="target\micros\xtensa_esp32_s3\startup\crt1.cpp" />
11481150
<ClCompile Include="target\micros\xtensa_esp32_s3\startup\Std\StdLib.cpp" />
1149-
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Appli\main.cpp" />
1150-
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\Startup.c" />
1151+
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Appli\main.cpp" />
1152+
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Mcal\Mcu.cpp" />
1153+
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup\Startup.c" />
11511154
</ItemGroup>
11521155
<ItemGroup>
11531156
<Text Include="target\micros\bcm2835_raspi_b\startup\SD_CARD\PiZero\config.txt" />
11541157
</ItemGroup>
11551158
<ItemGroup>
11561159
<ClInclude Include="target\micros\xtensa_esp32_s3\startup\Std\core-isa.h" />
1157-
<ClInclude Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\custom_ops.h" />
11581160
</ItemGroup>
11591161
<ItemGroup>
11601162
<Library Include="target\micros\xtensa_esp32_s3\startup\Std\lib_call0_abi\libc_call0_abi.a" />

ref_app/target.vcxproj.filters

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -292,12 +292,21 @@
292292
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk">
293293
<UniqueIdentifier>{bb1fed00-c4cd-4e52-833d-16cf0f69bc10}</UniqueIdentifier>
294294
</Filter>
295-
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup">
296-
<UniqueIdentifier>{66ae9aa3-915d-4366-9492-87cdb30add93}</UniqueIdentifier>
295+
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code">
296+
<UniqueIdentifier>{de099968-fa17-4f75-b098-50ed5325d04f}</UniqueIdentifier>
297297
</Filter>
298-
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Appli">
298+
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Appli">
299299
<UniqueIdentifier>{7b9aadde-8fde-47da-bd4b-d348e1b2778d}</UniqueIdentifier>
300300
</Filter>
301+
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Mcal">
302+
<UniqueIdentifier>{fbf8a8a1-b81b-418d-b1b2-9f8d5724180d}</UniqueIdentifier>
303+
</Filter>
304+
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup">
305+
<UniqueIdentifier>{66ae9aa3-915d-4366-9492-87cdb30add93}</UniqueIdentifier>
306+
</Filter>
307+
<Filter Include="micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Scripts">
308+
<UniqueIdentifier>{1a0b187b-0ef0-4365-b263-303097393b67}</UniqueIdentifier>
309+
</Filter>
301310
</ItemGroup>
302311
<ItemGroup>
303312
<None Include="target\app\make\app_files.gmk">
@@ -678,11 +687,17 @@
678687
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\make\xtensa_esp32_s3_riscv_cop_flags.gmk">
679688
<Filter>micros\xtensa_esp32_s3_riscv_cop\make</Filter>
680689
</None>
681-
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\boot.S">
682-
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup</Filter>
690+
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup\IntVectTable.S">
691+
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup</Filter>
683692
</None>
684-
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\IntVectTable.S">
685-
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup</Filter>
693+
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup\boot.S">
694+
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup</Filter>
695+
</None>
696+
<None Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Scripts\bin2asm.py">
697+
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Scripts</Filter>
698+
</None>
699+
<None Include="target\micros\xtensa_esp32_s3\startup\coprocessor_binary.S">
700+
<Filter>micros\xtensa_esp32_s3\startup</Filter>
686701
</None>
687702
</ItemGroup>
688703
<ItemGroup>
@@ -992,11 +1007,14 @@
9921007
<ClCompile Include="target\micros\xtensa_esp32_s3\startup\Std\StdLib.cpp">
9931008
<Filter>micros\xtensa_esp32_s3\startup\Std</Filter>
9941009
</ClCompile>
995-
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\Startup.c">
996-
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup</Filter>
1010+
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Mcal\Mcu.cpp">
1011+
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Mcal</Filter>
9971012
</ClCompile>
998-
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Appli\main.cpp">
999-
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Appli</Filter>
1013+
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup\Startup.c">
1014+
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Startup</Filter>
1015+
</ClCompile>
1016+
<ClCompile Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Appli\main.cpp">
1017+
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Code\Appli</Filter>
10001018
</ClCompile>
10011019
</ItemGroup>
10021020
<ItemGroup>
@@ -1008,9 +1026,6 @@
10081026
<ClInclude Include="target\micros\xtensa_esp32_s3\startup\Std\core-isa.h">
10091027
<Filter>micros\xtensa_esp32_s3\startup\Std</Filter>
10101028
</ClInclude>
1011-
<ClInclude Include="target\micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup\custom_ops.h">
1012-
<Filter>micros\xtensa_esp32_s3_riscv_cop\startup\from_no_sdk\Startup</Filter>
1013-
</ClInclude>
10141029
</ItemGroup>
10151030
<ItemGroup>
10161031
<Library Include="target\micros\xtensa_esp32_s3\startup\Std\lib_call0_abi\libc_call0_abi.a">

ref_app/target/micros/xtensa_esp32_s3/make/xtensa_esp32_s3.ld

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ SECTIONS
126126
PROVIDE(__CORE1_STACK_TOP = .) ;
127127
} > D_SRAM
128128

129+
. = 0x50000000;
130+
129131
.ulp :
130132
{
131133
*(.coprocessor*)

ref_app/target/micros/xtensa_esp32_s3/make/xtensa_esp32_s3_files.gmk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
FILES_TGT := $(PATH_APP)/mcal/mcal_gcc_cxx_completion \
1313
$(PATH_TGT)/startup/boot \
14+
$(PATH_TGT)/startup/coprocessor_binary \
1415
$(PATH_TGT)/startup/crt0 \
1516
$(PATH_TGT)/startup/crt0_init_ram \
1617
$(PATH_TGT)/startup/crt1 \

ref_app/target/micros/xtensa_esp32_s3/make/xtensa_esp32_s3_flags.gmk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ GCC_PREFIX = xtensa-esp32s3-elf
1616
TGT_SUFFIX = elf
1717

1818
WARN_FLAGS := -Wall \
19+
-Wextra \
1920
-Wpointer-arith \
2021
-Wno-maybe-uninitialized \
2122
-Wno-unused-function \
@@ -64,7 +65,6 @@ TGT_AFLAGS =
6465
TGT_LDFLAGS = -nostartfiles \
6566
-nostdlib \
6667
-L$(PATH_TGT)/startup/Std/lib_call0_abi \
67-
-Wl,--gc-sections \
6868
-Wl,-Map,$(APP).map \
6969
-T $(LINKER_DEFINITION_FILE) \
7070
--specs=nano.specs \

ref_app/target/micros/xtensa_esp32_s3/startup/Std/StdLib.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
//
77

88
// Originally from:
9-
109
/******************************************************************************************
1110
Filename : StdLib.c
1211

0 commit comments

Comments
 (0)