receiving works again.
This commit is contained in:
@@ -134,28 +134,40 @@ uartBitbang_SendByte_loopEnd:
|
|||||||
;
|
;
|
||||||
; @return CFLAG set if okay, clear otherwise
|
; @return CFLAG set if okay, clear otherwise
|
||||||
; @return R16 byte received
|
; @return R16 byte received
|
||||||
; @clobbers R16, R20, R21, R22 (R17)
|
; @clobbers R16, R17, R20, R21, R22
|
||||||
|
|
||||||
uartBitbang_ReceiveByte:
|
uartBitbang_ReceiveByte:
|
||||||
cbi COM_DATA_DDR, COM_DATA_PIN ; set DATA port as input
|
cbi COM_DATA_DDR, COM_DATA_PIN ; set DATA port as input
|
||||||
cbi COM_DATA_OUTPUT, COM_DATA_PIN ; disable internal pullup for RXD
|
cbi COM_DATA_OUTPUT, COM_DATA_PIN ; disable internal pullup for RXD
|
||||||
ldi r21, 8 ; bits left
|
ldi r21, 8 ; bits left
|
||||||
clr r20 ; byte currently receiving
|
clr r20 ; byte currently receiving
|
||||||
|
|
||||||
; wait for startbit
|
; wait for startbit
|
||||||
rcall uartBitbang_WaitForDataLow ; (R17, R22)
|
ldi r16, 10
|
||||||
brcc uartBitbang_ReceiveByte_error
|
uartBitbang_ReceiveByte_loopStartBit1:
|
||||||
Utils_WaitNanoSecs COM_HALFBIT_LENGTH, 10, r22 ; goto middle of startbit to maximize sync stability
|
ldi r17, 100 ; wait for 100us
|
||||||
|
uartBitbang_ReceiveByte_loopStartBit2:
|
||||||
|
sbis COM_DATA_INPUT, COM_DATA_PIN
|
||||||
|
rjmp uartBitbang_ReceiveByte_gotStartBit
|
||||||
|
Utils_WaitNanoSecs 1000, 0, r22 ; wait for 1us
|
||||||
|
dec r17
|
||||||
|
brne uartBitbang_ReceiveByte_loopStartBit2
|
||||||
|
dec r16
|
||||||
|
brne uartBitbang_ReceiveByte_loopStartBit1
|
||||||
|
rjmp uartBitbang_ReceiveByte_error
|
||||||
|
uartBitbang_ReceiveByte_gotStartBit:
|
||||||
|
Utils_WaitNanoSecs COM_HALFBIT_LENGTH, 0, r22 ; goto middle of startbit to maximize sync stability (4)
|
||||||
uartBitbang_ReceiveByte_loop:
|
uartBitbang_ReceiveByte_loop:
|
||||||
Utils_WaitNanoSecs COM_BIT_LENGTH, 8, r22 ; 8 cycles used in the complete loop between waits
|
Utils_WaitNanoSecs COM_BIT_LENGTH, 8, r22 ; 8 cycles used in the complete loop between waits
|
||||||
sec ; +1
|
sec ; +1
|
||||||
sbic COM_DATA_INPUT, COM_DATA_PIN ; LOW: +2, HIGH: +1
|
sbic COM_DATA_INPUT, COM_DATA_PIN ; LOW: +2, HIGH: +1
|
||||||
rjmp uartBitbang_ReceiveByte_shiftIn ; HIGH: +2, rjmp, use set CFLAG
|
rjmp uartBitbang_ReceiveByte_shiftIn ; HIGH: +2, rjmp, use set CFLAG
|
||||||
clc ; LOW: +1
|
clc ; LOW: +1
|
||||||
uartBitbang_ReceiveByte_shiftIn:
|
uartBitbang_ReceiveByte_shiftIn:
|
||||||
ror r20 ; +1
|
ror r20 ; +1
|
||||||
dec r21 ; +1
|
dec r21 ; +1
|
||||||
brne uartBitbang_ReceiveByte_loop ; +2, sum per loop: 8 cycles
|
brne uartBitbang_ReceiveByte_loop ; +2, sum per loop: 8 cycles
|
||||||
rcall uartBitbang_WaitForDataHigh ; wait for start of stopbit
|
rcall uartBitbang_WaitForDataHigh ; wait for start of stopbit
|
||||||
brcc uartBitbang_ReceiveByte_error
|
brcc uartBitbang_ReceiveByte_error
|
||||||
mov r16, r20
|
mov r16, r20
|
||||||
sec
|
sec
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ uartBitbang_RawReceiveMsg:
|
|||||||
breq uartBitbang_RawReceiveMsg_forMe
|
breq uartBitbang_RawReceiveMsg_forMe
|
||||||
cpi r16, 0xff
|
cpi r16, 0xff
|
||||||
breq uartBitbang_RawReceiveMsg_forMe
|
breq uartBitbang_RawReceiveMsg_forMe
|
||||||
clr r16
|
clr r16 ; not for me
|
||||||
rjmp uartBitbang_RawReceiveMsg_clcRet
|
rjmp uartBitbang_RawReceiveMsg_clcRet
|
||||||
uartBitbang_RawReceiveMsg_forMe:
|
uartBitbang_RawReceiveMsg_forMe:
|
||||||
subi r19, 1
|
subi r19, 1
|
||||||
@@ -87,10 +87,10 @@ uartBitbang_RawReceiveMsg_forMe:
|
|||||||
; read size of msg payload (e.g. number of msg bytes following minus CRC byte)
|
; read size of msg payload (e.g. number of msg bytes following minus CRC byte)
|
||||||
rcall uartBitbang_ReceiveByte ; read byte (R16, R17, R20, R21, R22)
|
rcall uartBitbang_ReceiveByte ; read byte (R16, R17, R20, R21, R22)
|
||||||
brcc uartBitbang_RawReceiveMsg_eIo
|
brcc uartBitbang_RawReceiveMsg_eIo
|
||||||
inc r16 ; account for crc byte
|
|
||||||
subi r19, 1
|
subi r19, 1
|
||||||
brcs uartBitbang_RawReceiveMsg_eBadSize
|
brcs uartBitbang_RawReceiveMsg_eBadSize
|
||||||
st X+, r16 ; store msg payload size
|
st X+, r16 ; store msg payload size
|
||||||
|
inc r16 ; account for crc byte
|
||||||
sub r19, r16 ; check msg size against remaining buffer size
|
sub r19, r16 ; check msg size against remaining buffer size
|
||||||
brcs uartBitbang_RawReceiveMsg_eBadSize
|
brcs uartBitbang_RawReceiveMsg_eBadSize
|
||||||
mov r19, r16
|
mov r19, r16
|
||||||
|
|||||||
Reference in New Issue
Block a user