diff --git a/composite/iso7816_tx.pio b/composite/iso7816_tx.pio index ea616b4..0f57960 100644 --- a/composite/iso7816_tx.pio +++ b/composite/iso7816_tx.pio @@ -94,14 +94,17 @@ static inline void iso7816_tx_program_puts(PIO pio, uint sm, const uint8_t *s, s static inline bool iso7816_tx_is_idle(PIO pio, uint sm) { + uint32_t flag = (1 << (PIO_FDEBUG_TXSTALL_LSB + sm)); + /* how do we know once the PIO unit has completed tx of a character? - state machine TX fifo must be empty (FSTAT:TXEMPTY), AND - FDEBUG:TXSTALL bit must be set */ /* clear the sticky STALL flag */ - pio->fdebug |= (sm << 24); - if (pio->fstat & (sm << 24) && pio->fdebug & (sm << 24)) + pio->fdebug |= flag; + + if (pio_sm_is_tx_fifo_empty(pio, sm) && pio->fdebug & flag) return true; else return false;