18#include "multicore_rp2350.h"
26std::function<void(
void)> multicore_rp2350::_f;
28void multicore_rp2350::fifo_push_blocking(uint32_t val) {
29 while(SIO.FIFO_ST.RDY != 1) ;
34uint32_t multicore_rp2350::fifo_pop_blocking() {
35 while(SIO.FIFO_ST.VLD != 1) ;
39uint32_t multicore_rp2350::fifo_drain() {
41 while(SIO.FIFO_ST.VLD) val = SIO.FIFO_RD;
45void multicore_rp2350::start_on_core1(
46 std::function<
void(
void)> func,
48 uint32_t * vec_table) {
52 if (stack ==
nullptr) {
53 extern uint32_t __StackYTop;
54 stack = (uint8_t *)&__StackYTop;
57 if (vec_table ==
nullptr) {
58 vec_table = (uint32_t *)PPB.VTOR.value;
61 std::array<uint32_t, 6> cmd_sequence = {
73 uint32_t cmd = cmd_sequence[seq];
80 fifo_push_blocking(cmd);
81 uint32_t response = fifo_pop_blocking();
84 seq = cmd == response ? seq + 1 : 0;
100void multicore_rp2350::reset_core1() {
103 PSM_SET.FRCE_OFF.PROC1 = 1;
105 while (!PSM.FRCE_OFF.PROC1) ;
107 PSM_CLR.FRCE_OFF.PROC1 = 1;
109 uint32_t value = fifo_pop_blocking();
117void multicore_rp2350::_run() {