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