avr: share code.

This commit is contained in:
Martin Preuss
2025-03-23 01:08:33 +01:00
parent 595f983071
commit ebce002614
6 changed files with 51 additions and 49 deletions

View File

@@ -1,5 +1,5 @@
; *************************************************************************** ; ***************************************************************************
; copyright : (C) 2024 by Martin Preuss ; copyright : (C) 2025 by Martin Preuss
; email : martin@libchipcard.de ; email : martin@libchipcard.de
; ;
; *************************************************************************** ; ***************************************************************************

View File

@@ -25,8 +25,9 @@
.equ clock=8000000 ; Define the clock frequency .equ clock=8000000 ; Define the clock frequency
;.equ SEND_DEVICE_EVERY = 3000 ;.equ SEND_DEVICE_EVERY = 3000
.equ SEND_DEVICE_EVERY = 520 ; every 52s .equ SEND_DEVICE_EVERY = 3000 ; every 5mins
.equ SEND_STATS_EVERY = 240 ; every 24s .equ SEND_STATS_EVERY = 3100 ; about every 5mins
;.equ SEND_STATS_EVERY = 300 ; every 30s
.equ SEND_DEBUG_EVERY = 110 .equ SEND_DEBUG_EVERY = 110
.nolist .nolist
@@ -73,11 +74,11 @@
;#define MODULES_MOTION ;#define MODULES_MOTION
.equ NET_BUFFERS_NUM = 6 .equ NET_BUFFERS_NUM = 8
.equ NET_BUFFERS_SIZE = 32 .equ NET_BUFFERS_SIZE = 32
.equ UART_HW_MSGNUMINBUF_SIZE = 6 .equ UART_HW_MSGNUMINBUF_SIZE = 8
.equ UART_HW_MSGNUMOUTBUF_SIZE = 6 .equ UART_HW_MSGNUMOUTBUF_SIZE = 8
; *************************************************************************** ; ***************************************************************************
@@ -499,21 +500,6 @@ checkRecvdMsg:
rcall NET_PeekNextIncomingMsgNum ; check read queue (bufNum->r16) rcall NET_PeekNextIncomingMsgNum ; check read queue (bufNum->r16)
brcc checkRecvdMsg_end ; no msg, jmp brcc checkRecvdMsg_end ; no msg, jmp
rcall NET_Buffer_Locate ; (R17) rcall NET_Buffer_Locate ; (R17)
push r16
push xl
push xh
adiw xh:xl, 1
rcall NETMSG_CheckMessageInBuffer ; (R16, R17, R18, R19, R20, X)
pop xh
pop xl
pop r16
brcs checkRecvdMsg_sendMsg
; release buffer
rcall NET_GetNextIncomingMsgNum ; take off the queue
rcall NET_Buffer_ReleaseByNum ; delete
clc
rjmp checkRecvdMsg_end
checkRecvdMsg_sendMsg:
ld r17, X ld r17, X
andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT) andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT)
rcall reverseInterfaceNum rcall reverseInterfaceNum

View File

@@ -20,11 +20,13 @@
; @clobbers R16, R17, X ; @clobbers R16, R17, X
NET_Init: NET_Init:
#if 0
ldi xh, HIGH(networkDataBegin) ldi xh, HIGH(networkDataBegin)
ldi xl, LOW(networkDataBegin) ldi xl, LOW(networkDataBegin)
clr r16 clr r16
ldi r17, (networkDataEnd-networkDataBegin) ldi r17, (networkDataEnd-networkDataBegin)
rcall Utils_FillSram ; (R17, X) rcall Utils_FillSram ; (R17, X)
#endif
rcall NET_Buffer_Init ; (R16, R17, X) rcall NET_Buffer_Init ; (R16, R17, X)

View File

@@ -512,19 +512,7 @@ comOnUart0RunSkipping_end:
; @clobbers R16 (R17, R18, R24, R25) ; @clobbers R16 (R17, R18, R24, R25)
comOnUart0RunMsgReceived: comOnUart0RunMsgReceived:
ldi r17, 0xff rjmp UART_HW_Interface_HandleMsgReceived
ldd r16, Y+UART_HW_IFACE_OFFS_READBUFNUM
std Y+UART_HW_IFACE_OFFS_READBUFNUM, r17
rcall NET_AddIncomingMsgNum ; (R17, R18, X)
brcs comOnUart0RunMsgReceived_enterIdle
; could not add msg
rcall NET_Buffer_ReleaseByNum ; (R16, X)
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
rcall NET_Interface_IncCounter16 ; (R24, R25)
comOnUart0RunMsgReceived_enterIdle:
ldi r17, UART_HW_READMODE_IDLE
std Y+UART_HW_IFACE_OFFS_READMODE, r17 ; set read mode
ret
; @end ; @end

View File

@@ -110,3 +110,43 @@ UART_HW_Interface_EnsureReadBuffer_noBuf:
; ---------------------------------------------------------------------------
; @routine UART_HW_Interface_HandleMsgReceived
;
; @param Y pointer to interface data in SRAM
; @clobbers R16 (R17, R18, R24, R25)
UART_HW_Interface_HandleMsgReceived:
; unset buffer
ldi r17, 0xff
ldd r16, Y+UART_HW_IFACE_OFFS_READBUFNUM
std Y+UART_HW_IFACE_OFFS_READBUFNUM, r17
cp r16, r17
breq UART_HW_Interface_HandleMsgReceived_enterIdle ; SNH!
; check checksum
rcall NET_Buffer_Locate ; (R17)
push r16
adiw xh:xl, 1
rcall NETMSG_CheckMessageInBuffer ; (R16, R17, R18, R19, R20, X)
pop r16
brcs UART_HW_Interface_HandleMsgReceived_addMsg
; invalid msg
rcall NET_Buffer_ReleaseByNum ; (R16, X)
ldi r16, NET_IFACE_OFFS_ERR_CONTENT_LOW
rjmp UART_HW_Interface_HandleMsgReceived_incCounterGoIdle
UART_HW_Interface_HandleMsgReceived_addMsg:
rcall NET_AddIncomingMsgNum ; (R17, R18, X)
brcs UART_HW_Interface_HandleMsgReceived_enterIdle
; could not add msg
rcall NET_Buffer_ReleaseByNum ; (R16, X)
ldi r16, NET_IFACE_OFFS_ERR_MISSED_LOW
UART_HW_Interface_HandleMsgReceived_incCounterGoIdle:
rcall NET_Interface_IncCounter16 ; (R24, R25)
UART_HW_Interface_HandleMsgReceived_enterIdle:
ldi r17, UART_HW_READMODE_IDLE
std Y+UART_HW_IFACE_OFFS_READMODE, r17 ; set read mode
ret
; @end

View File

@@ -395,21 +395,7 @@ ttyOnUart1RunSkipping_end:
; @clobbers R16 (R17, R18, R24, R25) ; @clobbers R16 (R17, R18, R24, R25)
ttyOnUart1RunMsgReceived: ttyOnUart1RunMsgReceived:
ldi r17, 0xff rjmp UART_HW_Interface_HandleMsgReceived
ldd r16, Y+UART_HW_IFACE_OFFS_READBUFNUM
cp r16, r17
breq comOnUart1RunMsgReceived_enterIdle
std Y+UART_HW_IFACE_OFFS_READBUFNUM, r17
rcall NET_AddIncomingMsgNum ; (R17, R18, X)
brcs comOnUart1RunMsgReceived_enterIdle
; could not add msg
rcall NET_Buffer_ReleaseByNum ; (R16, X)
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
rcall NET_Interface_IncCounter16 ; (R24, R25)
comOnUart1RunMsgReceived_enterIdle:
ldi r17, UART_HW_READMODE_IDLE
std Y+UART_HW_IFACE_OFFS_READMODE, r17 ; set read mode
ret
; @end ; @end