avr: more work on hardware based uart module.
This commit is contained in:
@@ -27,7 +27,7 @@ UART_HW_Init:
|
||||
rcall Utils_FillSram
|
||||
|
||||
rcall UART_HW_FixedBuffers_Init
|
||||
|
||||
|
||||
ldi r16, UART_HW_MSGNUMINBUF_SIZE
|
||||
ldi yl, LOW(uartHw_ringBufferMsgNumIn)
|
||||
ldi yh, HIGH(uartHw_ringBufferMsgNumIn)
|
||||
@@ -37,7 +37,8 @@ UART_HW_Init:
|
||||
ldi yl, LOW(uartHw_ringBufferMsgNumOut)
|
||||
ldi yh, HIGH(uartHw_ringBufferMsgNumOut)
|
||||
rcall RingBufferY_Init
|
||||
|
||||
|
||||
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
@@ -67,6 +68,9 @@ UART_HW_InterfaceInit:
|
||||
UART_HW_IFACE_OFFS_WRITEBUF_RDPOS, \
|
||||
UART_HW_IFACE_OFFS_WRITEBUF_WRPOS, \
|
||||
UART_HW_IFACE_OFFS_WRITEBUF_DATA
|
||||
ldi r16, 0xff
|
||||
std Y+UART_HW_IFACE_OFFS_READMSG_BUFNUM, r16
|
||||
std Y+UART_HW_IFACE_OFFS_WRITEMSG_BUFNUM, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -84,7 +88,7 @@ UART_HW_InterfaceWriteToReadBuffer:
|
||||
push yl
|
||||
push yh
|
||||
adiw yh:yl, UART_HW_IFACE_OFFS_READBUF
|
||||
rcall RingBufferY_WriteByte ; R17, R18, X
|
||||
rcall uartHwRingBufferWriteGuarded ; R17, R18, X
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -104,7 +108,7 @@ UART_HW_InterfaceReadFromReadBuffer:
|
||||
push yl
|
||||
push yh
|
||||
adiw yh:yl, UART_HW_IFACE_OFFS_READBUF
|
||||
rcall RingBufferY_ReadByte ; R17, R18, X
|
||||
rcall uartHwRingBufferReadGuarded ; R17, R18, X
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -124,7 +128,7 @@ UART_HW_InterfaceWriteToWriteBuffer:
|
||||
push yl
|
||||
push yh
|
||||
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEBUF
|
||||
rcall RingBufferY_WriteByte ; R17, R18, X
|
||||
rcall uartHwRingBufferWriteGuarded ; R17, R18, X
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -144,7 +148,7 @@ UART_HW_InterfaceReadFromWriteBuffer:
|
||||
push yl
|
||||
push yh
|
||||
adiw yh:yl, UART_HW_IFACE_OFFS_WRITEBUF
|
||||
rcall RingBufferY_ReadByte ; R17, R18, X
|
||||
rcall uartHwRingBufferReadGuarded ; R17, R18, X
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -152,6 +156,67 @@ UART_HW_InterfaceReadFromWriteBuffer:
|
||||
|
||||
|
||||
|
||||
UART_HW_Interface_Run:
|
||||
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @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 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