18#include "multicore_rp2040.h"
25#pragma GCC push_options
26#pragma GCC optimize("O0")
29std::function<void(
void)> multicore_rp2040::_f;
31void multicore_rp2040::fifo_push_blocking(uint32_t val) {
32 while(SIO.FIFO_ST.RDY != 1) ;
37uint32_t multicore_rp2040::fifo_pop_blocking() {
38 while(SIO.FIFO_ST.VLD != 1) ;
42uint32_t multicore_rp2040::fifo_drain() {
44 while(SIO.FIFO_ST.VLD) val = SIO.FIFO_RD;
48void multicore_rp2040::start_on_core1(
49 std::function<
void(
void)> func,
51 uint32_t * vec_table) {
55 if (stack ==
nullptr) {
56 extern uint32_t __StackYTop;
57 stack = (uint8_t *)&__StackYTop;
60 if (vec_table ==
nullptr) {
61 vec_table = (uint32_t *)PPB.VTOR.value;
64 std::array<uint32_t, 6> cmd_sequence = {
76 uint32_t cmd = cmd_sequence[seq];
83 fifo_push_blocking(cmd);
84 uint32_t response = fifo_pop_blocking();
87 seq = (cmd == response) ? seq + 1 : 0;
88 }
while (seq < cmd_sequence.size());
103void multicore_rp2040::reset_core1() {
106 PSM_SET.FRCE_OFF.proc1 = 1;
108 while (!PSM.FRCE_OFF.proc1) ;
110 PSM_CLR.FRCE_OFF.proc1 = 1;
112 uint32_t value = fifo_pop_blocking();
120void multicore_rp2040::_run() {
125#pragma GCC pop_options
CMSIS-Core(M) Device Peripheral Access Layer Header File for Device RP2040.