probe: use a more generic method for direction changes
diff --git a/src/probe.c b/src/probe.c index 2c46a5c..0ec32be 100644 --- a/src/probe.c +++ b/src/probe.c
@@ -129,12 +129,12 @@ void probe_read_mode(void) { pio_sm_exec(pio0, PROBE_SM, pio_encode_jmp(probe.offset + probe_offset_in_posedge)); - while(pio0->dbg_padoe & (1 << PROBE_PIN_SWDIO)); + while(pio_sm_get_pc(pio0, PROBE_SM) != probe.offset + probe_offset_in_idle); } void probe_write_mode(void) { pio_sm_exec(pio0, PROBE_SM, pio_encode_jmp(probe.offset + probe_offset_out_negedge)); - while(!(pio0->dbg_padoe & (1 << PROBE_PIN_SWDIO))); + while(pio_sm_get_pc(pio0, PROBE_SM) != probe.offset + probe_offset_out_idle); } void probe_gpio_init()
diff --git a/src/probe.pio b/src/probe.pio index 4a242ba..e8e8683 100644 --- a/src/probe.pio +++ b/src/probe.pio
@@ -28,6 +28,7 @@ public out_negedge: set pindirs, 1 side 0x0 ; Init OE clock 0 +public out_idle: pull ; Pull number of bits to shift -1 from tx fifo and put into output shift register mov x, osr ; mov bits to shift -1 from output shift register into x pull ; Pull data to shift out @@ -40,6 +41,7 @@ public in_posedge: set pindirs, 0 side 0x0 ; INIT IE clock 0 +public in_idle: pull ; Pull number of bits to shift -1 from tx fifo and put into output shift register mov x, osr ; mov bits to shift -1 from output shift register into x into x in_posedge_bitloop: