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_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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user