avr: more work on hardware-based UART module.

This commit is contained in:
Martin Preuss
2025-01-19 15:46:21 +01:00
parent c390b1059c
commit ecb2d85ea2
5 changed files with 534 additions and 121 deletions

View File

@@ -57,35 +57,33 @@ UART_HW_InterfaceInit:
clr r16
rcall Utils_FillSram ; (R17, X)
m_ringbuffer_y_reset UART_HW_IFACE_READBUF_SIZE, \
UART_HW_IFACE_OFFS_RINGBUF_USED, \
UART_HW_IFACE_OFFS_RINGBUF_RDPOS, \
UART_HW_IFACE_OFFS_RINGBUF_WRPOS, \
UART_HW_IFACE_OFFS_RINGBUF_DATA
m_ringbuffer_y_reset UART_HW_IFACE_MSGIDBUF_SIZE, \
UART_HW_IFACE_OFFS_MSGIDBUF_USED, \
UART_HW_IFACE_OFFS_MSGIDBUF_RDPOS, \
UART_HW_IFACE_OFFS_MSGIDBUF_WRPOS, \
UART_HW_IFACE_OFFS_MSGIDBUF_DATA
ldi r16, 0xff
std Y+UART_HW_IFACE_OFFS_READBUFFERNUM, r16
std Y+UART_HW_IFACE_OFFS_WRITEBUFFERNUM, r16
UART_HW_IFACE_OFFS_READBUF_USED, \
UART_HW_IFACE_OFFS_READBUF_RDPOS, \
UART_HW_IFACE_OFFS_READBUF_WRPOS, \
UART_HW_IFACE_OFFS_READBUF_DATA
m_ringbuffer_y_reset UART_HW_IFACE_WRITEBUF_SIZE, \
UART_HW_IFACE_OFFS_WRITEBUF_USED, \
UART_HW_IFACE_OFFS_WRITEBUF_RDPOS, \
UART_HW_IFACE_OFFS_WRITEBUF_WRPOS, \
UART_HW_IFACE_OFFS_WRITEBUF_DATA
ret
; @end
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfaceAddReadByte
; @routine UART_HW_InterfaceWriteToReadBuffer @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_InterfaceAddReadByte:
UART_HW_InterfaceWriteToReadBuffer:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_RINGBUF_MAX
adiw yh:yl, UART_HW_IFACE_OFFS_READBUF
rcall RingBufferY_WriteByte ; R17, R18, X
pop yh
pop yl
@@ -95,17 +93,17 @@ UART_HW_InterfaceAddReadByte:
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfaceGetNextReadByte
; @routine UART_HW_InterfaceReadFromReadBuffer @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_InterfaceGetNextReadByte:
UART_HW_InterfaceReadFromReadBuffer:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_RINGBUF_MAX
adiw yh:yl, UART_HW_IFACE_OFFS_READBUF
rcall RingBufferY_ReadByte ; R17, R18, X
pop yh
pop yl
@@ -114,3 +112,46 @@ UART_HW_InterfaceGetNextReadByte:
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfaceWriteToWriteBuffer @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_InterfaceWriteToWriteBuffer:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEBUF
rcall RingBufferY_WriteByte ; R17, R18, X
pop yh
pop yl
ret
; @end
; ---------------------------------------------------------------------------
; @routine UART_HW_InterfaceReadFromWriteBuffer @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_InterfaceReadFromWriteBuffer:
push yl
push yh
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEBUF
rcall RingBufferY_ReadByte ; R17, R18, X
pop yh
pop yl
ret
; @end