From ebce002614c7cabfa9449337516dfc881ce56a38 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sun, 23 Mar 2025 01:08:33 +0100 Subject: [PATCH] avr: share code. --- avr/devices/t03/defs.asm | 2 +- avr/devices/t03/main.asm | 26 +++++-------------- avr/modules/network/main.asm | 2 ++ avr/modules/uart_hw/comonuart0.asm | 14 +---------- avr/modules/uart_hw/lowlevel.asm | 40 ++++++++++++++++++++++++++++++ avr/modules/uart_hw/ttyonuart1.asm | 16 +----------- 6 files changed, 51 insertions(+), 49 deletions(-) diff --git a/avr/devices/t03/defs.asm b/avr/devices/t03/defs.asm index dc92deb..5781823 100644 --- a/avr/devices/t03/defs.asm +++ b/avr/devices/t03/defs.asm @@ -1,5 +1,5 @@ ; *************************************************************************** -; copyright : (C) 2024 by Martin Preuss +; copyright : (C) 2025 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** diff --git a/avr/devices/t03/main.asm b/avr/devices/t03/main.asm index 2251278..2258241 100644 --- a/avr/devices/t03/main.asm +++ b/avr/devices/t03/main.asm @@ -25,8 +25,9 @@ .equ clock=8000000 ; Define the clock frequency ;.equ SEND_DEVICE_EVERY = 3000 -.equ SEND_DEVICE_EVERY = 520 ; every 52s -.equ SEND_STATS_EVERY = 240 ; every 24s +.equ SEND_DEVICE_EVERY = 3000 ; every 5mins +.equ SEND_STATS_EVERY = 3100 ; about every 5mins +;.equ SEND_STATS_EVERY = 300 ; every 30s .equ SEND_DEBUG_EVERY = 110 .nolist @@ -73,11 +74,11 @@ ;#define MODULES_MOTION -.equ NET_BUFFERS_NUM = 6 +.equ NET_BUFFERS_NUM = 8 .equ NET_BUFFERS_SIZE = 32 -.equ UART_HW_MSGNUMINBUF_SIZE = 6 -.equ UART_HW_MSGNUMOUTBUF_SIZE = 6 +.equ UART_HW_MSGNUMINBUF_SIZE = 8 +.equ UART_HW_MSGNUMOUTBUF_SIZE = 8 ; *************************************************************************** @@ -499,21 +500,6 @@ checkRecvdMsg: rcall NET_PeekNextIncomingMsgNum ; check read queue (bufNum->r16) brcc checkRecvdMsg_end ; no msg, jmp 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 andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT) rcall reverseInterfaceNum diff --git a/avr/modules/network/main.asm b/avr/modules/network/main.asm index 301f8e0..7ae2ae6 100644 --- a/avr/modules/network/main.asm +++ b/avr/modules/network/main.asm @@ -20,11 +20,13 @@ ; @clobbers R16, R17, X NET_Init: +#if 0 ldi xh, HIGH(networkDataBegin) ldi xl, LOW(networkDataBegin) clr r16 ldi r17, (networkDataEnd-networkDataBegin) rcall Utils_FillSram ; (R17, X) +#endif rcall NET_Buffer_Init ; (R16, R17, X) diff --git a/avr/modules/uart_hw/comonuart0.asm b/avr/modules/uart_hw/comonuart0.asm index 0cc9bd0..2bb76f7 100644 --- a/avr/modules/uart_hw/comonuart0.asm +++ b/avr/modules/uart_hw/comonuart0.asm @@ -512,19 +512,7 @@ comOnUart0RunSkipping_end: ; @clobbers R16 (R17, R18, R24, R25) comOnUart0RunMsgReceived: - ldi r17, 0xff - 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 + rjmp UART_HW_Interface_HandleMsgReceived ; @end diff --git a/avr/modules/uart_hw/lowlevel.asm b/avr/modules/uart_hw/lowlevel.asm index 8c2fc81..f12d89b 100644 --- a/avr/modules/uart_hw/lowlevel.asm +++ b/avr/modules/uart_hw/lowlevel.asm @@ -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 + + + diff --git a/avr/modules/uart_hw/ttyonuart1.asm b/avr/modules/uart_hw/ttyonuart1.asm index d2a1fc8..a6ceebd 100644 --- a/avr/modules/uart_hw/ttyonuart1.asm +++ b/avr/modules/uart_hw/ttyonuart1.asm @@ -395,21 +395,7 @@ ttyOnUart1RunSkipping_end: ; @clobbers R16 (R17, R18, R24, R25) ttyOnUart1RunMsgReceived: - ldi r17, 0xff - 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 + rjmp UART_HW_Interface_HandleMsgReceived ; @end