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