avr: updated uartfd0 (copied from uartfd1)

This commit is contained in:
Martin Preuss
2025-09-06 00:42:49 +02:00
parent 81598881d1
commit 2d15091b0c

View File

@@ -12,9 +12,10 @@
.dseg
uartFd0_iface: .bytes UARTFD_IFACE_SIZE
uartFd0_iface: .byte UARTFD_IFACE_SIZE
@@ -34,13 +35,16 @@ UARTFD0_Init:
std Y+UARTFD_IFACE_OFFS_WBUFNUM, r16
clr r16
std Y+UARTFD_IFACE_OFFS_WBUFLEFT, r16
std Y+UARTFD_IFACE_OFFS_RBUFUSED, r16
std Y+UARTFD_IFACE_OFFS_RBUFLEFT, r16
std Y+UARTFD_IFACE_OFFS_STATUS, r16
M_UARTFD_SET_BAUDRATE 0
M_UARTFD_SET_CHARFORMAT 0
; always receive!
rcall uartFd0StartReading
rcall uartFd0StartRx
ret
@@ -73,11 +77,20 @@ UARTFD0_Run:
ldi yh, HIGH(uartFd0_iface)
clr r22
rcall uartFd0RunRead ; (r16, r17, r18, r19, r20, r24, r25, X, Z)
sbci r22, 0
push r15
in r15, SREG
cli ; disable irqs
rcall uartFd0RunRead ; (r16, r17, r18, r19, r20, r24, r25, X, Z)
sbci r22, 0
out SREG, r15 ; probably enable irqs
cli ; disable irqs
rcall uartFd0RunWrite ; (r16, r17, r18, r19, r24, r25, X)
sbci r22, 0
rcall uartFd0RunWrite ; (r16, r17, r18, r19, r24, r25, X)
sbci r22, 0
out SREG, r15 ; probably enable irqs
pop r15
tst r22
clc
@@ -202,7 +215,8 @@ uartFd0RunRead:
rcall uartFd0CheckOverrun ; (r16, r24, r25)
rcall uartFd0CheckHwErr ; (r16, r24, r25)
rcall uartFd0CheckBadMsgSize ; (r16, r24, r25)
rcall uartFd0CheckSkipping ; (R16, X)
rcall uartFd0CheckSkipping ; (r16, X)
rcall uartFd0SetSkippingSignal ; (r16, r17)
; clear error flags
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
@@ -218,17 +232,41 @@ uartFd0RunRead:
; ---------------------------------------------------------------------------
; @routine uartFd0SetSkippingSignal
;
; @param Y pointer to interface data in SRAM
; @clobbers r16 (r17)
uartFd0SetSkippingSignal:
#ifdef MODULES_LED_SIGNAL
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
andi r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
brne uartFd0SetSkippingSignal_skipping
ldi r16, T03_FLAGS_I1_SKIPPING
rcall LedSignal_ClrFlag ; (r17)
rjmp uartFd0SetSkippingSignal_ret
uartFd0SetSkippingSignal_skipping:
ldi r16, T03_FLAGS_I1_SKIPPING
rcall LedSignal_SetFlag ; (r17)
#endif
uartFd0SetSkippingSignal_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine uartFd0CheckSkipping
;
; @param Y pointer to interface data in SRAM
; @return CFLAG set if something done
; @clobbers r16 (X)
uartFd0CheckSkipping:
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
andi r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
breq uartFd0CheckSkipping_ret
ldd r16, Y+NET_IFACE_OFFS_READTIMER
cpi r16, UARTFD_SKIPPING_TIME
brcs uartFd0CheckSkipping_ret
@@ -239,6 +277,7 @@ uartFd0CheckSkipping:
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
cbr r16, (1<<UARTFD_IFACE_STATUS_BIT_SKIPPING)
std Y+UARTFD_IFACE_OFFS_STATUS, r16
rcall uartFd0RestartReading ; (R16, X)
out SREG, r15
pop r15
@@ -384,6 +423,19 @@ uartFd0RestartReading:
ldd r16, Y+UARTFD_IFACE_OFFS_STATUS
cbr r16, (1<<UARTFD_IFACE_STATUS_BIT_OVERRUN) | (1<<UARTFD_IFACE_STATUS_BIT_HWERR) | (1<<UARTFD_IFACE_STATUS_BIT_BADMSGSIZE)
std Y+UARTFD_IFACE_OFFS_STATUS, r16
push r15
in r15, SREG
cli ; disable irqs
M_UARTFD_FLUSH_IN 0
out SREG, r15 ; probably enable irqs
pop r15
; rcall uartFd0StopRx
; nop
; rcall uartFd0StartRx
ret
; @end
@@ -396,14 +448,17 @@ uartFd0RestartReading:
; @clobbers r16, r17, r18, X, Z (r19, r20, r24, r25)
uartFd0FinishReading:
; check message
mov xl, yl
mov xh, yh
adiw xh:xl, UARTFD_IFACE_OFFS_RBUFFER
rcall NETMSG_CheckMessageInBuffer ; (R16, R17, R18, R19, R20, X)
brcc uartFd0FinishReading_errorCrc
; allocate buffer for storage
rcall NET_Buffer_Alloc ; R16=number, X=ptr (R16, R17, X)
brcc uartFd0FinishReading_errorMem
ldd r18, Y+NET_IFACE_OFFS_IFACENUM
andi r18, 0x0f
ld r17, X
andi r17, 0xf0
or r17, r18
@@ -418,11 +473,15 @@ uartFd0FinishReading_copyLoop:
st X+, r18
dec r17
brne uartFd0FinishReading_copyLoop
; add new buffer to incoming list
rcall NET_AddIncomingMsgNum
brcs uartFd0FinishReading_msgSaved
rcall NET_Buffer_ReleaseByNum ; (R16, X)
rjmp uartFd0FinishReading_errorMem
uartFd0FinishReading_msgSaved:
#ifdef MODULES_LED_ACTIVITY
rcall LedActivity_Trigger ; (r16)
#endif
ldi r16, NET_IFACE_OFFS_PACKETSIN_LOW
rjmp uartFd0FinishReading_incCounter
uartFd0FinishReading_errorCrc:
@@ -542,7 +601,8 @@ uartFd0StartTx:
; @clobbers R16
uartFd0StopTx:
M_UARTFD_STOP_TX 0
; M_UARTFD_STOP_TX 0
M_UARTFD_STOP_TXIRQS 0
ret
; @end
@@ -682,6 +742,3 @@ UARTFD0_TxCharIsr:
#endif