avr: more work on ardware uart code.

This commit is contained in:
Martin Preuss
2025-02-09 21:06:31 +01:00
parent 601559ca6e
commit 703f8042f9
8 changed files with 698 additions and 97 deletions

View File

@@ -12,19 +12,19 @@
; ---------------------------------------------------------------------------
; @routine UART_HW_Interface_RunWrite @global
; @routine UART_HW_Interface_RunWriting @global
;
; Get messages via @ref UART_HW_GetNextOutgoingMsgNum and fill them into
; the outbound ringbuffer of this interface.
; Write current message to ringbuffer.
;
; @param Y pointer to start of interface data
; @clobbers r16, r19, X (R17, R18, R20, R21)
UART_HW_Interface_RunWrite:
UART_HW_Interface_RunWriting:
ldd r19, Y+UART_HW_IFACE_OFFS_WRITEMSG_BUFNUM
cpi r19, 0xff
breq UART_HW_Interface_RunWrite_end ; nothing to do
cpi r19, 0xff ; invalid buffer number?
breq UART_HW_Interface_RunWrite_end ; yes, invalid, nothing to do
UART_HW_Interface_RunWrite_haveMsg:
; there are still bytes left in the buffer, send them
ldd r20, Y+UART_HW_IFACE_OFFS_WRITEMSG_LEFT
rcall uartHwWriteUptoNumBytes ; (r16, r17, r18, r20, r21, X)
ldd r16, Y+UART_HW_IFACE_OFFS_WRITEMSG_LEFT
@@ -33,8 +33,12 @@ UART_HW_Interface_RunWrite_haveMsg:
; message completely sent to interface, release buffer
ldd r16, Y+UART_HW_IFACE_OFFS_WRITEMSG_BUFNUM
rcall UART_HW_FixedBuffers_ReleaseByNum
ldi r16, 0xff ; reset buffer number
ldi r16, 0xff ; set invalid buffer number
std Y+UART_HW_IFACE_OFFS_WRITEMSG_BUFNUM, r16
ldd r16, Y+UART_HW_IFACE_OFFS_MODE
cbr r16, UART_HW_MODE_WRITEMASK
ori r16, UART_HW_MODE_WAITBUFFEREMPTY
std Y+UART_HW_IFACE_OFFS_MODE, r16
UART_HW_Interface_RunWrite_end:
ret
; @end
@@ -47,6 +51,7 @@ UART_HW_Interface_RunWrite_end:
; Set given fixed buffer as source for @ref UART_HW_Interface_RunWrite.
;
; @param r16 buffer num
; @param Y pointer to start of interface data
; @clobbers r16, r19, X
UART_HW_Interface_WriteSetBuffer: