avr: added RingBufferY_PeekByte
This commit is contained in:
@@ -92,6 +92,43 @@ l_end:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro m_ringbuffer_y_peekbyte
|
||||
;
|
||||
; @param Y base address (for "LDD Y+nn" and "STD Y+nn")
|
||||
; @param %0 offset to Y to access maxBytes variable (for "LDD Y+nn" and "STD Y+nn")
|
||||
; @param %1 offset to Y to access usedBytes
|
||||
; @param %2 offset to Y to access readPos variable
|
||||
; @param %3 offset to Y to access writePos variable
|
||||
; @param %4 offset to Y to access buffer
|
||||
; @return CFLAG set if okay, cleared on error (i.e. buffer full)
|
||||
; @return R16 byte read
|
||||
; @clobbers R17, R18, X
|
||||
|
||||
.macro m_ringbuffer_y_peekbyte
|
||||
ldd r18, Y+@0 ; maxBytes
|
||||
ldd r17, Y+@1 ; usedBytes
|
||||
tst r17
|
||||
clc
|
||||
breq l_end
|
||||
dec r17
|
||||
std Y+@1, r17 ; usedBytes
|
||||
ldd r17, Y+@2 ; readPos
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
adiw xh:xl, @4
|
||||
add xl, r17
|
||||
adc xh, r17
|
||||
sub xh, r17
|
||||
ld r16, X
|
||||
std Y+@2, r17 ; readPos
|
||||
sec
|
||||
l_end:
|
||||
.endmacro
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro m_ringbuffer_y_reset
|
||||
;
|
||||
|
||||
@@ -52,9 +52,9 @@ RingBufferY_WriteByte:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro m_ringbuffer_y_readbyte
|
||||
; @routine RingBufferY_ReadByte
|
||||
;
|
||||
; @param Y base address of ringbuffer struct
|
||||
; @param Y base address of ringbuffer struct
|
||||
; @return CFLAG set if okay, cleared on error (i.e. buffer empty)
|
||||
; @return R16 byte read
|
||||
; @clobbers R17, R18, X
|
||||
@@ -71,6 +71,31 @@ RingBufferY_ReadByte:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine RingBufferY_PeekByte
|
||||
;
|
||||
; @param Y base address (for "LDD Y+nn" and "STD Y+nn")
|
||||
; @param %0 offset to Y to access maxBytes variable (for "LDD Y+nn" and "STD Y+nn")
|
||||
; @param %1 offset to Y to access usedBytes
|
||||
; @param %2 offset to Y to access readPos variable
|
||||
; @param %3 offset to Y to access writePos variable
|
||||
; @param %4 offset to Y to access buffer
|
||||
; @return CFLAG set if okay, cleared on error (i.e. buffer empty)
|
||||
; @return R16 byte read
|
||||
; @clobbers R17, R18, X
|
||||
|
||||
RingBufferY_PeekByte:
|
||||
m_ringbuffer_y_peekbyte \
|
||||
RINGBUFFERY_OFFS_MAXSIZE, \
|
||||
RINGBUFFERY_OFFS_USED, \
|
||||
RINGBUFFERY_OFFS_READPOS, \
|
||||
RINGBUFFERY_OFFS_WRITEPOS, \
|
||||
RINGBUFFERY_OFFS_DATA
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @macro m_ringbuffer_y_reset
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user