avr: added UART_HW_IFACE_OFFS_WRITEMSGRINGBUF

This commit is contained in:
Martin Preuss
2025-02-12 00:37:24 +01:00
parent 35f2c2bd7e
commit 2a776ca895
2 changed files with 151 additions and 1 deletions

View File

@@ -58,7 +58,8 @@
.equ UART_HW_IFACE_OFFS_WRITEBUFPOSHIGH = 17 .equ UART_HW_IFACE_OFFS_WRITEBUFPOSHIGH = 17
.equ UART_HW_IFACE_OFFS_WRITEBUFUSED = 18 .equ UART_HW_IFACE_OFFS_WRITEBUFUSED = 18
.equ UART_HW_IFACE_OFFS_WRITEBUFLEFT = 19 .equ UART_HW_IFACE_OFFS_WRITEBUFLEFT = 19
.equ UART_HW_IFACE_OFFS_WRITEMSGRINGBUF = 20
.equ UART_HW_IFACE_SIZE = UART_HW_IFACE_OFFS_WRITEBUFLEFT+1 .equ UART_HW_IFACE_SIZE = UART_HW_IFACE_OFFS_WRITEMSGRINGBUF+RINGBUFFERY_SIZE+UART_HW_IFACE_OUTMSGBUF_SIZE

View File

@@ -66,6 +66,14 @@ UART_HW_InterfaceInit:
ldi r16, UART_HW_WRITEMODE_IDLE ldi r16, UART_HW_WRITEMODE_IDLE
std Y+UART_HW_IFACE_OFFS_WRITEMODE, r16 std Y+UART_HW_IFACE_OFFS_WRITEMODE, r16
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEMSGRINGBUF
ldi r16, UART_HW_IFACE_OUTMSGBUF_SIZE
rcall RingBufferY_Init
pop yh
pop yl
ret ret
; @end ; @end
@@ -119,5 +127,146 @@ UART_HW_Interface_SetWriteBuffer:
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfaceAddOutgoingMsgNum @global
;
; @return CFLAG on success, cleared on error
; @param r16 byte to write
; @param Y pointer to start of interface data
; @clobbers R17, R18, X
UART_HW_InterfaceAddOutgoingMsgNum:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEMSGRINGBUF
rcall uartHwRingBufferWriteGuarded ; R17, R18, X
pop yh
pop yl
ret
; @end
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfaceGetNextOutgoingMsgNum @global
;
; @return CFLAG on success, cleared on error
; @return R16 byte read
; @param Y pointer to start of interface data
; @clobbers R17, R18, X
UART_HW_InterfaceGetNextOutgoingMsgNum:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEMSGRINGBUF
rcall uartHwRingBufferReadGuarded ; R17, R18, X
pop yh
pop yl
ret
; @end
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfacePeekNextOutgoingMsgNum @global
;
; @return CFLAG on success, cleared on error
; @return R16 byte read
; @param Y pointer to start of interface data
; @clobbers R17, R18, X
UART_HW_InterfacePeekNextOutgoingMsgNum:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEMSGRINGBUF
rcall uartHwRingBufferPeekGuarded ; R17, R18, X
pop yh
pop yl
ret
; @end
; ---------------------------------------------------------------------------
; @routine uartHwRingBufferReadGuarded
;
; @return CFLAG on success, cleared on error
; @param r16 byte to write
; @param Y pointer to start of interface data
; @clobbers R17, R18, X
uartHwRingBufferReadGuarded:
push r15
in r15, SREG
cli
rcall RingBufferY_ReadByte ; R17, R18, X
brcc uartHwRingBufferReadGuarded_error
out SREG, r15
pop r15
sec
ret
uartHwRingBufferReadGuarded_error:
out SREG, r15
pop r15
clc
ret
; @end
; ---------------------------------------------------------------------------
; @routine uartHwRingBufferPeekGuarded
;
; @return CFLAG on success, cleared on error
; @param r16 byte to write
; @param Y pointer to start of interface data
; @clobbers R17, R18, X
uartHwRingBufferPeekGuarded:
push r15
in r15, SREG
cli
rcall RingBufferY_PeekByte ; R17, R18, X
brcc uartHwRingBufferPeekGuarded_error
out SREG, r15
pop r15
sec
ret
uartHwRingBufferPeekGuarded_error:
out SREG, r15
pop r15
clc
ret
; @end
; ---------------------------------------------------------------------------
; @routine uartHwRingBufferWriteGuarded
;
; @return CFLAG on success, cleared on error
; @param r16 byte to write
; @param Y pointer to start of interface data
; @clobbers R17, R18, X
uartHwRingBufferWriteGuarded:
push r15
in r15, SREG
cli
rcall RingBufferY_WriteByte ; R17, R18, X
brcc uartHwRingBufferWriteGuarded_error
out SREG, r15
pop r15
sec
ret
uartHwRingBufferWriteGuarded_error:
out SREG, r15
pop r15
clc
ret
; @end