From 77e573192e79b7da3f0bae4733586cd8f1c7a9cb Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 21 Apr 2025 00:39:19 +0200 Subject: [PATCH] more work on network interface. --- avr/modules/network/defs.asm | 57 ++++++++++++++++++++--------------- avr/modules/network/iface.asm | 41 ++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/avr/modules/network/defs.asm b/avr/modules/network/defs.asm index 1f4de0c..bdc2be1 100644 --- a/avr/modules/network/defs.asm +++ b/avr/modules/network/defs.asm @@ -7,49 +7,56 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** + ; defs .equ NET_MSGNUMINBUF_SIZE = 4 ; max buffer nums in ringbuffer (global incoming) .equ NET_IFACE_OUTMSGBUF_SIZE = 4 ; max buffer nums in ringbuffer (per interface outbound) -.equ NET_IFACE_BUFFER_INUSE_BIT = 7 -.equ NET_IFACE_BUFFER_IFACENUM1_BIT = 1 -.equ NET_IFACE_BUFFER_IFACENUM0_BIT = 0 +.equ NET_IFACE_BUFFER_INUSE_BIT = 7 +.equ NET_IFACE_BUFFER_IFACENUM1_BIT = 1 +.equ NET_IFACE_BUFFER_IFACENUM0_BIT = 0 ; interface generic data .equ NET_IFACE_OFFS_IFACENUM = 0 ; interface number (put into received messages) .equ NET_IFACE_OFFS_ADDRESS = 1 -.equ NET_IFACE_OFFS_STATUS = 2 -.equ NET_IFACE_OFFS_READTIMER = 3 -.equ NET_IFACE_OFFS_WRITETIMER = 4 +.equ NET_IFACE_OFFS_RANGE_BEGIN = 2 ; used for address setup protocol +.equ NET_IFACE_OFFS_RANGE_END = 3 ; used for address setup protocol +.equ NET_IFACE_OFFS_STATUS = 4 ; used for address setup protocol +.equ NET_IFACE_OFFS_STATETIMER = 5 ; used for address setup protocol +.equ NET_IFACE_OFFS_READTIMER = 6 +.equ NET_IFACE_OFFS_WRITETIMER = 7 +.equ NET_IFACE_OFFS_LASTMSGID_LOW = 8 +.equ NET_IFACE_OFFS_LASTMSGID_HIGH = 9 ; receiption stats -.equ NET_IFACE_OFFS_PACKETSIN_LOW = 8 -.equ NET_IFACE_OFFS_PACKETSIN_HIGH = 9 -.equ NET_IFACE_OFFS_ERR_CONTENT_LOW = 10 -.equ NET_IFACE_OFFS_ERR_CONTENT_HIGH = 11 -.equ NET_IFACE_OFFS_ERR_IO_LOW = 12 -.equ NET_IFACE_OFFS_ERR_IO_HIGH = 13 -.equ NET_IFACE_OFFS_ERR_NOBUF_LOW = 14 -.equ NET_IFACE_OFFS_ERR_NOBUF_HIGH = 15 -.equ NET_IFACE_OFFS_HANDLED_LOW = 16 -.equ NET_IFACE_OFFS_HANDLED_HIGH = 17 -.equ NET_IFACE_OFFS_ERR_MISSED_LOW = 18 -.equ NET_IFACE_OFFS_ERR_MISSED_HIGH = 19 +.equ NET_IFACE_OFFS_PACKETSIN_LOW = 10 +.equ NET_IFACE_OFFS_PACKETSIN_HIGH = 11 +.equ NET_IFACE_OFFS_ERR_CONTENT_LOW = 12 +.equ NET_IFACE_OFFS_ERR_CONTENT_HIGH = 13 +.equ NET_IFACE_OFFS_ERR_IO_LOW = 14 +.equ NET_IFACE_OFFS_ERR_IO_HIGH = 15 +.equ NET_IFACE_OFFS_ERR_NOBUF_LOW = 16 +.equ NET_IFACE_OFFS_ERR_NOBUF_HIGH = 17 +.equ NET_IFACE_OFFS_HANDLED_LOW = 18 +.equ NET_IFACE_OFFS_HANDLED_HIGH = 19 +.equ NET_IFACE_OFFS_ERR_MISSED_LOW = 20 +.equ NET_IFACE_OFFS_ERR_MISSED_HIGH = 21 ; send stats -.equ NET_IFACE_OFFS_PACKETSOUT_LOW = 20 -.equ NET_IFACE_OFFS_PACKETSOUT_HIGH = 21 -.equ NET_IFACE_OFFS_ERR_COLLISIONS_LOW = 22 -.equ NET_IFACE_OFFS_ERR_COLLISIONS_HIGH = 23 -.equ NET_IFACE_OFFS_ERR_BUSY_LOW = 24 -.equ NET_IFACE_OFFS_ERR_BUSY_HIGH = 25 +.equ NET_IFACE_OFFS_PACKETSOUT_LOW = 22 +.equ NET_IFACE_OFFS_PACKETSOUT_HIGH = 23 +.equ NET_IFACE_OFFS_ERR_COLLISIONS_LOW = 24 +.equ NET_IFACE_OFFS_ERR_COLLISIONS_HIGH = 25 +.equ NET_IFACE_OFFS_ERR_BUSY_LOW = 26 +.equ NET_IFACE_OFFS_ERR_BUSY_HIGH = 27 -.equ NET_IFACE_OFFS_OUTMSGRINGBUF = 26 ; RINGBUFFERY_SIZE+UART_HW_IFACE_OUTMSGBUF_SIZE +.equ NET_IFACE_OFFS_OUTMSGRINGBUF = 28 ; RINGBUFFERY_SIZE+UART_HW_IFACE_OUTMSGBUF_SIZE .equ NET_IFACE_SIZE = NET_IFACE_OFFS_OUTMSGRINGBUF+RINGBUFFERY_SIZE+NET_IFACE_OUTMSGBUF_SIZE + diff --git a/avr/modules/network/iface.asm b/avr/modules/network/iface.asm index b0b5cc2..33c6434 100644 --- a/avr/modules/network/iface.asm +++ b/avr/modules/network/iface.asm @@ -8,7 +8,6 @@ ; *************************************************************************** - .cseg @@ -38,6 +37,23 @@ NET_Interface_Init: +; --------------------------------------------------------------------------- +; @routine NET_Interface_GetNextMsgId @global +; +; @param Y pointer to interface data in SRAM +; @clobbers none + +NET_Interface_GetNextMsgId: + ldd r24, Y+NET_IFACE_OFFS_LASTMSGID_LOW + ldd r25, Y+NET_IFACE_OFFS_LASTMSGID_HIGH + adiw r25:r24, 1 + std Y+NET_IFACE_OFFS_LASTMSGID_LOW, r24 + std Y+NET_IFACE_OFFS_LASTMSGID_HIGH, r25 + ret +; @end + + + ; --------------------------------------------------------------------------- ; @routine NET_Interface_AddOutgoingMsgNum @global ; @@ -182,3 +198,26 @@ NET_Interface_SetIfaceNumInBuffer: +; --------------------------------------------------------------------------- +; @routine NET_Interface_Periodically @global +; +; @param Y pointer to start of interface data +; @clobbers R16 + +NET_Interface_Periodically: + ldd r16, Y+NET_IFACE_OFFS_READTIMER + inc r16 + breq NET_Interface_Periodically_l1 + std Y+NET_IFACE_OFFS_READTIMER, r16 +NET_Interface_Periodically_l1: + ldd r16, Y+NET_IFACE_OFFS_WRITETIMER + inc r16 + breq NET_Interface_Periodically_l2 + std Y+NET_IFACE_OFFS_WRITETIMER, r16 +NET_Interface_Periodically_l2: + ret +; @end + + + +