adapt com2w1 from com2w0 (the latter is proven to work now).
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user