avr: added UART_HW_IFACE_OFFS_WRITEMSGRINGBUF
This commit is contained in:
@@ -58,7 +58,8 @@
|
||||
.equ UART_HW_IFACE_OFFS_WRITEBUFPOSHIGH = 17
|
||||
.equ UART_HW_IFACE_OFFS_WRITEBUFUSED = 18
|
||||
.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
|
||||
|
||||
|
||||
|
||||
@@ -66,6 +66,14 @@ UART_HW_InterfaceInit:
|
||||
ldi r16, UART_HW_WRITEMODE_IDLE
|
||||
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
|
||||
; @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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user