9#if defined(ARDUINO_ARCH_RP2040)
11# include <hardware/pio.h>
24 inline std::map<const pio_program_t*, int>* GetPioInstructionMemory()
26 static std::map<const pio_program_t*, int> memory[2];
56 inline Udon::Optional<StateMachine> AllocateStateMachine(
const pio_program& program)
58 PIO pios[] = { pio0, pio1 };
59 auto memory = Impl::GetPioInstructionMemory();
62 for (
int i = 0; i < 2; i++)
64 auto p = memory[i].find(&program);
65 if (p == memory[i].end())
70 const int index = pio_claim_unused_sm(pios[i],
false);
76 return StateMachine{ pios[i], index, p->second };
80 for (
int i = 0; i < 2; i++)
82 if (pio_can_add_program(pios[i], &program))
84 const int index = pio_claim_unused_sm(pios[i],
false);
90 const int offset = pio_add_program(pios[i], &program);
93 memory[i].insert({ &program, offset });
95 return StateMachine{ pios[i], index, offset };
104 inline void FreeStateMachine(
const StateMachine& sm)
106 pio_sm_unclaim(sm.pio, sm.index);
111 inline void ShowStateMachineInfo(
const StateMachine& sm)
115 Serial.print(
"pio0");
117 else if (sm.pio == pio1)
119 Serial.print(
"pio1");
123 Serial.print(
"pio?");
127 Serial.print(
" sm = ");
128 Serial.print(sm.index);
130 Serial.print(
" offset = ");
131 Serial.print(sm.offset);
Definition QuadratureEncoder.pio.hpp:18
constexpr NulloptT nullopt
無効値
Definition Optional.hpp:52