adapt com2w1 from com2w0 (the latter is proven to work now).

This commit is contained in:
Martin Preuss
2025-07-20 00:15:13 +02:00
parent ae1e4c3e37
commit d0b5f84316

View File

@@ -184,9 +184,9 @@ com2w1DataSetLow:
; @clobbers r16, r17, r18, r20, r22
com2w1ReadNextBit:
ldi r20, 50 ; wait for up to 250us for clock rise
rcall com2w1WaitForClockHighMulti5Us ; (R20, R22)
brcc com2w1ReadNextBit_end
; ldi r20, 50 ; wait for up to 250us for clock rise
; rcall com2w1WaitForClockHighMulti5Us ; (R20, R22)
; brcc com2w1ReadNextBit_end
; clock is high now, read bit
inr r17, COM_DATA1_INPUT
; reset read timer (for leaving skipping mode)
@@ -306,7 +306,7 @@ com2w1WaitForClockLowMulti5Us_stateReached:
com2w1SendMsg:
ldi r20, 11 ; wait for about 55us for clock low
rcall com2w1WaitForClockLowMulti5Us
rcall com2w1WaitForClockLowMulti5Us ; (R20, R22)
brcs com2w1SendMsg_busy ; CLK got low while waiting, so line is busy
push r15
in r15, SREG
@@ -443,7 +443,7 @@ com2w1ModeJumpTable:
; @clobbers R16, R17, R22, R24, R25, X
com2w1RunIdle:
rjmp com2w1RunIdle_end ; DEBUG
;rjmp com2w1RunIdle_end ; DEBUG
push r15
in r15, SREG
cli
@@ -468,7 +468,7 @@ com2w1RunIdle_haveMsg:
adiw xh:xl, 1
rcall com2w1SendMsg ; (R16, R17, R22, R24, R25, X)
push r15
inr r15, SREG ; save SREG (no CLI, we want to save CFLAG only)
in r15, SREG ; save SREG (no CLI, we want to save CFLAG only)
ldi r16, COM2W_MODE_IDLE
rcall com2wSetMode ; (R17)
out SREG, r15 ; restore SREG
@@ -613,19 +613,24 @@ COM2W1_HandleClockInterrupt:
com2w1ActOnClock:
andi r16, (1<<COM_CLK1_PIN)
brne com2w1ActOnClock_end
brne com2w1ActOnClock_clockHigh
; clock low
ldd r17, Y+COM2W_IFACE_OFFS_MODE
cpi r17, COM2W_MODE_READING
breq com2w1ActOnClock_readBit
cpi r17, COM2W_MODE_IDLE
brne com2w1ActOnClock_end
rcall com2wStartReading ; (r16, r17, X)
com2w1ActOnClock_readBit:
rjmp com2w1ActOnClock_end
com2w1ActOnClock_clockHigh:
ldd r17, Y+COM2W_IFACE_OFFS_MODE
cpi r17, COM2W_MODE_READING
brne com2w1ActOnClock_end
push r20
push r22
rcall com2w1ReadNextBit ; (r16, r17, r18, r20, r22)
pop r22
pop r20
com2w1ActOnClock_end:
ret
; @end