Update NeoRp2040PioMonoProgram.h (#873)

This commit is contained in:
Michael Miller
2025-01-20 10:04:22 -08:00
committed by GitHub
parent 3dabc2ee82
commit 59a98027cb

View File

@@ -164,12 +164,13 @@ class NeoRp2040PioMonoProgram
public: public:
static inline uint add(PIO pio_instance) static inline uint add(PIO pio_instance)
{ {
if (s_loadedOffset == c_ProgramNotLoaded) size_t index = (pio_instance == pio0) ? 0 : 1;
if (s_loadedOffset[index] == c_ProgramNotLoaded)
{ {
assert(pio_can_add_program(pio_instance, &T_CADENCE::program)); assert(pio_can_add_program(pio_instance, &T_CADENCE::program));
s_loadedOffset = pio_add_program(pio_instance, &T_CADENCE::program); s_loadedOffset[index] = pio_add_program(pio_instance, &T_CADENCE::program);
} }
return s_loadedOffset; return s_loadedOffset[index];
} }
static inline void init(PIO pio_instance, static inline void init(PIO pio_instance,
@@ -202,10 +203,10 @@ public:
} }
private: private:
static uint s_loadedOffset; // singlet instance of loaded program static uint s_loadedOffset[2]; // singlet instance of loaded program, one for each PIO hardware unit
}; };
template<typename T_CADENCE> template<typename T_CADENCE>
uint NeoRp2040PioMonoProgram<T_CADENCE>::s_loadedOffset = c_ProgramNotLoaded; uint NeoRp2040PioMonoProgram<T_CADENCE>::s_loadedOffset[] = {c_ProgramNotLoaded, c_ProgramNotLoaded};
#endif #endif