avr/uart_hw: basically works for a while then stops...

This commit is contained in:
Martin Preuss
2025-03-21 20:55:50 +01:00
parent 2964347e7b
commit 373a553ac8
14 changed files with 685 additions and 122 deletions

View File

@@ -188,27 +188,14 @@ l_storeChar_%:
brcc l_econtent_% ; content error (msg too long)
subi r16, 2 ; subtract bytes already received
std Y+UART_HW_IFACE_OFFS_READBUFLEFT, r16 ; set new number of bytes left
brne l_end_% ; jmp if still bytes left to received
brne l_end_% ; jmp if still bytes left to receive
l_msgFinished_%:
ldd r16, Y+UART_HW_IFACE_OFFS_READBUFNUM
rcall NET_AddIncomingMsgNum ; (R17, R18, X)
brcs l_msgStored_%
; msg complete but could not store
rcall NET_Buffer_Locate
rcall UART_HW_Interface_SetReadBuffer ; reset/reuse current buffer
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
ldi r17, UART_HW_READMODE_READING
rjmp l_incCounterAndEnterMode_%
l_msgStored_%:
ldi r16, NET_IFACE_OFFS_PACKETSIN_LOW
ldi r17, UART_HW_READMODE_MSGRECEIVED
rjmp l_incCounterAndEnterMode_%
l_hwerr_%:
ldi r16, NET_IFACE_OFFS_ERR_IO_LOW
rcall NET_Interface_IncCounter16
ldi r16, UART_HW_READMODE_SKIPPING
std Y+UART_HW_IFACE_OFFS_READMODE, r16 ; set read mode
rjmp l_end_%
rjmp l_incCounterAndEnterSkipping_%
l_econtent_%:
ldi r16, NET_IFACE_OFFS_ERR_CONTENT_LOW
rjmp l_incCounterAndEnterSkipping_%
@@ -315,3 +302,38 @@ l_end_%:
; ---------------------------------------------------------------------------
; @macro M_UART_HW_Uart_SetAttnInput
;
; Set ATTN line as input (making it effectively HIGH due to pull-up resistor on
; the line)
;
; @clobbers none
.macro M_UART_HW_Uart_SetAttnInput
cbi COM_ATTN_DDR, COM_ATTN_PIN ; set ATTN as input
.ifdef COM_ATTN_PUE
.else
cbi COM_ATTN_PUE, COM_ATTN_PIN ; disable pullup on ATTN
.endif
cbi COM_ATTN_OUTPUT, COM_ATTN_PIN ; disable pullup on ATTN
.endmacro
; @end
; ---------------------------------------------------------------------------
; @macro M_UART_HW_Uart_SetAttnLow
;
; Set ATTN line low.
;
; @clobbers none
.macro M_UART_HW_Uart_SetAttnLow
sbi COM_ATTN_DDR, COM_ATTN_PIN ; set ATTN as output
cbi COM_ATTN_OUTPUT, COM_ATTN_PIN ; set ATTN low
.endmacro