read CLK and DATA early.

This commit is contained in:
Martin Preuss
2025-07-20 23:15:22 +02:00
parent d0b5f84316
commit 1091ec1dee

View File

@@ -181,6 +181,7 @@ com2w0DataSetLow:
; ---------------------------------------------------------------------------
; @routine com2w0ReadNextBit
;
; @param r17 data from COM_DATAn_INPUT
; @clobbers r16, r17, r18, r20, r22
com2w0ReadNextBit:
@@ -188,7 +189,6 @@ com2w0ReadNextBit:
; rcall com2w0WaitForClockHighMulti5Us ; (R20, R22)
; brcc com2w0ReadNextBit_end
; clock is high now, read bit
inr r17, COM_DATA0_INPUT
; reset read timer (for leaving skipping mode)
clr r16
std Y+NET_IFACE_OFFS_READTIMER, r16
@@ -566,8 +566,11 @@ COM2W0_ClkChangeIsr:
push r15
in r15, SREG
push r16
inr r16, COM_CLK0_INPUT ; read clk state early
rcall COM2W0_HandleClockInterrupt
push r17
inr r16, COM_CLK0_INPUT ; read clk state early
inr r17, COM_DATA0_INPUT ; read data state early
rcall COM2W0_HandleClockInterrupt
pop r17
pop r16
out SREG, r15
pop r15
@@ -580,6 +583,7 @@ COM2W0_ClkChangeIsr:
; @routine COM2W0_HandleClockInterrupt @global
;
; @param r16 data from COM_CLKn_INPUT
; @param r17 data from COM_DATAn_INPUT
; @clobbers none
COM2W0_HandleClockInterrupt:
@@ -609,20 +613,30 @@ COM2W0_HandleClockInterrupt:
; @routine com2w0ActOnClock
;
; @param r16 data from COM_CLKn_INPUT
; @param r17 data from COM_DATAn_INPUT
; @clobbers r16 (r17, r18, X)
com2w0ActOnClock:
andi r16, (1<<COM_CLK0_PIN)
brne com2w0ActOnClock_clockHigh
; clock low
ldd r17, Y+COM2W_IFACE_OFFS_MODE
cpi r17, COM2W_MODE_IDLE
brne com2w0ActOnClock_end
ldd r18, Y+COM2W_IFACE_OFFS_MODE
cpi r18, COM2W_MODE_IDLE
breq com2w0ActOnClock_startReading
cpi r18, COM2W_MODE_SKIPPING
breq com2w0ActOnClock_skipping
rjmp com2w0ActOnClock_end
com2w0ActOnClock_skipping:
; ldd r18, Y+COM2W_IFACE_OFFS_MODECOUNTER
; cpi r18, COM2W_SKIPPING_MAXMODECOUNTER
; brcc com2w0ActOnClock_startReading
rjmp com2w0ActOnClock_end
com2w0ActOnClock_startReading:
rcall com2wStartReading ; (r16, r17, X)
rjmp com2w0ActOnClock_end
com2w0ActOnClock_clockHigh:
ldd r17, Y+COM2W_IFACE_OFFS_MODE
cpi r17, COM2W_MODE_READING
ldd r18, Y+COM2W_IFACE_OFFS_MODE
cpi r18, COM2W_MODE_READING
brne com2w0ActOnClock_end
push r20