From 3e2900dcc87434b11d153f66146671d71f2999b8 Mon Sep 17 00:00:00 2001 From: tmk Date: Sat, 11 Jan 2020 16:32:46 +0900 Subject: [PATCH] ibmpc: Read data line earlier in ISR as possible --- tmk_core/protocol/ibmpc.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tmk_core/protocol/ibmpc.c b/tmk_core/protocol/ibmpc.c index e65ac461..ab446caa 100644 --- a/tmk_core/protocol/ibmpc.c +++ b/tmk_core/protocol/ibmpc.c @@ -172,10 +172,7 @@ ISR(IBMPC_INT_VECT) static uint8_t data = 0; static uint8_t parity = 1; - // return unless falling edge - if (clock_in()) { - return; - } + uint8_t dbit = IBMPC_DATA_PIN&(1< 10) { @@ -190,9 +187,9 @@ ISR(IBMPC_INT_VECT) case START: if (ibmpc_protocol == IBMPC_PROTOCOL_XT) { // ignore start(0) bit - if (!data_in()) return; + if (!dbit) return; } else { - if (data_in()) + if (dbit) goto ERROR; } case BIT0: @@ -204,7 +201,7 @@ ISR(IBMPC_INT_VECT) case BIT6: case BIT7: data >>= 1; - if (data_in()) { + if (dbit) { data |= 0x80; parity++; } @@ -218,7 +215,7 @@ ISR(IBMPC_INT_VECT) } break; case PARITY: - if (data_in()) { + if (dbit) { if (!(parity & 0x01)) goto ERROR; } else { @@ -227,7 +224,7 @@ ISR(IBMPC_INT_VECT) } break; case STOP: - if (!data_in()) + if (!dbit) goto ERROR; if (!ringbuf_put(&rb, data)) { ibmpc_error = IBMPC_ERR_FULL; -- 2.46.2