more work on network interface.

This commit is contained in:
Martin Preuss
2025-04-21 00:39:19 +02:00
parent ba55a2898d
commit 77e573192e
2 changed files with 72 additions and 26 deletions

View File

@@ -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

View File

@@ -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